:root{
  --navy:#204164; --navy-deep:#152d46; --ink:#1f2733; --ink-soft:#5d6b7e; --ink-faint:#8a96a6;
  --bg:#eef1f5; --surface:#ffffff; --line:#e4e9f0; --amber:#f39c12;
  --a:#c0392b; --b:#e08e0b; --c:#3f72a6; --none:#aeb8c4; --green:#2e7d52;
  --shadow:0 1px 2px rgba(21,45,70,.05),0 8px 24px rgba(21,45,70,.07);
  --rail-w:230px;
}
*{box-sizing:border-box}
[hidden]{display:none!important}
.hl{box-shadow:0 0 0 3px var(--amber),0 10px 30px rgba(243,156,18,.28)!important;border-radius:14px;transition:box-shadow .3s}
@media(prefers-reduced-motion:reduce){.hl{transition:none}}
html,body{margin:0;height:100%}
body{font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:var(--ink);background:var(--bg);font-size:14px;line-height:1.45}
h1,h2,h3,.kpi-n,.brand-title{font-family:Manrope,sans-serif}
a{color:inherit;text-decoration:none}
.mono{font-variant-numeric:tabular-nums}

.loading{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;color:var(--ink-soft);font-size:15px}
.app{display:grid;grid-template-columns:var(--rail-w) 1fr;min-height:100vh}

/* rail */
.rail{background:linear-gradient(180deg,var(--navy),var(--navy-deep));color:#dce6f2;display:flex;flex-direction:column;position:sticky;top:0;height:100vh}
.brand{padding:20px 18px 14px}
.brand-o{font-family:Manrope;font-weight:800;letter-spacing:.04em;font-size:15px;color:#fff}
.brand-sub{font-size:11px;color:#9fb4cd;margin-left:6px}
.brand-title{font-size:15px;font-weight:700;color:#fff;margin-top:8px;line-height:1.25}
.nav{display:flex;flex-direction:column;gap:2px;padding:8px 10px;margin-top:6px}
.nav a{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:9px;color:#c3d2e6;font-weight:600;font-size:13.5px;transition:.12s}
.nav a:hover{background:rgba(255,255,255,.07);color:#fff}
.nav a.active{background:var(--amber);color:#3a2600}
.nav a.active .nicon{opacity:1}
.nicon{opacity:.6;width:16px;text-align:center;font-size:12px}
.rail-foot{margin-top:auto;padding:14px 18px;font-size:11px;color:#8ea4be;border-top:1px solid rgba(255,255,255,.08);line-height:1.5}

/* main */
.main{min-width:0;display:flex;flex-direction:column}
.topstrip{position:sticky;top:0;z-index:5;background:rgba(238,241,245,.85);backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px clamp(16px,3vw,32px);border-bottom:1px solid var(--line)}
.crumb{font-size:13px;color:var(--ink-soft);font-weight:600}
.crumb b{color:var(--ink)}
.search{position:relative;width:min(320px,40vw)}
.search input{width:100%;padding:9px 13px;border:1px solid var(--line);border-radius:10px;font-size:14px;background:var(--surface);outline:none}
.search input:focus{border-color:var(--navy)}
.qres{position:absolute;top:108%;left:0;right:0;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow);overflow:hidden;display:none;max-height:50vh;overflow-y:auto;z-index:10}
.qres.open{display:block}
.qres a{display:block;padding:9px 13px;font-size:13px;border-bottom:1px solid var(--line)}
.qres a:hover{background:#f5f8fc}
.content{padding:clamp(16px,3vw,32px);max-width:1180px;width:100%}

.viewhead{margin:0 0 4px;font-size:clamp(20px,2.6vw,27px);font-weight:800;letter-spacing:-.01em}
.viewsub{color:var(--ink-soft);margin:0 0 20px;font-size:14px}
.sechead{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--navy);font-weight:700;margin:26px 0 12px}

/* kpis */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(165px,1fr));gap:14px}
.kpi{background:var(--surface);border-radius:14px;padding:16px 18px;box-shadow:var(--shadow)}
.kpi-n{font-size:30px;font-weight:800;line-height:1;letter-spacing:-.02em}
.kpi-l{font-size:12.5px;color:var(--ink-soft);margin-top:7px}
.kpi.flag{background:linear-gradient(135deg,var(--navy),var(--navy-deep));color:#fff}
.kpi.flag .kpi-l{color:#b9cae0}
.kpi .sub{font-size:11.5px;color:var(--ink-faint);margin-top:3px}

.card{background:var(--surface);border-radius:14px;padding:18px;box-shadow:var(--shadow)}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
@media(max-width:820px){.grid2{grid-template-columns:1fr}}

/* bars */
.bars{display:flex;flex-direction:column;gap:9px;margin-top:4px}
.barrow{display:grid;grid-template-columns:130px 1fr 38px;align-items:center;gap:10px;font-size:13px}
.barrow .lab{color:var(--ink-soft);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bartrack{background:#eef2f7;border-radius:5px;height:14px;overflow:hidden}
.barfill{height:100%;background:var(--navy);border-radius:5px}
.barfill.open{background:var(--a)} .barfill.ok{background:var(--green)}
.barrow .val{text-align:right;font-weight:700;font-variant-numeric:tabular-nums}

/* hazard chips */
.hz{display:inline-flex;align-items:center;gap:5px;font-size:11px;font-weight:700;padding:2px 8px;border-radius:6px}
.hz.A{background:#fbeae8;color:var(--a)} .hz.B{background:#fdf2e0;color:#9a6207} .hz.C{background:#eaf1f8;color:var(--c)} .hz.none{background:#eef2f7;color:var(--ink-soft)}
.hzmix{display:inline-flex;height:12px;border-radius:3px;overflow:hidden;width:90px;vertical-align:middle}
.hzmix span{display:block;height:100%}

/* table */
table{width:100%;border-collapse:collapse;font-size:13px}
thead th{position:sticky;top:60px;background:#f7f9fc;text-align:right;padding:10px 10px;font-size:11px;text-transform:uppercase;letter-spacing:.03em;color:var(--ink-soft);font-weight:700;border-bottom:1px solid var(--line);cursor:pointer;white-space:nowrap}
thead th:first-child{text-align:left}
thead th.sorted{color:var(--navy)}
tbody td{padding:9px 10px;border-bottom:1px solid var(--line);text-align:right;font-variant-numeric:tabular-nums}
tbody td:first-child{text-align:left;font-weight:600}
tbody tr:hover{background:#f7faff;cursor:pointer}
.tablecard{background:var(--surface);border-radius:14px;box-shadow:var(--shadow);overflow:hidden}

/* heat grid */
.heatwrap{overflow-x:auto;background:var(--surface);border-radius:14px;box-shadow:var(--shadow);padding:14px}
.heat{border-collapse:collapse;font-size:11px}
.heat th{position:static;background:none;text-transform:none;letter-spacing:0;padding:5px 6px;color:var(--ink-soft);font-weight:600;text-align:center;cursor:default}
.heat th:first-child{text-align:left;min-width:150px}
.heat td{padding:0;text-align:center;border:2px solid #fff}
.heat .cell{width:34px;height:26px;display:flex;align-items:center;justify-content:center;border-radius:4px;color:#fff;font-weight:700;font-size:10.5px}
.heat .schoolname{text-align:left;padding:4px 8px;font-weight:600;white-space:nowrap;font-size:11.5px}

/* timeline */
.tl{display:grid;grid-template-columns:repeat(10,1fr);gap:6px;align-items:end;margin-top:8px}
.tlcol{display:flex;flex-direction:column;align-items:center;gap:4px;cursor:default}
.tlbars{display:flex;align-items:flex-end;gap:2px;height:90px}
.tlbars i{width:7px;border-radius:2px 2px 0 0;display:block}
.tlbars .n{background:var(--navy)} .tlbars .r{background:var(--green)}
.tlm{font-size:9.5px;color:var(--ink-faint)}
.tlback{font-size:10px;font-weight:700;color:var(--a)}
.tl-empty{background:repeating-linear-gradient(45deg,#f0f3f7,#f0f3f7 4px,#e6ebf2 4px,#e6ebf2 8px);width:100%;height:90px;border-radius:3px}

.caveat{font-size:12.5px;color:var(--ink-soft);background:#fbfaf4;border-left:3px solid var(--amber);padding:9px 12px;border-radius:0 8px 8px 0;margin-top:12px}
.notelist{display:flex;flex-direction:column;gap:1px;margin-top:6px}
.noteit{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;padding:8px 4px;border-bottom:1px solid var(--line);font-size:13px}
.pill{font-size:11px;font-weight:700;padding:2px 9px;border-radius:999px}
.pill.yes{background:#fbeae8;color:var(--a)} .pill.no{background:#e8f6ee;color:var(--green)}
.tag{font-size:11px;color:var(--ink-soft)}
.wvrarow{display:flex;gap:8px;margin-top:8px}
.wbox{flex:1;text-align:center;padding:10px 6px;border-radius:9px;font-size:12px;font-weight:600}
.wbox.sub{background:#e8f6ee;color:var(--green)} .wbox.miss{background:#fbeae8;color:var(--a)} .wbox.na{background:#eef2f7;color:var(--ink-faint)}
.wbox b{display:block;font-size:15px;font-family:Manrope}

@media(max-width:760px){
  .app{grid-template-columns:1fr}
  .rail{position:static;height:auto;flex-direction:column}
  .nav{flex-direction:row;flex-wrap:wrap}
  thead th{top:0}
}

/* access gate */
.gate{position:fixed;inset:0;z-index:100;display:grid;place-items:center;padding:20px;
  background:radial-gradient(120% 120% at 0% 0%,var(--navy) 0%,var(--navy-deep) 60%,#0f2034 100%)}
.gate-card{width:min(440px,100%);background:var(--surface);border-radius:18px;overflow:hidden;
  box-shadow:0 24px 70px rgba(8,20,35,.45)}
.gate-head{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;
  background:linear-gradient(180deg,#f7f9fc,#eef2f7);border-bottom:1px solid var(--line);font-size:13px}
.gate-head b{font-family:Manrope;font-weight:800;color:var(--navy);letter-spacing:.03em}
.gate-head span{color:var(--ink-soft)}
.gate-head .lock{color:var(--a);font-weight:700;font-size:11.5px}
.gate-body{padding:26px 26px 24px}
.gate-eyebrow{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--amber);font-weight:700}
.gate-body h1{font-family:Manrope;font-size:22px;font-weight:800;margin:8px 0 6px;letter-spacing:-.01em}
.gate-body p{color:var(--ink-soft);font-size:13.5px;margin:0 0 18px;line-height:1.5}
.gate-body label{display:block;font-size:12px;font-weight:700;color:var(--ink);margin-bottom:6px}
.gate-body input{width:100%;padding:12px 14px;border:1px solid var(--line);border-radius:10px;font-size:15px;
  background:#fbfcfe;outline:none;letter-spacing:.04em}
.gate-body input:focus{border-color:var(--navy);box-shadow:0 0 0 3px rgba(32,65,100,.12)}
.gate-btn{width:100%;margin-top:14px;padding:12px 16px;border:0;border-radius:10px;cursor:pointer;
  background:var(--amber);color:#3a2600;font-family:Manrope;font-weight:800;font-size:14.5px;letter-spacing:.01em}
.gate-btn:hover{filter:brightness(1.04)} .gate-btn:disabled{opacity:.6;cursor:default}
.gate-err{min-height:18px;margin-top:10px;color:var(--a);font-size:12.5px;font-weight:600}
.gate-note{margin:16px 0 0;font-size:11.5px;color:var(--ink-faint);line-height:1.5}
.signout{margin:0 14px 14px;padding:8px 12px;border:1px solid rgba(255,255,255,.16);border-radius:8px;
  background:rgba(255,255,255,.05);color:#c3d2e6;font-size:12px;font-weight:600;cursor:pointer;font-family:inherit}
.signout:hover{background:rgba(255,255,255,.1);color:#fff}
@media(max-width:760px){.signout{margin:8px 10px}}
