/* ==========================================================================
   Foulis Cup theme for The Foulis Cup scoreboard
   Source: Figma "GECC Playground", page "Foulis Cup"
   Load this AFTER the inline <style> in index.html. It only overrides; it
   doesn't rename any class the app's JavaScript uses.
   Design rules (see HANDOFF-FOR-CLAUDE.md): team colours are backgrounds only,
   every piece of type is ink (or paper on solid ink), square corners, no shadows.
   ========================================================================== */

/* ---------- Fonts: Futura Std (Adobe), licensed for web use ------------- */
@font-face{font-family:"Futura Std";src:url("/fonts/FuturaStd-Book.woff2") format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"Futura Std";src:url("/fonts/FuturaStd-Medium.woff2") format("woff2");font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:"Futura Std";src:url("/fonts/FuturaStd-Bold.woff2") format("woff2");font-weight:600 900;font-style:normal;font-display:swap}
@font-face{font-family:"Futura Std";src:url("/fonts/FuturaStd-BoldOblique.woff2") format("woff2");font-weight:400 900;font-style:italic;font-display:swap}
/* One condensed cut, mapped to every weight so nothing gets faux-bolded */
@font-face{font-family:"Futura Std Condensed";src:url("/fonts/FuturaStd-CondensedBold.woff2") format("woff2");font-weight:100 900;font-style:normal;font-display:swap}

/* ---------- Tokens ------------------------------------------------------- */
:root,:root[data-theme]{
  --paper:#FFFCF3;   /* TV title card background */
  --ink:#403E35;     /* every line of type and every rule in the program */
  --ink-2:#5A574C;
  --muted:#7A766A;
  --cream:#FBF2D6;   /* Teams / players pages */
  --gold:#FCC600;    /* cover title yellow */
  --mint:#B8E5C6;    /* Team Hof background */
  --mint-2:#9BD6AF;  /* Team Hof, deeper: status cell / arrow */
  --blue:#B8D6EF;    /* Team Herbig background */
  --blue-2:#9BC3E5;  /* Team Herbig, deeper: status cell / arrow */
  --pen:#36429A;     /* scorer's pen: focus ring, drafted-player strike in the draft pool */

  /* app variables, remapped */
  --bg:var(--paper); --card:var(--paper); --line:rgba(64,62,53,.28); --sand:var(--cream);
  /* team colours are backgrounds only; all type on them stays ink */
  --hof:var(--mint); --hof2:var(--mint-2); --herbig:var(--blue); --herbig2:var(--blue-2);
  --brass:var(--gold); --tie:var(--ink); --tvbg:var(--ink); --band:var(--ink);

  --display:"Futura Std Condensed","Futura Condensed","Futura","Arial Narrow",sans-serif;
  --body:"Futura Std","Futura","Futura PT","Century Gothic",sans-serif;
  --rule:1px solid var(--ink);
  --frame:2px solid var(--ink);
  color-scheme:light;
}

/* ---------- Base ---------------------------------------------------------- */
body{background:var(--paper);color:var(--ink);font-family:var(--body);font-weight:500}
/* Printed paper, two layers:
   1. fine grain, multiplied, so the paper itself has tooth
   2. the program's own Grunge-Textures layer (assets/foulis-grain.jpg), screened
      on top exactly as in Figma, so dust and fibres knock out of the ink */
body::before{content:"";position:fixed;inset:0;pointer-events:none;z-index:101;mix-blend-mode:screen;
  background:url("/assets/foulis-grain.jpg") 0 0/900px auto repeat}
body::after{content:"";position:fixed;inset:0;pointer-events:none;z-index:100;opacity:.6;mix-blend-mode:multiply;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 .25 0 0 0 0 .24 0 0 0 0 .2 0 0 0 -1.1 .62'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
:focus-visible{outline:2px solid var(--pen);outline-offset:2px}

/* Bebas Neue was caps-only; Futura isn't, so set caps explicitly */
.tname,.tmeta,.clinch,.race-top,.shead h2,.mid b,.mid small,.pre h3,.clock small,.clock strong,.dn,.dsend,.pool h4,
.rbtn,.rhead h1,.rhead small,.av,.pn b,.tag,.phead h1 b,.app h4,.app .res,.drawer h3,.status,
.tvh .t .nm,.tvh .t .mt,.tvr>div,.tvf,.tvs,.tvclock,.tab small,.tab span,.side .nm,.slot .nm,.ghost,.primary,.small,
.seg button,.stat small,.mh h3,.picker h3,.back{text-transform:uppercase}

/* ---------- Hero: the program's masthead --------------------------------- */
.hero{margin-top:14px;border:var(--frame);border-radius:0;background:var(--paper);color:var(--ink);overflow:visible}
/* masthead, set like the cover: small kicker over the big title */
.htitle{grid-column:1/-1;text-align:center;padding:16px 12px 14px;border-bottom:var(--frame)}
.htitle small{display:block;font:700 clamp(11px,1.6vw,14px)/1 var(--body);letter-spacing:.02em;text-transform:uppercase}
.htitle h1{margin:6px 0 0;font:700 clamp(34px,8vw,68px)/.92 var(--body);letter-spacing:-.005em;text-transform:uppercase}
.hteam{padding:18px 10px 20px}
.hteam.hof{background:var(--hof)} .hteam.herbig{background:var(--herbig)}
.hteam{color:var(--ink)}
.gapcell{background:var(--paper);border-left:var(--rule);border-right:var(--rule);display:flex;align-items:center;justify-content:center}
.hero .gap{width:clamp(84px,14vw,132px)}
.hero .crestbox{position:static;transform:none;width:clamp(56px,9vw,84px);color:var(--ink)}
.crest{display:block;width:100%;height:auto}
.tname{font-family:var(--display);font-weight:700;font-size:clamp(18px,3vw,28px);letter-spacing:.01em;margin-top:8px}
.tscore{font-family:var(--body);font-weight:700;font-size:clamp(52px,10vw,92px);line-height:.95;margin-top:4px}
.tmeta{font-family:var(--display);font-size:12px;letter-spacing:.04em;color:var(--muted);margin-top:8px}
.tmeta .sep::before{content:"•"}
.clinch{font-family:var(--display);background:var(--gold);color:var(--ink);border-radius:0;padding:4px 10px 3px}


/* team panels link to their rosters */
/* the "12½ to win · Proj" line is dropped from the header: the race bar right below shows the
   target and each team's projection (hatched), and the panels need the room for the roster link */
.hero .tmeta{display:none}
a.hteam{color:var(--ink);text-decoration:none;cursor:pointer;transition:background-color .15s}
.hero .tscore,.hero .clinch{margin-bottom:12px}
/* button sits at the bottom of the panel, so both teams' buttons line up even when one panel has the clinch badge */
.tlink{margin-top:auto;padding:5px 10px 4px;border:1.5px solid var(--ink);font:700 12px/1 var(--display);letter-spacing:.06em;text-transform:uppercase;background:var(--paper)}
a.hteam:hover .tlink,a.hteam:focus-visible .tlink{background:var(--ink);color:var(--paper)}
a.hteam.hof:hover{background:var(--hof2)} a.hteam.herbig:hover{background:var(--herbig2)}
a.hteam:active .tlink{transform:translateY(1px)}

/* ---------- Race bar ------------------------------------------------------ */
.card{border-radius:0;border:var(--rule);background:var(--paper)}
.race{padding:10px 14px 14px}
.race-top{font-family:var(--display);font-size:14px;letter-spacing:.04em}
/* each team's target sits over its own end of the bar (Hof fills from the left, Herbig from the right),
   with points left to play in the middle */
.race-top{display:grid;grid-template-columns:1fr auto 1fr;align-items:baseline;gap:10px}
.race-top span:nth-child(1){text-align:left;color:var(--ink)}
.race-top span:nth-child(2){text-align:center;color:var(--muted)}
.race-top span:nth-child(3){text-align:right;color:var(--ink)}
.bar{height:12px;border-radius:0;background:var(--paper);border:var(--rule)}
.bar .hof{box-shadow:1px 0 0 var(--ink)} .bar .herbig{box-shadow:-1px 0 0 var(--ink)}
.bar .hofp{background:repeating-linear-gradient(135deg,var(--hof2) 0 2px,transparent 2px 5px)}
.bar .herbigp{background:repeating-linear-gradient(135deg,var(--herbig2) 0 2px,transparent 2px 5px)}
.bar .midtick{width:3px;background:var(--gold);top:0;bottom:0;box-shadow:0 0 0 1px var(--ink)}

/* ---------- Notices ------------------------------------------------------- */
.note,.waiting{border-radius:0;background:var(--cream);border:var(--rule)}

/* ---------- Session tabs ------------------------------------------------- */
.tabs{gap:6px}
.tab{border:var(--rule);border-radius:0;background:var(--paper);padding:7px 14px 6px}
.tab small{font-family:var(--display);font-weight:700;font-size:11px;letter-spacing:.04em;color:var(--ink-2)}
.tab span{font-weight:700;font-size:15px;letter-spacing:.01em}
/* active tab: solid ink, paper type, like the reversed panels in the programme */
.tab.on{background:var(--ink);border-color:var(--ink);color:var(--paper)}
.tab.on small{color:rgba(255,252,243,.7)}
.tab .dot{background:var(--gold);box-shadow:0 0 0 1px var(--ink)}

/* ---------- Session head: "ORDER OF PLAY" style -------------------------- */
.shead{margin:22px 0 0;padding:0 0 10px;border-bottom:var(--frame)}
.shead h2{font-family:var(--body);font-weight:700;font-size:clamp(24px,4.4vw,34px);letter-spacing:.01em}
.shead h2 span{font-family:var(--display);font-size:14px;letter-spacing:.04em;color:var(--ink-2)}
.shead h2 span::before{content:"•";margin-right:8px}
.shead + *{margin-top:12px}

/* ---------- Buttons ------------------------------------------------------- */
.ghost{border:1.5px solid var(--ink);border-radius:0;padding:6px 14px 5px;font-family:var(--display);font-weight:700;font-size:13px;letter-spacing:.05em}
.ghost:hover{background:var(--ink);color:var(--paper)}
.primary{border-radius:0;background:var(--ink);color:var(--paper);font-family:var(--display);font-weight:700;letter-spacing:.05em;padding:12px 18px 11px}
.primary.hof,.primary.herbig{color:var(--ink);box-shadow:inset 0 0 0 1.5px var(--ink)}
.primary.hof{background:var(--hof)} .primary.herbig{background:var(--herbig)}
.small{border:var(--rule);border-radius:0;background:var(--paper);font-family:var(--display);font-weight:700;letter-spacing:.04em}
.small.danger{color:#A33A2A;border-color:#A33A2A}

/* ---------- Match rows: the program's pairing sheet ---------------------- */
.grid{gap:8px}
.mrow{grid-template-columns:1fr 96px 1fr;min-height:62px;background:var(--paper);border:var(--rule);border-radius:0}
.side{padding:8px 14px}
.side .nm{font-weight:700;font-size:15px;letter-spacing:.01em;line-height:1.15}
.side.hof .nm,.side.herbig .nm{color:var(--ink)}
.side .hc{font-family:var(--display);font-weight:700;font-size:11.5px;letter-spacing:.03em;color:var(--ink-2);text-transform:uppercase}
.st-undrafted .side .nm{color:var(--muted);font-weight:500}
.mid{background:transparent;border-left:var(--rule);border-right:var(--rule)}
.mid b{font-family:var(--body);font-weight:700;font-size:18px;letter-spacing:0}
.mid small{font-family:var(--display);font-weight:700;font-size:11px;letter-spacing:.04em;opacity:1}
.st-upcoming .mid b,.st-undrafted .mid b{font-family:var(--display);font-size:15px;letter-spacing:.04em}
/* untouched match: the little "VS" disc from the program */
.st-upcoming .mid::before,.st-undrafted .mid::before{content:"vs";display:grid;place-items:center;width:24px;height:24px;margin-bottom:4px;border-radius:50%;
  background:var(--ink);color:var(--paper);font:700 11px/1 var(--body);text-transform:uppercase}
.lead-hof .side.hof,.lead-herbig .side.herbig,.lead-herbig .side.herbig .nm,.lead-hof .mid,.lead-herbig .mid{color:var(--ink)}
.lead-hof .side.hof .hc,.lead-herbig .side.herbig .hc{color:var(--ink-2)}
.lead-hof .mid::before{background:var(--hof)} .lead-herbig .mid::before{background:var(--herbig)}
/* tied / halved: solid ink, paper type */
.tie .mid{background:var(--tie);color:var(--paper)}
.mid b{max-width:100%;overflow:hidden;text-overflow:ellipsis}
.tie .mid b{font-size:15px}

/* ---------- Pre-draft / empty -------------------------------------------- */
.pre h3{font-family:var(--body);font-weight:700;font-size:24px}

/* ---------- Draft --------------------------------------------------------- */
.clock{border-radius:0;color:var(--ink);border:var(--rule)}
.clock.done{color:var(--paper)}
.clock small{font-family:var(--display);color:var(--ink-2)} .clock.done small{color:var(--gold)}
.clock strong{font-family:var(--body);font-weight:700;font-size:clamp(26px,5vw,38px)}
.clock span{font-weight:700}
.dn{font-family:var(--body);font-weight:700;font-size:18px;color:var(--ink)}
.slot{border:1.5px dashed rgba(64,62,53,.45);border-radius:0}
.slot.full{border:var(--rule)}
.slot.full.hof{border-color:var(--ink);background:var(--hof)} .slot.full.herbig{border-color:var(--ink);background:var(--herbig)}
.slot.herbig .nm{color:var(--ink)}
.slot .nm{font-weight:700;letter-spacing:.01em}
.slot .hc{font-family:var(--display);font-weight:700;text-transform:uppercase;letter-spacing:.03em}
.slot.now{border:2px solid var(--ink);background:color-mix(in srgb,var(--gold) 35%,var(--paper))}
@keyframes pulse{50%{box-shadow:0 0 0 4px color-mix(in srgb,var(--gold) 45%,transparent)}}
.dsend{border-radius:0;font-family:var(--display);font-weight:700;font-size:12px;color:var(--ink);border:var(--rule)}
.dsend.none{background:var(--cream);color:var(--muted)}
.picker,.picker.hof,.picker.herbig{border:2px solid var(--ink);border-radius:0}
.picker h3{font-weight:700;font-size:17px}
.chip{border:var(--rule);border-radius:0;background:var(--paper)}
.chip span{font-weight:500}
.chip small{font-family:var(--display);font-weight:700;letter-spacing:.03em;text-transform:uppercase}
.picker.hof .chip.on,.picker.herbig .chip.on{color:var(--ink);border-color:var(--ink)} .chip.on small{color:var(--ink-2)}
.pool{border-radius:0}
.pool h4,.pool.hof h4,.pool.herbig h4{font-family:var(--display);font-weight:700;font-size:17px;padding-bottom:6px;border-bottom:var(--rule);color:var(--ink)}
.pool li{border-bottom-color:var(--line)}
.pool li.gone{text-decoration-color:var(--pen);text-decoration-thickness:1.5px}

/* ---------- Footer -------------------------------------------------------- */
.foot{gap:12px;margin-top:40px;padding-top:24px;border-top:var(--frame)}
.rbtn{border-radius:0;padding:10px 18px 9px;font-family:var(--display);font-weight:700;font-size:14px;letter-spacing:.05em;color:var(--ink);border:var(--rule)}
.me{color:var(--muted)}

/* ---------- Roster & player ---------------------------------------------- */
.back{font-family:var(--display);font-weight:700;font-size:15px;letter-spacing:.04em}
.rhead{border-radius:0;color:var(--ink);border:var(--frame);grid-template-columns:1fr auto}
.rhead h1{font-family:var(--body);font-weight:700;font-size:28px}
.rhead small{font-family:var(--display);color:var(--ink-2)}
.rhead strong{font-family:var(--body);font-weight:700;font-size:48px}
.plist{gap:0;border-top:var(--frame);margin-top:16px}
.plist a{border:0;border-bottom:var(--rule);border-radius:0;background:transparent;padding:12px 6px}
.plist a:hover{background:var(--cream)}
.av{border:2px solid var(--paper);box-shadow:0 0 0 1.5px var(--ink);font-family:var(--display);font-weight:700;font-size:17px;color:var(--ink)}
.pn span{font-weight:500;font-size:17px}
.pn b,.pn.hof b,.pn.herbig b{font-family:var(--body);font-weight:700;font-size:19px;letter-spacing:.01em;color:var(--ink)}
.pn small{font-family:var(--display);font-weight:700;font-size:12px;letter-spacing:.03em;text-transform:uppercase}
.tag{font-family:var(--display);font-weight:700;background:var(--gold);color:var(--ink);border-radius:0;padding:3px 9px 2px}
.phead h1{font-weight:500}
.phead h1 b{font-family:var(--body);font-weight:700;font-size:32px}
.stat small{font-family:var(--display);font-weight:700;letter-spacing:.04em;color:var(--ink-2)}
.stat strong{font-family:var(--body);font-weight:700;font-size:28px}
.app h4{font-family:var(--body);font-weight:700;font-size:16px}
.app .res{font-family:var(--display);font-weight:700;font-size:17px}
.res.w{color:var(--ink)} .res.l{color:var(--muted)}

/* ---------- Modals & admin drawer ---------------------------------------- */
.scrim{background:rgba(64,62,53,.6)}
.modal{border-radius:0;border:var(--frame);background:var(--paper)}
.mh h3{font-weight:700;font-size:18px}
.seg button{border:var(--rule);border-radius:0;background:var(--paper);font-family:var(--display);font-weight:700;letter-spacing:.04em}
.seg button.on{background:var(--ink);border-color:var(--ink);color:var(--paper)}
.shareimg{border-radius:0;border:var(--rule);box-shadow:none}
.drawer{background:var(--paper);border-left:var(--frame);box-shadow:none}
.drawer h3{font-family:var(--display);font-weight:700;font-size:18px;padding-bottom:6px;border-bottom:var(--rule)}
.drawer input[type=text],.drawer input[type=number],.drawer select,#pw{border:var(--rule)!important;border-radius:0!important;background:#fff!important}
.status{font-family:var(--display);font-weight:700;border-radius:0;background:var(--cream)}
.status.open{background:var(--gold);color:var(--ink)}
.am{border:var(--rule);border-radius:0;background:var(--cream)}
.hits button{background:var(--paper)}
.admbtn,.toast{border-radius:0;background:var(--ink);color:var(--paper);font-family:var(--display);font-weight:700;letter-spacing:.05em;text-transform:uppercase}

/* ---------- TV view: modelled on the Foulis_TV frame --------------------- */
body.tvmode{background:var(--ink)}
.tv{background:var(--ink)}
.tvcard{background:var(--paper);color:var(--ink);border-radius:0;box-shadow:none;outline:2px solid var(--paper);outline-offset:6px}
.tvh .t{color:var(--ink)}
.tvh .t.hof{background:var(--hof)} .tvh .t.herbig{background:var(--herbig)}
.tvh .t .nm{font-family:var(--body);font-weight:700;font-size:clamp(22px,3vw,52px)}
.tvh .t .mt{font-family:var(--display);color:var(--ink-2);letter-spacing:.05em}
.tvh .t .sc{font-family:var(--body);font-weight:700}
/* The live-scoring page's container is also called .sc (.sc{max-width:520px;margin:0 auto}).
   Pin the TV score's margins so it stays anchored against the crest: right edge for Hof,
   left edge for Herbig (the panel is row-reversed). */
.tvh .t .sc{margin:0 0 0 auto;max-width:none}
.tvh .t.herbig .sc{margin:0 auto 0 0}
.tvh .cr{background:var(--paper);border-left:var(--frame);border-right:var(--frame);color:var(--ink);padding:.8vh 1.4vw}
.tvh{grid-template-rows:minmax(0,1fr)}
/* The header's bottom rule is drawn on the same three cells that carry the crest dividers
   (not on .tvh itself), so all three strokes snap to the screen's pixels together and
   always render at the same weight, meeting cleanly at the crest's corners. */
.tvh .t,.tvh .cr{border-bottom:var(--frame)}
.tvh .cr{min-height:0;overflow:hidden}
/* header is 18% of the card (card height = min(92vh,56vw)) */
.tvh .cr .crest{height:max(64px,calc(min(92vh,56vw) * .18 - 2vh));width:auto}
.tvr{border-bottom:var(--rule);background:var(--paper)}
.tvr>div{font-family:var(--display);font-weight:700;letter-spacing:.02em}
.tvh .t .nm{font-family:var(--display)!important;white-space:nowrap}
.tvh .t .mt{white-space:nowrap}
.tvr .n.hof,.tvr .n.herbig,.tvr .e.hof,.tvr .e.herbig{color:var(--ink)}
/* centre column: 2px rules, continuing the crest dividers from the header down to the footer */
.tvr .c{background:var(--paper);color:var(--ink);border-left:var(--frame);border-right:var(--frame);font-family:var(--display)}
.tvr .n small{font-family:var(--display);font-weight:700;color:var(--ink-2);text-transform:uppercase}
.tvr.lead-hof .e.hof,.tvr.lead-hof .n.hof{background:var(--hof);color:var(--ink)}
.tvr.lead-herbig .e.herbig,.tvr.lead-herbig .n.herbig{background:var(--herbig);color:var(--ink)}
.tvr.lead-hof .n.hof small,.tvr.lead-herbig .n.herbig small{color:var(--ink-2)}
/* finished match: result in the centre on the winner's colour, as on the scoreboard */
.tvr.fin.lead-hof .c{background:var(--hof);color:var(--ink)} .tvr.fin.lead-herbig .c{background:var(--herbig);color:var(--ink)}
.tvr.tie .c{background:var(--tie);color:var(--paper)}
.tvr .slotnow{background:color-mix(in srgb,var(--gold) 35%,var(--paper))!important}
.tvr .n .ph{color:var(--muted)}
.tvf{background:var(--ink);color:var(--paper);font-family:var(--display);font-weight:700}
/* centre label (course / event name) is hidden; kept in the DOM so left and right stay put */
.tvf .c{visibility:hidden}
.tvdots i{background:rgba(255,252,243,.3)} .tvdots i.on{background:var(--gold)}
.tvs{background:var(--paper);border:var(--rule);border-radius:0;font-family:var(--body);font-weight:700}
.tvs .h,.tvs .r{color:var(--ink)}
/* standings rows mirror the header: Hof score | session name (centred) | Herbig score.
   Reordered with grid placement, so the app's markup doesn't change. */
.tvs{grid-template-columns:14% 1fr 14%}
.tvs>span:first-child{grid-column:2;grid-row:1;text-align:center}
.tvs .h{grid-column:1;grid-row:1} .tvs .r{grid-column:3;grid-row:1}
.tvs small{font-family:var(--display);color:var(--muted)}
.tvbar{border-radius:0;background:var(--paper);border:var(--rule)}
/* 2px bottom rule: the banner sits a level above the rows, like the header */
.tvclock{font-family:var(--display);font-weight:700;color:var(--ink);border-bottom:var(--frame)}
.tvclock.hof{background:var(--hof)} .tvclock.herbig{background:var(--herbig)} .tvclock.done{background:var(--ink);color:var(--paper)}
.tvclock span{color:var(--ink-2)} .tvclock.done span{color:var(--gold)}

/* ---------- "VS" discs: optically centred ----------------------------------
   Futura's capitals sit high in their line box (extra space above the caps), so centring the
   box leaves "VS" ~0.75px above centre. Measured: .14em of top padding moves the letters onto
   the disc's centre (the text is an anonymous grid item, so text-box trimming can't reach it). */
.st-upcoming .mid::before,.st-undrafted .mid::before,.scvs .v::before{padding-top:.14em}

/* ---------- TV refinements --------------------------------------------- */
/* 1. Centre column lines up top to bottom: the header uses the rows' 8% middle column
      (rows are 9% | 1fr | 8% | 1fr | 9%, so 1fr | 8% | 1fr puts both at dead centre). */
.tvh{grid-template-columns:1fr 8% 1fr}
.tvh .cr{padding:1vh .5vw;justify-content:center}
.tvh .cr .crest{height:auto;width:100%;max-height:100%;object-fit:contain}
/* 2. Rows share the board's full height, so there's no empty band above the footer. */
.tvr{max-height:none}
/* 3. Small print sized for across-the-room reading. */
.tvh .t .mt{font-size:clamp(14px,1.35vw,24px);margin-top:.6vw}
.tvr .n small{font-size:clamp(12px,1.05vw,19px)}
/* 4. Standings: the team scores carry the row. */
.tvs .h,.tvs .r{font-size:1.6em;line-height:1}
/* 5. Draft: the slot being picked is solid gold, as loud as the banner above it. */
.tvr .slotnow{background:var(--gold)!important}
.tvr .slotnow .ph{color:var(--ink)}
.tvr:has(.n.hof.slotnow) .e.hof,.tvr:has(.n.herbig.slotnow) .e.herbig{background:var(--gold)}  /* highlight runs to the frame */
/* 6. Centre cell can stack a result over a label ("3&2" / "FINAL"), like the scoreboard's middle cell. */
.tvr .c{flex-direction:column;justify-content:center;gap:.35vh}
.tvr .c b{font-family:var(--body);font-weight:700;font-size:clamp(16px,1.9vw,34px);line-height:1}
.tvr .c small{font-family:var(--display);font-weight:700;font-size:clamp(10px,.85vw,15px);letter-spacing:.06em;text-transform:uppercase;line-height:1}
.tvr.tie.fin .c b{font-size:clamp(13px,1.45vw,26px)}

/* ---------- TV: full-screen sizing, tuned for a 1920x1080 TV -------------------
   One unit drives every TV size: --u is 1% of the largest 16:9 box that fits the
   screen, so it's exactly 19.2px on a 1920x1080 TV and everything stays in proportion
   on other screens. The card fills the screen inside a slim --m margin; the slide dots
   sit in the footer's empty centre instead of under the card. Specificity is ".tv ..."
   so these win over the app's inline rules and the earlier TV rules above. */
.tv{--u:min(1vw,1.7778vh);--m:max(12px,1.25vw);padding:var(--m)}
.tv .tvcard{max-width:none;width:100%;height:100%;flex:none;outline-offset:calc(var(--m) * .25)}
/* header */
.tv .tvh{height:18%}
.tv .tvh .t{padding:0 calc(var(--u) * 2.4);gap:calc(var(--u) * 1.6)}
.tv .tvh .t .nm{font-size:calc(var(--u) * 3);line-height:1}
.tv .tvh .t .mt{font-size:calc(var(--u) * 1.25);margin-top:calc(var(--u) * .5)}
.tv .tvh .t .sc{font-size:calc(var(--u) * 6.4);line-height:1}
.tv .tvh .cr{padding:calc(var(--u) * .6) calc(var(--u) * .5)}
/* board rows */
.tv .tvr>div{font-size:calc(var(--u) * 2.3);padding:0 calc(var(--u) * 1.2)}
.tv .tvr .n small{font-size:calc(var(--u) * 1);margin-left:calc(var(--u) * .8)}
.tv .tvr .n.hof small{margin-left:0;margin-right:calc(var(--u) * .8)}
.tv .tvr .e{font-size:calc(var(--u) * 1.7)}
.tv .tvr .c{font-size:calc(var(--u) * 1.7);padding:0}
.tv .tvr .c b{font-size:calc(var(--u) * 2)}
.tv .tvr .c small{font-size:calc(var(--u) * .8)}
.tv .tvr.tie.fin .c b{font-size:calc(var(--u) * 1.55)}
/* draft banner */
.tv .tvclock{padding:calc(var(--u) * 1) calc(var(--u) * 2.4);gap:calc(var(--u) * 1.6)}
.tv .tvclock b{font-size:calc(var(--u) * 2.7)}
.tv .tvclock span{font-size:calc(var(--u) * 1.7)}
/* standings */
.tv .tvstand{padding:calc(var(--u) * 1.4) calc(var(--u) * 5) calc(var(--u) * 1.6);gap:calc(var(--u) * .9)}
.tv .tvs{font-size:calc(var(--u) * 3);padding:0 calc(var(--u) * 2.5)}
.tv .tvs small{margin-left:calc(var(--u) * .8)}
.tv .tvbar{height:calc(var(--u) * 1.2);margin-top:calc(var(--u) * .4)}
/* standings race bar: the scoreboard's own race bar (same labels, projections, halfway tick), at TV scale */
.tv .tvstand .race{margin:0;padding:calc(var(--u) * 1) calc(var(--u) * 1.6) calc(var(--u) * 1.3);border:var(--rule);background:var(--paper)}
.tv .tvstand .race-top{font-size:calc(var(--u) * 1.3);gap:calc(var(--u) * 1)}
.tv .tvstand .bar{height:calc(var(--u) * 1.3);margin-top:calc(var(--u) * .7)}
.tv .tvstand .bar .midtick{width:calc(var(--u) * .2)}
/* footer, with the slide dots in its (hidden) centre */
.tv .tvf{height:calc(var(--u) * 3);padding:0 calc(var(--u) * 2.4);font-size:calc(var(--u) * 1.15);flex:none}
.tv .tvdots{position:absolute;left:50%;transform:translateX(-50%);margin:0;z-index:2;
  bottom:calc(var(--m) + var(--u) * 1.5 - 4.5px)}

/* ---------- Live scoring (#/score) and the scoreboard hole strip --------- */
/* Added after the handoff; same rules: team colours as backgrounds, ink type, square corners. */
/* The strip gets its own container under the match: a 1px ink divider along its top
   (the bottom of the match), and equal padding all round so the chips sit centred
   horizontally and vertically inside it. */
.hstrip{background:transparent;gap:2px;padding:8px 10px;border-top:var(--rule);align-items:center;align-content:center}
/* unplayed hole: a faint empty outline */
.hstrip i{height:6px;border-radius:0;background:transparent;box-shadow:inset 0 0 0 1px rgba(64,62,53,.22)}
.hstrip i.hof,.hstrip i.herbig{box-shadow:inset 0 0 0 1px var(--ink)}
/* halved hole: a scorecard dash, a thin ink line through a paper chip. Quieter than a won hole. */
.hstrip i.halved{background:linear-gradient(var(--ink),var(--ink)) center/100% 2px no-repeat,var(--paper);box-shadow:inset 0 0 0 1px rgba(64,62,53,.5)}
.sclink{font-family:var(--display);font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-2)}
.sctop span{font-family:var(--display);font-weight:700;font-size:15px;letter-spacing:.04em;color:var(--ink-2);text-transform:uppercase}
.scentry,.sccard{border:var(--frame)}
.scentry h2,.sccard h2{font-family:var(--body);font-weight:700;font-size:24px;letter-spacing:.01em;text-transform:uppercase}
.scentry p,.sccard p{color:var(--ink-2)}
.scentry input{border:var(--rule);border-radius:0;background:#fff;font-family:var(--display);font-weight:700;font-size:34px;color:var(--ink)}
.err{color:#A33A2A}
.scvs{border:var(--frame);border-radius:0;color:var(--ink)}
.scvs .hof{background:var(--hof)} .scvs .herbig{background:var(--herbig)}
.scvs small{font-family:var(--display);font-weight:700;color:var(--ink-2);text-transform:uppercase}
.scvs b{font-weight:700;text-transform:uppercase}
.scvs .v{background:var(--paper);border-left:var(--rule);border-right:var(--rule);padding:0 10px}
.scvs .v::before{content:"vs";display:grid;place-items:center;width:26px;height:26px;border-radius:50%;background:var(--ink);color:var(--paper);font:700 11px/1 var(--body);text-transform:uppercase}
.scvs .v{font-size:0}
.scstat{border:var(--rule);border-radius:0;background:var(--cream);color:var(--ink)}
.scstat.hof{background:var(--hof);color:var(--ink)} .scstat.herbig{background:var(--herbig);color:var(--ink)}
.scstat.tie{background:var(--ink);color:var(--paper)}
.scstat b{font-family:var(--body);font-weight:700;font-size:30px;text-transform:uppercase}
.scstat span{font-family:var(--display);font-weight:700;letter-spacing:.04em;text-transform:uppercase;opacity:1}
.scpick button{border:var(--rule);border-radius:0;color:var(--ink)}
.scpick b{font-family:var(--body);font-weight:700;font-size:22px;text-transform:uppercase;margin-bottom:4px}
.scbtns button{border:var(--rule);border-radius:0;font-family:var(--body);font-weight:700;font-size:26px;letter-spacing:.02em;text-transform:uppercase;color:var(--ink)}
.scbtns button.hof,.scbtns button.herbig{color:var(--ink)}
.scbtns button:not(.hof):not(.herbig){background:var(--ink);color:var(--paper)}
.scbtns button.on{outline:3px solid var(--gold);outline-offset:3px;box-shadow:0 0 0 1px var(--ink)}
.scholes button{border:var(--rule);border-radius:0;background:var(--paper);font-family:var(--display);font-weight:700;color:var(--ink)}
.scholes button.hof,.scholes button.herbig{border-color:var(--ink);color:var(--ink)}
/* halved hole: same scorecard dash as the scoreboard strip, set under the hole number */
.scholes button.halved{background:linear-gradient(var(--ink),var(--ink)) center 86%/34% 2px no-repeat,var(--paper);border-color:rgba(64,62,53,.5);color:var(--ink)}
.scholes button.next{border:2px solid var(--ink);background:color-mix(in srgb,var(--gold) 35%,var(--paper))}
.scholes button.sel{outline:3px solid var(--gold);outline-offset:2px}
.scholes button[disabled]{opacity:.45;border-style:dashed}
/* the next hole to score is disabled too, but it's the current hole: keep its gold at full strength */
.scholes button.next[disabled]{opacity:1}
.sckey{font-family:var(--display);font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-2)}
.sckey i{border-radius:0;box-shadow:inset 0 0 0 1px var(--ink)}
/* key swatch for "Tied" (inline style is background:var(--tie)) shows the dash too */
.sckey span:nth-child(3) i{background:linear-gradient(var(--ink),var(--ink)) center/100% 2px no-repeat,var(--paper)!important;box-shadow:inset 0 0 0 1px rgba(64,62,53,.5)}
.scode{color:var(--ink-2)}
.scode b{font-family:var(--body);font-weight:700;letter-spacing:.1em;color:var(--ink)}

/* ---------- Player profiles --------------------------------------------- */
.av.lg{box-shadow:0 0 0 2px var(--ink);border-width:3px}
.chip .av.sm{font-size:13px;box-shadow:0 0 0 1px var(--ink);border-width:1.5px}
.bio{color:var(--ink);font-weight:500;max-width:68ch}
.psec{font-family:var(--body);font-weight:700;letter-spacing:.01em;text-transform:uppercase;padding-bottom:6px;border-bottom:var(--frame)}
.htable th{font-family:var(--display);font-weight:700;font-size:12.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-2);border-bottom:var(--rule)}
.htable td{border-bottom:1px solid var(--line)}
.htable td.n{font-family:var(--display);font-weight:700;font-size:17px}
.htable tr.now td{background:var(--cream)}
.pedit{border:var(--frame);background:var(--cream)}
.pedit h3{font-family:var(--display);font-weight:700;font-size:18px;letter-spacing:.04em;text-transform:uppercase;padding-bottom:6px;border-bottom:var(--rule)}
.pedit label:not(.small){font-family:var(--display);font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-2)}
.pedit input,.pedit textarea{border:var(--rule);border-radius:0;background:#fff;color:var(--ink)}
.hrow.hd{font-family:var(--display);font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-2)}
.pedit label.small{display:inline-block;padding:6px 12px}

@media (max-width:640px){
  .mrow{grid-template-columns:1fr 78px 1fr}
  .side .nm{font-size:13.5px}
  .tabs{overflow:visible;padding-bottom:0}
  .tab{flex:1 1 0;min-width:0;padding:7px 10px 6px}
  .tab span{font-size:14px}
  .tmeta{font-size:10.5px}
}

/* ---------- Player strengths (profile page) ------------------------------ */
.pstr small{font-family:var(--display);font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-2)}
.pstr li{border:var(--rule);border-radius:0;background:var(--cream);font-family:var(--display);font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ink)}

/* ---------- TV: matchup slides (draft complete, before play) --------------
   Same columns as the header (1fr | 8% | 1fr) so the crest dividers run straight down.
   Hof is mirrored (photo next to the centre), like the score rows. Sized in --u. */
.tvmu{flex:1;min-height:0;display:grid;grid-template-columns:1fr 8% 1fr}
.mus{display:flex;flex-direction:column;min-height:0;min-width:0}
.mps{flex:1;min-height:0;display:flex;flex-direction:column;justify-content:space-evenly;padding:calc(var(--u) * 1.4) calc(var(--u) * 2.4);gap:calc(var(--u) * 1.2)}
.mup{display:flex;align-items:flex-start;gap:calc(var(--u) * 1.8);min-width:0}
.mus.hof .mup{flex-direction:row-reverse;text-align:right}
.mi{min-width:0}
.tv .av.xl{width:calc(var(--u) * 11);height:calc(var(--u) * 11);font-size:calc(var(--u) * 3.8);border:3px solid var(--paper);box-shadow:0 0 0 2px var(--ink)}
.tvmu.one .av.xl{width:calc(var(--u) * 15);height:calc(var(--u) * 15);font-size:calc(var(--u) * 5)}
.mn{font-family:var(--body);font-weight:700;font-size:calc(var(--u) * 3.4);line-height:1;text-transform:uppercase;letter-spacing:.01em;overflow-wrap:anywhere}
.mn small{display:block;font-family:var(--display);font-size:calc(var(--u) * 1.5);letter-spacing:.04em;margin-bottom:calc(var(--u) * .3);color:var(--ink-2)}
.tvmu.one .mn{font-size:calc(var(--u) * 4.2)}
.mhc{font-family:var(--display);font-weight:700;font-size:calc(var(--u) * 1.15);letter-spacing:.04em;text-transform:uppercase;color:var(--ink-2);margin-top:calc(var(--u) * .5)}
.mr{display:flex;gap:calc(var(--u) * 2.2);margin-top:calc(var(--u) * .9)}
.mus.hof .mr,.mus.hof .mst{justify-content:flex-end}
/* "This event" always sits nearest the centre: Herbig's record row is mirrored (still packed to the left) */
.mus.herbig .mr{flex-direction:row-reverse;justify-content:flex-end}
.mr small{display:block;font-family:var(--display);font-weight:700;font-size:calc(var(--u) * .95);letter-spacing:.05em;text-transform:uppercase;color:var(--ink-2)}
.mr b{font-family:var(--body);font-weight:700;font-size:calc(var(--u) * 2.4);line-height:1.1}
.mst{list-style:none;margin:calc(var(--u) * .9) 0 0;padding:0;display:flex;flex-wrap:wrap;gap:calc(var(--u) * .5)}
.mst li{font-family:var(--display);font-weight:700;font-size:calc(var(--u) * 1.05);letter-spacing:.04em;text-transform:uppercase;padding:calc(var(--u) * .35) calc(var(--u) * .7) calc(var(--u) * .25);border:var(--rule);background:var(--cream)}
.mut{flex:none;border-top:var(--frame);padding:calc(var(--u) * .8) calc(var(--u) * 2.4) calc(var(--u) * .7);font-family:var(--display);font-weight:700;font-size:calc(var(--u) * 1.3);letter-spacing:.05em;text-transform:uppercase}
.mus.hof .mut{background:var(--hof);text-align:right} .mus.herbig .mut{background:var(--herbig)}
.muc{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:calc(var(--u) * .7);border-left:var(--frame);border-right:var(--frame);background:var(--paper);text-align:center;padding:0 calc(var(--u) * .4)}
.muc small{font-family:var(--display);font-weight:700;font-size:calc(var(--u) * 1);letter-spacing:.05em;text-transform:uppercase;color:var(--ink-2)}
.muc b{font-family:var(--body);font-weight:700;font-size:calc(var(--u) * 1.7);line-height:1.05;text-transform:uppercase}
.muc i{display:grid;place-items:center;width:calc(var(--u) * 3.6);height:calc(var(--u) * 3.6);border-radius:50%;background:var(--ink);color:var(--paper);font:700 calc(var(--u) * 1.3)/1 var(--body);font-style:normal;text-transform:uppercase;padding-top:.14em}

/* Session names stay on one line ("Four-ball" would otherwise break at its hyphen) */
.tab span,.shead h2,.muc small,.tvs>span:first-child{white-space:nowrap}
@media (max-width:374px){.tab{padding:7px 6px 6px}.tab span{font-size:12.5px}.tab small{font-size:10px}}
