:root{--brand:#4f46e5;--brand-2:#7c3aed;--ink:#0f172a;--bg:#f4f6fb;--side:#111827}
body{font-family:'Montserrat',sans-serif;background:var(--bg);color:var(--ink)}
:root{--bs-body-font-family:'Montserrat',sans-serif}
h1,h2,h3,h4,h5,h6,.brand{font-family:'Montserrat',sans-serif;font-weight:700}
button,input,select,textarea,.btn,.form-control,.form-select,.table{font-family:'Montserrat',sans-serif}
.btn-primary{--bs-btn-bg:var(--brand);--bs-btn-border-color:var(--brand);--bs-btn-hover-bg:#4338ca;--bs-btn-hover-border-color:#4338ca}
.form-control,.form-select{border-radius:.65rem;padding:.65rem .85rem}.btn{border-radius:.65rem}
/* app shell */
.shell{display:flex;min-height:100vh}
.sidebar{width:250px;background:linear-gradient(180deg,#111827,#1e1b4b);color:#fff;padding:1.1rem;flex-direction:column;position:sticky;top:0;height:100vh;flex-shrink:0}
.offcanvas.sidebar{height:100%;position:fixed;width:260px}
.brand{display:flex;align-items:center;gap:.6rem;font-size:1.2rem;color:#fff}.brand i{font-size:1.6rem;color:#a5b4fc}.brand.dark{color:var(--ink)}.brand.dark i{color:var(--brand)}
.sidebar .nav-link{color:#c7d2fe;border-radius:.65rem;padding:.65rem .85rem;display:flex;align-items:center;gap:.7rem}
.sidebar .nav-link:hover{background:rgba(255,255,255,.08);color:#fff}.sidebar .nav-link.active{background:var(--brand);color:#fff}
.side-user{display:flex;align-items:center;gap:.7rem;padding:.7rem;background:rgba(255,255,255,.07);border-radius:.8rem}
.avatar{width:38px;height:38px;border-radius:50%;background:#6366f1;display:grid;place-items:center;font-weight:700}
.content{flex:1;min-width:0}
.topbar{position:sticky;top:0;z-index:5;display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;background:rgba(255,255,255,.9);backdrop-filter:blur(8px);border-bottom:1px solid #e5e7eb}
/* cards */
.card{border:0;border-radius:1rem;box-shadow:0 1px 3px rgba(15,23,42,.06),0 8px 24px rgba(15,23,42,.04)}
.stat{display:flex;align-items:center;gap:1rem}.stat .ico{width:48px;height:48px;border-radius:.9rem;display:grid;place-items:center;font-size:1.4rem}
.health{border-radius:1rem;padding:1.2rem 1.4rem;color:#fff;display:flex;align-items:center;gap:1rem}
.health.ok{background:linear-gradient(135deg,#059669,#10b981)}.health.warn{background:linear-gradient(135deg,#d97706,#f59e0b)}.health.bad{background:linear-gradient(135deg,#dc2626,#ef4444)}
.health i{font-size:2.2rem}
.table>:not(caption)>*>*{padding:.8rem .75rem}.table thead th{font-size:.75rem;text-transform:uppercase;letter-spacing:.04em;color:#64748b;border-bottom-width:1px}
.msg{max-width:520px;word-break:break-word}details summary{cursor:pointer;color:var(--brand);font-size:.8rem}
details pre{white-space:pre-wrap;font-size:.75rem;background:#f1f5f9;padding:.6rem;border-radius:.5rem;margin:.4rem 0 0;max-height:240px;overflow:auto}
/* auth */
body.auth{min-height:100vh;display:grid;place-items:center;padding:1rem;background:linear-gradient(135deg,#312e81,#6d28d9 55%,#0ea5e9)}
.auth-wrap{display:grid;grid-template-columns:1fr 1fr;width:min(960px,100%);background:#fff;border-radius:1.4rem;overflow:hidden;box-shadow:0 30px 70px rgba(0,0,0,.3)}
.auth-art{flex-direction:column;justify-content:center;align-items:center;text-align:center;color:#fff;padding:2rem;background:linear-gradient(160deg,#4f46e5,#7c3aed)}
.auth-art h2{font-size:1.5rem;margin-top:1rem}.auth-art p{opacity:.85;max-width:300px}.hero-svg{width:100%;max-width:320px}
.auth-card{padding:2.2rem}
@media(max-width:767px){.auth-wrap{grid-template-columns:1fr}.auth-card{padding:1.5rem}}
