/* ===== #280 (2026-10-21): retired chains defined NATIVELY in this family's own sheet. */
:root[data-theme="d3"] {
  /* desert chain (canonical values) */
  --desert-bg: #0C121B; --desert-bg-rgb: 12,18,27;
  --desert-card: #141F2C; --desert-card-rgb: 20,31,44;
  --desert-pressed: #1B2A3B; --desert-pressed-rgb: 27,42,59;
  --desert-ink: #C7D0DA; --desert-ink-rgb: 199,208,218;
  --desert-ink-dim: #A4B3C2; --desert-ink-faint: #8FA3B5;
  --desert-rule: #223343;
  --desert-accent: #F2BC68; --desert-accent-rgb: 242,188,104;
  --desert-accent-soft: rgba(242,188,104,.12);
  --desert-accent-faint: rgba(242,188,104,.08);
  --desert-accent-ember: #F2BC68;
  --desert-accent-glow: rgba(242,188,104,.35);
  --desert-accent-glow-lg: rgba(242,188,104,.55);
  --desert-accent-deep: #B07E2E; --desert-accent-deep-rgb: 176,126,46;
  --desert-glass: rgba(12,18,27,.92);
  --desert-shadow: rgba(0,0,0,.45); --desert-shadow-rgb: 0,0,0;
  --desert-scrim-strong: rgba(12,18,27,.95);
  --desert-scrim-mid: rgba(12,18,27,.55);
  --desert-scrim-soft: rgba(12,18,27,.35);
  --desert-win-wash: rgba(242,188,104,.08);
  /* brand chain */
  --brand-action: #F2BC68; --brand-bg: #0C121B;
  --brand-ink: #C7D0DA; --brand-secondary: #A4B3C2;
  /* color chain */
  --color-bg: #0C121B; --color-surface: #141F2C;
  --color-surface-deep: #0A0F16; --color-text: #C7D0DA;
  --color-text-dim: #A4B3C2; --color-text-faint: #8FA3B5;
  --color-line: #223343; --color-accent: #F2BC68;
  --color-accent-deep: #B07E2E; --color-on-accent: #0C121B;
  --color-live: #F46B62;
  /* bible chain (the subset bible.css components consume on d3 pages) */
  --bible-bg: #0C121B; --bible-card: #141F2C; --bible-ink: #C7D0DA;
  --bible-ink-soft: #A4B3C2; --bible-ink-dim: #8FA3B5;
  --bible-red: #F2BC68; --bible-red-deep: #B07E2E;
  --bible-rule: #223343; --bible-minibar: rgba(12,18,27,.97);
  --bible-indexbar: rgba(12,18,27,.96); --bible-tabbar: rgba(12,18,27,.97);
  --bible-white: #F9F8F3; --bible-cream: #F9F8F3;
  --bible-cream-dim: rgba(249,248,243,.82);
  --bible-serif: 'Previously Display',Georgia,serif;
  --bible-hero-a: #1B2A3B; --bible-hero-b: #0C121B;
  --bible-hero-c: #0A0F16; --bible-hero-d: #0A0F16;
  --bible-art-a: #223343; --bible-art-b: #141F2C; --bible-art-c: #0A0F16;
  /* display token: the family's measured value (bridge :root re-point) */
  /* pv + generic font pins (tokens.css aliases resolve through these) */
  --pv-serif: 'Previously Display',Georgia,serif;
  --pv-live: #F46B62;
  --font-serif: 'Previously Display',Georgia,serif;
  --font-serif: 'Previously Display',Georgia,serif;
  --color-info: #1D5FBF;
  --media-black: #000000;
  --pv-serif: 'Previously Display',Georgia,serif;
}
/* ============================================================
   PREVIOUSLY — THE VEGAS BOARD (vegas-board.css)
   Scoped entirely under .vb — Vegas styling never leaks out.
   Tokens: brand gold read from the sports token sheet
   (hub-unified.css): --gold #F2BC68 / --gold-deep #D9A44E.
   ============================================================ */

/* ============================================================================
   PREVIOUSLY SPORTS FRONT — D3 CINEMATIC HYBRID (Task E, 2026-10-15)
   Front-only stylesheet: linked ONLY from /sports/index.html.
   Every rule is scoped under html[data-theme="d3"] and consumes the D3
   tokens from /css/design-tokens-d3.css. League fronts carry no
   data-theme="d3", so nothing here can reach them. No shared file edited.
   Presentation only — no data, feed, or JS logic is touched.
   ========================================================================== */

/* ---------- Ground & legacy wrappers ---------- */
html[data-theme="d3"] body.b-scope,
html[data-theme="d3"] .b-legacy,
html[data-theme="d3"] main,
html[data-theme="d3"] .sp-home,
html[data-theme="d3"] .page {
  background: var(--d3-ground);
  color: var(--d3-text);
}
html[data-theme="d3"] body.b-scope { font-family: var(--d3-font-ui); }
html[data-theme="d3"] .b-scope h1,
html[data-theme="d3"] .b-scope h2,
html[data-theme="d3"] .b-scope h3 { color: var(--d3-text); }

/* ---------- Bible chrome (nav injected by bible.js) ---------- */
html[data-theme="d3"] .b-topbar {
  background: var(--d3-ground);
  border-bottom: 2px solid var(--d3-accent);
}
html[data-theme="d3"] .b-wordmark {
  font-family: var(--d3-font-display); color: var(--d3-text);
}
html[data-theme="d3"] .b-wordmark em { color: #F2BC68; font-style: normal; }
html[data-theme="d3"] .b-nav-link,
html[data-theme="d3"] .b-dateline { color: var(--d3-text-2); }
html[data-theme="d3"] .b-nav-link:hover { color: var(--d3-text); }
html[data-theme="d3"] .b-nav-link[aria-current],
html[data-theme="d3"] .b-topnav a[aria-current] { color: var(--d3-text); }
html[data-theme="d3"] .b-nav-dropmenu {
  background: var(--d3-surface-1); border: 1px solid var(--d3-line);
  border-radius: var(--d3-radius);
}
/* SHEET GLASS (James, 2026-10-16): menu groups are NOT trays — the
   .b-drop-group half of this rule (surface fill + border + radius) is
   removed; groups separate by spacing + labels only, in sheets and in
   the desktop dropdown alike. The dropmenu panel keeps its surface. */
html[data-theme="d3"] .b-drop-glabel { color: var(--d3-text-3); }
html[data-theme="d3"] .b-drop-link { color: var(--d3-text-2); }
html[data-theme="d3"] .b-drop-link:hover { color: var(--d3-text); background: var(--d3-surface-2); }
html[data-theme="d3"] .pv-sg-btn { color: var(--d3-text-2); }
html[data-theme="d3"] .pv-sg-btn:hover { color: var(--d3-text); }
/* Sign-in / sign-up — element preserved exactly as the shell ships it;
   D3 paints it as the primary brick button. */
html[data-theme="d3"] .pv-signin {
  background: var(--d3-accent); color: var(--d3-text);
  border: 1px solid var(--d3-accent); border-radius: var(--d3-radius);
  font-weight: 600;
}
html[data-theme="d3"] .pv-signin:hover { background: var(--d3-accent-deep); color: var(--d3-text); text-decoration: none; }
html[data-theme="d3"] .pv-bell { color: var(--d3-text-2); }
html[data-theme="d3"] .pv-belldrop {
  background: var(--d3-surface-1); border: 1px solid var(--d3-line);
  border-radius: var(--d3-radius); color: var(--d3-text);
}
html[data-theme="d3"] .pv-belldrop-title { color: var(--d3-text); }
html[data-theme="d3"] .b-m-head { background: var(--d3-ground); }
html[data-theme="d3"] .b-sec-strip { background: var(--d3-ground); border-bottom: 1px solid var(--d3-line); }
html[data-theme="d3"] .b-sec-strip a { color: var(--d3-text-2); }
html[data-theme="d3"] .b-tabbar,
html[data-theme="d3"] .b-bottomnav {
  background: var(--d3-surface-1); border-top: 1px solid var(--d3-line);
}
html[data-theme="d3"] .b-tabbar a,
html[data-theme="d3"] .b-bottomnav a { color: var(--d3-text-2); }

/* ---------- League dropdown nav ---------- */
html[data-theme="d3"] .pv-league-nav {
  /* 2026-10-28 nav color match (James): the bar sits on the page ground,
     not the blue surface step. */
  background: var(--d3-ground); border-bottom: 1px solid var(--d3-line);
}
html[data-theme="d3"] .pv-league-nav a { color: var(--d3-text-2); }
html[data-theme="d3"] .pv-league-nav a:hover { color: var(--d3-text); }
html[data-theme="d3"] .pv-league-nav [class*="drop"],
html[data-theme="d3"] .pv-league-nav [class*="menu"],
html[data-theme="d3"] .pv-league-nav [class*="panel"] {
  background: var(--d3-surface-1); border-color: var(--d3-line);
}
/* 2026-10-28 nav color match (James): in-bar wrappers ride the nav ground,
   not the surface step -- only the dropdown panels keep the surface. */
html[data-theme="d3"] .pv-league-nav .pv-lgdrop,
html[data-theme="d3"] .pv-league-nav .pv-lgdrop__tab { background: transparent; }

/* ---------- Masthead ---------- */
html[data-theme="d3"] .b-masthead { background: var(--d3-ground); border-bottom: 1px solid var(--d3-line); }
html[data-theme="d3"] .b-kicker {
  color: var(--d3-accent-text); text-transform: uppercase;
  letter-spacing: .08em; font-weight: 700; font-size: var(--d3-size-meta);
}
html[data-theme="d3"] .b-kdot { background: var(--d3-accent); }
html[data-theme="d3"] .b-masthead h1 {
  font-family: var(--d3-font-display); color: var(--d3-text); letter-spacing: -.015em;
  /* The display face's glyphs run ~1.36em tall; bible.css's line-height:.92 was
     tuned for the bible serif, so the descender (Sports' "p") plunged ~10px into
     the dek at desktop size. The line box must fit this font: 1.12 + .08em
     margin clears the dek's 16px margin-top at every size. (2026-10-22) */
  line-height: 1.12; margin-bottom: .08em;
}
html[data-theme="d3"] .b-fresh {
  background: var(--d3-inset); color: var(--d3-text);
  border: 1px solid var(--d3-line); border-radius: var(--d3-radius);
}
html[data-theme="d3"] .b-dot { background: var(--d3-accent); }
html[data-theme="d3"] .b-meta-note { color: var(--d3-text-3); }

/* ---------- Index bar — the numbered rail (01 · 02 · 03) ---------- */
html[data-theme="d3"] .b-indexbar {
  background: var(--d3-surface-1); border-bottom: 1px solid var(--d3-line);
}
html[data-theme="d3"] .b-ilink { color: var(--d3-text-2); }
html[data-theme="d3"] .b-ilink:hover { color: var(--d3-text); text-decoration: none; }
html[data-theme="d3"] .b-ilink .b-n {
  font-family: var(--d3-font-display); font-weight: 700;
  color: var(--d3-accent-text);
}

/* ---------- Zone hero (renders only while 2+ games live) ---------- */
html[data-theme="d3"] .zone-hero {
  background: var(--d3-surface-1); border: 1px solid var(--d3-line);
  border-left: 3px solid #F2BC68; border-radius: var(--d3-radius);
  color: var(--d3-text);
}
html[data-theme="d3"] .zone-hero__t { font-family: var(--d3-font-display); color: var(--d3-text); }
html[data-theme="d3"] .zone-hero__d { color: var(--d3-text-2); }
html[data-theme="d3"] .zone-hero__go { color: var(--d3-accent-text); font-weight: 600; }
html[data-theme="d3"] .b-live {
  background: #F2BC68; color: #0C121B; border-radius: var(--d3-radius);
}
html[data-theme="d3"] .b-live-dot { background: var(--d3-text); }

/* ---------- Scores strip ---------- */
html[data-theme="d3"] .sp-strip-sec { background: var(--d3-inset); border-bottom: 1px solid var(--d3-line); }
html[data-theme="d3"] .sp-strip-label { color: var(--d3-text-3); }
html[data-theme="d3"] .sp-strip-label b { color: var(--d3-text-2); }
html[data-theme="d3"] .ss-empty { color: var(--d3-text-3); }
html[data-theme="d3"] .ss-tile {
  background: var(--d3-surface-1); border: 1px solid var(--d3-line);
  border-radius: var(--d3-radius);
}
html[data-theme="d3"] .ss-lg {
  color: var(--d3-accent-text); font-weight: 700; text-transform: uppercase; letter-spacing: .08em;
}
html[data-theme="d3"] .ss-team { color: var(--d3-text); }
html[data-theme="d3"] .ss-tname { color: var(--d3-text); }
html[data-theme="d3"] a.ss-team:hover .ss-tname { color: var(--d3-text); text-decoration: underline; text-underline-offset: 3px; }
html[data-theme="d3"] .ss-score { color: var(--d3-text); font-variant-numeric: tabular-nums; }
html[data-theme="d3"] .ss-status { color: var(--d3-text-3); font-variant-numeric: tabular-nums; }
html[data-theme="d3"] .ss-tile.is-live { border-color: var(--d3-accent); }
html[data-theme="d3"] .ss-tile.is-live .ss-status { color: var(--d3-accent-text); }
html[data-theme="d3"] .ss-tile.is-final .ss-status { color: var(--d3-text-2); }

/* ---------- League tab bar ---------- */
html[data-theme="d3"] .eh-leaguebar { background: var(--d3-ground); border-bottom: 1px solid var(--d3-line); }
html[data-theme="d3"] .eh-leaguebar a { color: var(--d3-text-2); }
html[data-theme="d3"] .eh-leaguebar a:hover { color: var(--d3-text); }
html[data-theme="d3"] .eh-leaguebar a[aria-current="page"] {
  color: var(--d3-text); border-bottom-color: var(--d3-accent);
}

/* ---------- ESPN hero (photo-led) ---------- */
html[data-theme="d3"] .eh-hero-main { background: var(--d3-inset); border-radius: var(--d3-radius); }
html[data-theme="d3"] .eh-hero-scrim {
  background: linear-gradient(to top, var(--d3-scrim-strong) 0%, var(--d3-scrim-strong) 22%, var(--d3-scrim-mid) 58%, var(--d3-scrim-none) 85%);
}
html[data-theme="d3"] .eh-kicker {
  color: var(--d3-accent-text); text-transform: uppercase;
  letter-spacing: .08em; font-weight: 700; font-size: var(--d3-size-meta);
}
html[data-theme="d3"] #ehHeroTitle {
  font-family: var(--d3-font-display); font-weight: 700;
  font-size: var(--d3-size-lead); line-height: 1.08; color: var(--d3-text);
}
html[data-theme="d3"] #ehHeroDek { color: var(--d3-text-2); }
html[data-theme="d3"] .eh-hero-side > * {
  background: var(--d3-surface-1); border: 1px solid var(--d3-line);
  border-radius: var(--d3-radius); color: var(--d3-text);
}
html[data-theme="d3"] .eh-hero-side a { color: var(--d3-text); }
html[data-theme="d3"] .eh-hero-side [class*="kicker"],
html[data-theme="d3"] .eh-hero-side [class*="meta"] { color: var(--d3-text-3); }

/* ---------- Section heads (kickers + Fraunces) ---------- */
html[data-theme="d3"] .kicker,
html[data-theme="d3"] .sp-sec-head .kicker,
html[data-theme="d3"] .hub-sec .kicker,
html[data-theme="d3"] .sec-head .kicker {
  color: var(--d3-accent-text); text-transform: uppercase;
  letter-spacing: .08em; font-weight: 700; font-size: var(--d3-size-meta);
}
html[data-theme="d3"] .sp-sec-head h2,
html[data-theme="d3"] .hub-sec h2,
html[data-theme="d3"] .sec-head h2 {
  font-family: var(--d3-font-display); font-weight: 400;
  font-size: var(--d3-size-section); color: var(--d3-text);
}
html[data-theme="d3"] .sp-sec-head { border-top: 2px solid var(--d3-line); }
html[data-theme="d3"] .sp-more { color: var(--d3-accent-text); }
html[data-theme="d3"] #secBoard .sp-more { color: var(--d3-text-3) !important; }

/* ---------- The Ticket — numbered legs (AURIX motif) ---------- */
html[data-theme="d3"] .tk-mod {
  background: var(--d3-surface-1);
  border-top: 1px solid var(--d3-line); border-bottom: 1px solid var(--d3-line);
}
html[data-theme="d3"] .tk-mod__kicker {
  color: var(--d3-accent-text); text-transform: uppercase; letter-spacing: .08em;
}
html[data-theme="d3"] .tk-mod__title {
  font-family: var(--d3-font-display); font-weight: 700; color: var(--d3-text);
}
html[data-theme="d3"] .tk-mod__date { color: var(--d3-text-2); }
html[data-theme="d3"] .tk-mod__odds {
  background: var(--d3-inset); border: 1px solid var(--d3-line);
  border-radius: var(--d3-radius); box-shadow: none;
}
html[data-theme="d3"] .tk-mod__odds-num {
  font-family: var(--d3-font-display); font-weight: 700;
  color: var(--d3-text); font-variant-numeric: tabular-nums;
}
html[data-theme="d3"] .tk-mod__odds-lbl { color: var(--d3-text-3); }
html[data-theme="d3"] .tk-mod__legs { counter-reset: tkleg; }
html[data-theme="d3"] .tk-leg {
  background: var(--d3-surface-2); border: 1px solid var(--d3-line);
  border-radius: var(--d3-radius); box-shadow: none; counter-increment: tkleg;
}
html[data-theme="d3"] .tk-leg::before {
  content: counter(tkleg, decimal-leading-zero);
  font-family: var(--d3-font-display); font-weight: 400; font-size: 28px;
  line-height: 1; color: var(--d3-accent);
}
html[data-theme="d3"] .tk-leg__sport {
  background: #F2BC68; color: #0C121B; border-radius: var(--d3-radius);
}
html[data-theme="d3"] .tk-leg__grade { color: var(--d3-text-3); }
html[data-theme="d3"] .tk-leg__matchup {
  font-family: var(--d3-font-display); font-weight: 400; color: var(--d3-text);
}
html[data-theme="d3"] .tk-leg__pick { color: var(--d3-accent-text); }
html[data-theme="d3"] .tk-leg__line { color: var(--d3-text-2); }
html[data-theme="d3"] .tk-leg__take { color: var(--d3-text-2); }
html[data-theme="d3"] .tk-mod__loading,
html[data-theme="d3"] .tk-mod__unavail { color: var(--d3-text-2); }
html[data-theme="d3"] .tk-mod .tk-mod__cta {
  background: #F2BC68; color: #0C121B; border-radius: var(--d3-radius);
}
html[data-theme="d3"] .tk-mod .tk-mod__cta:hover { background: #B00500; }

/* ---------- Wire / top stories ---------- */
html[data-theme="d3"] .sw-lead {
  background: var(--d3-surface-1); border: 1px solid var(--d3-line);
  border-radius: var(--d3-radius); color: var(--d3-text);
}
html[data-theme="d3"] .sw-lead-art { background: var(--d3-inset); }
html[data-theme="d3"] .sw-lead-kicker {
  color: var(--d3-accent-text); text-transform: uppercase; letter-spacing: .08em; font-weight: 700;
}
html[data-theme="d3"] .sw-lead-body b {
  font-family: var(--d3-font-display); font-weight: 600;
  font-size: var(--d3-size-card); color: var(--d3-text);
}
html[data-theme="d3"] .sw-lead-dek { color: var(--d3-text-2); }
html[data-theme="d3"] .sw-meta { color: var(--d3-text-3); }
html[data-theme="d3"] .sw-tile {
  background: var(--d3-surface-1); border: 1px solid var(--d3-line);
  border-radius: var(--d3-radius); color: var(--d3-text);
}
html[data-theme="d3"] .sw-tile-art { background: var(--d3-inset); }
html[data-theme="d3"] .sw-tile .sw-tile-body b { color: var(--d3-text); }
html[data-theme="d3"] .sw-tile:hover .sw-tile-body b {
  color: var(--d3-text); text-decoration-color: var(--d3-accent);
}

/* ---------- The Board widget (odds-home compact) — inset well ---------- */
html[data-theme="d3"] .sp-widget {
  background: var(--d3-inset); border: 1px solid var(--d3-line);
  border-radius: var(--d3-radius);
}
html[data-theme="d3"] .sp-widget .sp-sec-head { border-top: 0; }
html[data-theme="d3"] .oh-meta-line { color: var(--d3-text-3) !important; }
html[data-theme="d3"] .oh-ct {
  font-family: var(--d3-font-display); font-weight: 600; color: var(--d3-text);
  text-transform: uppercase; letter-spacing: .08em;
}
html[data-theme="d3"] .oh-cu { color: var(--d3-text-3); font-variant-numeric: tabular-nums; }
html[data-theme="d3"] .oh-cday {
  background: var(--d3-surface-2); color: var(--d3-text);
  text-transform: uppercase; letter-spacing: .08em; font-weight: 700;
}
html[data-theme="d3"] .oh-cgame { border-bottom: 1px solid var(--d3-line); color: var(--d3-text); }
html[data-theme="d3"] .oh-cteams { color: var(--d3-text); font-variant-numeric: tabular-nums; }
html[data-theme="d3"] .oh-cmeta { color: var(--d3-text-3); }
html[data-theme="d3"] .oh-cline { color: var(--d3-text-2); font-variant-numeric: tabular-nums; }
html[data-theme="d3"] .oh-final-tag { color: var(--d3-accent-text); font-weight: 700; }
html[data-theme="d3"] .oh-live-dot { background: #F46B62; }
html[data-theme="d3"] .oh-loading { color: var(--d3-text-2) !important; }
html[data-theme="d3"] .sp-rail .oh-more a { color: var(--d3-accent-text); }
html[data-theme="d3"] .oh-foot { color: var(--d3-text-3); }

/* ---------- League quick links ---------- */
html[data-theme="d3"] .sp-league {
  background: var(--d3-surface-1); border: 1px solid var(--d3-line);
  border-radius: var(--d3-radius); color: var(--d3-text);
}
html[data-theme="d3"] .sp-league:hover { background: var(--d3-surface-2); text-decoration: none; }

/* ---------- Featured matchups ---------- */
html[data-theme="d3"] .mc-section { background: var(--d3-ground); }
html[data-theme="d3"] .mc-kicker {
  color: var(--d3-accent-text); text-transform: uppercase;
  letter-spacing: .08em; font-weight: 700; font-size: var(--d3-size-meta);
}
html[data-theme="d3"] .mc-title {
  font-family: var(--d3-font-display); font-weight: 400;
  font-size: var(--d3-size-section); color: var(--d3-text);
}
html[data-theme="d3"] .mc-sub { color: var(--d3-text-2); }
html[data-theme="d3"] .mc-card.ds-data-card,
html[data-theme="d3"] .mc-card {
  background: var(--d3-surface-1); border: 1px solid var(--d3-line);
  border-radius: var(--d3-radius); color: var(--d3-text);
}
html[data-theme="d3"] .mc-card:hover { background: var(--d3-surface-2); }
html[data-theme="d3"] .mc-league {
  background: #F2BC68; color: #0C121B; border-radius: var(--d3-radius);
}
html[data-theme="d3"] .mc-kick { color: var(--d3-text-3); font-variant-numeric: tabular-nums; }
html[data-theme="d3"] .mc-team b { color: var(--d3-text); }
html[data-theme="d3"] .mc-at {
  font-family: var(--d3-font-display); font-style: italic; color: var(--d3-accent-text);
}
html[data-theme="d3"] .mc-odds-title { color: var(--d3-text-2); text-transform: uppercase; letter-spacing: .08em; }
html[data-theme="d3"] .mc-odds-src { color: var(--d3-text-3); }
html[data-theme="d3"] .mc-kickline { color: var(--d3-text); font-variant-numeric: tabular-nums; font-weight: 600; }
html[data-theme="d3"] .mc-venueline { color: var(--d3-text-3); }
html[data-theme="d3"] .mc-bigscore { color: var(--d3-text); font-variant-numeric: tabular-nums; }
html[data-theme="d3"] .mc-winner { color: var(--d3-text); }
html[data-theme="d3"] .mc-rec, html[data-theme="d3"] .mc-rank { color: var(--d3-text-3); }
html[data-theme="d3"] .mc-cta { color: var(--d3-accent-text); font-weight: 600; }
html[data-theme="d3"] .mc-disc { color: var(--d3-text-3); }
html[data-theme="d3"] .mc-loading { color: var(--d3-text-2) !important; }
html[data-theme="d3"] .mc-stale-note { color: var(--d3-text-3); }
html[data-theme="d3"] .mc-viewall a {
  color: var(--d3-accent-text); background: var(--d3-surface-1);
  border: 1px solid var(--d3-line); border-radius: var(--d3-radius);
}

/* ---------- Full scoreboard — the big inset well ---------- */
html[data-theme="d3"] .scoreboard {
  background: var(--d3-inset); border: 1px solid var(--d3-line);
  border-radius: var(--d3-radius);
}
html[data-theme="d3"] .board-status { color: var(--d3-text-2); text-transform: uppercase; letter-spacing: .08em; }
html[data-theme="d3"] .updated { color: var(--d3-text-3); }
html[data-theme="d3"] .updated b { color: var(--d3-text); }
html[data-theme="d3"] .board-title {
  font-family: var(--d3-font-display); font-weight: 400; color: var(--d3-text);
}
html[data-theme="d3"] .scoreboard .lede { color: var(--d3-text-2); }
html[data-theme="d3"] .offhours-title {
  font-family: var(--d3-font-display); font-weight: 400; color: var(--d3-text);
}
html[data-theme="d3"] .offhours-sub { color: var(--d3-text-2); }
/* League filters — upcoming / live / final state treatments */
html[data-theme="d3"] .lg-filter,
html[data-theme="d3"] .lg-chip {
  background: transparent; color: var(--d3-text-2);
  border: 1px solid transparent; border-radius: var(--d3-radius);
  font-variant-numeric: tabular-nums;
}
html[data-theme="d3"] .lg-filter:hover,
html[data-theme="d3"] .lg-chip:hover { color: var(--d3-text); }
html[data-theme="d3"] .lg-filter[aria-pressed="true"],
html[data-theme="d3"] .lg-chip[aria-pressed="true"] { color: var(--d3-text); font-weight: 700; }
html[data-theme="d3"] .pv-filter-bar { background: var(--d3-line); }
/* Stage */
html[data-theme="d3"] .stage {
  background: var(--d3-surface-1); border: 1px solid var(--d3-line);
  border-radius: var(--d3-radius); color: var(--d3-text);
}
html[data-theme="d3"] .stage.is-live {
  border-color: var(--d3-line); box-shadow: none;
}
html[data-theme="d3"] .team .score {
  font-family: var(--d3-font-display); color: var(--d3-text);
  font-variant-numeric: tabular-nums;
}
html[data-theme="d3"] .score.tbd { color: var(--d3-text-3); font-family: var(--d3-font-ui); }
html[data-theme="d3"] .team .meta { color: var(--d3-text); }
html[data-theme="d3"] .team .record { color: var(--d3-text-3); font-variant-numeric: tabular-nums; }
html[data-theme="d3"] .mid .at {
  font-family: var(--d3-font-display); font-style: italic; color: var(--d3-accent-text);
}
html[data-theme="d3"] .clockbox { background: var(--d3-inset); border-radius: var(--d3-radius); }
html[data-theme="d3"] .clockbox .clk { color: var(--d3-text); font-variant-numeric: tabular-nums; }
html[data-theme="d3"] .clockbox .per { color: var(--d3-text-2); }
html[data-theme="d3"] .live-tag { color: var(--d3-accent-text); font-weight: 700; }
html[data-theme="d3"] .down-dist { color: var(--d3-text-2); font-variant-numeric: tabular-nums; }
html[data-theme="d3"] .last-play { color: var(--d3-text-2); }
/* Linescore — data table inside the well */
html[data-theme="d3"] .linescore { background: var(--d3-inset); font-variant-numeric: tabular-nums; }
html[data-theme="d3"] .linescore .cell { color: var(--d3-text); border-color: var(--d3-line); }
html[data-theme="d3"] .linescore .qh { color: var(--d3-text-3); }
html[data-theme="d3"] .linescore .team-h { color: var(--d3-text-2); }
html[data-theme="d3"] .linescore .rowtot { background: var(--d3-surface-2); color: var(--d3-text); font-weight: 700; }
html[data-theme="d3"] .venue-net { color: var(--d3-text-2); }
html[data-theme="d3"] .venue-net b { color: var(--d3-text); }
html[data-theme="d3"] .ds-btn {
  background: var(--d3-surface-2); color: var(--d3-text);
  border: 1px solid var(--d3-line); border-radius: var(--d3-radius);
}
html[data-theme="d3"] .ds-btn:hover { background: var(--d3-surface-1); }
/* Rail game chips */
html[data-theme="d3"] .rail-label { color: var(--d3-text-3); }
html[data-theme="d3"] .gchip {
  background: var(--d3-surface-2); border: 1px solid var(--d3-line);
  border-radius: var(--d3-radius); color: var(--d3-text);
}
html[data-theme="d3"] .gchip-shade {
  background: linear-gradient(180deg, rgba(13,10,7,.18) 0%, rgba(13,10,7,.55) 100%);
}
html[data-theme="d3"] .gchip:hover { border-color: var(--d3-text-3); }
html[data-theme="d3"] .gchip[aria-selected="true"] { border-color: #F2BC68; }
html[data-theme="d3"] .gchip .lg,
html[data-theme="d3"] .gchip .lg-league { color: var(--d3-accent-text); }
html[data-theme="d3"] .gchip .ms { color: var(--d3-text); }
html[data-theme="d3"] .gchip .tm-name { color: var(--d3-text); }
html[data-theme="d3"] .gchip .vs { color: var(--d3-text-3); }
html[data-theme="d3"] .gchip .sub { color: var(--d3-text-2); }
html[data-theme="d3"] .gchip .when { color: var(--d3-text); font-variant-numeric: tabular-nums; }
html[data-theme="d3"] .gchip .net { color: var(--d3-text-3); }
html[data-theme="d3"] .gchip .sc,
html[data-theme="d3"] .gchip .gscore { color: var(--d3-text); font-variant-numeric: tabular-nums; }
html[data-theme="d3"] .live-pill {
  background: #F2BC68; color: #0C121B; border-radius: var(--d3-radius);
}

/* ---------- Live-game detail panel (live-game.js furniture) ---------- */
html[data-theme="d3"] .lg-panel,
html[data-theme="d3"] .lg-hero,
html[data-theme="d3"] .lg-teaser {
  background: var(--d3-surface-1); border: 1px solid var(--d3-line);
  border-radius: var(--d3-radius); color: var(--d3-text);
}
html[data-theme="d3"] .lg-teaser__kick { color: var(--d3-accent-text); }
html[data-theme="d3"] .lg-score { color: var(--d3-text); font-variant-numeric: tabular-nums; }
html[data-theme="d3"] .lg-clock { color: var(--d3-text); font-variant-numeric: tabular-nums; }
html[data-theme="d3"] .lg-live-dot { background: #F46B62; }
html[data-theme="d3"] .lg-note, html[data-theme="d3"] .lg-updated { color: var(--d3-text-3); }
html[data-theme="d3"] .lg-wp__bar { background: var(--d3-accent); }
html[data-theme="d3"] .lg-wp__lbl { color: var(--d3-text-2); }

/* ---------- Search ---------- */
html[data-theme="d3"] .pv-search__bar {
  background: var(--d3-inset); border: 1px solid var(--d3-line);
  border-radius: var(--d3-radius);
}
html[data-theme="d3"] .pv-search__input { background: transparent; color: var(--d3-text); }
html[data-theme="d3"] .pv-search__input::placeholder { color: var(--d3-text-3); }
html[data-theme="d3"] .pv-search__icon,
html[data-theme="d3"] .pv-search__clear { color: var(--d3-text-2); }
html[data-theme="d3"] .pv-search__results,
html[data-theme="d3"] [class*="pv-search__drop"] {
  background: var(--d3-surface-1); border: 1px solid var(--d3-line);
  border-radius: var(--d3-radius); color: var(--d3-text);
}
html[data-theme="d3"] .pv-search__results a { color: var(--d3-text); }
html[data-theme="d3"] .pv-search__noscript { color: var(--d3-text-2); }

/* ---------- Clips & highlights ---------- */
html[data-theme="d3"] button.ds-media-card,
html[data-theme="d3"] .ds-media-card {
  background: var(--d3-surface-1); border: 1px solid var(--d3-line);
  border-radius: var(--d3-radius); color: var(--d3-text);
}
html[data-theme="d3"] .ds-media-card:hover { background: var(--d3-surface-2); }
html[data-theme="d3"] #secClipsHighlights .vthumb { background: var(--d3-inset); }
html[data-theme="d3"] #secClipsHighlights .clip-league {
  background: #F2BC68; color: #0C121B; border-radius: var(--d3-radius);
}
html[data-theme="d3"] .ds-media-card__title {
  font-family: var(--d3-font-display); font-weight: 400; color: var(--d3-text);
}
html[data-theme="d3"] .ds-media-card__matchup { color: var(--d3-text-2); }
html[data-theme="d3"] .ds-media-card__meta { color: var(--d3-text-3); }
html[data-theme="d3"] .vplay { color: var(--d3-text); }

/* ---------- Tournament spotlight (inline desert <style> overridden) ---------- */
html[data-theme="d3"] .ts-spotlight {
  background: var(--d3-surface-1);
  border-top: 1px solid var(--d3-line); border-bottom: 1px solid var(--d3-line);
}
html[data-theme="d3"] .ts-tab {
  background: transparent; color: var(--d3-text-2);
  border: 1px solid var(--d3-line); border-radius: var(--d3-radius);
}
html[data-theme="d3"] .ts-tab.active {
  background: var(--d3-accent); border-color: var(--d3-accent); color: var(--d3-text);
}
html[data-theme="d3"] .ts-subtab {
  background: var(--d3-inset); color: var(--d3-text-2);
  border: 1px solid var(--d3-line); border-radius: var(--d3-radius);
}
html[data-theme="d3"] .ts-subtab.active {
  background: var(--d3-surface-2); border-color: var(--d3-line); color: var(--d3-text);
}
html[data-theme="d3"] .ts-kicker { color: var(--d3-accent-text); }
html[data-theme="d3"] .ts-title { font-family: var(--d3-font-display); color: var(--d3-text); }
html[data-theme="d3"] .ts-live-badge {
  background: #F46B62; color: #0C121B; border-radius: var(--d3-radius);
}
html[data-theme="d3"] .ts-more { color: var(--d3-accent-text); }
html[data-theme="d3"] .ts-match,
html[data-theme="d3"] .ts-fixture,
html[data-theme="d3"] .ts-scorer {
  background: var(--d3-inset); border: 1px solid var(--d3-line); border-radius: var(--d3-radius);
}
html[data-theme="d3"] .ts-match.ts-live { border-color: #F46B62; background: var(--d3-inset); }
html[data-theme="d3"] .ts-teams, html[data-theme="d3"] .ts-fx-teams { color: var(--d3-text); }
html[data-theme="d3"] .ts-score {
  font-family: var(--d3-font-display); color: var(--d3-text); font-variant-numeric: tabular-nums;
}
html[data-theme="d3"] .ts-status { color: var(--d3-text-3); }
html[data-theme="d3"] .ts-match.ts-live .ts-status { color: var(--d3-accent-text); }
html[data-theme="d3"] .ts-fx-vs { color: var(--d3-text-3); }
html[data-theme="d3"] .ts-fx-when { color: var(--d3-accent-text); }
html[data-theme="d3"] .ts-empty, html[data-theme="d3"] .ts-loading { color: var(--d3-text-2); }
html[data-theme="d3"] .ts-standings { background: var(--d3-inset); border-color: var(--d3-line); border-radius: var(--d3-radius); }
html[data-theme="d3"] .ts-standings th { color: var(--d3-text-3); border-bottom-color: var(--d3-line); }
html[data-theme="d3"] .ts-standings td { color: var(--d3-text); border-bottom-color: var(--d3-line); }
html[data-theme="d3"] .ts-st-pts { color: var(--d3-accent-text); }
html[data-theme="d3"] .ts-sc-rank {
  font-family: var(--d3-font-display); color: var(--d3-text-3);
}
html[data-theme="d3"] .ts-sc-name { color: var(--d3-text); }
html[data-theme="d3"] .ts-sc-team { color: var(--d3-text-3); }
html[data-theme="d3"] .ts-sc-goals { color: var(--d3-accent-text); }
html[data-theme="d3"] .ts-group-label { color: var(--d3-text-2); }
html[data-theme="d3"] .ts-group-select {
  background: var(--d3-inset); color: var(--d3-text);
  border: 1px solid var(--d3-line); border-radius: var(--d3-radius);
}
html[data-theme="d3"] .ts-src { color: var(--d3-text-3); }

/* ---------- House ads ---------- */
html[data-theme="d3"] .pv-hunit-label { color: var(--d3-text-3); }
html[data-theme="d3"] .pv-hunit-stage {
  background: var(--d3-surface-1); border: 1px solid var(--d3-line);
  border-radius: var(--d3-radius);
}
html[data-theme="d3"] .pv-housead-word { font-family: var(--d3-font-display); color: var(--d3-text); }
html[data-theme="d3"] .pv-housead-word em { color: var(--d3-accent); font-style: normal; }
html[data-theme="d3"] .pv-housead-tag { color: var(--d3-text-2); }
html[data-theme="d3"] .pv-housead-cta { color: var(--d3-accent-text); }

/* ---------- Sheet + video modal ---------- */
html[data-theme="d3"] .sheet-scrim { background: rgba(13,10,7,.72); }
html[data-theme="d3"] .sheet {
  background: var(--d3-surface-1); color: var(--d3-text);
  border-radius: var(--d3-radius); box-shadow: 0 30px 90px rgba(13,10,7,.6);
}
html[data-theme="d3"] .sheet .close { background: var(--d3-surface-2); color: var(--d3-text); border-radius: var(--d3-radius); }
html[data-theme="d3"] .sheet .sk { color: var(--d3-accent-text); }
html[data-theme="d3"] .sheet h3 { font-family: var(--d3-font-display); color: var(--d3-text); }
html[data-theme="d3"] .sheet-body { color: var(--d3-text-2); }
html[data-theme="d3"] .pv-modal__card {
  background: var(--d3-surface-1); border: 1px solid var(--d3-line);
  border-radius: var(--d3-radius); color: var(--d3-text);
}
html[data-theme="d3"] .pv-modal__card h2 { font-family: var(--d3-font-display); color: var(--d3-text); }
html[data-theme="d3"] .pv-modal__close { color: var(--d3-text-2); }
html[data-theme="d3"] .pv-modal__note { color: var(--d3-text-3); }

/* ---------- Fix round (proof-driven, 2026-10-15) ----------
   matchup-cards.css washes .mc-shade with a white gradient and panels
   .mc-score at rgba(255,255,255,.72) for the light theme; on D3 both go
   dark or the card's own text (now cream) vanishes. House-ad fallback
   creative gets its own D3 surface so it never depends on the stage. */
html[data-theme="d3"] .mc-shade {
  background-image: linear-gradient(180deg, rgba(13,10,7,.04) 0%, rgba(13,10,7,.16) 55%, rgba(13,10,7,.42) 100%);
}
html[data-theme="d3"] .mc-score {
  background: var(--d3-inset); border: 1px solid var(--d3-line);
  border-radius: var(--d3-radius);
}
html[data-theme="d3"] .mc-odds { background: transparent; }
html[data-theme="d3"] .mc-cell { color: var(--d3-text); }
html[data-theme="d3"] .pv-housead-creative {
  background: var(--d3-surface-1); border-radius: var(--d3-radius);
}
html[data-theme="d3"] .pv-hunit-stage ins.adsbygoogle { background: var(--d3-inset); }

/* ---------- Sheet fix round (proof-driven, 2026-10-15) ----------
   The game sheet is styled by ID-weighted legacy rules (#scrim .sheet
   paints it white, 14px radius, red CTA) that outrank class-scoped
   rules. Reclaim it with matching ID weight, still D3-scoped. */
/* live-game.css paints this sheet with !important rules in
   var(--color-warn) gold — the counters below carry !important too,
   at higher (ID-weighted) specificity, still fully D3-scoped. */
html[data-theme="d3"] #scrim .sheet {
  background: var(--d3-surface-1) !important; color: var(--d3-text) !important;
  border: 1px solid var(--d3-line); border-radius: var(--d3-radius) !important;
  box-shadow: 0 30px 90px rgba(13,10,7,.65);
}
html[data-theme="d3"] #scrim .sheet .close {
  background: var(--d3-surface-2); color: var(--d3-text) !important;
  border: 1px solid var(--d3-line); border-color: var(--d3-line) !important;
  border-radius: var(--d3-radius);
}
html[data-theme="d3"] #scrim .sheet .sk { color: var(--d3-accent-text) !important; }
html[data-theme="d3"] #shTitle {
  font-family: var(--d3-font-display) !important; font-weight: 400;
  color: var(--d3-text) !important; letter-spacing: normal !important;
}
html[data-theme="d3"] #scrim .sheet-full {
  background: #F2BC68; color: #0C121B !important;
  border-radius: var(--d3-radius);
}
html[data-theme="d3"] #scrim .sheet-full:hover { background: #B00500; }
html[data-theme="d3"] .lg-modal-plays li { color: var(--d3-text-2); }
html[data-theme="d3"] .lg-modal-plays li .lg-pmeta { color: var(--d3-text-3); }
html[data-theme="d3"] #shArt,
html[data-theme="d3"] .sheet-art,
html[data-theme="d3"] .sheet-hero { background: var(--d3-inset); border-radius: var(--d3-radius) var(--d3-radius) 0 0; }
html[data-theme="d3"] .sheet-hero--duel {
  background: radial-gradient(120% 90% at 50% 0%, var(--d3-surface-2) 0%, var(--d3-ground) 58%, var(--d3-inset) 100%);
}
html[data-theme="d3"] #scrim .sheet .row {
  border-bottom: 1px solid var(--d3-line) !important; color: var(--d3-text-2);
  font-variant-numeric: tabular-nums;
}
html[data-theme="d3"] #scrim .sheet .row span:first-child {
  color: var(--d3-text-3) !important; text-transform: uppercase; letter-spacing: .08em;
}
html[data-theme="d3"] #scrim .sheet .row span:last-child { color: var(--d3-text) !important; }
html[data-theme="d3"] .sheet-section h4 { color: var(--d3-accent-text); }
html[data-theme="d3"] .sheet-score { color: var(--d3-text); font-variant-numeric: tabular-nums; }
html[data-theme="d3"] .sheet .note { color: var(--d3-text-2); }
html[data-theme="d3"] .sheet-cta a:not(.sheet-full) { color: var(--d3-accent-text); }

/* ---------- Fix round 3 (mobile matchup + duel hero, 2026-10-15) ----------
   matchup-cards.css @media (max-width:760px) paints .mc-main with a
   white-to-cream gradient (desktop keeps it transparent, which is why
   1440 passed and 390 washed out). The sheet duel hero carries a light
   ::before overlay from sports.css. Both go dark here. */
html[data-theme="d3"] .mc-main { background: var(--d3-surface-1); }
html[data-theme="d3"] .mc-art { background: var(--d3-inset); }
html[data-theme="d3"] .sheet-hero--duel::before {
  background: linear-gradient(180deg, rgba(13,10,7,.18) 0%, rgba(13,10,7,.5) 100%);
}

/* ---------- Fix round 4 (sheet hero shade, 2026-10-15) ----------
   .sheet-hero-shade fades the duel hero into the sheet body with a
   cream gradient (250,246,238 at .85). On D3 it fades to surface-1. */
html[data-theme="d3"] .sheet-hero-shade {
  background: linear-gradient(180deg, rgba(13,10,7,0) 0%, rgba(13,10,7,.35) 60%, var(--d3-surface-1) 100%);
}
html[data-theme="d3"] .sheet-hero-vs { color: var(--d3-accent-text); }

/* ---------- Standings surface (wired 2026-10-15, Task E follow-up) ----------
   New front-only section #secStandings, rendered by
   /sports/js/front-d3-standings.js from the live 30-min endpoints
   /sports/data/hockey-nhl-standings.json + football-nfl-standings.json.
   Fail-closed in JS (hidden unless a full 32-team payload renders). */
html[data-theme="d3"] .std-sec {
  max-width: var(--pv-content-max, 1280px); margin: 0 auto;
  padding: 34px var(--d3-gutter) 8px;
}
html[data-theme="d3"] .std-sec .sp-sec-head { margin-bottom: 16px; }
html[data-theme="d3"] .std-conf { margin: 0 0 22px; }
html[data-theme="d3"] .std-conf-name {
  font-family: var(--d3-font-display); font-weight: 400; font-size: 20px;
  color: var(--d3-text); margin: 0 0 10px;
}
html[data-theme="d3"] .std-well {
  background: var(--d3-inset); border: 1px solid var(--d3-line);
  border-radius: var(--d3-radius); overflow-x: auto;
}
html[data-theme="d3"] .std-table {
  width: 100%; border-collapse: collapse; min-width: 520px;
  font-family: var(--d3-font-ui); font-size: 15px; font-variant-numeric: tabular-nums;
}
html[data-theme="d3"] .std-table th {
  text-align: right; color: var(--d3-text-3); font-size: var(--d3-size-meta);
  font-weight: 600; text-transform: uppercase; letter-spacing: .08em;
  padding: 12px 16px; border-bottom: 1px solid var(--d3-line);
}
html[data-theme="d3"] .std-table th.std-team-h { text-align: left; }
html[data-theme="d3"] .std-table td {
  color: var(--d3-text); padding: 10px 16px; border-bottom: 1px solid var(--d3-line);
}
html[data-theme="d3"] .std-table tr:last-child td { border-bottom: 0; }
html[data-theme="d3"] .std-table td.std-num,
html[data-theme="d3"] .std-table th.std-num { text-align: right; }
html[data-theme="d3"] .std-team-name { font-weight: 600; }
html[data-theme="d3"] .std-team-abbr { color: var(--d3-text-3); margin-left: 10px; font-size: 12.5px; letter-spacing: .06em; }
html[data-theme="d3"] .std-loading { color: var(--d3-text-2); padding: 18px 4px; }

/* ---------- Contrast fix round (site contrast guard, 2026-10-15) ----------
   Guard + own sweep findings on the converted front, all reclaimed
   with token pairings verified against the real rendered backgrounds:
   - .b-ilink.b-active was rgb(33,25,16) on surface-1 = 1.03:1 (bible
     ink wins the active state). Active now = cream on brick fill
     (4.77:1); its numeral goes cream too.
   - .pv-nl-btn was white on drift red #EC4634 = 3.82:1 -> brick fill.
   - .oh-cgame .at was --color-warn gold on inset = 3.34:1.
   - strip "reconnecting" <b>, search result count, clip-fresh line,
     footer headings/separators carried legacy ink/grays under AA. */
html[data-theme="d3"] .b-ilink.b-active {
  color: var(--d3-text) !important; background: #1B1B1B;
  border-bottom-color: #F2BC68; border-radius: var(--d3-radius);
}
html[data-theme="d3"] .b-ilink.b-active .b-n { color: var(--d3-text) !important; }
html[data-theme="d3"] .pv-nl-btn {
  background: #F2BC68 !important; color: #0C121B !important;
  border-radius: var(--d3-radius);
}
html[data-theme="d3"] .pv-nl-btn:hover { background: #B00500 !important; }
html[data-theme="d3"] .oh-cgame .at { color: var(--d3-accent-text); }
html[data-theme="d3"] .sp-strip-label b { color: var(--d3-text-2) !important; }
html[data-theme="d3"] .pv-search strong { color: var(--d3-text); }
html[data-theme="d3"] .clip-fresh { color: var(--d3-text-3) !important; }
html[data-theme="d3"] .pvf-footer__heading { color: var(--d3-text-3) !important; }
html[data-theme="d3"] .pvf-footer__sep { color: var(--d3-text-3) !important; }

/* ---------- Footer ---------- */
html[data-theme="d3"] .pvf-footer {
  background: var(--d3-ground); border-top: 1px solid var(--d3-line); color: var(--d3-text-2);
}
html[data-theme="d3"] .pvf-footer__wordmark { font-family: var(--d3-font-display); color: #F2BC68; }
html[data-theme="d3"] .pvf-footer__wordmark-dot { color: #F2BC68; }
html[data-theme="d3"] .pvf-footer__tagline { color: var(--d3-text-3); }
html[data-theme="d3"] .pvf-footer a { color: var(--d3-text-2); }
html[data-theme="d3"] .pvf-footer a:hover { color: var(--d3-text); }
html[data-theme="d3"] .pvf-footer__legal { color: var(--d3-text-3); }
/* ================= GATE 2 — SPORTS FAMILY ELEVATION (2026-10-15) =================
   ScorePulse board composition: the board is the page's hero zone.
   #secBoard is now ONE framed panel (moved in index.html to sit directly
   under the league bar): board head -> stage (MATCHUP hero) -> detail ->
   rail -> standings as the panel's lower tier. All rules D3-scoped and
   confined to this file (sports front only). */

/* ---------- The board panel ---------- */
html[data-theme="d3"] #secBoard {
  max-width: 1360px; margin: 26px auto 0;
  padding: 22px clamp(14px, 2.6vw, 36px) 26px;
  background: var(--d3-surface-1);
  border: 1px solid var(--d3-line); border-top: 3px solid var(--d3-line);
  border-radius: var(--d3-radius);
}
html[data-theme="d3"] #secBoard > .sp-sec-head { margin: 0 0 4px; }
html[data-theme="d3"] #secBoard > .sp-sec-head h2 {
  font-family: var(--d3-font-display); font-weight: 400;
  font-size: clamp(26px, 3vw, 36px); letter-spacing: -.01em;
}
html[data-theme="d3"] #secBoard .scoreboard {
  background: transparent; border: 0; border-radius: 0;
}
html[data-theme="d3"] #secBoard .scoreboard-inner { max-width: none; padding: 12px 0 4px; }
@media (max-width: 760px) {
  html[data-theme="d3"] #secBoard {
    margin: 20px 0 0; border-left: 0; border-right: 0;
    padding: 18px 14px 20px;
  }
}

/* ---------- Stage = the MATCHUP hero ----------
   The white app-icon crest boxes come off (base .tlogo paints a cream
   rounded square behind every logo). Crests ride bare on their team-tint
   aura; the center column drops its black box and reads as broadcast
   type; LIVE becomes the squared brick plate (homepage breaking-plate
   language), never a pill. */
html[data-theme="d3"] .stage {
  background:
    radial-gradient(120% 90% at 50% -10%, rgba(242,188,104,.12) 0%, rgba(242,188,104,0) 55%),
    linear-gradient(180deg, var(--d3-surface-2) 0%, var(--d3-surface-1) 72%);
  border: 1px solid var(--d3-line);
  box-shadow: 0 30px 80px rgba(13,10,7,.55), inset 0 1px 0 rgba(244,239,230,.05);
  padding: 52px 40px 38px;
}
html[data-theme="d3"] .stage.is-live { border-top: 3px solid var(--d3-line); }
html[data-theme="d3"] .team .tlogo {
  background: transparent; border-radius: 0; padding: 0;
  width: clamp(128px, 14.5vw, 196px);
  filter: drop-shadow(0 18px 38px rgba(13,10,7,.65));
}
html[data-theme="d3"] .team .crest .tint { opacity: .55; }
html[data-theme="d3"] .team .score { font-weight: 400; letter-spacing: -.03em; }
html[data-theme="d3"] .team .meta {
  font-family: var(--d3-font-display); font-weight: 600;
  font-size: clamp(18px, 2.1vw, 27px); letter-spacing: 0;
}
html[data-theme="d3"] .clockbox {
  background: transparent; border: 0; box-shadow: none;
  padding: 0; min-width: 0;
}
html[data-theme="d3"] .clockbox .clk {
  font-family: var(--d3-font-display); font-weight: 400;
  font-size: clamp(30px, 3.6vw, 46px); letter-spacing: 0;
}
html[data-theme="d3"] .clockbox .live-tag {
  background: #F2BC68; color: #0C121B;
  border-radius: var(--d3-radius);
}
@media (max-width: 760px) {
  html[data-theme="d3"] .stage { padding: 30px 10px 24px; gap: 8px; }
  html[data-theme="d3"] .team .tlogo { width: clamp(92px, 25vw, 120px); }
  html[data-theme="d3"] .team .crest { min-height: 0; }
  html[data-theme="d3"] .mid { min-width: 0; }
  html[data-theme="d3"] .clockbox .clk { font-size: 26px; }
}

/* Last play = ticker bar at the stage's foot */
html[data-theme="d3"] .last-play {
  background: var(--d3-inset); border-left: 3px solid #F2BC68;
  padding: 12px 16px; margin-top: 18px; font-size: 15px;
}

/* ---------- Standings = the board's lower tier ---------- */
html[data-theme="d3"] #secBoard .std-sec {
  max-width: none; margin: 0; padding: 24px 0 2px;
  border-top: 1px solid var(--d3-line);
}
html[data-theme="d3"] #secBoard .std-table { min-width: 0; }
@media (min-width: 1024px) {
  html[data-theme="d3"] #secBoard .std-body {
    display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 8px 30px;
  }
  html[data-theme="d3"] #secBoard .std-conf { margin-bottom: 6px; }
}

/* ---------- Strip tiles: no floating-card recipe ---------- */
html[data-theme="d3"] .ss-tile { box-shadow: none; }
html[data-theme="d3"] .ss-tile.is-live {
  border-color: var(--d3-line);
  box-shadow: none;
}

/* ---------- Masthead LIVE plate: squared ---------- */
html[data-theme="d3"] .b-live { border-radius: var(--d3-radius); }

/* ---------- Sheet scorebug fix (inherited defect) ----------
   At phone widths the duel scorebug's fixed sizes (64px crests, 44px
   scores, 16px gaps) overflow the sheet's inner width and the two
   teams' blocks collide in the center. Scale the duel down as one
   composition under 640px; the flex duel (logos outside, scores
   inside) is preserved, nothing wraps or overlaps. */
@media (max-width: 640px) {
  html[data-theme="d3"] .sheet-hero-inner { padding: 26px 14px 16px; gap: 8px; }
  html[data-theme="d3"] .sheet-score {
    gap: 8px; width: 100%; flex-wrap: nowrap;
    justify-content: space-between;
  }
  html[data-theme="d3"] .sheet-score .tm { gap: 7px; min-width: 0; }
  html[data-theme="d3"] .sheet-score .tm img { width: 44px; height: 44px; }
  html[data-theme="d3"] .sheet-score .tm em { font-size: 13px; }
  html[data-theme="d3"] .sheet-score .tm b { font-size: 34px; }
  html[data-theme="d3"] .sheet-score .dash { font-size: 20px; }
  html[data-theme="d3"] .sheet-hero-teams { gap: 14px; }
  html[data-theme="d3"] .sheet-hero-teams img { width: 64px; height: 64px; }
}

/* Gate 2 fix round: one title per board (the panel head carries it; the
   scoreboard's own board-title/lede duplicate it), squared chips with
   bare crests (no cream app-icon tiles), squared live pills, stacked
   board head on phones. */
html[data-theme="d3"] #secBoard .scoreboard .board-title,
html[data-theme="d3"] #secBoard .scoreboard .lede { display: none; }
html[data-theme="d3"] .gchip { border-radius: var(--d3-radius); }
html[data-theme="d3"] .gchip .ms .cl {
  background: transparent; border-radius: 0; padding: 0;
}
html[data-theme="d3"] .live-pill { border-radius: var(--d3-radius); }
@media (max-width: 760px) {
  html[data-theme="d3"] #secBoard > .sp-sec-head {
    flex-direction: column; align-items: flex-start; gap: 2px;
  }
}

/* MARATHON FONT — PHASE 1 (sports front wordmarks): the shared header/footer WORDMARKS
   convert in Phase 1 even though the sports family display type
   (headlines via --d3-font-display) converts in the sports phase.
   Wordmark-only: no headline token is touched here. */
html[data-theme="d3"] .b-wordmark { font-family: "Previously Display", Georgia, serif; }
html[data-theme="d3"] .pvf-footer__wordmark { font-family: "Previously Display", Georgia, serif; }

/* ALL-RED WORDMARK (James, 2026-10-16 06:22 PT): sports lockup renders
   entirely in signal red #F2BC68 — letters and period. */
html[data-theme="d3"] .b-wordmark{color:#F2BC68}

/* ALL-RED WORDMARK STRAGGLER FIX 3 (James, 2026-10-16 06:22 PT): this
   file's d3 house-ad wordmark rules (lines ~545) — the brand lockup
   renders entirely in signal red #F2BC68, letters and period. */
html[data-theme="d3"] .pv-housead-word{color:#F2BC68}
html[data-theme="d3"] .pv-housead-word em{color:#F2BC68}

/* ================= RAIDERS PHASE 2 (2026-10-16) =================
   Accent-filled controls carry BLACK text on the white accent (silver on
   white was ~2.3:1); hover on accent-deep carries white. Brand chain and
   the masthead stripe resolve white on this family. */
html[data-theme="d3"]{--brand-red:#FFFFFF;--brand-red-rgb:255,255,255;--brand-red-ember:#D7DBDD}
html[data-theme="d3"] .b-masthead{border-top-color:var(--d3-accent)}
html[data-theme="d3"] .zone-hero__go{border-bottom-color:#FFFFFF}
html[data-theme="d3"] .pv-signin{color:#000000}
html[data-theme="d3"] .pv-signin:hover{color:#FFFFFF}
html[data-theme="d3"] .b-live{color:#000000}
html[data-theme="d3"] .b-live-dot{background:#000000}
html[data-theme="d3"] .pv-nl-btn{color:#FFFFFF!important}
html[data-theme="d3"] .pv-nl-btn:hover{color:#FFFFFF!important}

/* RAIDERS P2 residual: masthead kicker dot = white accent */
html[data-theme="d3"] .b-scope .b-kdot{background:#FFFFFF}

/* SPORTSTIDY 2026-10-17: visually-hidden utility (structural h1 after the
   masthead removal). */
.pv-sr-only{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* SPORTSTIDY 2026-10-17: the D3 token layer names Fraunces as the display
   face (retired scheme). On THIS page (the sports front — the only page
   that loads this sheet, last in its cascade) the display token takes the
   house face: Marathon Long Run Display 400 ('Previously Display'). */
:root[data-theme="d3"]{--d3-font-display:'Previously Display',sans-serif}

/* ===== Standings identity pass — 2026-10-17 stats-legibility crew =====
   Conference heading pinned to the house display face (never a serif,
   whatever the token layer does); team logos sized to the row; phone
   fit: the 520px table minimum is removed at <=720px, padding compacts,
   and the NFL ties column (near-always 0) drops on phone so PCT and
   STRK stay on screen — no sideways scrolling, nothing clipped. */
html[data-theme="d3"] .std-conf-name { font-family: 'Previously Display', sans-serif; font-weight: 400; }
html[data-theme="d3"] .std-team-logo { width: 24px; height: 24px; object-fit: contain; vertical-align: -7px; margin-right: 10px; }
@media (max-width: 720px) {
  html[data-theme="d3"] .std-table { min-width: 0; font-size: 14px; }
  html[data-theme="d3"] .std-table th,
  html[data-theme="d3"] .std-table td { padding: 9px 8px; }
  html[data-theme="d3"] .std-table th:first-child,
  html[data-theme="d3"] .std-table td:first-child { padding-left: 12px; }
  html[data-theme="d3"] .std-table th:last-child,
  html[data-theme="d3"] .std-table td:last-child { padding-right: 12px; }
  html[data-theme="d3"] .std-c-ties { display: none; }
  html[data-theme="d3"] .std-team-logo { width: 20px; height: 20px; vertical-align: -5px; margin-right: 8px; }
  html[data-theme="d3"] .std-team-abbr { margin-left: 6px; }
}

/* ===== Standings head fit + phone de-clutter — 2026-10-18 (James report) =====
   Root cause: .sp-sec-head (sports.css) is a nowrap flex row. Inside
   #secStandings its children — kicker + h2 + the .std-updated stamp
   (white-space:nowrap, "Updated 1:30 PM PT · via ESPN") — cannot fit
   412px: measured live, the stamp's box ran to x=436 and was clipped
   mid-word at the screen edge, and the h2 wrapped mid-phrase beside it.
   Fix, scoped to this component only: the head may wrap, and at phone
   widths the stamp takes its own line under the heading — nothing is
   clipped at 360-430px and the page gains no horizontal scroll.
   Type: this component's headings already compute to the house face
   ('Previously Display' = Marathon Long Run Display 400) via the token
   override at the foot of this sheet — the family is pinned here so the
   component can never drift back to the retired token serif.
   Phone table: the redundant team abbreviation drops at <=720px (the
   row already carries the real logo + the full team name); the freed
   width goes to the name and the W/L/PCT/STRK columns, which all stay. */
html[data-theme="d3"] .std-sec .sp-sec-head { flex-wrap: wrap; row-gap: 6px; }
html[data-theme="d3"] .std-sec .sp-sec-head h2,
html[data-theme="d3"] .std-conf-name { font-family: 'Previously Display', sans-serif; }
html[data-theme="d3"] .std-updated { min-width: 0; }
@media (max-width: 720px) {
  html[data-theme="d3"] .std-sec .sp-sec-head .std-updated {
    order: 3; flex-basis: 100%; margin-left: 0; white-space: normal;
  }
  html[data-theme="d3"] .std-team-abbr { display: none; }
}

/* ---------- Contrast tranche 1 (PMF Wave 2 · Item 5, 2026-10-18) ----------
   Remaining sub-AA nodes on the converted front, reclaimed with locked
   token pairings measured against their real rendered backgrounds:
   - .mc-abbr carried body-scope --desert-ink #2A1C11 on the #060606 card
     well (1.23:1) -> d3 silver (8.8:1).
   - .pv-search__meta carried the same legacy ink at .78 alpha on black
     (1.18:1) -> d3 text-2 #8C9399 (6.75:1). Its <strong> count was
     already reclaimed in the 2026-10-15 round above.
   - .stage-peek .pk-line sat under the peek button's .6 opacity in
     legacy dim ink (1.02:1) -> white, which composites to 6.9:1 at .6
     over the peek's #1B1B1B gradient; the peek's dimmed-preview look
     (opacity .6, brightening on hover/focus) is unchanged. */
html[data-theme="d3"] .mc-abbr { color: var(--d3-text); }
html[data-theme="d3"] .pv-search__meta { color: var(--d3-text-2); }
html[data-theme="d3"] .stage-peek .pk-line { color: #FFFFFF; }

/* LIVING EDITION D-B — SPORTS FRONT WORDMARK (Phase B-2 G1/G3; James
   verdict 2026-10-18): this file pinned the retired all-red lockup at
   lines 29-32 + 901 and outranked the shell block. Letters warm white,
   period gold. Rollback: delete this block (+ restore .bak-dbmig-20261018). */
html[data-theme="d3"] .b-wordmark{color:#F9F8F3}
html[data-theme="d3"] .b-wordmark em{color:#F2BC68;font-style:normal}

/* G3 addendum: the board error state's retry action is the focal action —
   gold with ink text (was the retired red). */
html[data-theme="d3"] .pv-boardstate__retry{
  background:#F2BC68; color:#0C121B; border:0;
}

/* G3 addendum 2 (Phase B-2): the d3-scoped league plate at line ~321 of
   this sheet outranked the component sheet's pin — re-assert the D-B
   focal plate here at the same scope: gold fill, ink text. */
html[data-theme="d3"] .mc-league{background:#F2BC68;color:#0C121B}

/* G3 addendum 3 (Phase B-2): filled gold plates take ink text (house
   rule) — the plate color is re-asserted at card scope. */
html[data-theme="d3"] .mc-card .mc-league{color:#0C121B}

/* ==========================================================================
   D-B FIDELITY PASS — 2026-10-18 (James's verdicts 23:09–23:10 PT).
   The B-2 skin re-pointed color but kept the old d3 shapes: story text sat
   on solid slate panels, the Board was a ruled tray, and the featured
   matchup card computed to the 2px "squared" token. Reference of record:
   Step 0 D-B renders + the D-C Signal Room sports graft (rounded stage
   cards, text floating on the photo, finals rows as individual rounded
   modules). Radii follow the D-B tokens: panel 20 / stage 22 / card 14 /
   row 12 / chip 6. Rollback: delete this block (+ the token note in
   design-tokens-d3.css).
   ========================================================================== */

/* — Story wall: full-art cards; text floats on an ink scrim, never a box — */
html[data-theme="d3"] .sw-tile {
  position: relative; display: flex; flex-direction: column; overflow: hidden;
  background: #0A0F16; border: 0; border-radius: 14px;
  box-shadow: 0 14px 34px rgba(0,0,0,.42); min-height: 248px;
}
html[data-theme="d3"] .sw-tile-art {
  position: absolute; inset: 0; aspect-ratio: auto; background: var(--d3-inset);
}
html[data-theme="d3"] .sw-tile-body {
  position: relative; z-index: 1; margin-top: auto; padding: 58px 16px 14px;
  background: linear-gradient(180deg, rgba(10,15,22,0) 0%, rgba(10,15,22,.62) 48%, rgba(10,15,22,.93) 100%);
}
html[data-theme="d3"] .sw-lead {
  position: relative; display: flex; flex-direction: column; justify-content: flex-end;
  overflow: hidden; background: #0A0F16; border: 0; border-radius: 22px;
  box-shadow: 0 18px 40px rgba(0,0,0,.45); min-height: 380px;
}
html[data-theme="d3"] .sw-lead-art {
  position: absolute; inset: 0; min-height: 0; background: var(--d3-inset);
}
html[data-theme="d3"] .sw-lead-art img { height: 100%; aspect-ratio: auto; }
html[data-theme="d3"] .sw-lead::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(180deg, rgba(10,15,22,.05) 34%, rgba(10,15,22,.66) 68%, rgba(10,15,22,.94) 100%);
}
html[data-theme="d3"] .sw-lead-body {
  position: relative; z-index: 1; max-width: 660px; padding: 110px 28px 24px;
}
@media (max-width: 700px) {
  html[data-theme="d3"] .sw-lead { min-height: 330px; }
  html[data-theme="d3"] .sw-lead-body { padding: 84px 20px 20px; }
  html[data-theme="d3"] .sw-tile { min-height: 230px; }
}

/* — The Board: the tray goes away; each row is a floating module — */
html[data-theme="d3"] .sp-widget {
  background: transparent; border: 0; border-radius: 0; box-shadow: none;
}
html[data-theme="d3"] .oh-cday {
  background: transparent; margin: 0 2px 8px; padding: 2px 4px;
}
html[data-theme="d3"] .oh-cgame {
  background: linear-gradient(150deg, #1B2A3B, #131E2C);
  border: 0; border-radius: 12px;
  box-shadow: 0 10px 24px rgba(0,0,0,.38);
  margin: 0 2px 9px; padding: 11px 14px;
}

/* — Featured matchup: panel finish; the flat sub-panel goes transparent — */
html[data-theme="d3"] .mc-card {
  border-radius: 20px; border-color: transparent;
  background: linear-gradient(160deg, #1B2A3B, #131E2C);
  box-shadow: 0 16px 38px rgba(0,0,0,.45);
}
html[data-theme="d3"] .mc-card:hover { background: linear-gradient(160deg, #1F2E40, #152233); }
html[data-theme="d3"] .mc-main { background: transparent; }
html[data-theme="d3"] .mc-league { border-radius: 6px; }

/* — Score-strip chips, soccer tiles, standings well: floating finish — */
html[data-theme="d3"] .gchip {
  border-color: transparent;
  background: linear-gradient(150deg, #1B2A3B, #131E2C);
  box-shadow: 0 8px 20px rgba(0,0,0,.35);
}
html[data-theme="d3"] .gchip[aria-selected="true"] { border-color: #F2BC68; }
html[data-theme="d3"] .ss-tile {
  border-color: transparent;
  background: linear-gradient(150deg, #1B2A3B, #131E2C);
  box-shadow: 0 8px 20px rgba(0,0,0,.35);
}
html[data-theme="d3"] .std-well {
  background: linear-gradient(150deg, #1B2A3B, #131E2C);
  border: 0; border-radius: 20px;
  box-shadow: 0 14px 34px rgba(0,0,0,.42);
}

/* — TICKET EXEMPT: the --d3-radius token rose system-wide in this pass;
     the Ticket (paper-slip identity, exempt by James's standing order)
     is re-pinned to its exact pre-pass shape so it does not move. — */
html[data-theme="d3"] .tk-mod__odds,
html[data-theme="d3"] .tk-leg,
html[data-theme="d3"] .tk-leg__sport,
html[data-theme="d3"] .tk-mod .tk-mod__cta { border-radius: 2px; }


/* ==========================================================================
   SEAMLESS LISTS — 2026-10-19 (#6 repeated-fix; James's verdict 01:12 PT:
   "I don't like the scores being in that pill rectangle box — I'd rather it
   be seamless like the screenshot on the right. Those are lists just the
   same, but one of them looks old and cheap — and those pills.").
   The fidelity pass rounded the Board's rows; a rounded box is still a box.
   LISTS ARE NOT MODULES: Board rows lose their per-row surface entirely —
   no background, no radius, no shadow, no gaps — and become hairline-
   separated rows on the widget's ONE calm panel, the At a Glance pattern
   (games/css/game-pages.css .gm-facts is the reference implementation:
   one module, rows transparent, hairlines between, content floating).
   Both logos, both team colors (duel bars), scores, FINAL/live states and
   tap targets are untouched — surface treatment only.
   Rollback: delete this block and its odds-home.css twin.
   ========================================================================== */
html[data-theme="d3"] .sp-widget[aria-label="Today's scores"] {
  background: linear-gradient(165deg, #182635 0%, #101A26 78%);
  border: 0; border-radius: 20px;
  box-shadow: 0 16px 42px rgba(0,0,0,.45);
  padding: 16px 18px 14px;
}
html[data-theme="d3"] .oh-compact { background: transparent; border: 0; border-radius: 0; box-shadow: none; }
html[data-theme="d3"] .oh-cday {
  background: transparent; margin: 14px 0 2px; padding: 0 4px;
}
html[data-theme="d3"] .oh-cgame {
  background: transparent; border: 0; border-radius: 0; box-shadow: none;
  border-bottom: 1px solid var(--d3-line);
  margin: 0; padding: 11px 4px;
}
html[data-theme="d3"] a.oh-cgame:hover { background: rgba(147,182,206,.05); }

/* ---------- Standings follow the board league (2026-10-19) ----------
   The module's headings are pinned to the house display face (Marathon /
   'Previously Display') at ID specificity so no shared section-head rule
   can drift them back to a serif. A single-group league (Premier League)
   takes the full module width instead of one grid column; soccer
   GF/GA columns yield on phone so no team name is ever squeezed. */
html[data-theme="d3"] #secStandings .sp-sec-head h2,
html[data-theme="d3"] #secStandings .std-conf-name { font-family: 'Previously Display', sans-serif; }
html[data-theme="d3"] #secStandings a.std-team-name { color: inherit; text-decoration: none; }
@media (min-width: 1024px) {
  html[data-theme="d3"] #secBoard .std-body.std-body--single { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 700px) {
  html[data-theme="d3"] #secStandings .std-c-gf,
  html[data-theme="d3"] #secStandings .std-c-ga { display: none; }
}

/* ---------- ESPN hero layout + side stories, visual-first (2026-10-19) ----------
   Owner exhibit 2026-10-19: the side stories rendered as a small left
   thumbnail + headline in a fixed navy box, bottom ~40% dead fill.
   Now the same treatment as the lead: the story's real photo FILLS the
   card (absolute cover), kicker + headline float on the art over the
   shared scrim, and the card's height comes from the hero grid row —
   the image covers whatever height the row gives it, so no empty fill
   can exist. Photoless stories take .eh-side-plate (typographic plate
   on the inset ground), never a substitute image.
   The [hidden] guard below is load-bearing: .eh-hero ships hidden and
   a bare display:grid would override the hidden attribute and surface
   an empty block on the front. */
html[data-theme="d3"] .eh-hero[hidden] { display: none; }
html[data-theme="d3"] .eh-hero {
  display: grid; grid-template-columns: minmax(0, 1.9fr) minmax(0, 1fr);
  gap: 14px; align-items: stretch;
}
html[data-theme="d3"] .eh-hero-main { position: relative; display: block; overflow: hidden; min-height: 430px; }
html[data-theme="d3"] .eh-hero-main img {
  position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; display: block;
}
html[data-theme="d3"] .eh-hero-scrim { position: absolute; inset: 0; }
html[data-theme="d3"] .eh-hero-copy { position: absolute; left: 0; right: 0; bottom: 0; padding: 22px 24px; }
html[data-theme="d3"] .eh-hero-side { display: grid; grid-auto-rows: 1fr; gap: 14px; min-height: 0; }
html[data-theme="d3"] .eh-side-story {
  position: relative; display: block; overflow: hidden; min-height: 0;
  border-radius: var(--d3-radius); background: var(--d3-surface-1);
  border: 1px solid var(--d3-line); color: var(--d3-text); text-decoration: none;
}
html[data-theme="d3"] .eh-side-story img {
  position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; display: block;
}
html[data-theme="d3"] .eh-side-scrim {
  position: absolute; inset: 0;
  background: linear-gradient(to top, var(--d3-scrim-strong) 0%, var(--d3-scrim-strong) 26%, var(--d3-scrim-mid) 62%, var(--d3-scrim-none) 88%);
}
html[data-theme="d3"] .eh-side-copy { position: absolute; left: 0; right: 0; bottom: 0; padding: 13px 15px; }
html[data-theme="d3"] .eh-side-story .eh-k {
  color: var(--d3-accent-text); text-transform: uppercase;
  letter-spacing: .08em; font-weight: 700; font-size: var(--d3-size-meta);
  margin-bottom: 5px;
}
html[data-theme="d3"] .eh-side-story h3 {
  font-family: var(--d3-font-display); font-weight: 700; color: var(--d3-text);
  font-size: 19px; line-height: 1.16; margin: 0;
  display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
}
html[data-theme="d3"] .eh-side-plate { background: var(--d3-inset); }
@media (max-width: 860px) {
  html[data-theme="d3"] .eh-hero { grid-template-columns: 1fr; }
  html[data-theme="d3"] .eh-hero-main { min-height: 380px; }
  html[data-theme="d3"] .eh-hero-side { grid-auto-rows: auto; }
  html[data-theme="d3"] #ehHeroDek {
    display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
  }
  html[data-theme="d3"] .eh-side-story { aspect-ratio: 16 / 9; }
  html[data-theme="d3"] .eh-side-story h3 { font-size: 18px; }
}


/* ==========================================================================
   GOLD WORDMARK EVERYWHERE (James, 2026-10-19 13:49 PT): full lockup
   in signature gold #F2BC68; red brand fills convert to gold. Same
   selectors as this file's governing rules, file end, win on order.
   Rollback: delete this block (backup .bak-gw-20261019).
   ========================================================================== */
html[data-theme="d3"] .b-wordmark{color:#F2BC68}
html[data-theme="d3"] .b-wordmark em{color:#F2BC68}
html[data-theme="d3"] .pv-housead-word{color:#F2BC68}
html[data-theme="d3"] .pv-housead-word em{color:#F2BC68}
html[data-theme="d3"] .pvf-footer__wordmark{color:#F2BC68}
html[data-theme="d3"] .pvf-footer__wordmark-dot{color:#F2BC68}


/* ==========================================================================
   GOLD WORDMARK EVERYWHERE — GW2 mop-up (James, 2026-10-19): the
   live-render sweep caught these red brand surfaces still computing
   red/coral. Converted to the gold treatment (gold fill + ink text,
   or gold text). Same selectors as the governing rules, file end.
   Rollback: delete this block (backup .bak-gw2-20261019).
   ========================================================================== */
html[data-theme="d3"] .tk-leg__sport{background:#F2BC68;color:#0C121B}
html[data-theme="d3"] .tk-mod .tk-mod__cta{background:#F2BC68;color:#0C121B}
html[data-theme="d3"] .tk-mod .tk-mod__cta:hover{background:#B07E2E;color:#0C121B}
html[data-theme="d3"] .live-pill{background:#F2BC68;color:#0C121B}
html[data-theme="d3"] .live-tag{background:#F2BC68;color:#0C121B}
html[data-theme="d3"] .pv-nl-btn{background:#F2BC68 !important;color:#0C121B !important}
html[data-theme="d3"] .pv-nl-btn:hover{background:#B07E2E !important;color:#0C121B !important}


/* ==========================================================================
   GOLD WORDMARK EVERYWHERE — GW3 (James, 2026-10-19): red accent
   bars on live surfaces convert to gold (live state itself is
   carried by the coral dot + status text). File end, win on order.
   Rollback: delete this block (backup .bak-gw3-20261019).
   ========================================================================== */
html[data-theme="d3"] .zone-hero{border-left-color:#F2BC68}
html[data-theme="d3"] .last-play{border-left-color:#F2BC68}
html[data-theme="d3"] .ss-tile.is-live{box-shadow:none}


/* ==========================================================================
   GOLD WORDMARK EVERYWHERE — GW3 (James, 2026-10-19): matched-rule
   diagnostics on live renders found these higher-specificity red
   rules still winning. Converted with their exact selector shapes.
   Rollback: delete this block (backup .bak-gw3-20261019).
   ========================================================================== */
html[data-theme="d3"] .clockbox .live-tag{background:#F2BC68;color:#0C121B}

/* SLS 2026-10-19 (Contrast Guard crit): winner-row abbreviations in the
   featured matchup cards sat in dark amber #8A5A12 — 3.25:1 on the d3
   charcoal. House gold #F2BC68 measures ~9.5:1 on that ground and keeps
   the winner treatment inside the design language. Team colors and the
   light-theme treatment are untouched. */
html[data-theme="d3"] #mcFeatured .mc-winner .mc-abbr{color:#F2BC68}

/* #280 front homing: body-scope resolutions from the desert-anchor era
   + the bridge's .tt-slim / masthead / band heals, made native. The
   sheet's own Raiders white brand trio (below) is untouched. */
html[data-theme="d3"] body {
  --brand-action: #C7D0DA;
  --brand-secondary: #141F2C;
  --pv-live: #F2BC68;
  --pv-noir: #0C121B;
  --desert-ink: #C7D0DA;
  --pv-red: #F2BC68;
}

   Canonical treatment: slate band, display title, gold kicker + CTA. ---- */
html[data-theme="d3"] .pp-promo{ background:var(--d3-surface-1); border-top:1px solid var(--d3-line); border-bottom:1px solid var(--d3-line); }
html[data-theme="d3"] .pp-promo__title{ color:var(--d3-text); font-family:var(--d3-font-display); }
html[data-theme="d3"] .pp-promo__kicker{ color:var(--d3-accent-text); }
html[data-theme="d3"] .pp-promo__cta{ background:var(--d3-accent); color:var(--d3-on-accent); }
html[data-theme="d3"] .pp-promo__cta:hover, html[data-theme="d3"] .pp-promo__cta:focus-visible{ background:var(--d3-accent-deep); color:#FFFFFF; }

/* #273 (James 2026-10-21): slim one-line Ticket entry, low on the sports front.
   The full Ticket card lives only on /sports/the-ticket/. */
html[data-theme="d3"] .tt-slim { max-width: 1180px; margin: 26px auto 6px; padding: 0 16px; }
html[data-theme="d3"] .tt-slim__link { display: flex; align-items: baseline; gap: 9px; border-top: 1px solid var(--d3-line); padding: 14px 2px 4px; text-decoration: none; }
html[data-theme="d3"] .tt-slim__name { font-family: var(--d3-font-display); letter-spacing: .05em; color: var(--d3-accent); font-size: 15px; white-space: nowrap; }
html[data-theme="d3"] .tt-slim__meta { color: var(--d3-text-2); font-size: 13.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
html[data-theme="d3"] .tt-slim__meta::before { content: "\00b7  "; color: var(--d3-text-3); }
html[data-theme="d3"] .tt-slim__go { margin-left: auto; color: var(--d3-accent); font-weight: 700; font-size: 13.5px; white-space: nowrap; }

/* pv-masthead (retired shell, #240 residual) on d3 surfaces: display face for
   the title, Inter upright for the dek — pv-masthead.css itself is untouched
   for the non-sports families that still consume it (#259). */
html[data-theme="d3"] .pv-masthead h1 { font-family: var(--d3-font-display); }
html[data-theme="d3"] .pv-masthead .dek { font-family: var(--d3-font-ui); font-style: normal; }

/* Inverted-band heal: components that painted background:var(--bible-ink)
   (dark in the light theme) invert to light slabs under the remap. Pin them
   to the dark step; their cream text vars already resolve light. */
html[data-theme="d3"] .tt-oddsband, html[data-theme="d3"] .tally { background: var(--d3-surface-2); }
html[data-theme="d3"] .b-ticker, html[data-theme="d3"] .b-odds-pill, html[data-theme="d3"] .b-mocktag { background: var(--d3-surface-2); color: var(--d3-text); }

/* #280: the bridge's bible-masthead heals, made native (front). */
html[data-theme="d3"] .b-scope .b-masthead .b-dek{ font-family:var(--d3-font-ui); font-style:normal; }
html[data-theme="d3"] .b-masthead{ border-top:3px solid var(--d3-accent); }

/* ===== RAIL RESKIN 2026-10-24 (owner-approved preview /preview/rail/):
   the scores strip floats on the page ground — no inset band, no
   gradient tile cards, no gold top edge on live tiles. Tiles are
   transparent with a hairline border; the pin is a ghost icon
   (transparent, no disc) that turns gold when pinned. ===== */
html[data-theme="d3"] .sp-strip-sec{ background: var(--d3-ground); }
html[data-theme="d3"] .ss-tile{
  background: rgba(255,255,255,.02);
  border: 1px solid var(--d3-line);
  box-shadow: none;
}
html[data-theme="d3"] .ss-tile.is-live{ border-color: var(--d3-line); box-shadow: none; }
html[data-theme="d3"] .sp-strip-label .ss-dot{ display: inline-block; vertical-align: 1px; margin-right: 5px; }
html[data-theme="d3"] .ss-tile .lp-pinbtn{
  position: absolute; top: auto; bottom: 8px; right: 8px; z-index: 2;
  width: 28px; height: 28px; min-width: 28px; min-height: 28px;
  background: transparent; border: 0; border-radius: 6px;
}
html[data-theme="d3"] .ss-tile .lp-pinbtn svg{ width: 15px; height: 15px; fill: var(--d3-text-3); }
html[data-theme="d3"] .ss-tile .lp-pinbtn:hover{ border-color: transparent; }
html[data-theme="d3"] .ss-tile .lp-pinbtn:hover svg{ fill: var(--d3-text); }
html[data-theme="d3"] .ss-tile .lp-pinbtn.lp-on{ background: transparent; border-color: transparent; }
html[data-theme="d3"] .ss-tile .lp-pinbtn.lp-on svg{ fill: #F2BC68; }
html[data-theme="d3"] a.ts-match:hover,html[data-theme="d3"] a.ts-fixture:hover{text-decoration:none}
