

@font-face{
  font-family:'Oswald Var';
  font-weight:400 700;
  font-style:normal;
  font-display:swap;
  src:url('../fonts/oswald-var.woff2') format('woff2');
}
@font-face{
  font-family:'Archivo Var';
  font-weight:400 700;
  font-style:normal;
  font-display:swap;
  src:url('../fonts/archivo-var.woff2') format('woff2');
}
@font-face{
  font-family:'Plex Mono';
  font-weight:500;
  font-style:normal;
  font-display:swap;
  src:url('../fonts/plex-mono-500.woff2') format('woff2');
}
@font-face{
  font-family:'Plex Mono';
  font-weight:600;
  font-style:normal;
  font-display:swap;
  src:url('../fonts/plex-mono-600.woff2') format('woff2');
}

:root{
  --snow:#EEF2F5;
  --snow-2:#E2E8ED;
  --card:#FFFFFF;
  --ink:#1B2430;
  --ink-soft:#4B5563;
  --granite:#5B6470;
  --line:#D6DEE4;
  --flag:#155DFC;
  --flag-ink:#0B3FA6;
  --frost:#193CB8;
  --frost-bg:#E4E9F9;
  --gold:#9C6B0C;
  --gold-bg:#FBF0D6;
  --silver:#5B6470;
  --silver-bg:#EAEDEF;
  --bronze:#8A4E27;
  --bronze-bg:#F3E4D6;
  --shadow:0 1px 2px rgba(20,30,40,.06), 0 8px 24px -12px rgba(20,30,40,.15);
  --focus:#193CB8;
}

@media (prefers-color-scheme: dark){
  :root{
    --snow:#111820;
    --snow-2:#0C1218;
    --card:#161F29;
    --ink:#E7ECF0;
    --ink-soft:#AAB6C0;
    --granite:#8A96A2;
    --line:#2A3742;
    --flag:#5B93FF;
    --flag-ink:#8FB4FF;
    --frost:#6D93E8;
    --frost-bg:#1B2740;
    --gold:#E8B84B;
    --gold-bg:#3A2E10;
    --silver:#AEB8C2;
    --silver-bg:#26303A;
    --bronze:#D89A6B;
    --bronze-bg:#3A2818;
    --shadow:0 1px 2px rgba(0,0,0,.4), 0 8px 24px -12px rgba(0,0,0,.6);
    --focus:#6D93E8;
  }
}
:root[data-theme="dark"]{
  --snow:#111820;
  --snow-2:#0C1218;
  --card:#161F29;
  --ink:#E7ECF0;
  --ink-soft:#AAB6C0;
  --granite:#8A96A2;
  --line:#2A3742;
  --flag:#5B93FF;
  --flag-ink:#8FB4FF;
  --frost:#6D93E8;
  --frost-bg:#1B2740;
  --gold:#E8B84B;
  --gold-bg:#3A2E10;
  --silver:#AEB8C2;
  --silver-bg:#26303A;
  --bronze:#D89A6B;
  --bronze-bg:#3A2818;
  --shadow:0 1px 2px rgba(0,0,0,.4), 0 8px 24px -12px rgba(0,0,0,.6);
  --focus:#6D93E8;
}
:root[data-theme="light"]{
  --snow:#EEF2F5;
  --snow-2:#E2E8ED;
  --card:#FFFFFF;
  --ink:#1B2430;
  --ink-soft:#4B5563;
  --granite:#5B6470;
  --line:#D6DEE4;
  --flag:#155DFC;
  --flag-ink:#0B3FA6;
  --frost:#193CB8;
  --frost-bg:#E4E9F9;
  --gold:#9C6B0C;
  --gold-bg:#FBF0D6;
  --silver:#5B6470;
  --silver-bg:#EAEDEF;
  --bronze:#8A4E27;
  --bronze-bg:#F3E4D6;
  --shadow:0 1px 2px rgba(20,30,40,.06), 0 8px 24px -12px rgba(20,30,40,.15);
  --focus:#193CB8;
}

*{box-sizing:border-box;}
html,body{margin:0;padding:0;}
body{
  background:var(--snow);
  color:var(--ink);
  font-family:'Archivo Var', system-ui, sans-serif;
  font-weight:400;
  font-size:15px;
  line-height:1.5;
  -webkit-font-smoothing:antialiased;
}
h1,h2,h3,.display{
  font-family:'Oswald Var', system-ui, sans-serif;
  text-transform:uppercase;
  letter-spacing:.02em;
  font-weight:600;
  text-wrap:balance;
  margin:0;
}
.mono{
  font-family:'Plex Mono', ui-monospace, monospace;
  font-variant-numeric:tabular-nums;
}
a{color:var(--frost);}
button{font-family:inherit;}
:focus-visible{outline:2.5px solid var(--focus); outline-offset:2px; border-radius:3px;}

.wrap{max-width:1180px;margin:0 auto;padding:0 20px 80px;}

.season-bar{background:var(--snow-2);border-bottom:1px solid var(--line);}
.season-bar-inner{
  max-width:1180px;margin:0 auto;padding:11px 20px;display:flex;gap:16px;
  align-items:center;justify-content:space-between;
}
.season-tabs{display:flex;gap:8px;overflow-x:auto;}
.season-tab{
  font-family:'Oswald Var';font-size:.72rem;letter-spacing:.05em;text-transform:uppercase;font-weight:600;
  padding:7px 15px;border-radius:20px;border:1px solid var(--line);background:var(--card);color:var(--ink-soft);
  cursor:pointer;white-space:nowrap;flex:none;transition:border-color .12s, color .12s, background .12s;
}
@media (prefers-reduced-motion: reduce){ .season-tab{transition:none;} }
.season-tab:hover{border-color:var(--frost);color:var(--frost);}
.season-tab.active{background:var(--flag);border-color:var(--flag);color:#fff;}

/* narrow-viewport swap: a compressed row of season-tab pills is hard to
   tap accurately on an iPhone-width screen, so a native <select> (the
   OS's own picker — easy to use one-handed) takes over below 640px
   instead. Hidden by default; .season-tabs hides at the same breakpoint
   in the media query below. */
.season-select{
  display:none;font-family:'Oswald Var';font-size:.8rem;letter-spacing:.03em;text-transform:uppercase;font-weight:600;
  padding:9px 32px 9px 15px;border-radius:20px;border:1px solid var(--line);background:var(--card) url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="10" height="6"><path d="M0 0l5 6 5-6z" fill="%235B6470"/></svg>') no-repeat right 13px center;
  color:var(--ink-soft);flex:none;-webkit-appearance:none;appearance:none;max-width:100%;
}
@media (max-width:640px){
  .season-tabs{display:none;}
  .season-select{display:block;}
}
@media (prefers-color-scheme: dark){
  .season-select{background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="10" height="6"><path d="M0 0l5 6 5-6z" fill="%238A96A2"/></svg>');}
}
:root[data-theme="dark"] .season-select{background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="10" height="6"><path d="M0 0l5 6 5-6z" fill="%238A96A2"/></svg>');}

/* ---------- Masthead ---------- */
.masthead{
  background:#000;
  color:#F3F6F8;
  padding:38px 20px 30px;
  border-bottom:5px solid var(--flag);
}

.masthead-inner{max-width:1180px;margin:0 auto;padding:0 20px;display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:24px;}
.bib-tag{
  display:inline-flex;align-items:center;gap:8px;
  font-family:'Plex Mono',monospace;font-size:11.5px;letter-spacing:.08em;
  color:#C7D0D8;text-transform:uppercase;margin-bottom:10px;
}
.bib-tag .dot{width:6px;height:6px;border-radius:50%;background:var(--flag);display:inline-block;}
.team-title{font-size:clamp(2.1rem,5vw,3.4rem);line-height:.98;color:#fff;}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;}
.team-logo{height:clamp(68px,11vw,112px);width:auto;display:block;max-width:100%;transition:opacity .12s;}
@media (prefers-reduced-motion: reduce){ .team-logo{transition:none;} }
.logo-link:hover .team-logo{opacity:.82;}
.global-search{position:relative;max-width:260px;width:100%;flex:none;}
/* fixed 260px is fine next to a scrollable season-tab pill row, but next
   to the season-select dropdown (see .season-select above) it pushed the
   bar wider than the viewport, clipping the search input off-screen.
   Letting it shrink keeps both controls on one row at any iPhone width. */
@media (max-width:640px){ .global-search{flex:1;min-width:0;max-width:none;} }
.global-search-input{
  width:100%;padding:8px 13px;border-radius:20px;border:1px solid var(--line);
  background:var(--card);color:var(--ink);font-size:13px;font-family:'Archivo Var',inherit;
}
.global-search-input::placeholder{color:var(--granite);}
.global-search-input:focus{outline:none;border-color:var(--frost);}
.global-search-results{
  position:absolute;top:calc(100% + 6px);left:0;right:0;background:var(--card);border:1px solid var(--line);
  border-radius:8px;box-shadow:var(--shadow);max-height:360px;overflow-y:auto;z-index:30;display:none;
}
.global-search-results.show{display:block;}
.gsr-item{
  display:block;width:100%;text-align:left;padding:9px 12px;border:none;border-bottom:1px solid var(--line);
  background:none;cursor:pointer;font-size:13.3px;color:var(--ink);font-family:inherit;
}
.gsr-item:last-child{border-bottom:none;}
.gsr-item:hover, .gsr-item:focus-visible, .gsr-item.active{background:var(--snow);}
.gsr-item .gsr-name{font-weight:500;display:block;}
.gsr-item .gsr-meta{display:block;color:var(--granite);font-size:11.5px;margin-top:1px;}
.gsr-empty{padding:14px 12px;color:var(--granite);font-size:13px;}
.stat-strip{display:flex;gap:10px;flex-wrap:wrap;}
.stat-plate{
  background:#1B1F24;
  border:1px solid rgba(255,255,255,.14);
  border-radius:4px;
  padding:9px 16px 8px;
  min-width:86px;
  text-align:center;
  font:inherit;color:inherit;appearance:none;
}
.stat-plate .n{font-family:'Plex Mono';font-weight:600;font-size:1.5rem;color:#fff;display:block;}
.stat-plate .l{font-size:10px;letter-spacing:.09em;text-transform:uppercase;color:#9DAAB4;display:block;margin-top:2px;}
button.stat-plate{cursor:pointer;transition:background .12s, border-color .12s;}
@media (prefers-reduced-motion: reduce){ button.stat-plate{transition:none;} }
button.stat-plate:hover{background:#22272E;border-color:var(--flag);}
button.stat-plate:hover .n{color:var(--flag-ink);}
@media (prefers-color-scheme: dark){ button.stat-plate:hover .n{color:var(--flag);} }
:root[data-theme="dark"] button.stat-plate:hover .n{color:var(--flag);}
:root[data-theme="light"] button.stat-plate:hover .n{color:var(--flag-ink);}
button.stat-plate.active{background:var(--flag);border-color:var(--flag);}
button.stat-plate.active .n{color:#fff;}
button.stat-plate.active .l{color:rgba(255,255,255,.75);}

/* ---------- Layout ---------- */
.explorer{margin-top:18px;}

.panel{background:var(--card);border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow);}

/* main content tabs */
.main-tabs{display:flex;justify-content:center;gap:10px;margin-top:26px;flex-wrap:wrap;}
.main-tab{
  font-family:'Oswald Var';font-size:.82rem;letter-spacing:.04em;text-transform:uppercase;font-weight:600;
  padding:10px 22px;border-radius:24px;border:1px solid var(--line);background:var(--card);color:var(--ink-soft);
  cursor:pointer;transition:border-color .12s, color .12s, background .12s;
}
@media (prefers-reduced-motion: reduce){ .main-tab{transition:none;} }
.main-tab:hover{border-color:var(--frost);color:var(--frost);}
.main-tab.active{background:var(--flag);border-color:var(--flag);color:#fff;}

/* detail */
.detail{padding:26px 26px 30px;min-height:520px;}
.detail-empty{color:var(--granite);padding:60px 10px;text-align:center;}

.ath-head{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap;border-bottom:1px solid var(--line);padding-bottom:18px;margin-bottom:20px;}
.ath-id-row{display:flex;align-items:center;gap:16px;}
.ath-avatar{
  width:64px;height:64px;border-radius:50%;object-fit:cover;flex:none;
  background:var(--snow-2);border:1px solid var(--line);
}
.ath-avatar-fallback{
  display:flex;align-items:center;justify-content:center;
  font-family:'Plex Mono';font-weight:600;font-size:1.1rem;color:var(--ink-soft);
}
.ath-name{font-size:1.85rem;color:var(--ink);}
.ig-link{
  display:inline-flex;vertical-align:middle;margin-left:2px;position:relative;top:-2px;
  color:var(--granite);transition:color .12s;
}
@media (prefers-reduced-motion: reduce){ .ig-link{transition:none;} }
.ig-link:hover{color:var(--frost);}
.event-stars{font-size:11px;letter-spacing:1px;vertical-align:middle;}
.ath-division{font-family:'Archivo Var';text-transform:none;letter-spacing:0;font-weight:500;color:var(--ink-soft);font-size:.92rem;margin-top:4px;}
.jfc-line{font-family:'Archivo Var';text-transform:none;letter-spacing:0;font-weight:500;color:var(--ink-soft);font-size:.86rem;margin-top:6px;}
.rank-badge{
  font-family:'Plex Mono';font-weight:600;text-align:center;padding:8px 18px;border-radius:8px;
  background:var(--snow-2);border:1px solid var(--line);flex:none;
  display:block;text-decoration:none;color:inherit;transition:border-color .12s;
}
a.rank-badge:hover{border-color:var(--frost);}
.rank-badge .num{font-size:1.7rem;display:block;color:var(--ink);}
.rank-badge .cap{font-size:9.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--granite);font-family:'Archivo Var';}
.rank-badge.top3{background:var(--gold-bg);border-color:transparent;}
.rank-badge.top3 .num{color:var(--gold);}

.stat-row{display:flex;gap:10px;margin-bottom:26px;flex-wrap:wrap;}
.stat-tile{background:var(--snow);border:1px solid var(--line);border-radius:8px;padding:10px 16px;min-width:96px;}
.stat-tile .v{font-family:'Plex Mono';font-weight:600;font-size:1.25rem;color:var(--ink);display:block;}
.stat-tile .k{font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--granite);}

.section-label{font-size:.72rem;letter-spacing:.09em;color:var(--granite);margin-bottom:10px;}
.unavailable-note{color:var(--granite);font-size:13px;font-style:italic;margin-bottom:22px;}
.officials-group-label{font-size:12.5px;color:var(--ink-soft);font-weight:500;}
.officials-separator{color:var(--line);font-weight:600;}
.subview-tabs{display:flex;gap:8px;margin-bottom:18px;}
.subview-tab{
  font-family:'Oswald Var';font-size:.72rem;letter-spacing:.05em;text-transform:uppercase;font-weight:600;
  padding:7px 15px;border-radius:20px;border:1px solid var(--line);background:var(--card);color:var(--ink-soft);
  cursor:pointer;white-space:nowrap;transition:border-color .12s, color .12s, background .12s;
}
.subview-tab:hover{border-color:var(--frost);color:var(--frost);}
.subview-tab.active{background:var(--flag);border-color:var(--flag);color:#fff;}
@media (prefers-reduced-motion: reduce){ .subview-tab{transition:none;} }

.leaderboard-filters{display:flex;flex-wrap:wrap;gap:10px 22px;margin-bottom:18px;padding-bottom:16px;border-bottom:1px solid var(--line);}
.lb-filter-group{display:flex;gap:14px;}
.lb-filter{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--ink-soft);cursor:pointer;user-select:none;}
.lb-filter input{accent-color:var(--flag);cursor:pointer;width:15px;height:15px;}

/* calendar tab */
.calendar-wrap{display:flex;flex-wrap:wrap;gap:24px;}
/* The Comps tab stacks the month calendar directly above the comps table
   (the two used to be separate tabs — see NOTES.md), and without this they
   read as one undifferentiated block. Margin on the calendar rather than the
   table so it collapses correctly when the calendar is empty. */
#calendar-body{margin-bottom:28px;}
.cal-month{flex:1 1 380px;min-width:320px;max-width:460px;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px 16px 16px;}
.cal-month-title{font-size:.95rem;font-weight:600;color:var(--ink);margin-bottom:12px;}
/* minmax rather than a fixed 18px: .cal-daybox spans a whole week block and
   carries a min-height, and only auto-growable rows will stretch to honor it.
   Rows still settle at 18px whenever the content doesn't need more, so bar
   and day-number placement is unchanged from before the day boxes existed. */
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);grid-auto-rows:minmax(18px,auto);row-gap:3px;column-gap:4px;min-width:0;}
.cal-dow{font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--granite);text-align:center;padding-bottom:2px;}
/* A day is drawn as an outlined box on the card's own surface — white in light
   mode, the card colour in dark — so the box reads by its outline alone and
   never as a grey fill competing with the event bars stacked on top of it. */
.cal-daybox{background:var(--card);border:1px solid var(--line);border-radius:6px;min-height:44px;min-width:0;z-index:0;}
.cal-daynum-cell{position:relative;z-index:1;font-family:'Plex Mono';font-size:9.5px;color:var(--granite);padding-left:2px;min-width:0;}
.cal-event-bar{position:relative;z-index:1;display:flex;align-items:center;min-width:0;padding:0 6px;background:var(--frost-bg);color:var(--flag-ink);font-size:9px;line-height:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer;border-top:1px solid var(--line);border-bottom:1px solid var(--line);}
.cal-event-bar.bar-start{border-left:1px solid var(--line);border-top-left-radius:6px;border-bottom-left-radius:6px;}
.cal-event-bar.bar-end{border-right:1px solid var(--line);border-top-right-radius:6px;border-bottom-right-radius:6px;}
.cal-event-bar:hover,.cal-event-bar.cal-event-bar-active{background:var(--flag);color:#fff;border-color:var(--flag);}

/* admin: per-dataset freshness table */
.freshness{width:100%;border-collapse:collapse;font-size:12.5px;}
.freshness th{text-align:left;font-family:'Plex Mono';font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--granite);padding:6px 10px;border-bottom:1px solid var(--line);white-space:nowrap;}
.freshness td{padding:8px 10px;border-bottom:1px solid var(--line);vertical-align:top;}
.freshness tr:last-child td{border-bottom:none;}
.fresh-label{display:block;font-weight:600;color:var(--ink);}
.fresh-file{display:block;font-size:10px;color:var(--granite);}
.fresh-by{color:var(--ink-soft);}

/* event status pills (Season Calendar). Neutral by default — status is
   context, not a call to action — with only a running event highlighted and
   finished ones muted. */
.evt-status{display:inline-block;font-family:'Plex Mono';font-size:10.5px;letter-spacing:.03em;padding:2px 8px;border-radius:999px;white-space:nowrap;border:1px solid var(--line);color:var(--ink-soft);}
.evt-status.evt-status-live{background:var(--flag);border-color:var(--flag);color:#fff;font-weight:600;}
.evt-status.evt-status-done{color:var(--granite);border-style:dashed;}
/* not happening: struck through wherever it appears, so a cancelled comp is
   never mistaken for one that ran */
.evt-status.evt-status-off{color:var(--bronze);border-color:var(--bronze);text-decoration:line-through;text-decoration-thickness:1px;}
.cal-event-bar.cal-bar-off{background:transparent;border-style:dashed;color:var(--granite);text-decoration:line-through;}
.cal-event-bar.cal-bar-off:hover{background:var(--granite);color:var(--card);text-decoration:line-through;}
tr.row-off td{opacity:.62;}
tr.row-off td:nth-child(2){text-decoration:line-through;}

/* registration window pills (Season Calendar). Only the "open now" state is
   coloured — that's the one you can act on; the others are information. */
.reg-pill{display:inline-block;font-family:'Plex Mono';font-size:10.5px;letter-spacing:.03em;padding:2px 8px;border-radius:999px;white-space:nowrap;border:1px solid var(--line);color:var(--granite);}
.reg-pill.reg-open{background:var(--frost-bg);border-color:var(--flag);color:var(--flag-ink);font-weight:600;}
.reg-pill.reg-soon{background:transparent;color:var(--ink-soft);}
.reg-pill.reg-closed{background:transparent;color:var(--granite);text-decoration:line-through;text-decoration-thickness:1px;}

/* admin: what's currently live on this server. <details> rather than a JS
   toggle — the disclosure behaviour, keyboard handling and open/closed state
   are all free and can't drift out of sync with a click handler. */
.deploy-info{margin:0 0 14px;padding:8px 12px;background:var(--card);border:1px solid var(--line);border-left:3px solid var(--flag);border-radius:0 8px 8px 0;font-size:12px;color:var(--ink-soft);}
.deploy-info.deploy-info-plain{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;}
.deploy-info > summary{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;cursor:pointer;list-style:none;}
.deploy-info > summary::-webkit-details-marker{display:none;}
.deploy-info > summary::after{content:'▸';color:var(--granite);font-size:10px;margin-left:2px;}
.deploy-info[open] > summary::after{content:'▾';}
.deploy-info > summary:hover .deploy-info-v{color:var(--flag);}
.deploy-detail{margin-top:10px;padding-top:10px;border-top:1px solid var(--line);}
.deploy-message{margin:0;font-family:'Plex Mono';font-size:11.5px;line-height:1.55;color:var(--ink);white-space:pre-wrap;word-break:break-word;}
.deploy-meta{display:grid;grid-template-columns:auto 1fr;gap:2px 12px;margin:10px 0 0;font-size:11px;}
.deploy-meta dt{font-family:'Plex Mono';font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--granite);}
.deploy-meta dd{margin:0;color:var(--ink-soft);word-break:break-all;}
.deploy-info-k{font-family:'Plex Mono';font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--granite);}
.deploy-info-v{color:var(--ink);font-weight:600;}
.deploy-info-v.mono{font-family:'Plex Mono';font-weight:500;}
.deploy-info-sep{color:var(--line);}
.deploy-info-subject{color:var(--granite);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}

/* season calendar filters (Season Calendar tab) */
.cal-filters{display:flex;flex-direction:column;gap:8px;margin:10px 0 0;padding:12px 14px;background:var(--card);border:1px solid var(--line);border-radius:10px;}
.cal-filter-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 14px;}
.cal-filter-label{font-family:'Plex Mono';font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--granite);min-width:120px;}
.cal-checkrow{display:flex;flex-wrap:wrap;gap:4px 14px;}
.cal-check{display:inline-flex;align-items:center;gap:5px;cursor:pointer;font-family:'Plex Mono';font-size:11px;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-soft);}
.cal-check:hover{color:var(--flag);}
.cal-check input{accent-color:var(--flag);width:13px;height:13px;margin:0;cursor:pointer;}
.cal-check-hint{font-family:'Plex Mono';font-size:11px;letter-spacing:.04em;text-transform:uppercase;color:var(--granite);}
.cal-note{font-size:12px;color:var(--ink-soft);background:var(--card);border:1px solid var(--line);border-left:3px solid var(--granite);border-radius:0 8px 8px 0;padding:8px 12px;margin:10px 0 0;}
.cal-matched{font-family:'Plex Mono';font-size:11px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-soft);margin:10px 0 14px;}
.cal-matched b{color:var(--ink);font-weight:600;}
/* 3-star events read as the marquee stops on the schedule, so they take the
   same gold the site already uses for earned/standout results. */
.cal-event-bar.cal-bar-3star{background:var(--gold-bg);color:var(--gold);border-color:var(--gold);}
.cal-event-bar.cal-bar-3star:hover,.cal-event-bar.cal-bar-3star.cal-event-bar-active{background:var(--flag);color:#fff;border-color:var(--flag);}

/* chart */
.chart-wrap{margin-bottom:30px;}
.chart-svg{width:100%;height:auto;display:block;overflow:visible;}
.bar-counted{fill:var(--flag);}
.bar-dropped{fill:none;stroke:var(--granite);stroke-width:1.5;stroke-dasharray:3 3;}
.bar-label{font-family:'Plex Mono';font-size:11px;fill:var(--ink-soft);}
.bar-podium-mark{fill:var(--gold);}
.chart-baseline{stroke:var(--line);stroke-width:1;}
.season-bar{fill:var(--frost);}
.season-bar-current{fill:var(--flag);}
.season-bar-empty{fill:var(--line);}
.season-bar-empty-current{fill:var(--flag);}
.season-hit{cursor:pointer;}
.bar-value{font-family:'Plex Mono';font-weight:600;font-size:12px;fill:var(--ink);}
.bar-label-current{fill:var(--flag);font-weight:600;}
.chart-tooltip{
  position:absolute;pointer-events:none;background:var(--ink);color:var(--snow);
  font-size:12px;padding:7px 10px;border-radius:6px;line-height:1.4;box-shadow:var(--shadow);
  transform:translate(-50%,-100%);white-space:nowrap;z-index:5;opacity:0;transition:opacity .1s;
}
@media (prefers-reduced-motion: reduce){ .chart-tooltip{transition:none;} }
.chart-tooltip.show{opacity:1;}

.video-link-group{display:flex;flex-wrap:wrap;justify-content:flex-start;gap:6px;}
.video-link{
  display:inline-flex;align-items:center;gap:5px;padding:5px 12px;border-radius:20px;
  border:1px solid var(--line);background:var(--snow);color:var(--frost);cursor:pointer;font-size:12px;
  font-family:inherit;white-space:nowrap;transition:border-color .12s, background .12s;
}
.video-link:hover{border-color:var(--frost);background:var(--snow-2);}
.video-modal{
  position:fixed;inset:0;z-index:100;display:none;align-items:center;justify-content:center;padding:24px;
}
.video-modal.show{display:flex;}
.video-modal-backdrop{position:absolute;inset:0;background:rgba(0,0,0,.72);}
.video-modal-box{position:relative;width:100%;max-width:860px;}
.video-modal-close{
  position:absolute;top:-40px;right:0;background:none;border:none;color:#fff;font-size:32px;line-height:1;
  cursor:pointer;padding:4px 8px;
}
.video-modal-frame{position:relative;width:100%;padding-top:56.25%;background:#000;border-radius:8px;overflow:hidden;box-shadow:0 20px 60px rgba(0,0,0,.5);}
.video-modal-frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0;}
.chart-tooltip b{color:#fff;}
.chart-legend{display:flex;gap:16px;margin-top:10px;font-size:11.5px;color:var(--ink-soft);flex-wrap:wrap;}
.chart-legend .sw{display:inline-block;width:11px;height:11px;border-radius:2px;margin-right:5px;vertical-align:-1px;}

/* results table */
.table-scroll{overflow-x:auto;border:1px solid var(--line);border-radius:8px;}
table{width:100%;border-collapse:collapse;font-size:13.5px;min-width:520px;}
th{
  text-align:left;font-family:'Oswald Var';font-size:.68rem;letter-spacing:.07em;text-transform:uppercase;
  color:var(--granite);padding:10px 14px;background:var(--snow);border-bottom:1px solid var(--line);
  position:sticky;top:0;
}
th.sortable{cursor:pointer;user-select:none;}
th.sortable:hover{color:var(--frost);}
th.sortable .sort-arrow{margin-left:3px;font-size:.85em;color:var(--frost);}
td{padding:10px 14px;border-bottom:1px solid var(--line);vertical-align:top;}
tr:last-child td{border-bottom:none;}
tr.clickable-row{cursor:pointer;}
tr.clickable-row:hover td{background:var(--snow);}
tr.clickable-row:focus-visible{outline:2.5px solid var(--focus);outline-offset:-2px;}
tr.coach-row{cursor:pointer;}
tr.coach-row:hover td{background:var(--snow);}
tr.coach-row:focus-visible{outline:2.5px solid var(--focus);outline-offset:-2px;}
tr.coach-row.active td{background:var(--snow-2);}
tr.history-row{cursor:pointer;}
tr.history-row:hover td{background:var(--snow);}
tr.history-row:focus-visible{outline:2.5px solid var(--focus);outline-offset:-2px;}
tr.history-row.current-season-row td{background:var(--snow-2);}
tr.history-row.current-season-row .event-name::after{content:" (viewing)";color:var(--granite);font-weight:400;font-size:11px;text-transform:none;}
td.num,th.num{text-align:right;font-family:'Plex Mono';}
.place-chip{
  display:inline-flex;align-items:center;justify-content:center;min-width:30px;padding:3px 8px;
  border-radius:20px;font-family:'Plex Mono';font-weight:600;font-size:12px;
  background:var(--silver-bg);color:var(--silver);white-space:nowrap;
}
.place-chip.p1{background:var(--gold-bg);color:var(--gold);}
.place-chip.p2{background:var(--silver-bg);color:var(--silver);}
.place-chip.p3{background:var(--bronze-bg);color:var(--bronze);}
.place-chip-wrap{display:inline-flex;flex-direction:column;align-items:center;gap:2px;}
.place-total{font-size:10px;font-style:italic;font-family:'Archivo Var',inherit;color:var(--granite);}
.dropped-badge{
  font-size:10.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--granite);
  border:1px solid var(--line);border-radius:20px;padding:2px 8px;white-space:nowrap;
}
.counted-badge{
  font-size:10.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--flag-ink);
  border:1px solid var(--flag-ink);border-radius:20px;padding:2px 8px;
  display:inline-flex;align-items:center;gap:4px;white-space:nowrap;
}
.counted-badge .dot{width:5px;height:5px;border-radius:50%;background:currentColor;display:inline-block;}
@media (prefers-color-scheme: dark){ .counted-badge{color:var(--flag);border-color:var(--flag);} }
:root[data-theme="dark"] .counted-badge{color:var(--flag);border-color:var(--flag);}
:root[data-theme="light"] .counted-badge{color:var(--flag-ink);border-color:var(--flag-ink);}
.registered-badge{
  font-size:10.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--frost);
  border:1px dashed var(--frost);border-radius:20px;padding:2px 8px;
  display:inline-flex;align-items:center;gap:4px;white-space:nowrap;
}
.uncounted-badge{
  font-size:10.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--granite);
  border:1px solid var(--line);border-radius:20px;padding:2px 8px;white-space:nowrap;
}
.dns-badge{
  font-size:10.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--granite);
  font-style:italic;white-space:nowrap;
}
.u12-badge{
  font-size:10.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-soft);
  border:1px solid var(--line);border-radius:20px;padding:2px 8px;
  background:var(--snow-2);white-space:nowrap;
}
.dsq-badge{
  font-size:10.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--bronze);
  border:1px solid var(--bronze);border-radius:20px;padding:2px 8px;
  background:var(--bronze-bg);white-space:nowrap;
}
.dnf-badge{
  font-size:10.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--granite);
  border:1px solid var(--line);border-radius:20px;padding:2px 8px;white-space:nowrap;
}
.field-badge{
  display:inline-flex;align-items:center;gap:5px;font-size:10.5px;letter-spacing:.04em;
  text-transform:uppercase;border-radius:20px;padding:3px 10px;white-space:nowrap;
  font-family:'Archivo Var';font-weight:600;
}
.field-badge .dot{width:5px;height:5px;border-radius:50%;background:currentColor;display:inline-block;flex:none;}
.field-elite{color:var(--gold);background:var(--gold-bg);}
.field-strong{color:var(--frost);background:var(--frost-bg);}
.field-solid{color:var(--ink-soft);background:var(--snow-2);border:1px solid var(--line);}
.field-developing{color:var(--granite);background:transparent;border:1px solid var(--line);}
.best-win{font-family:'Archivo Var';font-size:11.5px;color:var(--granite);margin-top:4px;text-align:right;white-space:nowrap;}
.best-win b{color:var(--ink-soft);font-weight:600;}
.qof-pct{font-family:'Plex Mono','IBM Plex Mono',monospace;font-size:11px;color:var(--granite);margin-top:4px;text-align:right;white-space:nowrap;}
.event-name{font-weight:500;}
.event-link{
  color:inherit;text-decoration:none;border:none;border-bottom:1px dotted var(--line);
  background:none;padding:0;font:inherit;cursor:pointer;
}
.event-link:hover{color:var(--frost);border-bottom-color:var(--frost);}
.event-date{color:var(--granite);font-size:12px;display:block;font-family:'Plex Mono';margin-top:1px;}

/* overview mode */
.ov-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:6px;}
@media (max-width:640px){.ov-grid{grid-template-columns:1fr;}}
.roster-stats{display:flex;gap:16px;flex-wrap:wrap;margin-bottom:26px;}
.roster-stat{background:var(--snow);border:1px solid var(--line);border-radius:10px;padding:16px 26px;min-width:120px;text-align:center;}
.roster-stat .v{font-family:'Plex Mono';font-weight:700;font-size:2.3rem;line-height:1;color:var(--flag-ink);display:block;}
@media (prefers-color-scheme: dark){ .roster-stat .v{color:var(--flag);} }
:root[data-theme="dark"] .roster-stat .v{color:var(--flag);}
:root[data-theme="light"] .roster-stat .v{color:var(--flag-ink);}
.roster-stat .k{font-size:11.5px;letter-spacing:.07em;text-transform:uppercase;color:var(--granite);margin-top:4px;display:block;}
.ov-divider{grid-column:1/-1;display:flex;align-items:center;gap:12px;margin:10px 0 -2px;}
.ov-divider::before, .ov-divider::after{content:'';flex:1;height:1px;background:var(--line);}
.ov-divider span{font-family:'Oswald Var';font-size:.72rem;letter-spacing:.09em;text-transform:uppercase;color:var(--granite);white-space:nowrap;}
.ov-card{border:1px solid var(--line);border-radius:8px;padding:14px 16px;}
.ov-card h3{font-size:.85rem;color:var(--ink);margin-bottom:10px;}
.roster-card h3{font-size:1.15rem;}
.ov-row{
  display:flex;justify-content:space-between;align-items:center;padding:6px 0;font-size:13.3px;
  border:none;border-top:1px solid var(--line);width:100%;text-align:left;
  background:none;font:inherit;color:inherit;cursor:pointer;appearance:none;
}
.ov-row:first-of-type{border-top:none;}
.ov-row:hover .oname{color:var(--frost);}
.ov-row .oname{font-weight:500;}
.jfc-roster-badge{
  display:inline-flex;align-items:center;gap:3px;font-size:9.5px;letter-spacing:.04em;
  text-transform:uppercase;font-family:'Archivo Var';font-weight:600;
  color:var(--gold);background:var(--gold-bg);border-radius:20px;padding:1px 7px;
  margin-left:7px;white-space:nowrap;vertical-align:middle;
}
.ov-row .odiv{color:var(--granite);font-size:11.5px;display:block;}
.ov-empty{color:var(--granite);font-size:12.8px;padding:8px 0;}

.chip-list{display:flex;flex-wrap:wrap;gap:7px;}
.chip{
  border:1px solid var(--line);border-radius:20px;padding:5px 12px;font-size:12.5px;
  background:var(--snow);display:inline-flex;align-items:center;gap:6px;
  font-family:inherit;color:var(--ink);text-decoration:none;
}
.chip small{color:var(--granite);font-family:'Plex Mono';font-size:10.5px;}
.chip.clickable{cursor:pointer;transition:border-color .12s, color .12s;}
@media (prefers-reduced-motion: reduce){ .chip.clickable{transition:none;} }
.chip.clickable:hover{border-color:var(--frost);color:var(--frost);}
.chip.clickable:hover small{color:var(--frost);}
.chip.clickable.active{background:var(--snow-2);border-color:var(--frost);color:var(--frost);}

.add-stream-form{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:2px;}
.add-stream-input{
  padding:7px 12px;border-radius:20px;border:1px solid var(--line);
  background:var(--card);color:var(--ink);font-size:12.5px;font-family:inherit;
  min-width:170px;flex:1 1 170px;
}
.add-stream-input::placeholder{color:var(--granite);}
.add-stream-input:focus{outline:none;border-color:var(--frost);}
.add-stream-note{flex-basis:100%;font-size:11.5px;color:var(--granite);margin-top:2px;}
.add-stream-error{flex-basis:100%;font-size:12px;color:var(--bronze);margin-top:2px;}

.methodology{margin-top:22px;padding:18px 20px;font-size:12.8px;color:var(--ink-soft);line-height:1.65;}
.methodology h2{font-size:.95rem;color:var(--ink);margin-bottom:8px;}
.methodology code{background:var(--snow-2);padding:1px 5px;border-radius:4px;font-family:'Plex Mono';font-size:11.5px;color:var(--ink);}
.methodology a{color:var(--frost);}

.footnote{margin-top:18px;font-size:12px;color:var(--granite);text-align:center;}

.resources-footer{margin-top:10px;display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:6px 16px;font-size:12px;text-align:center;}
.resources-label{color:var(--granite);text-transform:uppercase;letter-spacing:.07em;font-size:10.5px;}
.resources-footer a{color:var(--frost);text-decoration:none;}
.resources-footer a:hover{text-decoration:underline;}

/* ---------- Mobile card view ----------
   Below 640px a table's columns don't fit an iPhone screen without
   horizontal scrolling, so every table marked .mobile-ready gets a
   stacked-card alternative (.card-list) instead — hidden on wider screens,
   where the real <table> keeps working exactly as before. There's no
   column header to tap on a phone, so .sort-bar (a dropdown + direction
   toggle) replaces that, driving the identical sort `state` object and
   rerender() a header click would otherwise use. */
.card-list, .sort-bar{display:none;}
@media (max-width:640px){
  .table-scroll.mobile-ready{display:none;}
  .card-list{display:flex;flex-direction:column;gap:10px;}
  .sort-bar{display:flex;align-items:center;gap:8px;margin-bottom:12px;}
}
.sort-bar .sort-label{font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--granite);font-weight:700;flex:none;}
.sort-select{
  flex:1;min-width:0;font-size:12.5px;font-weight:600;padding:8px 30px 8px 12px;border-radius:20px;
  border:1px solid var(--line);background:var(--card) url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="10" height="6"><path d="M0 0l5 6 5-6z" fill="%235B6470"/></svg>') no-repeat right 12px center;
  color:var(--ink);-webkit-appearance:none;appearance:none;
}
@media (prefers-color-scheme: dark){
  .sort-select{background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="10" height="6"><path d="M0 0l5 6 5-6z" fill="%238A96A2"/></svg>');}
}
:root[data-theme="dark"] .sort-select{background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="10" height="6"><path d="M0 0l5 6 5-6z" fill="%238A96A2"/></svg>');}
.sort-dir{
  flex:none;width:36px;height:36px;border-radius:50%;border:1px solid var(--line);background:var(--card);
  color:var(--frost);font-size:14px;cursor:pointer;display:flex;align-items:center;justify-content:center;
}
.sort-dir:hover{border-color:var(--frost);}
.sort-dir:active{background:var(--snow-2);}
.sort-dir:focus-visible{outline:2.5px solid var(--focus);outline-offset:1px;}

.data-card{
  background:var(--card);border:1px solid var(--line);border-radius:12px;padding:13px 14px;box-shadow:var(--shadow);
  cursor:pointer;
}
.data-card:hover{border-color:var(--frost);}
.data-card:focus-visible{outline:2.5px solid var(--focus);outline-offset:-2px;}
.data-card.active{background:var(--snow-2);}
.data-card-top{display:flex;align-items:center;gap:10px;}
.data-card-id{flex:1;min-width:0;}
.data-card-name{font-weight:700;font-size:14.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.data-card-sub{font-size:11px;color:var(--granite);margin-top:1px;}
.data-card-trailing{text-align:right;flex:none;}
.data-card-trailing .v{font-weight:800;font-size:16px;font-family:'Plex Mono';color:var(--ink);display:block;}
.data-card-trailing .k{font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--granite);}
.data-card-stats{display:grid;grid-template-columns:1fr 1fr;gap:8px 10px;margin-top:12px;padding-top:12px;border-top:1px solid var(--line);}
.data-card-stat{min-width:0;}
.data-card-stat.span-2{grid-column:1/-1;}
.data-card-stat .k{font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--granite);display:block;margin-bottom:3px;}
.data-card-stat .v{font-size:12.5px;font-weight:600;}
.data-card-videos{margin-top:11px;padding-top:11px;border-top:1px solid var(--line);}
.data-card-empty{color:var(--granite);padding:20px 4px;text-align:center;font-size:13px;}

/* JFC qualification tracker */
.jfc-pill{
  display:inline-flex;align-items:center;font-family:'Archivo Var';font-weight:600;font-size:11px;
  letter-spacing:.02em;padding:3px 9px;border-radius:20px;white-space:nowrap;
}
.jfc-in{color:var(--flag-ink);background:var(--frost-bg);}
@media (prefers-color-scheme: dark){ .jfc-in{color:var(--flag);} }
:root[data-theme="dark"] .jfc-in{color:var(--flag);}
.jfc-out{color:var(--bronze);background:var(--bronze-bg);}
.jfc-division{margin-top:30px;}
.jfc-division:first-of-type{margin-top:0;}
.jfc-division-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:8px;}
.jfc-division-head h3{font-size:1.05rem;}
.jfc-division-head .cap{color:var(--granite);font-size:12px;}
.jfc-unranked{margin-top:8px;font-size:12px;color:var(--granite);}
.jfc-unranked b{color:var(--ink-soft);}
.jfc-summary{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:24px;}
.jfc-summary-tile{
  background:var(--snow-2);border:1px solid var(--line);border-radius:8px;padding:10px 16px;
  text-align:center;min-width:96px;
}
.jfc-summary-tile .v{font-family:'Plex Mono';font-weight:600;font-size:1.3rem;display:block;color:var(--ink);}
.jfc-summary-tile .k{font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--granite);display:block;margin-top:2px;}
