:root{--cs-navy:#0b1f3a;--cs-navy2:#13315c;--cs-blue:#2f7de1;--cs-accent:#18b5a4;--cs-sidebar-w:250px}
[data-bs-theme=dark]{--bs-body-bg:#0e1726;--bs-body-color:#d7e0ee;--bs-secondary-color:#8fa2bf;--bs-border-color:#22324d;--bs-primary:#2f7de1;--bs-primary-rgb:47,125,225;--bs-link-color:#6aa9f5;--bs-link-hover-color:#9cc6fa;--bs-card-bg:#15233a;--bs-tertiary-bg:#15233a}
[data-bs-theme=light]{--bs-body-bg:#f3f6fb;--bs-body-color:#1c2a40;--bs-primary:#1f63c2;--bs-primary-rgb:31,99,194}
.btn-primary{--bs-btn-bg:#2f7de1;--bs-btn-border-color:#2f7de1;--bs-btn-hover-bg:#2468c4;--bs-btn-hover-border-color:#2468c4;--bs-btn-active-bg:#1f5aab;--bs-btn-color:#fff}
.card{background:var(--bs-card-bg);border-color:var(--bs-border-color);border-radius:.6rem}
body{font-size:.95rem}
.skip-link{position:absolute;left:.5rem;top:.5rem;z-index:2000}
.app-shell{display:flex;min-height:100vh}
.sidebar{width:var(--cs-sidebar-w);flex:0 0 var(--cs-sidebar-w);background:var(--cs-navy);color:#cfd9ea;padding:1rem .75rem;position:sticky;top:0;height:100vh;overflow-y:auto}
.sidebar .brand{display:flex;align-items:center;gap:.5rem;color:#fff;font-weight:700;font-size:1.1rem;text-decoration:none;padding:.25rem .5rem 1rem}
.sidebar .brand i{color:var(--cs-accent)}
.nav-section{font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;color:#7f93b3;margin:1rem .5rem .35rem}
.sidebar .nav-link{display:flex;align-items:center;gap:.6rem;color:#cfd9ea;padding:.45rem .6rem;border-radius:.4rem;font-size:.9rem}
.sidebar .nav-link:hover{background:rgba(255,255,255,.07);color:#fff}
.sidebar .nav-link.active{background:var(--cs-blue);color:#fff}
.main-col{flex:1;min-width:0;display:flex;flex-direction:column}
.topbar{display:flex;align-items:center;gap:.75rem;padding:.6rem 1.25rem;border-bottom:1px solid var(--bs-border-color);background:var(--bs-body-bg);position:sticky;top:0;z-index:100}
.topbar-search{max-width:300px}
.content{flex:1;padding:1.5rem 1.25rem}
.app-footer{display:flex;flex-wrap:wrap;justify-content:space-between;gap:.5rem;padding:.75rem 1.25rem;font-size:.75rem;color:var(--bs-secondary-color);border-top:1px solid var(--bs-border-color)}
.stat-card .display-6{font-weight:700}
.guest-body{background:radial-gradient(circle at 20% 0,#13315c 0,#0b1f3a 55%,#08162b 100%);min-height:100vh;color:#d7e0ee}
.brand-lg{color:#fff;font-size:1.8rem;font-weight:700;text-decoration:none}
.brand-lg i{color:var(--cs-accent)}
.flash-guest{max-width:520px}
.chart-box{position:relative;width:100%}
.chart-box canvas{width:100%;height:100%}
.progress{height:.6rem}
.question-card{border-left:4px solid var(--cs-blue)}
.lab-terminal{background:#05101f;color:#9be7c4;font-family:ui-monospace,Consolas,monospace;font-size:.85rem;padding:1rem;border-radius:.5rem;white-space:pre-wrap}
@media (max-width:991.98px){
  .sidebar{position:fixed;left:calc(-1 * var(--cs-sidebar-w) - 10px);z-index:1050;transition:left .2s}
  body.sidebar-open .sidebar{left:0;box-shadow:0 0 0 100vmax rgba(0,0,0,.5)}
}
@media print{.sidebar,.topbar,.app-footer,.no-print{display:none!important}.content{padding:0}body{background:#fff;color:#000}.card{border:1px solid #bbb}}

/* Lesson and policy content (classes allowed by HtmlSanitizer) */
.lesson-body{line-height:1.7}
.lesson-body h2{font-size:1.25rem;margin-top:1.5rem}
.lesson-body h3{font-size:1.05rem;margin-top:1.25rem}
.callout{border-left:4px solid var(--cs-blue);background:rgba(47,125,225,.1);padding:.75rem 1rem;border-radius:.4rem;margin:1rem 0}
.callout-info{border-color:var(--cs-blue);background:rgba(47,125,225,.1)}
.callout-warn{border-color:#e0a100;background:rgba(224,161,0,.12)}
.callout-danger{border-color:#d64550;background:rgba(214,69,80,.12)}
.callout-ok{border-color:#2e9e6b;background:rgba(46,158,107,.12)}
.key-point{border:1px solid var(--cs-accent);border-radius:.4rem;padding:.6rem .9rem;margin:1rem 0;background:rgba(24,181,164,.08)}
.log-block{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.82rem;background:#0a1220;color:#c9d7ee;border:1px solid var(--bs-border-color);border-radius:.4rem;padding:.75rem 1rem;overflow-x:auto;white-space:pre-wrap}
/* Risk heatmap */
.heatmap td{width:3.2rem;height:2.6rem;color:#0b1f3a}
.heat-low{background:#9fd8b4}.heat-medium{background:#f2dc7b}.heat-high{background:#f0a35e}.heat-critical{background:#e5707a}
@media print{.sidebar,.topbar,.no-print,.app-footer{display:none!important}.main-col{margin:0}body{background:#fff!important;color:#000!important}.card{border:1px solid #bbb!important;background:#fff!important}}
/* Certificate */
.certificate{max-width:820px;padding:2.5rem 2rem;border:3px double var(--cs-blue)!important;background:var(--bs-card-bg)}
.certificate.revoked{opacity:.6}
.cert-brand{font-weight:700;font-size:1.2rem;color:var(--cs-accent)}
.cert-name{font-size:2rem;font-weight:700;margin-top:.25rem}
.cert-title{font-size:1.35rem;font-weight:600;color:var(--cs-blue);margin-top:.25rem}
.brand-lg{font-size:1.6rem;font-weight:700;text-decoration:none;color:inherit}
