:root{
  --navy:#14223F; --navy-2:#1d2f55; --gold:#8F7430; --gold-l:#B08F3E; --gold-bg:#F4EEDD;
  --bg:#F5F6F8; --card:#fff; --line:#E1E3E8; --ink:#1b2233; --mute:#5d6573;
  --ok:#1a6b3a; --ok-bg:#E6F3EA; --warn:#8a5a00; --warn-bg:#FFF3D6; --bad:#a32424; --bad-bg:#FBE9E9; --info:#1f4f8f; --info-bg:#E5EEF9;
  --serif:'Source Serif 4',Georgia,serif; --sans:'Inter',system-ui,sans-serif;
}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0;}
html{-webkit-text-size-adjust:100%;}
body{font-family:var(--sans);background:var(--bg);color:var(--ink);font-size:14.5px;line-height:1.5;-webkit-font-smoothing:antialiased;}
button,input,select,textarea{font:inherit;color:inherit;}
a{color:var(--navy);}
.hide{display:none!important;}

/* Login screens */
.auth{min-height:100vh;display:grid;place-items:center;padding:24px;background:linear-gradient(160deg,var(--navy),#0d1730);}
.auth-card{width:100%;max-width:400px;background:#fff;border-top:4px solid var(--gold-l);}
.auth-head{padding:28px 30px 8px;}
.auth-head .mark{width:44px;height:44px;background:var(--navy);color:#fff;display:grid;place-items:center;font-family:var(--serif);font-weight:600;border-bottom:3px solid var(--gold-l);margin-bottom:14px;}
.auth-head h1{font-family:var(--serif);font-size:1.45rem;color:var(--navy);}
.auth-head p{color:var(--mute);font-size:.88rem;margin-top:4px;}
.auth-body{padding:14px 30px 30px;}
.auth-foot{display:flex;justify-content:space-between;padding:0 30px 22px;font-size:.8rem;}
.auth-foot a{color:var(--mute);}

/* Forms */
.field{margin-bottom:14px;}
.field label{display:block;font-size:.72rem;font-weight:600;letter-spacing:.6px;text-transform:uppercase;color:var(--navy);margin-bottom:5px;}
.input,.select,.textarea{width:100%;padding:9px 11px;border:1px solid #c9ccd4;background:#fff;border-radius:3px;outline:none;}
.input:focus,.select:focus,.textarea:focus{border-color:var(--navy);box-shadow:0 0 0 3px rgba(20,34,63,.12);}
.textarea{min-height:90px;resize:vertical;}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:0 14px;}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:0 14px;}
.hint{font-size:.78rem;color:var(--mute);margin-top:4px;}
.err{background:var(--bad-bg);color:var(--bad);border-left:3px solid var(--bad);padding:8px 12px;font-size:.84rem;margin:10px 0;}

/* Buttons */
.btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--navy);background:var(--navy);color:#fff;padding:8px 15px;border-radius:3px;cursor:pointer;font-weight:500;font-size:.88rem;text-decoration:none;}
.btn:hover{background:#0d1730;}
.btn.line{background:#fff;color:var(--navy);}
.btn.line:hover{background:var(--bg);}
.btn.gold{background:var(--gold);border-color:var(--gold);}
.btn.gold:hover{background:var(--gold-l);}
.btn.danger{background:#fff;color:var(--bad);border-color:var(--bad);}
.btn.danger:hover{background:var(--bad-bg);}
.btn.sm{padding:4px 10px;font-size:.8rem;}
.btn[disabled]{opacity:.5;cursor:not-allowed;}
.btn.block{width:100%;justify-content:center;}

/* App shell */
.shell{display:grid;grid-template-columns:236px 1fr;min-height:100vh;}
.side{background:var(--navy);color:#fff;padding:18px 0;position:sticky;top:0;height:100vh;overflow:auto;display:flex;flex-direction:column;}
.side .brand{display:flex;gap:10px;align-items:center;padding:0 18px 18px;border-bottom:1px solid rgba(255,255,255,.12);}
.side .mark{width:36px;height:36px;background:#fff;color:var(--navy);display:grid;place-items:center;font-family:var(--serif);font-weight:700;font-size:.9rem;border-bottom:3px solid var(--gold-l);}
.side .brand b{font-family:var(--serif);font-size:1.02rem;display:block;line-height:1.1;}
.side .brand small{font-size:.66rem;letter-spacing:.8px;text-transform:uppercase;color:#E3CF9A;}
.nav{padding:12px 8px;flex:1;}
.nav a{display:flex;gap:10px;align-items:center;padding:9px 12px;color:rgba(255,255,255,.78);text-decoration:none;border-radius:3px;font-size:.9rem;cursor:pointer;margin-bottom:2px;}
.nav a:hover{background:rgba(255,255,255,.08);color:#fff;}
.nav a.on{background:rgba(255,255,255,.14);color:#fff;box-shadow:inset 3px 0 0 var(--gold-l);}
.nav .sec{font-size:.66rem;letter-spacing:1px;text-transform:uppercase;color:rgba(255,255,255,.45);padding:14px 12px 4px;}
.side-foot{padding:12px 18px;border-top:1px solid rgba(255,255,255,.12);font-size:.8rem;color:rgba(255,255,255,.7);}
.side-foot .who{color:#fff;font-weight:500;}
.lang{display:inline-flex;gap:2px;}
.lang a{cursor:pointer;padding:1px 7px;font-size:.74rem;font-weight:600;border-radius:2px;color:inherit;opacity:.65;text-decoration:none;}
.lang a.on{opacity:1;background:rgba(255,255,255,.18);}
.main{padding:26px 30px 60px;min-width:0;}
.top{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap;margin-bottom:20px;}
.top h1{font-family:var(--serif);font-size:1.65rem;color:var(--navy);line-height:1.2;}
.top .sub{color:var(--mute);font-size:.88rem;margin-top:2px;}
.actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center;}
.menu-btn{display:none;}

/* Cards, KPIs */
.card{background:var(--card);border:1px solid var(--line);border-radius:4px;}
.card-h{padding:13px 18px;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;}
.card-h h2{font-family:var(--serif);font-size:1.08rem;color:var(--navy);}
.card-b{padding:16px 18px;}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:14px;margin-bottom:18px;}
.kpi{background:#fff;border:1px solid var(--line);border-top:3px solid var(--navy);padding:14px 16px;border-radius:4px;}
.kpi.gold{border-top-color:var(--gold-l);} .kpi.ok{border-top-color:var(--ok);} .kpi.bad{border-top-color:var(--bad);}
.kpi small{display:block;font-size:.7rem;letter-spacing:.8px;text-transform:uppercase;color:var(--mute);}
.kpi b{display:block;font-family:var(--serif);font-size:1.55rem;color:var(--navy);margin-top:4px;line-height:1.2;}
.kpi span{font-size:.8rem;color:var(--mute);}
.cols{display:grid;grid-template-columns:1.4fr 1fr;gap:16px;margin-bottom:16px;}
.stack>*+*{margin-top:16px;}

/* Tables */
.tw{overflow-x:auto;}
table.t{width:100%;border-collapse:collapse;font-size:.88rem;}
table.t th{background:#F0F2F6;color:var(--navy);text-align:left;font-size:.7rem;letter-spacing:.7px;text-transform:uppercase;padding:9px 12px;border-bottom:1px solid var(--line);white-space:nowrap;}
table.t td{padding:9px 12px;border-bottom:1px solid var(--line);vertical-align:middle;}
table.t tr:last-child td{border-bottom:none;}
table.t tbody tr.click{cursor:pointer;}
table.t tbody tr.click:hover td{background:#F8F9FB;}
.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap;}
.empty{padding:28px;text-align:center;color:var(--mute);}
.tools{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:12px;align-items:center;}
.tools .input,.tools .select{width:auto;min-width:150px;}
.tools .grow{flex:1;min-width:200px;}

/* Badges, tabs, bars */
.badge{display:inline-block;padding:2px 9px;border-radius:20px;font-size:.74rem;font-weight:600;white-space:nowrap;}
.b-ok{background:var(--ok-bg);color:var(--ok);} .b-warn{background:var(--warn-bg);color:var(--warn);}
.b-bad{background:var(--bad-bg);color:var(--bad);} .b-info{background:var(--info-bg);color:var(--info);} .b-mute{background:#ECEEF2;color:var(--mute);}
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:16px;overflow-x:auto;}
.tabs a{padding:9px 16px;cursor:pointer;color:var(--mute);border-bottom:2px solid transparent;white-space:nowrap;text-decoration:none;font-weight:500;}
.tabs a.on{color:var(--navy);border-bottom-color:var(--gold-l);}
.bar{height:8px;background:#E7E9EE;border-radius:4px;overflow:hidden;}
.bar i{display:block;height:100%;background:var(--gold-l);}
.bar.ok i{background:var(--ok);}
.dl{display:grid;grid-template-columns:150px 1fr;gap:6px 14px;font-size:.9rem;}
.dl dt{color:var(--mute);} .dl dd{color:var(--ink);}
.list-row{display:flex;justify-content:space-between;gap:12px;padding:10px 0;border-bottom:1px solid var(--line);align-items:center;}
.list-row:last-child{border-bottom:none;}
.news{padding:12px 0;border-bottom:1px solid var(--line);} .news:last-child{border-bottom:none;}
.news b{display:block;color:var(--navy);} .news small{color:var(--mute);}

/* Modal & toast */
.ov{position:fixed;inset:0;background:rgba(10,18,36,.6);z-index:300;display:grid;place-items:start center;padding:5vh 14px;overflow:auto;}
.modal{background:#fff;width:100%;max-width:560px;border-radius:4px;border-top:4px solid var(--gold-l);}
.modal.wide{max-width:900px;}
.modal-h{padding:16px 22px 4px;display:flex;justify-content:space-between;align-items:center;}
.modal-h h2{font-family:var(--serif);color:var(--navy);font-size:1.25rem;}
.x{background:none;border:none;font-size:1.5rem;cursor:pointer;color:var(--mute);line-height:1;}
.modal-b{padding:12px 22px 22px;}
.modal-f{display:flex;gap:8px;justify-content:flex-end;margin-top:8px;}
.toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%);background:var(--navy);color:#fff;padding:10px 20px;border-radius:4px;z-index:500;box-shadow:0 6px 24px rgba(0,0,0,.25);}
.toast.bad{background:var(--bad);}
.secret{font-family:ui-monospace,Consolas,monospace;font-size:1.5rem;letter-spacing:3px;background:var(--gold-bg);border:1px dashed var(--gold);padding:10px 14px;text-align:center;margin:8px 0;}

/* Charts */
.chart{display:flex;align-items:flex-end;gap:10px;height:150px;padding:6px 4px 0;}
.chart .col{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;height:100%;justify-content:flex-end;}
.chart .pair{display:flex;gap:3px;align-items:flex-end;height:120px;}
.chart .pair i{width:14px;display:block;border-radius:2px 2px 0 0;}
.chart .in{background:var(--ok);} .chart .out{background:var(--gold-l);}
.chart small{font-size:.7rem;color:var(--mute);}
.legend{display:flex;gap:14px;font-size:.78rem;color:var(--mute);margin-top:6px;}
.legend i{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:2px;}

/* Student portal header */
.pt{background:var(--navy);color:#fff;}
.pt .in{max-width:1080px;margin:0 auto;padding:12px 20px;display:flex;justify-content:space-between;align-items:center;gap:12px;}
.pt .brand{display:flex;gap:10px;align-items:center;}
.pt .mark{width:34px;height:34px;background:#fff;color:var(--navy);display:grid;place-items:center;font-family:var(--serif);font-weight:700;font-size:.85rem;border-bottom:3px solid var(--gold-l);}
.pt-wrap{max-width:1080px;margin:0 auto;padding:22px 20px 60px;}
.hello{background:var(--navy);color:#fff;border-radius:4px;padding:22px 24px;margin-bottom:16px;border-bottom:3px solid var(--gold-l);}
.hello h1{font-family:var(--serif);font-weight:600;font-size:1.5rem;}
.hello p{color:rgba(255,255,255,.75);font-size:.9rem;margin-top:2px;}

/* Print documents */
#printarea{display:none;}
.doc{font-family:var(--serif);color:#000;padding:8mm 4mm;}
.doc-h{display:flex;justify-content:space-between;align-items:flex-start;border-bottom:2px solid #14223F;padding-bottom:10px;margin-bottom:16px;}
.doc-h .mark{width:46px;height:46px;background:#14223F;color:#fff;display:grid;place-items:center;font-weight:700;margin-right:12px;}
.doc-h h1{font-size:1.25rem;} .doc-h small{display:block;font-family:var(--sans);font-size:.75rem;color:#444;}
.doc h2{text-align:center;font-size:1.3rem;letter-spacing:1px;text-transform:uppercase;margin:12px 0 16px;}
.doc table{width:100%;border-collapse:collapse;font-family:var(--sans);font-size:.85rem;margin:10px 0;}
.doc th,.doc td{border:1px solid #888;padding:5px 8px;text-align:left;} .doc th{background:#eee;}
.doc td.r,.doc th.r{text-align:right;}
.doc p{margin:8px 0;line-height:1.55;}
.doc .sig{display:flex;justify-content:space-between;margin-top:46px;font-family:var(--sans);font-size:.85rem;}
.doc .sig div{width:44%;border-top:1px solid #000;padding-top:4px;text-align:center;}
.doc .foot{margin-top:24px;font-family:var(--sans);font-size:.7rem;color:#555;text-align:center;}
@media print{
  body.printing>*:not(#printarea){display:none!important;}
  body.printing #printarea{display:block!important;}
  body.printing{background:#fff;}
  @page{margin:12mm;}
}

@media(max-width:900px){
  .shell{grid-template-columns:1fr;}
  .side{position:fixed;left:-260px;top:0;width:250px;z-index:200;transition:left .2s;}
  .side.open{left:0;}
  .menu-btn{display:inline-flex;}
  .main{padding:18px 14px 50px;}
  .cols,.grid2,.grid3{grid-template-columns:1fr;}
  .dl{grid-template-columns:110px 1fr;}
}

.years-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:16px;}

table.t tr.off td{background:#FAFAFB;color:#8a909b;}
table.t tr.off a{color:#8a909b;}
table.t input.input{padding:5px 8px;}
