﻿
/* Badmintonia Circuit â€” Main Stylesheet */

:root {
  /* ── Premium Black (default theme) — structural ── */
  --bg:#07101f;--bg2:#0d1829;--bg3:#142236;--bg4:#1c2f47;
  --card:#0e1d32;--border:#1a3050;
  --text:#e0ecff;--text2:#a8c4e0;--muted:#4e6d94;
  --r:12px;
  /* ── Shared semantic accents — define ONCE, never overridden per theme ── */
  --gold:#f5c518;--gold2:#c99a0a;--gold-text:#2a2208;
  --success:#376842;--success-text:#eaf6ec;--green:#376842;
  --danger:#9c473b;--danger-text:#fdeeea;--red:#9c473b;
  --brand-red:#E11D48;
  /* ── Category hues (dark-theme values; darkened for beige below) ── */
  --blue:#3b82f6;--info:#60a5fa;--info2:#93c5fd;
  --pink:#f472b6;--pink2:#f9a8d4;
  --purple:#c084fc;--purple2:#a855f7;
  --cyan:#22d3ee;--cyan2:#06b6d4;
  --orange:#fb923c;--teal:#34d399;--amber:#f59e0b;
  /* ── RGB triplets for tints: rgba(var(--x-rgb), .nn) ── */
  --gold-rgb:245,197,24;--success-rgb:55,104,66;--danger-rgb:156,71,59;
  --blue-rgb:59,130,246;--info-rgb:96,165,250;--pink-rgb:244,114,182;
  --purple-rgb:168,85,247;--cyan-rgb:34,211,238;--orange-rgb:251,146,60;
  --bg-rgb:7,16,31;--border-rgb:26,48,80;--ink-rgb:224,236,255;
}
/* ── Warm Beige theme — overrides structural + darkens hues for contrast on cream ── */
[data-theme="beige"] {
  --bg:#f3ecdd;--bg2:#fbf6ec;--bg3:#fff9ef;--bg4:#f3e8d2;
  --card:#fbf6ec;--border:#e2d6bf;
  --text:#33302a;--text2:#8a7d62;--muted:#9a8a6a;
  --blue:#2563eb;--info:#2563eb;--info2:#3b82f6;
  --pink:#db2777;--pink2:#ec4899;
  --purple:#9333ea;--purple2:#7e22ce;
  --cyan:#0891b2;--cyan2:#0e7490;
  --orange:#ea580c;--teal:#0d9488;--amber:#d97706;
  --info-rgb:37,99,235;--blue-rgb:37,99,235;--pink-rgb:219,39,119;
  --purple-rgb:147,51,234;--cyan-rgb:8,145,178;--orange-rgb:234,88,12;
  --bg-rgb:243,236,221;--border-rgb:226,214,191;--ink-rgb:51,48,42;
  /* --gold / --success / --danger stay shared, not overridden */
}
/* ── Theme switcher (Home card) ── */
.theme-seg{display:inline-flex;border:1px solid var(--border);border-radius:100px;background:var(--bg3);padding:2px;gap:2px;}
.theme-seg-btn{padding:.28rem .7rem;border:none;background:transparent;color:var(--text2);font-family:'DM Sans',sans-serif;font-size:.72rem;font-weight:600;cursor:pointer;border-radius:100px;transition:all .15s;}
.theme-seg-btn:hover{color:var(--text);}
.theme-seg-btn.active{background:var(--gold);color:var(--gold-text);}
*{box-sizing:border-box;margin:0;padding:0;}
html,body{height:100%;background:var(--bg);color:var(--text);font-family:'DM Sans',sans-serif;overflow-x:hidden;}

/* ── Global scrollbars — dark grey to match app theme ── */
::-webkit-scrollbar            { width:6px; height:6px; }
::-webkit-scrollbar-track      { background:var(--bg2); }
::-webkit-scrollbar-thumb      { background:var(--border); border-radius:3px; }
::-webkit-scrollbar-thumb:hover{ background:#3d6090; }
::-webkit-scrollbar-corner     { background:var(--bg2); }
/* Firefox */
* { scrollbar-width:thin; scrollbar-color:var(--border) var(--bg2); }
body::before{content:'';position:fixed;inset:0;
  background-image:linear-gradient(rgba(var(--gold-rgb),.022) 1px,transparent 1px),linear-gradient(90deg,rgba(var(--gold-rgb),.022) 1px,transparent 1px);
  background-size:44px 44px;pointer-events:none;z-index:0;}
.shell{position:relative;z-index:1;display:flex;flex-direction:column;height:100vh;overflow:hidden;}

/* â”€â”€ NAV â”€â”€ */
nav{display:flex;align-items:center;gap:0;background:var(--bg2);border-bottom:1px solid var(--border);padding:0 1rem;height:54px;position:sticky;top:0;z-index:50;flex-wrap:nowrap;}
.nav-logo{font-family:'Bebas Neue',sans-serif;font-size:1.5rem;letter-spacing:.1em;color:var(--gold);margin-right:1rem;white-space:nowrap;flex-shrink:0;}
.nav-logo span{color:var(--text);}
.nav-tabs{display:flex;gap:2px;flex:1;overflow-x:auto;}
.nav-tab{padding:.4rem .8rem;border:none;background:transparent;color:var(--muted);font-family:'DM Sans',sans-serif;font-size:.78rem;font-weight:500;cursor:pointer;border-radius:6px;white-space:nowrap;transition:all .15s;border-bottom:2px solid transparent;}
.nav-tab:hover{color:var(--text);}
.nav-tab.active{color:var(--gold);border-bottom-color:var(--gold);background:rgba(var(--gold-rgb),.06);}
.tab-badge{display:inline-block;background:var(--danger);color:#fff;border-radius:100px;font-size:.6rem;font-weight:700;padding:0 5px;margin-left:4px;vertical-align:middle;line-height:1.5;}
.nav-right{display:flex;gap:6px;margin-left:auto;padding-left:.75rem;flex-shrink:0;align-items:center;}

/* â”€â”€ SYNC INDICATOR â”€â”€ */
.sync-dot{width:8px;height:8px;border-radius:50%;background:var(--muted);flex-shrink:0;transition:background .3s;}
.sync-dot.synced{background:var(--green);}
.sync-dot.syncing{background:var(--gold);animation:pulse 1s infinite;}
.sync-dot.error{background:var(--red);}
.sync-dot.offline{background:var(--muted);}
.sync-dot.denied{background:var(--red);box-shadow:0 0 6px rgba(var(--danger-rgb),.6);}
@keyframes pulse{0%,100%{opacity:1;}50%{opacity:.4;}}
.sync-label{font-size:.68rem;color:rgba(var(--ink-rgb),.35);white-space:nowrap;}

/* â”€â”€ ROLE BADGE â”€â”€ */
.role-badge{font-size:.65rem;font-weight:700;padding:2px 9px;border-radius:20px;letter-spacing:.07em;flex-shrink:0;}
.role-admin{background:rgba(var(--gold-rgb),.15);color:var(--gold);border:1px solid rgba(var(--gold-rgb),.3);}
.role-scorer{background:rgba(var(--blue-rgb),.15);color:var(--blue);border:1px solid rgba(var(--blue-rgb),.3);}
.role-viewer{background:rgba(var(--ink-rgb),.15);color:var(--muted);border:1px solid rgba(var(--ink-rgb),.3);}
.role-casual{background:rgba(var(--success-rgb),.15);color:var(--green);border:1px solid rgba(var(--success-rgb),.3);}

/* â”€â”€ PAGES â”€â”€ */
.page{display:none;flex:1;padding:1.5rem 1rem 4rem;max-width:1060px;margin:0 auto;width:100%;}
.page.active{display:block;}

/* â”€â”€ CARDS â”€â”€ */
.card{background:var(--card);border:1px solid var(--border);border-radius:var(--r);padding:1.25rem 1.5rem;margin-bottom:1rem;}
.card-title{font-size:.68rem;text-transform:uppercase;letter-spacing:.15em;color:rgba(var(--ink-rgb),.75);margin-bottom:.85rem;font-weight:500;}

/* â”€â”€ FORMS â”€â”€ */
.field{display:flex;flex-direction:column;gap:5px;margin-bottom:.75rem;}
label.lbl{font-size:.68rem;text-transform:uppercase;letter-spacing:.12em;color:rgba(var(--ink-rgb),.65);font-weight:500;}
/* BUG-09 (audit 2026-09-03): this selector listed only text and number,
   so every email / password / tel field in the app fell back to browser
   defaults — white on the dark theme, ~19px tall, and 13.3px type, which
   is under the 16px threshold that makes iOS Safari zoom on focus. On the
   public registration form the unstyled email field also missed the
   width:100% below and overflowed its card by 29px at 375px, clipping the
   right-hand end of what the captain was typing.
   Fields that already carry an inline style are unaffected — inline wins. */
input[type=text],input[type=number],input[type=email],input[type=password],input[type=tel],select,textarea{background:var(--bg3);border:1px solid var(--border);border-radius:8px;color:var(--text);padding:.55rem .85rem;font-family:'DM Sans',sans-serif;font-size:.88rem;outline:none;width:100%;transition:border-color .18s;}
input:focus,select:focus,textarea:focus{border-color:var(--gold);}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:.75rem;}
.row3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:.75rem;}

/* â”€â”€ BUTTONS â”€â”€ */
.btn{padding:.55rem 1.1rem;border-radius:8px;border:1px solid var(--border);background:var(--bg3);color:var(--text);cursor:pointer;font-family:'DM Sans',sans-serif;font-size:.83rem;font-weight:500;transition:all .15s;display:inline-flex;align-items:center;gap:6px;}
.btn:hover{border-color:var(--gold);color:var(--gold);}
.btn-primary{background:var(--gold);border-color:var(--gold);color:#000;font-weight:700;}
.btn-primary:hover{background:var(--gold2);color:#000;}
.btn-sm{padding:.3rem .72rem;font-size:.75rem;}
.filter-tab{padding:.22rem .7rem;border-radius:100px;border:1px solid var(--border);background:var(--bg3);color:var(--muted);cursor:pointer;font-family:'DM Sans',sans-serif;font-size:.75rem;font-weight:500;transition:background .15s,border-color .15s,color .15s;}
.filter-tab:hover{border-color:rgba(var(--gold-rgb),.35);color:var(--text);}
.filter-tab.active{background:rgba(var(--gold-rgb),.15);border-color:rgba(var(--gold-rgb),.5);color:var(--gold);font-weight:700;}
.btn-danger{border-color:rgba(var(--danger-rgb),.45);color:var(--danger);}
.btn-danger:hover{border-color:var(--red);color:var(--red);background:rgba(var(--danger-rgb),.08);}
.btn-green{background:var(--green);border-color:var(--green);color:#000;font-weight:600;}

/* ── MASTER CONTROL BUTTONS ──────────────────────────────────────────────
   All four buttons share the gold fill of the primary action, while each
   KEEPS its own icon/label colour so destructive actions still read as
   destructive (Kent, 2026-08-29). Both --green (#376842) and --danger
   (#9c473b) are dark, so they stay legible on the bright gold.
   The :hover selectors are repeated deliberately: the base .btn:hover
   recolours text to gold, and .btn-danger:hover repaints the background —
   either would undo this on hover without an explicit override. */
.btn-mc{background:var(--gold);border-color:var(--gold);font-weight:700;opacity:1;}
.btn-mc:hover{background:var(--gold2);border-color:var(--gold2);}
.btn-mc.mc-neutral,.btn-mc.mc-neutral:hover{color:#000;}
.btn-mc.mc-green,.btn-mc.mc-green:hover{color:var(--green);}
.btn-mc.mc-danger,.btn-mc.mc-danger:hover{color:var(--danger);}

/* â”€â”€ FORMAT TOGGLE â”€â”€ */
.fmt-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:4px;}
.fmt-btn{background:var(--bg3);border:1.5px solid var(--border);border-radius:10px;padding:.75rem .5rem;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:4px;transition:all .18s;text-align:center;color:var(--text);font-weight:600;}
.fmt-btn.active{border-color:var(--gold);background:rgba(var(--gold-rgb),.07);}
.fmt-icon{font-size:1.4rem;line-height:1;}
.fmt-label{font-size:.78rem;font-weight:600;color:var(--text);}
.fmt-desc{font-size:.65rem;color:var(--text2);}
.fmt-btn.active .fmt-label{color:var(--text);}

/* Per-format colours */
#fmt-rr   {background:rgba(var(--info-rgb),.18);border-color:rgba(var(--info-rgb),.45);}
#fmt-mixed{background:rgba(var(--gold-rgb),.15);border-color:rgba(var(--gold-rgb),.45);}
#fmt-ko   {background:rgba(248,113,113,.18);border-color:rgba(248,113,113,.45);}
#fmt-rr.active   {background:rgba(var(--info-rgb),.32);border-color:rgba(var(--info-rgb),.85);}
#fmt-mixed.active{background:rgba(var(--gold-rgb),.28);border-color:rgba(var(--gold-rgb),.85);}
#fmt-ko.active   {background:rgba(248,113,113,.32);border-color:rgba(248,113,113,.85);}

/* â”€â”€ PLAYERS â”€â”€ */
.players-wrap{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:.75rem;}
.p-tag{display:inline-flex;align-items:center;gap:7px;background:var(--bg3);border:1px solid var(--border);border-radius:6px;padding:.3rem .68rem;font-size:.82rem;}
.p-tag .seed{font-size:.63rem;color:var(--muted);font-family:'DM Mono',monospace;}
.p-tag .rm{cursor:pointer;color:var(--muted);transition:color .15s;}
.p-tag .rm:hover{color:var(--red);}
.p-row{display:flex;gap:8px;align-items:center;}
.p-row input{flex:1;}

/* â”€â”€ STATS BAR â”€â”€ */
.stats-bar{display:grid;grid-template-columns:repeat(4,1fr);gap:.75rem;margin-bottom:1.25rem;}
.stat{background:var(--card);border:1px solid var(--border);border-radius:var(--r);padding:1rem;text-align:center;}
.stat-n{font-family:'Bebas Neue',sans-serif;font-size:2.2rem;color:var(--gold);line-height:1;}
.stat-l{font-size:.65rem;text-transform:uppercase;letter-spacing:.12em;color:var(--text2);margin-top:2px;}

/* â”€â”€ MATCH CARDS â”€â”€ */
.matches-grid{display:flex;flex-direction:column;gap:.6rem;}
.mc{background:var(--card);border:1px solid var(--border);border-radius:var(--r);padding:.75rem 1rem;display:flex;align-items:center;gap:.75rem;transition:all .15s;margin-bottom:.4rem;}
.mc:hover{background:var(--bg2);}
.mc.live{border-left:3px solid var(--gold);}
.mc.complete{border-left:3px solid var(--green);}
.mc.pending{border-left:3px solid var(--border);}
.mc-ev{font-size:.62rem;font-weight:700;padding:2px 8px;border-radius:4px;flex-shrink:0;white-space:nowrap;}
.mc-body{flex:1;min-width:0;}
.mc-matchup{font-size:.88rem;display:flex;align-items:center;gap:.4rem;flex-wrap:wrap;}
.mc-name{font-weight:500;}
.mc-name.won{color:var(--gold);font-weight:700;}
.mc-name.tbd{color:var(--muted);font-style:italic;}
.mc-vstext{font-size:.7rem;color:var(--text);font-family:'Bebas Neue',sans-serif;letter-spacing:.05em;}
.mc-sub{font-size:.65rem;color:var(--text2);margin-top:2px;}
.mc-score-cell{font-family:'DM Mono',monospace;font-size:.78rem;color:var(--text);min-width:90px;text-align:center;flex-shrink:0;}
.mc-score-cell.done{color:var(--text);}
.mc-status{min-width:96px;text-align:center;flex-shrink:0;font-size:.72rem;font-weight:600;}
.mc-status.complete{color:var(--green);}
.mc-status.live{color:var(--gold);}
.mc-status.pending{color:var(--text);font-weight:400;}
.mc-actions{display:flex;gap:5px;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;}
.btn-scorer{background:var(--gold);border-color:var(--gold);color:#000;font-weight:700;}
.btn-scorer:hover{background:var(--gold2);border-color:var(--gold2);color:#000;}
/* â”€â”€ BWF-STYLE MATCH CARDS (Matches tab) â”€â”€ */
.bwf-courts-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(270px,1fr)); gap:1.1rem; }
.bwf-court-col {}
.bwf-court-header { font-size:1.05rem; font-weight:800; color:var(--text); padding-bottom:.45rem; margin-bottom:.65rem; border-bottom:2px solid var(--border); }
.bwf-round-section { margin-bottom:1.25rem; }
.bwf-round-label { font-size:.75rem; font-weight:700; text-transform:uppercase; letter-spacing:.1em; color:rgba(var(--ink-rgb),.65); margin-bottom:.5rem; }
.bwf-subrnd-label { font-size:.6rem; text-transform:uppercase; letter-spacing:.1em; color:var(--text2); margin-bottom:.25rem; }

.bwf-card { background:var(--card); border:1px solid var(--border); border-radius:10px; overflow:hidden; margin-bottom:.55rem; }
.bwf-card.live  { border-color:var(--gold); }
.bwf-card.complete { opacity:.88; }

.bwf-match-badge { display:flex; align-items:center; justify-content:center; gap:.4rem; padding:.28rem .75rem; border-bottom:1px solid rgba(var(--ink-rgb),.04); }
.bwf-badge-sep { color:var(--border); font-size:.55rem; }
.bwf-live-dot { color:var(--orange); font-size:.58rem; animation:dotBlink 1s ease-in-out infinite; }
@keyframes dotBlink { 50% { opacity:.35; } }

.bwf-card-body { padding:.6rem .75rem; }
.bwf-player-row { display:flex; align-items:center; gap:.35rem; padding:.28rem 0; }
.bwf-player-row:not(:last-child) { border-bottom:1px solid rgba(var(--ink-rgb),.04); }
.bwf-player-name { flex:1; font-size:.8rem; font-weight:600; color:rgba(var(--ink-rgb),.88); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.bwf-player-row.winner .bwf-player-name { color:var(--gold); font-weight:700; }
.bwf-player-row.tbd .bwf-player-name { font-style:italic; }
.bwf-scores { display:flex; gap:.3rem; flex-shrink:0; }
.bwf-set { font-size:.82rem; font-weight:700; color:var(--text); min-width:20px; text-align:right; font-family:'DM Mono',monospace; }
.bwf-set.win { color:var(--text); }
.bwf-player-row.winner .bwf-set.win { color:var(--gold); }

.bwf-card-footer { display:flex; align-items:center; justify-content:space-between; gap:.4rem; padding:.35rem .75rem; background:rgba(0,0,0,.18); border-top:1px solid rgba(var(--ink-rgb),.04); flex-wrap:wrap; }
.bwf-footer-info { font-size:.6rem; color:var(--text2); flex:1; }
.bwf-footer-btns { display:flex; gap:.25rem; flex-shrink:0; }

/* legacy â€” kept for courts/live views */
.mc-player{font-weight:500;font-size:.88rem;}
.mc-player.won{color:var(--gold);}
.mc-center{text-align:center;}
.mc-vs{font-family:'Bebas Neue',sans-serif;font-size:1rem;color:var(--text);}
.mc-score{font-family:'DM Mono',monospace;font-size:.75rem;color:var(--text);}
.mc-score.done{color:var(--text);}
.sdot{width:7px;height:7px;border-radius:50%;display:inline-block;margin-right:4px;}
.sdot-live{background:var(--gold);}
.sdot-done{background:var(--green);}
.sdot-pending{background:var(--muted);}
.badge{display:inline-block;font-size:.6rem;font-weight:600;padding:2px 7px;border-radius:20px;letter-spacing:.07em;}
.badge-rr{background:rgba(var(--blue-rgb),.12);color:var(--blue);border:1px solid rgba(var(--blue-rgb),.2);}
.badge-ko{background:rgba(var(--gold-rgb),.12);color:var(--gold);border:1px solid rgba(var(--gold-rgb),.2);}
.court-badge{font-size:.62rem;font-family:'DM Mono',monospace;background:var(--bg3);border:1px solid var(--border);border-radius:4px;padding:2px 6px;color:var(--muted);}

/* â”€â”€ LIVE SCORE BADGE (on match card when being scored remotely) â”€â”€ */
.live-score-badge{font-family:'Bebas Neue',sans-serif;font-size:1.1rem;color:var(--gold);letter-spacing:.05em;}

/* â”€â”€ STANDINGS â”€â”€ */
.standings-tbl{width:100%;border-collapse:collapse;font-size:.83rem;}
.standings-tbl th{text-align:left;padding:.55rem .75rem;font-size:.64rem;text-transform:uppercase;letter-spacing:.13em;color:var(--text2);border-bottom:1px solid var(--border);}
.standings-tbl td{padding:.6rem .75rem;border-bottom:1px solid rgba(var(--border-rgb),.5);}
.standings-tbl tr:hover td{background:rgba(var(--ink-rgb),.015);}
.rank{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;font-size:.7rem;font-weight:700;font-family:'DM Mono',monospace;}
.r1{background:var(--gold);color:#000;}.r2{background:var(--text2);color:#000;}.r3{background:var(--orange);color:#fff;}.rn{background:var(--bg3);color:var(--text);}

/* â”€â”€ EVENTS TAB â”€â”€ */
.events-tbl{width:100%;border-collapse:collapse;font-size:.83rem;}
.events-tbl th{text-align:left;padding:.55rem .75rem;font-size:.64rem;text-transform:uppercase;letter-spacing:.13em;color:var(--text2);border-bottom:1px solid var(--border);}
.events-tbl td{padding:.65rem .75rem;border-bottom:1px solid rgba(var(--border-rgb),.5);}
.events-tbl tr:last-child td{border-bottom:none;}
.events-tbl tr:hover td{background:rgba(var(--ink-rgb),.015);}
.events-stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:.6rem;margin-top:.75rem;}
.events-stat-card{background:var(--card);border:1px solid var(--border);border-radius:var(--r);padding:.9rem .75rem;text-align:center;}
.events-stat-val{font-family:'Bebas Neue',sans-serif;font-size:1.8rem;color:var(--gold);line-height:1;}
.events-stat-lbl{font-size:.65rem;text-transform:uppercase;letter-spacing:.1em;color:var(--text2);margin-top:.2rem;}
@media(max-width:600px){.events-stats-grid{grid-template-columns:repeat(2,1fr);}}

/* â”€â”€ COURTS â”€â”€ */
.courts-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:.75rem;}
.court-card{background:var(--card);border:1px solid var(--border);border-radius:var(--r);padding:1.1rem;}
.court-card.occ{border-color:var(--gold);}
.court-card.free{border-color:rgba(var(--success-rgb),.4);}
.court-card.court-edit-mode{border-color:rgba(var(--info-rgb),.5);box-shadow:0 0 0 1px rgba(var(--info-rgb),.15);}
.court-name{font-family:'Bebas Neue',sans-serif;font-size:1.25rem;color:var(--gold);margin-bottom:3px;}
.court-name-input:focus{border-color:var(--gold) !important;box-shadow:0 0 0 2px rgba(var(--gold-rgb),.18);}
.court-live-score{font-family:'Bebas Neue',sans-serif;font-size:2rem;color:var(--text);letter-spacing:.05em;text-align:center;margin:.5rem 0;}

/* â”€â”€ DRAG & DROP â€” court assignment â”€â”€ */
.mc[draggable="true"]        { cursor:grab; user-select:none; }
.mc[draggable="true"]:active { cursor:grabbing; }
.court-card.free.drag-over   {
  border-color:var(--gold) !important;
  background:rgba(var(--gold-rgb),.10);
  box-shadow:0 0 0 2px rgba(var(--gold-rgb),.28);
  transform:scale(1.015);
  transition:transform .12s, background .12s;
}
.court-drop-hint {
  font-size:.7rem; color:rgba(var(--success-rgb),.55);
  text-align:center; margin-bottom:.45rem;
  letter-spacing:.04em;
}

/* â”€â”€ BRACKET â”€â”€ */
.bracket-scroll{overflow-x:auto;padding-bottom:1rem;}
.bracket{display:flex;gap:0;align-items:flex-start;}
.br-round{display:flex;flex-direction:column;justify-content:space-around;min-width:185px;}
.br-title{font-size:.63rem;text-transform:uppercase;letter-spacing:.13em;color:var(--muted);text-align:center;padding:.4rem;background:var(--bg4);border-bottom:1px solid var(--border);}
.br-match{margin:5px 8px;background:var(--bg3);border:1px solid var(--border);border-radius:8px;overflow:hidden;}
.br-slot{padding:.42rem .7rem;font-size:.8rem;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;}
.br-slot:last-child{border-bottom:none;}
.br-slot.won{background:rgba(var(--gold-rgb),.1);color:var(--gold);font-weight:600;}
.br-slot.tbd{color:var(--muted);font-style:italic;}
.br-sc{font-family:'DM Mono',monospace;font-size:.7rem;color:var(--text);}

/* â”€â”€ SCOREBOARD (public view) â”€â”€ */
/* â”€â”€ SCOREBOARD ANIMATIONS â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
@keyframes livePulse {
  0%,100% { box-shadow: 0 0 0 0 rgba(var(--gold-rgb),0); border-color: rgba(var(--gold-rgb),.6); }
  50%      { box-shadow: 0 0 18px 2px rgba(var(--gold-rgb),.18); border-color: rgba(var(--gold-rgb),1); }
}
@keyframes scoreFlash {
  0%   { transform: scale(1);    color: var(--gold); }
  30%  { transform: scale(1.12); color: #fff; }
  100% { transform: scale(1);    color: var(--gold); }
}
@keyframes slideInDown {
  from { opacity:0; transform:translateY(-12px); }
  to   { opacity:1; transform:translateY(0); }
}
@keyframes liveDot {
  0%,100% { opacity:1; } 50% { opacity:.25; }
}

/* â”€â”€ SCOREBOARD GRID â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.sb-grid { display:flex; flex-direction:column; gap:.75rem; }

/* â”€â”€ LIVE HERO CARD â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.sb-card {
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: 14px;
  padding: 1.1rem 1.25rem;
  animation: slideInDown .25s ease;
}
.sb-card.live {
  border-color: rgba(var(--gold-rgb),.6);
  border-left: 3px solid var(--gold);
  animation: livePulse 2.4s ease-in-out infinite, slideInDown .25s ease;
}
.sb-card.pending {
  border-left: 3px solid var(--border);
  opacity: .85;
}
.sb-card.done {
  border-left: 3px solid var(--green);
}

/* Court + event badge row */
.sb-meta {
  display: flex; align-items: center; justify-content: space-between;
  margin-bottom: .6rem;
}
.sb-court {
  font-size: .65rem; text-transform: uppercase; letter-spacing: .14em;
  color: var(--gold); font-weight: 600;
}
.sb-live-dot {
  display: inline-flex; align-items: center; gap: .3rem;
  font-size: .62rem; font-weight: 700; color: var(--danger);
  text-transform: uppercase; letter-spacing: .1em;
}
.sb-live-dot::before {
  content: ''; display: inline-block;
  width: 7px; height: 7px; border-radius: 50%;
  background: var(--danger);
  animation: liveDot 1.1s ease-in-out infinite;
}

/* Players row */
.sb-players {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: .5rem;
  margin-bottom: .55rem;
}
.sb-player {
  font-size: .92rem; font-weight: 600; line-height: 1.2;
}
.sb-player.left  { text-align: left; }
.sb-player.right { text-align: right; }
.sb-player.winner { color: var(--gold); font-weight: 700; }
.sb-vs {
  font-family: 'Bebas Neue', sans-serif;
  font-size: 1rem; color: var(--muted);
  letter-spacing: .08em; text-align: center; flex-shrink: 0;
}

/* Score */
.sb-score-row {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: .5rem;
  margin-bottom: .45rem;
}
.sb-score-num {
  font-family: 'Bebas Neue', sans-serif;
  font-size: 3.2rem; line-height: 1;
  /* White, matching the TC live-score boxes — live scores read the same
     colour in every module (Kent, 2026-08-21). Was gold. */
  color: var(--text); letter-spacing: .03em;
  transition: transform .15s;
}
.sb-score-num.left  { text-align: left; }
.sb-score-num.right { text-align: right; }
.sb-score-num.flash { animation: scoreFlash .35s ease; }
.tc-ls-box.flash    { animation: scoreFlash .35s ease; }
.sb-score-sep {
  font-family: 'Bebas Neue', sans-serif;
  font-size: 2rem; color: var(--muted);
  text-align: center;
}

/* Set dots */
.sb-dots {
  display: flex; justify-content: center;
  gap: .35rem; margin-bottom: .5rem;
}
.sb-dot {
  width: 9px; height: 9px; border-radius: 50%;
  border: 1.5px solid var(--muted);
  background: transparent;
  transition: all .2s;
}
.sb-dot.p1 { background: var(--gold); border-color: var(--gold); }
.sb-dot.p2 { background: var(--info);     border-color: var(--info); }

/* Progress bar */
.sb-bar-wrap {
  background: var(--bg3); border-radius: 99px;
  height: 4px; overflow: hidden; margin-bottom: .4rem;
}
.sb-bar-fill {
  height: 100%; border-radius: 99px;
  background: linear-gradient(90deg, var(--gold2), var(--gold));
  transition: width .3s ease;
}

/* Set score history (compact) */
.sb-set-history {
  display: flex; justify-content: center; gap: .5rem;
  font-family: 'DM Mono', monospace; font-size: .68rem;
  color: var(--muted);
}
.sb-set-pair { white-space: nowrap; }
.sb-set-pair.won { color: var(--gold); }

/* Result winner line */
.sb-winner-line {
  font-family: 'Bebas Neue', sans-serif;
  font-size: 1.1rem; color: var(--gold);
  letter-spacing: .06em; margin-bottom: .2rem;
  text-align: center;
}
.sb-result-score {
  font-family: 'DM Mono', monospace;
  font-size: .75rem; color: var(--muted);
  text-align: center;
}

/* Status chips */
.sb-chip {
  display: inline-flex; align-items: center;
  font-size: .62rem; font-weight: 700;
  text-transform: uppercase; letter-spacing: .08em;
  padding: .18rem .55rem; border-radius: 99px;
  margin-top: .4rem;
}
.sb-chip.live    { background: rgba(var(--gold-rgb),.12); color: var(--gold); }
.sb-chip.pending { background: var(--bg3); color: var(--muted); }
.sb-chip.done    { background: rgba(var(--success-rgb),.1);   color: var(--green); }

/* Pending card compact layout */
.sb-pending-matchup {
  display: flex; align-items: center; gap: .5rem;
  font-size: .88rem; font-weight: 500;
}
.sb-pending-vs {
  font-family: 'Bebas Neue', sans-serif;
  font-size: .9rem; color: var(--muted);
}

/* TC rubber results list */
.sb-rubbers { margin-top: .6rem; border-top: 1px solid var(--border); padding-top: .5rem; }
.sb-rubber-row {
  display: flex; align-items: center; gap: .45rem;
  font-size: .7rem; padding: .2rem 0;
  border-bottom: 1px solid rgba(var(--ink-rgb),.04);
}
.sb-rubber-row:last-child { border-bottom: none; }
.sb-rubber-type {
  font-size: .6rem; font-weight: 700; color: var(--muted);
  text-transform: uppercase; letter-spacing: .06em;
  min-width: 28px;
}
.sb-rubber-result { flex: 1; color: var(--text2); }
.sb-rubber-result.done { color: var(--text); }
.sb-rubber-winner { color: var(--gold); font-weight: 600; }
.sb-rubber-score  { font-family: 'DM Mono', monospace; color: var(--text2); font-size: .65rem; }

/* Empty states */
.sb-empty {
  text-align: center; padding: 2.5rem 1rem;
  color: var(--text2); font-size: .85rem;
}
.sb-empty-icon { font-size: 2rem; margin-bottom: .5rem; opacity: .4; }

/* â”€â”€ COURTS & LIVE PAGE â”€â”€ */
.live-section{padding:1.25rem;max-width:900px;margin:0 auto;width:100%;}
.live-section+.live-section{border-top:1px solid var(--border);}
.live-section-title{font-size:.7rem;text-transform:uppercase;letter-spacing:.12em;color:rgba(var(--ink-rgb),.65);font-weight:600;margin-bottom:.6rem;}

/* â•â• LIVE SCORER OVERLAY â•â• */
.scorer-overlay{display:none;position:fixed;inset:0;background:var(--bg);z-index:200;flex-direction:column;overflow-y:auto;}
.scorer-overlay.open{display:flex;}
.scorer-top{display:flex;align-items:center;gap:.75rem;padding:.8rem 1.1rem;background:var(--bg2);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:10;flex-wrap:wrap;}
.scorer-tourney{font-size:.68rem;text-transform:uppercase;letter-spacing:.1em;color:var(--text2);}
.scorer-match-label{font-size:.84rem;font-weight:600;}
.scorer-inner{flex:1;max-width:820px;margin:0 auto;width:100%;padding:1.25rem 1rem 4rem;position:relative;}

/* Score area */
.score-area{display:grid;grid-template-columns:1fr auto 1fr;gap:1rem;margin-bottom:1.1rem;align-items:stretch;}
.p-card{background:var(--card);border:1.5px solid var(--border);border-radius:16px;padding:1.25rem 1rem;text-align:center;cursor:pointer;user-select:none;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:8px;transition:all .15s;position:relative;overflow:hidden;}
.p-card::after{content:'TAP TO SCORE';position:absolute;bottom:10px;left:50%;transform:translateX(-50%);font-size:.57rem;letter-spacing:.14em;color:var(--muted);font-family:'DM Mono',monospace;}
.p-card.s1{border-color:rgba(var(--blue-rgb),.45);background:rgba(var(--blue-rgb),.06);}
.p-card.s2{border-color:rgba(var(--danger-rgb),.45);background:rgba(var(--danger-rgb),.06);}
.p-card.s1:hover{background:rgba(var(--blue-rgb),.13);border-color:var(--blue);}
.p-card.s2:hover{background:rgba(var(--danger-rgb),.13);border-color:var(--red);}
.p-card.s1 .p-score{color:var(--info);}
.p-card.s2 .p-score{color:var(--danger);}
.p-card:active{transform:scale(.97);}
@keyframes cardFlash{0%{transform:scale(1)}50%{transform:scale(1.04)}100%{transform:scale(1)}}
.p-card.flashed{animation:cardFlash .25s ease;}
.p-name{font-size:.8rem;font-weight:600;color:var(--text);line-height:1.2;}
.p-score{font-family:'Bebas Neue',sans-serif;font-size:5.5rem;line-height:1;}
.s1 .p-score{color:var(--blue);}.s2 .p-score{color:var(--red);}
.serve-badge{font-size:.6rem;letter-spacing:.12em;text-transform:uppercase;background:var(--gold);color:#000;border-radius:4px;padding:2px 8px;font-weight:700;display:none;}
.serve-badge.vis{display:inline-block;}
.score-mid{display:flex;flex-direction:column;justify-content:center;align-items:center;gap:5px;}
.mid-vs{font-family:'Bebas Neue',sans-serif;font-size:1.2rem;color:var(--text);}
.mid-sets{font-family:'DM Mono',monospace;font-size:.8rem;color:var(--text);}
.set-dots{display:flex;gap:5px;margin-bottom:.85rem;justify-content:center;}
.set-dot{width:25px;height:25px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.68rem;font-weight:700;font-family:'DM Mono',monospace;border:2px solid var(--border);color:var(--text);}
.set-dot.sd1{border-color:var(--blue);color:var(--blue);background:rgba(var(--blue-rgb),.1);}
.set-dot.sd2{border-color:var(--red);color:var(--red);background:rgba(var(--danger-rgb),.1);}
.set-dot.sdcur{border-color:var(--gold);color:var(--gold);}
.scorer-ctrl{display:flex;gap:.6rem;margin-bottom:1rem;flex-wrap:wrap;}
.log-panel{background:var(--card);border:1px solid var(--border);border-radius:var(--r);overflow:hidden;margin-bottom:1rem;}
.log-head{padding:.7rem 1rem;border-bottom:1px solid var(--border);font-size:.67rem;text-transform:uppercase;letter-spacing:.13em;color:var(--muted);display:flex;justify-content:space-between;}
.log-list{max-height:160px;overflow-y:auto;}
.log-entry{display:flex;align-items:center;gap:9px;padding:.42rem 1rem;border-bottom:1px solid rgba(var(--border-rgb),.4);font-size:.77rem;}
@keyframes fadeIn{from{opacity:0;transform:translateX(-5px)}to{opacity:1;transform:none}}
.log-entry .le-set{font-family:'DM Mono',monospace;color:var(--text2);min-width:34px;font-size:.68rem;}
.log-entry .le-player{flex:1;font-weight:500;}
.log-entry .le-score{font-family:'DM Mono',monospace;color:var(--text2);font-size:.73rem;}
.log-entry.lp1 .le-player{color:var(--blue);}
.log-entry.lp2 .le-player{color:var(--red);}
.win-screen{display:none;position:absolute;inset:0;background:rgba(var(--bg-rgb),.96);z-index:20;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:.85rem;}
.win-screen.open{display:flex;}
.win-emoji{font-size:3.5rem;}
.win-title{font-family:'Bebas Neue',sans-serif;font-size:2.8rem;color:var(--gold);letter-spacing:.1em;}
.win-sub{font-size:.92rem;color:var(--text2);}
.win-sets{font-family:'DM Mono',monospace;font-size:.95rem;color:var(--text);margin:.2rem 0;}
.win-btns{display:flex;gap:.6rem;flex-wrap:wrap;justify-content:center;margin-top:.6rem;}

/* â”€â”€ MODAL â”€â”€ */
.modal-bg{position:fixed;inset:0;background:rgba(0,0,0,.72);z-index:900;display:none;align-items:center;justify-content:center;}
.modal-bg.open{display:flex;}
.modal{background:var(--bg2);border:1px solid var(--border);border-radius:16px;padding:1.75rem;width:90%;max-width:440px;max-height:90vh;overflow-y:auto;}
.modal h3{font-family:'Bebas Neue',sans-serif;font-size:1.4rem;color:var(--gold);margin-bottom:.9rem;letter-spacing:.08em;}
.modal-actions{display:flex;gap:.6rem;margin-top:1rem;justify-content:flex-end;}

/* â”€â”€ COURT DIAGRAM â”€â”€ */
.court-panel{background:var(--card);border:1px solid var(--border);border-radius:var(--r);padding:1rem;margin-bottom:1rem;}
.court-panel-title{font-size:.68rem;text-transform:uppercase;letter-spacing:.14em;color:var(--text2);margin-bottom:.75rem;display:flex;align-items:center;justify-content:space-between;}
.court-wrap{position:relative;width:100%;max-width:620px;margin:0 auto;}
.court-svg{width:100%;height:auto;display:block;border-radius:6px;}
.player-token circle{transition:all .35s ease;filter:drop-shadow(0 2px 6px rgba(0,0,0,.5));}
.player-token text{font-family:'DM Sans',sans-serif;font-weight:700;font-size:11px;dominant-baseline:middle;text-anchor:middle;pointer-events:none;}
.player-token .nlabel{font-size:8px;font-weight:500;dominant-baseline:middle;text-anchor:middle;fill:#fff;opacity:.85;}
@keyframes servePulse{0%,100%{opacity:1;r:22;}50%{opacity:.55;r:26;}}
.serve-ring{animation:servePulse 1.2s ease-in-out infinite;fill:none;stroke-width:2.5;}
.court-legend{display:flex;gap:.85rem;justify-content:center;margin-top:.65rem;flex-wrap:wrap;font-size:.7rem;color:var(--text2);}
.legend-item{display:flex;align-items:center;gap:4px;}
.legend-dot{width:9px;height:9px;border-radius:50%;}
.pos-info{background:var(--bg3);border:1px solid var(--border);border-radius:8px;padding:.65rem .9rem;margin-top:.65rem;}
.pos-row{display:flex;align-items:center;gap:.55rem;padding:.28rem 0;border-bottom:1px solid rgba(var(--border-rgb),.4);}
.pos-row:last-child{border-bottom:none;}
.pos-dot{width:11px;height:11px;border-radius:50%;flex-shrink:0;}
.pos-name{font-weight:500;flex:1;font-size:.78rem;}
.pos-loc{color:var(--text2);font-size:.68rem;}
.pos-tag{font-size:.6rem;font-weight:700;border-radius:4px;padding:2px 5px;letter-spacing:.06em;}
.tag-serve{background:var(--gold);color:#000;}
.tag-recv{background:var(--blue);color:#fff;}
.dbl-setup{background:var(--bg3);border:1px solid var(--border);border-radius:8px;padding:.8rem 1rem;margin-bottom:.75rem;}
.dbl-setup-title{font-size:.67rem;text-transform:uppercase;letter-spacing:.12em;color:var(--text2);margin-bottom:.55rem;}
.dbl-cols{display:grid;grid-template-columns:1fr 1fr;gap:.5rem;}
.dbl-team-header{font-size:.7rem;font-weight:600;margin-bottom:.3rem;}

/* â”€â”€ TOAST â”€â”€ */
.toast{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:var(--bg3);border:1px solid var(--gold);border-radius:12px;padding:1rem 2rem;font-size:.92rem;font-weight:500;z-index:9999;min-width:320px;max-width:560px;text-align:center;display:none;white-space:normal;}
@keyframes toastIn{from{opacity:0;transform:translate(-50%,-50%) scale(.92)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}

/* â”€â”€ SECTION HEAD â”€â”€ */
.sec-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:.75rem;flex-wrap:wrap;gap:.5rem;}
.sec-title{font-family:'Bebas Neue',sans-serif;font-size:1.12rem;letter-spacing:.06em;}
.empty{text-align:center;padding:3rem 1rem;color:var(--muted);font-size:.87rem;}
.empty .ei{font-size:2.5rem;margin-bottom:.65rem;}

/* â”€â”€ ROLE SELECT SCREEN â”€â”€ */
.role-screen{position:fixed;inset:0;background:var(--bg);z-index:500;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:1.5rem;padding:2rem;}
.role-screen.hidden{display:none;}
.role-title{font-family:'Bebas Neue',sans-serif;font-size:2.5rem;color:var(--gold);letter-spacing:.1em;text-align:center;}
.role-sub{font-size:.88rem;color:var(--muted);text-align:center;max-width:340px;}
.role-cards{display:grid;grid-template-columns:repeat(2,1fr);gap:.75rem;width:100%;max-width:520px;}
.role-card{background:var(--card);border:1.5px solid var(--border);border-radius:var(--r);padding:1.25rem 1rem;text-align:center;cursor:pointer;transition:all .18s;}
.role-card:hover{border-color:var(--gold);}
.role-card.sel{border-color:var(--gold);background:rgba(var(--gold-rgb),.07);}
.role-card-icon{font-size:2rem;margin-bottom:.5rem;}
.role-card-label{font-size:.88rem;font-weight:600;color:var(--text);margin-bottom:.25rem;}
.role-card-desc{font-size:.7rem;color:var(--text2);}

@media(max-width:580px){
  .stats-bar{grid-template-columns:1fr 1fr;}
  .score-area{grid-template-columns:1fr auto 1fr;gap:.5rem;}
  .p-score{font-size:4rem;}
  .fmt-grid,.role-cards{grid-template-columns:1fr;}
  .row2,.row3{grid-template-columns:1fr;}
  .mc{flex-wrap:wrap;gap:.5rem;}
  .mc-score-cell,.mc-status{min-width:auto;}
  .mc-actions{width:100%;justify-content:flex-end;}
}
/* â”€â”€ VISUAL BRACKET WITH CONNECTORS â”€â”€ */
.vb-wrap{overflow-x:auto;padding-bottom:1rem;}
.vb-bracket{display:flex;align-items:flex-start;gap:0;}
.vb-round{display:flex;flex-direction:column;min-width:190px;}
.vb-round-label{font-size:.63rem;text-transform:uppercase;letter-spacing:.13em;color:var(--gold);padding:.45rem .75rem;text-align:center;background:var(--bg4);border-bottom:1px solid var(--border);margin-bottom:4px;}
.vb-pairs{display:flex;flex-direction:column;gap:0;flex:1;}
.vb-pair{display:flex;align-items:stretch;flex:1;}
.vb-pair-matches{display:flex;flex-direction:column;gap:4px;flex:1;justify-content:center;padding:8px 0;}
.vb-match{background:var(--bg3);border:1px solid var(--border);border-radius:8px;overflow:hidden;min-width:165px;}
.vb-slot{padding:.38rem .72rem;font-size:.8rem;border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;gap:6px;}
.vb-slot:last-child{border-bottom:none;}
.vb-slot.vb-won{background:rgba(var(--success-rgb),.1);color:var(--green);font-weight:600;}
.vb-slot.vb-tbd{color:var(--muted);font-style:italic;}
.vb-slot.vb-bye{color:var(--muted);}
.vb-sc{font-family:'DM Mono',monospace;font-size:.68rem;color:var(--text);}
.vb-score-btn{padding:.28rem .5rem;background:var(--bg4);border-top:1px solid var(--border);}
.vb-connector{display:flex;flex-direction:column;width:24px;flex-shrink:0;position:relative;}
.vb-conn-top{flex:1;border-right:2px solid var(--green);border-bottom:2px solid var(--green);margin-bottom:2px;opacity:.6;}
.vb-conn-bot{flex:1;border-right:2px solid var(--green);border-top:2px solid var(--green);margin-top:2px;opacity:.6;}
.vb-feed-line{width:16px;flex-shrink:0;border-top:2px solid rgba(var(--success-rgb),.5);margin-top:auto;margin-bottom:auto;align-self:center;}
.vb-winner-col{display:flex;flex-direction:column;justify-content:center;align-items:center;padding:1rem .75rem;gap:.5rem;}
.vb-trophy-icon{font-size:2rem;}
.vb-winner-name{font-family:'Bebas Neue',sans-serif;font-size:1.1rem;color:var(--gold);letter-spacing:.06em;text-align:center;}
.vb-section-title{font-family:'Bebas Neue',sans-serif;font-size:1rem;letter-spacing:.06em;color:var(--gold);margin:1.25rem 0 .65rem;display:flex;align-items:center;gap:.5rem;}
/* display:none by default — was flex, which meant the admin sign-in card
   PAINTED on every single page load before any JS had run, then vanished a few
   ms later once routing resolved (restored session, TC deep link, shared link).
   That flash appeared even when no sign-in was ever required (Kent,
   2026-08-29). JS now opts IN: onAuthStateChanged's no-user branch sets
   display:flex, as do the two boot fallbacks. Keeping the flex properties here
   so those callers only have to flip display. */
.login-screen{position:fixed;inset:0;background:var(--bg);z-index:600;display:none;align-items:center;justify-content:center;flex-direction:column;gap:1.25rem;padding:2rem;}
.login-card{background:var(--card);border:1px solid var(--border);border-radius:16px;padding:2rem;width:100%;max-width:400px;}
.login-title{font-family:'Bebas Neue',sans-serif;font-size:2rem;color:#fff;letter-spacing:.08em;margin-bottom:.2rem;}
.login-logo-img{display:block;width:140px;height:140px;border-radius:16px;margin:0 auto .9rem;object-fit:contain;}
.login-sub{font-size:.82rem;color:var(--muted);margin-bottom:1.25rem;}
.login-error{color:var(--red);font-size:.78rem;min-height:18px;margin-bottom:.5rem;}
.login-toggle{text-align:center;font-size:.78rem;color:var(--muted);margin-top:.85rem;}
.login-toggle a{color:var(--gold);cursor:pointer;}
.login-divider{text-align:center;color:var(--muted);font-size:.72rem;margin:.65rem 0;position:relative;}
.login-divider::before,.login-divider::after{content:'';position:absolute;top:50%;width:42%;height:1px;background:var(--border);}
.login-divider::before{left:0;}.login-divider::after{right:0;}
.btn-google-sm{width:100%;display:flex;align-items:center;justify-content:center;gap:8px;padding:.55rem;background:var(--bg3);border:1px solid var(--border);border-radius:8px;color:var(--text);cursor:pointer;font-family:'DM Sans',sans-serif;font-size:.83rem;font-weight:500;}
.btn-google-sm:hover{border-color:var(--gold);}
/* â”€â”€ TOURNAMENT LIST â”€â”€ */
.tl-screen{position:fixed;inset:0;background:var(--bg);z-index:550;display:none;flex-direction:column;align-items:center;padding:2rem 1rem 4rem;overflow-y:auto;}
.tl-header{display:flex;align-items:center;justify-content:space-between;width:100%;max-width:860px;margin-bottom:1.25rem;flex-wrap:wrap;gap:.75rem;}
.tl-title{font-family:'Bebas Neue',sans-serif;font-size:1.8rem;color:var(--gold);letter-spacing:.08em;}
.tl-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:.75rem;width:100%;max-width:860px;}
.tl-card{background:var(--card);border:1px solid var(--border);border-radius:var(--r);padding:1.1rem 1.25rem;cursor:pointer;transition:border-color .15s;}
.tl-card:hover{border-color:var(--gold);}
.tl-name{font-weight:600;font-size:.95rem;margin-bottom:3px;}
.tl-meta{font-size:.72rem;color:var(--text);margin-bottom:.85rem;}
.tl-actions{display:flex;gap:6px;flex-wrap:wrap;}
.tl-empty{text-align:center;padding:3rem 1rem;color:var(--muted);grid-column:1/-1;}
/* â”€â”€ GAME DAY OVERLAY â”€â”€ */
.gd-overlay{display:none;position:fixed;inset:0;background:var(--bg);z-index:190;flex-direction:column;overflow-y:auto;}
.gd-topbar{display:flex;align-items:center;justify-content:space-between;padding:.9rem 1.5rem;background:rgba(var(--ink-rgb),.03);border-bottom:1px solid rgba(var(--ink-rgb),.07);flex-wrap:wrap;gap:.5rem;}
.gd-wordmark{font-family:'Bebas Neue',sans-serif;font-size:1.1rem;color:rgba(var(--ink-rgb),.3);letter-spacing:.12em;}
.gd-tourney-name{font-family:'Bebas Neue',sans-serif;font-size:1.4rem;color:var(--gold);letter-spacing:.06em;}
.gd-body{display:grid;grid-template-columns:1.2fr .8fr;gap:1rem;padding:1.25rem 1.5rem;max-width:1200px;margin:0 auto;width:100%;}
.gd-panel{background:rgba(var(--ink-rgb),.03);border:1px solid rgba(var(--ink-rgb),.07);border-radius:14px;padding:1.1rem 1.25rem;}
.gd-panel-title{font-size:.65rem;text-transform:uppercase;letter-spacing:.14em;color:rgba(var(--ink-rgb),.3);margin-bottom:1rem;}
.gd-court-card{background:rgba(var(--blue-rgb),.08);border:1px solid rgba(var(--blue-rgb),.25);border-radius:10px;padding:1.1rem 1.25rem;margin-bottom:.75rem;}
.gd-court-card:last-child{margin-bottom:0;}
.gd-court-label{font-size:.65rem;color:rgba(var(--blue-rgb),.75);text-transform:uppercase;letter-spacing:.1em;margin-bottom:.5rem;display:flex;align-items:center;gap:6px;}
.gd-live-dot{width:7px;height:7px;border-radius:50%;background:var(--danger);animation:pulse 1.2s infinite;}
.gd-match-players{display:flex;align-items:center;gap:.75rem;margin-bottom:.4rem;}
.gd-match-players span{font-size:1.15rem;font-weight:600;}
.gd-vs-sep{font-size:.75rem;color:rgba(var(--ink-rgb),.3);font-family:'DM Mono',monospace;}
.gd-score{font-family:'Bebas Neue',sans-serif;font-size:3.5rem;line-height:1;color:var(--gold);letter-spacing:.05em;}
.gd-score-sep{color:rgba(var(--ink-rgb),.3);}
.gd-sets-label{font-size:.7rem;color:rgba(var(--ink-rgb),.35);margin-top:.2rem;font-family:'DM Mono',monospace;}
.gd-next-row{display:flex;align-items:center;gap:.75rem;padding:.6rem 0;border-bottom:1px solid rgba(var(--ink-rgb),.05);font-size:.83rem;}
.gd-next-row:last-child{border-bottom:none;}
.gd-next-court{font-family:'DM Mono',monospace;font-size:.72rem;color:var(--text);min-width:58px;}
.gd-next-players{flex:1;}
.gd-next-label-badge{font-size:.62rem;background:rgba(var(--ink-rgb),.2);color:var(--muted);border:1px solid rgba(var(--ink-rgb),.25);border-radius:4px;padding:2px 7px;}
.gd-result-row{display:flex;align-items:center;gap:.6rem;padding:.55rem 0;border-bottom:1px solid rgba(var(--ink-rgb),.05);font-size:.82rem;}
.gd-result-row:last-child{border-bottom:none;}
.gd-result-winner{color:var(--gold);font-weight:600;flex-shrink:0;}
.gd-result-match{flex:1;color:rgba(var(--ink-rgb),.6);}
.gd-result-score{font-family:'DM Mono',monospace;font-size:.72rem;color:var(--text);}
.gd-standing-row{display:flex;align-items:center;gap:.6rem;padding:.6rem 0;border-bottom:1px solid rgba(var(--ink-rgb),.05);font-size:.85rem;}
.gd-standing-row:last-child{border-bottom:none;}
.gd-standing-rank{font-family:'DM Mono',monospace;color:var(--text);width:18px;flex-shrink:0;}
.gd-standing-name{flex:1;font-weight:500;}
.gd-standing-wl{font-family:'DM Mono',monospace;font-size:.72rem;color:var(--text);}
.gd-standing-pts{font-family:'DM Mono',monospace;color:var(--gold);font-weight:600;}
.gd-empty{color:rgba(var(--ink-rgb),.25);font-size:.82rem;padding:.4rem 0;}
@media(max-width:640px){.gd-body{grid-template-columns:1fr;}.login-card{padding:1.5rem;}.tl-grid{grid-template-columns:1fr;}}
/* â”€â”€ PRE-MATCH & BETWEEN-SETS MODALS â”€â”€ */
.prematch-modal{position:absolute;inset:0;background:rgba(0,0,0,.72);z-index:80;display:flex;align-items:center;justify-content:center;padding:1rem;}
.prematch-card{background:var(--bg2);border:1px solid var(--border);border-radius:16px;padding:1.75rem;width:100%;max-width:420px;max-height:90vh;overflow-y:auto;}
.prematch-title{font-family:'Bebas Neue',sans-serif;font-size:1.6rem;color:var(--gold);letter-spacing:.06em;margin-bottom:.2rem;}
.prematch-sub{font-size:.82rem;color:var(--text2);margin-bottom:1.25rem;}
.prematch-section{margin-bottom:1rem;}
.prematch-label{font-size:.78rem;font-weight:600;color:var(--text2);text-transform:uppercase;letter-spacing:.07em;margin-bottom:.5rem;}
.prematch-player-btns{display:grid;grid-template-columns:1fr 1fr;gap:.6rem;}
.pmatch-btn{padding:.75rem .5rem;border-radius:10px;border:1.5px solid var(--border);background:var(--bg3);color:var(--text);font-size:.9rem;font-weight:600;cursor:pointer;transition:all .15s;font-family:'DM Sans',sans-serif;}
.pmatch-btn:hover{border-color:var(--gold);background:rgba(var(--gold-rgb),.1);}
.pmatch-btn.selected{border-color:var(--gold);background:rgba(var(--gold-rgb),.18);color:var(--gold);}
.pmatch-end{font-size:.82rem;}
.bs-score-display{text-align:center;font-family:'Bebas Neue',sans-serif;font-size:2.2rem;color:var(--gold);letter-spacing:.05em;margin:.5rem 0;}
.bs-instruction{background:rgba(var(--gold-rgb),.07);border:1px solid rgba(var(--gold-rgb),.2);border-radius:10px;padding:1rem;text-align:center;margin:.5rem 0;}
.bs-instr-icon{font-size:2rem;margin-bottom:.25rem;}
.bs-instr-text{font-size:.95rem;font-weight:600;color:var(--gold);}
.bs-instr-sub{font-size:.75rem;color:var(--text2);margin-top:.25rem;}
/* â”€â”€ TEAM COMP â”€â”€ */
.tc-event-sel{width:100%;}
.tc-team-card{background:var(--card);border:1px solid var(--border);border-radius:var(--r);padding:1rem 1.25rem;margin-bottom:.6rem;}
.tc-team-card-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:.5rem;margin-bottom:.5rem;}
.tc-team-name{font-weight:700;font-size:.95rem;}
.tc-team-meta{font-size:.72rem;color:var(--text);}
.tc-squad-row{display:flex;align-items:center;gap:.5rem;font-size:.82rem;padding:.25rem 0;border-bottom:1px solid rgba(var(--ink-rgb),.04);}
.tc-squad-row:last-child{border-bottom:none;}
.tc-gender-badge{font-size:.62rem;padding:1px 7px;border-radius:100px;font-weight:600;}
.tc-gender-m{background:rgba(var(--blue-rgb),.15);color:var(--info);}
.tc-gender-f{background:rgba(var(--pink-rgb),.15);color:var(--pink);}
.tc-fixture-card{background:var(--card);border:1px solid var(--border);border-radius:var(--r);padding:1rem 1.25rem;margin-bottom:.75rem;}
.tc-fix-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.75rem;flex-wrap:wrap;gap:.5rem;}
.tc-fix-teams{font-size:1rem;font-weight:700;}
.tc-fix-score{font-family:'Bebas Neue',sans-serif;font-size:1.4rem;color:var(--gold);}
.tc-fix-status{font-size:.68rem;padding:2px 9px;border-radius:100px;}
.tc-fix-pending{background:rgba(var(--ink-rgb),.06);color:var(--muted);}
.tc-fix-lineup{background:rgba(var(--gold-rgb),.12);color:var(--gold);}
.tc-fix-live{background:rgba(var(--danger-rgb),.12);color:var(--red);}
.tc-fix-done{background:rgba(var(--success-rgb),.12);color:var(--green);}
.tc-match-row{display:flex;align-items:center;gap:.75rem;padding:.55rem 0;border-bottom:1px solid rgba(var(--ink-rgb),.05);font-size:.83rem;flex-wrap:wrap;}
.tc-match-row:last-child{border-bottom:none;}
.tc-event-badge{font-size:.62rem;font-weight:700;padding:2px 8px;border-radius:4px;text-transform:uppercase;letter-spacing:.05em;min-width:32px;text-align:center;}
.tc-ms-badge{background:rgba(var(--blue-rgb),.15);color:var(--info);}
.tc-ws-badge{background:rgba(var(--pink-rgb),.15);color:var(--pink);}
.tc-md-badge{background:rgba(var(--blue-rgb),.1);color:var(--info2);}
.tc-wd-badge{background:rgba(var(--pink-rgb),.1);color:var(--pink2);}
.tc-xd-badge{background:rgba(var(--purple-rgb),.15);color:var(--purple);}
.tc-match-players{flex:1;min-width:140px;}
.tc-match-score{font-family:'DM Mono',monospace;font-size:.78rem;color:var(--text);}
.tc-winner-highlight{color:var(--green);font-weight:600;}
.lineup-event-block{background:var(--bg3);border:1px solid var(--border);border-radius:10px;padding:1rem;margin-bottom:.75rem;}
.lineup-event-title{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--text2);margin-bottom:.75rem;display:flex;align-items:center;gap:.5rem;}
.lineup-player-row{display:flex;align-items:center;gap:.5rem;margin-bottom:.4rem;}
.lineup-player-row select{flex:1;font-size:.83rem;}
.lineup-player-row label{font-size:.72rem;color:var(--text2);min-width:24px;}
/* â”€â”€ PLAYERS PAGE â”€â”€ */
.pl-action-btn{padding:.28rem .65rem;border-radius:6px;font-size:.7rem;cursor:pointer;border:1px solid var(--border);background:transparent;color:var(--muted);}
.pl-action-btn:hover{background:var(--bg3);color:var(--text);}
.pl-action-btn.red{color:var(--red);border-color:rgba(var(--danger-rgb),.3);}
.pl-action-btn.red:hover{background:rgba(var(--danger-rgb),.08);}
.pl-action-btn.blue{color:var(--info);border-color:rgba(var(--info-rgb),.3);}
.pl-action-btn.blue:hover{background:rgba(var(--info-rgb),.08);}
.pl-action-btn.disabled{opacity:.3;cursor:not-allowed;}
.pl-meta{font-size:.72rem;color:var(--text);}
/* â”€â”€ STATS PAGE â”€â”€ */
.stat-sub-tab{padding:.35rem .85rem;border-radius:6px;font-size:.78rem;cursor:pointer;border:1px solid var(--border);background:transparent;color:var(--muted);}
.stat-sub-tab.active{background:var(--gold);color:#000;font-weight:600;border-color:var(--gold);}
.h2h-summary{display:grid;grid-template-columns:1fr auto 1fr;gap:1rem;align-items:center;text-align:center;padding:1.25rem 0;}
.h2h-name{font-size:1rem;font-weight:600;margin-bottom:.25rem;}
.h2h-wins{font-family:'Bebas Neue',sans-serif;font-size:3rem;line-height:1;}
.h2h-wins.gold{color:var(--gold);}
.h2h-wins.muted{color:var(--muted);}
.h2h-sep{font-size:1.1rem;color:var(--text);}
.h2h-match-row{display:flex;align-items:center;padding:.55rem 0;border-bottom:1px solid var(--border);font-size:.82rem;gap:.6rem;}
.h2h-match-row:last-child{border-bottom:none;}
.h2h-winner{color:var(--green);font-weight:600;flex:1;}
.h2h-loser{color:var(--text);flex:1;text-align:right;}
.h2h-score{font-family:'DM Mono',monospace;font-size:.72rem;color:var(--text);}
/* â”€â”€ PENDING REGISTRATIONS â”€â”€ */
.reg-pending-row{display:flex;align-items:center;gap:.6rem;padding:.6rem 0;border-bottom:1px solid var(--border);flex-wrap:wrap;}
.reg-pending-row:last-child{border-bottom:none;}
.reg-pending-name{font-weight:600;font-size:.88rem;flex:1;}
.reg-pending-meta{font-size:.72rem;color:var(--text);}
.reg-approve-btn{padding:.28rem .7rem;background:rgba(var(--success-rgb),.15);border:1px solid rgba(var(--success-rgb),.4);border-radius:6px;color:var(--green);font-size:.72rem;cursor:pointer;}
.reg-approve-btn:hover{background:rgba(var(--success-rgb),.25);}
.reg-reject-btn{padding:.28rem .7rem;background:rgba(var(--danger-rgb),.1);border:1px solid rgba(var(--danger-rgb),.3);border-radius:6px;color:var(--red);font-size:.72rem;cursor:pointer;}
.reg-reject-btn:hover{background:rgba(var(--danger-rgb),.2);}

/* â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•
   GAME NIGHT MODULE
â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â• */
.gn-topbar{display:flex;align-items:center;justify-content:space-between;padding:.9rem 1.25rem;background:var(--bg2);border-bottom:1px solid var(--border);flex-shrink:0;flex-wrap:wrap;gap:.5rem;}
.gn-title{font-family:'Bebas Neue',sans-serif;font-size:1.4rem;color:var(--gold);letter-spacing:.06em;}
.gn-body{padding:1rem 1.25rem;}
[id^="gnpage-"]{max-width:1060px;margin:0 auto;width:100%;}
/* Setup: match Tournament .page padding exactly */
#gnpage-setup{padding:.5rem 0 3rem;}
/* Courts page: full-width edge-to-edge, same as Tournament/TC ca-layout */
#gnpage-courts{max-width:none;width:auto;margin:-1rem -1.25rem;}

/* Player roster */
.gn-roster{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:.5rem;margin-bottom:.75rem;}
.gn-player-chip{display:flex;align-items:center;gap:.4rem;background:var(--bg3);border:1.5px solid var(--border);border-radius:10px;padding:.45rem .75rem;cursor:grab;user-select:none;transition:all .15s;}
.gn-player-chip:hover{border-color:var(--gold);}
.gn-player-chip.dragging{opacity:.4;transform:scale(.96);}
.gn-player-chip.vip{border-color:rgba(var(--gold-rgb),.5);background:rgba(var(--gold-rgb),.07);}
.gn-player-chip.late{border-color:rgba(var(--success-rgb),.4);background:rgba(var(--success-rgb),.06);}
.gn-player-chip.sitting{opacity:.55;border-style:dashed;}
.gn-gender-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;}
.gn-gender-m{background:var(--info);}
.gn-gender-f{background:var(--pink);}
.gn-skill-pip{font-size:.6rem;color:var(--gold);letter-spacing:-.5px;}
.gn-chip-name{font-size:.82rem;font-weight:600;flex:1;}
.gn-chip-actions{display:flex;gap:3px;opacity:0;transition:opacity .1s;}
.gn-player-chip:hover .gn-chip-actions{opacity:1;}
.gn-chip-btn{background:none;border:none;cursor:pointer;font-size:.72rem;padding:1px 3px;color:var(--muted);border-radius:4px;}
.gn-chip-btn:hover{background:var(--bg2);color:var(--text);}

/* Skill groups */
.gn-groups{display:grid;grid-template-columns:1fr 1fr;gap:.75rem;margin-bottom:.75rem;}
.gn-group{background:var(--bg2);border:1.5px dashed var(--border);border-radius:12px;padding:.75rem;min-height:80px;}
.gn-group.drag-over{border-color:var(--gold);background:rgba(var(--gold-rgb),.04);}
.gn-group-label{font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;margin-bottom:.5rem;display:flex;align-items:center;gap:.4rem;}
.gn-group-a .gn-group-label{color:var(--info);}
.gn-group-b .gn-group-label{color:var(--purple);}
.gn-group-special{border-color:rgba(var(--orange-rgb),.4);}
.gn-group-special .gn-group-label{color:var(--orange);}
.gn-group-chips{display:flex;flex-wrap:wrap;gap:.35rem;min-height:32px;}

/* ── ⑧c COMPETITION DAY ALLOCATION BOARD (Setup) ──────────────────────
   Drag grades (or events) between day cards. Mirrors the Club Session group
   board's chips-into-buckets idiom, but its own namespace + a responsive
   column count since day count varies per competition. */
.da-board{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:.7rem;}
.da-day{background:var(--bg2);border:1.5px dashed var(--border);border-radius:12px;padding:.7rem;min-height:88px;transition:border-color .15s,background .15s;}
.da-day.drag-over{border-color:var(--gold);background:rgba(var(--gold-rgb),.05);}
.da-day-label{font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.09em;color:var(--gold);margin-bottom:.5rem;display:flex;align-items:center;justify-content:space-between;gap:.4rem;}
.da-day-count{font-weight:600;color:var(--text2);letter-spacing:0;text-transform:none;}
.da-chips{display:flex;flex-wrap:wrap;gap:.35rem;min-height:30px;}
.da-chip{display:flex;align-items:center;gap:.35rem;background:var(--bg3);border:1.5px solid var(--border);border-radius:9px;padding:.32rem .6rem;font-size:.78rem;font-weight:600;cursor:grab;user-select:none;transition:border-color .15s,opacity .15s,transform .15s;}
.da-chip:hover{border-color:var(--gold);}
.da-chip.dragging{opacity:.4;transform:scale(.96);}
.da-chip .da-chip-sub{font-size:.65rem;font-weight:600;color:var(--text2);}
.da-empty{font-size:.72rem;color:var(--text2);font-style:italic;padding:.2rem 0;}

/* ── ⑨ LIVE SCORE — purpose-built, TV-scale per-court scoreboard.
   Deliberately its own component (not Game Day Live's sb-card): §8 locked
   decision record — "Live Score = purpose-built Viewer-branded component;
   Game Day Live untouched; data reuse only." */
.ls-board{background:var(--card);border:1px solid var(--border);border-radius:14px;overflow:hidden;width:100%;max-width:640px;}
.ls-meta{display:flex;justify-content:space-between;align-items:center;padding:.6rem 1rem .4rem;font-size:.72rem;color:var(--text2);font-family:'DM Mono',monospace;}
.ls-meta .interval-tag{color:var(--gold);font-weight:700;}
.ls-body{display:flex;flex-direction:column;padding:.2rem 1rem 1rem;}
.ls-row{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.6rem 0;}
.ls-divider{height:1px;background:var(--border);}
.ls-pair{display:flex;flex-direction:column;gap:.15rem;min-width:0;}
.ls-pname{font-size:clamp(.85rem,2.4vw,1.15rem);font-weight:700;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.ls-pname.serving{color:var(--gold);}
.ls-pname.serving::before{content:'🏸 ';font-size:.75em;}
.ls-games{display:flex;gap:.3rem;flex-shrink:0;}
.ls-g{min-width:clamp(1.6rem,4vw,2.4rem);height:clamp(1.6rem,4vw,2.4rem);border-radius:7px;background:var(--bg3);display:flex;align-items:center;justify-content:center;font-family:'DM Mono',monospace;font-weight:700;font-size:clamp(.8rem,2.2vw,1.1rem);color:var(--text2);}
.ls-g.cur{background:rgba(var(--gold-rgb),.15);color:var(--gold);font-size:clamp(1rem,3vw,1.5rem);}
.ls-interval-card{margin:0 1rem 1rem;background:var(--bg3);border:1px solid rgba(var(--gold-rgb),.35);border-radius:10px;padding:.75rem 1rem;display:flex;align-items:center;gap:.75rem;}
.ls-interval-card .icon{font-size:1.4rem;flex-shrink:0;}
.ls-interval-card .t1{font-size:.85rem;font-weight:700;color:var(--gold);}
.ls-interval-card .t2{font-size:.72rem;color:var(--text2);}
.ls-idle{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.85rem;text-align:center;padding:2.5rem 1.25rem;}
.ls-idle .icon{width:clamp(3rem,8vw,5rem);height:clamp(3rem,8vw,5rem);border-radius:16px;background:rgba(var(--gold-rgb),.12);display:flex;align-items:center;justify-content:center;font-size:clamp(1.4rem,3.5vw,2.2rem);}
.ls-idle .headline{font-size:clamp(1rem,3vw,1.4rem);font-weight:800;color:var(--text);}
.ls-idle .sub{font-size:.8rem;color:var(--text2);}
.ls-idle .next{font-size:clamp(.78rem,2vw,1rem);border-top:1px solid var(--border);padding-top:.85rem;margin-top:.35rem;width:100%;}
.ls-idle .next b{color:var(--gold);}
/* TV mode (&tv=1): hide interactive chrome, let the score breathe */
body.wl-tv #wlSwitcher, body.wl-tv .wl-view-tabs, body.wl-tv .wl-exit { display:none !important; }
body.wl-tv .ls-board, body.wl-tv #watchLiveScreen { max-width:none; }

/* Match queue */
.gn-queue-section{margin-bottom:1rem;}
.gn-queue-label{font-size:.65rem;text-transform:uppercase;letter-spacing:.12em;color:var(--text2);margin-bottom:.5rem;display:flex;align-items:center;gap:.5rem;}
.gn-queue-label::after{content:'';flex:1;height:1px;background:var(--border);}
.gn-match-card{background:var(--card);border:1.5px solid var(--border);border-radius:12px;padding:.85rem 1rem;margin-bottom:.5rem;display:flex;flex-direction:column;align-items:stretch;gap:.3rem;}
.gn-match-card.on-court{border-color:var(--gold);background:rgba(var(--gold-rgb),.06);}
.gn-match-card.up-next{border-color:rgba(var(--gold-rgb),.3);background:rgba(var(--gold-rgb),.03);}
.gn-match-card.complete{opacity:.55;border-style:dashed;}
.gn-event-tag{font-size:.62rem;font-weight:700;padding:2px 8px;border-radius:4px;text-transform:uppercase;letter-spacing:.05em;flex-shrink:0;}
.gn-tag-md{background:rgba(var(--blue-rgb),.15);color:var(--info);}
.gn-tag-wd{background:rgba(var(--pink-rgb),.15);color:var(--pink);}
.gn-tag-xd{background:rgba(var(--purple-rgb),.15);color:var(--purple);}
.gn-tag-ms{background:rgba(var(--blue-rgb),.1);color:var(--info2);}
.gn-tag-ws{background:rgba(var(--pink-rgb),.1);color:var(--pink2);}
.gn-match-actions{display:flex;gap:.4rem;flex-wrap:wrap;}
.gn-on-court-dot{width:8px;height:8px;border-radius:50%;background:var(--danger);animation:pulse 1.2s infinite;flex-shrink:0;}
.gn-player-grid{display:grid;gap:.25rem;width:100%;}
.gn-player-grid-doubles{grid-template-columns:1fr 1fr;}
.gn-player-grid-singles{grid-template-columns:1fr;}
.gn-grid-vs{grid-column:1/-1;text-align:center;font-size:.6rem;font-weight:700;letter-spacing:.12em;color:var(--text2);padding:.1rem 0;font-family:'DM Mono',monospace;}
.gn-player-slot{background:var(--bg3);border-radius:7px;padding:.3rem .5rem;display:flex;flex-direction:column;align-items:center;gap:.08rem;min-width:0;overflow:hidden;}
.gn-player-slot-name{font-size:.76rem;font-weight:600;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;}
.gn-player-slot-stars{font-size:.6rem;color:var(--gold);letter-spacing:.05em;}

/* Sitting out strip */
.gn-sitting-strip{background:rgba(var(--ink-rgb),.03);border:1px solid var(--border);border-radius:8px;padding:.55rem .85rem;margin-bottom:.75rem;display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;}
.gn-sitting-label{font-size:.65rem;text-transform:uppercase;letter-spacing:.1em;color:var(--text2);flex-shrink:0;}
.gn-sitting-chip{font-size:.72rem;background:var(--bg3);border:1px solid var(--border);border-radius:6px;padding:2px 8px;color:var(--muted);}
.gn-court-chip{display:inline-flex;align-items:center;padding:.28rem .65rem;font-size:.75rem;font-weight:600;border-radius:7px;border:1px solid rgba(var(--ink-rgb),.15);background:rgba(var(--ink-rgb),.07);color:var(--text1);white-space:nowrap;}

/* Stats panel */
.gn-stats-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:.5rem;margin-bottom:1rem;}
.gn-stat-row{display:flex;align-items:center;justify-content:space-between;padding:.5rem 0;border-bottom:1px solid var(--border);font-size:.82rem;}
.gn-stat-row:last-child{border-bottom:none;}
.gn-stat-name{display:flex;align-items:center;gap:.4rem;}
.gn-stat-val{font-family:'DM Mono',monospace;font-size:.8rem;color:var(--gold);font-weight:600;}

/* Next Game big screen */
.ng-screen{background:var(--bg);min-height:100vh;color:var(--text);display:flex;flex-direction:column;}
.ng-header{padding:1.25rem 2rem;border-bottom:1px solid rgba(var(--ink-rgb),.07);display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:.5rem;}
.ng-wordmark{font-family:'Bebas Neue',sans-serif;font-size:1rem;color:rgba(var(--ink-rgb),.3);letter-spacing:.15em;}
.ng-session{font-family:'Bebas Neue',sans-serif;font-size:1.6rem;color:var(--gold);}
.ng-body{padding:1.5rem 2rem;flex:1;}
.ng-section-title{font-size:.65rem;text-transform:uppercase;letter-spacing:.15em;color:rgba(var(--ink-rgb),.3);margin-bottom:.75rem;display:flex;align-items:center;gap:.5rem;}
.ng-section-title::after{content:'';flex:1;height:1px;background:rgba(var(--ink-rgb),.06);}
.ng-match-row{background:rgba(var(--ink-rgb),.04);border:1px solid rgba(var(--ink-rgb),.07);border-radius:12px;padding:1rem 1.25rem;margin-bottom:.6rem;display:flex;align-items:center;gap:1rem;flex-wrap:wrap;}
.ng-match-row.on-court{background:rgba(var(--success-rgb),.08);border-color:rgba(var(--success-rgb),.25);}
.ng-match-row.up-next{background:rgba(var(--gold-rgb),.05);border-color:rgba(var(--gold-rgb),.2);}
.ng-event-badge{font-size:.68rem;font-weight:700;padding:3px 10px;border-radius:100px;text-transform:uppercase;}
.ng-badge-md{background:rgba(var(--blue-rgb),.2);color:var(--info);}
.ng-badge-wd{background:rgba(var(--pink-rgb),.2);color:var(--pink);}
.ng-badge-xd{background:rgba(var(--purple-rgb),.2);color:var(--purple);}
.ng-badge-ms{background:rgba(var(--blue-rgb),.15);color:var(--info2);}
.ng-badge-ws{background:rgba(var(--pink-rgb),.15);color:var(--pink2);}
.ng-players{flex:1;font-size:1.05rem;font-weight:500;}
.ng-vs{color:rgba(var(--ink-rgb),.3);font-size:.75rem;margin:.2rem 0;}
.ng-status-dot{width:9px;height:9px;border-radius:50%;}
.ng-dot-on{background:var(--success);animation:pulse 1.2s infinite;}
.ng-dot-next{background:rgba(var(--gold-rgb),.7);}
.ng-sitting-row{display:flex;gap:.5rem;flex-wrap:wrap;margin-bottom:1.25rem;}
.ng-sit-chip{background:rgba(var(--ink-rgb),.06);border:1px solid rgba(var(--ink-rgb),.1);border-radius:6px;padding:4px 12px;font-size:.78rem;color:rgba(var(--ink-rgb),.5);}

@media(max-width:580px){
  .gn-groups{grid-template-columns:1fr;}
  .gn-roster{grid-template-columns:1fr 1fr;}
  .ng-body{padding:1rem;}
}





/* â”€â”€ PATCH V15: Game Night submodule tabs visible on mobile/debug builds â”€â”€ */
.gn-subtabs{
  display:flex;
  gap:.45rem;
  padding:.7rem 1.25rem;
  background:rgba(var(--bg-rgb),.98);
  border-bottom:1px solid var(--border);
  overflow-x:auto;
  flex-shrink:0;
  position:sticky;
  top:0;
  z-index:6;
  -webkit-overflow-scrolling:touch;
}
.gn-subtabs .nav-tab{
  color:var(--info2);
  background:rgba(var(--info-rgb),.08);
  border:1px solid rgba(var(--info-rgb),.22);
  border-bottom:1px solid rgba(var(--info-rgb),.22);
  border-radius:999px;
  padding:.48rem .9rem;
  font-size:.82rem;
  opacity:1;
}
.gn-subtabs .nav-tab.active{
  color:var(--bg);
  background:var(--gold);
  border-color:var(--gold);
  font-weight:800;
  box-shadow:0 0 0 2px rgba(var(--gold-rgb),.15);
}
@media(max-width:580px){
  .gn-subtabs{padding:.65rem 1rem;gap:.4rem;}
  .gn-subtabs .nav-tab{font-size:.8rem;padding:.5rem .85rem;min-width:max-content;}
}

/* â”€â”€ CRITICAL INITIAL VISIBILITY â€” must work even if main.css fails â”€â”€ */
#homeScreen        { display:none; }
#loginScreen       { display:flex; position:fixed; inset:0; z-index:600;
                     background:var(--bg); align-items:center; justify-content:center;
                     flex-direction:column; padding:2rem; }
#roleScreen        { display:none !important; position:fixed; inset:0; z-index:150;
                     background:var(--bg); align-items:center; justify-content:center;
                     flex-direction:column; gap:1.5rem; padding:2rem; }
#roleScreen.visible { display:flex !important; }
#mainShell         { display:none; }
#casualScreen      { display:none; }
#scorerOverlay     { display:none; position:fixed; inset:0; z-index:800;
                     background:var(--bg); flex-direction:column; overflow-y:auto; }
#scorerOverlay.open { display:flex; }
#gameDayOverlay    { display:none; position:fixed; inset:0; z-index:190;
                     background:var(--bg); flex-direction:column; overflow-y:auto; }
#tcAdminOverlay    { display:none; }
#tcFixtureScreen   { display:none; }
#sharedRoleScreen  { display:none; }
#registrationScreen{ display:none; }
#regSuccessScreen  { display:none; }
#tcRegScreen       { display:none; }
#tcLineupScreen    { display:none; }
#tcRegSuccess      { display:none; }
#gnScreen          { display:none; position:fixed; inset:0; z-index:170;
                     background:var(--bg); flex-direction:column; overflow:hidden; }
#gnNextGameScreen  { display:none; position:fixed; inset:0; z-index:180;
                     background:var(--bg); flex-direction:column; overflow-y:auto; }
#loading-overlay   { display:none; position:fixed; inset:0; z-index:400;
                     background:rgba(var(--bg-rgb),.88); color:var(--text);
                     align-items:center; justify-content:center;
                     flex-direction:column; gap:12px; }
#loading-overlay.show { display:flex; }
#loading-overlay .spinner { width:36px; height:36px; border-radius:50%;
                     border:3px solid var(--border); border-top-color:var(--gold);
                     animation:spinnerSpin .8s linear infinite; }
@keyframes spinnerSpin { to { transform:rotate(360deg); } }
.modal-bg          { display:none; position:fixed; inset:0; z-index:900;
                     background:rgba(0,0,0,.45); align-items:center; justify-content:center; padding:1rem; }
.modal-bg.open     { display:flex; }
.prematch-modal    { display:none; position:absolute; inset:0; z-index:80;
                     background:rgba(0,0,0,.72); align-items:center; justify-content:center; padding:1rem; }
.prematch-modal[style*="display:none"] { display:none !important; }
/* #prematchModal hidden by .scorer-overlay .modal rule; .scorer-overlay .modal.open shows it */
.win-screen        { display:none; position:absolute; inset:0; z-index:90;
                     background:rgba(var(--bg-rgb),.96); align-items:center; justify-content:center;
                     flex-direction:column; gap:1rem; }
.win-screen.open   { display:flex; }
.toast.show        { opacity:1; }



/* â”€â”€ HOME SCREEN â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
#homeScreen {
  display: none;
  position: fixed; inset: 0;
  background: var(--bg);
  z-index: 160;
  flex-direction: column;
  overflow-y: auto;
}

.home-topbar {
  display: flex; align-items: center; justify-content: space-between;
  padding: .9rem 1.5rem;
  background: var(--bg2);
  border-bottom: 1px solid var(--border);
  flex-shrink: 0;
  flex-wrap: wrap; gap: .5rem;
  /* Sticky since 2026-09-07: the avatar is the only way into Account Settings
     now that the floating Settings button is gone, so it must survive a scroll
     down a long event list. z-index stays LOW and local — #homeScreen (z-160)
     is display:none whenever a module overlay is open, so this can never paint
     over one (the removed demo banner made exactly that mistake). */
  position: sticky; top: 0; z-index: 5;
}
.home-logo {
  font-family: 'Bebas Neue', sans-serif;
  font-size: 1.5rem; color: #fff; letter-spacing: .08em;
  -webkit-text-stroke: 1px #000; paint-order: stroke fill;
  display: flex; align-items: center; gap: .5rem;
}
.home-logo-img { width: 32px; height: 32px; border-radius: 8px; object-fit: contain; flex-shrink: 0; }
.home-logo span { -webkit-text-stroke: 0; }
/* .home-user (the topbar email chip) was removed on 2026-09-07 along with its
   markup — the avatar below replaces it. */
/* Account avatar. 40px so it clears the 36px minimum touch target used
   everywhere else on the venue-facing screens. */
.home-avatar {
  width: 40px; height: 40px; flex-shrink: 0;
  display: flex; align-items: center; justify-content: center;
  border-radius: 50%;
  background: var(--bg3);
  border: 1px solid var(--border);
  color: var(--text);
  font-family: 'Bebas Neue', sans-serif;
  font-size: 1.15rem; letter-spacing: .04em; line-height: 1;
  cursor: pointer; padding: 0;
  transition: border-color .15s, background .15s;
}
/* With a photo the letter must go — but stay in the DOM, so that if the image
   URL later dies the initial is still the accessible label. */
.home-avatar.has-photo {
  background-size: cover; background-position: center; background-repeat: no-repeat;
  color: transparent; text-indent: -9999px; overflow: hidden;
}
.home-avatar:hover { background-color: var(--bg4, var(--bg3)); border-color: var(--gold); }
.home-avatar:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; }
.home-topbar-right { display: flex; gap: .5rem; align-items: center; }

.home-body {
  padding: 1.5rem;
  max-width: 820px; margin: 0 auto; width: 100%;
  flex: 1;
}

.home-greeting {
  font-family: 'Bebas Neue', sans-serif;
  font-size: 1.6rem; letter-spacing: .04em;
  color: var(--text);
  margin-bottom: .2rem;
}
.home-sub {
  font-size: .82rem; color: var(--text2);
  margin-bottom: 1.75rem;
}

/* Mode grid */
.mode-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: .85rem;
  margin-bottom: 1.75rem;
}
.mode-card {
  background: var(--card);
  border: 1.5px solid var(--border);
  border-radius: 16px;
  padding: 1.5rem 1.25rem;
  cursor: pointer;
  transition: border-color .15s, transform .12s, box-shadow .15s;
  display: flex; flex-direction: column; gap: .5rem;
  position: relative; overflow: hidden;
  -webkit-tap-highlight-color: transparent;
  user-select: none;
}
.mode-card:active { transform: scale(.97); }
.mode-card:hover { border-color: var(--gold); box-shadow: 0 0 0 1px rgba(var(--gold-rgb),.15); }
.mode-card.casual  { border-color: rgba(var(--success-rgb),.3); }
.mode-card.casual:hover  { border-color: var(--success); box-shadow: 0 0 0 1px rgba(var(--success-rgb),.15); }
.mode-card.tournament { border-color: rgba(var(--gold-rgb),.3); }
.mode-card.tournament:hover { border-color: var(--gold); }
.mode-card.teamcomp { border-color: rgba(var(--blue-rgb),.3); }
.mode-card.teamcomp:hover { border-color: var(--blue); box-shadow: 0 0 0 1px rgba(var(--blue-rgb),.15); }
.mode-card.gamenight { border-color: rgba(var(--purple-rgb),.3); }
.mode-card::before {
  content: '';
  position: absolute; top: 0; left: 0; right: 0; height: 3px;
  border-radius: 16px 16px 0 0;
}
.mode-card.casual::before      { background: var(--success); }
.mode-card.tournament::before  { background: var(--gold); }
.mode-card.teamcomp::before    { background: var(--blue); }
.mode-card.gamenight::before   { background: var(--purple2); }

.mode-icon { font-size: 2rem; line-height: 1; }
.mode-title {
  font-family: 'Bebas Neue', sans-serif;
  font-size: 1.25rem; letter-spacing: .06em;
  color: var(--text);
}
.mode-desc { font-size: .73rem; color: var(--text2); line-height: 1.5; }
.mode-badge {
  position: absolute; top: .75rem; right: .75rem;
  font-size: .6rem; font-weight: 700;
  padding: 2px 8px; border-radius: 100px;
  text-transform: uppercase; letter-spacing: .06em;
}
.badge-coming { background: rgba(var(--purple-rgb),.15); color: var(--purple); border: 1px solid rgba(var(--purple-rgb),.25); }
.badge-new    { background: rgba(var(--success-rgb),.12); color: var(--success); border: 1px solid rgba(var(--success-rgb),.25); }

/* Recent section */
.home-section-title {
  font-size: .68rem; text-transform: uppercase; letter-spacing: .12em;
  color: var(--text2); margin-bottom: .6rem;
  display: flex; align-items: center; gap: .5rem;
}
.home-section-title::after {
  content: ''; flex: 1; height: 1px; background: var(--border);
}
.recent-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: .65rem;
  margin-bottom: 1.5rem;
}
.recent-card {
  background: var(--card); border: 1px solid var(--border);
  border-radius: 10px; padding: .85rem 1rem;
  cursor: pointer; transition: border-color .15s;
}
.recent-card:hover { border-color: var(--gold); }
.recent-name { font-weight: 600; font-size: .88rem; margin-bottom: 3px; }
.recent-meta { font-size: .7rem; color: var(--text2); margin-bottom: .6rem; }
.recent-actions { display: flex; gap: .4rem; }
.recent-btn {
  flex: 1; padding: 4px 6px; border-radius: 6px;
  border: 1px solid var(--border); font-size: .65rem;
  cursor: pointer; background: transparent; color: var(--muted);
  text-align: center; transition: all .12s;
  font-family: inherit; line-height: inherit; appearance: none;
}
.recent-btn:hover { background: var(--bg3); color: var(--text); }
.recent-btn.gold { color: var(--gold); border-color: rgba(var(--gold-rgb),.3); }

.home-empty {
  text-align: center; padding: 2rem 1rem;
  color: var(--muted); font-size: .82rem;
}
.home-empty-icon { font-size: 2.5rem; margin-bottom: .5rem; }

/* Quick actions row */
.quick-actions {
  display: flex; gap: .6rem; flex-wrap: wrap;
  margin-bottom: 1.75rem;
}
.qa-btn {
  padding: .45rem .9rem; border-radius: 8px;
  border: 1px solid var(--border); font-size: .78rem;
  cursor: pointer; background: var(--bg2); color: var(--muted);
  display: flex; align-items: center; gap: .35rem;
  transition: all .12s; white-space: nowrap;
}
.qa-btn:hover { border-color: var(--gold); color: var(--text); }

@media (max-width: 480px) {
  .mode-grid { grid-template-columns: 1fr; }
  .home-body { padding: 1rem; }
  .mode-card { padding: 1.1rem; }
  .mode-icon { font-size: 1.6rem; }
  .mode-title { font-size: 1.1rem; }
}
/* â”€â”€ GAME NIGHT â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.gn-section-label{font-size:.68rem;text-transform:uppercase;letter-spacing:.1em;color:var(--text2);margin-bottom:.5rem;font-weight:600;}
.gn-court-grid{display:flex;flex-direction:column;gap:.5rem;}
.gn-match-card{background:var(--card);border:1px solid var(--border);border-radius:10px;padding:.75rem 1rem;display:flex;flex-direction:column;align-items:stretch;gap:.3rem;max-width:520px;margin-left:auto;margin-right:auto;}
.gn-match-card.gn-playing{border-color:rgba(var(--success-rgb),.4);background:rgba(var(--success-rgb),.04);}
.gn-match-card.gn-queue{opacity:.85;}
.gn-match-type-badge{font-size:.62rem;font-weight:700;padding:2px 8px;border-radius:4px;text-transform:uppercase;flex-shrink:0;}
.gn-ms{background:rgba(var(--blue-rgb),.15);color:var(--info);}
.gn-ws{background:rgba(var(--pink-rgb),.15);color:var(--pink);}
.gn-md{background:rgba(var(--blue-rgb),.1);color:var(--info2);}
.gn-wd{background:rgba(var(--pink-rgb),.1);color:var(--pink2);}
.gn-xd{background:rgba(var(--purple-rgb),.15);color:var(--purple);}
.gn-match-teams{display:flex;align-items:center;gap:.5rem;flex:1;flex-wrap:wrap;}
.gn-team{font-weight:600;font-size:.85rem;}
.gn-vs{font-size:.7rem;color:var(--text2);}
.gn-match-actions{display:flex;gap:.4rem;flex-wrap:wrap;}
.gn-queue-num{font-family:'DM Mono',monospace;font-size:.75rem;color:var(--text2);min-width:20px;}
.gn-empty{font-size:.78rem;color:var(--text2);padding:.5rem 0;}
.gn-player-card{transition:opacity .15s;}
.gn-player-card:active{opacity:.6;}
.gn-tv-wrap{background:var(--bg);min-height:100vh;color:var(--text);display:flex;flex-direction:column;}
.gn-tv-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 2rem;border-bottom:1px solid rgba(var(--ink-rgb),.07);flex-wrap:wrap;gap:.5rem;}
.gn-tv-logo{font-family:'Bebas Neue',sans-serif;font-size:1.4rem;color:var(--gold);letter-spacing:.1em;}
.gn-tv-round{font-family:'Bebas Neue',sans-serif;font-size:1.1rem;color:rgba(var(--ink-rgb),.5);letter-spacing:.08em;}
.gn-tv-time{font-family:'DM Mono',monospace;font-size:1rem;color:rgba(var(--ink-rgb),.35);}
.gn-tv-body{display:grid;grid-template-columns:1.2fr .8fr;gap:1.25rem;padding:1.25rem 2rem;flex:1;max-width:1200px;margin:0 auto;width:100%;}
.gn-tv-section-title{font-size:.65rem;text-transform:uppercase;letter-spacing:.14em;color:rgba(var(--ink-rgb),.3);margin-bottom:.75rem;}
.gn-tv-match{display:flex;align-items:center;gap:.75rem;padding:.75rem 1rem;background:rgba(var(--ink-rgb),.04);border:1px solid rgba(var(--ink-rgb),.07);border-radius:10px;margin-bottom:.5rem;}
.gn-tv-match.gn-tv-queue{opacity:.7;}
.gn-tv-type{font-size:.62rem;font-weight:700;padding:2px 8px;border-radius:4px;text-transform:uppercase;flex-shrink:0;}
.gn-tv-team{font-size:1rem;font-weight:600;flex:1;}
.gn-tv-vs{font-size:.72rem;color:rgba(var(--ink-rgb),.3);}
.gn-tv-num{font-family:'DM Mono',monospace;font-size:.75rem;color:rgba(var(--ink-rgb),.3);min-width:20px;}
.gn-tv-sitting{display:flex;flex-direction:column;gap:.4rem;}
.gn-tv-sitter{padding:.5rem .75rem;background:rgba(var(--ink-rgb),.04);border:1px solid rgba(var(--ink-rgb),.06);border-radius:8px;font-size:.88rem;}
.gn-tv-empty{font-size:.78rem;color:rgba(var(--ink-rgb),.25);padding:.4rem 0;}
@media(max-width:640px){.gn-tv-body{grid-template-columns:1fr;}.gn-tv-header{padding:.75rem 1rem;}.gn-tv-body{padding:.75rem 1rem;}}

.recent-btn.danger { color: var(--red); border-color: rgba(var(--danger-rgb),.35); }
.recent-btn.danger:hover { background: rgba(var(--danger-rgb),.10); color: var(--red); }
/* Home card button colour scheme: 1=Blue, 2=Green, 3=Orange, 4=Red */
.recent-btn.blue   { color: var(--info); border-color: rgba(var(--info-rgb),.4); }
.recent-btn.blue:hover   { background: rgba(var(--info-rgb),.1); color: var(--info2); }
.recent-btn.green  { background: var(--success); color: var(--success-text); border-color: var(--success); font-weight: 700; }
.recent-btn.green:hover  { filter: brightness(1.12); color: var(--success-text); }
.recent-btn.orange { color: var(--orange); border-color: rgba(var(--orange-rgb),.4); }
.recent-btn.orange:hover { background: rgba(var(--orange-rgb),.1); color: var(--orange); }
.recent-btn.live   { background: var(--gold); color: #000; border-color: var(--gold); font-weight: 700; }
.recent-btn.live:hover   { background: var(--gold); border-color: var(--gold); color: #000; }
.recent-btn.red    { background: var(--danger); color: var(--danger-text); border-color: var(--danger); font-weight: 700; }
.recent-btn.red:hover    { filter: brightness(1.12); color: var(--danger-text); }
.recent-btn.cyan   { background: var(--cyan); color: #000; border-color: var(--cyan); font-weight: 700; }
.recent-btn.cyan:hover   { background: var(--cyan2); border-color: var(--cyan2); color: #000; }
.recent-btn.gold-solid { background: var(--gold); color: #000; border-color: var(--gold); font-weight: 700; }
.recent-btn.gold-solid:hover { background: var(--gold); border-color: var(--gold); color: #000; }

/* Delete confirmation modal */
#deleteConfirmModal.open{display:flex;}
.delete-confirm-box{max-width:420px;}
.delete-confirm-msg{font-size:.88rem;line-height:1.5;color:var(--text2);margin:.25rem 0 1rem;}
.btn-danger-solid{background:var(--red);border-color:var(--red);color:#fff;font-weight:700;}
.btn-danger-solid:hover{background:var(--danger);border-color:var(--danger);color:#fff;}
.recent-btn.danger{color:var(--red);border-color:rgba(var(--danger-rgb),.35);}
.recent-btn.danger:hover{background:rgba(var(--danger-rgb),.1);color:var(--danger);}

/* â”€â”€ TOURNAMENT TOP NAV FIX â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.topbar{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:.75rem;
  height:54px;
  padding:0 1rem;
  background:var(--bg2);
  border-bottom:1px solid var(--border);
  position:sticky;
  top:0;
  z-index:50;
}
.nav-left{
  display:flex;
  align-items:center;
  gap:.65rem;
  min-width:0;
  flex:1;
}
.nav-title{
  font-family:'Bebas Neue',sans-serif;
  font-size:1.35rem;
  letter-spacing:.06em;
  color:var(--text);
  white-space:nowrap;
  line-height:1;
}
.home-nav-btn{
  height:32px;
  padding:.35rem .75rem !important;
  font-size:.72rem !important;
  line-height:1;
  flex-shrink:0;
  align-self:center;
  margin:0;
}
#navTabs{
  display:flex;
  align-items:center;
  gap:2px;
  min-width:0;
  overflow-x:auto;
  flex:1;
  scrollbar-width:none;
}
#navTabs::-webkit-scrollbar{display:none;}
.topbar .nav-right{
  display:flex;
  align-items:center;
  gap:.45rem;
  flex-shrink:0;
}
@media(max-width:760px){
  .topbar{height:auto;min-height:54px;flex-wrap:wrap;padding:.5rem .75rem;}
  .nav-left{flex-basis:100%;}
  .topbar .nav-right{width:100%;justify-content:flex-start;overflow-x:auto;}
}

/* â”€â”€ CLEAN CLASSIC TOURNAMENT BRACKET ALIGNMENT â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.bt-wrap{
  width:100%;
  overflow-x:auto;
  overflow-y:visible;
  padding:.75rem 0 1.75rem;
}
.bt-bracket{
  display:flex;
  align-items:flex-start;
  gap:46px;
  min-width:max-content;
}
.bt-round{
  width:190px;
  flex:0 0 190px;
  position:relative;
}
.bt-round-label{
  height:28px;
  display:flex;
  align-items:center;
  justify-content:center;
  background:var(--bg4);
  border:1px solid var(--border);
  border-radius:7px;
  color:var(--gold);
  font-size:.62rem;
  font-weight:800;
  letter-spacing:.12em;
  text-transform:uppercase;
  margin-bottom:10px;
}
.bt-round-body{
  position:relative;
  height:var(--bt-h);
  overflow:visible;
}
.bt-match{
  position:absolute;
  left:0;
  width:var(--bt-w, 190px);
  height:var(--match-h);
  background:var(--bg3);
  border:1px solid var(--border);
  border-radius:9px;
  overflow:hidden;
  box-shadow:0 8px 18px rgba(0,0,0,.12);
  z-index:2;
}
.bt-match.done{
  border-color:rgba(var(--gold-rgb),.28);
}
.bt-slot{
  height:30px;
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:8px;
  padding:0 .75rem;
  border-bottom:1px solid rgba(var(--border-rgb),.75);
  font-size:.8rem;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}
.bt-slot span:first-child{
  overflow:hidden;
  text-overflow:ellipsis;
}
/* Doubles pairs (.pair-name, 2 stacked lines from fmtPair) need the slot to
   grow instead of single-line-ellipsis-clipping the second name. */
.bt-slot:has(.pair-name){
  height:auto;
  min-height:44px;
  white-space:normal;
  overflow:visible;
  text-overflow:clip;
  padding-top:.35rem;
  padding-bottom:.35rem;
}
.bt-slot:has(.pair-name) span:first-child{
  overflow:visible;
  text-overflow:clip;
}
.bt-slot.bt-won{
  background:rgba(var(--gold-rgb),.1);
  color:var(--gold);
  font-weight:700;
}
.bt-slot.bt-tbd{
  color:var(--muted);
  font-style:italic;
}
.bt-slot.bt-bye{
  color:var(--muted);
}
.bt-score{
  font-family:'DM Mono',monospace;
  font-size:.68rem;
  color:var(--text);
  opacity:.8;
  flex-shrink:0;
}
.bt-score-row { display:flex; gap:3px; flex-shrink:0; }
.bt-set-num { font-family:'DM Mono',monospace; font-size:.68rem; font-weight:700; min-width:16px; text-align:right; color:var(--text2); }
.bt-set-num.bt-set-win { color:var(--gold); }
.bt-actions{
  display:flex;
  gap:4px;
  padding:5px 6px 4px;
  border-top:1px solid rgba(var(--border-rgb),.75);
  justify-content:flex-end;
}
.bt-join{
  position:absolute;
  left:100%;
  width:46px;
  z-index:1;
  pointer-events:none;
}
.bt-join::before{
  content:'';
  position:absolute;
  left:20px;
  top:0;
  height:100%;
  border-right:2px solid rgba(var(--success-rgb),.72);
}
.bt-leg{
  position:absolute;
  display:block;
  height:0;
  border-top:2px solid rgba(var(--success-rgb),.72);
}
.bt-leg-top{
  top:0;
  left:0;
  width:22px;
}
.bt-leg-bottom{
  bottom:0;
  left:0;
  width:22px;
}
.bt-leg-mid{
  top:50%;
  left:20px;
  width:26px;
  transform:translateY(-1px);
}
.bt-single-feed{
  position:absolute;
  left:100%;
  width:46px;
  height:0;
  border-top:2px solid rgba(var(--success-rgb),.72);
  pointer-events:none;
  z-index:1;
}
.bt-winner-col{
  width:145px;
  flex:0 0 145px;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:flex-start;
  gap:.85rem;
  padding-top:38px;
}
.bt-bronze-box{ text-align:center; }
.bt-bronze-match{
  position:static;
  width:150px;
  margin-top:.3rem;
}
.bt-winner-box{
  min-width:110px;
  background:rgba(var(--gold-rgb),.07);
  border:1px solid rgba(var(--gold-rgb),.25);
  border-radius:10px;
  padding:.75rem .85rem;
  text-align:center;
}
.bt-winner-label{
  font-size:.6rem;
  text-transform:uppercase;
  letter-spacing:.12em;
  color:var(--muted);
  margin-bottom:.25rem;
}
.bt-trophy{
  font-size:1.35rem;
  margin-bottom:.1rem;
}
.bt-winner-name{
  font-family:'Bebas Neue',sans-serif;
  font-size:1.05rem;
  color:var(--gold);
  letter-spacing:.06em;
}
.bt-winner-tbd{
  color:var(--muted);
  font-family:'DM Mono',monospace;
  font-size:.8rem;
}
@media(max-width:640px){
  .bt-bracket{gap:36px;}
  .bt-round{width:170px;flex-basis:170px;}
  .bt-match{width:170px;}
  .bt-join,.bt-single-feed{width:36px;}
  .bt-leg-mid{width:18px;}
}

/* â”€â”€ PATCH: prevent Game Night / Next Game screens leaking onto tournament pages â”€â”€ */
#gnScreen,
#gnNextGameScreen,
#gnNextScreen,
#gnTVScreen {
  display: none;
  position: fixed;
  inset: 0;
}
#gnNextGameScreen,
#gnNextScreen { background: var(--bg); flex-direction: column; overflow-y: auto; }
#gnScreen { background: var(--bg); flex-direction: column; }
#gnNextGameScreen,
#gnNextScreen,
#gnTVScreen { z-index: 180; background: var(--bg); }

/* â”€â”€ PATCH: keep Home action buttons clean after simplifying cards â”€â”€ */
.recent-actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(82px,1fr));gap:.45rem;}
.recent-btn{min-height:36px;display:flex;align-items:center;justify-content:center;line-height:1.15;}

/* â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•
   STANDARDIZED NAV BRAND â€” same across Tournament, TC, GN
â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â•â• */
.nav-brand {
  display: flex; align-items: center; gap: 10px;
  flex-shrink: 0; overflow: hidden;
}
.nav-brand-logo { width: 28px; height: 28px; border-radius: 7px; object-fit: contain; flex-shrink: 0; }
.nav-brand-name {
  font-family: 'Bebas Neue', sans-serif;
  font-size: 1.5rem; color: #fff;
  letter-spacing: .08em; flex-shrink: 0;
  -webkit-text-stroke: 1px #000; paint-order: stroke fill;
}
.nav-brand-name span { -webkit-text-stroke: 0; }
.nav-brand-sep { color: rgba(var(--ink-rgb),.2); font-size: 1.1rem; flex-shrink: 0; }
.nav-comp-name {
  font-family: 'Bebas Neue', sans-serif;
  font-size: 1.5rem; color: var(--gold);
  letter-spacing: .06em;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  max-width: 480px;
}
/* Standardized topbar used by all three modes */
.std-topbar {
  display: flex; align-items: center; justify-content: space-between;
  padding: 0 1.5rem; height: 52px;
  background: var(--bg2); border-bottom: 1px solid var(--border);
  flex-shrink: 0; flex-wrap: wrap; gap: .4rem;
  position: sticky; top: 0; z-index: 10;
}
.std-topbar-left  { display: flex; align-items: center; gap: 8px; flex: 1; overflow: hidden; }
.std-topbar-right { display: flex; align-items: center; gap: .45rem; flex-shrink: 0; }
.std-topbar-tabs  { display: flex; gap: 3px; flex-wrap: nowrap; overflow-x: auto; }

/* Home button â€” always looks the same */
.btn-home {
  font-size: .72rem; padding: .3rem .7rem;
  border-radius: 6px; border: 1px solid var(--cyan);
  background: var(--cyan); color: #000;
  cursor: pointer; display: flex; align-items: center; gap: .3rem;
  white-space: nowrap; transition: all .12s; font-weight: 700;
}
.btn-home:hover { background: var(--cyan2); border-color: var(--cyan2); color: #000; }

/* Share/Live button — solid red */
.btn-share {
  font-size: .72rem; padding: .3rem .7rem;
  border-radius: 6px; border: 1px solid var(--danger);
  background: var(--danger); color: #fff;
  cursor: pointer; display: flex; align-items: center; gap: .3rem;
  white-space: nowrap; transition: all .12s; font-weight: 700;
}
.btn-share:hover { background: var(--danger); border-color: var(--danger); }

/* Reg button — solid green */
.btn-reg {
  font-size: .72rem; padding: .3rem .7rem;
  border-radius: 6px; border: 1px solid var(--success);
  background: var(--success); color: #fff;
  cursor: pointer; display: flex; align-items: center; gap: .3rem;
  white-space: nowrap; transition: all .12s; font-weight: 700;
}
.btn-reg:hover { background: var(--success); border-color: var(--success); color: #fff; }

/* Scorer/PIN button — solid gold */
.btn-scorer-nav {
  font-size: .72rem; padding: .3rem .7rem;
  border-radius: 6px; border: 1px solid var(--gold);
  background: var(--gold); color: #000;
  cursor: pointer; display: flex; align-items: center; gap: .3rem;
  white-space: nowrap; transition: all .12s; font-weight: 700;
}
.btn-scorer-nav:hover { background: var(--gold); border-color: var(--gold); }

/* Help — the round ? that used to float over the bottom nav. Circular so it
   still reads as the help affordance people learned, but in the button row. */
.btn-help-nav {
  width: 28px; height: 28px; flex-shrink: 0; padding: 0;
  border-radius: 50%; border: 1px solid var(--gold);
  background: var(--gold); color: #111;
  font-size: .82rem; font-weight: 900; line-height: 1;
  cursor: pointer; display: flex; align-items: center; justify-content: center;
  transition: all .12s;
}
.btn-help-nav:hover { transform: scale(1.08); }

@media (max-width: 600px) {
  .nav-brand-name { display: none; }
  .nav-brand-sep  { display: none; }
  .std-topbar     { height: auto; padding: .5rem .75rem; }

  /* Stack: event name on its own row, buttons underneath. Before this the two
     groups shared one line — .std-topbar-right is flex-shrink:0, so the four
     buttons took what they needed and crushed the left group to a sliver,
     leaving the organiser unable to see WHICH event they had open. Giving the
     left group a full-width flex-basis forces the wrap that .std-topbar was
     already configured for. */
  .std-topbar-left  { flex: 1 0 100%; min-width: 0; }
  .nav-comp-name    { max-width: none; }

  /* The button row scrolls sideways rather than wrapping to a third line:
     Team Comp shows five buttons at once (PIN, Reg, Live, Home, Help) and a
     second row of them would push the page content further down on the screen
     where vertical space is scarcest. */
  .std-topbar-right {
    flex: 1 0 100%; justify-content: flex-start;
    overflow-x: auto; -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }
  .std-topbar-right::-webkit-scrollbar { display: none; }
  .std-topbar-right > * { flex-shrink: 0; }

  /* Horizontal padding only, so the row fits a 375px screen without a scroll
     (Team Comp's five buttons overflowed by ~10px) while the tap HEIGHT is
     untouched. */
  .std-topbar-right .btn-home,
  .std-topbar-right .btn-reg,
  .std-topbar-right .btn-share,
  .std-topbar-right .btn-scorer-nav { padding: .3rem .45rem; }

  /* 34px on touch — the desktop 28px is under the touch target minimum used
     elsewhere on the venue-facing screens. */
  .btn-help-nav { width: 34px; height: 34px; font-size: .95rem; }
}

/* â”€â”€ APP SIDEBAR LAYOUT â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */

.app-body    { display:flex; flex:1; overflow:hidden; min-height:0; }

.app-sidebar {
  width:190px; flex-shrink:0;
  display:flex; flex-direction:column;
  background:var(--bg2); border-right:1px solid var(--border);
  padding:.5rem 0; overflow-y:auto;
}

/* Sidebar tab overrides â€” vertical style */
.app-sidebar .nav-tab {
  width:100%; text-align:left; border-radius:0;
  border-bottom:none; border-left:3px solid transparent;
  padding:.72rem 1.1rem; font-size:.82rem;
  color: rgba(var(--ink-rgb),.75);
}
.app-sidebar .nav-tab:hover  { background:rgba(var(--ink-rgb),.04); color:var(--text); }
.app-sidebar .nav-tab.active { background:rgba(var(--gold-rgb),.08); color:var(--gold); border-left-color:var(--gold); border-bottom:none; }

.app-content { flex:1; overflow-y:auto; min-width:0; }

/* â”€â”€ MOBILE: sidebar collapses to bottom tab bar â”€â”€ */
@media (max-width: 767px) {
  .app-body { flex-direction:column; }

  .app-sidebar {
    order:2; width:100%; flex-direction:row;
    border-right:none; border-top:1px solid var(--border);
    padding:0; height:56px;
    overflow-x:auto; overflow-y:hidden;
    position:fixed; bottom:0; left:0; right:0; z-index:50;
  }

  .app-sidebar .nav-tab {
    flex:1; min-width:54px; height:100%;
    text-align:center; border-left:none;
    border-top:2px solid transparent;
    padding:.28rem .25rem;
    font-size:.58rem; line-height:1.25;
    white-space:normal;
  }
  .app-sidebar .nav-tab.active {
    border-left:none; border-top-color:var(--gold);
  }

  .app-content { padding-bottom:64px; }
}

/* V26 Phase 1 organiser polish */
.event-status-confirm-box,
.delete-confirm-box {
  border-top: 3px solid var(--gold);
}

/* â”€â”€ TC PHASE ENGINE STYLES â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.tc-phase-section {
  margin-bottom: 2rem;
}
.tc-phase-header {
  font-family: 'Bebas Neue', sans-serif;
  font-size: 1.15rem;
  letter-spacing: .07em;
  color: var(--text);
  padding: .4rem 0 .6rem;
  border-bottom: 2px solid var(--border);
  margin-bottom: 1rem;
}
.tc-group-section {
  margin-bottom: 1.25rem;
}
.tc-group-header {
  font-size: .78rem;
  font-weight: 700;
  letter-spacing: .07em;
  text-transform: uppercase;
  padding: .3rem .6rem;
  border-left: 3px solid;
  margin-bottom: .6rem;
  background: rgba(var(--ink-rgb),.03);
  border-radius: 0 6px 6px 0;
}

/* TC fixture round grouping */
.tc-round-group {
  margin-bottom: 1rem;
}
.tc-round-header {
  font-family: 'Bebas Neue', sans-serif;
  font-size: .95rem;
  letter-spacing: .06em;
  color: var(--gold);
  padding: .25rem .1rem .4rem;
  border-bottom: 1px solid rgba(var(--gold-rgb),.2);
  margin-bottom: .5rem;
}

/* Mini standings inside fixture list */
.mini-standings {
  background: var(--bg2);
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: .65rem .8rem;
  font-size: .78rem;
}
.mini-st-table {
  width: 100%;
  border-collapse: collapse;
}
.mini-st-table th {
  font-size: .65rem;
  color: var(--muted);
  text-align: left;
  padding: .15rem .25rem;
  font-weight: 600;
  letter-spacing: .06em;
  text-transform: uppercase;
}
.mini-st-table td {
  padding: .2rem .25rem;
  color: var(--text);
}
.mini-st-table td:first-child { color: var(--muted); width: 20px; }

/* Phase preview swap chips */
.phase-group-chips {
  display: flex;
  flex-wrap: wrap;
  gap: .4rem;
}
.phase-team-chip {
  padding: .35rem .7rem;
  border: 1px solid var(--border);
  border-radius: 20px;
  font-size: .8rem;
  background: var(--bg2);
  color: var(--text);
  display: flex;
  align-items: center;
  gap: .4rem;
  transition: background .15s, transform .1s;
}
.phase-team-chip:hover { background: var(--bg3); }
.phase-chip-selected {
  background: rgba(var(--gold-rgb),.15) !important;
  border-color: var(--gold) !important;
  transform: scale(1.04);
}

.recent-actions {
  align-items: stretch;
}
.recent-btn {
  min-height: 36px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 10px;
  user-select: none;
}
.recent-btn.danger {
  color: var(--danger);
  border-color: rgba(var(--danger-rgb),.45);
}
/* GN cards have 3 buttons â€” use 3-col flex at all sizes */
.gn-card .recent-actions {
  display: flex !important;
  gap: .4rem;
}
@media (max-width: 640px) {
  .recent-actions {
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: .45rem;
  }
  /* GN cards: 3 buttons fit neatly in a 3-col grid on mobile */
  .gn-card .recent-actions {
    display: grid !important;
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
  .recent-card {
    padding: .9rem !important;
  }
  .modal-actions {
    display: grid !important;
    grid-template-columns: 1fr;
  }
  .modal-actions .btn,
  .modal-actions .btn-primary,
  .modal-actions .btn-danger-solid {
    width: 100%;
    justify-content: center;
  }
}

/* â•â• SCORER ENGINE v2 â•â• */

/* Scorer overlay topbar (new engine uses .topbar from standalone) */
/* NOTE: do NOT add height/min-height or flex `order` overrides here. The base
   .topbar already goes height:auto under 760px (see the max-width:760px block
   above), and reordering the children breaks the fullscreen/landscape layout —
   the buttons detach over the court and the match label collapses against the
   right edge (tried and reverted 2026-08-21). The "topbar is busy on mobile"
   polish is parked as its own backlog item; it needs a real layout rethink,
   not property tweaks. */
.scorer-overlay .topbar { display:flex;align-items:center;gap:.75rem;padding:.8rem 1rem;background:var(--bg2);border-bottom:1px solid var(--border);position:sticky;top:0;z-index:10;flex-wrap:wrap; }

/* Scorer utility buttons (fullscreen / rotate) */
.scorer-util-btn {
  padding:.35rem .75rem;font-size:.75rem;display:inline-flex;align-items:center;justify-content:center;
  border-radius:8px;border:1px solid var(--border);background:var(--bg3);color:var(--text);
  cursor:pointer;flex-shrink:0;transition:background .15s,color .15s;font-weight:600;
}
.scorer-util-btn:hover { background:var(--gold);color:#000;border-color:var(--gold); }
.scorer-util-btn.active,
.scorer-util-btn.fs-active { background:var(--gold);color:#000;border-color:var(--gold); }
#btnFullscreen.fs-active { border-color:var(--gold);color:var(--gold);background:transparent; }

/* Landscape stage layout */
.ls-stage { display:flex;align-items:stretch;width:100%; }
.ls-stage .court-wrap { flex:1;border-bottom:none;border-left:1px solid var(--border);border-right:1px solid var(--border); }
.ls-stage .p-card { width:155px;min-width:155px;flex-shrink:0;min-height:0;border-radius:0;padding:.75rem .5rem; }
.ls-stage .p-card:first-child { border-radius:var(--r) 0 0 var(--r); }
.ls-stage .p-card:last-child  { border-radius:0 var(--r) var(--r) 0; }
.ls-stage .p-card::after { display:none; }
.ls-stage .p-score { font-size:3.5rem; }
.ls-mid-bar { display:flex;align-items:center;justify-content:center;gap:1rem;padding:.4rem 1rem;flex-wrap:wrap;background:var(--bg2);border-bottom:1px solid var(--border); }
.ls-mid-bar .score-mid { flex-direction:row;align-items:center;gap:1rem;min-width:unset;text-align:left; }

/* Fullscreen CSS overrides */
:fullscreen           { background:var(--bg); }
:-webkit-full-screen  { background:var(--bg); }
:-moz-full-screen     { background:var(--bg); }

/* Landscape rotate hint overlay */
#rotatehint {
  display:none;position:fixed;inset:0;z-index:10000;
  background:rgba(0,0,0,.88);align-items:center;justify-content:center;flex-direction:column;gap:1rem;
  color:#fff;font-size:1rem;text-align:center;padding:2rem;
}
#rotatehint.show { display:flex; }
#rotatehint .rh-icon { font-size:3rem;animation:rotateHint 1.2s ease-in-out infinite; }
@keyframes rotateHint { 0%{transform:rotate(0deg)}50%{transform:rotate(90deg)}100%{transform:rotate(90deg)} }

/* Court wrap override inside scorer */
.scorer-overlay .court-wrap { background:var(--bg2);padding:.75rem;border-bottom:1px solid var(--border); }
/* gap + wrap so the serving label and the settings label can never run into
   each other on a narrow phone; they stack instead. */
.scorer-overlay .court-header { display:flex;justify-content:space-between;align-items:flex-start;gap:.4rem .75rem;flex-wrap:wrap;max-width:760px;margin:0 auto .4rem;font-size:.72rem; }
.scorer-overlay .court-header > span { min-width:0; }

/* Score cards â€” blue/red variants (new engine uses .blue/.red not .s1/.s2) */
.p-card.blue { border-color:rgba(var(--blue-rgb),.5);background:rgba(var(--blue-rgb),.06); }
.p-card.red  { border-color:rgba(var(--danger-rgb),.5); background:rgba(var(--danger-rgb),.06); }
.p-card.blue .p-score { color:var(--info); }
.p-card.red  .p-score { color:var(--danger); }
.p-card.flash { animation:cardFlash .25s ease; }

/* Score middle area */
.score-mid { display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.35rem;min-width:86px;text-align:center; }
.swap-btn { background:var(--gold);border:1px solid var(--gold);color:#000;border-radius:999px;padding:.45rem 1.25rem;font-weight:900;font-family:var(--body,sans-serif);cursor:pointer;font-size:.82rem; }
.swap-btn:hover { background:var(--gold2); }
.sets-won { font-family:'Bebas Neue',sans-serif;font-size:2rem;color:var(--gold); }
.set-badge { font-size:.7rem;color:var(--muted);border:1px solid var(--border);border-radius:999px;padding:3px 9px; }
.sd-blue { border-color:var(--blue)!important;color:var(--info)!important;background:rgba(var(--blue-rgb),.1)!important; }
.sd-red  { border-color:var(--red)!important; color:var(--danger)!important;background:rgba(var(--danger-rgb),.1)!important; }
.sd-cur  { border-color:var(--gold)!important;color:var(--gold)!important; }

/* Ctrl bar */
.ctrl-bar { max-width:900px;margin:.5rem auto 1.25rem;display:flex;gap:.6rem;flex-wrap:wrap;padding:0 1rem;width:100%; }

/* Modals â€” new engine uses .modal / .modal-card / .modal-divider / .pick-btn
   Override the global .modal card styles so the scorer .modal acts as a fullscreen overlay */
.scorer-overlay .modal { display:none;position:fixed;inset:0;background:rgba(0,0,0,.78);z-index:820;align-items:center;justify-content:center;padding:1rem;
  /* reset card styles from global .modal rule */
  border:none;border-radius:0;width:100%;max-width:none;max-height:none;overflow:visible; }
.scorer-overlay .modal.open { display:flex; }
.modal-card { background:var(--bg2);border:1px solid var(--border);border-radius:16px;padding:1.5rem;width:100%;max-width:440px;max-height:90vh;overflow-y:auto; }
.modal-title { font-family:'Bebas Neue',sans-serif;font-size:1.6rem;color:var(--gold);letter-spacing:.05em;margin-bottom:.2rem; }
.modal-sub   { font-size:.82rem;color:var(--text2);margin-bottom:.75rem; }
.modal-label { font-size:.74rem;font-weight:800;color:var(--text2);text-transform:uppercase;letter-spacing:.08em;margin:.9rem 0 .5rem; }
.modal-score { text-align:center;font-family:'Bebas Neue',sans-serif;font-size:2.2rem;color:var(--gold);margin:.5rem 0;letter-spacing:.05em; }
.modal-divider { height:1px;background:var(--border);margin:.75rem 0; }
.pick-grid { display:grid;grid-template-columns:1fr 1fr;gap:.6rem; }
.pick-btn { padding:.75rem .5rem;border-radius:10px;border:1.5px solid var(--border);background:var(--bg3);color:var(--text);font-family:var(--body,sans-serif);font-size:.88rem;font-weight:700;cursor:pointer;transition:border-color .15s,background .15s,color .15s; }
.pick-btn.sel { border-color:var(--gold);background:rgba(var(--gold-rgb),.14);color:var(--gold); }

/* Swap notice (between sets) */
.swap-notice { background:rgba(var(--gold-rgb),.07);border:1px solid rgba(var(--gold-rgb),.2);border-radius:10px;padding:.9rem;text-align:center;margin:.6rem 0; }
.swap-notice-icon  { font-size:1.8rem; }
.swap-notice-title { font-weight:800;color:var(--gold); }
.swap-notice-sub   { font-size:.75rem;color:var(--text2);margin-top:.2rem; }

/* Position info rows (new engine uses pos-tag with .recv, not .tag-recv) */
.pos-tag.recv { background:var(--purple);color:#fff; }

/* Log panel updates (new IDs: logList / logCount) */
.log-list { max-height:170px;overflow-y:auto; }

/* BWF Scoresheet */
.ss-wrap { max-width:900px;margin:.6rem auto 0;width:calc(100% - 2rem); }
.ss-set-block { background:var(--card);border:1px solid var(--border);border-radius:10px;overflow:hidden;margin-bottom:.5rem; }
.ss-set-head { display:flex;align-items:center;justify-content:space-between;padding:.4rem .75rem;background:var(--bg3);border-bottom:1px solid var(--border); }
.ss-set-title { font-size:.68rem;font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:var(--gold); }
.ss-set-result { font-size:.68rem;color:var(--muted);font-family:monospace; }
.ss-scroll { overflow-x:auto;-webkit-overflow-scrolling:touch; }
.ss-table { border-collapse:collapse;min-width:100%;table-layout:fixed; }
.ss-table tr:not(:last-child) { border-bottom:1px solid rgba(var(--border-rgb),.6); }
.ss-name-cell { width:72px;min-width:72px;padding:.28rem .5rem;font-size:.7rem;font-weight:700;color:var(--text);border-right:2px solid var(--border);position:sticky;left:0;background:var(--card);z-index:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; }
.ss-name-cell.p1c { color:var(--info); }
.ss-name-cell.p2c { color:var(--danger); }
.ss-cell { width:20px;min-width:20px;height:24px;text-align:center;font-size:.62rem;font-family:monospace;color:var(--muted);border-right:1px solid rgba(var(--border-rgb),.35);padding:0;vertical-align:middle; }
.ss-cell.ss-init { color:var(--muted);font-size:.6rem;font-style:italic; }
.ss-cell.ss-pt { color:var(--text);font-weight:700; }
.ss-cell.ss-pt.p1 { color:var(--info); }
.ss-cell.ss-pt.p2 { color:var(--danger); }
.ss-cell.ss-win { background:rgba(var(--gold-rgb),.12);color:var(--gold);font-weight:900; }

/* Win screen elements from new engine */
.win-icon  { font-size:4rem; }
.win-name  { font-family:'Bebas Neue',sans-serif;font-size:2.8rem;color:var(--gold);letter-spacing:.06em; }
.win-score { font-size:1rem;color:var(--muted); }

@media (max-width:640px) {
  .scorer-overlay .score-area { gap:.45rem; }
  .score-mid { min-width:58px; }
  .sets-won  { font-size:1.4rem; }
  .pick-grid { grid-template-columns:1fr; }
  .ctrl-bar  { gap:.4rem; }
  .ctrl-bar .btn { font-size:.78rem;padding:.5rem .75rem; }
}

/* â”€â”€ COURT ALLOCATION SPLIT LAYOUT â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
.ca-layout {
  display: flex;
  align-items: flex-start;
  height: calc(100vh - 54px); /* full height minus topbar */
  overflow: hidden;
}
.ca-courts {
  /* Left panel: courts grid */
  flex: 0 0 58%;
  min-width: 0;
  height: 100%;
  overflow-y: auto;
  border-right: 1px solid var(--border);
}
.ca-queue {
  /* Right panel: coming up + completed */
  flex: 1;
  min-width: 0;
  height: 100%;
  overflow-y: auto;
}
/* Mobile: stack vertically */
@media (max-width: 900px) {
  .ca-layout {
    flex-direction: column;
    height: auto;
    overflow: visible;
  }
  .ca-courts, .ca-queue {
    flex: none;
    width: 100%;
    height: auto;
    border-right: none;
    overflow-y: visible;
  }
}

/* â”€â”€ QR PRINT LAYOUT â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
@media print {
  body > *:not(#qrPrintSheet):not(#oopPrintSheet) { display: none !important; }
  #qrPrintSheet {
    display: flex !important;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    min-height: 100vh;
    font-family: 'DM Sans', sans-serif;
    color: #000;
    background: #fff;
    padding: 2rem;
    box-sizing: border-box;
  }
}
#qrPrintSheet {
  display: none;
  position: fixed;
  inset: 0;
  background: #fff;
  z-index: 9999;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 2.5rem;
  font-family: 'DM Sans', sans-serif;
  color: #000;
}

/* ── ORDER OF PLAY PRINT SHEET (P5) ────────────────────────────────── */
#oopPrintSheet {
  display: none;
  position: fixed;
  inset: 0;
  background: #fff;
  z-index: 9999;
  padding: 2rem;
  overflow-y: auto;
  font-family: 'DM Sans', sans-serif;
  color: #000;
  box-sizing: border-box;
}
#oopPrintSheet .oop-print-close {
  position: fixed; top: 1rem; right: 1.2rem; z-index: 10000;
  background: #171a16; color: #fff; border: none; border-radius: 8px;
  padding: .5rem .9rem; font-size: .8rem; font-weight: 700; cursor: pointer;
}
@media print { .no-print { display: none !important; } }
#oopPrintSheet h2 { font-size: 1.5rem; font-weight: 800; margin: 0 0 .2rem; }
#oopPrintSheet .oop-meta { font-size: .85rem; color: #555; margin-bottom: 1.2rem; }
#oopPrintSheet h3 { font-size: 1.05rem; font-weight: 700; margin: 1.4rem 0 .5rem; border-bottom: 2px solid #000; padding-bottom: .25rem; }
#oopPrintSheet table.oop-print-table { width: 100%; border-collapse: collapse; font-size: .82rem; margin-bottom: .5rem; }
#oopPrintSheet table.oop-print-table th,
#oopPrintSheet table.oop-print-table td { text-align: left; padding: .32rem .5rem; border-bottom: 1px solid #ccc; }
#oopPrintSheet table.oop-print-table th { font-size: .68rem; text-transform: uppercase; letter-spacing: .04em; color: #555; }
#oopPrintSheet table.oop-print-table td.oop-tbd { color: #888; font-style: italic; }


/* â”€â”€ VIEWER LANDING SCREEN â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€ */
@keyframes landingFadeIn {
  from { opacity:0; transform:translateY(16px); }
  to   { opacity:1; transform:translateY(0); }
}
@keyframes statPop {
  0%   { transform:scale(.85); opacity:0; }
  70%  { transform:scale(1.05); }
  100% { transform:scale(1);   opacity:1; }
}
#viewerLandingScreen {
  display: none;
  position: fixed; inset: 0;
  background: var(--bg);
  z-index: 700;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 2rem 1.5rem;
  overflow-y: auto;
}
.vl-brand {
  font-family: 'Bebas Neue', sans-serif;
  font-size: 1rem; letter-spacing: .18em;
  color: var(--text); text-align: center;
  margin-bottom: 1.5rem;
  animation: landingFadeIn .4s ease both;
}
.vl-brand span { color: var(--brand-red); }
.vl-comp-name {
  font-family: 'Bebas Neue', sans-serif;
  font-size: clamp(2rem, 8vw, 3.2rem);
  line-height: 1; color: var(--text);
  text-align: center; letter-spacing: .04em;
  margin-bottom: .5rem;
  animation: landingFadeIn .4s .08s ease both;
}
.vl-meta {
  font-size: .82rem; color: var(--text2);
  text-align: center; line-height: 1.9;
  margin-bottom: 1.75rem;
  animation: landingFadeIn .4s .14s ease both;
}
.vl-stats {
  display: flex; gap: .65rem;
  justify-content: center; flex-wrap: wrap;
  margin-bottom: 2rem;
  animation: landingFadeIn .4s .2s ease both;
}
.vl-stat {
  background: var(--card);
  border: 1px solid var(--border);
  border-radius: 12px;
  padding: .65rem 1.1rem;
  text-align: center; min-width: 88px;
  animation: statPop .45s .3s ease both;
}
.vl-stat.live {
  border-color: rgba(var(--gold-rgb),.4);
  background: rgba(var(--gold-rgb),.06);
}
.vl-stat-num {
  font-family: 'Bebas Neue', sans-serif;
  font-size: 1.9rem; line-height: 1;
  color: var(--gold); margin-bottom: .15rem;
}
.vl-stat.live .vl-stat-num {
  display: flex; align-items: center;
  justify-content: center; gap: .3rem;
}
.vl-stat.live .vl-stat-num::before {
  content: '';
  display: inline-block;
  width: 8px; height: 8px; border-radius: 50%;
  background: var(--gold);
  animation: liveDot 1.1s ease-in-out infinite;
  flex-shrink: 0;
}
.vl-stat-label {
  font-size: .62rem; text-transform: uppercase;
  letter-spacing: .1em; color: var(--text2);
}
.vl-watch-btn {
  width: 100%; max-width: 340px;
  background: var(--gold); color: #000;
  border: none; border-radius: 12px;
  font-family: 'Bebas Neue', sans-serif;
  font-size: 1.4rem; letter-spacing: .1em;
  padding: 1rem 2rem; cursor: pointer;
  transition: background .15s, transform .1s;
  animation: landingFadeIn .4s .28s ease both;
  margin-bottom: .85rem;
}
.vl-watch-btn:hover  { background: var(--gold); }
.vl-watch-btn:active { transform: scale(.97); }
.vl-watch-btn-sub {
  font-size: .68rem; color: var(--text2);
  text-align: center; margin-bottom: 1.5rem;
  animation: landingFadeIn .4s .32s ease both;
}

/* â”€â”€ STANDINGS VIEW-ONLY â€” hide scorer + pencil buttons â”€â”€ */
.standings-view-only .btn-scorer,
.standings-view-only .bwf-card-footer,
.standings-view-only .mc-actions,
.standings-view-only [onclick*="openScorer"],
.standings-view-only [onclick*="manualResult"],
.standings-view-only [onclick*="resetMatch"] { display: none !important; }


/* ── DOUBLES PAIR DISPLAY ────────────────────────────────────────── */
.pair-name { display:inline-flex; flex-direction:column; line-height:1.3; vertical-align:middle; }
.pair-p1   { font-weight:600; }
.pair-p2   { font-weight:600; }
.bwf-player-row.winner .pair-p1,
.bwf-player-row.winner .pair-p2 { color:var(--gold); }
.mc-name.won .pair-p1,
.mc-name.won .pair-p2 { color:var(--gold); }
.tc-winner-highlight .pair-p1,
.tc-winner-highlight .pair-p2 { color:var(--green); }

/* ── BWF Interval Break Timer ───────────────────────────────────── */
.interval-timer-block {
  text-align: center;
  background: rgba(var(--gold-rgb), .06);
  border: 1px solid rgba(var(--gold-rgb), .2);
  border-radius: 12px;
  padding: 1rem 1.25rem .85rem;
  margin: .75rem 0 .5rem;
}
.interval-timer-label {
  font-size: .65rem;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--text2);
  margin-bottom: .35rem;
}
.interval-timer-display {
  font-family: 'Bebas Neue', sans-serif;
  font-size: 3.6rem;
  line-height: 1;
  color: var(--gold);
  letter-spacing: .04em;
  transition: color .3s;
}
.interval-timer-hint {
  font-size: .68rem;
  color: var(--muted);
  margin-top: .4rem;
  line-height: 1.4;
}
.live-break-chip {
  display: inline-block;
  background: rgba(var(--gold-rgb), .12);
  border: 1px solid rgba(var(--gold-rgb), .3);
  color: var(--gold);
  font-size: .7rem;
  font-weight: 600;
  letter-spacing: .06em;
  padding: .2rem .6rem;
  border-radius: 20px;
  margin-top: .3rem;
}
.pair-dot { color:var(--text2); margin:0 .18rem; font-size:.85em; }
.seed-badge { color:var(--text2); font-weight:600; font-size:.85em; opacity:.85; }
