Files

4425 lines
115 KiB
CSS

/**
* Luxe is a HTML5 theme for LuCI. It is based on luci-theme-material
*
* INDO-WRT ( Internet Networking Of DD-WRT & Openwrt )
*
* luci-theme-alpha
* derisamedia
*
* luci-theme-luxe
* Copyright 2026 xidz_x
*
* luci-theme-material
* Copyright 2015 Lutty Yang <lutty@wcan.in>
*
* Licensed to the public under the Apache License 2.0
*/
@import url("luxe.css");
@font-face {
font-family: 'Nunito';
src: url('../fonts/nunito-400.woff2') format('woff2'),
url('../fonts/nunito-400.woff') format('woff');
font-weight: 400;
font-style: normal;
font-display: block;
}
@font-face {
font-family: 'Nunito';
src: url('../fonts/nunito-500.woff2') format('woff2'),
url('../fonts/nunito-500.woff') format('woff');
font-weight: 500;
font-style: normal;
font-display: block;
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
-webkit-tap-highlight-color: transparent;
}
html {
overflow-y: hidden;
scroll-behavior: smooth;
}
html,
body {
font-family: 'Nunito', sans-serif;
font-weight: 400;
height: 100%;
margin: 0;
padding: 0;
}
body {
font-size: 0.9rem;
line-height: 1.4;
background-color: var(--bg);
color: var(--textColor);
scroll-behavior: smooth;
}
::-webkit-scrollbar,
*::-webkit-scrollbar {
width: 6px;
height: 6px;
}
::-webkit-scrollbar-track,
::-webkit-scrollbar-corner,
*::-webkit-scrollbar-track,
*::-webkit-scrollbar-corner {
background-color: transparent !important;
}
::-webkit-scrollbar-thumb,
*::-webkit-scrollbar-thumb {
background-color: var(--activeColor) !important;
border-radius: 10px !important;
border: 1px solid transparent;
background-clip: padding-box;
}
.main-left::-webkit-scrollbar-track {
background-color: transparent !important;
margin: 20px 0 !important;
}
.h1,
.h2,
.h3,
.h4,
.h5,
.h6,
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: inherit;
font-weight: 500;
line-height: 1.25 !important;
color: inherit;
}
h1 {
font-size: 1.85rem;
padding-bottom: 5px;
border-bottom: none;
}
h2 {
font-size: 1.65rem;
padding-bottom: 5px;
border-bottom: none;
margin: 0.5rem 0 0;
text-align: center;
opacity: 0;
animation: slide-in-right 0.6s cubic-bezier(0.25, 1, 0.5, 1) forwards;
}
h3 {
font-size: 1.35rem;
padding-bottom: 5px;
margin: 0.5rem 0 0;
}
h4 {
font-size: 1.15rem;
padding-bottom: 5px;
margin: 0.5rem 0 0;
}
h5 {
font-size: 1rem;
padding-bottom: 5px;
margin: 0.5rem 0 0;
}
pre {
overflow: auto;
}
code {
font-size: 0.95rem;
font-size-adjust: 0.35;
color: var(--codeColor);
border-radius: 0.4rem;
background: var(--codeBg);
padding: 1px 3px;
}
abbr {
cursor: help;
text-decoration: underline;
color: var(--activeColor);
}
hr {
opacity: 0.1;
border-color: var(--cbilineColor);
margin: 1rem 0;
}
small {
font-size: 90%;
line-height: 1.5;
white-space: normal;
}
.center,
.center::before {
text-align: center !important;
}
.left,
.left::before {
text-align: left !important;
}
.right,
.right::before {
text-align: right !important;
}
.top {
align-self: flex-start !important;
vertical-align: top !important;
}
.bottom {
align-self: flex-end !important;
vertical-align: bottom !important;
}
.inline {
display: inline;
}
.nowrap:not(.td) {
white-space: nowrap;
}
.hidden,
.showSide,
[data-page^="admin-system-commands"] .panel-title,
[data-page^="command-cfg"] .mobile-hide,
[data-page^="command-cfg"] .showSide {
display: none;
}
.pull-right {
float: right;
}
.pull-left,
.cbi-page-actions .cbi-button-link:first-child {
float: left;
}
[disabled="disabled"] {
pointer-events: none;
}
header,
.main {
position: absolute;
width: 100%;
}
header {
position: fixed;
z-index: 2000;
width: 100%;
height: 4rem;
color: var(--textColor);
background: var(--sectionbgColor);
border-bottom: var(--sectionBorder);
box-shadow: var(--neo-shadow, var(--neon-shadow, var(--neox-header-shadow, var(--glaze-shadow, var(--onyx-shadow, 0 2px 5px rgba(0, 0, 0, 0.26))))));
transition: all var(--luxe-motion-normal, 220ms) var(--luxe-motion-curve, cubic-bezier(0.22, 1, 0.36, 1));
}
header > .fill {
height: 100%;
display: block;
}
header > .fill > .container {
display: flex;
align-items: center;
justify-content: space-between;
height: 100%;
padding: 0 1.5rem;
margin: 0;
-webkit-user-select: none;
user-select: none;
gap: 0;
}
header > .fill > .container > div:first-child {
display: flex;
align-items: center;
flex: 1 1 auto;
min-width: 0;
height: 100%;
}
header > .fill > .container > div:last-child {
display: flex;
align-items: center;
justify-content: flex-end;
flex: 0 0 auto;
min-width: 0;
height: 100%;
}
header > .fill > .container #luxe-settings-wrapper {
display: flex !important;
align-items: center !important;
justify-content: flex-end !important;
flex: 0 0 auto !important;
margin-right: 0.6rem !important;
height: 100%;
}
header > .fill > .container #logo {
display: flex;
align-items: center;
flex-shrink: 0;
margin: 0;
}
header > .fill > .container #logo > img {
width: 10rem;
}
header > .fill > .container .brand {
font-size: 1.45rem;
font-weight: 500;
color: var(--logo_color);
text-decoration: none;
margin: 0 1.5rem;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
display: flex !important;
align-items: center !important;
line-height: normal !important;
height: 100%;
}
header > .fill > .container .status {
display: flex;
align-items: center;
flex-shrink: 0;
margin: 0;
height: 100%;
}
header > .fill > .container .status > * {
margin-left: 0.1rem !important;
cursor: pointer;
display: flex;
align-items: center;
}
.brand.typing::after {
content: "|";
animation: blink-caret 1.2s ease-in-out infinite;
margin-left: 4px;
font-weight: 500;
opacity: 1;
}
header > .fill > .container .brand.hostname {
display: none !important;
}
body[data-show-hostname="1"] header > .fill > .container .brand.hostname,
body.show-hostname header > .fill > .container .brand.hostname {
display: flex !important;
}
#settings-toggle {
display: flex !important;
align-items: center !important;
height: 100%;
}
#settings-toggle svg {
display: block;
vertical-align: middle;
}
#luxe-settings-menu {
position: fixed !important;
top: 4.5rem !important;
left: 50% !important;
transform: translateX(-50%) !important;
margin: 0 !important;
z-index: 9999 !important;
}
.cfg-wrap {
position: relative;
display: flex;
justify-content: center;
align-items: center;
flex: 1;
}
.cfg-tgl {
cursor: pointer;
display: flex;
align-items: center;
color: var(--textColor);
transition: 0.2s;
}
.cfg-menu {
display: none;
position: absolute;
top: 40px;
left: 50%;
transform: translateX(-50%);
background: var(--sectionbgColor);
border: var(--sectionBorder);
box-shadow: var(--sectionShaddow);
border-radius: 12px;
width: 280px;
padding: 15px;
z-index: 9999;
color: var(--textColor);
text-align: left;
}
.cfg-row {
margin-bottom: 12px;
display: flex;
justify-content: space-between;
align-items: center;
}
.cfg-blk {
margin-bottom: 12px;
}
.cfg-lbl {
font-weight: 600;
font-size: 14px;
}
.cfg-lbl-blk {
font-weight: 600;
font-size: 14px;
display: block;
margin-bottom: 8px;
}
.theme-opt {
padding: 0.4rem 0.8rem;
cursor: pointer;
color: var(--textColor);
border-radius: 4px;
transition: background 0.2s, color 0.2s;
}
.theme-opt:hover {
background: var(--focusColor);
color: var(--activeColor);
}
.main {
position: relative;
top: 4rem;
bottom: 0;
overflow-y: auto;
height: calc(100% - 4rem);
scroll-behavior: smooth;
}
.main-left {
position: fixed;
z-index: 1000;
top: calc(4rem + 8px);
left: 15px;
float: left;
overflow-x: hidden;
overflow-y: auto;
width: 250px;
max-width: calc(100vw - 30px);
height: calc(100% - 4rem - 16px);
background-color: var(--mainleftbgColor);
border-radius: 20px;
box-shadow: var(--neox-side-shadow, var(--neo-shadow, var(--neon-shadow, var(--glaze-shadow, var(--onyx-shadow, 0 10px 30px rgba(0, 0, 0, 0.25))))));
transition: width var(--luxe-motion-normal, 400ms) var(--luxe-motion-curve, cubic-bezier(0.25, 1, 0.5, 1)), visibility 400ms ease, opacity 400ms ease, transform 400ms var(--luxe-motion-curve, cubic-bezier(0.25, 1, 0.5, 1)), background-color var(--luxe-motion-normal, 220ms);
scroll-behavior: smooth;
}
.main-right {
float: right;
width: calc(100% - 250px);
height: 100%;
background-color: transparent;
}
#maincontent {
opacity: 0;
animation: smooth-open 0.4s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}
/* Main content column.
* max-width keeps the layout comfortable and "not too big" on large / ultra-wide
* screens, while margin: auto centres it in the space left of the fixed sidebar.
* Side padding provides the gutter (replaces the old fixed 2rem side margins) so
* the width cap and centring stay consistent across every breakpoint. */
#maincontent > .container {
max-width: 1600px;
margin: 0 auto 5rem;
padding: 0 2rem;
}
.main-right > #maincontent {
background-color: transparent;
}
footer {
font-size: 0.8rem;
overflow: hidden;
text-align: right;
white-space: nowrap;
color: var(--textColor);
opacity: 0.6;
padding: 1rem;
}
footer > a {
text-decoration: none;
color: var(--activeColor);
}
.main > .main-left > .nav {
margin-top: 0.5rem;
}
.main > .main-left > .nav > li {
cursor: pointer;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.main > .main-left > .nav > li > a {
display: block;
color: var(--textColor);
user-select: none;
-webkit-user-drag: none;
padding: 0.6rem 1rem 0.6rem 1.5rem;
margin: 0.2rem 0.8rem;
border-radius: 0.6rem;
transition: all var(--luxe-motion-fast, 150ms);
}
.main > .main-left > .nav > li:last-child {
margin-top: 1.5rem;
padding: 0;
display: block;
}
.main > .main-left > .nav > li:last-child > a {
display: block;
color: var(--textColor);
padding: 0.6rem 1rem 0.6rem 2.5rem;
margin: 0.2rem 0.8rem;
border-radius: 0.6rem;
position: relative;
text-decoration: none;
transition: all var(--luxe-motion-fast, 150ms);
}
.main > .main-left > .nav > li:last-child > a::before {
position: absolute;
left: 0.8rem;
top: 50%;
margin-top: -12px;
width: 24px;
height: 24px;
content: url('../images/logout.svg');
}
.main > .main-left > .nav > li.slide.active,
.main > .main-left > .nav > li.slide:hover {
background-color: transparent !important;
margin: 0 !important;
}
.main > .main-left > .nav > .slide {
padding: 0;
margin: 0;
}
.main > .main-left > .nav > .slide > ul {
height: 0;
overflow: hidden;
display: block;
margin: 0;
}
.main > .main-left > .nav > .slide > .menu,
.main > .main-left > .nav > li > [data-title] {
font-size: 1.15rem;
font-weight: 500;
display: flex;
align-items: center;
width: auto;
text-decoration: none;
color: var(--textColor);
padding: 0.6rem 1rem 0.6rem 1.5rem;
margin: 0.2rem 0.8rem;
border-radius: 0.6rem;
white-space: normal;
word-break: break-word;
line-height: 1.25;
user-select: none;
-webkit-user-drag: none;
transition: all var(--luxe-motion-fast, 150ms);
}
.main > .main-left > .nav > .slide > .menu::before {
display: none !important;
}
.main > .main-left[style*="overflow: hidden"] > .nav > .slide > .menu::before {
display: none;
}
.main > .main-left > .nav > .slide > .slide-menu {
margin-left: 1.8rem;
border-left: 2px solid var(--cbilineColor);
padding-left: 0.4rem;
margin-top: 0.2rem;
margin-bottom: 0.2rem;
}
.main > .main-left > .nav > .slide > .slide-menu > li {
margin: 0;
padding: 0;
}
.main > .main-left > .nav > .slide > .slide-menu > li > a {
display: block;
white-space: normal;
word-break: break-word;
text-decoration: none;
padding: 0.45rem 1rem;
margin: 0.1rem 0.8rem 0.1rem 0;
border-radius: 0.6rem;
line-height: 1.25;
color: var(--textColor);
transition: all var(--luxe-motion-fast, 150ms);
}
.main > .main-left > .nav > li.active > a,
.main > .main-left > .nav > .slide.active > .menu,
.main > .main-left > .nav > .slide > .slide-menu > li.active > a,
.main > .main-left > .nav > .slide > .slide-menu > .active > a,
.ifacebox-head.active {
background-color: var(--activeColor) !important;
color: var(--textColor) !important;
box-shadow: none !important;
opacity: 1 !important;
}
.main > .main-left > .nav > li:not(.active) > a:hover,
.main > .main-left > .nav > .slide:not(.active) > .menu:hover,
.main > .main-left > .nav > .slide > .slide-menu > li:not(.active) > a:hover {
background-color: var(--focusColor) !important;
color: var(--textColor) !important;
}
.main > .main-left > .nav > .slide > .menu,
.main > .main-left > .nav > .slide > .slide-menu > li,
.main > .main-left > .nav > li:last-child {
position: relative;
overflow: hidden;
transform: translate3d(0, 0, 0);
}
.main > .main-left > .nav > .slide > .menu::after,
.main > .main-left > .nav > .slide > .slide-menu > li > a::after,
.main > .main-left > .nav > li > a::after,
.main > .main-left > .nav > li:last-child::after {
position: absolute;
top: 0;
left: 0;
display: block;
width: 100%;
height: 100%;
content: "";
transition: transform 0.5s, opacity 1s;
transform: scale(10, 10);
pointer-events: none;
opacity: 0;
background-image: radial-gradient(circle, var(--activeColor) 10%, transparent 10.01%);
background-repeat: no-repeat;
background-position: 50%;
}
.main > .main-left > .nav > .slide > .menu:active::after,
.main > .main-left > .nav > .slide > .slide-menu > li > a:active::after,
.main > .main-left > .nav > li > a:active::after,
.main > .main-left > .nav > li:last-child:active::after {
transition: 0s;
transform: scale(0, 0);
opacity: 0.2;
}
#modal_overlay {
position: fixed;
z-index: 2001;
top: 3vh;
right: 10000px;
bottom: 0;
left: -10000px;
overflow-y: scroll;
transition: opacity 0.125s ease-in;
opacity: 0;
background: rgba(0, 0, 0, 0.7);
-webkit-overflow-scrolling: touch;
}
body.modal-overlay-active {
overflow: hidden;
height: 100vh;
}
body.modal-overlay-active #modal_overlay {
right: 0;
left: 0;
opacity: 1;
}
.modal {
display: flex;
align-items: center;
flex-wrap: wrap;
width: 90%;
min-width: 270px;
max-width: 600px;
min-height: 32px;
border-radius: var(--nav-border-radius, 1rem) !important;
background: var(--modelBackground);
color: var(--textColor);
box-shadow: var(--sectionShaddow);
border: var(--sectionBorder);
margin: 2vh auto;
padding: 1em;
}
.modal.cbi-modal {
max-width: 90%;
max-height: none;
}
.modal > * {
line-height: normal;
flex-basis: 100%;
margin-bottom: 0.5em;
max-width: 100%;
}
.modal > h4 {
margin: 0.5em 0;
}
.modal ul {
margin-left: 2.2em;
word-break: break-word;
}
.modal li {
list-style-type: square;
}
.modal p {
padding-left: 0.25rem;
word-break: break-word;
}
.modal > pre,
.modal > textarea {
font-size: 1.05rem;
font-size-adjust: 0.35;
overflow: auto;
margin-bottom: 0.5em;
cursor: auto;
white-space: pre-wrap;
color: var(--codeColor);
outline: none;
background-color: var(--codeBg);
border: var(--inputBorder);
padding: 8.5px;
border-radius: 0.6rem;
}
.modal label.btn {
display: flex;
align-items: center;
white-space: normal;
text-align: left;
text-transform: none;
padding-bottom: 0.2rem;
padding-top: 0.2rem;
}
.modal .button-row {
display: flex;
justify-content: space-between;
}
.modal .button-row > :not(:last-child) {
margin-right: 0.5em;
}
.modal .button-row > :first-child {
margin-right: auto;
}
.darkMask {
position: fixed;
z-index: 999;
width: 100%;
height: 100%;
content: "";
background-color: rgba(0, 0, 0, 0.56);
transition: opacity 400ms, visibility 400ms;
visibility: hidden;
opacity: 0;
pointer-events: none;
}
.main > .loading,
body > .spinning:not(.btn):not(.cbi-button),
.main > .spinning:not(.btn):not(.cbi-button),
#view > .spinning:not(.btn):not(.cbi-button),
#maincontent > .container > .spinning:not(.btn):not(.cbi-button),
#maincontent > .alert-message.spinning:not(.btn):not(.cbi-button),
.main-right > .spinning:not(.btn):not(.cbi-button) {
position: fixed !important;
z-index: 10000 !important;
top: 0 !important;
left: 0 !important;
bottom: 0 !important;
right: 0 !important;
width: 100vw !important;
height: 100vh !important;
pointer-events: none;
background-color: var(--modelBackground) !important;
opacity: 0.85;
transition: visibility 400ms, opacity 400ms;
display: flex !important;
align-items: center !important;
justify-content: center !important;
font-size: 0 !important;
color: transparent !important;
box-shadow: none !important;
border-radius: 0 !important;
margin: 0 !important;
padding: 0 !important;
max-width: none !important;
}
body:has(.spinning:not(.btn):not(.cbi-button)) #maincontent,
body:has(.spinning:not(.btn):not(.cbi-button)) .main-right,
body:has(.spinning:not(.btn):not(.cbi-button)) .container {
transform: none !important;
animation: none !important;
}
.main > .loading > span {
display: flex;
align-items: center;
justify-content: center;
}
.main > .loading > span > .loader {
width: 84px;
height: 84px;
display: inline-block;
position: relative;
margin: 0;
}
.main > .loading > span > .loader::before,
.main > .loading > span > .loader::after,
body > .spinning:not(.btn):not(.cbi-button)::before,
body > .spinning:not(.btn):not(.cbi-button)::after,
.main > .spinning:not(.btn):not(.cbi-button)::before,
.main > .spinning:not(.btn):not(.cbi-button)::after,
#view > .spinning:not(.btn):not(.cbi-button)::before,
#view > .spinning:not(.btn):not(.cbi-button)::after,
#maincontent > .container > .spinning:not(.btn):not(.cbi-button)::before,
#maincontent > .container > .spinning:not(.btn):not(.cbi-button)::after,
#maincontent > .alert-message.spinning:not(.btn):not(.cbi-button)::before,
#maincontent > .alert-message.spinning:not(.btn):not(.cbi-button)::after,
.main-right > .spinning:not(.btn):not(.cbi-button)::before,
.main-right > .spinning:not(.btn):not(.cbi-button)::before {
content: "" !important;
box-sizing: border-box !important;
width: 84px !important;
height: 84px !important;
position: absolute !important;
top: 50% !important;
left: 50% !important;
margin-top: -42px !important;
margin-left: -42px !important;
border-radius: 0 !important;
background: transparent !important;
}
.main > .loading > span > .loader::before,
body > .spinning:not(.btn):not(.cbi-button)::before,
.main > .spinning:not(.btn):not(.cbi-button)::before,
#view > .spinning:not(.btn):not(.cbi-button)::before,
#maincontent > .container > .spinning:not(.btn):not(.cbi-button)::before,
#maincontent > .alert-message.spinning:not(.btn):not(.cbi-button)::before,
.main-right > .spinning:not(.btn):not(.cbi-button)::before {
border: 6px solid var(--activeColor) !important;
animation: spin-blue 2s infinite linear !important;
}
.main > .loading > span > .loader::after,
body > .spinning:not(.btn):not(.cbi-button)::after,
.main > .spinning:not(.btn):not(.cbi-button)::after,
#view > .spinning:not(.btn):not(.cbi-button)::after,
#maincontent > .container > .spinning:not(.btn):not(.cbi-button)::after,
#maincontent > .alert-message.spinning:not(.btn):not(.cbi-button)::after,
.main-right > .spinning:not(.btn):not(.cbi-button)::after {
border: 6px solid var(--btnWarning) !important;
animation: spin-orange 2s infinite linear !important;
}
.spinning {
position: relative;
padding-left: 32px !important;
}
.spinning::before {
position: absolute;
top: 0;
bottom: 0;
left: 0.2em;
width: 32px;
content: "";
background: url('../images/loading.gif') no-repeat center;
background-size: 16px;
}
.btn,
button,
select,
input:not([type="checkbox"]):not([type="radio"]),
.cbi-dropdown {
min-height: 1.8rem;
color: var(--inputtextColor);
border: var(--inputBorder);
border-radius: var(--nav-border-radius, 0.6rem);
outline: none;
background-color: var(--inputbgColor);
background-image: none;
box-shadow: none;
align-items: center;
padding: 0 0.6rem;
transition: all var(--luxe-motion-normal, 220ms) var(--luxe-motion-curve, cubic-bezier(0.22, 1, 0.36, 1));
}
select,
.cbi-dropdown {
width: inherit;
cursor: default;
}
select:not([multiple="multiple"]):focus,
input:not(.cbi-button):focus,
.cbi-dropdown:focus,
.cbi-dropdown[open] {
border-color: var(--activeColor);
background-color: var(--inputbgColor);
box-shadow: 0 0 0 2px var(--focusColor);
}
select[multiple="multiple"] {
height: auto;
}
input[type="checkbox"] {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
width: 42px !important;
height: 24px !important;
background-color: var(--badgebgColor);
border-radius: 24px !important;
position: relative;
cursor: pointer;
outline: 0;
border: var(--badgeBorder) !important;
transition: background-color var(--luxe-motion-fast, 150ms) var(--luxe-motion-curve, cubic-bezier(0.22, 1, 0.36, 1));
margin: 0 0.5rem 0 0;
vertical-align: middle;
}
input[type="checkbox"]::after {
content: "";
position: absolute;
top: 2px;
left: 2px;
width: 20px;
height: 20px;
background-color: var(--textColor);
border-radius: 50%;
transition: transform var(--luxe-motion-fast, 150ms) var(--luxe-motion-curve, cubic-bezier(0.22, 1, 0.36, 1));
}
input[type="checkbox"]:checked {
background-color: var(--activeColor);
}
input[type="checkbox"]:checked::after {
transform: translateX(18px);
background-color: var(--bttextColor);
}
label > input[type="checkbox"],
label > input[type="radio"] {
margin-right: 0.8rem;
}
label[data-index][data-depends] {
padding-right: 2em;
}
input[name="ping"],
input[name="traceroute"],
input[name="nslookup"] {
width: 80%;
}
textarea,
.cbi-input-textarea {
font-family: monospace;
width: 100%;
min-height: 14rem;
color: var(--inputtextColor);
padding: 0.8rem;
border-radius: 0.6rem !important;
border: var(--inputBorder) !important;
background-color: var(--inputbgColor);
outline: none;
transition: all var(--luxe-motion-normal, 220ms) ease;
}
textarea:focus,
.cbi-input-textarea:focus {
border-color: var(--activeColor) !important;
box-shadow: 0 0 0 2px var(--focusColor);
}
.cbi-input-invalid {
color: var(--btnDanger);
border-bottom-color: var(--btnDanger);
}
input.cbi-input-password,
.cbi-value-field input[type="password"],
.cbi-value-field input[name^="pw"] {
width: calc(100% - 2.5rem) !important;
display: inline-block !important;
vertical-align: middle !important;
}
.cbi-value-field .cbi-input-checkbox,
.cbi-value-field .cbi-input-radio {
margin-top: 0.1rem;
}
.cbi-value-field .cbi-input-select {
min-width: 25rem;
}
.luxe-switch {
position: relative;
display: inline-block;
width: 40px;
height: 20px;
}
.luxe-switch input {
opacity: 0;
width: 0;
height: 0;
}
.luxe-slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: var(--badgebgColor, #ccc);
transition: 0.4s;
border-radius: 20px;
border: var(--inputBorder);
}
.luxe-slider:before {
position: absolute;
content: "";
height: 14px;
width: 14px;
left: 2px;
bottom: 2px;
background-color: var(--textColor, #fff);
transition: 0.4s;
border-radius: 50%;
}
.luxe-switch input:checked + .luxe-slider {
background-color: var(--activeColor, #ff9383);
border-color: var(--activeColor, #ff9383);
}
.luxe-switch input:checked + .luxe-slider:before {
transform: translateX(20px);
background-color: var(--bttextColor);
}
/* Base button shape shared by every LuCI control (form actions, opkg row
* actions, modal buttons, etc). A soft, low-opacity shadow is layered on top
* so buttons read as gently "lifted" (mewah/lembut) instead of flat, while
* still staying light/ringan since the shadow is subtle and inherited from
* the same token used for section cards. Variant themes (neo-brutalism,
* glassmorphism, ...) override this with !important where they need a
* different shadow language, so this stays a safe, theme-wide default. */
.btn,
.cbi-button,
.item::after {
font-size: 0.95rem;
display: inline-block;
width: auto !important;
cursor: pointer;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
transition: all var(--luxe-motion-fast, 150ms) var(--luxe-motion-curve, ease-in-out);
text-align: center;
vertical-align: middle;
white-space: nowrap;
text-decoration: none;
text-transform: uppercase;
color: var(--bttextColor);
border: 1px solid transparent;
border-radius: var(--nav-border-radius, 0.6rem);
background-color: var(--btnSecondary);
background-image: none;
-webkit-appearance: none;
-ms-touch-action: manipulation;
touch-action: manipulation;
padding: 0.4rem 1.3rem;
font-weight: 500;
box-shadow: var(--sectionShaddow, 0 2px 8px rgba(0, 0, 0, 0.08));
}
.cbi-button-up,
.cbi-button-down {
font-size: 1.05rem;
display: inline-block;
min-width: 0;
color: transparent !important;
background: url('../images/arrow.svg') no-repeat center;
background-size: 12px 20px;
padding: 0.15rem 0.3rem;
}
.cbi-button-up {
transform: scaleY(-1);
}
.cbi-button:not(select) {
-webkit-appearance: none !important;
}
.cbi-button + .cbi-button,
.btn + .btn {
margin-left: 1.1rem;
}
.cbi-page-actions {
padding-top: 1.5rem;
padding-bottom: 5rem;
text-align: right;
}
.cbi-page-actions > form[method="post"] {
display: inline-block;
}
.cbi-page-actions > .cbi-button {
margin-left: 1.2rem;
}
.btn:hover,
.btn:focus,
.btn:active,
.cbi-button:hover,
.cbi-button:focus,
.cbi-button:active,
.item:hover::after,
.item:focus::after,
.item:active::after,
.cbi-page-actions .cbi-button-apply + .cbi-button-save:hover,
.cbi-page-actions .cbi-button-apply + .cbi-button-save:focus,
.cbi-page-actions .cbi-button-apply + .cbi-button-save:active {
text-decoration: none;
outline: 0;
}
.btn:disabled,
.cbi-button:disabled {
cursor: not-allowed;
pointer-events: none;
opacity: 0.5;
box-shadow: none !important;
}
/* Gentle, smooth lift on hover and a soft press on click/active — a light-touch
* "mewah" (premium) micro-interaction that stays subtle (ringan/lembut) rather
* than a hard, bouncy animation. */
.btn:hover,
.cbi-button:hover {
box-shadow: 0 4px 14px rgba(0, 0, 0, 0.12);
transform: translateY(-1px);
}
.btn:active,
.cbi-button:active {
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);
transform: translateY(0);
}
.alert-message [class="btn"],
.modal div[class="btn"],
.cbi-button-find,
.cbi-button-link,
.cbi-button-up,
.cbi-button-down,
.cbi-button-neutral,
.cbi-button[name="zero"],
.cbi-button[name="restart"],
.cbi-button[onclick="hide_empty(this)"] {
background-color: var(--btnSecondary);
color: var(--bttextColor);
}
.btn.primary,
.cbi-page-actions .cbi-button-save,
.cbi-page-actions .cbi-button-apply + .cbi-button-save,
.cbi-button-add,
.cbi-button-save,
.cbi-button-positive,
.cbi-button-link,
.cbi-button[value="Enable"],
.cbi-button[value="Scan"],
.cbi-button[value^="Back"],
.cbi-button-neutral[onclick="handleConfig(event)"] {
background-color: var(--btnPrimary);
color: var(--bttextColor);
}
.cbi-page-actions .cbi-button-apply,
.cbi-section-actions .cbi-button-edit,
.cbi-button-edit,
.cbi-button-apply,
.cbi-button-reload,
.cbi-button-action,
.cbi-button[value="Submit"],
.cbi-button[value="Upload"],
.cbi-button[value$="Apply"],
.cbi-button[onclick="addKey(event)"] {
background-color: var(--btnInfo);
color: var(--bttextColor);
}
.cbi-section-remove > .cbi-button,
.cbi-button-remove,
.cbi-button-reset,
.cbi-button-negative,
.cbi-button[value="Stop"],
.cbi-button[value="Kill"],
.cbi-button[onclick="reboot(this)"],
.cbi-button-neutral[value="Restart"] {
background-color: var(--btnDanger);
color: var(--bttextColor);
}
.btn[value="Dismiss"],
.cbi-button[value="Terminate"],
.cbi-button[value="Reset"],
.cbi-button[value="Disabled"],
.cbi-button[onclick^="iface_reconnect"],
.cbi-button[onclick="handleReset(event)"],
.cbi-button-neutral[value="Disable"] {
background-color: var(--btnWarning);
color: var(--bttextColor);
}
.cbi-button-success,
.cbi-button-download,
.cbi-button[name="backup"],
.cbi-button[value="Download"],
.cbi-button[value="Save mtdblock"] {
background-color: var(--btnSuccess);
color: var(--bttextColor);
}
.btn:hover,
.cbi-button:hover,
.alert-message [class="btn"]:hover,
.modal div[class="btn"]:hover,
.cbi-button-find:hover,
.cbi-button-link:hover,
.cbi-button-up:hover,
.cbi-button-down:hover,
.cbi-button-neutral:hover,
.cbi-button[name="zero"]:hover,
.cbi-button[name="restart"]:hover,
.cbi-button[onclick="hide_empty(this)"]:hover {
background-color: var(--btnSecondaryHover);
}
.btn.primary:hover,
.cbi-page-actions .cbi-button-save:hover,
.cbi-page-actions .cbi-button-apply + .cbi-button-save:hover,
.cbi-button-add:hover,
.cbi-button-save:hover,
.cbi-button-positive:hover,
.cbi-button-link:hover,
.cbi-button[value="Enable"]:hover,
.cbi-button[value="Scan"]:hover,
.cbi-button[value^="Back"]:hover,
.cbi-button-neutral[onclick="handleConfig(event)"]:hover {
background-color: var(--btnPrimaryHover);
}
.cbi-page-actions .cbi-button-apply:hover,
.cbi-section-actions .cbi-button-edit:hover,
.cbi-button-edit:hover,
.cbi-button-apply:hover,
.cbi-button-reload:hover,
.cbi-button-action:hover,
.cbi-button[value="Submit"]:hover,
.cbi-button[value="Upload"]:hover,
.cbi-button[value$="Apply"]:hover,
.cbi-button[onclick="addKey(event)"]:hover {
background-color: var(--btnInfoHover);
}
.cbi-section-remove > .cbi-button:hover,
.cbi-button-remove:hover,
.cbi-button-reset:hover,
.cbi-button-negative:hover,
.cbi-button[value="Stop"]:hover,
.cbi-button[value="Kill"]:hover,
.cbi-button[onclick="reboot(this)"]:hover,
.cbi-button-neutral[value="Restart"]:hover {
background-color: var(--btnDangerHover);
}
.btn[value="Dismiss"]:hover,
.cbi-button[value="Terminate"]:hover,
.cbi-button[value="Reset"]:hover,
.cbi-button[value="Disabled"]:hover,
.cbi-button[onclick^="iface_reconnect"]:hover,
.cbi-button[onclick="handleReset(event)"]:hover,
.cbi-button-neutral[value="Disable"]:hover {
background-color: var(--btnWarningHover);
}
.a-to-btn {
text-decoration: none;
}
.cbi-value-field .cbi-button-add {
font-weight: 700;
margin: 9px 0 4px 3px;
padding: 1px 6px;
}
.controls > * > .btn:not([aria-label$="page"]) {
flex-grow: initial !important;
margin-top: 0.1rem;
}
.controls > #pager > .btn[aria-label$="page"] {
font-size: 1.45rem;
font-weight: 700;
}
.controls > * > label {
margin-bottom: 0.2rem;
}
.control-group {
display: flex;
flex-wrap: wrap;
gap: 2px;
}
.table {
position: relative;
display: table;
}
.tr {
display: table-row;
}
.thead {
display: table-header-group;
}
.tbody {
display: table-row-group;
}
.tfoot {
display: table-footer-group;
}
.td,
.th {
line-height: 1.3;
display: table-cell;
text-align: center;
vertical-align: middle;
padding: 0.6rem 0.75rem;
}
.th {
font-weight: 700;
}
.tr.placeholder {
height: 4em;
}
.tr.placeholder > .td {
line-height: 3;
position: absolute;
right: 0;
bottom: 0;
left: 0;
text-align: center !important;
background: inherit;
}
.td[width="33%"],
.td[width="33%"] ~ .td {
padding: 1.1em;
}
.table[width="33%"],
.th[width="33%"],
.td[width="33%"] {
width: 33%;
}
.table[width="100%"],
.th[width="100%"],
.td[width="100%"] {
width: 100%;
}
.col-1 {
flex: 1 1 30px !important;
}
.col-2 {
flex: 2 2 60px !important;
}
.col-3 {
flex: 3 3 90px !important;
}
.col-4 {
flex: 4 4 120px !important;
}
.col-5 {
flex: 5 5 150px !important;
}
.col-6 {
flex: 6 6 180px !important;
}
.col-7 {
flex: 7 7 210px !important;
}
.col-8 {
flex: 8 8 240px !important;
}
.col-9 {
flex: 9 9 270px !important;
}
.col-10 {
flex: 10 10 300px !important;
}
table {
border-spacing: 0;
border-collapse: collapse;
}
table,
.table {
overflow-y: hidden;
width: 100%;
border: none !important;
border-radius: 0.6rem;
box-shadow: none;
}
table > tbody > tr > td,
table > tbody > tr > th,
table > tfoot > tr > td,
table > tfoot > tr > th,
table > thead > tr > td,
table > thead > tr > th,
.table > .tbody > .tr > .td,
.table > .tbody > .tr > .th,
.table > .tfoot > .tr > .td,
.table > .tfoot > .tr > .th,
.table > .thead > .tr > .td,
.table > .thead > .tr > .th,
.table > .tr > .td.cbi-value-field,
.table > .tr > .th.cbi-section-table-cell {
padding: 0.5rem;
}
tr > td,
tr > th,
.tr > .td,
.tr > .th,
.cbi-section-table-row::before {
border: none !important;
}
table table,
.table .table,
.cbi-value-field table,
.cbi-value-field .table,
td > table > tbody > tr > td,
.td > .table > .tbody > .tr > .td,
.cbi-value-field > table > tbody > tr > td,
.cbi-value-field > .table > .tbody > .tr > .td {
border: 0;
}
.table[width="100%"] > .tr:first-child > .td {
margin: auto 0;
border-top: 0 !important;
}
.td[data-title]::before {
font-weight: 700;
display: none;
content: attr(data-title) ":\20";
text-align: left;
white-space: nowrap;
padding: 0.25rem 0;
}
.tr[data-title]::before,
.tr.cbi-section-table-titles.named::before {
font-weight: 700;
display: table-cell;
align-self: center;
flex: 1 1 5%;
content: attr(data-title) "\20";
text-align: center;
vertical-align: middle;
white-space: normal;
word-wrap: break-word;
padding: 0.25rem;
}
.tr.placeholder .td[data-title]::before {
display: none;
}
.th[data-type="button"],
.td[data-type="button"],
.th[data-type="fvalue"],
.td[data-type="fvalue"] {
flex: 1 1 2em;
text-align: center;
}
.tr.table-titles > .th,
.tr.cbi-section-table-titles > .th {
border-top: 0 !important;
}
.cbi-section,
.cbi-section-error,
#iptables,
.Firewall form,
#cbi-network > .cbi-section-node,
#cbi-wireless > .cbi-section-node,
#cbi-wireless > #wifi_assoclist_table,
[data-tab-title],
[data-page^="admin-system-admin"] .cbi-map:not(#cbi-dropbear),
[data-page="admin-system-package-manager"] #maincontent > .container {
font-family: inherit;
font-weight: 500;
font-style: normal;
line-height: normal;
min-width: inherit;
border: var(--sectionBorder);
border-radius: var(--nav-border-radius, 1rem);
background-color: var(--sectionbgColor);
box-shadow: var(--sectionShaddow);
margin: 0.5rem 0 0;
padding: 1.2rem 1.25rem;
transition: all var(--luxe-motion-normal, 220ms) ease;
}
.cbi-section > legend {
display: none !important;
}
.cbi-section > h3:first-child,
.panel-title {
font-size: 1.35rem;
line-height: 1;
display: block;
width: 100%;
padding-bottom: 0.3rem;
color: var(--textColor);
border-bottom: none;
margin: 0 0 0.2rem;
text-align: left;
opacity: 0;
animation: slide-in-right 0.6s cubic-bezier(0.25, 1, 0.5, 1) forwards;
font-weight: 500;
}
.cbi-section > h4:first-child,
.cbi-section > p:first-child,
[data-tab-title] > h3:first-child,
[data-tab-title] > h4:first-child,
[data-tab-title] > p:first-child {
padding-top: 1rem;
}
fieldset > fieldset,
.cbi-section > .cbi-section {
border: 0;
box-shadow: none;
margin: 0;
padding: 0;
}
.cbi-modal .cbi-section,
.cbi-section .cbi-section {
box-shadow: none;
padding: 0;
margin: 0;
background-color: transparent;
border: none;
}
.cbi-section-error {
font-weight: 700;
line-height: 1.4;
border: 1px solid var(--btnDanger);
border-radius: 0.6rem;
background-color: var(--sectionbgColor);
margin: 18px;
padding: 6px;
}
.cbi-section-error ul {
margin: 0 0 0 20px;
}
.cbi-section-error ul li {
font-weight: 700;
color: var(--btnDanger);
}
.cbi-map-descr,
.cbi-section-descr {
font-size: small;
line-height: 1.4;
color: var(--textColor);
opacity: 0.7;
padding: 0.5rem;
}
.cbi-map-descr + fieldset {
margin-top: 1rem;
}
.cbi-value {
display: inline-block;
width: 100%;
align-items: baseline;
padding: 0.45rem 1rem 0.3rem;
}
.cbi-value ul {
line-height: 1.35;
}
.cbi-value-title {
display: table-cell;
float: left;
width: 23rem;
padding-top: 0.35rem;
padding-right: 2rem;
text-align: right;
word-wrap: break-word;
font-weight: 500;
}
.cbi-value-field,
.cbi-value-description {
line-height: 1.35;
display: table-cell;
}
.cbi-value-description {
font-size: small;
padding-top: 0.4rem;
opacity: 0.5;
}
.cbi-value-field > ul > li > label {
margin-top: 0.5rem;
}
div.cbi-value var,
td.cbi-value-field var,
.td.cbi-value-field var {
font-style: italic;
color: var(--activeColor);
}
.cbi-section-table-row {
margin-bottom: 1rem;
text-align: center !important;
background: var(--sectionbgColor2);
border-radius: 0.6rem;
border: none !important;
}
.cbi-section-table-row:last-child {
margin-bottom: 0;
}
.cbi-section-table-row .td {
text-align: center !important;
}
.cbi-section-table-row > .cbi-value-field [data-dynlist] > input,
.cbi-section-table-row > .cbi-value-field input.cbi-input-password {
width: calc(100% - 1.5rem);
}
.cbi-section-table-row > .cbi-value-field .cbi-dropdown,
.cbi-section-table-row > .cbi-value-field .cbi-input-select,
.cbi-section-table-row > .cbi-value-field .cbi-input-text,
.cbi-section-table-row > .cbi-value-field .cbi-input-password {
width: 100%;
}
.cbi-section-table-row > .cbi-value-field .cbi-dropdown {
min-width: 7rem;
}
.cbi-section-table-cell {
line-height: 1.1;
align-self: flex-end;
flex: 1 1 auto;
}
.cbi-section-table .cbi-section-table-titles .cbi-section-table-cell {
width: auto !important;
}
.td.cbi-section-actions {
text-align: right !important;
vertical-align: middle;
}
.td.cbi-section-actions > * {
display: inline-flex;
}
.td.cbi-section-actions > * > *,
.td.cbi-section-actions > * > form > * {
margin: 0 8px;
}
.td.cbi-section-actions > * > form {
display: inline-flex;
margin: 0;
}
.cbi-rowstyle-2,
div > table > tbody > tr:nth-of-type(2n),
div > .table > .tr:nth-of-type(2n),
.cbi-section .cbi-section-remove:nth-of-type(2n),
.container > .cbi-section .cbi-section-node:nth-of-type(2n),
.cbi-section[id] .cbi-section-remove:nth-of-type(4n+3),
.cbi-section[id] .cbi-section-node:nth-of-type(4n+4),
.cbi-tabcontainer > .cbi-value:nth-of-type(2n),
.cbi-rowstyle-1 {
background-color: transparent !important;
}
.cbi-rowstyle-2 .cbi-button-up,
.cbi-rowstyle-2 .cbi-button-down,
body:not(.Interfaces) .cbi-rowstyle-2:first-child {
background-color: transparent !important;
}
.container > .cbi-section:first-of-type > .table[width="100%"] > .tr > .td {
padding: 0.6rem;
}
.cbi-section-remove {
padding: 0.5rem;
}
.cbi-section-create {
display: inline-flex;
align-items: center;
margin: 0.5rem -3px;
}
.cbi-section-create > * {
margin: 0.5rem;
}
.cbi-optionals {
border-top: var(--cbilineColor);
padding: 1rem 1rem 0;
}
.tabs,
.cbi-tabmenu {
display: flex;
width: -moz-fit-content;
width: fit-content;
max-width: 100%;
flex-wrap: wrap;
background-color: var(--badgebgColor);
border-radius: var(--nav-border-radius, 0.8rem);
padding: 0.4rem;
margin: 0.5rem auto 1rem;
gap: 0.2rem;
justify-content: center;
}
body:not(.Interfaces) .tabs,
body:not(.Interfaces) .cbi-tabmenu {
margin-left: auto;
margin-right: auto;
}
.tabs > li,
.cbi-tabmenu > li {
display: flex;
align-items: center;
justify-content: center;
flex: 0 1 auto;
padding: 0;
margin: 0;
}
.tabs > li > a,
.cbi-tabmenu > li > a {
text-decoration: none;
color: var(--textColor);
padding: 0.5rem 1.1rem;
border-radius: 0.6rem;
font-weight: 500;
font-size: 0.8rem;
transition: all 0.3s ease;
}
.tabs > li.active > a,
.tabs > li[class~="active"] > a,
.cbi-tabmenu > li.cbi-tab-active > a,
.cbi-tabmenu > li.active > a {
background-color: var(--activeColor) !important;
color: var(--bttextColor) !important;
box-shadow: none !important;
opacity: 1 !important;
}
.tabs > li:not(.active):not([class~="active"]):hover > a,
.cbi-tabmenu > li:not(.cbi-tab-active):not(.active):hover > a {
background-color: var(--focusColor) !important;
color: var(--textColor) !important;
}
.cbi-tabmenu + .cbi-section {
margin-top: 0;
}
.cbi-modal .cbi-tabmenu {
margin-left: 0;
}
[data-tab-title] {
overflow: hidden;
height: 0;
opacity: 0;
margin: 0;
padding: 0rem 1rem !important;
}
[data-tab-active="true"] {
overflow: visible;
height: auto;
opacity: 1;
transition: opacity 0.25s ease-in;
margin: inherit !important;
}
.cbi-section-node-tabbed {
margin-top: 0;
border: var(--sectiontabBorder);
border-top: 0;
padding: 0;
border-radius: 0.6rem;
}
.cbi-dropdown {
padding: 0;
position: relative;
display: inline-flex;
box-sizing: border-box;
}
.cbi-dropdown-container {
position: relative;
}
.cbi-dropdown-container .cbi-dropdown {
min-width: 100%;
}
.cbi-dropdown[placeholder*="select"] {
max-width: 25rem;
height: auto;
margin-top: -3px;
}
.cbi-dropdown img {
max-height: 1.6em;
width: auto;
}
.cbi-dropdown > ul {
display: flex;
align-items: center;
overflow-x: hidden;
overflow-y: auto;
width: 100%;
list-style: none;
outline: 0;
margin: 0 !important;
padding: 0;
}
.cbi-dropdown > .open {
flex-basis: 15px;
}
.cbi-dropdown > .open,
.cbi-dropdown > .more {
font-size: 1.05rem;
font-weight: 900;
line-height: 2;
display: flex;
flex-direction: column;
flex-grow: 0;
flex-shrink: 0;
justify-content: center;
cursor: default;
text-align: center;
outline: 0;
padding: 0 0.25em;
}
.cbi-dropdown.btn {
min-height: 2rem;
padding-top: 0px;
padding-bottom: 0px;
padding-right: 0px;
}
.cbi-dropdown.btn > .open {
font-size: 0.9rem;
margin: 0 5px;
padding: 0px;
}
.cbi-dropdown.btn > div {
margin: 0px;
}
.cbi-dropdown > .more,
.cbi-dropdown > ul > li[placeholder] {
font-weight: 700;
display: none;
color: var(--textColor);
opacity: 0.7;
}
.cbi-dropdown > ul > li {
display: none;
overflow: hidden;
align-items: center;
align-self: center;
flex-grow: 1;
flex-shrink: 1;
min-height: 20px;
white-space: nowrap;
text-overflow: ellipsis;
padding: 0.35em 0.5em;
line-height: 1.25;
}
.cbi-dropdown > ul > li[display] {
display: flex;
align-items: center;
}
.cbi-dropdown > ul > li[display]:not([display="0"]) {
border-left: var(--cbilineColor);
}
.cbi-dropdown[empty] > ul {
max-width: 1px;
}
.cbi-dropdown[empty] > ul > li,
.cbi-dropdown[optional][open] > ul.dropdown > li[placeholder],
.cbi-dropdown[multiple][open] > ul.dropdown > li > form {
display: block;
}
.cbi-dropdown > ul > li > form {
display: none;
pointer-events: none;
margin: 0;
padding: 0;
}
.cbi-dropdown > ul > li img {
margin-right: 0.25em;
vertical-align: middle;
}
.cbi-dropdown > ul > li > form > input[type="checkbox"] {
height: auto;
margin: 0;
}
.cbi-dropdown > ul > li input[type="text"] {
height: 20px;
}
.cbi-dropdown > ul.preview,
.cbi-dropdown > ul > li .hide-close,
.cbi-dropdown[open] > ul.dropdown > li .hide-open {
display: none;
}
.cbi-dropdown > ul > li .hide-open,
.cbi-dropdown[open] > ul.dropdown > li .hide-close {
display: initial;
}
.cbi-dropdown[open] > ul.dropdown {
position: absolute;
z-index: 3000;
display: block;
width: max-content;
min-width: 100%;
max-width: 80vw;
max-height: 200px !important;
border: var(--sectionBorder);
background: var(--modelBackground);
box-shadow: var(--sectionShaddow);
color: var(--textColor);
border-radius: 0.6rem;
overflow-x: hidden;
overflow-y: auto;
}
.cbi-dropdown[open] > ul.dropdown > li[display],
.cbi-dropdown[open] > ul.dropdown > li,
.cbi-dropdown[multiple] > ul > li > label,
.cbi-dropdown[multiple][open] > ul.dropdown > li,
.cbi-dropdown[multiple][more] > .more,
.cbi-dropdown[multiple][empty] > .more {
display: flex;
align-items: center;
flex-grow: 1;
}
.cbi-dropdown[open] > ul.dropdown > li {
border-bottom: var(--cbilineColor);
}
.cbi-dropdown[open] > ul.dropdown > li[selected] {
background: var(--focusColor);
}
.cbi-dropdown[open] > ul.dropdown > li.focus,
.cbi-dropdown[open] > ul.dropdown > li:hover {
background: var(--focusColor);
color: var(--activeColor);
}
.cbi-dropdown[open] > ul.dropdown > li:last-child {
margin-bottom: 0;
border-bottom: 0;
}
.cbi-dropdown[open] > ul.dropdown > li[unselectable] {
opacity: 0.7;
}
.cbi-dropdown[open] > ul.dropdown > li > input.create-item-input:first-child:last-child {
width: 100%;
}
.cbi-dropdown[disabled] {
pointer-events: none;
opacity: 0.6;
}
.cbi-dropdown .zonebadge,
.cbi-dropdown[open] .zonebadge {
width: auto;
}
.cbi-dropdown .zonebadge {
width: 100%;
}
.cbi-dynlist {
line-height: 1.4;
flex-direction: column;
min-height: 30px;
cursor: text;
}
.cbi-dynlist > .item {
position: relative;
max-width: 25rem;
margin-right: 2em;
pointer-events: auto;
color: var(--textColor);
border-bottom: 2px solid var(--activeColor);
outline: 0;
cursor: move;
user-select: text;
padding: 0.5em 0.25em 0.25em 0;
}
.cbi-dynlist[name="sshkeys"] > .item {
max-width: none;
}
.cbi-dynlist > .item::after {
font-weight: 700;
position: absolute;
right: -2em;
bottom: 0;
display: inline-flex;
min-height: 17px;
content: "\00D7";
pointer-events: auto;
color: var(--bttextColor);
border: 1px solid var(--btnDanger);
background-color: var(--btnDanger);
padding: 0 6px;
border-radius: 0.4rem;
}
.cbi-dynlist > .item.dragging {
opacity: 0.5;
}
.cbi-dynlist > .item.drag-over,
.cbi-dynlist > .add-item > .cbi-input-text.drag-over,
.cbi-dynlist > .add-item > .cbi-button-add.drag-over {
border-top: 1px solid var(--textColor);
}
.cbi-dynlist > .item > span {
white-space: normal;
word-break: break-word;
pointer-events: none;
}
.cbi-dynlist > .add-item {
display: inline-flex;
align-items: center;
width: 100%;
min-width: 16rem;
}
.cbi-dynlist > .add-item:not([ondrop]) > input {
overflow: hidden;
width: 100%;
min-width: 15rem;
white-space: nowrap;
text-overflow: ellipsis;
}
.cbi-dynlist > .add-item[ondrop] > input {
min-width: 13rem;
}
.cbi-progressbar {
position: relative;
display: flex;
flex-direction: column;
width: 100%;
min-width: 170px;
background-color: transparent !important;
border: none !important;
border-radius: 0 !important;
margin: 4px 0;
}
.cbi-progressbar > div {
order: 2;
height: 6px !important;
background-color: var(--progressbar) !important;
border-radius: 6px !important;
transition: width 0.25s ease-in;
position: relative;
z-index: 2;
}
.cbi-progressbar::before {
content: "";
position: absolute;
left: 0;
right: 0;
bottom: 0;
height: 6px !important;
background-color: var(--progressbarColor) !important;
border-radius: 6px !important;
z-index: 1;
}
.cbi-progressbar::after {
order: 1;
content: attr(title);
position: relative;
font-family: inherit;
font-weight: 600;
font-size: 0.8rem;
line-height: 1.4;
color: var(--textColor) !important;
text-shadow: none !important;
text-align: right;
padding: 0 0.1rem 6px 0 !important;
white-space: pre;
text-overflow: ellipsis;
overflow: hidden;
display: block;
}
.tr:has(.cbi-progressbar) > .td:first-child {
padding-left: 1.1rem;
}
.tr:has(.cbi-progressbar) > .td:last-child {
padding-right: 1.1rem;
}
.alert,
.alert-message {
font-weight: 500;
margin-bottom: 1.5rem;
border-radius: var(--nav-border-radius, 0.8rem) !important;
padding: 1rem 1.25rem;
color: var(--textColor) !important;
background-color: var(--sectionbgColor) !important;
border: var(--sectionBorder) !important;
box-shadow: var(--neox-shadow, var(--neo-shadow, var(--neon-shadow, var(--glaze-shadow, var(--onyx-shadow, var(--sectionShaddow)))))) !important;
backdrop-filter: var(--glass-blur, var(--glass-dark-blur, var(--onyx-blur, var(--glaze-blur, none)))) !important;
-webkit-backdrop-filter: var(--glass-blur, var(--glass-dark-blur, var(--onyx-blur, var(--glaze-blur, none)))) !important;
position: relative;
overflow: hidden;
}
.container .alert,
.container .alert-message {
margin-top: 1rem;
}
.alert-message > h4 {
font-size: 1.15rem;
font-weight: 700;
margin: 0 0 0.5rem 0;
color: var(--textColor);
}
.alert-message > * {
margin: 0.3rem 0;
}
.alert-message .btn {
padding: 0.35rem 0.8rem;
}
.alert-message.notice {
border-left: 5px solid var(--btnInfo) !important;
}
.alert-message.danger,
.alert-message.error {
border-left: 5px solid var(--btnDanger) !important;
}
.alert-message.warning {
border-left: 5px solid var(--btnWarning) !important;
}
.alert-message.success {
border-left: 5px solid var(--btnSuccess) !important;
}
#command-rc-output .alert-message {
line-height: 1.4;
position: absolute;
top: 40px;
right: 32px;
max-width: 40%;
animation: anim-fade-in 1.5s forwards;
word-break: break-word;
opacity: 0;
margin: 0;
}
.label,
[data-indicator] {
background-color: var(--btnSecondary);
border-radius: 0.4rem;
color: var(--bttextColor) !important;
font-size: 0.85rem;
font-weight: 700;
text-decoration: none;
text-shadow: none;
text-transform: uppercase;
white-space: nowrap;
padding: 0.3rem 0.8rem;
}
.label.notice,
.label.danger,
.label.warning,
.label.success,
.label.error {
color: var(--bttextColor);
}
.label.notice {
background-color: var(--btnInfo);
}
.label.danger,
.label.error {
background-color: var(--btnDanger);
}
.label.warning {
background-color: var(--btnWarning);
}
.label.success {
background-color: var(--btnSuccess);
}
[data-indicator]:not([data-style="inactive"]):not([data-indicator="poll-status"]):not([data-indicator="cbi-poll-status"]) {
background-color: var(--activeColor) !important;
}
#xhr_poll_status,
#xhr_poll_status.label,
#xhr_poll_status.label.danger,
#xhr_poll_status.label.success,
#xhr_poll_status.btn,
#xhr_poll_status.cbi-button,
[data-indicator="poll-status"],
[data-indicator="cbi-poll-status"] {
background: transparent !important;
background-color: transparent !important;
color: transparent !important;
font-size: 0 !important;
padding: 0 !important;
width: 24px !important;
height: 24px !important;
min-height: 24px !important;
border-radius: 50% !important;
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
cursor: pointer;
margin-left: 0.5rem !important;
box-shadow: none !important;
border: none !important;
position: relative;
}
#xhr_poll_status:hover,
#xhr_poll_status:active,
#xhr_poll_status:focus,
#xhr_poll_status.btn:hover,
#xhr_poll_status.cbi-button:hover {
background-color: transparent !important;
box-shadow: none !important;
}
#xhr_poll_status::before,
[data-indicator="poll-status"]::before,
[data-indicator="cbi-poll-status"]::before {
content: "";
position: absolute;
top: 2px;
right: 2px;
bottom: 2px;
left: 2px;
background-color: var(--textColor) !important;
-webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21.5 2v6h-6M2.5 22v-6h6M2 11.5a10 10 0 0 1 18.8-4.3M22 12.5a10 10 0 0 1-18.8 4.3'/%3E%3C/svg%3E") !important;
mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21.5 2v6h-6M2.5 22v-6h6M2 11.5a10 10 0 0 1 18.8-4.3M22 12.5a10 10 0 0 1-18.8 4.3'/%3E%3C/svg%3E") !important;
-webkit-mask-repeat: no-repeat !important;
mask-repeat: no-repeat !important;
-webkit-mask-position: center !important;
mask-position: center !important;
-webkit-mask-size: contain !important;
mask-size: contain !important;
opacity: 0.5 !important;
transition: all 0.3s ease !important;
animation: none !important;
}
#xhr_poll_status.success::before,
#xhr_poll_status.notice::before,
#xhr_poll_status.active::before,
[data-indicator="poll-status"]:not([data-style="inactive"]):not(.inactive):not(.danger)::before,
[data-indicator="cbi-poll-status"]:not([data-style="inactive"]):not(.inactive):not(.danger)::before {
opacity: 1 !important;
animation: spin-smooth 5s linear infinite !important;
}
.cbi-tooltip-container,
span[data-tooltip],
span[data-tooltip] .label {
cursor: help !important;
}
.cbi-tooltip {
position: absolute;
z-index: 1000;
left: -1000px;
transition: opacity 0.25s ease-out;
white-space: pre;
pointer-events: none;
opacity: 0;
border-radius: 0.4rem;
background: var(--modelBackground);
color: var(--textColor);
box-shadow: var(--sectionShaddow);
border: var(--sectionBorder);
padding: 4px 8px;
}
.cbi-tooltip-container:hover .cbi-tooltip {
left: auto;
transition: opacity 0.25s ease-in;
opacity: 1;
}
.network-status-table,
.network-status-table .ifacebox-body > div {
display: flex;
flex-wrap: wrap;
}
.network-status-table .ifacebox {
flex-grow: 1;
margin: 0.2rem 0;
border-radius: 0.6rem;
}
.network-status-table .ifacebox-body {
display: flex;
flex-direction: column;
height: 100%;
}
.network-status-table .ifacebox-body > span {
flex: 10 10 auto;
height: 100%;
}
.network-status-table .ifacebox-body .ifacebadge {
align-items: center;
flex: 1 1 auto;
min-width: 160px;
background-color: var(--sectionbgColor2);
margin: 0.2rem 0.8rem 0 0;
padding: 0.5em;
}
.ifacebox {
line-height: 1.1;
display: inline-flex;
flex-direction: column;
min-width: 90px;
border-bottom: var(--sectionnodeBorder);
background-color: var(--sectionbgColor2);
border-radius: 0.6rem;
overflow: hidden;
}
.ifacebox-head {
background: var(--badgebgColor);
padding: 0.15rem 0.3rem;
}
.ifacebox-head.active {
background-color: var(--activeColor) !important;
color: var(--bttextColor) !important;
box-shadow: none !important;
opacity: 1 !important;
}
.ifacebox-body {
padding: 0.15rem 0.3rem;
}
.ifacebadge {
display: inline-flex;
gap: 0.2rem;
border-bottom: var(--badgeBorder);
background: var(--badgebgColor);
color: var(--textColor);
padding: 0.5rem 0.8rem;
border-radius: 0.4rem;
}
.ifacebadge img {
width: 32px;
height: 32px;
vertical-align: middle;
}
.ifacebadge > em,
.ifacebadge > img {
display: inline-block;
align-self: flex-start;
}
td > .ifacebadge,
.td > .ifacebadge {
font-size: 0.85rem;
background-color: var(--badgebgColor);
}
.cbi-value-field > ul > li .ifacebadge {
margin-top: -0.5rem;
margin-left: 0.4rem;
background-color: var(--badgebgColor);
}
.zonebadge {
display: inline-block;
padding: 0.2rem 0.5rem;
border-radius: 0.4rem;
}
.zonebadge .ifacebadge {
border: var(--badgeBorder);
margin: 0.1rem 0.2rem;
padding: 0.2rem 0.3rem;
}
.zonebadge > input[type="text"] {
min-width: 10rem;
margin-top: 0.3rem;
padding: 0.16rem 1rem;
}
.zonebadge > em,
.zonebadge > strong {
display: inline-block;
margin: 0 0.2rem;
}
.zonebadge .cbi-tooltip {
background: inherit;
margin: -1.5rem 0 0 -0.5rem;
padding: 0.25rem;
}
.zonebadge-empty {
color: var(--textColor);
background: repeating-linear-gradient(45deg, rgba(204, 204, 204, 0.5), rgba(204, 204, 204, 0.5) 5px, rgba(255, 255, 255, 0.5) 5px, rgba(255, 255, 255, 0.5) 10px);
}
.zone-forwards {
display: flex;
min-width: 10rem;
flex-wrap: nowrap;
}
.zone-forwards > * {
flex: 1 1 45%;
text-wrap: auto;
}
.zone-forwards > span {
flex-basis: 10%;
text-align: center;
padding: 0 0.25rem;
}
.zone-forwards .zone-src,
.zone-forwards .zone-dest {
display: flex;
flex-direction: column;
}
#dsl_status_table .ifacebox-body span > strong {
display: inline-block;
min-width: 50%;
}
.commandbox {
width: 24% !important;
background: var(--sectionbgColor2);
border: var(--sectionBorder);
margin: 10px 0 0 10px !important;
padding: 0.5rem 1rem;
border-radius: 0.6rem;
}
.commandbox h3 {
line-height: normal !important;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
margin: 6px 0 !important;
}
.commandbox div {
left: auto !important;
}
.commandbox code {
margin-left: 4px;
padding: 2px 3px;
}
.commandbox p:first-of-type {
margin-top: -6px;
}
.commandbox p:nth-of-type(2) {
margin-top: 2px;
}
#diag-rc-output > pre,
#command-rc-output > pre,
[data-page="admin-services-wol"] .notice code {
font-size: 1.25rem;
font-size-adjust: 0.35;
line-height: normal;
display: block;
overflow-y: hidden;
width: 100%;
white-space: pre;
color: var(--codeColor);
background-color: var(--codeBg);
border: var(--sectionBorder);
box-shadow: var(--sectionShaddow);
padding: 8.5px;
border-radius: 0.6rem;
}
#syslog {
font-size: small;
overflow-y: hidden;
width: 100%;
min-height: 15rem;
resize: none;
color: var(--codeColor);
border: var(--sectionBorder);
border-radius: 0.6rem;
background-color: var(--codeBg);
box-shadow: var(--sectionShaddow);
padding: 1rem;
}
#cbi-network > .cbi-section-node,
#cbi-wireless > .cbi-section-node,
#cbi-wireless > #wifi_assoclist_table {
border: var(--sectionBorder);
border-radius: var(--nav-border-radius, 1rem);
background-color: var(--sectionbgColor);
box-shadow: var(--sectionShaddow);
}
#cbi-wireless .td,
#cbi-network .tr:first-child > .td,
[data-page="admin-network-diagnostics"] .tr > .td {
border-top: 0 !important;
}
#cbi-wireless > #wifi_assoclist_table > .tr {
border: none !important;
}
#cbi-wireless > #wifi_assoclist_table > .tr.placeholder > .td {
right: 33px;
bottom: 33px;
left: 33px;
border: none !important;
}
#cbi-wireless > #wifi_assoclist_table > .tr.table-titles,
#cbi-wireless > #wifi_assoclist_table > .tr.table-titles > .th {
border: none !important;
}
#wifi_assoclist_table > .tr > .td[data-title="RX Rate / TX Rate"] {
width: 23rem;
}
.Firewall form {
box-shadow: none;
margin: 2rem 2rem 0 0;
padding: 0;
}
#cbi-firewall-redirect table *,
#cbi-network-switch_vlan table *,
#cbi-firewall-zone table * {
font-size: small;
}
#cbi-firewall-redirect table input[type="text"],
#cbi-network-switch_vlan table input[type="text"],
#cbi-firewall-zone table input[type="text"] {
width: 5rem;
}
#cbi-firewall-redirect table select,
#cbi-network-switch_vlan table select,
#cbi-firewall-zone table select {
min-width: 3.5rem;
}
#cbi-network-switch_vlan .th,
#cbi-network-switch_vlan .td {
flex-basis: 12%;
}
#cbi-firewall-zone .td,
#cbi-network-switch_vlan .td {
width: 100%;
}
#cbi-firewall-zone .table,
#cbi-network-switch_vlan .table {
display: block;
}
.node-status-overview > .main fieldset:nth-child(4) .td:nth-child(2),
.node-status-processes > .main .table .tr .td:nth-child(3) {
white-space: normal;
}
[data-page="admin-system-reboot"] p {
padding-left: 2rem;
}
[data-page="admin-system-reboot"] p > span {
position: relative;
top: 0.1rem;
left: 1rem;
}
#cbi-samba [data-tab="template"] .cbi-value-title {
width: auto;
padding-bottom: 0.6rem;
}
#cbi-samba [data-tab="template"] .cbi-value-field {
display: block;
}
/* --- Third-Party Packages (opkg) page: action buttons --------------------
* Each package row renders its actions as <div class="btn"> inside a table
* cell. The original rule below (line-height: 3 + display: inline) stretched
* the clickable/visual box of the button far past its text label, so the
* "Install/Remove/Update" pills looked oversized, uneven, and misaligned
* against the row text ("tidak pas"). Switching to inline-flex makes each
* button hug its own label and center itself vertically, matching the same
* rounded, soft (lembut) pill used by every other button in the theme. */
[data-page="admin-system-package-manager"] div.btn {
display: inline-flex;
align-items: center;
justify-content: center;
line-height: normal;
padding: 0.35rem 0.9rem;
margin: 0.15rem 0;
}
/* The action cell itself gets more breathing room (was flex-basis: 2em from
* the generic .td[data-type="button"] rule, too narrow for a label like
* "Uninstall") and wraps multiple buttons on their own row with a small,
* even gap instead of the fixed .btn + .btn margin used elsewhere. */
[data-page="admin-system-package-manager"] .td[data-type="button"] {
flex-basis: 9em;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
gap: 0.5rem;
}
[data-page="admin-system-package-manager"] .td[data-type="button"] .btn + .btn {
margin-left: 0;
}
/* Keep this page inside the same centered, width-capped content column as
* the rest of the theme (see the base #maincontent > .container rule); only
* the vertical rhythm is tweaked here since opkg's search bar sits directly
* under the header. */
[data-page="admin-system-package-manager"] #maincontent > .container {
margin: 2rem auto 1rem;
}
.td.version,
.td.size {
white-space: normal !important;
word-break: break-word;
}
[data-page="admin-network-diagnostics"] .table {
box-shadow: none;
}
#applyreboot-container,
#applyreboot-section {
margin: 2rem;
}
#applyreboot-section {
line-height: 300%;
}
.OpenVPN a {
line-height: initial !important;
}
.uci-change-list {
font-family: monospace;
}
.uci-change-list ins,
.uci-change-legend-label ins {
display: block;
text-decoration: none;
border: 1px solid var(--btnSuccess);
background-color: var(--focusColor);
padding: 2px;
border-radius: 4px;
}
.uci-change-list del,
.uci-change-legend-label del {
font-style: normal;
display: block;
text-decoration: none;
border: 1px solid var(--btnDanger);
background-color: var(--focusColor);
padding: 2px;
border-radius: 4px;
}
.uci-change-list var,
.uci-change-legend-label var {
font-style: normal;
display: block;
text-decoration: none;
border: var(--inputBorder);
background-color: var(--inputbgColor);
padding: 2px;
border-radius: 4px;
}
.uci-change-list var ins,
.uci-change-list var del {
font-style: normal;
white-space: pre;
border: 0;
padding: 0;
}
.uci-change-legend {
padding: 5px;
}
.uci-change-legend-label {
float: left;
width: 150px;
}
.uci-change-legend-label > ins,
.uci-change-legend-label > del,
.uci-change-legend-label > var {
display: block;
float: left;
width: 10px;
height: 10px;
margin-right: 4px;
}
.uci-change-legend-label var ins,
.uci-change-legend-label var del {
line-height: 0.4;
border: 0;
}
#iwsvg,
#iwsvg2,
#bwsvg {
border: var(--sectionBorder) !important;
border-radius: 0.6rem;
}
[data-page="admin-status-realtime-bandwidth"] #bwsvg {
border-top: 0 !important;
}
.style-scroll {
display: flex;
overflow-x: auto;
gap: 8px;
padding-bottom: 5px;
scroll-behavior: smooth;
}
.style-scroll::-webkit-scrollbar {
height: 4px;
}
.style-scroll::-webkit-scrollbar-thumb {
background: var(--activeColor);
border-radius: 4px;
}
.style-card,
.mode-card,
.icon-card {
flex: 0 0 auto;
padding: 6px 14px;
background: var(--badgebgColor);
border: var(--inputBorder);
border-radius: 6px;
cursor: pointer;
transition: 0.2s;
font-size: 13px;
color: var(--textColor);
text-align: center;
}
.style-card.active,
.mode-card.active,
.icon-card.active {
background: var(--activeColor);
color: var(--bttextColor);
border-color: var(--activeColor);
}
.mode-card {
flex: 1;
}
.icon-card {
padding: 6px 12px;
}
@keyframes anim-fade-in {
100% {
opacity: 1;
}
}
@keyframes smooth-open {
0% {
opacity: 0.3;
transform: translateY(10px);
}
100% {
opacity: 1;
transform: none;
}
}
@keyframes blink-caret {
0%, 100% {
opacity: 1;
}
50% {
opacity: 0;
}
}
@keyframes spin-blue {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
@keyframes spin-orange {
0% {
transform: rotate(45deg);
}
100% {
transform: rotate(-315deg);
}
}
@keyframes spin-smooth {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
@keyframes slide-in-right {
0% {
opacity: 0;
transform: translateX(30px);
}
100% {
opacity: 1;
transform: translateX(0);
}
}
@media screen and (max-width: 1280px) {
body {
font-size: 0.85rem;
line-height: 1.5;
}
.main-left {
width: 250px;
}
.main-right {
width: calc(100% - 250px);
}
fieldset,
.cbi-section {
padding: 0.9rem 1.1rem;
}
.cbi-value-title {
width: 15rem;
padding-right: 0.6rem;
}
.cbi-value-field .cbi-dropdown,
.cbi-value-field .cbi-input-select,
.cbi-value input[type="text"],
.cbi-value input[type="password"] {
min-width: 18rem;
}
#cbi-firewall-zone .cbi-input-select {
min-width: 9rem;
}
.cbi-input-textarea {
font-size: small;
}
.node-admin-status > .main fieldset li > a {
padding: 0.3rem 0.6rem;
}
}
@media screen and (max-width: 1152px) {
header {
height: 3.5rem;
}
header > .fill > .container {
padding: 0 1rem;
}
header > .fill > .container #logo {
display: none;
}
header > .fill > .container .brand {
margin: 0 0.5rem 0 0;
font-size: 1rem;
display: flex !important;
align-items: center !important;
line-height: normal !important;
height: 100%;
}
.label,
[data-indicator] {
font-size: 0.75rem;
padding: 0.25rem 0.5rem;
}
#luxe-settings-menu {
top: 4rem !important;
}
.showSide {
display: inline-flex;
align-items: center;
justify-content: center;
width: 24px;
height: 24px;
cursor: pointer;
flex-shrink: 0;
background: transparent !important;
position: relative;
margin-right: 1.2rem;
border: none !important;
box-shadow: none !important;
}
.showSide::before,
.showSide::after {
content: "";
position: absolute;
left: 0;
width: 100%;
height: 2px;
background-color: var(--textColor);
border-radius: 2px;
transform-origin: 30% 50%;
transition: top 0.5s cubic-bezier(0.4, 0, 0.2, 1), transform 0.5s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.5s cubic-bezier(0.4, 0, 0.2, 1), width 0.5s cubic-bezier(0.4, 0, 0.2, 1), left 0.5s cubic-bezier(0.4, 0, 0.2, 1);
}
.showSide::before {
top: 5px;
box-shadow: 0 7px 0 0 var(--textColor);
}
.showSide::after {
top: 19px;
}
.showSide.active::before,
body.sidebar-open .showSide::before {
top: 12px;
box-shadow: 0 0 0 0 transparent;
transform: rotate(45deg);
}
.showSide.active::after,
body.sidebar-open .showSide::after {
top: 12px;
transform: rotate(-45deg);
width: 100%;
left: 0;
}
body:not(.logged-in) .showSide {
display: none;
}
.main {
top: 3.5rem;
height: calc(100% - 3.5rem);
}
.main-left {
position: fixed;
top: calc(3.5rem + 8px);
left: 15px;
z-index: 1000;
width: 250px;
max-width: calc(100vw - 30px);
height: calc(100% - 3.5rem - 16px);
background-color: var(--mainleftbgColor);
border-radius: 20px;
transform: translateX(-120%);
visibility: hidden;
opacity: 0;
transition: width 400ms cubic-bezier(0.25, 1, 0.5, 1), visibility 400ms ease, opacity 400ms ease, transform 400ms cubic-bezier(0.25, 1, 0.5, 1);
}
.main-left.sidebar-open {
transform: translateX(0);
visibility: visible;
opacity: 1;
}
.main-right {
width: 100%;
}
body {
font-size: 0.8rem;
line-height: 1.35;
}
.btn,
.cbi-button {
font-size: 0.88rem;
padding: 0.35rem 1rem;
}
.cbi-button + .cbi-button {
margin-left: 0.5rem;
}
.tabs,
.cbi-tabmenu {
margin: 0.5rem auto 0.7rem;
gap: 0.4rem;
}
.tabs > li > a,
.cbi-tabmenu > li > a {
font-size: 0.77rem;
padding: 0.45rem 0.9rem;
}
.cbi-section > h3:first-child,
.panel-title {
font-size: 1.15rem;
padding-bottom: 0.3rem;
}
table,
.table {
font-size: 0.75rem !important;
width: 100% !important;
border: none !important;
}
.table .cbi-input-text {
width: 100%;
}
.cbi-value-field .cbi-dropdown,
.cbi-value-field .cbi-input-select,
.cbi-value input[type="text"],
.cbi-value input[type="password"] {
width: 100%;
min-width: 14rem;
}
#cbi-firewall-zone .cbi-input-select {
min-width: 4rem;
}
.main > .main-left > .nav > li > a,
.main > .main-left > .nav > .slide > .menu,
.main > .main-left > .nav > li > [data-title] {
font-size: 0.9rem;
}
.main > .main-left > .nav > .slide > .slide-menu > li > a {
font-size: 0.8rem;
}
.alert,
.alert-message {
padding: 0.7rem 0.9rem;
margin-bottom: 1.2rem;
}
[data-page="admin-network-firewall-forwards"] .table:not(.cbi-section-table),
[data-page="admin-network-firewall-rules"] .table:not(.cbi-section-table),
[data-page="admin-network-hosts"] .table,
[data-page="admin-network-routes"] .table {
display: block;
overflow-y: visible;
}
.commandbox {
width: 32% !important;
}
html,
.main {
overflow-y: visible;
}
.cbi-value-title {
width: 10rem;
padding-right: 1rem;
}
.cbi-value input[type="password"],
.cbi-value input[name^="pw"],
.cbi-value input[data-update="change"]:nth-child(2) {
width: 13rem !important;
min-width: 13rem;
}
input[type="text"],
input[type="password"],
input[type="number"] {
padding: 0 0.6rem;
}
.cbi-value input.cbi-input-password,
.cbi-value input[type="password"],
.cbi-value input[name^="pw"] {
width: calc(100% - 2.5rem) !important;
min-width: 0 !important;
}
#diag-rc-output > pre,
#command-rc-output > pre,
[data-page="admin-services-wol"] .notice code {
font-size: 1.05rem;
}
.network-status-table .ifacebox-body .ifacebadge {
margin: 0.2rem 0.6rem 0 0;
padding: 0.3rem;
min-width: 120px;
}
.Interfaces .table {
overflow-x: hidden;
}
#packages.table {
display: grid;
}
.tr {
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
.Overview .table[width="100%"] > .tr {
flex-wrap: nowrap;
}
.tr.placeholder {
border: none !important;
}
.tr.placeholder > .td,
#cbi-firewall .tr > .td,
#cbi-network .tr:nth-child(2) > .td,
.cbi-section #wifi_assoclist_table .tr > .td {
border-top: none !important;
}
.th,
.td {
display: inline-block;
align-self: flex-start;
flex: 2 2 25%;
text-overflow: ellipsis;
word-wrap: break-word;
}
.td select,
.td input[type="text"] {
width: 100%;
word-wrap: normal;
}
.td [data-dynlist] > input,
.td input.cbi-input-password {
width: calc(100% - 1.5rem);
}
.td[data-type="button"],
.td[data-type="fvalue"] {
flex: 1 1 12.5%;
text-align: left;
}
.th.cbi-value-field,
.td.cbi-value-field,
.th.cbi-section-table-cell,
.td.cbi-section-table-cell {
flex-basis: auto;
padding-top: 1rem;
}
.cbi-section-table-row {
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-between;
box-shadow: var(--sectionShaddow);
margin-bottom: 1.35rem;
}
.td.cbi-value-field,
.cbi-section-table-cell {
display: inline-block;
flex: 10 10 auto;
flex-basis: 50%;
text-align: center;
}
.td.cbi-section-actions {
vertical-align: bottom;
}
.tr[data-title]::before,
.tr.cbi-section-table-titles.named::before {
font-size: 0.95rem;
display: block;
flex: 1 1 100%;
border: none !important;
background: var(--focusColor);
color: var(--textColor);
}
.td.cbi-section-actions > * > *,
.td.cbi-section-actions > * > form > * {
margin: 2px 4px;
}
.Firewall form {
position: static !important;
box-shadow: var(--sectionShaddow);
margin: 0 0 2rem;
padding: 2rem;
}
.Firewall form input {
width: 100% !important;
margin: 1rem 0 0;
}
.Firewall .center,
.Firewall .center::before {
text-align: left !important;
}
.commandbox {
width: 100% !important;
margin-left: 0 !important;
}
.tr.table-titles,
.tr.cbi-section-table-titles,
.tr.cbi-section-table-descr {
display: none;
}
.td[data-title],
[data-page^="admin-status-realtime"] .td[id] {
text-align: left;
}
.table,
.td[data-title]::before {
display: block;
}
}
@media screen and (max-width: 992px) {
.main-left {
width: 240px;
}
.btn,
.cbi-button {
font-size: 0.82rem;
padding: 0.28rem 0.8rem;
}
}
@media screen and (max-width: 768px) {
.main-left {
width: 235px;
}
body {
font-size: 0.75rem;
}
header > .fill > .container .brand {
font-size: 0.9rem;
}
.label,
[data-indicator] {
font-size: 0.65rem;
padding: 0.2rem 0.4rem;
}
.cbi-dropdown[open] > ul.dropdown {
left: 50% !important;
transform: translateX(-50%) !important;
width: max-content !important;
min-width: 100% !important;
max-width: 85vw !important;
}
.tr:has(.cbi-progressbar) {
display: flex !important;
flex-direction: row !important;
flex-wrap: nowrap !important;
align-items: center !important;
justify-content: space-between !important;
gap: 0.2rem !important;
}
.tr:has(.cbi-progressbar) > .td {
padding: 0.4rem 0.8rem !important;
flex: 0 0 auto !important;
width: auto !important;
border: none !important;
}
.tr:has(.cbi-progressbar) > .td:first-child {
flex: 1 1 35% !important;
text-align: left !important;
white-space: normal !important;
word-break: break-word !important;
}
.tr:has(.cbi-progressbar) > .td:last-child {
flex: 1 1 65% !important;
text-align: right !important;
display: flex;
justify-content: flex-end;
}
.cbi-progressbar {
width: 100% !important;
min-width: 80px !important;
max-width: 100% !important;
height: auto !important;
margin: 0 !important;
border-radius: 0 !important;
}
.cbi-progressbar::after {
font-size: 0.7rem !important;
line-height: 1.5 !important;
padding-bottom: 4px !important;
}
fieldset,
.cbi-section {
margin: 1rem 0 0;
padding: 1rem 1.2rem !important;
}
/* On phones/tablets keep the content full-width (cap never applies here) and
* shrink the side gutter to 1rem so forms and tables use the available space. */
#maincontent > .container {
margin: 0 auto 1.5rem !important;
padding: 0 1rem !important;
}
/* Was padding: 0.2rem, almost no gutter at all — too tight for comfortable
* tapping on phones. Bumped up slightly so rows/buttons don't feel cramped. */
[data-page="admin-system-package-manager"] #maincontent > .container {
margin: 0 auto 1.5rem !important;
padding: 0.5rem !important;
}
.main > .main-left > .nav > li > a,
.main > .main-left > .nav > .slide > .menu,
.main > .main-left > .nav > li > [data-title] {
font-size: 0.9rem;
}
.main > .main-left > .nav > .slide > .slide-menu > li > a {
font-size: 0.8rem;
}
.cbi-value-title {
display: block;
width: 100%;
text-align: left;
margin: 0.2rem 0;
}
.cbi-value > .cbi-value-field {
display: inline-block;
}
.cbi-page-actions > .cbi-button {
margin-top: 0.5rem;
margin-bottom: 0.5rem;
margin-left: 0.6rem;
}
.btn,
.cbi-button {
font-size: 0.75rem;
padding: 0.22rem 0.6rem;
margin-left: 0.5rem;
}
.tabs > li > a,
.cbi-tabmenu > li > a {
font-size: 0.68rem;
padding: 0.4rem 0.8rem;
}
.commandbox p:first-of-type {
margin-top: -8px;
}
#syslog,
#diag-rc-output > pre,
#command-rc-output > pre,
[data-page="admin-services-wol"] .notice code {
font-size: 0.8rem !important;
}
h2 {
font-size: 1.65rem;
text-align: center;
}
.cbi-section > h3:first-child,
.panel-title {
font-size: 1.2rem;
padding-bottom: 0.2rem;
text-align: left;
}
.node-system-packages > .main .cbi-value.cbi-value-last > div {
width: 100% !important;
}
.cbi-section-table-row {
margin-bottom: 1rem;
}
.th,
.td {
flex-basis: 50%;
padding: 0.35rem 0.5rem;
}
.cbi-value-field {
flex-basis: 100%;
min-width: 0;
max-width: 100%;
box-sizing: border-box;
}
.cbi-modal .cbi-value-field div:not([class*="cbi-dropdown"]),
.cbi-modal .cbi-value-field span:not([class*="cbi-dropdown"]),
#cbi-wireless .cbi-value-field div:not([class*="cbi-dropdown"]),
#cbi-wireless .cbi-value-field span:not([class*="cbi-dropdown"]) {
white-space: normal !important;
word-break: break-word;
overflow-wrap: anywhere;
max-width: 100%;
box-sizing: border-box;
}
.ifacebadge {
max-width: 100%;
flex-wrap: wrap;
height: auto;
white-space: normal !important;
word-break: break-word;
box-sizing: border-box;
}
.td.cbi-value-field[data-type="button"],
.td.cbi-value-field[data-type="fvalue"] {
flex-basis: 25%;
text-align: left;
}
td > .ifacebadge,
.td > .ifacebadge {
font-size: 0.67rem;
}
.network-status-table .ifacebox {
margin: 0.1rem 0;
}
.ifacebox {
min-width: 75px;
}
.ifacebox-head {
padding: 0.2rem 0.4rem;
font-size: 0.95em;
}
.ifacebox-body {
padding: 0.2rem 0.4rem;
}
.network-status-table .ifacebox-body .ifacebadge {
margin: 0.1rem 0.5rem 0 0;
padding: 0.3rem;
min-width: 100px;
}
#cbi-wireless > #wifi_assoclist_table .td {
overflow: hidden;
}
#cbi-wireless > .cbi-section-node .td,
.Interfaces .td.cbi-section-actions {
text-align: center !important;
}
.cbi-modal {
padding: 0.5rem;
}
.cbi-modal .cbi-value {
padding: 0 0 0.25rem;
}
.cbi-modal [data-tab-title] {
padding: 0 0.25rem !important;
}
[data-tab-title] {
padding: 0 0.5rem !important;
}
.alert,
.alert-message {
padding: 0.5rem 0.8rem;
margin-bottom: 1rem;
}
.main > .main-left > .nav > .slide > .slide-menu > li > a,
.tr[data-title]::before,
.tr.cbi-section-table-titles.named::before {
font-size: 1rem;
}
.cbi-value-title,
.cbi-value-description,
.cbi-value-field,
.cbi-value-field .cbi-dropdown,
.cbi-value-field .cbi-input-select,
.cbi-value input[type="text"],
.node-system-packages > .main .cbi-value .cbi-value-field input {
width: 100%;
}
.mobile-hide,
[data-page="admin-status-processes"] .td[data-title="Hang Up"]::before,
[data-page="admin-status-processes"] .td[data-title="Terminate"]::before,
[data-page="admin-status-processes"] .td[data-title="Kill"]::before,
.hide-sm,
.hide-xs:not([data-title="MAC-Address"]) {
display: none;
}
select,
input:not([type="checkbox"]) {
font-size: 0.9rem;
}
#xhr_poll_status,
#xhr_poll_status.label,
#xhr_poll_status.label.danger,
#xhr_poll_status.label.success,
#xhr_poll_status.btn,
#xhr_poll_status.cbi-button,
[data-indicator="poll-status"],
[data-indicator="cbi-poll-status"] {
width: 20px !important;
height: 20px !important;
min-height: 20px !important;
}
#settings-toggle svg,
.status > * > svg {
width: 20px !important;
height: 20px !important;
}
}
@media screen and (max-width: 470px) {
.main-left {
width: 215px;
}
header > .fill > .container .brand {
font-size: 0.85rem;
}
.label,
[data-indicator] {
font-size: 0.6rem;
padding: 0.15rem 0.35rem;
}
fieldset,
.cbi-section {
margin: 0.8rem 0 0;
padding: 0.7rem 0.8rem !important;
}
.tr:has(.cbi-progressbar) > .td {
padding: 0.3rem 0.6rem !important;
}
.cbi-modal {
padding: 0.4rem;
}
[data-tab-title] {
padding: 0 0.4rem !important;
}
.btn,
.cbi-button {
font-size: 0.7rem;
padding: 0.18rem 0.45rem;
}
.tabs > li > a,
.cbi-tabmenu > li > a {
font-size: 0.67rem;
padding: 0.35rem 0.6rem;
}
.cbi-dropdown-container .cbi-dropdown {
min-width: 100%;
}
.main > .main-left > .nav > li > a,
.main > .main-left > .nav > .slide > .menu,
.main > .main-left > .nav > li > [data-title] {
font-size: 0.85rem;
}
.main > .main-left > .nav > .slide > .slide-menu > li > a {
font-size: 0.75rem;
}
.alert,
.alert-message {
padding: 0.4rem 0.6rem;
margin-bottom: 0.8rem;
}
#xhr_poll_status,
#xhr_poll_status.label,
#xhr_poll_status.label.danger,
#xhr_poll_status.label.success,
#xhr_poll_status.btn,
#xhr_poll_status.cbi-button,
[data-indicator="poll-status"],
[data-indicator="cbi-poll-status"] {
width: 18px !important;
height: 18px !important;
min-height: 18px !important;
}
#settings-toggle svg,
.status > * > svg {
width: 18px !important;
height: 18px !important;
}
}
@media screen and (max-width: 400px) {
.main-left {
width: 205px;
}
header > .fill > .container .brand {
font-size: 0.8rem;
}
fieldset,
.cbi-section {
margin: 0.8rem 0 0;
padding: 0.6rem 0.7rem !important;
}
h2 {
font-size: 1.45rem;
}
.cbi-section > h3:first-child,
.panel-title {
font-size: 1.15rem;
}
}
@media screen and (max-width: 370px) {
.main-left {
width: 195px;
}
header > .fill > .container .brand {
font-size: 0.75rem;
}
.label,
[data-indicator] {
font-size: 0.55rem;
padding: 0.15rem 0.3rem;
}
.btn,
.cbi-button {
font-size: 0.65rem;
padding: 0.15rem 0.4rem;
}
.tabs > li > a,
.cbi-tabmenu > li > a {
font-size: 0.63rem;
padding: 0.3rem 0.5rem;
}
}
@media screen and (min-width: 992px) {
::-webkit-scrollbar,
*::-webkit-scrollbar {
width: 10px;
height: 10px;
}
}
/* Luxe-2 */
.main > .loading {
animation: forceHideLoader 0.5s ease-in 3s forwards;
}
@keyframes forceHideLoader {
to {
opacity: 0;
visibility: hidden;
pointer-events: none;
display: none;
}
}
body[data-enable-navbar="0"] #row-slider-navbar,
body[data-enable-navbar="0"] #row-icon-count,
body[data-enable-navbar="0"] #row-autohide-navbar,
body[data-slider="true"] #row-icon-count {
display: none !important;
}
body[data-enable-navbar="0"] #floating-navbar {
display: none !important;
opacity: 0 !important;
pointer-events: none !important;
}
#floating-navbar.navbar-hidden {
opacity: 0 !important;
transform: translateX(-50%) translateY(150%) translateZ(0) !important;
pointer-events: none !important;
}
#floating-navbar {
display: flex;
flex-direction: row;
align-items: center;
position: fixed;
z-index: 200;
bottom: calc(15px + env(safe-area-inset-bottom));
left: 50%;
transform: translateX(-50%) translateY(0) translateZ(0);
height: 46px;
width: max-content;
max-width: 90vw;
padding: 0;
border: var(--navBorder, 1px solid rgba(31,41,51,.08));
border-radius: var(--nav-border-radius, 14px);
background-color: var(--navbgColor, #fbfcff);
box-shadow: 0 10px 30px rgba(0,0,0,.25), inset 0 1px 0 rgba(255,255,255,.05);
backdrop-filter: blur(16px);
-webkit-backdrop-filter: blur(16px);
transition: transform 0.6s cubic-bezier(0.25, 1, 0.4, 1), opacity 0.6s cubic-bezier(0.25, 1, 0.4, 1);
will-change: transform, opacity;
}
.floating-icons-wrapper {
display: flex;
flex-direction: row;
align-items: center;
height: 100%;
overflow: visible !important;
}
#floating-navbar a {
display: flex;
justify-content: center;
align-items: center;
text-decoration: none;
height: 100%;
z-index: 10;
-webkit-tap-highlight-color: transparent;
}
#floating-navbar a img {
object-fit: contain;
z-index: 2;
transform-origin: center bottom;
transform: translateY(0) scale(1);
transition: transform 0.5s cubic-bezier(0.25, 1.15, 0.4, 1), filter 0.5s ease;
will-change: transform;
}
#floating-navbar:not(.nav-slider-active) {
min-width: 200px;
padding: 0 12px;
}
#floating-navbar:not(.nav-slider-active) .nav-arrow {
display: none !important;
}
#floating-navbar:not(.nav-slider-active) .floating-icons-wrapper {
justify-content: space-evenly;
width: 100%;
gap: clamp(4px, 2vw, 16px);
}
#floating-navbar:not(.nav-slider-active) a {
flex: 1 1 auto;
width: clamp(28px, 9vw, 40px);
}
#floating-navbar:not(.nav-slider-active) a img {
width: clamp(26px, 8vw, 32px);
height: clamp(26px, 8vw, 32px);
}
body[data-icon="4"] #floating-navbar:not(.nav-slider-active) #iconWrapper a:nth-child(n+5),
body[data-icon="5"] #floating-navbar:not(.nav-slider-active) #iconWrapper a:nth-child(n+6),
body[data-icon="6"] #floating-navbar:not(.nav-slider-active) #iconWrapper a:nth-child(n+7),
body[data-icon="7"] #floating-navbar:not(.nav-slider-active) #iconWrapper a:nth-child(n+8),
body[data-icon="8"] #floating-navbar:not(.nav-slider-active) #iconWrapper a:nth-child(n+9) {
display: none !important;
}
#floating-navbar.nav-slider-active {
padding: 0 4px;
}
#floating-navbar.nav-slider-active .floating-icons-wrapper {
flex: 0 0 230px;
width: 230px;
max-width: 230px;
gap: 0;
justify-content: flex-start;
scroll-behavior: smooth;
scroll-snap-type: x mandatory;
overflow-x: auto !important;
overflow-y: hidden !important;
scrollbar-width: none;
-webkit-overflow-scrolling: touch;
padding: 30px 0 !important;
margin: -30px 0 !important;
}
#floating-navbar.nav-slider-active .floating-icons-wrapper::-webkit-scrollbar {
display: none !important;
width: 0 !important;
height: 0 !important;
}
#floating-navbar.nav-slider-active a {
flex: 0 0 46px;
width: 46px;
scroll-snap-align: center;
}
#floating-navbar.nav-slider-active a img {
width: 28px !important;
height: 28px !important;
}
#floating-navbar.nav-slider-active .nav-arrow {
display: flex;
align-items: center;
justify-content: center;
flex: 0 0 22px;
width: 22px;
height: 100%;
color: var(--activeColor);
font-size: 20px;
font-weight: 700;
cursor: pointer;
transition: transform .2s ease;
-webkit-tap-highlight-color: transparent;
}
#floating-navbar.nav-slider-active #prevArrow {
order: 1;
}
#floating-navbar.nav-slider-active .floating-icons-wrapper {
order: 2;
}
#floating-navbar.nav-slider-active #nextArrow {
order: 3;
}
#floating-navbar.nav-slider-active .nav-arrow:active {
transform: scale(.85);
}
#floating-navbar a:hover img {
transform: translateY(-8px) scale(1.15);
filter: drop-shadow(0px 6px 8px rgba(0,0,0,0.2));
}
#floating-navbar a.active img {
transform: translateY(-2px) scale(1.1);
filter: drop-shadow(0px 3px 4px rgba(0,0,0,0.25));
}
#floating-navbar a.active:hover img {
transform: translateY(-8px) scale(1.15);
filter: drop-shadow(0px 6px 8px rgba(0,0,0,0.3));
}
@media (hover:none) and (pointer:coarse) {
#floating-navbar a:hover img {
transform: translateY(-2px) scale(1.1);
}
#floating-navbar a:active img {
transform: translateY(-8px) scale(1.15);
transition: transform 0.15s ease-out;
}
}
@media screen and (max-width: 370px) {
#floating-navbar {
height: 42px;
}
#floating-navbar:not(.nav-slider-active) {
padding: 0 8px;
min-width: 180px;
}
#floating-navbar.nav-slider-active {
padding: 0 4px;
}
#floating-navbar.nav-slider-active .nav-arrow {
flex-basis: 18px;
width: 18px;
}
#floating-navbar.nav-slider-active .floating-icons-wrapper {
flex-basis: 178px;
width: 178px;
max-width: 178px;
}
#floating-navbar.nav-slider-active a {
flex-basis: 34px;
width: 34px;
}
#floating-navbar:not(.nav-slider-active) a img,
#floating-navbar.nav-slider-active a img {
width: 26px !important;
height: 26px !important;
}
}
html.luxe-login-auth,
.luxe-login,
.luxe-login * {
margin: 0;
padding: 0;
box-sizing: border-box;
transition: all 0.4s ease;
}
html.luxe-login-auth {
height: 100%;
overflow: hidden;
}
.luxe-login {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
font-family: system-ui, sans-serif;
background: var(--luxe-bg);
color: var(--luxe-text);
overflow: hidden;
position: fixed;
inset: 0;
}
.luxe-login .theme-pages-toggle {
position: absolute;
top: 20px;
right: 20px;
z-index: 1000;
animation: fadeInDown 0.6s ease 0.2s both;
}
.luxe-login .theme-pages-btn {
border-radius: 20px;
border: none;
padding: 5px 12px;
cursor: pointer;
font-weight: 600;
font-size: 10px;
font-family: inherit;
text-transform: uppercase;
letter-spacing: 0.6px;
background: var(--luxe-bg);
color: var(--luxe-text);
box-shadow: var(--luxe-shadow-out);
position: relative;
overflow: hidden;
}
.luxe-login .theme-pages-btn::before,
.luxe-login input[type="submit"]::before {
content: "";
position: absolute;
top: 0;
right: -100%;
width: 100%;
height: 100%;
transition: right 0.4s ease;
}
.luxe-login .theme-pages-btn::before {
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.15), transparent);
}
.luxe-login input[type="submit"]::before {
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent);
}
.luxe-login .theme-pages-btn:hover::before,
.luxe-login input[type="submit"]:hover::before {
right: 100%;
}
.luxe-login .theme-pages-btn:hover {
box-shadow: var(--luxe-shadow-in);
transform: scale(0.95);
}
.luxe-login form {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
width: 100%;
height: 100%;
position: relative;
}
.luxe-login .alert-message {
padding: 10px 14px !important;
border-radius: 10px !important;
background: var(--luxe-bg) !important;
color: var(--luxe-text) !important;
box-shadow: var(--luxe-shadow-out) !important;
border: 1px solid rgba(255, 255, 255, 0.03) !important;
border-left: 3px solid var(--luxe-accent) !important;
backdrop-filter: none !important;
-webkit-backdrop-filter: none !important;
font-weight: 500;
animation: slideDown 0.4s ease;
font-size: 12px;
position: absolute;
top: calc(50% - 225px);
width: 90%;
max-width: 320px;
text-align: center;
z-index: 9999;
}
.luxe-login .login_form_container {
width: 320px;
height: auto;
min-height: 310px;
border-radius: 28px;
display: flex;
align-items: center;
justify-content: center;
background: var(--luxe-bg);
box-shadow: var(--luxe-shadow-deep);
animation: slideUpFade 0.8s ease both;
position: relative;
padding: 2px;
z-index: 1;
}
.luxe-login .login_form {
width: 100%;
height: 100%;
padding: 20px 25px 52px 25px;
border-radius: 26px;
background: var(--luxe-bg);
box-shadow: var(--luxe-shadow-in);
display: flex;
flex-direction: column;
justify-content: center;
position: relative;
z-index: 2;
}
.luxe-login h2 {
font-size: 24px;
font-weight: 700;
text-align: center;
margin-bottom: 10px;
color: var(--luxe-text);
animation: fadeIn 0.6s ease 0.3s both;
font-family: monospace !important;
min-height: 29px;
line-height: 29px;
}
.luxe-login .date-time {
text-align: center;
font-size: 12px;
opacity: 0.8;
margin-bottom: 18px;
color: var(--luxe-muted);
font-weight: 500;
animation: fadeIn 0.6s ease 0.4s both;
min-height: 18px;
line-height: 18px;
}
.luxe-login .input_group {
width: 86%;
margin-left: auto;
margin-right: auto;
margin-bottom: 10px;
background: var(--luxe-bg) !important;
box-shadow: var(--luxe-shadow-in) !important;
border: none !important;
padding: 2px;
position: relative;
border-radius: 22px;
display: flex;
align-items: center;
}
.luxe-login .input_group:nth-child(3) {
animation: fadeIn 0.6s ease 0.5s both;
}
.luxe-login .input_group:nth-child(4) {
animation: fadeIn 0.6s ease 0.6s both;
}
.luxe-login .input_text,
.luxe-login input[type="submit"] {
height: 34px !important;
min-height: 34px !important;
border: none !important;
outline: none !important;
font-size: 12px;
}
.luxe-login .input_text {
width: 100%;
border-radius: 14px !important;
padding: 0 40px 0 16px !important;
background: transparent !important;
color: var(--luxe-input) !important;
box-shadow: none !important;
position: relative;
z-index: 1;
}
.luxe-login .input_text:focus {
transform: scale(1.02);
box-shadow: none !important;
background: transparent !important;
}
.luxe-login ::placeholder {
color: var(--luxe-muted) !important;
opacity: 0.6 !important;
}
.luxe-login .t_eye {
position: absolute;
right: 14px;
cursor: pointer;
font-size: 16px;
color: var(--luxe-muted);
z-index: 10;
user-select: none;
transition: color 0.3s ease;
}
.luxe-login .t_eye:hover {
color: var(--luxe-accent);
}
.luxe-login input[type="submit"] {
width: 86%;
margin-left: auto;
margin-right: auto;
margin-top: 10px;
font-weight: 600;
font-family: inherit;
letter-spacing: 2px;
cursor: pointer;
background: var(--luxe-bg) !important;
color: var(--luxe-accent) !important;
box-shadow: var(--luxe-shadow-out) !important;
border-radius: 22px !important;
animation: fadeIn 0.6s ease 0.7s both;
position: relative;
overflow: hidden;
}
.luxe-login input[type="submit"]:hover {
box-shadow: var(--luxe-shadow-in) !important;
color: var(--luxe-input) !important;
background: var(--luxe-bg) !important;
transform: scale(0.98);
}
.luxe-login .footer {
position: absolute;
bottom: 18px;
left: 0;
right: 0;
width: 100%;
text-align: center;
font-size: 11px;
color: var(--luxe-muted);
opacity: 0.7;
animation: fadeIn 0.6s ease 0.8s both;
letter-spacing: 0.3px;
}
.luxe-login.light {
--luxe-bg: #e6eef5;
--luxe-text: #2d3748;
--luxe-accent: #3182ce;
--luxe-input: #1a202c;
--luxe-muted: #718096;
--luxe-shadow-out: 8px 8px 16px #cbd5e0, -8px -8px 16px #ffffff;
--luxe-shadow-in: inset 4px 4px 8px #cbd5e0, inset -4px -4px 8px #ffffff;
--luxe-shadow-deep: 16px 16px 32px #cbd5e0, -16px -16px 32px #ffffff;
}
.luxe-login.brutal {
--luxe-bg: #f4f0e6;
--luxe-text: #0f0f0f;
--luxe-accent: #ff3b30;
--luxe-input: #0f0f0f;
--luxe-muted: #555;
--luxe-shadow-out: 4px 4px 0px #0f0f0f;
--luxe-shadow-in: inset 4px 4px 0px rgba(0,0,0,0.05);
--luxe-shadow-deep: 6px 6px 0px #0f0f0f;
}
.luxe-login.brutal .login_form_container,
.luxe-login.brutal .login_form,
.luxe-login.brutal .input_group,
.luxe-login.brutal input[type="submit"],
.luxe-login.brutal .theme-pages-btn {
border-radius: 0 !important;
border: 2px solid #0f0f0f !important;
}
.luxe-login.brutal .alert-message {
border-radius: 0 !important;
border: 2px solid #0f0f0f !important;
border-left: 6px solid var(--luxe-accent) !important;
}
.luxe-login.brutal .login_form_container {
padding: 0;
background: #fff !important;
box-shadow: var(--luxe-shadow-deep) !important;
}
.luxe-login.glass .login_form,
.luxe-login.metal-glass .login_form,
.luxe-login.brutal .login_form,
.luxe-login.glass-matte .login_form {
background: transparent !important;
box-shadow: none !important;
}
.luxe-login.brutal .login_form {
border: none !important;
}
.luxe-login.brutal .input_group {
margin-bottom: 15px;
padding: 0;
background: #fff !important;
box-shadow: var(--luxe-shadow-in) !important;
border-color: #0f0f0f !important;
}
.luxe-login.brutal .input_text {
border-radius: 0 !important;
}
.luxe-login.brutal input[type="submit"] {
box-shadow: var(--luxe-shadow-out) !important;
background: var(--luxe-accent) !important;
color: #fff !important;
text-transform: uppercase;
}
.luxe-login.brutal input[type="submit"]:hover {
box-shadow: 0px 0px 0px #0f0f0f !important;
transform: translate(4px, 4px);
background: #0f0f0f !important;
color: #fff !important;
}
.luxe-login.brutal .theme-pages-btn {
box-shadow: var(--luxe-shadow-out);
background: #fff;
}
.luxe-login.brutal .theme-pages-btn:hover {
box-shadow: 0px 0px 0px #0f0f0f;
transform: translate(4px, 4px);
}
.luxe-login.glass::before {
content: "";
position: fixed;
inset: 0;
background: url('../images/luxe-os.png') center/cover no-repeat;
z-index: -2;
}
.luxe-login.glass-matte::before {
content: "";
position: fixed;
inset: 0;
background: url('../images/luxe-os.png') center/cover no-repeat;
z-index: -2;
filter: blur(10px);
transform: scale(1.15);
}
.luxe-login.glass {
--luxe-bg: transparent;
--luxe-text: #fff;
--luxe-accent: #fff;
--luxe-input: #fff;
--luxe-muted: rgba(255, 255, 255, 0.8);
--luxe-shadow-out: 0 4px 15px rgba(0, 0, 0, 0.3);
--luxe-shadow-in: inset 1px 1px 3px rgba(0, 0, 0, 0.3);
--luxe-shadow-deep: 0 8px 32px rgba(0, 0, 0, 0.4);
}
.luxe-login.glass .login_form_container,
.luxe-login.glass .theme-pages-btn {
background: transparent !important;
backdrop-filter: none !important;
border: 1px solid rgba(255, 255, 255, 0.35) !important;
}
.luxe-login.glass .alert-message {
background: transparent !important;
border: 1px solid rgba(255, 255, 255, 0.35) !important;
}
.luxe-login.glass .input_group {
background: transparent !important;
border: 1px solid rgba(255, 255, 255, 0.25) !important;
box-shadow: var(--luxe-shadow-in) !important;
}
.luxe-login.glass input[type="submit"] {
background: transparent !important;
border: 1px solid rgba(255, 255, 255, 0.35) !important;
box-shadow: var(--luxe-shadow-out) !important;
}
.luxe-login.glass input[type="submit"]:hover {
background: rgba(255, 255, 255, 0.15) !important;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4) !important;
transform: scale(0.98);
border-color: rgba(255, 255, 255, 0.5) !important;
}
.luxe-login.glass-matte {
--luxe-bg: transparent;
--luxe-text: #fff;
--luxe-accent: #fff;
--luxe-input: #fff;
--luxe-muted: rgba(255, 255, 255, 0.85);
--luxe-shadow-out: 0 8px 24px rgba(0, 0, 0, 0.2), inset 1px 1px 2px rgba(255, 255, 255, 0.8), inset -1px -1px 2px rgba(0, 0, 0, 0.1);
--luxe-shadow-in: inset 2px 2px 6px rgba(0, 0, 0, 0.25), inset -1px -1px 2px rgba(255, 255, 255, 0.15);
--luxe-shadow-deep: 0 15px 35px rgba(0, 0, 0, 0.35), inset 1.5px 1.5px 3px rgba(255, 255, 255, 0.95), inset -1.5px -1.5px 3px rgba(0, 0, 0, 0.2);
}
.luxe-login.glass-matte .login_form_container,
.luxe-login.glass-matte .theme-pages-btn,
.luxe-login.glass-matte .alert-message {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.04) 0%, rgba(255, 255, 255, 0) 100%) !important;
border: 1px solid rgba(255, 255, 255, 0.5) !important;
border-bottom-color: rgba(255, 255, 255, 0.1) !important;
border-right-color: rgba(255, 255, 255, 0.1) !important;
box-shadow: var(--luxe-shadow-deep) !important;
}
.luxe-login.glass-matte .input_group {
background: rgba(0, 0, 0, 0.08) !important;
border: 1px solid rgba(255, 255, 255, 0.15) !important;
border-top-color: rgba(0, 0, 0, 0.15) !important;
border-left-color: rgba(0, 0, 0, 0.15) !important;
box-shadow: var(--luxe-shadow-in) !important;
}
.luxe-login.glass-matte input[type="submit"] {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0.0) 100%) !important;
border: 1px solid rgba(255, 255, 255, 0.4) !important;
border-bottom-color: rgba(255, 255, 255, 0.05) !important;
border-right-color: rgba(255, 255, 255, 0.05) !important;
box-shadow: var(--luxe-shadow-out) !important;
}
.luxe-login.glass-matte input[type="submit"]:hover {
background: linear-gradient(135deg, rgba(255, 255, 255, 0.15) 0%, rgba(255, 255, 255, 0.02) 100%) !important;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25), inset 1px 1px 2px rgba(255, 255, 255, 0.9), inset -1px -1px 2px rgba(0, 0, 0, 0.15) !important;
transform: scale(0.98);
}
.luxe-login.metal-glass {
--luxe-bg: linear-gradient(145deg, #e2e6eb 0%, #7e8794 45%, #050505 100%);
--luxe-text: #f0f0f5;
--luxe-accent: #b0c4de;
--luxe-input: #fff;
--luxe-muted: rgba(200, 210, 220, 0.7);
--luxe-shadow-out: 8px 8px 16px rgba(0, 0, 0, 0.7), -4px -4px 12px rgba(255, 255, 255, 0.2);
--luxe-shadow-in: inset 3px 3px 8px rgba(10, 10, 15, 0.8), inset -2px -2px 6px rgba(255, 255, 255, 0.3);
--luxe-shadow-deep: 0 30px 60px rgba(0, 0, 0, 0.6), 0 12px 24px rgba(0, 0, 0, 0.4), inset 2px 2px 5px rgba(255, 255, 255, 0.7), inset -3px -3px 6px rgba(0, 0, 0, 0.8);
}
.luxe-login.metal-glass .login_form_container,
.luxe-login.metal-glass .theme-pages-btn {
backdrop-filter: blur(12px) grayscale(40%);
background: linear-gradient(145deg, rgba(220, 225, 230, 0.2), rgba(20, 20, 25, 0.7)) !important;
border: 1px solid rgba(255, 255, 255, 0.1) !important;
border-top: 1px solid rgba(255, 255, 255, 0.6) !important;
border-left: 1px solid rgba(255, 255, 255, 0.4) !important;
border-bottom: 1px solid rgba(0, 0, 0, 0.8) !important;
border-right: 1px solid rgba(0, 0, 0, 0.6) !important;
}
.luxe-login.metal-glass .alert-message {
backdrop-filter: blur(12px) grayscale(40%) !important;
-webkit-backdrop-filter: blur(12px) grayscale(40%) !important;
background: linear-gradient(145deg, rgba(220, 225, 230, 0.2), rgba(20, 20, 25, 0.7)) !important;
border: 1px solid rgba(255, 255, 255, 0.1) !important;
border-top: 1px solid rgba(255, 255, 255, 0.6) !important;
border-bottom: 1px solid rgba(0, 0, 0, 0.8) !important;
border-right: 1px solid rgba(0, 0, 0, 0.6) !important;
}
.luxe-login.metal-glass .input_group {
background: linear-gradient(to bottom, rgba(15, 15, 20, 0.5), rgba(50, 50, 55, 0.2)) !important;
border-top: 1px solid rgba(0, 0, 0, 0.8) !important;
border-bottom: 1px solid rgba(255, 255, 255, 0.15) !important;
box-shadow: var(--luxe-shadow-in) !important;
}
.luxe-login.metal-glass input[type="submit"] {
background: linear-gradient(to bottom, rgba(160, 170, 180, 0.4), rgba(70, 75, 85, 0.6)) !important;
border: 1px solid rgba(200, 200, 210, 0.4) !important;
box-shadow: var(--luxe-shadow-out), inset 0 2px 4px rgba(255,255,255,0.4) !important;
text-shadow: 0 1px 2px rgba(0,0,0,0.8);
}
.luxe-login.metal-glass input[type="submit"]:hover {
background: linear-gradient(to bottom, rgba(180, 190, 200, 0.5), rgba(90, 95, 105, 0.7)) !important;
transform: scale(0.98);
box-shadow: inset 0 1px 3px rgba(255, 255, 255, 0.3), 0 2px 8px rgba(0, 0, 0, 0.6) !important;
}
.luxe-login.liquid-flow {
--luxe-bg: linear-gradient(145deg, #e2e6eb 0%, #7e8794 45%, #050505 100%);
--luxe-text: #f0f0f5;
--luxe-accent: #b0c4de;
--luxe-input: #fff;
--luxe-muted: rgba(200, 210, 220, 0.7);
--luxe-shadow-out: 6px 6px 14px rgba(0, 0, 0, 0.5), -6px -6px 14px rgba(255, 255, 255, 0.15);
--luxe-shadow-in: inset 1px 1px 3px rgba(0, 0, 0, 0.5), inset -1px -1px 3px rgba(255, 255, 255, 0.1);
--luxe-shadow-deep: 12px 12px 24px rgba(0, 0, 0, 0.6), -12px -12px 24px rgba(255, 255, 255, 0.05);
}
.luxe-login.liquid-flow .alert-message {
background: rgba(30, 35, 40, 0.35) !important;
backdrop-filter: blur(14px) saturate(130%) !important;
-webkit-backdrop-filter: blur(14px) saturate(130%) !important;
border: 1px solid rgba(255, 255, 255, 0.15) !important;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3) !important;
}
.luxe-login.liquid-flow .login_form_container {
padding: 0 !important;
box-shadow: 0 16px 40px rgba(0, 0, 0, 0.5), 0 8px 16px rgba(0, 0, 0, 0.4), inset 2px 2px 4px rgba(255, 255, 255, 0.3), inset -2px -2px 5px rgba(0, 0, 0, 0.6) !important;
background: rgba(30, 35, 40, 0.25) !important;
backdrop-filter: blur(14px) saturate(130%) !important;
-webkit-backdrop-filter: blur(14px) saturate(130%) !important;
border: 1px solid rgba(255, 255, 255, 0.1) !important;
border-radius: 60% 40% 30% 70% / 60% 30% 70% 40%;
animation: slideUpFade 0.8s ease both, liquidFlow 10s ease-in-out 1s infinite;
}
.luxe-login.liquid-flow .login_form {
background: transparent !important;
backdrop-filter: none !important;
-webkit-backdrop-filter: none !important;
border-radius: inherit;
box-shadow: none !important;
animation: liquidFlow 10s ease-in-out 1s infinite;
width: 100% !important;
height: 100% !important;
}
.luxe-login.liquid-flow input[type="submit"] {
box-shadow: var(--luxe-shadow-out), inset 2px 2px 4px rgba(255, 255, 255, 0.35), inset -2px -2px 4px rgba(0, 0, 0, 0.8) !important;
border: 1px solid rgba(255, 255, 255, 0.15) !important;
}
.luxe-login.liquid-flow input[type="submit"]:hover {
box-shadow: inset 2px 2px 6px rgba(0, 0, 0, 0.8), inset -2px -2px 6px rgba(255, 255, 255, 0.2) !important;
transform: scale(0.98);
}
.luxe-login.liquid-flow .liquid-flow-paused {
animation-play-state: paused !important;
}
.luxe-login.gradien {
--luxe-bg: rgba(10, 10, 20, 0.25);
--luxe-text: #fff;
--luxe-accent: #fff;
--luxe-input: #fff;
--luxe-muted: rgba(255, 255, 255, 0.95);
--luxe-shadow-out: 8px 8px 16px rgba(0, 0, 0, 0.3), -8px -8px 16px rgba(255, 255, 255, 0.06);
--luxe-shadow-in: inset 4px 4px 8px rgba(0, 0, 0, 0.2), inset -4px -4px 8px rgba(255, 255, 255, 0.06);
--luxe-shadow-deep: 20px 20px 40px rgba(0, 0, 0, 0.4), -20px -20px 40px rgba(255, 255, 255, 0.05);
}
.luxe-login.gradien::after {
content: "";
position: fixed;
inset: 0;
background: linear-gradient(135deg, rgba(0, 0, 0, 0.2), rgba(0, 0, 0, 0.35));
z-index: -1;
}
.luxe-login.gradien::before {
content: "";
position: fixed;
inset: 0;
background: linear-gradient(45deg, #667eea, #764ba2, #f093fb, #4facfe, #84fab0, #ff9a9e, #fccb90, #e0c3fc);
background-size: 800% 800%;
animation: bgShift 15s ease infinite;
z-index: -2;
}
.luxe-login.gradien .login_form_container {
background: rgba(20, 20, 35, 0.25) !important;
backdrop-filter: blur(18px) saturate(200%);
border: 1.5px solid rgba(255, 255, 255, 0.3) !important;
}
.luxe-login.gradien .login_form {
background: rgba(10, 10, 25, 0.2) !important;
backdrop-filter: blur(12px) saturate(180%);
}
.luxe-login.neon,
.luxe-login.curve,
.luxe-login.matrix,
.luxe-login.pulse,
.luxe-login.ocean {
--luxe-bg: #0e1b3c;
}
.luxe-login.neon {
--luxe-text: #00d9ff;
--luxe-accent: #00d9ff;
--luxe-input: #ff00ff;
--luxe-muted: #7a8ea8;
--luxe-grad: linear-gradient(90deg, #00d9ff, #ff00ff, #00d9ff);
--luxe-gsize: 200% 200%;
}
.luxe-login.curve {
--luxe-text: #8ac9e6;
--luxe-accent: #8ac9e6;
--luxe-input: #d96aa3;
--luxe-muted: #e8e096;
--luxe-grad: linear-gradient(180deg, #4cc9f0 0%, #4cc9f0 25%, #f72585 25%, #f72585 50%, #fef13c 50%, #fef13c 75%, #4ff181 75%, #4ff181 100%);
--luxe-gsize: 200% 200%;
}
.luxe-login.matrix {
--luxe-text: #9c9fe8;
--luxe-accent: #9c9fe8;
--luxe-input: #e8e096;
--luxe-muted: #a0aac5;
--luxe-grad: linear-gradient(135deg, #7a7dd6 0%, #1a1d4f 30%, #7a7dd6 60%, #fef338 100%);
--luxe-gsize: 300% 300%;
}
.luxe-login.pulse {
--luxe-text: #4cc9f0;
--luxe-accent: #4cc9f0;
--luxe-input: #f72585;
--luxe-muted: #fef13c;
}
.luxe-login.neon h2 {
text-shadow: 0 0 5px rgba(0, 217, 255, 0.4), 0 0 10px rgba(255, 0, 255, 0.3);
}
.luxe-login.curve h2 {
text-shadow: 0 0 5px rgba(76, 201, 240, 0.4), 0 0 8px rgba(76, 201, 240, 0.2);
}
.luxe-login.matrix h2 {
text-shadow: 0 0 5px rgba(122, 125, 214, 0.4), 0 0 10px rgba(122, 125, 214, 0.2);
}
.luxe-login.neon .login_form_container,
.luxe-login.curve .login_form_container,
.luxe-login.matrix .login_form_container,
.luxe-login.pulse .login_form_container {
background: transparent !important;
background-size: var(--luxe-gsize);
padding: 3px !important;
position: relative;
animation: slideUpFade 0.8s ease both;
}
.luxe-login.ocean .login_form_container {
background: transparent !important;
padding: 3px !important;
overflow: hidden !important;
position: relative;
z-index: 1;
}
.luxe-login.neon .login_form_container::before,
.luxe-login.curve .login_form_container::before,
.luxe-login.matrix .login_form_container::before,
.luxe-login.pulse .login_form_container::before {
content: "";
position: absolute;
inset: 0;
background: var(--luxe-grad);
background-size: var(--luxe-gsize);
border-radius: 28px;
z-index: -1;
}
.luxe-login.pulse .login_form_container::before {
inset: 2px;
border-radius: 26px;
}
.luxe-login.neon .login_form_container::before {
animation: bgShift 3s ease infinite;
}
.luxe-login.curve .login_form_container::before {
animation: dualShift 13s ease-in-out infinite;
}
.luxe-login.matrix .login_form_container::before {
animation: matrixFlow 4s ease-in-out infinite;
}
.luxe-login.pulse .login_form_container::before {
animation: pulseGlow 4s ease-in-out infinite;
}
.luxe-login.neon .login_form,
.luxe-login.curve .login_form,
.luxe-login.matrix .login_form,
.luxe-login.pulse .login_form,
.luxe-login.ocean .login_form {
background: var(--luxe-bg) !important;
box-shadow: none !important;
border-radius: 25px !important;
}
.luxe-login.ocean {
--luxe-bg: #16213e;
--luxe-text: #00ff93;
--luxe-accent: #00ff93;
--luxe-input: #00a8cc;
--luxe-muted: #a0a0a0;
}
.luxe-login.ocean .login_form_container::before {
content: "";
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background: conic-gradient(#82ffbc 0deg 90deg, transparent 90deg 180deg, #4f00ff 180deg 270deg, transparent 270deg 360deg);
animation: borderRotate 4s linear infinite;
z-index: -1;
border-radius: 0;
}
@keyframes slideUpFade {
from {
opacity: 0;
transform: translateY(60px) scale(0.95);
}
to {
opacity: 1;
transform: translateY(0) scale(1);
}
}
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(15px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes fadeInDown {
from {
opacity: 0;
transform: translateY(-15px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes slideDown {
from {
opacity: 0;
transform: translateY(-20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@keyframes liquidFlow {
0%, 100% {
border-radius: 60% 40% 30% 70%/60% 30% 70% 40%;
}
32% {
border-radius: 100% 60% 60% 100%/100% 100% 60% 60%;
}
64% {
border-radius: 50% 60% 90% 40%/60% 40% 40% 50%;
}
}
@keyframes bgShift {
0%, 100% {
background-position: 0% 50%;
}
50% {
background-position: 100% 50%;
}
}
@keyframes borderRotate {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
@keyframes pulseGlow {
0%, 100% {
box-shadow: 0 0 8px #4cc9f0, inset 0 0 8px rgba(76, 201, 240, 0.1);
}
25% {
box-shadow: 0 0 8px #f72585, inset 0 0 8px rgba(247, 37, 133, 0.1);
}
50% {
box-shadow: 0 0 8px #fef13c, inset 0 0 8px rgba(254, 241, 60, 0.1);
}
75% {
box-shadow: 0 0 8px #4ff181, inset 0 0 8px rgba(79, 241, 129, 0.1);
}
}
@keyframes dualShift {
0%, 100% {
background-position: 0% 0%;
}
25% {
background-position: 100% 0%;
}
50% {
background-position: 100% 100%;
}
75% {
background-position: 0% 100%;
}
}
@keyframes matrixFlow {
0%, 100% {
background-position: 0% 0%;
}
50% {
background-position: 50% 100%;
}
}
@media (max-width: 768px) {
.luxe-login .login_form_container {
width: 78vw;
min-height: 275px;
max-width: 260px;
}
.luxe-login .login_form {
padding: 15px 18px 42px 18px;
}
.luxe-login h2 {
font-size: 22px;
margin-bottom: 8px;
}
.luxe-login .date-time {
font-size: 11px;
margin-bottom: 15px;
}
.luxe-login .input_text,
.luxe-login input[type="submit"] {
height: 32px !important;
min-height: 32px !important;
font-size: 12px;
}
.luxe-login .input_text {
padding: 0 35px 0 14px !important;
}
.luxe-login .input_group {
margin-bottom: 10px;
}
.luxe-login input[type="submit"] {
margin-top: 8px;
}
.luxe-login .theme-pages-toggle {
top: 12px;
right: 12px;
}
.luxe-login .theme-pages-btn {
padding: 4px 10px;
font-size: 9px;
}
.luxe-login .footer {
bottom: 14px;
font-size: 11px;
}
.luxe-login .alert-message {
top: calc(50% - 190px) !important;
max-width: 82%;
}
}