diff --git a/web/assets/css/custom.css b/web/assets/css/custom.css index 308d24a6..65a5181d 100644 --- a/web/assets/css/custom.css +++ b/web/assets/css/custom.css @@ -680,7 +680,7 @@ style attribute { .dark .ant-table-row-expand-icon { color: #fff; background-color: #fff0; - border-color: #9ea2a8; + border-color: rgb(255 255 255 / 20%); } .dark .ant-table-row-expand-icon:hover { @@ -1099,3 +1099,16 @@ li.ant-select-dropdown-menu-item:empty:after { max-height: 400px; overflow-y: auto; } + +.ant-table-row-expand-icon { + border-radius: 6px; +} + +.qr-bg { + background-color: #fff; + display: flex; + justify-content: center; + align-content: center; + padding: 0.5rem; + border-radius: 1rem; +} diff --git a/web/entity/entity.go b/web/entity/entity.go index d00f51e1..69e5b2d4 100644 --- a/web/entity/entity.go +++ b/web/entity/entity.go @@ -72,8 +72,8 @@ func (s *AllSetting) CheckValid() error { return common.NewError("Sub port is not a valid port:", s.SubPort) } - if s.SubPort == s.WebPort { - return common.NewError("Sub and Web could not use same port:", s.SubPort) + if (s.SubPort == s.WebPort) && (s.WebListen == s.SubListen) { + return common.NewError("Sub and Web could not use same ip:port, ", s.SubListen, ":", s.SubPort, " & ", s.WebListen, ":", s.WebPort) } if s.WebCertFile != "" || s.WebKeyFile != "" { diff --git a/web/html/common/qrcode_modal.html b/web/html/common/qrcode_modal.html index 668f426c..3c4fd929 100644 --- a/web/html/common/qrcode_modal.html +++ b/web/html/common/qrcode_modal.html @@ -9,12 +9,12 @@ {{ i18n "pages.inbounds.client" }} @@ -87,4 +87,4 @@ }); -{{end}} \ No newline at end of file +{{end}} diff --git a/web/html/login.html b/web/html/login.html index 62be1478..3ec9da2e 100644 --- a/web/html/login.html +++ b/web/html/login.html @@ -56,35 +56,12 @@ opacity: 1; } } - .wave { - opacity: 0.6; - position: absolute; - top: 80%; - left: 60%; - width: 6000px; - height: 6000px; - background-color: rgba(0, 135, 113, 0.08); - margin-left: -3000px; - transform-origin: 50% 50%; - pointer-events: none; - rotate: 115deg; - } - .wave2 { - opacity: 0.4; - rotate: 105deg; - } - .wave3 { - opacity: 0.2; - rotate: 62deg; - } .under { - background-color: #dbf5ed; - } - .dark .wave { - background: rgb(10 117 87 / 20%); + background-color: #c7ebe2; + z-index: 0; } .dark .under { - background-color: #101828; + background-color: #0f2d32; } .dark #login { background-color: #151f31; @@ -95,7 +72,6 @@ .ant-form-item { margin-bottom: 16px; } - .ant-btn-primary-login { width: 100%; } @@ -147,8 +123,9 @@ background-origin: border-box; background-clip: padding-box, border-box; background-size: 300%; - transition: all 0.5s ease; + transition: all 0.3s cubic-bezier(.645,.045,.355,1); width: 100%; + z-index: 1; } .dark .wave-btn-bg:hover {animation: wave-btn-tara 4s ease infinite;} .dark .wave-btn-bg-cl { @@ -206,14 +183,84 @@ background-position-x: 0; box-shadow: none; } + .waves-header { + position: fixed; + width: 100%; + text-align: center; + background-color: #dbf5ed; + color: white; + z-index: -1; + } + .dark .waves-header { + background-color: #101828; + } + .waves-inner-header { + height: 50vh; + width: 100%; + margin: 0; + padding: 0; + } + .waves { + position: relative; + width: 100%; + height: 15vh; + margin-bottom: -5px; /*Fix for safari gap*/ + min-height: 100px; + max-height: 150px; + } + .parallax > use { + animation: move-forever 25s cubic-bezier(0.55, 0.5, 0.45, 0.5) infinite; + } + .dark .parallax > use { + fill: rgb(10 117 87 / 20%); + } + .parallax > use:nth-child(1) { + animation-delay: -2s; + animation-duration: 7s; + opacity: 0.2; + } + .parallax > use:nth-child(2) { + animation-delay: -3s; + animation-duration: 10s; + opacity: 0.4; + } + .parallax > use:nth-child(3) { + animation-delay: -4s; + animation-duration: 13s; + opacity: 0.6; + } + @keyframes move-forever { + 0% { + transform: translate3d(-90px, 0, 0); + } + 100% { + transform: translate3d(85px, 0, 0); + } + } + @media (max-width: 768px) { + .waves { + height: 40px; + min-height: 40px; + } + } -
-
-
+
+
+ + + + + + + + + + +
@@ -243,7 +290,7 @@ -
+