.grid{display:grid;gap:14px}
.grid.cols{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}
.grid.two{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}
.stat b{display:block;font-family:var(--display);font-size:34px;line-height:1.1}
.stat span{font-size:12px;color:var(--muted);font-weight:700;letter-spacing:.04em}
.subnav{display:flex;gap:6px;flex-wrap:wrap;margin:14px 0 18px}
.subnav a{padding:8px 14px;border-radius:99px;border:1px solid var(--line);text-decoration:none;color:var(--fg);font-weight:600;font-size:14px}
.subnav a[aria-current="page"]{background:var(--fg);color:var(--ink)}
.bar{display:grid;grid-template-columns:130px 1fr 70px;gap:10px;align-items:center;font-size:13px;margin:8px 0}
.bar .track{height:10px;background:var(--card-on);border-radius:99px;overflow:hidden}
.bar .fill{height:100%;background:var(--signal);border-radius:99px}
.bars{display:flex;align-items:flex-end;gap:4px;height:120px;margin-top:10px}
.bars i{flex:1;max-width:44px;background:var(--signal);border-radius:4px 4px 0 0;min-height:2px}
.codebox{font-family:var(--mono);font-size:13px;white-space:pre;max-height:260px;overflow:auto;padding:12px;border:1px solid var(--line);border-radius:14px;background:var(--card)}
.gatekey{font-family:var(--mono);font-size:20px;letter-spacing:.06em;word-break:break-all;padding:14px;border:1px dashed var(--signal);border-radius:14px;text-align:center}
.tierrow,.zonerow{display:grid;gap:8px;padding:12px;border:1px solid var(--line);border-radius:14px}
.checks{display:flex;gap:12px;flex-wrap:wrap}
.checks label{display:flex;gap:6px;align-items:center;font-size:14px}
.denied-row td{color:var(--bad)}

/* Phase 1: sidebar layout */
.org{display:grid;grid-template-columns:210px minmax(0,1fr);gap:24px;align-items:start}
.side{position:sticky;top:12px;display:flex;flex-direction:column;gap:2px;padding:10px;border:1px solid var(--line);border-radius:18px;background:var(--card)}
.side a{padding:10px 12px;border-radius:10px;color:var(--muted);text-decoration:none;font-weight:600}
.side a:hover{color:var(--fg)}
.side a[aria-current="page"]{background:var(--card-on);color:var(--fg);box-shadow:inset 3px 0 var(--signal)}
.side-label{padding:10px 12px 4px;overflow-wrap:anywhere;text-transform:none;letter-spacing:.02em;font-size:12px;color:var(--fg);font-weight:700}
.main{min-width:0}
.stat.dk{background:var(--plum);border-color:var(--plum)}
.stat.dk b,.stat.dk span{color:#fff}
.wrap{max-width:1240px}
@media (max-width:860px){
  .org{grid-template-columns:1fr;gap:14px}
  .side{position:static;flex-direction:row;overflow-x:auto;padding:6px;gap:4px;white-space:nowrap}
  .side a[aria-current="page"]{box-shadow:none}
  .side-label{display:none}
}

/* Phase 1: sidebar layout */
.org{display:grid;grid-template-columns:210px minmax(0,1fr);gap:24px;align-items:start}
.side{position:sticky;top:12px;display:flex;flex-direction:column;gap:2px;padding:10px;border:1px solid var(--line);border-radius:18px;background:var(--card)}
.side a{padding:10px 12px;border-radius:10px;color:var(--muted);text-decoration:none;font-weight:600}
.side a:hover{color:var(--fg)}
.side a[aria-current="page"]{background:var(--card-on);color:var(--fg);box-shadow:inset 3px 0 var(--signal)}
.side-label{padding:10px 12px 4px;overflow-wrap:anywhere;text-transform:none;letter-spacing:.02em;font-size:12px;color:var(--fg);font-weight:700}
.main{min-width:0}
.stat.dk{background:var(--plum);border-color:var(--plum)}
.stat.dk b,.stat.dk span{color:#fff}
.wrap{max-width:1240px}
@media (max-width:860px){
  .org{grid-template-columns:1fr;gap:14px}
  .side{position:static;flex-direction:row;overflow-x:auto;padding:6px;gap:4px;white-space:nowrap}
  .side a[aria-current="page"]{box-shadow:none}
  .side-label{display:none}
}
.topbar{max-width:1240px}
.wordmark{white-space:nowrap}
.main h1 + p{margin-bottom:18px}
@media (max-width:860px){.hide-sm{display:none}}

.signin-top{margin-top:2vh}

/* Gate team: the one-time scanner link with its QR code */
.stkey{display:grid;grid-template-columns:180px 1fr;gap:18px;align-items:start;margin-top:14px;border-color:var(--signal)}
.stkey .qrbox{background:#fff;border-radius:14px;padding:8px}
.stkey .qrbox svg{display:block;width:100%;height:auto}
@media(max-width:560px){.stkey{grid-template-columns:1fr}.stkey .qrbox{max-width:220px}}

/* Report */
.stat small{display:block;margin-top:4px;font-size:12px;color:var(--muted);line-height:1.35}
.stat.dk small{color:#fff;opacity:.85}
.report .bar{grid-template-columns:170px 1fr 50px}
.flags ul{margin:8px 0 0;padding-left:18px;display:grid;gap:6px}
.flags li{font-size:14px;line-height:1.45}
.flags li.warn::marker{color:var(--warn)}
.printonly{display:none}
@media print{
  body.fx canvas,.fx-aurora,.topbar,.side,.noprint,.toast{display:none!important}
  body,.card{background:#fff!important;color:#000!important;box-shadow:none!important}
  .org{display:block}
  .printonly{display:block;margin-bottom:10px}
  .report .card{break-inside:avoid;border-color:#ccc}
  .stat.dk{background:#fff!important;border:2px solid #000!important}
  .stat.dk b,.stat.dk span,.report .stat.dk small{color:#000!important}
  .bars i,.bar .fill{-webkit-print-color-adjust:exact;print-color-adjust:exact}
}

/* Attendance: day-by-day arrival grid */
.att-table td,.att-table th{white-space:nowrap}
.att-cell{text-align:center;font-size:12.5px}
.att-cell.late{color:var(--bad);font-weight:700}
.att-cell.off{color:var(--muted)}
.att-bars{height:90px}
