:root{
  --ink:#16161A; --paper:#F4F3EF; --card:#FFFFFF; --line:#E2E0D8; --line2:#EEEDE8; --soft:#FAFAF7;
  --muted:#5E5C55; --muted2:#3D3B36; --red:#C8202F; --red-d:#9E1B28; --blue:#1F4E9C; --amber:#B86A00;
  --ok-bg:#DDF0E3; --ok:#1D6B3A; --warn-bg:#FBEFD9; --warn:#7A4700; --info-bg:#E3ECFA; --bad-bg:#FBE3E5;
}
*{box-sizing:border-box}
body{margin:0;background:var(--paper);color:var(--ink);font:400 14px/1.45 Inter,system-ui,sans-serif}
h1,h2,h3{font-family:Archivo,Inter,sans-serif;margin:0}
h1{font-weight:800;font-size:30px}
h2{font-weight:700;font-size:18px}
button,input,select,textarea{font:inherit;color:inherit}
.sr{position:absolute;left:-9999px}
.wrap{max-width:1280px;margin:0 auto;padding:0 28px}
main.wrap{padding-top:24px;padding-bottom:48px}

/* header */
.top{background:var(--ink);color:#F7F6F2}
.top .wrap{padding-top:14px}
.top-row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:14px}
.brand{display:flex;align-items:center;gap:10px}
.logo{background:var(--red);color:#fff;font:800 17px Archivo,sans-serif;padding:5px 9px;border-radius:6px}
.brand-name{font:700 19px Archivo,sans-serif}
.ver{color:#9C9A92;font-size:12px}
.test-pick{display:flex;align-items:center;gap:10px}
.test-pick select{background:#26262C;color:#F7F6F2;border:1px solid #3A3A42;border-radius:8px;min-height:40px;padding:0 10px;font-weight:600}
.test-sub{color:#B9B7AE;font-size:13px}
.steps{display:flex;flex-wrap:wrap;gap:2px;margin-top:10px}
.steps button{background:none;border:0;border-bottom:3px solid transparent;color:#B9B7AE;padding:12px 14px;font-weight:500;cursor:pointer}
.steps button:hover{color:#fff}
.steps button.on{color:#fff;font-weight:600;border-bottom-color:var(--red)}
.steps .push{margin-left:auto}

/* common */
.head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:14px;margin-bottom:18px}
.head p{margin:6px 0 0;color:var(--muted);font-size:15px;max-width:760px}
.row{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.btn{min-height:40px;padding:0 14px;border-radius:8px;border:1px solid #CFCCC2;background:#fff;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;gap:6px;text-decoration:none;color:var(--ink)}
.btn:hover{border-color:#9C9A92}
.btn.dark{background:var(--ink);border-color:var(--ink);color:#fff;font-weight:600}
.btn.red{background:var(--red);border-color:var(--red);color:#fff;font-weight:600}
.btn.red:hover{background:var(--red-d)}
.btn.small{min-height:32px;padding:0 10px;font-size:13px}
.btn:disabled{opacity:.45;cursor:default}
.card{background:var(--card);border:1px solid var(--line);border-radius:12px}
.card-h{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--line)}
.pad{padding:14px 16px}
.muted{color:var(--muted)}
.small{font-size:12px}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px;margin-bottom:16px}
.stat{background:#fff;border:1px solid var(--line);border-radius:10px;padding:10px 14px}
.stat b{display:block;font:800 26px Archivo,sans-serif}
.stat span{font-size:12px;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.5px}
.stat.warn{background:#FFF6E6;border-color:#F0D9A8}
.stat.warn span,.stat.warn b{color:var(--warn)}
.empty{padding:40px 20px;text-align:center;color:var(--muted)}
.empty b{display:block;color:var(--ink);font-size:16px;margin-bottom:6px}

.tag{display:inline-block;padding:3px 9px;border-radius:12px;font-size:12px;font-weight:600;white-space:nowrap}
.tag.ok{background:var(--ok-bg);color:var(--ok)}
.tag.info{background:var(--info-bg);color:var(--blue)}
.tag.warn{background:var(--warn-bg);color:var(--warn)}
.tag.bad{background:var(--bad-bg);color:var(--red-d)}
.tag.grey{background:#EEEDE8;color:#55534C}

.sw{display:inline-block;width:12px;height:12px;border-radius:3px;border:1px solid #8A877E;vertical-align:-1px}
.belt{display:inline-flex;align-items:center;gap:6px;white-space:nowrap}

/* tables */
.tbl-wrap{overflow-x:auto}
table.tbl{width:100%;border-collapse:collapse}
.tbl th{text-align:left;color:var(--muted);font-size:11.5px;text-transform:uppercase;letter-spacing:.5px;font-weight:600;padding:10px 8px;border-bottom:1px solid var(--line);white-space:nowrap}
.tbl td{padding:8px;border-bottom:1px solid var(--line2);vertical-align:middle}
.tbl th:first-child,.tbl td:first-child{padding-left:16px}
.tbl th:last-child,.tbl td:last-child{padding-right:16px}
.tbl tr.dim td{opacity:.5}
.tbl tr.warnrow td{background:#FFF9EE}
.tbl tr.grp td{background:#F7F6F2;font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted2)}
.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
.low{color:#B3202E;font-weight:600}
.name{font-weight:600}
.sub{color:var(--muted);font-size:12px}

.filters{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:12px}
.filters input[type=search]{min-height:40px;width:220px;padding:0 12px;border-radius:8px;border:1px solid #CFCCC2;background:#fff}
.pill{min-height:36px;padding:0 12px;border-radius:18px;border:1px solid #CFCCC2;background:#fff;cursor:pointer;font-size:13px;font-weight:500}
.pill.on{background:var(--ink);border-color:var(--ink);color:#fff}

.seg{display:inline-flex;border:1px solid #CFCCC2;border-radius:8px;overflow:hidden}
.seg button{white-space:nowrap;min-height:32px;padding:0 10px;border:0;background:#fff;cursor:pointer;font-size:12.5px;font-weight:500;color:var(--muted2)}
.seg button+button{border-left:1px solid #CFCCC2}
.seg button.no.on{background:#55534C;color:#fff;font-weight:600}
.seg button.almost.on{background:var(--amber);color:#fff;font-weight:600}
.seg button.ready.on{background:var(--blue);color:#fff;font-weight:600}
.seg button.on{background:var(--ink);color:#fff}

input.cell,select.cell{width:100%;min-height:32px;padding:0 8px;border-radius:6px;border:1px solid var(--line);background:var(--soft);font-size:13px}
input.cell:focus,select.cell:focus,textarea:focus,input:focus{outline:2px solid #9DB6E3;outline-offset:0}
input.cell.bad{border-color:#E39AA1;background:#FFF5F6}

.drop{display:flex;align-items:center;gap:14px;border:2px dashed #B9B7AE;border-radius:12px;background:var(--soft);padding:16px 18px;margin-bottom:16px}
.drop.over{border-color:var(--blue);background:#EEF3FB}
.drop .t{flex:1}
.drop .t b{display:block}

.split{display:flex;flex-wrap:wrap;gap:18px;align-items:flex-start}
.split .side{flex:1 1 360px;min-width:0}
.split .main{flex:999 1 560px;min-width:0}

.list-btn{display:flex;width:100%;justify-content:space-between;align-items:center;gap:10px;min-height:56px;padding:8px 16px;border:0;border-bottom:1px solid var(--line2);background:#fff;cursor:pointer;text-align:left}
.list-btn:hover{background:#FAFAF7}
.list-btn.on{background:#EEF3FB;box-shadow:inset 3px 0 0 var(--blue)}
.list-sec{padding:8px 16px;background:#F7F6F2;color:var(--muted2);font-size:11.5px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid var(--line2)}

.msg{background:#F7F6F2;border:1px solid var(--line);border-radius:10px;padding:16px 18px;font-size:15px;line-height:1.6;white-space:pre-line;min-height:150px}
.big{font:800 24px Archivo,sans-serif}

.bar{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;background:var(--ink);color:#F7F6F2;border-radius:12px;padding:14px 18px;margin-top:16px}

/* test day */
.score-row{display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--line2);padding:12px 0}
.score-row .lbl{font-weight:600;font-size:16px}
.stepper{display:flex;align-items:center;gap:10px}
.stepper button{width:44px;height:44px;border-radius:22px;border:1px solid #CFCCC2;background:#fff;font:600 22px Inter,sans-serif;cursor:pointer}
.stepper button.plus{background:var(--ink);color:#fff;border-color:var(--ink)}
.stepper .val{min-width:64px;text-align:center;font:800 26px Archivo,sans-serif}
.stepper .val small{font-size:14px;color:var(--muted);font-weight:600}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chip{min-height:36px;padding:0 12px;border-radius:18px;border:1px solid #CFCCC2;background:#fff;cursor:pointer;font-size:13px}
.chip.done{background:var(--ok-bg);border-color:#BFE2CA;color:var(--ok)}
.chip.on{background:var(--ink);border-color:var(--ink);color:#fff}
.chip.fail{background:var(--bad-bg);border-color:#F0C3C8;color:var(--red-d)}

/* certificates */
.pdf-frame{width:100%;aspect-ratio:11/8.5;border:1px solid #D8D5CB;border-radius:4px;background:#fff;box-shadow:0 8px 24px rgba(22,22,26,.08);display:block}

/* setup */
.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
.field label{display:block;font-size:12px;font-weight:600;color:var(--muted);margin-bottom:4px}
.field input,.field select,.field textarea{width:100%;min-height:38px;padding:6px 10px;border-radius:8px;border:1px solid #CFCCC2;background:#fff}
.field textarea{min-height:110px;line-height:1.5;resize:vertical}
.stack{display:flex;flex-direction:column;gap:18px}

.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%) translateY(20px);background:var(--ink);color:#fff;padding:10px 16px;border-radius:8px;opacity:0;transition:.2s;pointer-events:none;z-index:50;font-weight:500}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}

@media (max-width:700px){
  .wrap{padding:0 14px}
  h1{font-size:24px}
  .steps button{padding:10px 8px;font-size:13px}
  .steps .push{margin-left:0}
}
@media print{
  .top,.filters,.head .row,.bar,.stats,.no-print,.toast{display:none!important}
  body{background:#fff}
  .card{border:0}
  .tbl td,.tbl th{padding:4px 6px;font-size:11px}
  .seg button:not(.on){display:none}
  .seg{border:0}
  input.cell{border:0;background:none}
}

.nw{white-space:nowrap}
.icon-btn{width:32px;height:32px;border-radius:6px;border:1px solid #CFCCC2;background:#fff;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;color:var(--muted2)}
.icon-btn:hover{border-color:var(--red);color:var(--red)}
select.cell.pick{width:auto;font-weight:600;background:var(--card);border-color:#CFCCC2;padding-right:4px}
.ll{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:9px;font-size:11px;font-weight:600;background:var(--info-bg);color:var(--blue);vertical-align:1px}
.fam{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:10px 16px;border-bottom:1px solid var(--line2)}
.fam:last-child{border-bottom:0}
.fname{font-weight:700;min-width:120px}
.fname-in{width:140px!important;font-weight:700;background:transparent!important;border-color:transparent!important}
.fname-in:hover,.fname-in:focus{border-color:#CFCCC2!important;background:#fff!important}
.mem{display:inline-flex;align-items:center;gap:4px;padding:4px 8px 4px 10px;border:1px solid #CFCCC2;border-radius:16px;background:#fff;font-size:13px}
.mem.adult{border-color:#9DB6E3;background:#EEF3FB}
.mem button{border:0;background:none;color:#8A877E;cursor:pointer;font-size:15px;line-height:1;padding:0 2px;min-width:20px;min-height:20px}
.mem button:hover{color:var(--red)}
.add-in{width:150px!important;border-style:dashed!important;border-radius:16px!important;background:transparent!important}
.sp{flex:1}
.linkbtn{border:0;background:none;color:var(--blue);cursor:pointer;padding:0;font:inherit;text-decoration:underline}
.morebtn{display:block;width:100%;text-align:left;border:0;cursor:pointer}
@media (min-width:900px){.sticky-panel{position:sticky;top:12px}}
.drops{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:12px;margin-bottom:16px}
.drops .drop{margin:0}
.drop .t b{display:flex;gap:8px;align-items:center}
.lion{display:inline-flex;align-items:center;min-height:26px;margin-top:5px;padding:0 9px;border-radius:13px;font-size:12px;font-weight:600;border:1px dashed #B9B7AE;background:#fff;color:#5E5C55;cursor:pointer}
.lion.on{border:1px solid #9DB6E3;background:var(--info-bg);color:var(--blue)}
details.more{position:relative}
details.more summary{list-style:none;width:32px;height:32px;border-radius:6px;border:1px solid #CFCCC2;background:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;color:var(--muted2);font-weight:700}
details.more summary::-webkit-details-marker{display:none}
details.more .menu{position:absolute;right:0;top:36px;z-index:5;background:#fff;border:1px solid #CFCCC2;border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.12);padding:6px;width:260px;display:flex;flex-direction:column;gap:2px}
details.more .menu button{text-align:left;border:0;background:none;padding:9px 10px;border-radius:6px;cursor:pointer;font-size:13px}
details.more .menu button:hover{background:#F4F3EF}
details.more .menu button.r{color:var(--red-d);font-weight:600}
details.more .menu button.r:hover{background:var(--bad-bg)}
/* students + profiles */
.plink{border:0;background:none;padding:0;font:inherit;color:inherit;cursor:pointer;text-align:left}
.plink:hover{color:var(--blue);text-decoration:underline}
.plink.name{font-weight:600}
.ll{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:9px;font-size:11px;font-weight:600;background:var(--info-bg);color:var(--blue);vertical-align:1px}
.ph{display:flex;flex-wrap:wrap;gap:16px;align-items:flex-start;justify-content:space-between;margin-bottom:16px}
.idrow{display:flex;gap:14px;align-items:center}
.av{width:64px;height:64px;border-radius:14px;display:flex;align-items:center;justify-content:center;font:800 24px Archivo,sans-serif;flex:none;border:1px solid rgba(0,0,0,.12)}
.chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;align-items:center}
.chip2{display:inline-flex;align-items:center;gap:6px;min-height:28px;padding:0 10px;border-radius:14px;font-size:12.5px;font-weight:600;border:1px solid #CFCCC2;background:#fff}
.strip{display:flex;flex-wrap:wrap;gap:14px;align-items:center;justify-content:space-between;margin-bottom:16px;border-color:#F0D9A8;background:#FFFBF2}
.grid2{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.6fr);gap:16px;align-items:start}
@media (max-width:900px){.grid2{grid-template-columns:minmax(0,1fr)}}
.kv{display:grid;grid-template-columns:120px minmax(0,1fr);gap:10px 12px;align-items:center;font-size:14px}
.kv label,.kv .lbl{color:var(--muted)}
.kv .cell{max-width:200px}
.tl{list-style:none;margin:0;padding:0}
.tl li{display:grid;grid-template-columns:96px 22px minmax(0,1fr);gap:0 10px;padding:0 16px}
.tl .when{font-size:12px;color:var(--muted);padding-top:13px;text-align:right}
.tl .rail{position:relative}
.tl .rail:before{content:"";position:absolute;left:10px;top:0;bottom:0;width:2px;background:var(--line)}
.tl .dot{position:absolute;left:3px;top:14px;width:12px;height:12px;border-radius:4px;border:2px solid #fff;box-shadow:0 0 0 1px #8A877E}
.tl .body{padding:11px 0 13px;border-bottom:1px solid var(--line2)}
.tl li:last-child .body{border-bottom:0}
.sc{font-size:12.5px;color:var(--muted);margin-top:3px}
.sc b{color:var(--ink)}
.mini{display:flex;align-items:center;gap:10px;padding:10px 16px;border-bottom:1px solid var(--line2)}
.mini:last-child{border-bottom:0}
.sel{user-select:all}
.bimg{height:16px;width:auto;vertical-align:-3px;flex:none}
.bimg.big{height:auto;width:100%}
.av.belt{background:#fff;padding:6px;width:110px;height:64px;border-color:var(--line)}
.tl li{grid-template-columns:96px 44px minmax(0,1fr)}
.tl .rail:before{left:21px}
.dotimg{position:absolute;left:0;top:12px;background:var(--card);padding:1px 0}
.dotimg .bimg{height:18px}
.hform{background:var(--soft);border-bottom:1px solid var(--line)}
.mem .plink{color:var(--ink);font-size:inherit;min-width:0;min-height:0;padding:0;line-height:inherit}
.mem .plink:hover{color:var(--blue)}
.fam .disc{display:inline-flex;align-items:center;gap:6px}
/* online */
.sync{font-size:12px;color:#9C9A92;white-space:nowrap}
.sync.saving{color:#E8C42A}.sync.offline,.sync.error{color:#F2A3AB;font-weight:600}
body.gated .steps,body.gated .test-pick{display:none}
.gate{max-width:440px;margin:40px auto;display:flex;flex-direction:column;align-items:flex-start}
.gate h1{font-size:26px}
.gate form{width:100%}
.gate .field input{width:100%}
.gate .btn{min-height:44px}
.test-pick{flex-wrap:wrap}
.split .side.beltchart{flex-basis:440px}
.beltchart .tbl td,.beltchart .tbl th{padding-left:8px;padding-right:8px}
/* groups */
.glayout{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.35fr);gap:16px;align-items:start}
@media (max-width:820px){.glayout{grid-template-columns:minmax(0,1fr)}}
.gcol{display:flex;flex-direction:column;gap:14px}
.gcard{background:#fff;border:1px solid var(--line);border-radius:12px;overflow:hidden;transition:box-shadow .12s,border-color .12s}
.gcard.over{border-color:#C8202F;box-shadow:0 0 0 3px rgba(200,32,47,.15)}
.gpool{position:sticky;top:12px;max-height:calc(100vh - 24px);overflow:auto}
.gcard .gh{display:flex;justify-content:space-between;align-items:center;padding:12px 14px;border-bottom:1px solid var(--line)}
.gsec{display:flex;justify-content:space-between;align-items:center;padding:8px 14px;background:#F4F3EF;font:600 12px Archivo,sans-serif;text-transform:uppercase;letter-spacing:.5px;color:#5E5C55;border-bottom:1px solid var(--line)}
.gsec .linkbtn{text-transform:none;letter-spacing:0;font-family:Inter,sans-serif}
.gst{display:flex;align-items:center;gap:10px;padding:8px 14px;border-bottom:1px solid var(--line);font-size:14px;cursor:grab;background:#fff}
.gst:last-child{border-bottom:0}
.gst.dragging{opacity:.45}
.gst input[type=checkbox]{width:18px;height:18px;flex:none}
.gst .grip{color:#9C9A92;letter-spacing:-2px;flex:none}
.gst .gmeta{margin-left:auto;color:#5E5C55;font-size:12px;white-space:nowrap}
.gst .gmove{width:112px;font-size:12px;padding:4px 6px;flex:none}
.gst .plink:disabled{color:inherit;cursor:inherit;text-decoration:none}
.gempty{padding:16px 14px;color:#5E5C55;font-size:14px}
.gmovebar{position:sticky;bottom:0;display:flex;justify-content:space-between;align-items:center;gap:8px;padding:10px 14px;background:#16161A;color:#fff}
.gmovebar select{width:150px}
.gh2{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 10px;padding:10px 12px;border-bottom:1px solid var(--line);align-items:center}
.gh2 .gt{font:700 16px Inter,sans-serif;border:1px solid transparent;background:transparent;padding:3px 6px;border-radius:6px;min-width:0}
.gh2 .gs{grid-row:2;font:13px Inter,sans-serif;color:#5E5C55;border:1px solid transparent;background:transparent;padding:3px 6px;border-radius:6px;min-width:0}
.gh2 input:hover,.gh2 input:focus,.gh2 input:placeholder-shown{border-color:var(--line);background:#fff}
.gh2 .gct{color:#5E5C55;font-size:13px;text-align:right;white-space:nowrap}
.gh2 .gbtns{grid-row:2;display:flex;gap:4px;justify-content:flex-end}
.gadd{border:1.5px dashed var(--line);border-radius:12px;background:transparent;color:#5E5C55;font:600 15px Inter,sans-serif;min-height:80px;cursor:pointer}
.gadd:hover{border-color:#5E5C55;color:#16161A}
body.pastmode .steps button:not(.push):not([data-tab=families]):not([data-tab=setup]){opacity:.45}
.gmovebar select{color:#16161A;background:#fff}
@media (max-width:820px){.gpool{position:static;max-height:none}}
