:root{
  --ink:#16233b;
  --ink-2:#3d4c68;
  --rule:#d3dae5;
  --paper:#ffffff;
  --surface:#f4f6fa;
  --go:#0b6e4f;
  --go-soft:#e3f2ec;
  --wait:#9a5b06;
  --wait-soft:#fdf1dd;
  --stop:#9c1f1f;
  --stop-soft:#fbe6e6;
  --focus:#1d5fd0;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;background:var(--surface);color:var(--ink);
  font-family:"Noto Sans Kannada",system-ui,"Segoe UI",Roboto,sans-serif;
  font-size:16px;line-height:1.5;
}
.kn{font-family:"Noto Sans Kannada",system-ui,sans-serif}
.mono{font-variant-numeric:tabular-nums;letter-spacing:.01em}
.wrap{max-width:1120px;margin:0 auto;padding:0 18px}
main.wrap{padding-bottom:56px}

/* header */
.topbar{background:var(--ink);color:#fff}
.bar{display:flex;flex-wrap:wrap;gap:12px;align-items:baseline;
     justify-content:space-between;padding-top:14px;padding-bottom:14px}
.mark-k{display:block;font-weight:700;font-size:19px;line-height:1.25}
.mark-e{display:block;font-size:12.5px;color:#a9b6cd;letter-spacing:.02em}
.nav{display:flex;flex-wrap:wrap;gap:16px}
.nav a{color:#cdd7e6;text-decoration:none;font-size:14.5px;border-bottom:1px solid transparent;padding-bottom:2px}
.nav a:hover,.nav a:focus{color:#fff;border-bottom-color:#7f93b4}

.foot{border-top:1px solid var(--rule);background:var(--paper);
      color:var(--ink-2);font-size:13px;padding:18px 0;margin-top:40px}

/* type */
.h1{font-size:26px;line-height:1.25;margin:26px 0 4px;font-weight:700}
.h2{font-size:19px;margin:30px 0 10px;font-weight:600}
.lede{max-width:68ch;color:var(--ink-2);margin:6px 0 14px}
.big-kn{font-size:17px;color:var(--ink-2);margin:0 0 14px}
.hint{color:var(--ink-2);font-size:13.5px}
.sm{font-size:12.5px;color:var(--ink-2);display:block}
.ok{color:var(--go)} .bad{color:var(--stop)}
.plain{padding-left:18px}
code{background:#e9edf4;padding:1px 5px;border-radius:3px;font-size:13px}

.hero{padding:22px 0 4px}

/* cards + forms */
.card{background:var(--paper);border:1px solid var(--rule);border-radius:10px;
      padding:20px;margin:16px 0}
.form-narrow{max-width:440px}
.fl{display:block;font-weight:600;font-size:14px;margin:14px 0 5px}
.fl .kn{font-weight:400;color:var(--ink-2)}
.fi{width:100%;padding:11px 12px;border:1px solid #b9c3d3;border-radius:7px;
    background:#fff;font:inherit;color:inherit;min-height:44px}
.fi.big{font-size:19px;letter-spacing:.02em}
.fi:focus,.n:focus,select:focus{outline:3px solid #bcd2f6;border-color:var(--focus)}
.pair{display:flex;gap:14px;flex-wrap:wrap}
.pair>div{flex:1 1 160px}
.actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px}
.inline{display:inline}
.yearpick{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap;margin:14px 0}
.yearpick .fi{width:auto;min-width:150px}
.noprint{}

.btn{display:inline-flex;align-items:center;justify-content:center;
     background:var(--go);color:#fff;border:1px solid var(--go);
     padding:11px 18px;border-radius:7px;font:inherit;font-weight:600;
     cursor:pointer;text-decoration:none;min-height:44px}
.btn:hover{filter:brightness(1.08)}
.btn:disabled{background:#9fb0a9;border-color:#9fb0a9;cursor:not-allowed}
.btn-lg{width:100%;margin-top:20px;font-size:17px}
.btn-sm{padding:7px 12px;min-height:36px;font-size:14px}
.btn-quiet{background:#fff;color:var(--ink);border-color:#b9c3d3}
.btn-warn{background:var(--stop);border-color:var(--stop)}

.note{border-left:4px solid;padding:12px 14px;border-radius:0 7px 7px 0;margin:14px 0;font-size:14.5px}
.note-ok{background:var(--go-soft);border-color:var(--go)}
.note-err{background:var(--stop-soft);border-color:var(--stop)}
.note-warn{background:var(--wait-soft);border-color:var(--wait)}
.note-info{background:#e8eefb;border-color:var(--focus)}

/* school facts */
.school-head{background:var(--paper);border:1px solid var(--rule);
             border-radius:10px;padding:20px;margin-top:20px}
.facts{display:flex;flex-wrap:wrap;gap:0 34px;margin:0}
.facts div{margin:8px 0}
.facts dt{font-size:12px;color:var(--ink-2);letter-spacing:.03em}
.facts dd{margin:0;font-weight:600}

/* year rail - the signature element */
.rail{display:grid;grid-template-columns:repeat(auto-fill,minmax(268px,1fr));gap:14px;margin-top:12px}
.yr{background:var(--paper);border:1px solid var(--rule);border-radius:10px;padding:16px}
.yr-h{display:flex;justify-content:space-between;align-items:center;gap:10px}
.yr-h h3{margin:0;font-size:20px;font-variant-numeric:tabular-nums}
.yr-m{margin:8px 0 0;font-size:13.5px;color:var(--ink-2)}
.yr-a{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}
.ret{background:var(--stop-soft);border-radius:6px;padding:8px 10px;font-size:13.5px;margin:10px 0 0}
.meter{height:7px;background:#e4e9f1;border-radius:99px;overflow:hidden;margin-top:12px}
.meter i{display:block;height:100%;background:var(--go)}
.meter.mini{height:5px;margin-top:6px;max-width:180px}

.chip{font-size:12px;font-weight:700;padding:3px 9px;border-radius:99px;white-space:nowrap}
.chip-grey{background:#e4e9f1;color:var(--ink-2)}
.chip-green{background:var(--go-soft);color:var(--go)}
.chip-amber{background:var(--wait-soft);color:var(--wait)}
.chip-red{background:var(--stop-soft);color:var(--stop)}

/* tiles + headline */
.tiles{display:flex;gap:12px;flex-wrap:wrap;margin:14px 0}
.tile{background:var(--paper);border:1px solid var(--rule);border-radius:10px;
      padding:14px 18px;min-width:130px}
.tile b{display:block;font-size:26px;font-variant-numeric:tabular-nums}
.tile span{font-size:13px;color:var(--ink-2)}
.tile.tone-green b{color:var(--go)}
.tile.tone-amber b{color:var(--wait)}
.tile.tone-red b{color:var(--stop)}
.headline{display:flex;align-items:center;gap:20px;background:var(--paper);
          border:1px solid var(--rule);border-radius:10px;padding:20px;margin-top:14px}
.big-num{font-size:62px;line-height:1;margin:0;font-weight:700;font-variant-numeric:tabular-nums}
.big-num span{font-size:26px;margin-left:2px;color:var(--ink-2)}
.big-lab{margin:0;font-size:15px}

/* tables */
.tablewrap{overflow-x:auto;background:var(--paper);border:1px solid var(--rule);
           border-radius:10px;margin:14px 0}
table{border-collapse:collapse;width:100%;font-size:14.5px}
thead th{background:#eef2f8;text-align:left;font-size:12.5px;font-weight:700;
         padding:10px;border-bottom:1px solid var(--rule);white-space:nowrap}
tbody td,tbody th{padding:8px 10px;border-bottom:1px solid #eaeef4;text-align:left;vertical-align:middle}
tbody tr:last-child td{border-bottom:0}
.list .nm{font-weight:600}
.compact tbody td{padding:5px 10px;font-size:13.5px}
.blankrow{color:#9aa6ba}
.ctr{text-align:center}
.na-cell{color:var(--ink-2);font-style:italic}

.grid .stick{position:sticky;left:0;background:var(--paper);min-width:186px;z-index:2;
             border-right:1px solid var(--rule)}
.grid thead .stick{background:#eef2f8;z-index:3}
.cls{display:block;font-weight:700}
.sub{display:block;font-size:12.5px;color:var(--ink-2);font-weight:400}
.n{width:82px;padding:9px 8px;border:1px solid #b9c3d3;border-radius:6px;
   font:inherit;text-align:right;font-variant-numeric:tabular-nums;min-height:42px}
.n.wide{width:150px}
.n:disabled{background:#f1f3f7;color:var(--ink-2)}
.g{background:#fffdf5}
tr.st-mismatch td{background:var(--stop-soft)}
tr.st-ok .state{color:var(--go)}
.state{font-size:11.5px;font-weight:700;letter-spacing:.04em}
.s-ok{color:var(--go)} .s-mismatch{color:var(--stop)} .s-na{color:var(--ink-2)} .s-empty{color:#9aa6ba}
.reason.hide{display:none}
.reason td{background:#fbfcfe}
.pin{font-weight:700;letter-spacing:.12em}
.check{display:flex;gap:10px;align-items:flex-start;margin:18px 0 0;
       background:#f7f9fc;border:1px solid var(--rule);border-radius:8px;padding:12px}
.check input{margin-top:3px;width:20px;height:20px;flex:none}
.check span{font-size:14.5px}
.pct{font-size:19px;font-weight:700;margin:16px 0 0}

.savebar{position:sticky;bottom:0;background:var(--paper);border-top:1px solid var(--rule);
         padding:12px 0;display:flex;gap:14px;align-items:center;justify-content:space-between;
         margin-top:10px}
#tally{font-size:14px;color:var(--ink-2)}

/* pin slips */
.flags{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}
.flag{background:var(--paper);border:1px solid var(--rule);border-left:4px solid var(--wait);
      border-radius:0 10px 10px 0;padding:14px}
.flag-n{font-size:30px;font-weight:700;margin:0;line-height:1;font-variant-numeric:tabular-nums}
.flag-t{margin:6px 0 8px;font-size:14px;color:var(--ink-2)}
.tight{margin:8px 0 0;padding-left:18px;font-size:13px;color:var(--ink-2)}
.tight li{margin:3px 0}
a.tile.link{text-decoration:none;color:inherit;display:block}
a.tile.link:hover{border-color:var(--ink-2)}
.rowacts{white-space:nowrap}
.rowacts .btn{margin:2px 2px 2px 0}
.inline-in{width:150px;display:inline-block;min-height:36px;padding:6px 8px;font-size:14px}
.left{display:block;font-size:11px;color:var(--wait);font-weight:600;margin-top:2px}
.left.over{color:var(--stop)}
.savebar-a{display:flex;gap:8px}
.headline>div{flex:1}
.slips{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px}
.slip{border:1px dashed #9aa6ba;border-radius:8px;padding:12px;background:#fff;break-inside:avoid}
.slip-n{font-weight:700;margin:0}
.slip-f{margin:6px 0 0;font-size:14px}
.slip-h{margin:10px 0 0;font-size:11.5px;color:var(--ink-2)}

@media print{
  .topbar,.foot,.noprint{display:none}
  body{background:#fff}
  .slips{grid-template-columns:repeat(3,1fr)}
}
@media (max-width:640px){
  .h1{font-size:22px}
  .headline{flex-direction:column;align-items:flex-start;gap:8px}
  .big-num{font-size:48px}
  .facts{gap:0 22px}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}


/* ---------------------------------------------------------------
   Phone layout. Below 760px the entry grid stops being a table and
   becomes one card per class-subject, because eight numeric columns
   cannot be used with a thumb.
   --------------------------------------------------------------- */
@media (max-width: 760px) {
  .wrap { padding: 0 12px; }
  .tablewrap { border: 0; background: transparent; overflow: visible; }

  .grid, .grid tbody, .grid tr, .grid th, .grid td { display: block; width: auto; }
  .grid thead { display: none; }

  .grid tbody tr.row {
    background: var(--paper);
    border: 1px solid var(--rule);
    border-radius: 10px;
    margin: 0 0 10px;
    padding: 4px 12px 12px;
  }
  .grid tbody tr.row.st-mismatch { border-color: var(--stop); }
  .grid tbody tr.row.st-ok { border-color: #9ccdb8; }

  .grid tr.row .stick {
    position: static; border: 0; border-bottom: 1px solid var(--rule);
    padding: 10px 0 8px; margin-bottom: 6px; min-width: 0; background: transparent;
  }
  .grid tr.row .cls { font-size: 17px; }

  .grid tr.row td {
    border: 0; padding: 5px 0;
    display: flex; align-items: center; justify-content: space-between; gap: 12px;
  }
  .grid tr.row td::before {
    content: attr(data-l);
    font-size: 14px; color: var(--ink-2); font-weight: 600;
  }
  .grid tr.row td .n { width: 110px; font-size: 17px; min-height: 46px; }
  .grid tr.row td.ctr { justify-content: space-between; }
  .grid tr.row td.ctr .state { font-size: 13px; }
  .grid tr.row td.ctr .left { display: inline; margin: 0 0 0 8px; }

  .grid tr.reason { display: block; }
  .grid tr.reason td { display: block; padding: 0 0 10px; }
  .grid tr.reason td::before { content: none; }

  /* read-only verify grid keeps a table but scrolls */
  .grid.ro, .grid.ro tbody, .grid.ro tr, .grid.ro td, .grid.ro th { display: revert; }
  .grid.ro { display: table; }
  .tablewrap:has(.grid.ro) { overflow-x: auto; border: 1px solid var(--rule); background: var(--paper); }

  /* plain lists scroll rather than squash */
  .tablewrap:has(.list) { overflow-x: auto; border: 1px solid var(--rule);
                          background: var(--paper); border-radius: 10px; }

  .headline { flex-direction: column; align-items: flex-start; }
  .tiles { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
  .tile { min-width: 0; padding: 12px; }
  .tile b { font-size: 22px; }
  .rail { grid-template-columns: 1fr; }
  .flags { grid-template-columns: 1fr; }
  .bar { padding-top: 10px; padding-bottom: 10px; }
  .mark-k { font-size: 17px; }
  .nav { gap: 12px; }
  .nav a { font-size: 13.5px; }
  .savebar { flex-direction: column; align-items: stretch; gap: 8px; }
  .savebar-a { justify-content: space-between; }
  .rowacts { white-space: normal; }
  .pair { flex-direction: column; gap: 0; }
  .fi, .n { font-size: 16px; }   /* 16px stops iOS zooming on focus */
}

/* wide screens: give the entry grid room to breathe */
@media (min-width: 1200px) {
  .wrap { max-width: 1240px; }
}

.filters .fgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:0 16px}
.filters .fl{margin-top:10px}
.quick{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 0}
.totalrow td{border-top:2px solid var(--ink);background:#f4f6fa}
@media (max-width:760px){ .filters .fgrid{grid-template-columns:1fr 1fr} }

/* ---- navigation ---- */
.nav a.on{color:#fff;border-bottom-color:#fff}
.menubtn{display:none;background:transparent;border:1px solid #56688a;color:#dbe3ef;
         border-radius:7px;padding:8px 14px;font:inherit;font-size:14px;cursor:pointer}
.crumb{background:var(--paper);border-bottom:1px solid var(--rule)}
.crumb .wrap{padding-top:10px;padding-bottom:10px}
.backlink{color:var(--ink-2);text-decoration:none;font-size:14.5px;font-weight:600}
.backlink::before{content:"\2190";margin-right:8px}
.backlink:hover{color:var(--ink)}
.foot a{color:var(--ink-2)}

/* ---- sticky action bar on forms ---- */
.stickybar{position:sticky;bottom:0;background:var(--paper);
           border-top:1px solid var(--rule);margin-top:22px;
           padding-bottom:env(safe-area-inset-bottom);z-index:5}
.stickybar .sb{display:flex;align-items:center;justify-content:space-between;gap:12px;
               padding-top:12px;padding-bottom:12px}
.sb-x{flex:1;text-align:center;font-size:13.5px;color:var(--ink-2)}
.fi.readonly{background:#f1f3f7;color:var(--ink-2);display:flex;align-items:center}

@media (max-width:760px){
  .menubtn{display:block}
  .nav{display:none;width:100%;flex-direction:column;gap:0;
       border-top:1px solid #35486b;margin-top:10px;padding-top:6px}
  .nav.open{display:flex}
  .nav a{padding:11px 2px;border-bottom:1px solid #2a3b5c;font-size:15.5px}
  .nav a:last-child{border-bottom:0}
  .bar{align-items:center}
  .stickybar .sb{gap:8px}
  .sb-x{display:none}
  .stickybar .btn{flex:1}
}

.req{font-size:11px;font-weight:700;color:var(--stop);background:var(--stop-soft);
     border-radius:99px;padding:2px 8px;margin-left:8px;vertical-align:middle}
