BastionGuard/webui/assets/css/style.css
specialworld83 f0f913a209 Release 2.0
2026-07-15 10:52:22 +02:00

683 lines
38 KiB
CSS

@font-face{font-family:"Cantarell";src:url("../fonts/Cantarell-VF.otf") format("opentype");font-weight:100 900;font-style:normal;font-display:block}
/* BastionGuard WebUI font policy: Cantarell only.
The Debian package must depend on fonts-cantarell.
No remote fonts and no CSS fallback families are used. */
html,body,button,input,select,textarea,table,.btn,.form-control,.form-select,.dropdown-menu,.modal,.tooltip,.popover,pre,code,kbd,samp{font-family:"Cantarell" !important}
*{font-family:"Cantarell" !important}
/* BastionGuard WebUI theme
* Palette ported from the BastionGuard GTK light/dark CSS files.
* The original GTK selectors are not loaded directly because the WebUI uses HTML/Bootstrap.
*/
:root{
--bg:#f4f6f8;
--surface:#ffffff;
--surface-2:#f1f3f5;
--surface-3:#e2e6ea;
--text:#212529;
--muted:#6c757d;
--muted-2:#495057;
--border:#dee2e6;
--border-strong:#3a6ea5;
--shadow:0 1px 3px rgba(0,0,0,.10),0 12px 30px rgba(33,37,41,.06);
--sidebar-bg:#3a6ea5;
--sidebar-bg-hover:#2c5d8a;
--sidebar-bg-active:rgba(255,255,255,.20);
--sidebar-text:#ffffff;
--sidebar-muted:rgba(255,255,255,.82);
--sidebar-border:rgba(255,255,255,.12);
--primary:#0d6efd;
--primary-hover:#0b5ed7;
--primary-active:#0a58ca;
--success:#28a745;
--success-hover:#218838;
--danger:#dc3545;
--danger-hover:#c82333;
--warning:#e0952a;
--warning-hover:#c47d1a;
--info-bg:#e3f2fd;
--info-text:#0277bd;
--info-border:#81d4fa;
--warning-bg:#fff8e1;
--warning-text:#856404;
--warning-border:#ffc107;
--success-bg:#e8f5e9;
--success-text:#2e7d32;
--success-border:#81c784;
--code-bg:#f8f9fa;
--log-bg:#f8f9fa;
--log-text:#495057;
--input-bg:#ffffff;
--input-focus:#eef2ff;
--input-text:#212529;
--scroll-thumb:#3a6ea5;
--progress-track:#e9ecef;
--progress-start:#28a745;
--progress-end:#34ce57;
}
html[data-theme="dark"]{
--bg:#1a1d23;
--surface:#242830;
--surface-2:#2a2f3b;
--surface-3:#2e333e;
--text:#e4e7eb;
--muted:#b0b8c5;
--muted-2:#c9cdd4;
--border:#3a3f4b;
--border-strong:#4d8fe0;
--shadow:0 1px 3px rgba(0,0,0,.40),0 16px 38px rgba(0,0,0,.28);
--sidebar-bg:#1e3352;
--sidebar-bg-hover:#1e3a56;
--sidebar-bg-active:rgba(255,255,255,.20);
--sidebar-text:#ffffff;
--sidebar-muted:#d0d9e8;
--sidebar-border:rgba(255,255,255,.12);
--primary:#0d6efd;
--primary-hover:#0b5ed7;
--primary-active:#0a58ca;
--success:#28a745;
--success-hover:#218838;
--danger:#dc3545;
--danger-hover:#c82333;
--warning:#e0952a;
--warning-hover:#c47d1a;
--info-bg:#0a2833;
--info-text:#6dcfe0;
--info-border:#1a4a56;
--warning-bg:#332b00;
--warning-text:#f0c040;
--warning-border:#5a4800;
--success-bg:#0d2b12;
--success-text:#4dbb6a;
--success-border:#1a5c28;
--code-bg:#0f1117;
--log-bg:#0f1117;
--log-text:#c9cdd4;
--input-bg:#1e2229;
--input-focus:#1a2030;
--input-text:#e4e7eb;
--scroll-thumb:#1e3352;
--progress-track:#1a1f28;
--progress-start:#28a745;
--progress-end:#34ce57;
}
@media (prefers-color-scheme: dark){
html[data-theme="system"]{
--bg:#1a1d23;--surface:#242830;--surface-2:#2a2f3b;--surface-3:#2e333e;--text:#e4e7eb;--muted:#b0b8c5;--muted-2:#c9cdd4;--border:#3a3f4b;--border-strong:#4d8fe0;--shadow:0 1px 3px rgba(0,0,0,.40),0 16px 38px rgba(0,0,0,.28);--sidebar-bg:#1e3352;--sidebar-bg-hover:#1e3a56;--sidebar-bg-active:rgba(255,255,255,.20);--sidebar-text:#ffffff;--sidebar-muted:#d0d9e8;--sidebar-border:rgba(255,255,255,.12);--primary:#0d6efd;--primary-hover:#0b5ed7;--primary-active:#0a58ca;--success:#28a745;--success-hover:#218838;--danger:#dc3545;--danger-hover:#c82333;--warning:#e0952a;--warning-hover:#c47d1a;--info-bg:#0a2833;--info-text:#6dcfe0;--info-border:#1a4a56;--warning-bg:#332b00;--warning-text:#f0c040;--warning-border:#5a4800;--success-bg:#0d2b12;--success-text:#4dbb6a;--success-border:#1a5c28;--code-bg:#0f1117;--log-bg:#0f1117;--log-text:#c9cdd4;--input-bg:#1e2229;--input-focus:#1a2030;--input-text:#e4e7eb;--scroll-thumb:#1e3352;--progress-track:#1a1f28;--progress-start:#28a745;--progress-end:#34ce57;
}
}
html,body{min-height:100%;margin:0}
body{background:var(--bg);color:var(--text);font-family:"Cantarell";direction:ltr;font-size:14px}
a{color:var(--primary)}a:hover{color:var(--primary-hover)}
.app-shell{display:grid;grid-template-columns:282px minmax(0,1fr);min-height:100vh;width:100%;direction:ltr}
.sidebar{grid-column:1;grid-row:1;width:282px;background:var(--sidebar-bg);color:var(--sidebar-text);position:sticky;top:0;left:0;right:auto;height:100vh;max-height:100vh;overflow-y:auto;padding:18px 14px;z-index:1000;border-bottom-left-radius:12px;box-shadow:8px 0 28px rgba(0,0,0,.08)}
.brand{display:flex;align-items:center;gap:12px;padding:10px 8px 18px;border-bottom:1px solid var(--sidebar-border);margin-bottom:12px}.brand strong{color:#fff;font-size:15px}.brand small{display:block;color:var(--sidebar-muted);font-size:.78rem}.brand-mark{width:42px;height:42px;border-radius:14px;display:grid;place-items:center;background:rgba(255,255,255,.08)}
.sidebar-nav .nav-link{display:flex;align-items:center;gap:10px;color:var(--sidebar-text);border-radius:8px;padding:8px 12px;margin:0 0 6px;text-decoration:none;font-weight:500;transition:background-color .16s ease,color .16s ease,transform .16s ease}.sidebar-nav .nav-link:hover{background:rgba(255,255,255,.12);color:#fff;transform:translateX(1px)}.sidebar-nav .nav-link.active{background:var(--sidebar-bg-active);color:#fff;font-weight:600}.sidebar-nav .nav-link.text-danger{color:#ffe1e5!important}.sidebar-nav .nav-link.text-danger:hover{background:rgba(220,53,69,.32)}
.nav-group{margin:8px 0}.nav-section-toggle{width:100%;border:0;background:transparent;color:var(--sidebar-muted);font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;margin:10px 0 4px;padding:8px 10px;border-radius:8px;display:flex;align-items:center;justify-content:space-between;text-align:left;font-weight:600}.nav-section-toggle:hover{background:rgba(255,255,255,.12);color:#fff}.nav-section-toggle span{display:flex;align-items:center;gap:8px}.nav-chevron{transition:transform .18s ease}.nav-section-toggle:not(.collapsed) .nav-chevron{transform:rotate(180deg)}.nav-group-collapse{padding-left:4px}
.sidebar-preferences{margin-top:14px;padding:12px 10px;border-top:1px solid var(--sidebar-border);color:var(--sidebar-text)}.sidebar-pref-title{font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;color:var(--sidebar-muted);margin-bottom:8px}.sidebar-preferences .btn-outline-light{--bs-btn-color:var(--sidebar-text);--bs-btn-border-color:rgba(255,255,255,.18);--bs-btn-hover-bg:rgba(255,255,255,.12);--bs-btn-hover-border-color:rgba(255,255,255,.35)}
.main-content{grid-column:2;grid-row:1;min-width:0;margin-left:0;overflow-x:hidden}.content-inner{padding:30px;max-width:1560px;margin:0 auto}.content{background:var(--bg);padding:20px}.page-title{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:22px}.page-title h1{font-size:1.7rem;margin:0;font-weight:750;color:var(--text)}.page-title p{margin:.3rem 0 0;color:var(--muted)}.small-muted,.form-hint,.text-muted{color:var(--muted)!important}.copy-muted{white-space:pre-wrap}
.card{background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow);overflow:hidden}.card-body{padding:18px}.card h5,.card h6{font-weight:700;color:var(--text)}.section-card h5{font-weight:700}.metric{min-height:116px}.metric .icon{width:48px;height:48px;border-radius:12px;display:grid;place-items:center;background:rgba(13,110,253,.12);color:var(--primary);flex:0 0 48px;font-size:1.25rem}
.card .btn,.card button.btn,.page-title .btn,.sidebar-preferences .btn{border-radius:6px;font-weight:500;padding:6px 12px}.card .btn{box-shadow:0 1px 2px rgba(0,0,0,.08)}.card .btn:hover{transform:translateY(-1px);box-shadow:0 4px 12px rgba(0,0,0,.12)}.card .btn:active{transform:none;box-shadow:0 1px 2px rgba(0,0,0,.08)}
.btn-primary{--bs-btn-bg:var(--primary);--bs-btn-border-color:var(--primary);--bs-btn-hover-bg:var(--primary-hover);--bs-btn-hover-border-color:var(--primary-hover);--bs-btn-active-bg:var(--primary-active);--bs-btn-active-border-color:var(--primary-active);--bs-btn-color:#fff;--bs-btn-hover-color:#fff;--bs-btn-active-color:#fff}.btn-success{--bs-btn-bg:var(--success);--bs-btn-border-color:var(--success);--bs-btn-hover-bg:var(--success-hover);--bs-btn-hover-border-color:var(--success-hover);--bs-btn-color:#fff;--bs-btn-hover-color:#fff}.btn-danger{--bs-btn-bg:var(--danger);--bs-btn-border-color:var(--danger);--bs-btn-hover-bg:var(--danger-hover);--bs-btn-hover-border-color:var(--danger-hover);--bs-btn-color:#fff;--bs-btn-hover-color:#fff}.btn-warning{--bs-btn-bg:var(--warning);--bs-btn-border-color:var(--warning);--bs-btn-hover-bg:var(--warning-hover);--bs-btn-hover-border-color:var(--warning-hover);--bs-btn-color:#fff;--bs-btn-hover-color:#fff}
.btn-outline-primary{--bs-btn-color:var(--primary);--bs-btn-border-color:var(--primary);--bs-btn-hover-bg:var(--primary);--bs-btn-hover-border-color:var(--primary);--bs-btn-hover-color:#fff}.btn-outline-danger{--bs-btn-color:var(--danger);--bs-btn-border-color:var(--danger);--bs-btn-hover-bg:var(--danger);--bs-btn-hover-border-color:var(--danger);--bs-btn-hover-color:#fff}.btn-outline-warning{--bs-btn-color:var(--warning);--bs-btn-border-color:var(--warning);--bs-btn-hover-bg:var(--warning);--bs-btn-hover-border-color:var(--warning);--bs-btn-hover-color:#fff}.btn-outline-secondary{--bs-btn-color:var(--muted-2);--bs-btn-border-color:var(--border);--bs-btn-hover-bg:var(--surface-3);--bs-btn-hover-border-color:var(--border);--bs-btn-hover-color:var(--text)}.btn-light{--bs-btn-bg:var(--surface-2);--bs-btn-border-color:var(--border);--bs-btn-color:var(--text);--bs-btn-hover-bg:var(--surface-3);--bs-btn-hover-color:var(--text)}.btn:disabled,.btn.disabled{background:var(--surface-3)!important;border-color:var(--border)!important;color:var(--muted)!important;box-shadow:none!important}
.action-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:16px;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:12px}.action-card .btn{align-self:flex-start}.card-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}.card-actions .btn{min-width:120px}.input-group .btn{box-shadow:none}.input-group .btn:hover{transform:none}
.list-group-item{background:var(--surface);color:var(--text);border-color:var(--border)}.list-group-flush>.list-group-item{background:transparent}.table{--bs-table-bg:transparent;--bs-table-color:var(--text);--bs-table-border-color:var(--border);--bs-table-hover-bg:var(--surface-2)}.table td,.table th{vertical-align:middle;color:var(--text);border-color:var(--border)}.table thead th{color:var(--muted-2);font-size:.82rem;text-transform:uppercase;letter-spacing:.04em}.table-service-status tbody tr{border-top:1px solid var(--border)}
.form-control,.form-select,textarea.form-control{background-color:var(--input-bg);color:var(--input-text);border-color:var(--border);border-radius:10px}.form-control:focus,.form-select:focus,textarea.form-control:focus{background-color:var(--input-focus);color:var(--input-text);border-color:var(--border-strong);box-shadow:0 0 0 .18rem rgba(13,110,253,.16)}.form-control::placeholder{color:var(--muted)}.form-check-input{background-color:var(--input-bg);border-color:var(--border)}.form-check-input:checked{background-color:var(--primary);border-color:var(--primary)}.form-label,.form-check-label{color:var(--text)}
.nav-tabs{border-bottom:1px solid var(--border)}.nav-tabs .nav-link{background:var(--surface);border:1px solid var(--border);border-bottom:0;color:var(--muted-2);border-top-left-radius:6px;border-top-right-radius:6px;margin-right:4px}.nav-tabs .nav-link:hover{background:var(--surface-2);color:var(--text)}.nav-tabs .nav-link.active{background:var(--surface-3);color:var(--text);border-color:var(--border);border-bottom:2px solid var(--border-strong)}.tab-pane{padding-top:18px}
.alert{border-radius:8px}.alert-light{background:var(--surface-2);color:var(--text);border-color:var(--border)}.alert-info{background:var(--info-bg);color:var(--info-text);border-color:var(--info-border)}.alert-warning{background:var(--warning-bg);color:var(--warning-text);border-color:var(--warning-border)}.alert-success,.success-label{background:var(--success-bg);color:var(--success-text);border-color:var(--success-border)}.danger-zone{border:1px dashed var(--danger)}
.log-box{background:var(--log-bg);color:var(--log-text);border:1px solid var(--border);border-radius:6px;padding:16px;min-height:180px;max-height:520px;overflow:auto;white-space:pre-wrap;font-family:"Cantarell";font-size:.86rem}.code-box,pre.code-box{background:var(--code-bg);border:1px solid var(--border);border-radius:10px;padding:12px;color:var(--text);font-family:"Cantarell"}.list-scroll,.import-preview{max-height:360px;overflow:auto}
.badge-soft{background:rgba(13,110,253,.12);color:var(--primary);border:1px solid rgba(13,110,253,.22)}.password-cell,.service-name,.samba-share{font-family:"Cantarell"}.password-mask{letter-spacing:.15em;color:var(--muted)}.service-meta{font-size:.82rem;color:var(--muted)}.state-dot{display:inline-block;width:.6rem;height:.6rem;border-radius:999px;margin-right:.35rem;background:#9ca3af}.state-dot.active{background:#16a34a}.state-dot.failed{background:#dc2626}.state-dot.activating{background:#f59e0b}.pm-file-ok{color:#16a34a}.pm-file-missing{color:#f59e0b}
.brand-logo{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px}.brand-logo svg{width:34px;height:34px;max-width:34px;max-height:34px;display:block}.brand-logo.fallback{font-size:22px}.about-logo{display:inline-flex;align-items:center;justify-content:center;width:72px;height:72px}.about-logo svg{width:72px;height:72px;max-width:72px;max-height:72px}
.progress,.progress-BastionGuard{background:var(--progress-track);border-radius:10px;min-height:14px}.progress-bar,.progress-BastionGuard progress{background-image:linear-gradient(90deg,var(--progress-start),var(--progress-end))}.spinner-border{color:var(--primary)}
::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:rgba(58,110,165,.08);border-radius:8px}::-webkit-scrollbar-thumb{background:var(--scroll-thumb);border-radius:8px}::-webkit-scrollbar-thumb:hover{background:var(--sidebar-bg-hover)}
@media(max-width:980px){.app-shell{display:block}.sidebar{position:relative;width:100%;height:auto;max-height:none;border-radius:0}.main-content{margin-left:0}.content-inner{padding:18px;max-width:none}.page-title{display:block}.page-title .d-flex{margin-top:12px}.card-actions .btn{min-width:auto;width:100%}}
/* ===========================
* AUTH / SETUP SPLIT WEBPANEL
* v15 - BastionGuard WebPanel login and setup
* =========================== */
body.auth-page{
min-height:100vh;
overflow:auto;
background:#f5f8fc;
color:#1f2937;
}
.auth-shell{
min-height:100vh;
display:grid;
grid-template-columns:minmax(420px,56vw) minmax(420px,44vw);
background:#f5f8fc;
}
.auth-brand-panel{
position:relative;
overflow:hidden;
display:flex;
align-items:center;
padding:clamp(44px,7vw,110px) clamp(38px,8vw,160px);
background:
radial-gradient(circle at 78% 0%, rgba(30,83,132,.72) 0 0, rgba(30,83,132,.72) 14%, transparent 14.3%),
radial-gradient(circle at 52% 104%, rgba(24,80,130,.38) 0 0, rgba(24,80,130,.38) 18%, transparent 18.4%),
linear-gradient(135deg,#062844 0%,#061f36 48%,#082b4c 100%);
color:#fff;
isolation:isolate;
}
.auth-brand-panel:before{
content:"";
position:absolute;
inset:0;
background:
linear-gradient(90deg,rgba(255,255,255,.035) 0 0) 68% 0/1px 100% no-repeat,
linear-gradient(180deg,rgba(255,255,255,.035) 0 0) 0 38%/100% 1px no-repeat,
linear-gradient(135deg,transparent 0 59%,rgba(28,95,150,.28) 59.2% 72%,transparent 72.2%) 62% 38%/32% 40% no-repeat,
linear-gradient(135deg,rgba(4,20,38,.05),rgba(30,97,154,.28));
z-index:-2;
}
.auth-brand-panel:after{
content:"";
position:absolute;
width:34vw;
height:34vw;
min-width:360px;
min-height:360px;
border-radius:50%;
left:30%;
bottom:-22%;
background:radial-gradient(circle,transparent 0 42%,rgba(14,74,126,.34) 42.3% 70%,transparent 70.4%);
z-index:-1;
}
.auth-brand-content{
position:relative;
z-index:3;
max-width:720px;
}
.auth-kicker{
margin:0 0 18px;
font-size:clamp(1.1rem,1.6vw,1.55rem);
color:rgba(255,255,255,.86);
font-weight:400;
}
.auth-brand-content h1{
margin:0;
color:#fff;
font-weight:850;
letter-spacing:-.055em;
line-height:.98;
font-size:clamp(3.4rem,6.1vw,6.7rem);
text-shadow:0 4px 22px rgba(0,0,0,.22);
}
.auth-brand-lockup{
margin-top:42px;
display:flex;
align-items:center;
gap:18px;
}
.auth-brand-logo{
width:72px;
height:72px;
display:inline-flex;
align-items:center;
justify-content:center;
filter:drop-shadow(0 10px 22px rgba(0,0,0,.35));
}
.auth-brand-logo svg{
width:72px;
height:72px;
max-width:72px;
max-height:72px;
display:block;
}
.auth-brand-logo.fallback{font-size:54px;color:#fff}
.auth-brand-lockup strong{
display:block;
color:#fff;
font-size:clamp(1.8rem,2.9vw,3rem);
font-weight:800;
letter-spacing:-.035em;
}
.auth-brand-lockup span{
display:block;
margin-top:2px;
color:#32b8ff;
font-size:.88rem;
text-transform:uppercase;
font-weight:800;
letter-spacing:.065em;
}
.auth-shape{
position:absolute;
pointer-events:none;
z-index:0;
}
.auth-shape-one{
right:9%;
top:37%;
width:27vw;
height:27vw;
min-width:320px;
min-height:320px;
background:linear-gradient(135deg,rgba(23,87,145,.28),rgba(2,22,39,.18));
border-radius:2px;
}
.auth-shape-two{
right:-5%;
bottom:12%;
width:23vw;
height:23vw;
min-width:260px;
min-height:260px;
background:linear-gradient(135deg,transparent 0 49%,rgba(30,104,170,.45) 50% 100%);
border-radius:2px;
}
.auth-dot-grid{
position:absolute;
right:8.2%;
top:42%;
width:230px;
height:260px;
background-image:radial-gradient(circle,rgba(43,150,226,.52) 0 12px,transparent 13px);
background-size:72px 72px;
opacity:.68;
z-index:1;
}
.auth-form-panel{
min-height:100vh;
display:flex;
align-items:center;
justify-content:center;
padding:48px;
background:linear-gradient(135deg,#f9fbfe 0%,#eef3f9 100%);
}
.auth-card-wrap{
position:relative;
width:min(430px,100%);
}
.setup-card-wrap{width:min(520px,100%)}
.auth-floating-logo{
position:absolute;
top:-48px;
left:50%;
transform:translateX(-50%);
width:96px;
height:96px;
border-radius:22px;
background:#fff;
display:flex;
align-items:center;
justify-content:center;
box-shadow:0 14px 32px rgba(15,45,80,.14),0 3px 12px rgba(15,45,80,.08);
z-index:2;
}
.auth-floating-logo-mark,
.auth-floating-logo-mark svg{
width:66px;
height:66px;
max-width:66px;
max-height:66px;
display:block;
}
.auth-floating-logo-mark.fallback{font-size:48px}
.auth-card{
position:relative;
background:#fff;
border:1px solid rgba(215,223,232,.92);
border-radius:22px;
padding:78px 36px 34px;
box-shadow:0 30px 80px rgba(14,37,65,.15),0 10px 24px rgba(14,37,65,.08);
color:#1f2937;
}
.setup-card{padding-top:76px}
.auth-card-header{text-align:center;margin-bottom:28px}
.auth-card-header h2{
margin:0;
font-size:1.62rem;
color:#1f2937;
font-weight:800;
letter-spacing:-.025em;
}
.auth-card-header p{
margin:.45rem 0 0;
color:#8491a3;
font-size:1rem;
}
.auth-card .form-label{
color:#374151;
font-weight:600;
margin-bottom:.55rem;
}
.auth-input,
.auth-card .form-control,
.auth-card .form-select{
height:52px;
border-radius:11px;
background:#fff;
color:#1f2937;
border:1px solid #d8e1eb;
box-shadow:inset 0 1px 1px rgba(17,24,39,.02);
}
.auth-card .form-control:focus,
.auth-card .form-select:focus{
background:#fff;
color:#1f2937;
border-color:#8fc4f5;
box-shadow:0 0 0 .22rem rgba(13,110,253,.12);
}
.auth-password-field{position:relative}
.auth-password-field .form-control{padding-right:52px}
.auth-eye{
position:absolute;
right:12px;
top:50%;
transform:translateY(-50%);
border:0;
background:transparent;
color:#7b8797;
width:34px;
height:34px;
border-radius:9px;
display:grid;
place-items:center;
font-size:18px;
line-height:1;
}
.auth-eye:hover{background:#f0f5fb;color:#0b4a6d}
.auth-submit{
height:56px;
border-radius:11px!important;
background:linear-gradient(135deg,#0b4a6d,#062f5f)!important;
border-color:#06355a!important;
box-shadow:0 10px 22px rgba(6,47,95,.22)!important;
font-size:1.05rem;
font-weight:800;
}
.auth-submit:hover{background:linear-gradient(135deg,#0a4262,#052a55)!important;transform:translateY(-1px)}
.auth-version{
position:absolute;
right:22px;
bottom:18px;
color:#a8b2c1;
font-size:.78rem;
}
.auth-info-note{
border:1px solid #9bd0ff;
background:#edf7ff;
color:#1166b1;
border-radius:10px;
padding:12px 14px;
font-weight:600;
font-size:.9rem;
}
.setup-card .form-hint{font-size:.82rem;color:#7b8797!important;margin-top:.35rem}
.setup-card .alert{border-radius:12px}
@media(max-width:1100px){
.auth-shell{grid-template-columns:1fr;}
.auth-brand-panel{min-height:44vh;padding:52px 34px;}
.auth-form-panel{min-height:56vh;padding:72px 24px 44px;}
.auth-brand-content h1{font-size:clamp(3.2rem,10vw,5.8rem)}
.auth-dot-grid{right:5%;top:35%}
}
@media(max-width:560px){
.auth-brand-panel{padding:44px 24px;min-height:42vh}
.auth-brand-content h1{font-size:3rem}
.auth-brand-lockup{margin-top:26px}
.auth-brand-logo,.auth-brand-logo svg{width:56px;height:56px;max-width:56px;max-height:56px}
.auth-brand-lockup strong{font-size:1.7rem}
.auth-brand-lockup span{font-size:.68rem}
.auth-form-panel{padding:72px 16px 32px}
.auth-card{padding:70px 22px 32px;border-radius:18px}
.auth-floating-logo{width:84px;height:84px;top:-42px;border-radius:20px}
.auth-floating-logo-mark,.auth-floating-logo-mark svg{width:58px;height:58px;max-width:58px;max-height:58px}
}
/* v16 - WebPanel users setup shortcut */
.sidebar-user-setup {
margin: .75rem 0 .65rem 0;
padding-top: .65rem;
border-top: 1px solid rgba(255,255,255,.12);
}
.sidebar-user-setup .nav-link {
border: 1px solid rgba(255,255,255,.14);
background: rgba(255,255,255,.08);
}
.sidebar-user-setup .nav-link:hover,
.sidebar-user-setup .nav-link.active {
background: rgba(255,255,255,.18);
}
/* v17 - auth i18n and quick theme/language controls */
.auth-preferences{
position:fixed;
top:18px;
right:20px;
z-index:20;
display:flex;
align-items:center;
gap:6px;
padding:6px;
border-radius:999px;
background:rgba(255,255,255,.82);
border:1px solid rgba(209,217,229,.75);
box-shadow:0 10px 24px rgba(15,23,42,.08);
backdrop-filter:blur(12px);
}
.auth-preferences a{
min-width:38px;
text-align:center;
text-decoration:none;
color:#5f6b7a;
border-radius:999px;
padding:6px 10px;
font-size:.78rem;
font-weight:800;
line-height:1;
}
.auth-preferences a:hover{background:#eef5fb;color:#06355a}
.auth-preferences a.active{background:#0b4a6d;color:#fff}
.auth-preferences span{width:1px;height:18px;background:#d9e0ea;margin:0 2px}
[data-theme="dark"] .auth-preferences{
background:rgba(30,34,41,.86);
border-color:rgba(58,63,75,.9);
box-shadow:0 10px 24px rgba(0,0,0,.28);
}
[data-theme="dark"] .auth-preferences a{color:#c9d2df}
[data-theme="dark"] .auth-preferences a:hover{background:#2a2f3b;color:#fff}
[data-theme="dark"] .auth-preferences a.active{background:#4d8fe0;color:#fff}
[data-theme="dark"] .auth-preferences span{background:#3a3f4b}
[data-theme="dark"] .auth-form-panel{background:#1a1d23}
[data-theme="dark"] .auth-card{background:#242830;border-color:#3a3f4b;color:#e4e7eb}
[data-theme="dark"] .auth-card-header h2{color:#f2f4f7}
[data-theme="dark"] .auth-card-header p,
[data-theme="dark"] .auth-card .form-label,
[data-theme="dark"] .setup-card .form-hint{color:#c9d2df!important}
[data-theme="dark"] .auth-input{background:#1e2229;border-color:#3a3f4b;color:#e4e7eb}
[data-theme="dark"] .auth-input:focus{background:#1e2229;color:#fff;border-color:#4d8fe0;box-shadow:0 0 0 .22rem rgba(77,143,224,.18)}
[data-theme="dark"] .auth-eye:hover{background:#2a2f3b;color:#fff}
[data-theme="dark"] .auth-info-note{background:#0a2833;border-color:#1a4a56;color:#6dcfe0}
@media(max-width:560px){.auth-preferences{left:14px;right:14px;justify-content:center}}
/* v18 - initial wizard aligned with setup/login split screen */
.wizard-auth-page .wizard-form-panel{align-items:flex-start;padding-top:96px;padding-bottom:56px;}
.wizard-card-wrap{width:min(760px,100%)}
.wizard-card{padding-bottom:44px;}
.wizard-status-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;}
.wizard-status-item{border:1px solid #d8e1eb;border-radius:12px;padding:11px 12px;background:#f8fbff;min-width:0;}
.wizard-status-item span{display:block;color:#7b8797;font-size:.78rem;font-weight:800;text-transform:uppercase;letter-spacing:.04em;}
.wizard-status-item strong{display:block;color:#1f2937;font-weight:800;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.wizard-section-title{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px;}
.wizard-section-title h3{font-size:1rem;font-weight:850;color:#1f2937;margin:0;}
.wizard-service-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;}
.wizard-choice-card{display:flex;align-items:flex-start;gap:10px;border:1px solid #d8e1eb;border-radius:13px;background:#fff;padding:12px;cursor:pointer;transition:background .15s ease,border-color .15s ease,transform .15s ease;}
.wizard-choice-card:hover{background:#f8fbff;border-color:#8fc4f5;transform:translateY(-1px);}
.wizard-choice-card input{margin-top:4px;flex:0 0 auto;}
.wizard-choice-card span{display:block;min-width:0;}
.wizard-choice-card strong{display:block;color:#1f2937;font-weight:800;margin-bottom:2px;}
.wizard-choice-card small{display:block;color:#7b8797;line-height:1.32;}
.wizard-choice-card code{display:block;margin-top:6px;font-size:.72rem;color:#0b4a6d;background:#eef6ff;border:1px solid #cde5fb;border-radius:6px;padding:2px 5px;white-space:normal;word-break:break-word;}
.wizard-actions{display:grid;grid-template-columns:140px 1fr;gap:12px;align-items:center;}
.wizard-details{border:1px solid #d8e1eb;border-radius:12px;padding:10px 12px;background:#f8fbff;}
.wizard-details summary{font-weight:800;color:#1f2937;cursor:pointer;margin-bottom:8px;}
.wizard-card .log-box{max-height:260px;min-height:120px;}
[data-theme="dark"] .wizard-status-item,
[data-theme="dark"] .wizard-choice-card,
[data-theme="dark"] .wizard-details{background:#1e2229;border-color:#3a3f4b;}
[data-theme="dark"] .wizard-status-item strong,
[data-theme="dark"] .wizard-section-title h3,
[data-theme="dark"] .wizard-choice-card strong,
[data-theme="dark"] .wizard-details summary{color:#f2f4f7;}
[data-theme="dark"] .wizard-status-item span,
[data-theme="dark"] .wizard-choice-card small{color:#c9d2df;}
[data-theme="dark"] .wizard-choice-card:hover{background:#2a2f3b;border-color:#4d8fe0;}
[data-theme="dark"] .wizard-choice-card code{background:#0a2833;border-color:#1a4a56;color:#6dcfe0;}
@media(max-width:760px){.wizard-status-grid,.wizard-service-grid{grid-template-columns:1fr}.wizard-actions{grid-template-columns:1fr}.wizard-card-wrap{width:100%}}
/* v19 - coherent WebPanel users setup */
.section-eyebrow{display:inline-flex;align-items:center;gap:.45rem;margin-bottom:.45rem;color:var(--muted);font-size:.74rem;font-weight:750;letter-spacing:.09em;text-transform:uppercase}.web-users-hero{background:linear-gradient(135deg,rgba(13,110,253,.09),rgba(40,167,69,.05)),var(--surface)}.hero-icon{width:56px;height:56px;border-radius:16px;display:grid;place-items:center;background:rgba(13,110,253,.12);color:var(--primary);font-size:1.55rem;flex:0 0 56px}.web-user-form-card,.web-users-list-card{border-radius:16px}.role-picker{display:grid;gap:10px}.role-card{display:flex;align-items:flex-start;gap:10px;border:1px solid var(--border);border-radius:13px;background:var(--surface-2);padding:12px;cursor:pointer;transition:border-color .15s ease,background .15s ease,transform .15s ease}.role-card:hover{border-color:var(--border-strong);transform:translateY(-1px)}.role-card.selected{border-color:var(--primary);background:rgba(13,110,253,.10)}.role-card input{margin-top:4px;flex:0 0 auto}.role-card span{display:block;min-width:0}.role-card strong{display:block;color:var(--text);font-size:.96rem}.role-card small{display:block;color:var(--muted);line-height:1.35;margin-top:2px}.web-users-table-wrap{border:1px solid var(--border);border-radius:14px;overflow:hidden}.web-users-table{margin-bottom:0}.web-users-table thead th{background:var(--surface-2);padding:.8rem .7rem}.web-users-table tbody td{padding:.85rem .7rem}.user-cell{display:flex;align-items:center;gap:10px}.user-avatar{width:34px;height:34px;border-radius:11px;display:grid;place-items:center;background:rgba(13,110,253,.12);color:var(--primary);font-weight:800}.sidebar-user-setup{border-top:1px solid var(--sidebar-border);margin-top:12px;padding-top:12px}.sidebar-user-setup .nav-link{display:flex;align-items:center;gap:10px;color:var(--sidebar-text);border-radius:8px;padding:8px 12px;text-decoration:none;font-weight:600}.sidebar-user-setup .nav-link:hover,.sidebar-user-setup .nav-link.active{background:var(--sidebar-bg-active);color:#fff}@media(max-width:980px){.web-users-title .d-flex{justify-content:flex-start!important}.web-users-table .btn{width:100%}}
/* WebPanel malware/ransomware toast notifications.
* Native JavaScript implementation: positioned without Bootstrap utilities so it
* also works with the local lightweight Bootstrap-compatible subset.
*/
.bg-toast-container{
position:fixed !important;
top:16px !important;
right:16px !important;
bottom:auto !important;
left:auto !important;
z-index:2147483000 !important;
width:min(440px, calc(100vw - 32px));
max-width:440px;
display:flex;
flex-direction:column;
gap:12px;
pointer-events:none;
}
.bg-alert-toast{
pointer-events:auto;
overflow:hidden;
border-radius:14px;
background:var(--surface);
color:var(--text);
border:1px solid var(--border);
box-shadow:0 18px 45px rgba(0,0,0,.26), 0 2px 8px rgba(0,0,0,.12);
animation:bgToastIn .22s ease-out both;
}
.bg-alert-toast-leaving{animation:bgToastOut .18s ease-in both;}
.bg-alert-toast-header{
display:flex;
align-items:center;
justify-content:space-between;
gap:10px;
padding:12px 14px;
border-bottom:1px solid var(--border);
background:linear-gradient(90deg, rgba(220,53,69,.14), rgba(13,110,253,.06));
}
.bg-alert-toast-title{
display:flex;
align-items:center;
gap:9px;
min-width:0;
font-weight:800;
}
.bg-alert-toast-title i{color:var(--danger);font-size:1.15rem;}
.bg-alert-toast-meta{display:flex;align-items:center;gap:8px;color:var(--muted);white-space:nowrap;}
.bg-toast-close{
border:0;
background:transparent;
color:var(--muted);
width:28px;
height:28px;
border-radius:8px;
line-height:1;
font-size:22px;
display:inline-flex;
align-items:center;
justify-content:center;
}
.bg-toast-close:hover{background:var(--surface-3);color:var(--text);}
.bg-alert-toast-body{padding:12px 14px 14px;}
.bg-alert-toast-family{font-weight:800;margin-bottom:4px;word-break:break-word;}
.bg-alert-toast-path{font-size:.86rem;color:var(--muted);word-break:break-all;margin-bottom:12px;}
.bg-alert-toast-actions{display:flex;gap:8px;flex-wrap:wrap;}
.bg-alert-toast-ransomware{border-color:rgba(220,53,69,.55);}
.bg-alert-toast-malware{border-color:rgba(220,53,69,.38);}
.bg-alert-toast-warning .bg-alert-toast-header{background:var(--warning-bg);color:var(--warning-text);}
.bg-alert-toast-warning .bg-alert-toast-title i{color:var(--warning-text);}
@keyframes bgToastIn{from{opacity:0;transform:translate3d(22px,-10px,0) scale(.985);}to{opacity:1;transform:none;}}
@keyframes bgToastOut{from{opacity:1;transform:none;}to{opacity:0;transform:translate3d(22px,-10px,0) scale(.985);}}
@media (max-width: 576px){
.bg-toast-container{left:12px !important;right:12px !important;top:12px !important;width:auto;max-width:none;}
}
/* v31: mobile off-canvas navigation */
.mobile-topbar{display:none;position:sticky;top:0;z-index:1200;height:58px;padding:10px 14px;background:var(--sidebar-bg);color:var(--sidebar-text);border-bottom:1px solid var(--sidebar-border);align-items:center;gap:12px;box-shadow:0 8px 22px rgba(0,0,0,.12)}
.mobile-menu-btn{width:40px;height:40px;border:1px solid rgba(255,255,255,.18);border-radius:11px;background:rgba(255,255,255,.08);color:#fff;display:grid;place-items:center;font-size:1.25rem}
.mobile-menu-btn:hover{background:rgba(255,255,255,.16)}
.mobile-brand{display:flex;align-items:center;gap:10px;font-weight:800;color:#fff;min-width:0}.mobile-brand-mark{width:34px;height:34px;border-radius:10px;display:grid;place-items:center;background:rgba(255,255,255,.08);flex:0 0 34px}.mobile-brand-mark img,.mobile-brand-mark svg{width:24px;height:24px}
.sidebar-close{display:none;position:absolute;top:12px;right:12px;width:38px;height:38px;border:1px solid rgba(255,255,255,.18);border-radius:11px;background:rgba(255,255,255,.08);color:#fff;place-items:center;font-size:1rem;z-index:2}.sidebar-close:hover{background:rgba(255,255,255,.16)}
.sidebar-scrim{position:fixed;inset:0;background:rgba(0,0,0,.48);z-index:1240;opacity:0;transition:opacity .18s ease}.sidebar-scrim.is-visible{opacity:1}body.sidebar-open{overflow:hidden}
@media(max-width:980px){
.mobile-topbar{display:flex}
.app-shell{display:block;min-height:calc(100vh - 58px);width:100%;overflow-x:hidden}
.sidebar{position:fixed!important;top:0!important;left:0!important;bottom:0!important;width:min(86vw,322px)!important;height:100vh!important;max-height:100vh!important;border-radius:0!important;transform:translateX(-105%);transition:transform .22s ease;z-index:1250;padding-top:62px!important;box-shadow:18px 0 42px rgba(0,0,0,.36)!important}
.sidebar.is-open{transform:translateX(0)}
.sidebar-close{display:grid}
.main-content{display:block;width:100%;min-width:0;margin-left:0!important;overflow-x:hidden}
.content-inner{padding:18px!important;max-width:none!important;width:100%}
.page-title{display:block;margin-bottom:16px}.page-title h1{font-size:1.55rem;line-height:1.22}.page-title p{font-size:.95rem}
.row{--bs-gutter-x:1rem}.card{max-width:100%}.card-body{padding:1rem}.table-responsive,.log-box,pre{max-width:100%;overflow-x:auto}
.btn-group.w-100>.btn{min-width:0;white-space:nowrap}
}
@media(max-width:420px){.content-inner{padding:14px!important}.page-title h1{font-size:1.35rem}.sidebar{width:88vw!important}.card-body{padding:.9rem}.mobile-brand span:last-child{font-size:.95rem}}
/* v33: stronger mobile/tablet offcanvas navigation.
* Uses a larger breakpoint because the WebPanel can be embedded in narrow
* frames even when the browser viewport is wider than a phone.
*/
@media (max-width:1280px){
body:not(.auth-page){padding-top:58px;}
.mobile-topbar{display:flex!important;position:fixed!important;top:0!important;left:0!important;right:0!important;z-index:1300!important;}
.app-shell{display:block!important;min-height:calc(100vh - 58px)!important;width:100%!important;overflow-x:hidden!important;}
.sidebar{position:fixed!important;top:0!important;left:0!important;bottom:0!important;width:min(86vw,322px)!important;height:100vh!important;max-height:100vh!important;border-radius:0!important;transform:translate3d(-110%,0,0)!important;transition:transform .22s ease!important;z-index:1320!important;padding-top:66px!important;box-shadow:18px 0 42px rgba(0,0,0,.38)!important;will-change:transform;}
.sidebar.is-open{transform:translate3d(0,0,0)!important;}
.sidebar-close{display:grid!important;}
.sidebar-scrim{z-index:1310!important;}
.main-content{display:block!important;width:100%!important;min-width:0!important;margin-left:0!important;overflow-x:hidden!important;}
.content-inner{padding:18px!important;max-width:none!important;width:100%!important;}
.page-title{display:block!important;margin-bottom:16px!important;}
.page-title h1{font-size:1.55rem!important;line-height:1.22!important;}
.page-title p{font-size:.95rem!important;}
.card,.card-body,.table-responsive,.log-box,pre{max-width:100%!important;}
.table-responsive,.log-box,pre{overflow-x:auto!important;}
.row{--bs-gutter-x:1rem!important;}
}
@media (min-width:1281px){
body:not(.auth-page){padding-top:0!important;}
.mobile-topbar{display:none!important;}
.sidebar{transform:none!important;}
}
/* v37 - real step-by-step wizard with desktop-config lock */
.wizard-stepper{display:grid;grid-template-columns:repeat(auto-fit,minmax(118px,1fr));gap:8px;margin:16px 0 18px;}
.wizard-stepper-item{display:flex;align-items:center;justify-content:flex-start;gap:8px;border:1px solid #d8e1eb;border-radius:12px;background:#fff;color:#526070;font-weight:800;padding:10px 8px;cursor:pointer;transition:background .15s ease,border-color .15s ease,color .15s ease,transform .15s ease;text-align:left;}
.wizard-stepper-item span{display:inline-grid;place-items:center;width:24px;height:24px;border-radius:50%;background:#eef6ff;color:#0b4a6d;font-size:.8rem;}
.wizard-stepper-item:hover{border-color:#8fc4f5;transform:translateY(-1px);}
.wizard-stepper-item.active{background:#0d6efd;color:#fff;border-color:#0d6efd;}
.wizard-stepper-item.active span{background:rgba(255,255,255,.22);color:#fff;}
.wizard-stepper-item.done{background:#eef6ff;border-color:#b6daf8;color:#0b4a6d;}
.wizard-step-pane{display:none;}
.wizard-step-pane.active{display:block;}
.wizard-step-pane>h3{font-size:1.05rem;font-weight:850;color:#1f2937;margin:0 0 8px;}
[data-theme="dark"] .wizard-stepper-item{background:#1e2229;border-color:#3a3f4b;color:#c9d2df;}
[data-theme="dark"] .wizard-stepper-item span{background:#0a2833;color:#6dcfe0;}
[data-theme="dark"] .wizard-stepper-item:hover{background:#2a2f3b;border-color:#4d8fe0;}
[data-theme="dark"] .wizard-stepper-item.active{background:#4d8fe0;border-color:#4d8fe0;color:#fff;}
[data-theme="dark"] .wizard-stepper-item.active span{background:rgba(255,255,255,.18);color:#fff;}
[data-theme="dark"] .wizard-stepper-item.done{background:#0a2833;border-color:#1a4a56;color:#6dcfe0;}
[data-theme="dark"] .wizard-step-pane>h3{color:#f2f4f7;}
@media(max-width:760px){.wizard-stepper{grid-template-columns:1fr 1fr}.wizard-stepper-item{justify-content:flex-start}}
@media(max-width:460px){.wizard-stepper{grid-template-columns:1fr}}
.wizard-review-list h4{font-size:.92rem;font-weight:850;margin:12px 0 6px;color:#1f2937}.wizard-review-list ul{margin:0 0 8px 18px;padding:0}.wizard-review-list li{margin:2px 0;color:#526070}[data-theme="dark"] .wizard-review-list h4{color:#f2f4f7}[data-theme="dark"] .wizard-review-list li{color:#c9d2df}