:root{
  --red:#C8102E; --red-deep:#8E0B20; --red-soft:#FBE9EC;
  --black:#0C0D0F; --ink:#17191D; --silver:#C9CCD1; --gray:#6E747D;
  --line:#DDE0E4; --paper:#F4F5F7;
  --num:"Anton",Impact,sans-serif;
  --display:"Oswald","Barlow Condensed",sans-serif;
  --body:"Inter",-apple-system,"Segoe UI",Roboto,sans-serif;
  --mono:"Roboto Mono",ui-monospace,Menlo,monospace;
}
*{box-sizing:border-box}
body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--body);font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased}
.wrap{max-width:1080px;margin:0 auto;padding:0 16px 64px}

/* masthead */
.masthead{background:var(--black);color:#fff;position:relative;overflow:hidden}
.masthead::after{content:"";position:absolute;top:0;right:-60px;width:220px;height:100%;background:var(--red);transform:skewX(-18deg);opacity:.9}
.masthead .inner{max-width:1080px;margin:0 auto;padding:16px;position:relative;z-index:2}
.school{font-family:var(--mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;color:var(--silver)}
h1.event{font-family:var(--num);font-size:40px;line-height:.94;text-transform:uppercase;margin:4px 0 6px;color:#fff}
.meta{font-size:13px;color:var(--silver)}
.meta b{color:#fff;font-weight:600}
.masthead a{color:#fff}

/* cards + type */
.card{background:#fff;border:1px solid var(--line);border-radius:8px;padding:22px;margin-top:20px}
.card.tight{padding:16px}
h2{font-family:var(--display);text-transform:uppercase;letter-spacing:.05em;font-size:23px;margin:0 0 2px;font-weight:700}
.sub{color:var(--gray);font-size:13.5px;margin:0 0 18px}
.eyebrow{font-family:var(--mono);font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--red);font-weight:700;margin-bottom:6px}
fieldset{border:0;border-top:2px solid var(--black);padding:18px 0 0;margin:26px 0 0}
fieldset:first-of-type{border-top:0;padding-top:0;margin-top:0}
legend{font-family:var(--display);text-transform:uppercase;letter-spacing:.09em;font-size:15px;color:var(--black);font-weight:700;padding:0 10px 0 0}
.grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.full{grid-column:1/-1}
label{display:block;font-size:12.5px;font-weight:600;color:var(--black);margin-bottom:5px}
label .req{color:var(--red)}
input[type=text],input[type=tel],input[type=email],input[type=date],input[type=password],select,textarea{
  width:100%;padding:10px 11px;border:1px solid var(--line);border-radius:6px;background:#fff;font-family:var(--body);font-size:15px;color:var(--ink)}
input:focus,select:focus,textarea:focus{outline:2px solid var(--red);border-color:var(--red)}
.hint{font-size:11.5px;color:var(--gray);margin-top:4px}
.check{display:flex;gap:10px;align-items:flex-start;padding:12px;border:1px solid var(--line);border-radius:6px;background:#FBFBFC}
.check input{margin-top:3px;width:18px;height:18px;flex:0 0 auto;accent-color:var(--red)}
.check span{font-size:13px;line-height:1.45}
.waiver{background:#FBFBFC;border:1px solid var(--line);border-left:3px solid var(--black);border-radius:0 6px 6px 0;padding:12px 14px;font-size:12.5px;color:var(--gray);max-height:140px;overflow:auto;margin-bottom:12px}

/* buttons */
.btn{display:inline-block;font-family:var(--display);text-transform:uppercase;letter-spacing:.08em;font-weight:700;font-size:16px;
  padding:12px 22px;border-radius:6px;border:1px solid transparent;cursor:pointer;text-decoration:none;text-align:center}
.btn.primary{background:var(--red);color:#fff}
.btn.primary:hover{background:var(--red-deep)}
.btn.dark{background:var(--black);color:#fff}
.btn.ghost{background:#fff;color:var(--black);border-color:var(--silver)}
.btn.ghost:hover{border-color:var(--black)}
.btn.danger{background:var(--red-soft);color:var(--red-deep);border-color:#EFC4CC}
.btn.sm{font-size:13px;padding:7px 12px;letter-spacing:.05em}
.btn:focus-visible{outline:2px solid var(--black);outline-offset:2px}
.row{display:flex;gap:10px;flex-wrap:wrap;align-items:center}

/* flags */
.flag{display:inline-flex;align-items:center;font-family:var(--mono);font-size:10.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;padding:3px 8px;border-radius:3px;border:1px solid transparent}
.flag.ok{background:#fff;color:var(--black);border-color:var(--silver)}
.flag.bad{background:var(--red);color:#fff}
.flag.neutral{background:#EEF0F2;color:var(--gray)}
.err{color:var(--red);font-weight:600;font-size:13.5px}
.note{border-left:3px solid var(--black);background:#F1F2F4;padding:12px 14px;border-radius:0 6px 6px 0;font-size:13px;margin-top:16px}
.note.danger{border-color:var(--red);background:var(--red-soft)}

/* confirmation + bib */
.confirm{background:var(--black);color:#fff;border-radius:8px;padding:16px 18px;margin-bottom:20px;display:flex;gap:16px;align-items:center}
.confirm .rule{width:6px;align-self:stretch;background:var(--red);border-radius:3px;flex:0 0 auto}
.confirm .big{font-family:var(--display);font-size:22px;text-transform:uppercase;line-height:1.05;font-weight:700}
.confirm .small{font-size:13px;color:var(--silver);margin-top:4px}
.confirm .cnum{font-family:var(--num);font-size:50px;line-height:.85;margin-left:auto;color:#fff}
.bib{max-width:360px;margin:0 auto;background:#fff;border:2px solid var(--black);border-radius:10px;overflow:hidden}
.bib .top{background:var(--black);color:#fff;padding:12px 16px}
.bib .top .sch{font-family:var(--mono);font-size:10px;letter-spacing:.2em;color:var(--silver);text-transform:uppercase}
.bib .top .ev{font-family:var(--display);font-size:19px;text-transform:uppercase;line-height:1.1;font-weight:600}
.numzone{position:relative;background:var(--black);color:#fff;padding:6px 16px 18px;overflow:hidden}
.numzone::before{content:"";position:absolute;inset:0;background:var(--red);clip-path:polygon(58% 0,100% 0,100% 100%,32% 100%)}
.numzone .lab{position:relative;z-index:2;font-family:var(--mono);font-size:9.5px;letter-spacing:.24em;text-transform:uppercase;color:var(--silver)}
.numzone .n{position:relative;z-index:2;font-family:var(--num);font-size:104px;line-height:.86}
.bib .who{padding:14px 16px 0;font-family:var(--display);font-size:26px;text-transform:uppercase;line-height:1;font-weight:700;word-break:break-word}
.bib .yr{padding:3px 16px 12px;font-family:var(--mono);font-size:11px;letter-spacing:.1em;color:var(--gray);text-transform:uppercase}
.qrzone{border-top:2px dashed var(--line);padding:16px;text-align:center}
.qrzone img,.qrzone canvas{display:block;margin:0 auto}
.code{font-family:var(--mono);font-weight:700;font-size:18px;letter-spacing:.16em;margin-top:10px}
.bib .foot{background:#F7F8F9;border-top:1px solid var(--line);padding:10px 16px;font-size:11.5px;color:var(--gray);text-align:center}

/* check-in */
#reader{width:100%;max-width:360px;margin:0 auto;border-radius:8px;overflow:hidden;background:#000;min-height:60px}
.verdict{border-radius:8px;padding:16px 18px;color:#fff;display:flex;align-items:center;gap:18px}
.verdict.in{background:var(--black)}
.verdict.dup{background:#EEF0F2;color:var(--ink)}
.verdict.miss{background:var(--red)}
.verdict .rule{width:6px;align-self:stretch;background:var(--red);border-radius:3px;flex:0 0 auto}
.verdict.dup .rule{background:var(--gray)}
.verdict.miss .rule{background:#fff}
.verdict .big{font-family:var(--display);font-size:27px;text-transform:uppercase;line-height:1;font-weight:700}
.verdict .vnum{font-family:var(--num);font-size:56px;line-height:.85;margin-left:auto}
.athletecard{border:1px solid var(--line);border-top:4px solid var(--red);border-radius:0 0 8px 8px;padding:16px;margin-top:12px;background:#fff}
.athletecard .nm{font-family:var(--display);font-size:26px;text-transform:uppercase;line-height:1;font-weight:700}
.kv{display:grid;grid-template-columns:126px 1fr;gap:4px 12px;font-size:13.5px;margin-top:12px}
.kv dt{color:var(--gray);font-size:12px;padding-top:2px}
.kv dd{margin:0;font-weight:500}

/* roster */
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:18px}
.stat{background:#fff;border:1px solid var(--line);border-radius:8px;padding:12px 14px;border-top:3px solid var(--black)}
.stat.alert{border-top-color:var(--red)}
.stat .n{font-family:var(--num);font-size:34px;line-height:1}
.stat.alert .n{color:var(--red)}
.stat .l{font-family:var(--mono);font-size:9.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--gray);margin-top:4px}
.tablewrap{overflow:auto;border:1px solid var(--line);border-radius:8px;background:#fff;max-height:62vh}
table{border-collapse:separate;border-spacing:0;width:100%;font-size:13px;min-width:800px}
th{position:sticky;top:0;background:var(--black);color:#fff;text-align:left;font-family:var(--mono);font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;padding:9px 10px;white-space:nowrap;z-index:2}
td{padding:9px 10px;border-bottom:1px solid var(--line);vertical-align:middle;white-space:nowrap}
tr:nth-child(even) td{background:#FAFBFC}
tr:hover td{background:var(--red-soft)}
td.num{font-family:var(--num);font-size:20px}
td.name{font-weight:600;white-space:normal}
.codecell{font-family:var(--mono);font-size:11.5px;font-weight:700;color:var(--gray)}
.empty{padding:44px 20px;text-align:center;color:var(--gray)}
.empty .big{font-family:var(--display);font-size:22px;text-transform:uppercase;color:var(--ink);margin-bottom:6px}
.chipbar{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}
.chip{font-family:var(--mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;padding:6px 11px;border:1px solid var(--silver);border-radius:3px;background:#fff;cursor:pointer;text-decoration:none;color:var(--ink)}
.chip.on{background:var(--black);color:#fff;border-color:var(--black)}

/* number board */
.board{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;margin-top:14px}
.bcard{border:1px solid var(--line);border-left:4px solid var(--red);border-radius:4px;padding:8px 10px;background:#fff;display:flex;gap:10px;align-items:center}
.bcard .bn{font-family:var(--num);font-size:28px;line-height:.9;min-width:44px}
.bcard .bname{font-size:12.5px;font-weight:600;line-height:1.2}
.bcard .bgr{font-family:var(--mono);font-size:10px;color:var(--gray);letter-spacing:.08em}

@media (max-width:720px){
  h1.event{font-size:29px}
  .grid{grid-template-columns:1fr}
  .stats{grid-template-columns:1fr 1fr}
  .card{padding:16px}
  .verdict .vnum{font-size:44px}
}
@media print{
  .masthead,.card:not(.printme),.chipbar{display:none!important}
  body{background:#fff}
  .board{grid-template-columns:repeat(4,1fr)}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}
