:root{
  --crimson:#A81030;
  --crimson-dark:#7B0B23;
  --ink:#16181B;
  --chalk:#FBFAF7;
  --sand:#E4DCCB;
  --line:#D5CDBC;
  --grass:#31513F;
  --slate:#5C6169;
  --radius:3px;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;background:var(--chalk);color:var(--ink);
  font-family:'Barlow',system-ui,sans-serif;font-size:17px;line-height:1.55;
}
h1,h2,h3,h4,.cond{font-family:'Barlow Condensed','Barlow',sans-serif;font-weight:700;letter-spacing:.01em;line-height:1.05;margin:0}
h1{font-size:clamp(2.4rem,7vw,4rem)}
h2{font-size:clamp(1.7rem,4vw,2.4rem)}
h3{font-size:1.35rem}
p{margin:0 0 1rem}
a{color:var(--crimson);text-decoration-thickness:1px;text-underline-offset:3px}
:focus-visible{outline:3px solid var(--crimson);outline-offset:2px}
.wrap{max-width:1120px;margin:0 auto;padding:0 20px}

/* ---------- masthead ---------- */
.top{background:#fff;border-bottom:1px solid var(--line)}
.top-in{display:flex;align-items:center;gap:18px;padding:12px 20px;max-width:1120px;margin:0 auto}
.mark{display:block;height:74px;width:auto}
.word{border-left:1px solid var(--line);padding-left:18px;line-height:1.35;font-size:.86rem;color:var(--slate)}
.word b{display:block;font-family:'Barlow Condensed';font-size:1.05rem;color:var(--ink);font-weight:600;letter-spacing:.02em}
.top-right{margin-left:auto;display:flex;gap:10px;align-items:center}
.footmark{background:#fff;border-radius:var(--radius);padding:10px 12px;display:inline-block;margin-bottom:12px}
.footmark img{display:block;height:58px;width:auto}
@media(max-width:760px){.mark{height:56px}.word{display:none}}
.btn{
  display:inline-block;border:0;cursor:pointer;font-family:'Barlow Condensed';
  font-size:1.05rem;font-weight:600;letter-spacing:.03em;padding:9px 18px;
  background:var(--crimson);color:#fff;border-radius:var(--radius);text-decoration:none;
}
.btn:hover{background:var(--crimson-dark)}
.btn.ghost{background:transparent;border:1.5px solid var(--line);color:var(--ink)}
.btn.ghost:hover{border-color:var(--ink);background:transparent}
.btn.ghost.on-dark{border-color:#4A4E55;color:#fff}
.btn.ghost.on-dark:hover{border-color:#fff}
.btn.sm{font-size:.92rem;padding:6px 12px}
.btn.dark{background:var(--ink)}
.btn.dark:hover{background:#000}

/* stitched nav */
nav.main{background:var(--crimson);position:sticky;top:0;z-index:40;border-bottom:3px solid var(--crimson-dark)}
nav.main .wrap{display:flex;gap:2px;overflow-x:auto;scrollbar-width:none}
nav.main .wrap::-webkit-scrollbar{display:none}
nav.main a{
  color:#F6D9DE;text-decoration:none;white-space:nowrap;
  font-family:'Barlow Condensed';font-size:1.12rem;font-weight:600;letter-spacing:.04em;
  padding:13px 15px;border-bottom:3px solid transparent;margin-bottom:-3px;
}
nav.main a:hover{color:#fff}
nav.main a[aria-current="page"]{color:#fff;border-bottom-color:#fff}

/* ---------- shared bits ---------- */
.view{display:block;padding:34px 0 70px}
.view .hero{margin-top:-34px}
.eyebrow{font-family:'Barlow Condensed';color:var(--crimson);font-size:1rem;font-weight:600;letter-spacing:.06em;margin:0 0 4px}
.sub{color:var(--slate);max-width:62ch}
.grid{display:grid;gap:22px}
.panel{background:#fff;border:1px solid var(--line);border-radius:var(--radius)}
.panel-h{display:flex;align-items:baseline;gap:12px;padding:14px 18px;border-bottom:1px solid var(--line);background:var(--sand)}
.panel-h h3{font-size:1.2rem}
.panel-h .note{margin-left:auto;font-size:.85rem;color:var(--slate)}
.panel-b{padding:18px}
table{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}
th{
  font-family:'Barlow Condensed';font-size:.95rem;font-weight:600;color:var(--slate);
  text-align:right;padding:9px 8px;border-bottom:2px solid var(--line);letter-spacing:.03em;
}
th:first-child,td:first-child{text-align:left;padding-left:16px}
th:last-child,td:last-child{padding-right:16px}
td{text-align:right;padding:10px 8px;border-bottom:1px solid #EFEBE2;font-size:.97rem}
tbody tr:last-child td{border-bottom:0}
tbody tr:nth-child(odd){background:#FCFBF8}
.team-cell{display:flex;align-items:center;gap:10px;font-weight:600}
.dot{width:11px;height:11px;border-radius:50%;flex:0 0 11px;border:1px solid rgba(0,0,0,.25)}
.rank{color:var(--slate);font-family:'Barlow Condensed';font-size:1rem;width:18px;display:inline-block}
.tablescroll{overflow-x:auto}
.pos{color:var(--grass)}
.neg{color:var(--crimson)}
.pill{display:inline-block;font-family:'Barlow Condensed';font-size:.82rem;letter-spacing:.05em;
  padding:2px 8px;border-radius:20px;background:var(--sand);color:#4A4038}
.pill.live{background:var(--crimson);color:#fff}
/* Paid / waiver state on the admin roster. Green and amber rather than green
   and red — an unpaid player is outstanding, not an error. */
.pill.ok{background:#D8EFDD;color:#1B5E2A}
.pill.warn{background:#FBE7C6;color:#8A5A00}
.pill.final{background:#E7E9EB;color:var(--slate)}

/* ---------- hero / scoreboard ---------- */
.hero{background:var(--ink);color:#fff;padding:30px 0 0;border-bottom:6px solid var(--crimson)}
.hero h1{color:#fff}
.hero .lede{color:#C4C8CE;max-width:52ch;margin-top:10px}
.hero-actions{display:flex;flex-wrap:wrap;gap:10px;margin:20px 0 30px}
.board{background:#0D0F11;border:1px solid #262A2F;border-radius:var(--radius);overflow:hidden;margin-bottom:-28px;box-shadow:0 14px 40px rgba(0,0,0,.28)}
.board-h{display:flex;align-items:center;gap:10px;padding:10px 16px;border-bottom:1px solid #262A2F;color:#8E959E;font-family:'Barlow Condensed';letter-spacing:.08em;font-size:.9rem}
.board-h .live-dot{width:8px;height:8px;border-radius:50%;background:var(--crimson)}
.board-row{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:12px;padding:14px 16px;border-bottom:1px solid #1D2126;color:#fff}
.board-row:last-child{border-bottom:0}
.bteam{display:flex;align-items:center;gap:9px;font-weight:600;font-size:.98rem}
.bteam.away{justify-content:flex-end;text-align:right}
.bscore{font-family:'Barlow Condensed';font-size:1.7rem;color:#fff;min-width:34px;text-align:center}
.bmid{text-align:center;color:#7E858E;font-size:.78rem;font-family:'Barlow Condensed';letter-spacing:.08em}
.win{color:#fff}.lose{color:#7E858E}

/* ---------- news ---------- */
.news-item{border-bottom:1px solid var(--line);padding:18px 0}
.news-item:last-child{border-bottom:0;padding-bottom:0}
.news-item time{font-family:'Barlow Condensed';color:var(--slate);font-size:.95rem;letter-spacing:.04em}
.news-item h3{margin:2px 0 6px}
.side .panel + .panel{margin-top:22px}
.quick a{display:flex;justify-content:space-between;align-items:center;gap:10px;
  padding:13px 18px;border-bottom:1px solid #EFEBE2;text-decoration:none;color:var(--ink);font-weight:500}
.quick a:last-child{border-bottom:0}
.quick a:hover{background:#FCF6F7;color:var(--crimson)}
.quick small{color:var(--slate);font-weight:400}

/* ---------- schedule ---------- */
.filters{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:18px}
select,input[type=text],input[type=email],input[type=number],input[type=date],textarea{
  font-family:'Barlow',sans-serif;font-size:.97rem;padding:8px 10px;
  border:1px solid var(--line);border-radius:var(--radius);background:#fff;color:var(--ink);
}
.gameday{font-family:'Barlow Condensed';font-size:1.15rem;color:var(--slate);
  border-bottom:2px solid var(--line);padding:16px 0 6px;margin-bottom:2px;letter-spacing:.03em}
.game{display:grid;grid-template-columns:88px 1fr auto;gap:14px;align-items:center;
  padding:13px 4px;border-bottom:1px solid #EFEBE2}
.gtime{font-family:'Barlow Condensed';font-size:1.05rem}
.gtime small{display:block;color:var(--slate);font-family:'Barlow';font-size:.8rem;letter-spacing:0}
.gmatch{font-weight:600}
.gmatch small{display:block;font-weight:400;color:var(--slate);font-size:.85rem}

/* ---------- teams ---------- */
.teamgrid{display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}
.teamcard{background:#fff;border:1px solid var(--line);border-left:5px solid var(--crimson);
  border-radius:var(--radius);padding:16px;cursor:pointer;text-align:left;width:100%;font:inherit}
.teamcard:hover{border-color:var(--slate)}
.teamcard h3{font-size:1.25rem}
.teamcard p{margin:4px 0 0;color:var(--slate);font-size:.9rem}
.roster-head{display:flex;flex-wrap:wrap;gap:14px;align-items:center;margin-bottom:16px}
.crest{width:48px;height:48px;border-radius:50%;display:grid;place-items:center;color:#fff;
  font-family:'Barlow Condensed';font-size:1.3rem;border:2px solid rgba(0,0,0,.15)}
.back{background:none;border:0;color:var(--crimson);cursor:pointer;font:inherit;padding:0;margin-bottom:14px}

/* ---------- leaders ---------- */
.leaders{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));margin-bottom:26px}
.leader{background:var(--ink);color:#fff;border-radius:var(--radius);padding:14px 16px}
.leader .cat{font-family:'Barlow Condensed';color:#9CA3AC;letter-spacing:.08em;font-size:.85rem}
.leader .who{font-weight:600;margin-top:6px}
.leader .who small{display:block;color:#9CA3AC;font-weight:400;font-size:.82rem}
.leader .val{font-family:'Barlow Condensed';font-size:2.1rem;color:#fff;line-height:1;margin-top:8px}

/* ---------- forms / pay ---------- */
.cols{display:grid;gap:26px;grid-template-columns:1fr}
@media(min-width:900px){
  .cols{grid-template-columns:1.6fr 1fr}
  .cols.even{grid-template-columns:1fr 1fr}
}
.field{margin-bottom:14px}
.field label{display:block;font-weight:600;font-size:.92rem;margin-bottom:5px}
.field input,.field select,.field textarea{width:100%}
.field .hint{color:var(--slate);font-size:.84rem;margin-top:4px}
.check{display:flex;gap:11px;align-items:flex-start;padding:13px;border:1px solid var(--line);
  border-radius:var(--radius);margin-bottom:10px;background:#fff}
.check input{margin-top:5px;width:18px;height:18px;flex:0 0 18px;accent-color:var(--crimson)}
.check label{font-size:.92rem;line-height:1.45}
.check label b{display:block;font-family:'Barlow Condensed';font-size:1.05rem;font-weight:600}
.total{display:flex;justify-content:space-between;padding:9px 0;border-bottom:1px solid #EFEBE2}
.total.big{border:0;font-family:'Barlow Condensed';font-size:1.5rem;padding-top:14px}
.sig{border:1px dashed var(--line);border-radius:var(--radius);padding:14px;background:#FCFBF8}
.sig input{width:100%;font-family:'Barlow Condensed';font-size:1.5rem;padding:6px 4px;border:0;border-bottom:1px solid var(--slate);background:transparent;border-radius:0}

/* ---------- rules ---------- */
.rulegrid{display:grid;gap:0;grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}
.rule{padding:18px;border:1px solid var(--line);margin:-1px 0 0 -1px}
.rule h4{font-size:1.1rem;margin-bottom:4px}
.rule p{margin:0;color:var(--slate);font-size:.93rem}

/* ---------- admin ---------- */
.adminbar{background:var(--grass);color:#fff;padding:9px 0;font-size:.9rem}
.adminbar .wrap{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.adminbar .who{margin-left:auto;color:#C6D6CC}
.tabs{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:20px;border-bottom:1px solid var(--line)}
.tabs button{background:none;border:0;cursor:pointer;font-family:'Barlow Condensed';font-size:1.05rem;
  padding:9px 13px;color:var(--slate);border-bottom:3px solid transparent;margin-bottom:-1px}
.tabs button[aria-selected="true"]{color:var(--ink);border-bottom-color:var(--crimson)}
.statrow td{padding:6px 8px}
.statrow input{width:56px;text-align:right;padding:5px 6px;font-variant-numeric:tabular-nums}
.calc{color:var(--slate);font-variant-numeric:tabular-nums}
.savebar{position:sticky;bottom:0;background:#fff;border-top:1px solid var(--line);
  padding:12px 16px;display:flex;gap:10px;align-items:center;margin-top:0}
.savebar span{color:var(--slate);font-size:.88rem;margin-left:auto}
.role{display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(210px,1fr))}
.role div{border:1px solid var(--line);padding:14px;border-radius:var(--radius);background:#fff}
.role h4{color:var(--crimson);margin-bottom:6px}
.role ul{margin:0;padding-left:18px;color:var(--slate);font-size:.9rem}

/* ---------- footer ---------- */
footer{background:var(--ink);color:#9CA3AC;padding:34px 0;font-size:.9rem;margin-top:40px}
footer .wrap{display:grid;gap:20px;grid-template-columns:repeat(auto-fit,minmax(190px,1fr))}
footer .legal{grid-column:1/-1}
footer h4{color:#fff;font-size:1.05rem;margin-bottom:8px}
footer a{color:#C4C8CE;text-decoration:none;display:block;padding:3px 0}
footer a:hover{color:#fff}
.legal{border-top:1px solid #262A2F;margin-top:26px;padding-top:16px;color:#767D86}
@media(prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
@media(max-width:640px){
  .game{grid-template-columns:74px 1fr;row-gap:6px}
  .game .gact{grid-column:2}
  .top-right .btn.ghost{display:none}
}


/* ---------- multi-page additions ---------- */
.skip{position:absolute;left:-9999px;top:0;background:var(--crimson);color:#fff;padding:10px 16px;z-index:99}
.skip:focus{left:8px;top:8px}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.marklink{display:block;line-height:0}
h1{font-size:clamp(2.1rem,5.5vw,3rem);margin-bottom:6px}
.hero h1{font-size:clamp(2.4rem,7vw,4rem)}
.eyebrow.light{color:#E88C9B}
.sub.small{font-size:.9rem;margin-top:14px}
.filters{margin:22px 0 18px}
.empty{color:var(--slate);padding:34px 4px;margin:0}
.calc{color:var(--slate);font-variant-numeric:tabular-nums;font-size:.9rem}

/* links inside data tables */
td a,.team-cell{color:inherit;text-decoration:none}
td a:hover,.team-cell:hover{color:var(--crimson);text-decoration:underline}
td.lft,th.lft{text-align:left}
.dot.inline{display:inline-block;vertical-align:middle;margin-right:7px}
.gmatch a{color:inherit;text-decoration:none}
.gmatch a:hover{color:var(--crimson);text-decoration:underline}
.leader .who a{color:#9CA3AC;text-decoration:none}
.leader .who a:hover{color:#fff}
tr.cutline td{border-bottom:2px solid var(--crimson)}

.teamcard{display:block;text-decoration:none;color:inherit}
.teamcard .rec{font-weight:600}
.gameday{font-family:'Barlow Condensed';font-weight:600}

.minirow{display:flex;gap:12px;align-items:baseline;padding:11px 16px;border-bottom:1px solid #EFEBE2;font-size:.94rem}
.minirow:last-child{border-bottom:0}
.minirow span:first-child{color:var(--slate);min-width:88px}
.minirow b,.minirow span:last-child{margin-left:auto}

.linkbtn{background:none;border:0;padding:0;color:var(--crimson);cursor:pointer;font:inherit;text-decoration:underline;text-underline-offset:3px}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn:disabled:hover{background:var(--crimson)}
.score-in{display:flex;align-items:center;gap:8px}
.score-in input{width:62px;text-align:center;padding:7px 6px;font-variant-numeric:tabular-nums}

.toast{
  position:fixed;left:50%;bottom:24px;transform:translate(-50%,140%);
  background:var(--ink);color:#fff;padding:13px 18px;border-radius:var(--radius);
  max-width:min(520px,calc(100vw - 32px));box-shadow:0 10px 30px rgba(0,0,0,.3);
  z-index:80;font-size:.93rem;transition:transform .22s ease;
}
.toast.show{transform:translate(-50%,0)}
@media(prefers-reduced-motion:reduce){.toast{transition:none}}

/* ---------- roles, sign-in, import ---------- */
.wrap.narrow{max-width:660px}
.linkbtn.light{color:#C6D6CC;margin-left:10px}
.linkbtn.light:hover{color:#fff}
.adminbar .who{display:flex;align-items:center;gap:0}
.role p.calc{font-size:.85rem}
.tabs button[disabled]{opacity:.4;cursor:not-allowed}
.savebar .btn:disabled{opacity:.4;cursor:not-allowed}

.importgrid{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));margin-top:22px}
.importcard{
  text-align:left;font:inherit;cursor:pointer;background:#fff;
  border:1px solid var(--line);border-top:4px solid var(--line);
  border-radius:var(--radius);padding:16px;
}
.importcard:hover{border-color:var(--slate)}
.importcard.picked{border-top-color:var(--crimson);border-color:var(--slate);background:#FDF7F8}
.importcard h4{font-family:'Barlow Condensed';font-size:1.2rem;margin:0 0 4px}
.importcard p{margin:0 0 8px;color:var(--slate);font-size:.9rem}

.drop{
  border:2px dashed var(--line);border-radius:var(--radius);background:#FCFBF8;
  padding:34px 20px;text-align:center;
}
.drop.over{border-color:var(--crimson);background:#FDF3F5}
.drop input[type=file]{position:absolute;width:1px;height:1px;opacity:0}
.drop p{margin:0}

.banner{padding:12px 14px;border-radius:var(--radius);margin:0 0 14px;font-size:.94rem}
.banner.good{background:#EAF2ED;border-left:4px solid var(--grass);color:#22402F}
.banner.bad{background:#FBEDEF;border-left:4px solid var(--crimson);color:#5E1020}
.errlist{margin:0 0 14px;padding-left:0;list-style:none;font-size:.92rem}
.errlist li{padding:6px 0;border-bottom:1px solid #EFEBE2}
.errlist li:last-child{border-bottom:0}
.errlist .calc{display:inline-block;min-width:74px}
.filename{margin:0 0 12px;font-size:.94rem}
table.preview td,table.preview th{font-size:.88rem;white-space:nowrap}
table.preview th.unknown{color:var(--line);text-decoration:line-through}

/* ==================================================================
   Coach screen. Bigger everything. Nothing under 17px, no tap target
   under 56px tall, and one decision per screen.
   ================================================================== */
main.coach{padding:26px 0 90px;font-size:19px}
main.coach h1{font-size:clamp(2rem,7vw,2.6rem);margin-bottom:8px}
.coach-sub{font-size:1.1rem;color:var(--slate);margin-bottom:26px}
.coach .help{font-size:1rem;color:var(--slate);margin-top:22px;line-height:1.6}
.coach .help a{font-weight:600}

.big-back{font-size:1.15rem;padding:10px 0;margin-bottom:10px;display:inline-block}

/* big primary button — coach screen only, so it cannot collide with .total.big */
main.coach .big{
  display:block;width:100%;border:0;cursor:pointer;background:var(--crimson);color:#fff;
  font-family:'Barlow Condensed';font-size:1.5rem;font-weight:600;letter-spacing:.02em;
  padding:20px;border-radius:var(--radius);margin-top:8px;min-height:66px;
  text-align:center;text-decoration:none;
}
main.coach .big:hover{background:var(--crimson-dark)}
main.coach .big:disabled{background:#C9CCD1;cursor:not-allowed}
main.coach .big.send{margin-top:24px}
.secondary{
  border:2px solid var(--line);background:#fff;color:var(--ink);cursor:pointer;
  font-family:'Barlow Condensed';font-size:1.2rem;font-weight:600;
  padding:14px 18px;border-radius:var(--radius);min-height:56px;
}
.secondary:disabled{opacity:.4;cursor:not-allowed}

/* home tiles */
.tiles{display:grid;gap:14px}
.tile{
  display:block;width:100%;text-align:left;cursor:pointer;font:inherit;
  background:#fff;border:2px solid var(--line);border-left:8px solid var(--crimson);
  border-radius:var(--radius);padding:22px 20px;
}
.tile:hover{border-color:var(--slate);border-left-color:var(--crimson)}
.tile-title{display:block;font-family:'Barlow Condensed';font-size:1.7rem;font-weight:700}
.tile-sub{display:block;color:var(--slate);font-size:1.02rem;margin-top:2px}

.resume{background:#EAF0EC;border-left:8px solid var(--grass);border-radius:var(--radius);padding:18px 20px;margin-bottom:22px}
.resume p{margin:0 0 12px}
main.coach .resume .big{background:var(--grass)}
main.coach .resume .big:hover{background:#25402F}

/* big list rows */
.biglist{display:grid;gap:12px}
.bigrow{
  display:grid;grid-template-columns:1fr auto;align-items:center;gap:4px 12px;
  width:100%;text-align:left;font:inherit;cursor:pointer;background:#fff;
  border:2px solid var(--line);border-radius:var(--radius);padding:18px 20px;min-height:74px;
}
.bigrow:hover{border-color:var(--slate)}
.br-main{font-family:'Barlow Condensed';font-size:1.5rem;font-weight:600}
.br-sub{grid-column:1;color:var(--slate);font-size:1rem}
.br-tag{grid-column:1;justify-self:start;background:var(--sand);border-radius:20px;padding:2px 10px;font-size:.85rem;margin-top:4px}
.br-go{grid-row:1/3;grid-column:2;font-size:2rem;color:var(--slate)}

/* progress */
.sheet-top{display:flex;align-items:center;justify-content:space-between}
.saved{opacity:0;color:var(--grass);font-weight:600;font-size:1rem;transition:opacity .2s}
.saved.on{opacity:1}
.progress{height:8px;background:var(--sand);border-radius:20px;overflow:hidden;margin:12px 0 6px}
.progress-fill{height:100%;background:var(--crimson);transition:width .2s}
.progress-text{color:var(--slate);font-size:1rem;margin:0 0 18px}

/* the player being entered */
.playercard{border-bottom:3px solid var(--ink);padding-bottom:16px;margin-bottom:22px}
.playercard h1{margin:0}
.pnum{font-family:'Barlow Condensed';font-size:1.3rem;color:var(--crimson);margin:0}
.turns{color:var(--slate);font-size:1.05rem;margin:6px 0 0}
.ask{font-size:1.1rem;margin-bottom:14px}

/* the five big tap buttons */
.events{display:grid;gap:12px;margin-bottom:20px}
.ev{
  display:grid;grid-template-columns:1fr auto;align-items:center;gap:2px 14px;
  width:100%;text-align:left;font:inherit;cursor:pointer;
  background:#fff;border:2px solid var(--line);border-left:10px solid var(--slate);
  border-radius:var(--radius);padding:18px 20px;min-height:84px;
}
.ev:active{transform:scale(.985)}
.ev-label{font-family:'Barlow Condensed';font-size:1.65rem;font-weight:700;line-height:1}
.ev-hint{grid-column:1;color:var(--slate);font-size:.98rem}
.ev-count{
  grid-row:1/3;grid-column:2;min-width:56px;height:56px;border-radius:50%;
  display:grid;place-items:center;background:#F2EFE9;color:#9AA0A7;
  font-family:'Barlow Condensed';font-size:1.9rem;font-weight:700;
}
.ev-count.has{background:var(--ink);color:#fff}
.ev-hit{border-left-color:var(--grass)}
.ev-out{border-left-color:#9AA0A7}
.ev-walk{border-left-color:#2F6FB0}
.ev-hr{border-left-color:var(--crimson)}
.ev-k{border-left-color:#B8862A}
.ev-hit:hover{background:#F3F8F5}.ev-hr:hover{background:#FDF3F5}
.ev-walk:hover{background:#F2F6FA}.ev-k:hover{background:#FBF7EF}.ev-out:hover{background:#F7F7F8}

.row-actions{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin-bottom:18px}
.dnp-check{display:flex;align-items:center;gap:10px;font-size:1.05rem;cursor:pointer}
.dnp-check input{width:26px;height:26px;accent-color:var(--crimson)}
.nav-actions{display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:stretch}
main.coach .nav-actions .big{margin-top:0}

.jump-label{color:var(--slate);font-size:.98rem;margin:26px 0 8px}
.jumps{display:flex;flex-wrap:wrap;gap:8px}
.jump{
  min-width:52px;min-height:52px;border:2px solid var(--line);background:#fff;cursor:pointer;
  border-radius:var(--radius);font-family:'Barlow Condensed';font-size:1.2rem;font-weight:600;color:var(--slate);
}
.jump.filled{border-color:var(--grass);color:var(--grass)}
.jump.on{background:var(--ink);border-color:var(--ink);color:#fff}

/* review */
.reviewtable td{font-size:1.02rem;padding:14px 10px;text-align:left}
.reviewtable td:first-child{padding-left:18px}
.reviewtable td:last-child{padding-right:18px;text-align:right}
.reviewtable tr.dnp td{color:var(--slate)}
.reviewtable .linkbtn{font-size:1rem}

/* done */
.done{text-align:center;padding:40px 0}
.tick{
  width:88px;height:88px;margin:0 auto 20px;border-radius:50%;
  background:var(--grass);color:#fff;font-size:3rem;display:grid;place-items:center;
}

/* score pad */
.scorepad{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:24px 0}
.sp-side{border:2px solid var(--line);border-radius:var(--radius);padding:18px 12px;text-align:center;background:#fff}
.sp-name{font-family:'Barlow Condensed';font-size:1.25rem;font-weight:600;margin:0 0 14px;min-height:2.5em}
.sp-btn{
  width:100%;min-height:76px;border:0;cursor:pointer;background:var(--ink);color:#fff;
  font-size:2.4rem;line-height:1;border-radius:var(--radius);
}
.sp-btn:hover{background:#000}
.sp-btn.minus{background:#fff;color:var(--ink);border:2px solid var(--line)}
.sp-btn.minus:hover{background:#F2EFE9}
.sp-num{font-family:'Barlow Condensed';font-size:4.2rem;line-height:1;margin:14px 0;font-variant-numeric:tabular-nums}
.verdict{text-align:center;font-family:'Barlow Condensed';font-size:1.5rem;min-height:1.6em;margin:0}

/* roster */
.rlist{display:grid;gap:2px}
.rrow{display:flex;align-items:center;gap:16px;padding:16px 4px;border-bottom:1px solid #EFEBE2;min-height:62px}
.rnum{font-family:'Barlow Condensed';font-size:1.4rem;color:var(--crimson);min-width:40px}
.rname{font-size:1.15rem;font-weight:500}
.rstatus{margin-left:auto}

/* my team's numbers — the coach's own check that a sheet landed.
   Tuned for a phone held one-handed on a diamond: the name column is
   pinned so a coach scrolling right never loses track of whose row
   they are reading. */
.tstable th{white-space:nowrap;font-size:.8rem}
.tstable td{font-size:1rem;padding:13px 8px}
.tstable .ts-num{font-family:'Barlow Condensed';font-size:1.2rem;color:var(--crimson);text-align:left}
.tstable .ts-name{text-align:left;font-weight:500;white-space:nowrap}
.tstable .ts-avg{font-weight:600}
.ts-h2{margin:26px 0 12px;font-size:1.25rem}
@media (max-width:640px){
  .tstable .ts-name{position:sticky;left:0;background:#fff;z-index:1}
  .tstable tbody tr:nth-child(odd) .ts-name{background:#FCFBF8}
}

/* flash message */
.flash{
  position:fixed;left:50%;bottom:20px;transform:translate(-50%,150%);
  background:var(--grass);color:#fff;padding:15px 22px;border-radius:var(--radius);
  font-size:1.05rem;z-index:90;box-shadow:0 10px 30px rgba(0,0,0,.25);
  max-width:calc(100vw - 32px);transition:transform .2s ease;
}
.flash.on{transform:translate(-50%,0)}
@media(prefers-reduced-motion:reduce){.flash,.progress-fill,.saved{transition:none}}

@media(max-width:520px){
  .nav-actions{grid-template-columns:1fr}
  .scorepad{gap:10px}
  .sp-num{font-size:3.2rem}
}

/* ---------- environment banner and auth states ---------- */
.envbanner{
  background:var(--sand);color:#4A4038;text-align:center;
  padding:9px 16px;font-size:.9rem;border-bottom:1px solid var(--line);
}
.loginerr{
  background:#FBEDEF;border-left:4px solid var(--crimson);color:#5E1020;
  padding:11px 14px;border-radius:var(--radius);margin:0 0 14px;font-size:.94rem;
}
.btn:disabled{opacity:.6;cursor:wait}

/* ---------- coach page chrome: stripped back ---------- */
.whoami{font-size:.95rem;color:var(--slate)}
footer.slim{padding:20px 0;margin-top:30px}
footer.slim .wrap{display:block}
footer.slim .legal{border:0;margin:0;padding:0;text-align:center}
footer.slim a{display:inline;color:#C4C8CE;text-decoration:underline}

/* ---- divisions: standings, playoff seeding, team grid ---- */
.divhead{font-family:'Barlow Condensed',system-ui,sans-serif;font-size:1.45rem;font-weight:700;
  letter-spacing:.01em;margin:26px 0 10px;padding-bottom:6px;border-bottom:2px solid var(--line)}
.divhead:first-child{margin-top:0}
.divpanel{margin-bottom:26px}
.divpanel .divhead{margin:0;padding:14px 18px;border-bottom:1px solid var(--line);
  background:var(--sand);border-radius:6px 6px 0 0}
#teamGrid .teamgrid{margin-bottom:8px}

/* playoff seeding: name and the division-winner tag on one line */
.seedteam{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.seedteam .pill{flex:none}

/* ---- loading state ---- */
.mmsp-loader{display:flex;align-items:center;justify-content:center;gap:12px;
  padding:44px 16px;color:var(--slate);font-size:1rem}
.mmsp-spin{width:20px;height:20px;border-radius:50%;flex:none;
  border:2.5px solid var(--line);border-top-color:var(--crimson);
  animation:mmsp-spin .7s linear infinite}
@keyframes mmsp-spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){
  .mmsp-spin{animation-duration:2.4s}
}

/* ==================================================================
   Phones.

   Written against an iPhone rather than a narrow desktop window: the
   things that actually bite are Safari zooming the page when you tap a
   field, tap targets that need a careful thumb, and wide stat tables
   that scroll sideways until you cannot tell which player a row is.
   ================================================================== */
@media (max-width: 760px) {

  /* Safari zooms the entire page when a focused field is under 16px.
     Nothing else on the page needs to change size — this is purely to
     stop the layout lurching when someone taps into the register form. */
  select, input[type=text], input[type=email], input[type=number],
  input[type=date], input[type=password], textarea {
    font-size: 16px;
  }

  /* The nav scrolled sideways with no hint that it did, so "Register &
     Pay" simply looked missing. Two tidy rows beats a hidden scroll. */
  nav.main .wrap { flex-wrap: wrap; overflow-x: visible; gap: 0 2px; }
  nav.main a { padding: 12px 12px; font-size: 1.05rem; }

  /* Comfortable thumb targets. */
  .btn, nav.main a, .linkbtn { min-height: 44px; display: inline-flex;
    align-items: center; justify-content: center; }
  .top-right .btn { padding: 10px 14px; }
  /* Registering is the main thing a player comes here to do, so the
     button stays put on a phone. */
  .top-right .btn.ghost { display: inline-flex; }

  /* Wide tables: keep the name column pinned so a row stays identifiable
     while the numbers scroll under your thumb. */
  .tablescroll { -webkit-overflow-scrolling: touch; }
  .tablescroll th:first-child,
  .tablescroll td:first-child {
    position: sticky; left: 0; z-index: 2;
    background: #fff; box-shadow: 1px 0 0 var(--line);
  }
  .tablescroll thead th:first-child { background: var(--sand); }
  .tablescroll tbody tr:nth-child(odd) td:first-child { background: #FCFBF8; }

  /* Buy back horizontal room so more columns land on screen at once. */
  th, td { padding: 9px 7px; font-size: .94rem; }
  th:first-child, td:first-child { padding-left: 12px; }
  th:last-child, td:last-child { padding-right: 12px; }

  .wrap { padding: 0 14px; }
  .view { padding: 24px 0 56px; }

  /* Stacked, not squeezed. */
  .cols, .cols.even { grid-template-columns: 1fr; gap: 20px; }
  .filters { display: flex; flex-wrap: wrap; gap: 10px; }
  .filters select { flex: 1 1 46%; min-width: 0; }

  .divhead { font-size: 1.25rem; }
  .divpanel .divhead { padding: 12px 14px; }
  .mmsp-loader { padding: 34px 12px; }
}

/* Nothing should ever push the page sideways. */
html, body { max-width: 100%; overflow-x: hidden; }
table { max-width: none; }

/* ==================================================================
   Mobile polish
   ================================================================== */

/* iOS inflates text when you rotate to landscape unless told not to. */
html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }

/* The default grey flash on tap looks like a bug on a custom design. */
a, button, .btn, .linkbtn, summary, [role="tab"] {
  -webkit-tap-highlight-color: rgba(168, 16, 48, .14);
}

/* Keyboard focus must stay obvious, but should not ring every tap. */
:focus-visible {
  outline: 3px solid var(--crimson);
  outline-offset: 2px;
  border-radius: 2px;
}

/* Anchor targets must clear the sticky nav. */
[id] { scroll-margin-top: 84px; }

/* Painting under the notch is only safe if content is inset back out. */
@supports (padding: max(0px)) {
  .wrap {
    padding-left: max(20px, env(safe-area-inset-left));
    padding-right: max(20px, env(safe-area-inset-right));
  }
  footer { padding-bottom: env(safe-area-inset-bottom); }
}

@media (max-width: 760px) {
  @supports (padding: max(0px)) {
    .wrap {
      padding-left: max(14px, env(safe-area-inset-left));
      padding-right: max(14px, env(safe-area-inset-right));
    }
  }

  /* The masthead is decoration once you are reading; give the space to
     the content and let the nav do the work. */
  .top-in { padding: 10px 0; }
  .mark { height: 46px; }

  /* Two rows of nav would hold a sixth of a phone screen for the whole
     visit if it stayed pinned, so on a phone it scrolls away with the page
     instead. Every link is visible when you are at the top, the footer
     carries the same links at the bottom, and nothing depends on reading
     scroll direction — which is the part that goes wrong on real devices. */
  nav.main { position: static; }
  [id] { scroll-margin-top: 12px; }

  /* A primary action on a phone should be a full-width target. */
  .panel-b .btn, .savebar .btn, .hero-actions .btn { width: 100%; }
  .hero-actions { display: grid; gap: 10px; }
  .savebar { flex-wrap: wrap; gap: 10px; }

  /* Filters side by side beats a stack of full-width selects. */
  .filters select { flex: 1 1 46%; }

  footer .wrap { grid-template-columns: 1fr 1fr; gap: 18px; }
  footer .wrap > div:first-child { grid-column: 1 / -1; }
}

/* Very small phones: one column everywhere. */
@media (max-width: 400px) {
  footer .wrap { grid-template-columns: 1fr; }
  .filters select { flex: 1 1 100%; }
}

/* ---- roster filters on a team page ---- */
.rosterfilters{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin:0 0 14px}
.qualfilter{display:flex;align-items:center;gap:8px;font-size:.92rem;color:var(--slate);cursor:pointer}
.qualfilter input{width:18px;height:18px;accent-color:var(--crimson);flex:none}
/* Below the qualifying at-bats: still shown, just not competing for the top. */
tr.unqualified td{color:var(--slate)}
tr.unqualified td b{font-weight:500}
@media(max-width:760px){
  .rosterfilters{gap:10px}
  .rosterfilters select{flex:1 1 100%}
  .qualfilter{flex:1 1 100%;min-height:44px}
}

/* ---- coach: did not play ---- */
.jump.dnp{opacity:.55;text-decoration:line-through}
.jump.dnp.on{opacity:1}
tr.missing td{background:#FFF6E9}
.warn{color:#9A5B00}
tr.dnp td{color:var(--slate)}

/* ---- coach: menu and outstanding work ---- */
.menubtn{font-family:'Barlow Condensed';font-size:1.05rem;font-weight:600;letter-spacing:.04em;
  background:var(--crimson);color:#fff;border:0;border-radius:var(--radius);
  padding:11px 18px;min-height:44px;cursor:pointer}
.coachmenu{background:var(--ink);padding:8px 0 12px;position:sticky;top:0;z-index:60}
.menurow{display:flex;flex-direction:column;align-items:flex-start;gap:2px;width:100%;
  background:transparent;border:0;border-bottom:1px solid #2C2F33;color:#fff;
  padding:15px 4px;text-align:left;cursor:pointer;min-height:56px}
.menurow b{font-family:'Barlow Condensed';font-size:1.3rem;letter-spacing:.01em}
.menurow span{color:#A9AEB4;font-size:.92rem}
.menurow.quiet b{color:#E88C9B}
.menurow:last-child{border-bottom:0}

.todonote{background:#FFF6E9;border-left:5px solid #C9822B;padding:13px 15px;
  margin:0 0 18px;font-size:1.02rem;border-radius:var(--radius)}
.br-tag.tag-owed{background:#C9822B;color:#fff}
.br-tag.tag-started{background:var(--crimson);color:#fff}
.br-tag.tag-done{background:#E7E9EB;color:var(--slate)}
.bigrow.done{opacity:.72}

/* ---- playoff bracket ---- */
.bracket{display:flex;gap:20px;overflow-x:auto;padding-bottom:8px;-webkit-overflow-scrolling:touch;align-items:flex-start}
.bracket-round{flex:0 0 250px;min-width:250px}
.bracket-title{font-family:'Barlow Condensed';font-size:1.15rem;letter-spacing:.03em;
  color:var(--slate);text-transform:uppercase;margin:0 0 10px;padding-bottom:6px;
  border-bottom:2px solid var(--line)}
.bracket-game{background:#fff;border:1px solid var(--line);border-radius:var(--radius);
  padding:10px 12px;margin-bottom:12px}
.bracket-game.final{border-left:4px solid var(--grass)}
.bteam-row{display:flex;align-items:center;gap:9px;padding:5px 0;color:var(--slate)}
.bteam-row .bname{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.95rem}
.bteam-row .bpts{font-family:'Barlow Condensed';font-size:1.25rem;font-variant-numeric:tabular-nums}
.bteam-row.won{color:var(--ink);font-weight:600}
.bteam-row.won .bpts{color:var(--grass)}
.bracket-meta{border-top:1px solid #EFEBE2;margin-top:6px;padding-top:6px;
  font-size:.84rem;color:var(--slate)}
#bracket{margin-top:26px}
@media(max-width:760px){
  .bracket-round{flex:0 0 82vw;min-width:82vw}
}

/* ---- registration switched off ----
   Every entry point is marked data-register-link and hidden unless
   settings/site.registrationOpen is true. Nothing is deleted; flipping the
   setting brings the whole flow back with no deploy. */
body:not(.registration-open) [data-register-link]{display:none !important}

/* The hidden attribute only sets display:none in the UA stylesheet, so any
   rule that sets display — .cols is display:grid — silently overrides it and
   the element stays on screen. This is what left the registration form
   visible underneath the "not open yet" notice. */
[hidden]{display:none !important}

/* ---- site content editor ---- */
.cmsblock{padding:16px 0;border-bottom:1px solid #EFEBE2}
.cmsblock:last-child{border-bottom:0}
.cmsblock label{display:block;margin-bottom:4px;font-size:.95rem}
.cmsblock input,.cmsblock textarea{width:100%}
.cmsblock .hint{margin:0 0 6px}
.cmsactions{display:flex;align-items:center;gap:14px;margin-top:8px;flex-wrap:wrap}
.btn.sm{padding:7px 14px;font-size:.95rem}

/* The derby's own styles are at the end of this file. */

/* ---- predictions ---- */
.pickrow{display:flex;align-items:center;justify-content:space-between;gap:14px;
  padding:11px 0;border-bottom:1px solid #EFEBE2;flex-wrap:wrap}
.picklabel{font-weight:600;font-size:.97rem}
.picklabel small{display:block;font-weight:400;color:var(--slate);font-size:.86rem}
.pickbtns{display:flex;gap:8px;flex-wrap:wrap}
.pickbtns label{display:flex;align-items:center;gap:7px;border:1px solid var(--line);
  border-radius:var(--radius);padding:9px 13px;cursor:pointer;font-size:.94rem;min-height:44px}
.pickbtns input{accent-color:var(--crimson);width:18px;height:18px}
@media(max-width:760px){
  .pickrow{flex-direction:column;align-items:stretch}
  .pickbtns label{flex:1 1 45%;justify-content:center}
}

/* ==================================================================
   Live board (/live)
   Result cards for every game, plus the tiles above them. Built to be
   read from a few feet away at the scorer's table, so the score is the
   biggest thing on each card and the winner is the only loud half.
   ================================================================== */
.livehead{display:flex;flex-wrap:wrap;gap:18px;align-items:flex-end;justify-content:space-between}
.livestamp{display:flex;align-items:center;gap:12px;color:var(--slate);font-size:.9rem;padding-bottom:6px}
.btn.small{padding:7px 13px;font-size:.85rem}

/* A quiet heartbeat. It goes amber if the data stops arriving, so a board
   that has silently died does not look like a board with no news. */
.pulse{display:inline-block;width:9px;height:9px;border-radius:50%;
  background:var(--crimson);margin-right:7px;vertical-align:middle;
  animation:pulse 2s ease-in-out infinite}
.pulse.stale{background:#C98A00;animation:none}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.25}}
@media (prefers-reduced-motion:reduce){.pulse{animation:none}}

.tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin:22px 0 6px}
.tile{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px}
.tile b{display:block;font-family:'Barlow Condensed';font-size:1.9rem;line-height:1.1;
  font-variant-numeric:tabular-nums}
.tile span{display:block;font-size:.9rem;color:var(--slate)}
.tile small{display:block;margin-top:3px;font-size:.78rem;color:var(--slate);opacity:.8}

.chips{display:flex;flex-wrap:wrap;gap:8px;margin:0}
.chip{font-family:'Barlow Condensed';font-size:.95rem;letter-spacing:.03em;
  background:#fff;border:1px solid var(--line);border-radius:999px;
  padding:6px 14px;cursor:pointer;color:var(--slate)}
.chip.on{background:var(--crimson);border-color:var(--crimson);color:#fff}
.chip .chipn{opacity:.65;margin-left:4px;font-variant-numeric:tabular-nums}

.gcards{display:grid;grid-template-columns:repeat(auto-fill,minmax(255px,1fr));gap:12px}
.gcard{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:12px 14px}
.gcard.done{border-left:4px solid var(--grass)}
.gcard.po{border-left:4px solid var(--crimson)}
.gc-head{display:flex;align-items:center;justify-content:space-between;gap:8px;
  margin-bottom:9px;padding-bottom:8px;border-bottom:1px solid #EFEBE2}
.gc-stage{font-family:'Barlow Condensed';font-size:.85rem;letter-spacing:.05em;
  text-transform:uppercase;color:var(--slate)}
.gc-team{display:flex;align-items:center;gap:9px;padding:4px 0;color:var(--slate)}
.gc-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.gc-score{font-family:'Barlow Condensed';font-size:1.5rem;font-variant-numeric:tabular-nums;
  min-width:1.6em;text-align:right}
.gc-team.won{color:var(--ink);font-weight:600}
.gc-team.won .gc-score{color:var(--grass)}
.gc-foot{border-top:1px solid #EFEBE2;margin-top:8px;padding-top:7px;
  font-size:.82rem;color:var(--slate)}

/* Only a card whose score actually moved lights up. Deliberately NOT called
   `flash` — that is the site's toast component, which is position:fixed and
   parked off-screen, so a card wearing it vanished off the board entirely. */
.gcard.justin{animation:cardlit 2.2s ease-out 1}
@keyframes cardlit{
  0%{background-color:#FFF6D8;border-color:#E3C15E}
  100%{background-color:#fff}
}
@media (prefers-reduced-motion:reduce){.gcard.justin{animation:none}}

/* ==================================================================
   Sponsors, executives, in memoriam
   ================================================================== */

/* ---- sponsors index ---- */
.spgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:16px;margin-top:24px}
.spcard{display:flex;gap:14px;align-items:flex-start;padding:16px;background:#fff;
  border:1px solid var(--line);border-radius:var(--radius);text-decoration:none;color:inherit}
.spcard:hover{border-color:var(--ink)}
.spcard h3{margin:0 0 4px;font-size:1.15rem}
.spcard p{margin:0 0 6px;font-size:.92rem;color:var(--slate)}
.spcard .spbody{min-width:0}
.spcard .spteam{display:flex;align-items:center;gap:8px;font-size:.85rem;margin:0;
  font-family:'Barlow Condensed';letter-spacing:.03em}
.splogo{border:1px solid var(--line);border-radius:var(--radius);background:#fff;
  object-fit:contain;padding:4px;flex:0 0 auto}
.spcard .splogowrap{flex:0 0 auto}

/* ---- one sponsor ---- */
.sphead{display:flex;gap:20px;align-items:flex-start;margin:14px 0 20px}
.sphead .crest{width:96px;height:96px;font-size:1.9rem;flex:0 0 96px}
/* A standing offer is the one thing a member actually acts on, so it gets
   the loud treatment rather than sitting in a list of contact details. */
.spoffer{display:flex;gap:14px;align-items:flex-start;background:var(--sand);
  border-left:4px solid var(--crimson);border-radius:var(--radius);padding:14px 18px}
.spoffer p{margin:0;font-size:1.02rem}
.spcontact p{margin:0 0 9px;padding-bottom:9px;border-bottom:1px solid #EFEBE2}
.spcontact p:last-child{margin:0;padding:0;border-bottom:0}

/* ---- executives ---- */
.execrow{display:grid;grid-template-columns:190px 1fr auto;gap:16px;align-items:start;
  padding:14px 18px;border-bottom:1px solid #EFEBE2}
.execrow:last-child{border-bottom:0}
.execrole{font-family:'Barlow Condensed';font-size:1.1rem;font-weight:600;letter-spacing:.03em}
.execwho b{font-size:1.02rem}
.execwho .calc{font-size:.86rem;margin-top:2px}
.execcontact{display:flex;flex-direction:column;gap:2px;text-align:right;font-size:.9rem}
@media(max-width:700px){
  .execrow{grid-template-columns:1fr;gap:6px}
  .execcontact{text-align:left;flex-direction:row;gap:14px}
}

/* ---- in memoriam ----
   No crimson and no numbers. This is the one page on the site that is not
   about the standings, and it should not look like the rest of it. */
.memhead{max-width:60ch;margin:10px 0 34px}
.memhead h1{margin:0 0 10px}
.memcard{display:flex;gap:22px;align-items:flex-start;padding:26px 0;
  border-top:1px solid var(--line)}
.memcard:first-of-type{border-top:2px solid var(--ink)}
.memphoto{width:110px;height:110px;object-fit:cover;border-radius:var(--radius);
  border:1px solid var(--line);flex:0 0 110px}
.membody{min-width:0;max-width:64ch}
.membody h2{font-size:1.7rem;margin:0 0 2px}
.memyears{font-family:'Barlow Condensed';letter-spacing:.04em;color:var(--slate);
  font-size:1rem;margin:0 0 10px}
.memnote{margin:0;line-height:1.7}
.memfoot{margin-top:34px;padding-top:16px;border-top:1px solid var(--line)}
@media(max-width:620px){
  .memcard{flex-direction:column;gap:14px}
  .memphoto{width:96px;height:96px;flex:0 0 96px}
  .sphead{flex-direction:column;gap:14px}
}

/* One post on the league executive editor. */
.execedit{border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px;margin-bottom:12px;background:#FCFBF8}
.execedit .field:last-of-type{margin-bottom:8px}

/* League history: four sections on one page. */
.histnav{display:flex;flex-wrap:wrap;gap:8px;margin:20px 0 6px}
.histnav a{font-family:'Barlow Condensed';font-size:1rem;letter-spacing:.03em;
  background:#fff;border:1px solid var(--line);border-radius:999px;
  padding:6px 15px;text-decoration:none;color:var(--slate)}
.histnav a:hover{border-color:var(--ink);color:var(--ink)}
.histpanel{margin-top:22px;scroll-margin-top:70px}

/* ==================================================================
   Scoring a game live, from the dugout.
   Read at arm's length, in the dark, by someone holding a beer. Every
   target is bigger than it needs to be on purpose.
   ================================================================== */
.tile.live{border-left-color:var(--grass)}

.liveline{display:flex;align-items:center;gap:10px;margin:4px 0 16px;
  font-family:'Barlow Condensed';font-size:1.25rem;letter-spacing:.02em}
.liveline #liveUp{margin-left:auto;color:var(--slate);font-size:1.05rem}
.livedot{width:11px;height:11px;border-radius:50%;background:var(--crimson);
  animation:pulse 2s ease-in-out infinite}
@media (prefers-reduced-motion:reduce){.livedot{animation:none}}

.livescores{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.livecard{border:2px solid var(--line);border-radius:var(--radius);background:#fff;
  padding:14px 12px;text-align:center}
.livecard.ahead{border-color:var(--crimson)}
.livename{font-family:'Barlow Condensed';font-size:1.15rem;font-weight:600;
  line-height:1.15;min-height:2.4em;display:flex;align-items:center;justify-content:center}
.livenum{font-family:'Barlow Condensed';font-size:4.2rem;font-weight:700;line-height:1;
  font-variant-numeric:tabular-nums;margin:2px 0 10px}

/* The run button is the one thing tapped a hundred times a night. */
main.coach .livecard .big.livebtn{background:var(--ink);font-size:1.35rem;padding:16px 8px;min-height:58px}
main.coach .livecard .big.livebtn:hover{background:#000}
main.coach .big.quiet.liveundo{font-size:1rem;padding:10px 8px;min-height:44px}
main.coach .big.quiet{background:#fff;color:var(--ink);border:2px solid var(--line)}
main.coach .big.quiet:hover{background:#FCFBF8;border-color:var(--slate)}
main.coach .big.hr{background:var(--grass);margin-top:16px}
main.coach .big.hr:hover{background:#24402F}
main.coach .big.danger{background:var(--crimson);margin-top:16px}

.hrteams{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:14px}
.hrteam{font-family:'Barlow Condensed';font-size:1.15rem;font-weight:600;cursor:pointer;
  padding:14px 10px;border-radius:var(--radius);border:2px solid var(--line);
  background:#fff;color:var(--slate);min-height:52px}
.hrteam.on{border-color:var(--crimson);background:#FDF3F5;color:var(--ink)}

@media(max-width:380px){
  .livenum{font-size:3.4rem}
  .livename{font-size:1rem}
}

/* ==================================================================
   The pavilion screen: ticker, live game cards, and big screen mode.
   ================================================================== */

/* A single scrolling line of what just happened. Newest first, so the
   thing that made people cheer is the thing arriving on the left. */
.ticker{background:var(--ink);border-radius:var(--radius);overflow:hidden;
  margin:22px 0 0;border-left:5px solid var(--crimson)}
.tickertrack{display:flex;gap:0;align-items:stretch;overflow-x:auto;
  scrollbar-width:none;-webkit-overflow-scrolling:touch}
.tickertrack::-webkit-scrollbar{display:none}
.tickitem{display:flex;align-items:center;gap:9px;white-space:nowrap;
  padding:13px 20px;color:#E7E9EB;font-size:.95rem;
  border-right:1px solid #262A2F}
.tickitem:first-child{color:#fff;font-weight:600;background:#1C1F23}
.ticktag{font-family:'Barlow Condensed';font-size:.78rem;letter-spacing:.08em;
  color:var(--crimson)}
.ticktag.final{color:#8FBF9F}

/* Games in progress. */
.nowgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px;margin-top:16px}
.nowcard{background:#fff;border:1px solid var(--line);border-left:5px solid var(--crimson);
  border-radius:var(--radius);padding:14px 16px}
.nowhead{display:flex;align-items:center;gap:10px;margin-bottom:10px;
  font-family:'Barlow Condensed';font-size:.92rem;letter-spacing:.04em;color:var(--slate)}
/* NOT uppercased: a knockout round called "Final" set in caps beside a LIVE
   badge reads as a contradiction — "LIVE … FINAL" on the same line. */
.nowstage{margin-left:auto;font-size:.85rem}
.nowteam{display:flex;align-items:center;gap:10px;padding:6px 0;color:var(--slate)}
.nowname{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:1.05rem}
.nowscore{font-family:'Barlow Condensed';font-size:2rem;font-variant-numeric:tabular-nums;
  min-width:1.6em;text-align:right;line-height:1}
.nowteam.ahead{color:var(--ink);font-weight:600}
.nowteam.ahead .nowscore{color:var(--grass)}

/* ---- big screen mode ----
   Read from twenty feet by people not looking for anything in particular.
   Everything that is navigation, chrome or small print goes away. */
body.bigscreen .top,
body.bigscreen nav.main,
body.bigscreen footer,
body.bigscreen .livestamp #liveNow,
body.bigscreen #liveFilters,
body.bigscreen .sub{display:none !important}
body.bigscreen{background:var(--ink)}
body.bigscreen .view{padding:0 0 20px}
body.bigscreen .wrap{max-width:none;padding:0 26px}
body.bigscreen .livehead{padding:18px 0 6px}
body.bigscreen h1{font-size:3.4rem;color:#fff}
body.bigscreen .eyebrow{font-size:1.3rem;color:#fff}
body.bigscreen .livestamp{color:#8E959E;font-size:1.1rem}
body.bigscreen .ticker{margin-top:10px;border-radius:0;border-left-width:8px}
body.bigscreen .tickitem{font-size:1.5rem;padding:18px 30px}
body.bigscreen .ticktag{font-size:1.1rem}
body.bigscreen .nowgrid{grid-template-columns:repeat(auto-fit,minmax(430px,1fr));gap:20px}
body.bigscreen .nowcard{background:#0D0F11;border-color:#262A2F;padding:22px 26px}
body.bigscreen .nowhead{font-size:1.2rem;color:#8E959E}
body.bigscreen .nowname{color:#C4C8CE;font-size:1.8rem}
body.bigscreen .nowteam.ahead .nowname{color:#fff}
body.bigscreen .nowscore{font-size:4.2rem}
body.bigscreen .tiles{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px}
body.bigscreen .tile{background:#0D0F11;border-color:#262A2F}
body.bigscreen .tile b{font-size:3rem;color:#fff}
body.bigscreen .tile span,body.bigscreen .tile small{color:#8E959E;font-size:1.05rem}
body.bigscreen .panel{background:#0D0F11;border-color:#262A2F}
body.bigscreen .panel-h{background:#1C1F23;border-color:#262A2F}
body.bigscreen .panel-h h3{color:#fff;font-size:1.8rem}
body.bigscreen .panel-h .note{color:#8E959E;font-size:1.1rem}
body.bigscreen table th{color:#8E959E;font-size:1.2rem;border-color:#262A2F}
body.bigscreen table td{color:#C4C8CE;font-size:1.5rem;border-color:#1D2126}
body.bigscreen tbody tr:nth-child(odd){background:#131619}
body.bigscreen .team-cell,body.bigscreen table a{color:#fff}
body.bigscreen .bracket-round{flex:0 0 380px;min-width:380px}
body.bigscreen .bracket-title{color:#fff;font-size:1.7rem}
body.bigscreen .bracket-game{background:#0D0F11;border-color:#262A2F}
body.bigscreen .bteam-row{color:#8E959E;font-size:1.4rem;padding:9px 0}
body.bigscreen .bteam-row.won{color:#fff}
body.bigscreen .bteam-row .bpts{font-size:2.2rem}
body.bigscreen .bracket-meta{color:#8E959E;font-size:1.1rem;border-color:#262A2F}
body.bigscreen .gcards{grid-template-columns:repeat(auto-fill,minmax(340px,1fr))}
body.bigscreen .gcard{background:#0D0F11;border-color:#262A2F}
body.bigscreen .gc-team{color:#8E959E;font-size:1.3rem}
body.bigscreen .gc-team.won{color:#fff}
body.bigscreen .gc-score{font-size:2.4rem}
body.bigscreen .gc-stage,body.bigscreen .gc-foot{color:#8E959E;font-size:1.05rem}
body.bigscreen .gc-head,body.bigscreen .gc-foot{border-color:#262A2F}

/* Big screen mode contrast fixes. The palette is built for ink-on-chalk;
   on a dark TV three things disappeared. */
/* The way out has to be visible, or the TV is stuck in big screen mode. */
body.bigscreen .btn.ghost{border-color:#4A4E55;color:#fff;background:transparent}
body.bigscreen .btn.ghost:hover{border-color:#fff}
/* --grass is a near-black green: fine on chalk, invisible on #0D0F11. */
body.bigscreen .nowteam.ahead .nowscore,
body.bigscreen .gc-team.won .gc-score,
body.bigscreen .bteam-row.won .bpts,
body.bigscreen .pos{color:#8FBF9F}
body.bigscreen .neg{color:#E8899A}
/* Division and pool headers use .divhead, not .panel-h. */
body.bigscreen .divpanel .divhead{background:#1C1F23;color:#fff;
  border-color:#262A2F;font-size:1.7rem}
body.bigscreen .empty,body.bigscreen .calc{color:#8E959E}

/* Highlight the teams through to the finals, in the admin's summary table. */
.derbylead td{background:#FDF3F5}
body.bigscreen .derbylead td{background:#1C1F23}

/* ==================================================================
   Shop. A window onto the league's team store, in the league's colours.
   ================================================================== */
.shopbar{display:flex;flex-wrap:wrap;align-items:center;gap:14px;margin-top:20px}
.shopgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:16px;margin-top:18px}
.shopcard{display:flex;flex-direction:column;background:#fff;border:1px solid var(--line);
  border-radius:var(--radius);overflow:hidden}
.shopimg{display:block;width:100%;aspect-ratio:4/3;object-fit:cover;background:#F2EEE6}
.shopimg.placeholder{background:
  repeating-linear-gradient(45deg,#F2EEE6,#F2EEE6 10px,#EBE5D9 10px,#EBE5D9 20px)}
.shopbody{padding:13px 15px;display:flex;flex-direction:column;flex:1}
.shopbody h3{margin:0 0 4px;font-size:1.08rem;line-height:1.2}
.shopbody .calc{font-size:.85rem;margin:0 0 8px}
.shopfoot{margin-top:auto;display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding-top:10px;border-top:1px solid #EFEBE2}
.shopprice{font-family:'Barlow Condensed';font-size:1.35rem;font-variant-numeric:tabular-nums}
body.bigscreen .shopcard{background:#0D0F11;border-color:#262A2F}

/* In memoriam is the only page that stays hidden until it has something on
   it — an empty memorial page is worse than no link. History and the shop
   now ship with their content, so they are always there.

   (This used to hide all three, which meant a fresh deploy looked as though
   nothing had shipped at all.) */
body:not(.has-memorial) [data-memorial-link],
body:not(.has-derby)    [data-derby-link]{display:none !important}

/* ---- league history: awards and the executive roll call ---- */
.awardblock{padding:18px 0;border-top:1px solid #EFEBE2}
.awardblock:first-child{padding-top:0;border-top:0}
.awardblock h4{font-family:'Barlow Condensed';font-size:1.3rem;font-weight:700;margin:0 0 6px}
.awardcite{color:var(--slate);max-width:70ch;margin:0 0 12px;font-size:.95rem}
.awardwins{list-style:none;margin:0;padding:0;
  display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:2px 18px}
.awardwins li{display:flex;gap:12px;align-items:baseline;padding:5px 0;
  border-bottom:1px solid #F4F1EA}
.awardyear{font-family:'Barlow Condensed';color:var(--slate);
  font-variant-numeric:tabular-nums;min-width:2.6em}

.preslist{list-style:none;margin:0;padding:0;
  display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px 18px}
.preslist li{display:flex;flex-direction:column;padding:8px 0;border-bottom:1px solid #F4F1EA}
.preslist .calc{font-size:.85rem}

.execyear{padding:16px 0;border-top:1px solid #EFEBE2}
.execyear:first-child{padding-top:0;border-top:0}
.execyear h4{font-family:'Barlow Condensed';font-size:1.25rem;margin:0 0 8px}
.execyear ul{list-style:none;margin:0;padding:0;
  display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:2px 18px}
.execyear li{padding:4px 0;font-size:.95rem}
.execrole-inline{font-family:'Barlow Condensed';font-size:.8rem;letter-spacing:.05em;
  background:var(--sand);color:#4A4038;border-radius:20px;padding:1px 8px;margin-left:4px}
body.bigscreen .awardblock,body.bigscreen .execyear{border-color:#262A2F}

/* Sponsor logo over its crest. The crest is the fallback: if the logo fails
   to load the image removes itself and the crest is already behind it. */
.splogowrap{position:relative;display:inline-block;flex:0 0 auto}
/* The crest keeps its circle in the middle of the wider tile. */
.splogowrap .crest{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
  width:48px;height:48px;font-size:1.05rem}
.splogowrap .splogo{position:absolute;inset:0;width:100%;height:100%;
  object-fit:contain;background:#fff;border:1px solid var(--line);
  border-radius:var(--radius);padding:6px}
.sphead .splogowrap{width:200px !important;height:104px !important}
.sphead .splogowrap .crest{width:96px;height:96px;font-size:1.9rem}

/* "Also on right now" on the coach's live screen — the other diamonds. */
.othergames{margin-top:26px;border-top:1px solid var(--line);padding-top:16px}
.othergames h3{font-family:'Barlow Condensed';font-size:1.15rem;letter-spacing:.03em;
  color:var(--slate);margin:0 0 10px}
.otherrow{display:grid;grid-template-columns:1fr auto auto auto 1fr;gap:8px;align-items:center;
  padding:10px 0;border-bottom:1px solid #EFEBE2;font-size:.95rem}
.otherrow:last-child{border-bottom:0}
.otherrow b{font-family:'Barlow Condensed';font-size:1.35rem;font-variant-numeric:tabular-nums}
.othername{display:flex;align-items:center;gap:7px;min-width:0;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.otherrow .othermid{color:var(--slate)}
.otherinn{grid-column:1/-1;color:var(--slate);font-size:.82rem;
  font-family:'Barlow Condensed';letter-spacing:.04em}

/* ==================================================================
   Home run derby.

   Teams of two hitters, one tap per pitch. Three screens share these
   styles: the public board on derby.html, the scorer's pad on
   derby-scoring.html, and the office's setup rows in the admin panel.

   Everything is prefixed d- so it cannot collide with the rest of the
   site, and it all has to survive big screen mode — a pavilion TV twenty
   feet away, where a number quietly changing is invisible.
   ================================================================== */

/* The plate sits beside the tables on a laptop and above them on a phone,
   because the hitter who is up is what people actually look at. */
.dlayout{display:grid;grid-template-columns:minmax(0,1fr) 340px;
  grid-template-areas:"main side";gap:24px;align-items:start;margin-top:22px}
.dmain{grid-area:main;display:flex;flex-direction:column;gap:24px;min-width:0}
.dside{grid-area:side;display:flex;flex-direction:column;gap:16px;position:sticky;top:16px}
@media(max-width:900px){
  .dlayout{grid-template-columns:minmax(0,1fr);grid-template-areas:"side" "main";gap:20px}
  .dside{position:static}
}

.dlabel{font-family:'Barlow Condensed';font-weight:600;font-size:.8rem;
  letter-spacing:.08em;text-transform:uppercase;color:var(--slate)}

/* ---- at the plate ---- */
.dplate{background:var(--ink);color:#fff;border-radius:var(--radius);
  padding:16px;display:flex;flex-direction:column;gap:14px}
.dplate .dlabel{color:#8E959E}
.dplate-top{display:flex;justify-content:space-between;gap:10px;align-items:center}
.dplate-main{display:flex;align-items:flex-end;gap:14px}
.dplate-name{font-family:'Barlow Condensed';font-weight:700;font-size:1.9rem;line-height:1.05}
.dplate-team{color:#8E959E;font-size:.9rem;margin-top:2px}
.dplate-pts{margin-left:auto;text-align:center;display:flex;flex-direction:column;align-items:center}
.dplate-pts .big{font-family:'Barlow Condensed';font-weight:700;font-size:3.6rem;
  line-height:.9;font-variant-numeric:tabular-nums}
.dplate-count{display:flex;flex-wrap:wrap;gap:6px 16px;font-size:.9rem;color:#8E959E}
.dplate-count b{color:#fff;font-family:'Barlow Condensed';font-size:1.1rem;
  font-variant-numeric:tabular-nums}
.dplate.idle p{color:#8E959E;margin:0}
.dplate.homer .dplate-pts .big{animation:dpop .7s ease-out}
@keyframes dpop{0%{transform:scale(1.35)}100%{transform:scale(1)}}

/* The one moment worth shouting about. */
.dshout{font-family:'Barlow Condensed';font-weight:700;font-size:1rem;letter-spacing:.08em;
  text-transform:uppercase;color:#fff;background:var(--crimson);padding:3px 10px;
  border-radius:var(--radius)}
.dshout.money{background:#E7B530;color:var(--ink)}
.dmoney-flag{display:inline-flex;align-items:center;gap:6px;color:#E7B530;
  font-family:'Barlow Condensed';font-weight:600;letter-spacing:.04em;font-size:1rem}
.dball{width:18px;height:18px;flex:0 0 18px}

/* ---- the ten pitches, drawn ---- */
.dstrip{--dcell:#EFEBE2;--dcell-line:var(--line);--dcell-ink:var(--ink);--dcell-muted:var(--slate);
  display:grid;grid-template-columns:repeat(10,minmax(0,1fr));gap:4px}
.dplate .dstrip{--dcell:#1D2125;--dcell-line:#3A3F45;--dcell-ink:#fff;--dcell-muted:#8E959E}
.dcell{height:36px;border-radius:2px;display:flex;align-items:center;justify-content:center;
  font-family:'Barlow Condensed';font-weight:700;font-size:1rem;background:var(--dcell);
  color:var(--dcell-muted);border:1.5px solid transparent;font-variant-numeric:tabular-nums}
.dcell.empty{background:transparent;border:1.5px dashed var(--dcell-line)}
.dcell.next{background:transparent;border:2px solid var(--dcell-ink)}
.dcell.next.money-next{border-color:#E7B530;background:rgba(231,181,48,.16)}
.dcell.out{color:var(--dcell-ink)}
.dcell.hr{background:var(--crimson);color:#fff}
.dcell.money{border-color:#E7B530}
.dcell.money.hr{background:#E7B530;color:var(--ink)}
.dlegend{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:.8rem;color:var(--slate)}
.dlegend span{display:inline-flex;align-items:center;gap:5px}
.dlegend .dcell{width:22px;height:20px;font-size:.78rem;display:inline-flex}

/* ---- the format card ---- */
.drules .panel-h h3{font-size:1.2rem}
.drulelist{list-style:none;margin:0;padding:6px 14px 10px}
.drulelist li{display:grid;grid-template-columns:4.6rem 1fr;gap:10px;padding:7px 0;
  border-bottom:1px solid #EFEBE2;font-size:.9rem;align-items:baseline}
.drulelist li:last-child{border-bottom:0}
.drulelist b{font-family:'Barlow Condensed';font-weight:700;font-size:1.15rem;line-height:1}
.drulelist .mb b{color:#9A6B00}
.drulefoot{padding:0 14px 12px}

/* ---- the standings ---- */
.dsection+.dsection{margin-top:4px}
.dsec-h{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 14px;margin-bottom:8px}
.dsec-h h2{font-size:1.9rem}
.dsec-h .note{color:var(--slate);font-size:.9rem}
.drows{list-style:none;margin:0;padding:0;background:#fff;border:1px solid var(--line);
  border-radius:var(--radius)}
.drow{display:grid;grid-template-columns:2.6rem minmax(0,1fr) auto;gap:12px;align-items:center;
  padding:11px 14px;border-bottom:1px solid #EFEBE2}
.drow:last-child{border-bottom:0}
.drank{width:2.1rem;height:2.1rem;display:flex;align-items:center;justify-content:center;
  font-family:'Barlow Condensed';font-weight:700;font-size:1.05rem;border:1.5px solid var(--line);
  border-radius:var(--radius);color:var(--slate);font-variant-numeric:tabular-nums}
.drow.adv .drank{background:var(--grass);border-color:var(--grass);color:#fff}
.drow.champ .drank{background:#E7B530;border-color:#E7B530;color:var(--ink)}
.dteam{min-width:0}
.dteam b{font-family:'Barlow Condensed';font-weight:700;font-size:1.3rem;line-height:1.1;
  display:flex;align-items:center;gap:8px}
.dhitters{display:flex;flex-wrap:wrap;gap:2px 16px;font-size:.88rem;color:var(--slate);margin-top:2px}
.dhitter{display:inline-flex;align-items:baseline;gap:6px}
.dhitter em{font-style:normal;font-family:'Barlow Condensed';font-weight:700;font-size:1rem;
  color:var(--ink);font-variant-numeric:tabular-nums}
/* A dot beside whoever is at the plate, so the row and the plate agree. */
.dhitter.up{color:var(--ink)}
.dhitter.up::before{content:"";width:7px;height:7px;border-radius:50%;
  background:var(--crimson);align-self:center}
.dhitter.wait em{color:#9A9186;font-weight:500}
.dtotal{font-family:'Barlow Condensed';font-weight:700;font-size:2.2rem;line-height:1;
  min-width:2.5ch;text-align:right;font-variant-numeric:tabular-nums}
.drow.bump{animation:dbump 1.6s ease-out}
@keyframes dbump{0%{background:#FDF3F5}100%{background:transparent}}

/* The line the whole prelim is about. */
.dcut{display:flex;align-items:center;gap:10px;padding:6px 14px;background:#E6EEE8;
  border-bottom:1px solid #EFEBE2;color:var(--grass);font-size:.82rem}
.dcut .dlabel{color:var(--grass)}
.dcut::after{content:"";flex:1;border-top:1.5px dashed var(--grass);opacity:.5}
.dtie{color:#9A6B00;font-size:.82rem;font-weight:600}

.dchampion{background:var(--ink);color:#fff;border-radius:var(--radius);padding:18px 16px;
  display:flex;flex-direction:column;gap:6px;border-top:5px solid #E7B530}
.dchampion .dlabel{color:#E7B530}
.dchampion h2{font-size:2.4rem}
.dchampion p{color:#8E959E;margin:0}

/* ---- the scorer's pad ---- */
.datbat{background:#fff;border:1px solid var(--line);border-radius:var(--radius);
  padding:14px;display:flex;flex-direction:column;gap:12px;margin-bottom:16px}
.datbat-h{display:flex;align-items:flex-end;gap:12px}
.datbat-h .dwho b{font-family:'Barlow Condensed';font-weight:700;font-size:1.7rem;
  line-height:1.05;display:block}
.datbat-h .dwho span{color:var(--slate);font-size:.9rem}
.datbat-h .dpts{margin-left:auto;text-align:center}
.datbat-h .dpts .big{font-family:'Barlow Condensed';font-weight:700;font-size:3rem;
  line-height:.9;display:block;font-variant-numeric:tabular-nums}
.dcounts{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.dcount{background:#EFEBE2;border-radius:var(--radius);padding:8px 10px;
  display:flex;align-items:baseline;justify-content:space-between}
.dcount b{font-family:'Barlow Condensed';font-size:1.5rem;font-variant-numeric:tabular-nums}
.dcount b small{font-size:1rem;color:#9A9186;font-weight:600}
.dmoneybar{display:flex;align-items:center;gap:10px;background:#FBF1D6;
  border:1.5px solid #E7B530;border-radius:var(--radius);padding:10px 12px;
  font-weight:600;margin-bottom:10px}
.dmoneybar .dball{width:24px;height:24px;flex-basis:24px}

/* One enormous target, because it is tapped in the dark with people watching. */
.dpad{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.dpad button{border-radius:var(--radius);cursor:pointer;font-family:'Barlow Condensed';
  font-weight:700;letter-spacing:.04em;touch-action:manipulation}
.dpad button:disabled{opacity:.4;cursor:not-allowed}
.dhr{grid-column:1/-1;min-height:96px;border:0;background:var(--crimson);color:#fff;
  font-size:1.9rem;display:flex;flex-direction:column;align-items:center;justify-content:center;
  line-height:1}
.dhr small{font-size:.95rem;font-weight:600;letter-spacing:.06em;opacity:.9;margin-top:4px}
.dhr:not(:disabled):active{background:var(--crimson-dark)}
.dhr.money{background:#E7B530;color:var(--ink)}
.dout,.dtake{min-height:68px;background:#fff;border:1.5px solid var(--ink);font-size:1.3rem;
  display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1.05}
.dout small,.dtake small{font-family:'Barlow',sans-serif;font-weight:500;font-size:.78rem;
  letter-spacing:0;color:var(--slate);margin-top:3px}
.dtake{border-color:var(--line)}
.dundo{grid-column:1/-1;min-height:46px;background:transparent;border:1.5px solid var(--line);
  font-size:1.05rem;color:var(--slate)}
.dnext{width:100%;min-height:56px;border:0;border-radius:var(--radius);background:var(--ink);
  color:var(--chalk);font-family:'Barlow Condensed';font-weight:700;font-size:1.25rem;
  letter-spacing:.03em;cursor:pointer;padding:8px 14px;margin-bottom:10px}
.ddone{background:#E6EEE8;color:var(--ink);border-radius:var(--radius);padding:10px 12px;
  margin-bottom:10px}
.ddone b{font-family:'Barlow Condensed';font-size:1.15rem}

/* Picking the finalists: a swing-off is settled on the field, so the scorer
   ticks who goes through rather than the maths deciding it. */
.dpicks{list-style:none;margin:0 0 12px;padding:0;display:flex;flex-direction:column;
  border:1px solid #EFEBE2;border-radius:var(--radius)}
.dpicks label{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:10px;
  align-items:center;padding:8px 10px;border-bottom:1px solid #EFEBE2;cursor:pointer}
.dpicks li:last-child label{border-bottom:0}
.dpicks input{width:20px;height:20px;accent-color:var(--grass)}
.dpicks .t{font-family:'Barlow Condensed';font-weight:700;font-size:1.25rem;
  font-variant-numeric:tabular-nums}
/* Armed: the button has been tapped once and is waiting to be confirmed. */
.btn.armed{background:#E7B530;color:var(--ink)}

/* ---- the office's setup rows ---- */
.derbyrow{display:grid;grid-template-columns:minmax(150px,1fr) minmax(0,1fr) minmax(0,1fr);
  gap:10px;align-items:center;padding:9px 0;border-bottom:1px solid #EFEBE2}
.derbyrow:last-child{border-bottom:0}
.derbyrow.off{opacity:.5}
.derbyin{display:flex;align-items:center;gap:8px;cursor:pointer;min-width:0}
.derbyin b{font-family:'Barlow Condensed';font-size:1.1rem;font-weight:600;
  min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.derbyin input{width:19px;height:19px;flex:0 0 19px;accent-color:var(--grass)}
.derbyrow input[type=text]{width:100%;padding:8px 10px;border:1.5px solid var(--line);
  border-radius:var(--radius);font-size:.95rem;font-family:inherit}
@media(max-width:620px){
  .derbyrow{grid-template-columns:1fr 1fr;row-gap:8px}
  .derbyin{grid-column:1/-1}
}

/* ---- big screen: the pavilion TV ---- */
body.bigscreen .dlayout{gap:30px}
body.bigscreen .drows{background:#0D0F11;border-color:#262A2F}
body.bigscreen .drow{border-bottom-color:#20242A}
body.bigscreen .dteam b{font-size:2.3rem;color:#fff}
body.bigscreen .dhitters{font-size:1.15rem}
body.bigscreen .dhitter em{color:#fff;font-size:1.35rem}
body.bigscreen .dhitter.up{color:#fff}
body.bigscreen .dhitter.wait em{color:#737980}
body.bigscreen .dtotal{font-size:3.4rem;color:#fff}
body.bigscreen .drank{font-size:1.6rem;width:2.8rem;height:2.8rem;border-color:#3A3F45;color:#A6ACB3}
body.bigscreen .dsec-h h2{font-size:2.8rem;color:#fff}
body.bigscreen .dcut{background:#1B2A22;border-bottom-color:#20242A}
body.bigscreen .dplate-name{font-size:3rem}
body.bigscreen .dplate-pts .big{font-size:5.4rem}
body.bigscreen .dcell{height:46px;font-size:1.3rem}
body.bigscreen .dchampion h2{font-size:4rem}
body.bigscreen .drow.bump{animation:dbumpdark 2.2s ease-out}
@keyframes dbumpdark{0%{background:#3A2F14}100%{background:transparent}}
/* The format card and the legend are furniture a TV across a field does not need. */
body.bigscreen .drules,body.bigscreen .dlegend{display:none}

@media (prefers-reduced-motion:reduce){
  .drow.bump,.dplate.homer .dplate-pts .big{animation:none}
}
