/* ============================================================================
   PREVIOUSLY — /sports/ build · 2026-09-28
   Design language v1.0 — the law. Tokens: css/tokens.css.
   Page DNA: borderless editorial rows · Playfair display · Inter body ·
   Signal Red the only accent · no gold anywhere · 30s hero rotation ·
   rotation pauses on hover · 44px targets · reduced-motion honored.
   ============================================================================ */

:root{ --sports-hero-h: auto; }*{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%}body{
  background:var(--pv-noir);
  color:var(--pv-ivory);
  font-family:var(--pv-sans);
  font-size:var(--pv-body);
  line-height:var(--pv-leading-body);
  -webkit-font-smoothing:antialiased;
  min-height:100vh;
  overflow-x:hidden;
}img{display:block;max-width:100%}button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}a{color:inherit}/* ---- visible focus, everywhere ---- */
a:focus-visible,button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible,[role="button"]:focus-visible,video:focus-visible,audio:focus-visible{outline:var(--pv-focus-outline);outline-offset:2px}/* ---- concept honesty banner ---- */
.concept{
  background:var(--pv-noir-2);
  color:var(--pv-ivory-dim);
  font-size:11px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;
  text-align:center;padding:10px 16px;
  border-bottom:1px solid var(--pv-rule);
}.concept b{color:var(--pv-red-ember)}/* ============================================================================
   HERO — full-bleed borderless jumbotron
   One center-stage game + rail. 30s rotation (live games only), pause on
   hover/focus, tap/swipe/keyboard to change game. No arrows, no dots.
   ============================================================================ */
.scoreboard{
  position:relative;overflow:hidden;
  border-bottom:1px solid var(--pv-rule);
  background:var(--pv-noir);
}
/* spotlight sweep — ambient motion only;never moves the layout */
/* faint LED-dot texture, like the approved jumbotron */

.scoreboard-inner{
  position:relative;z-index:1;
  max-width:var(--pv-content-max);
  margin:0 auto;
  padding:44px var(--pv-gutter) 30px;
}/* kicker row: live status + honesty + league filters */
.jt-kickers{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:26px}@keyframes pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.45;transform:scale(.8)}}.updated{font-size:13px;color:var(--pv-ivory-dim);letter-spacing:.04em}.updated b{color:var(--pv-ivory);font-weight:600;font-variant-numeric:tabular-nums}.league-filters{margin-left:auto;display:flex;gap:10px}/* per-league identity accents */
.lg-all{--lg:var(--desert-ink-faint)}.lg-nfl{--lg:var(--color-info)}.lg-cfb{--lg:var(--desert-accent)}.lg-nba{--lg:var(--desert-accent)}.lg-mlb{--lg:var(--color-win)}.lg-nhl{--lg:var(--color-info)}.lg-epl{--lg:var(--lg-pink)}/* the ONE h1 */
.hero h1{
  font-family:var(--pv-serif);
  font-size:var(--pv-display);
  font-weight:800;line-height:var(--pv-leading-display);letter-spacing:var(--pv-track-tight);
  color:var(--pv-ivory);
}.hero .lede{
  margin-top:14px;max-width:620px;
  font-size:var(--pv-lede);color:var(--pv-ivory-dim);line-height:1.55;
}/* ---- center stage (the whole board deep-links to the featured game) ---- */
a.stage{color:inherit;text-decoration:none}a.stage:focus-visible{outline:2px solid var(--pv-red);outline-offset:8px;border-radius:12px}.stage{
  display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:24px;
  padding:44px 32px 30px;margin:8px 0 0;
  touch-action:pan-y; /* vertical scroll stays native; horizontal swipes are ours */
  /* Flagship frame: premium gradient card, hairline border, deep shadow. */
  background:
    radial-gradient(90% 70% at 50% 0%, rgba(var(--brand-red-rgb), .10) 0%, transparent 60%),
    linear-gradient(180deg, var(--desert-ink) 0%, var(--desert-card) 100%);
  border:1px solid rgba(var(--desert-pressed-rgb), .12);
  border-radius:24px;
  box-shadow:0 24px 70px rgba(var(--desert-shadow-rgb), .5), inset 0 1px 0 rgba(var(--desert-card-rgb), .06);
  position:relative;overflow:hidden;
}/* Live games get the red ember edge. */
.stage.is-live{border-color:rgba(var(--brand-red-rgb), .45);box-shadow:0 24px 70px rgba(var(--desert-shadow-rgb), .5),0 0 44px rgba(var(--brand-red-rgb), .14),inset 0 1px 0 rgba(var(--desert-card-rgb), .06)}.team{display:flex;flex-direction:column;align-items:center;text-align:center}/* team crest: the real logo, large enough to read at a glance */
.team .crest{
  position:relative;z-index:0;
  display:flex;align-items:center;justify-content:center;
  min-height:clamp(120px,15vw,180px);
}.team .crest .tint{
  position:absolute;inset:-30% -24%;z-index:-1;
  background:radial-gradient(closest-side, var(--tint, var(--pv-red)) 0%, transparent 72%);
  opacity:.42;filter:blur(34px);border-radius:50%;
}.team .tlogo{
  width:clamp(112px,13.5vw,168px);height:auto;object-fit:contain;
  filter:drop-shadow(0 16px 36px rgba(var(--desert-shadow-rgb), .6));
  background:rgba(var(--desert-card-rgb), .95);border-radius:26px;padding:16px;
}.team .poss{
  /* Raised well above the baseline: a possession indicator, never punctuation. */
  display:inline-block;width:12px;height:12px;border-radius:50%;
  background:var(--pv-warn);margin-left:16px;vertical-align:.42em;
  box-shadow:0 0 10px var(--pv-warn);
}.team .score{
  font-family:var(--pv-serif);font-weight:800;
  font-size:clamp(84px,11vw,186px);line-height:1;letter-spacing:-.02em;
  font-variant-numeric:tabular-nums;color:var(--desert-pressed);
  text-shadow:0 4px 30px rgba(var(--desert-shadow-rgb), .55);
}.team .score.flash{animation:scoreflash 1.1s ease-out}@keyframes scoreflash{0%{color:var(--pv-red-ember);text-shadow:0 0 34px var(--pv-red-glow-lg);transform:scale(1.1)}100%{color:var(--pv-ivory);text-shadow:none;transform:scale(1)}
}/* Team names: full names, present and readable — linked to team pages. */
.team .meta{margin-top:14px;font-size:clamp(15px,1.8vw,20px);font-weight:700;letter-spacing:.04em;color:var(--desert-card);line-height:1.3;max-width:220px}.team .record{font-size:12.5px;color:var(--pv-ivory-faint);margin-top:6px;letter-spacing:.14em;text-transform:uppercase}.mid{display:flex;flex-direction:column;align-items:center;gap:12px;min-width:220px}.mid .at{font-family:var(--pv-serif);font-style:italic;font-weight:700;font-size:clamp(30px,3.4vw,54px);color:var(--pv-red);line-height:1}.clockbox{
  text-align:center;background:rgba(var(--desert-shadow-rgb), .55);
  border:1px solid var(--pv-rule);border-radius:16px;
  padding:18px 30px;min-width:200px;
  box-shadow:inset 0 1px 0 rgba(var(--desert-card-rgb), .05);
}.clockbox .clk{font-weight:800;font-size:36px;line-height:1;font-variant-numeric:tabular-nums;letter-spacing:.02em}.clockbox .per{font-size:11px;font-weight:700;letter-spacing:.28em;color:var(--pv-ivory-dim);margin-top:8px;text-transform:uppercase}.clockbox .live-tag{display:inline-block;margin-top:10px;padding:6px 14px 6px 16px;border-radius:999px;
  font-size:11px;font-weight:800;letter-spacing:.24em;color:var(--desert-card);background:var(--brand-red-deep);text-transform:uppercase;
  box-shadow:0 0 18px rgba(var(--brand-red-rgb), .6);
  animation:livepulse 1.6s ease-in-out infinite}.down-dist{font-size:13px;font-weight:700;letter-spacing:.14em;color:var(--pv-warn);text-transform:uppercase}.last-play{
  max-width:660px;margin:6px auto 0;text-align:center;
  font-size:14px;line-height:1.6;color:var(--pv-ivory-dim);font-style:italic;
}/* ---- off-hours: shown when nothing is live anywhere.
   Honest text state — the rail below carries the upcoming slate + finals. */
.offhours{
  display:flex;flex-direction:column;align-items:center;text-align:center;
  padding:30px 0 10px;gap:8px;
}.offhours[hidden]{display:none}.offhours-title{
  font-family:var(--pv-serif);font-weight:800;letter-spacing:var(--pv-track-tight);
  font-size:clamp(28px,7vw,44px);line-height:1.1;color:var(--pv-ivory);margin:6px 0 0;
}.offhours-sub{
  margin:0;max-width:540px;
  font-size:15px;line-height:1.6;color:var(--pv-ivory-dim);
}
/* off-hours state: the live board stands down — stage, last play and the
   game detail hide;the rail below keeps the upcoming slate + finals. */
.scoreboard.is-offhours #stage,
.scoreboard.is-offhours #lastPlay,
.scoreboard.is-offhours .detail{display:none}.scoreboard.is-offhours .scoreboard.is-offhours 
/* ---- linescore + detail ---- */
.detail{
  border-top:1px solid var(--pv-rule);margin-top:20px;padding:20px 0 4px;
  display:flex;flex-wrap:wrap;gap:20px;align-items:center;justify-content:center;
}.linescore{
  display:grid;grid-template-columns:auto repeat(5,minmax(48px,auto));
  border:1px solid var(--pv-rule);border-radius:var(--pv-r-sm);overflow:hidden;background:rgba(var(--desert-shadow-rgb), .42);
}.linescore .cell{padding:10px 14px;text-align:center;border-bottom:1px solid var(--pv-rule);font-variant-numeric:tabular-nums}.linescore .cell:last-child{border-bottom:0}.linescore .rowtot{background:rgba(var(--desert-ink-rgb), .06);font-weight:800}.linescore .qh{font-size:10px;font-weight:700;letter-spacing:.2em;color:var(--pv-ivory-faint)}.linescore .qv{font-size:17px;font-weight:700}.linescore .team-h{font-size:12px;font-weight:700;letter-spacing:.14em;color:var(--pv-ivory-dim);text-align:left;padding-left:18px}.venue-net{font-size:13.5px;color:var(--pv-ivory-dim);letter-spacing:.04em;text-align:center;line-height:1.7}.venue-net b{color:var(--pv-ivory);font-weight:600}.actions{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:9px;
  font-size:13px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  padding:0 24px;min-height:var(--pv-target-min);border-radius:var(--pv-r-pill);
  border:1px solid var(--pv-rule);color:var(--pv-ivory);
  transition:border-color .18s,background .18s,transform .15s;
}.btn:active{transform:scale(.96)}.btn[hidden]{display:none!important}.poss[hidden]{display:none!important}.btn:hover{border-color:var(--pv-ivory-dim)}.btn.primary{background:var(--pv-red);border-color:var(--pv-red);color:var(--pv-on-red)}.btn.primary:hover{background:var(--pv-red-ember)}.btn.tracked{background:var(--pv-ivory);border-color:var(--pv-ivory);color:var(--pv-noir)}.pv-ticket{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;width:100%;
  min-height:var(--pv-target-min);padding:10px 20px;border-radius:var(--pv-r-pill);
  border:1px solid var(--pv-red);color:var(--pv-ivory);background:rgba(var(--brand-red-rgb), .10);
  font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;
  text-decoration:none;
  transition:border-color .18s,background .18s,color .18s,transform .15s;
}.pv-ticket:hover{background:var(--pv-red);border-color:var(--pv-red);color:var(--pv-on-red)}.pv-ticket:active{transform:scale(.96)}.pv-ticket:focus-visible{outline:2px solid var(--pv-red);outline-offset:3px}a.btn{text-decoration:none}/* ---- game rail ---- */
.rail-wrap{position:relative;margin-top:24px;border-top:1px solid var(--pv-rule);padding:18px 0 8px}.rail-label{font-size:var(--pv-label);font-weight:700;letter-spacing:.3em;color:var(--pv-ivory-faint);text-transform:uppercase;margin-bottom:14px}.rail{
  display:flex;gap:12px;overflow-x:auto;padding:4px 2px 12px;
  scrollbar-width:none;-webkit-overflow-scrolling:touch;
}.rail::-webkit-scrollbar{display:none}
/* scroll affordance — edge fade over the rail's right edge;JS clears it
   (opacity 0) once the rail is scrolled to the end */
.rail-fade{
  position:absolute;top:0;right:0;bottom:0;width:72px;z-index:2;pointer-events:none;
  background:linear-gradient(90deg,rgba(var(--desert-ink-rgb), 0) 0%,rgba(var(--desert-ink-rgb), .92) 100%);
  transition:opacity .25s ease;
}.rail.at-end + .rail-fade{opacity:0}/* ---- rail game chips (premium pass 2026-10-03) ----
   Full-bleed dark scrim behind ALL text — art never bleeds through.
   3-zone hierarchy: league/status · matchup+score · when/where. */
.gchip{
  position:relative;overflow:hidden;
  flex:0 0 auto;min-width:216px;max-width:300px;
  display:flex;flex-direction:column;gap:10px;
  background:var(--desert-ink);border:1px solid rgba(var(--desert-pressed-rgb), .14);border-radius:16px;
  padding:16px 18px;min-height:var(--pv-target-min);
  text-align:left;color:var(--desert-pressed);
  transition:border-color .18s,transform .18s,box-shadow .18s;
}.gchip-art{position:absolute;inset:0;z-index:0;pointer-events:none}.gchip-art img{width:100%;height:100%;object-fit:cover;opacity:.5}.gchip-shade{position:absolute;inset:0;z-index:0;pointer-events:none;
  background:linear-gradient(180deg,rgba(var(--desert-ink-rgb), .80) 0%,rgba(var(--desert-ink-rgb), .60) 42%,rgba(var(--desert-ink-rgb), .92) 100%)}.gchip .lg,.gchip .ms,.gchip .sub{position:relative;z-index:1;text-shadow:0 1px 10px rgba(var(--desert-shadow-rgb), .8)}/* zone 1 — league / status */
.gchip .lg{display:flex;align-items:center;justify-content:space-between;gap:8px;
  font-size:10.5px;font-weight:800;letter-spacing:.26em;color:rgba(var(--desert-pressed-rgb), .72);text-transform:uppercase}.gchip .lg-league{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}/* zone 2 — matchup + score: abbrs semibold, scores large bold ivory */
.gchip .ms{display:flex;align-items:center;flex-wrap:nowrap;gap:7px;
  font-variant-numeric:tabular-nums;letter-spacing:.01em;line-height:1.15;color:var(--desert-pressed)}.gchip .ms .cl{width:32px;height:32px;object-fit:contain;flex:none;background:rgba(var(--desert-card-rgb), .92);border-radius:9px;padding:3px}.gchip .ms .tm-name{font-size:14.5px;font-weight:700;line-height:1.2;white-space:nowrap;min-width:0;overflow:hidden;text-overflow:ellipsis;flex:0 1 auto}.gchip .ms-sm .tm-name{font-size:13px}.gchip .ms-xs .tm-name{font-size:11.5px}.gchip .ms-xs .cl{width:28px;height:28px}.gchip .ms .tm-link{cursor:pointer}.gchip .ms .tm-link:hover{color:var(--desert-card);text-decoration:underline}.gchip .ms .sc{font-size:21px;font-weight:800}.gchip .ms .vs{color:rgba(var(--desert-pressed-rgb), .55);font-weight:500;font-size:15px}/* zone 3 — when / where, small caps dim */
.gchip .sub{display:flex;flex-direction:column;gap:4px;margin-top:auto;padding-top:2px;
  font-size:11px;font-weight:700;letter-spacing:.2em;text-transform:uppercase;color:rgba(var(--desert-pressed-rgb), .62);line-height:1.5}.gchip .sub .net{font-size:10px;letter-spacing:.16em;color:rgba(var(--desert-pressed-rgb), .44);font-weight:600}.gchip:hover{border-color:rgba(var(--desert-pressed-rgb), .4);transform:translateY(-2px)}.gchip[aria-current="true"]{
  border-color:var(--brand-red-deep);
  box-shadow:0 0 0 1px var(--brand-red-deep),0 12px 32px rgba(var(--brand-red-rgb), .18);
}.gchip.final{opacity:.62}.gchip.is-live{border-color:rgba(var(--brand-red-rgb), .55)}/* LIVE badge — red pill, 1.6s pulse */
.live-pill{
  flex:none;font-size:10px;font-weight:800;letter-spacing:.2em;text-transform:uppercase;
  color:var(--desert-card);background:var(--brand-red-deep);border-radius:999px;padding:5px 11px 5px 13px;
  box-shadow:0 0 14px rgba(var(--brand-red-rgb), .55);
  animation:livepulse 1.6s ease-in-out infinite;
  margin-right:34px; /* James 2026-10-04: keep clear of the score number */
}@keyframes livepulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.55;transform:scale(.92)}}/* ============================================================================
   PAGE BODY — borderless editorial lanes
   ============================================================================ */
.page{max-width:var(--pv-content-max);margin:0 auto;padding:10px var(--pv-gutter) 90px}.lane{margin-top:60px;scroll-margin-top:calc(var(--pv-nav-h) + 20px)}.lane-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:24px}.kicker{font-size:var(--pv-label);font-weight:800;letter-spacing:.24em;text-transform:uppercase;color:var(--pv-red);margin-bottom:8px}.lane-head h2{font-family:var(--pv-serif);font-size:var(--pv-title);font-weight:800;letter-spacing:var(--pv-track-tight);line-height:var(--pv-leading-title)}.seeall{color:var(--pv-ivory-dim);font-size:13.5px;font-weight:600;padding:10px 4px;min-height:var(--pv-target-min);flex:none}.seeall::after{content:"›";margin-left:7px;font-weight:700;color:var(--pv-red)}/* ---- top stories: borderless editorial rows ---- */
.story{
  display:flex;align-items:center;gap:26px;width:100%;
  background:transparent;border:0;text-align:left;
  padding:16px 0;border-radius:var(--pv-r-card-sm);
  transition:transform .18s ease;
}.story + .story{margin-top:6px}@media(hover:hover){.story:hover{transform:translateY(-2px)}}.story .thumb{
  flex:0 0 300px;width:300px;aspect-ratio:16/10;overflow:hidden;
  border-radius:var(--pv-r-card-sm);
  box-shadow:var(--pv-shadow-card);
  transition:box-shadow .2s ease;
}.story .thumb img{width:100%;height:100%;object-fit:cover;transition:transform .5s var(--pv-ease)}@media(hover:hover){.story:hover .thumb img{transform:scale(1.04)}}@media(hover:hover){.story:hover .thumb{box-shadow:var(--pv-shadow-card),0 0 0 1px rgba(var(--brand-red-rgb), .35)}}.story .body{min-width:0}.story .src{display:block;font-size:var(--pv-label);font-weight:800;letter-spacing:.2em;text-transform:uppercase;color:var(--pv-red)}.story h3{font-family:var(--pv-serif);font-size:clamp(21px,2.4vw,30px);font-weight:800;letter-spacing:-.01em;line-height:1.2;margin:9px 0 8px}.story .dek{display:block;font-size:15px;color:var(--pv-ivory-dim);line-height:1.6;max-width:640px}.story .meta{display:block;font-size:12.5px;color:var(--pv-ivory-faint);margin-top:10px;letter-spacing:.06em}/* ---- highlights: editorial video grid ---- */
.vgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:22px}.vcard{background:transparent;border:0;text-align:left;padding:0;transition:transform .18s ease}@media(hover:hover){.vcard:hover{transform:translateY(-3px)}}.vcard .thumb{
  position:relative;aspect-ratio:16/9;overflow:hidden;border-radius:var(--pv-r-card-sm);
  box-shadow:var(--pv-shadow-card);background:var(--pv-noir-2);
}.vcard .thumb img{width:100%;height:100%;object-fit:cover;transition:transform .5s var(--pv-ease)}@media(hover:hover){.vcard:hover .thumb img{transform:scale(1.05)}}.vcard .dur{
  position:absolute;right:10px;bottom:10px;
  background:rgba(var(--desert-ink-rgb), .78);color:var(--pv-ivory);
  font-size:12px;font-weight:700;font-variant-numeric:tabular-nums;
  padding:4px 9px;border-radius:6px;
}.vcard .vplay{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
}.vcard .vplay i{
  width:60px;height:60px;border-radius:50%;
  background:rgba(var(--desert-ink-rgb), .66);border:1px solid rgba(var(--desert-ink-rgb), .4);
  display:flex;align-items:center;justify-content:center;
  backdrop-filter:blur(4px);font-style:normal;
  transition:transform .18s ease,background .18s ease;
}@media(hover:hover){.vcard:hover .vplay i{transform:scale(1.12);background:var(--pv-red);border-color:var(--pv-red)}}.vcard .vplay svg{width:22px;height:22px;fill:var(--pv-ivory);margin-left:2px}@media(hover:hover){.vcard:hover .vplay svg{fill:var(--pv-on-red)}}.vcard h3{font-size:15.5px;font-weight:650;line-height:1.4;margin-top:13px}.vcard p{font-size:12.5px;color:var(--pv-ivory-dim);margin-top:5px}/* ---- your teams: follow rows ---- */
.trow{
  display:flex;align-items:center;gap:20px;width:100%;
  background:transparent;border:0;text-align:left;padding:14px 4px;
  transition:transform .18s ease;
}.trow + .trow{margin-top:4px}@media(hover:hover){.trow:hover{transform:translateY(-2px)}}.trow .tlogo-tile{
  flex:none;width:72px;height:72px;border-radius:var(--pv-r-card-sm);
  background:var(--pv-noir-2);border:1px solid var(--pv-rule);
  display:flex;align-items:center;justify-content:center;
  box-shadow:var(--pv-shadow-card);padding:8px;
}.trow .tlogo-tile img{width:100%;height:100%;object-fit:contain}.trow .t{flex:1;min-width:0}.trow .t b{display:block;font-size:17px;font-weight:700;letter-spacing:-.01em}.trow .t span{display:block;font-size:13px;color:var(--pv-ivory-dim);margin-top:3px}.follow{
  flex:none;display:inline-flex;align-items:center;justify-content:center;
  min-width:132px;min-height:var(--pv-target-min);padding:0 22px;
  border:1px solid var(--pv-rule);border-radius:var(--pv-r-pill);
  font-size:13px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  transition:background .18s,border-color .18s,color .18s;
}.follow:hover{border-color:var(--pv-ivory-dim)}.follow[aria-pressed="true"]{background:var(--pv-red);border-color:var(--pv-red);color:var(--pv-on-red)}/* ---- the ticket: betting lives down here, in its own lane ---- */
.parlay-dek{font-size:15px;color:var(--pv-ivory-dim);line-height:1.6;max-width:640px;margin-bottom:22px}.pgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}.pcard{background:transparent;border:0;text-align:left;padding:6px 0;transition:transform .18s ease}@media(hover:hover){.pcard:hover{transform:translateY(-3px)}}.pcard .pk{display:block;font-size:var(--pv-label);font-weight:800;letter-spacing:.2em;text-transform:uppercase;color:var(--pv-red)}.pcard h3{font-family:var(--pv-serif);font-size:clamp(20px,2.2vw,26px);font-weight:800;letter-spacing:-.01em;line-height:1.25;margin:10px 0 8px}.pcard p{font-size:14px;color:var(--pv-ivory-dim);line-height:1.6}.pcard .go{display:inline-block;margin-top:12px;font-size:13px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--pv-ivory)}.pcard .go::after{content:"→";margin-left:7px;color:var(--pv-red)}/* ---- honest fine print ---- */
.honest{
  margin-top:64px;font-size:13px;color:var(--pv-ivory-dim);line-height:1.7;
  border-top:1px solid var(--pv-rule);padding-top:26px;max-width:760px;
}.honest b{color:var(--pv-ivory)}.credits{margin-top:14px;font-size:12px;color:var(--pv-ivory-faint);line-height:1.7}/* ============================================================================
   SHEET — game/highlight details (proven overlay pattern)
   ============================================================================ */
.sheet-scrim{
  position:fixed;inset:0;z-index:var(--pv-z-modal);
  background:rgba(var(--desert-shadow-rgb), .78);backdrop-filter:blur(8px);
  display:none;align-items:center;justify-content:center;padding:18px;
}.sheet-scrim.open{display:flex}.sheet{
  position:relative;width:min(560px,100%);max-height:88vh;overflow:auto;
  background:var(--pv-noir-2);border:1px solid var(--pv-rule);
  border-radius:20px;padding:0;
  box-shadow:0 30px 90px rgba(var(--desert-shadow-rgb), .65);
  animation:sheetpop .26s var(--pv-ease);
}@keyframes sheetpop{from{transform:scale(.96) translateY(12px);opacity:0}to{transform:none;opacity:1}}.sheet-body{padding:22px 26px 34px}.sheet .close{
  position:absolute;top:12px;right:12px;z-index:3;width:var(--pv-target-min);height:var(--pv-target-min);
  border:1px solid var(--pv-rule);border-radius:50%;color:var(--pv-ivory);
  background:rgba(var(--desert-shadow-rgb), .55);
  display:flex;align-items:center;justify-content:center;font-size:15px;
}.sheet .sk{font-size:var(--pv-label);font-weight:800;letter-spacing:.26em;color:var(--pv-red);text-transform:uppercase}.sheet h3{font-family:var(--pv-serif);font-size:30px;font-weight:800;margin:10px 0 4px;letter-spacing:-.01em}.sheet .row{display:flex;justify-content:space-between;gap:14px;padding:13px 0;border-bottom:1px solid var(--pv-rule);font-size:14.5px}.sheet .row span:first-child{color:var(--pv-ivory-dim)}.sheet .row span:last-child{text-align:right;font-variant-numeric:tabular-nums}.sheet .sheet-art{margin:0}
/* Art bg on hold (James 2026-10-01 — bright direction pending);hero keeps
   team/score hierarchy on the modal base. Re-skin: add .sheet-hero-bg img. */
.sheet-hero{position:relative;min-height:200px;display:flex;align-items:stretch;justify-content:center;border-radius:20px 20px 0 0;overflow:hidden;background:var(--pv-noir-3)}/* Duel hero: premium gradient stage for the two real team logos — always
   factual, never a wrong-stadium photo (James 2026-10-04). */
.sheet-hero--duel{background:radial-gradient(120% 90% at 50% 0%,var(--desert-ink) 0%,var(--desert-ink) 55%,var(--desert-bg) 100%)}.sheet-hero--duel::before{content:"";position:absolute;inset:0;
  background:radial-gradient(closest-side,rgba(var(--desert-accent-rgb), .20),transparent 70%);pointer-events:none}.sheet-hero--duel .sheet-hero-shade{background:linear-gradient(180deg,rgba(var(--desert-bg-rgb), 0) 0%,rgba(var(--desert-bg-rgb), .35) 60%,rgba(var(--desert-bg-rgb), .85) 100%)}.sheet-hero-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.sheet-hero-shade{position:absolute;inset:0;background:linear-gradient(180deg,rgba(var(--desert-bg-rgb), 0) 0%,rgba(var(--desert-bg-rgb), .45) 45%,rgba(var(--desert-bg-rgb), .88) 100%)}.sheet-hero-inner{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:10px;padding:34px 22px 20px;width:100%}.sheet-hero-teams{display:flex;align-items:center;gap:22px}.sheet-hero-teams img{width:84px;height:84px;object-fit:contain;filter:drop-shadow(0 8px 20px rgba(var(--desert-shadow-rgb), .65))}.sheet-hero-vs{font-size:20px;color:var(--pv-ivory-dim);font-weight:600}.sheet-score{display:flex;align-items:center;gap:16px}.sheet-score .tm{display:flex;align-items:center;gap:10px}.sheet-score .tm img{width:64px;height:64px;object-fit:contain;filter:drop-shadow(0 8px 20px rgba(var(--desert-shadow-rgb), .65))}.sheet-score .tm em{font-style:normal;font-size:15px;font-weight:800;letter-spacing:.08em;color:var(--pv-ivory-dim)}.sheet-score .tm b{font-size:44px;font-weight:800;font-variant-numeric:tabular-nums;color:var(--desert-ink);line-height:1}.sheet-score .dash{font-size:28px;color:var(--pv-ivory-faint);font-weight:300}.sheet-when{font-size:13px;font-weight:700;letter-spacing:.22em;text-transform:uppercase;color:var(--pv-red-ember)}.sheet-live-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--pv-red);margin-left:8px;animation:pulse 1.8s infinite}.sheet .note{
  margin-top:18px;background:rgba(var(--brand-red-rgb), .07);border:1px solid rgba(var(--brand-red-rgb), .3);
  border-radius:var(--pv-r-sm);padding:15px 18px;font-size:13.5px;color:var(--pv-ivory);line-height:1.7;
}.sheet .note b{color:var(--pv-red-ember)}
/* deep-link CTA — the prominent "Full matchup →" button (2026-10-03).
   Mini-popup contract: the sheet is the quick view;this carries the jump
   to the full matchup page. */
.sheet-cta{padding:4px 26px 30px}.sheet-full{
  display:flex;align-items:center;justify-content:center;gap:10px;
  min-height:54px;border-radius:14px;
  background:var(--brand-red-deep);color:var(--desert-card);text-decoration:none;
  font-size:15px;font-weight:800;letter-spacing:.05em;
  box-shadow:0 10px 28px rgba(var(--brand-red-rgb), .35);
  transition:background .18s,transform .15s;
}.sheet-full:hover{background:var(--desert-accent-deep)}.sheet-full:active{transform:scale(.98)}.sheet-full:focus-visible{outline:2px solid var(--desert-card);outline-offset:3px}/* Game sheet substance (James 2026-10-04): scoring summary + team stats. */
.sheet-section{margin:18px 0 4px}.sheet-section h4{font-size:11px;font-weight:800;letter-spacing:.24em;text-transform:uppercase;
  color:rgba(var(--desert-pressed-rgb), .6);margin:0 0 10px}.sheet-section table{width:100%;border-collapse:collapse;font-size:14px;font-variant-numeric:tabular-nums}.sheet-section th,.sheet-section td{padding:7px 8px;text-align:center;border-bottom:1px solid rgba(var(--desert-pressed-rgb), .1)}.sheet-section thead th{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:rgba(var(--desert-pressed-rgb), .5);font-weight:700}.sheet-section tbody th{text-align:left;font-weight:700;color:var(--desert-pressed)}.sheet-section tbody td{color:rgba(var(--desert-pressed-rgb), .88)}.sheet-section tbody td b{color:var(--desert-card)}.sheet-loading{color:rgba(var(--desert-pressed-rgb), .55);font-size:13px;font-style:italic}/* Stage + chip team-name links to real team pages. */
.stage .tm-link,.gchip .tm-link{cursor:pointer}.stage .tm-link:hover{text-decoration:underline}/* reveal safety net — content can never stay hidden */
.rv{opacity:0;transform:translateY(22px);transition:opacity .6s ease,transform .6s var(--pv-ease)}.rv.in{opacity:1;transform:none}/* ============================================================================
   PHONE (under 1024px): same design, stacked. No sideways scroll.
   ============================================================================ */
@media (max-width:1023.98px){
  .scoreboard-inner{padding:32px var(--pv-gutter-sm) 22px}
  .page{padding:6px var(--pv-gutter-sm) 80px}
  .hero h1{font-size:clamp(72px,22vw,110px)}
  .hero .lede{font-size:16px}
  .league-filters{margin-left:0;width:100%;overflow-x:auto;scrollbar-width:none;padding-bottom:2px}
  .league-filters::-webkit-scrollbar{display:none}
  
  .stage{gap:10px;padding:28px 14px 22px;margin:8px 0 0}
  .team .crest{min-height:clamp(92px,26vw,128px)}
  .team .tlogo{width:clamp(88px,24vw,124px)}
  .team .score{font-size:clamp(64px,18vw,92px)}
  .mid{min-width:0}
  .mid .at{font-size:32px}
  .clockbox{padding:11px 15px;min-width:134px;border-radius:11px}
  .clockbox .clk{font-size:24px}
  .clockbox .per{font-size:10px;letter-spacing:.2em}
  .down-dist{font-size:11px}
  .last-play{font-size:13px;padding:0 4px}
  .detail{flex-direction:column;align-items:stretch;text-align:center;gap:14px}
  .linescore{justify-content:center}
  .linescore .cell{min-width:44px;padding:8px 10px}
  .actions{justify-content:center}
  .gchip{min-width:172px}
  /* rail scrolls inside its own bounds — the page never scrolls sideways */
  .rail{margin:0 calc(-1 * var(--pv-gutter-sm));padding:4px var(--pv-gutter-sm) 12px}
  .lane{margin-top:48px}
  .story{gap:16px;padding:12px 0}
  .story .thumb{flex:0 0 128px;width:128px}
  .story h3{font-size:19px}
  .story .dek{font-size:13.5px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
  .story .meta{font-size:11.5px}
  .vgrid{grid-template-columns:repeat(2,1fr);gap:16px}
  .vcard h3{font-size:13.5px}
  .pgrid{grid-template-columns:1fr;gap:4px}
  .trow .tlogo-tile{width:60px;height:60px}
  .follow{min-width:112px}
}/* ============================================================================
   REDUCED MOTION — the law: no rotation, no pulse, no flash, no sweep
   ============================================================================ */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}
    .rv{opacity:1;transform:none}
}

/* ---- your teams at phone widths: actions stack UNDER the name ----
   390px was crushing the text column to ~55px (logo + FOLLOW + Share on one
   row). Now: row one = logo + team name/tagline (full text room);row two =
   Follow + Share side by side at 44px targets. Desktop unchanged. */
@media (max-width:639.98px){
  .trow{flex-wrap:wrap;gap:12px 14px}
  .trow .tlogo-tile{width:60px;height:60px}
  .trow .t{flex:1 1 calc(100% - 74px);min-width:0}
  .trow .t b{font-size:16.5px}
  .follow{flex:1 1 calc(50% - 7px);min-width:0;min-height:var(--pv-target-min);padding:0 12px;margin:0}
}/* ---- board status: honest text, never a pill ---- */
.board-status{font-size:13px;font-weight:700;letter-spacing:.22em;text-transform:uppercase;color:var(--pv-ivory-dim)}.board-title{font-family:var(--pv-serif);font-weight:700;font-size:clamp(28px,4vw,44px);color:var(--pv-ivory);margin:0 0 8px}.score.tbd{font-size:15px;font-weight:700;letter-spacing:.06em;color:var(--pv-ivory-dim);text-transform:uppercase}.live-tag[hidden],.down-dist[hidden]{display:none}

/* ---- league filters: sliding underline (no pills, James 2026-09-29) ----
   Plain words;the active choice is marked by the small Signal Red bar that
   glides beneath it (positioned by /js/filter-underline.js). */
.league-filters{position:relative;margin-left:auto;display:flex;gap:4px;overflow-x:auto;scrollbar-width:none}.league-filters::-webkit-scrollbar{display:none}.lg-filter{
  appearance:none;-webkit-appearance:none;
  display:inline-flex;align-items:center;justify-content:center;
  min-height:var(--pv-target-min,44px);padding:0 16px;border:0;background:transparent;
  color:var(--pv-ivory-dim);
  font-family:var(--pv-sans);font-size:14px;font-weight:600;letter-spacing:.04em;
  white-space:nowrap;cursor:pointer;user-select:none;-webkit-user-select:none;
  -webkit-tap-highlight-color:transparent;transition:color .18s var(--pv-ease);
}@media(hover:hover){.lg-filter:hover{color:var(--pv-ivory)}}.lg-filter[aria-pressed="true"]{color:var(--pv-ivory);font-weight:700}.lg-filter:focus-visible{outline:2px solid var(--pv-ivory);outline-offset:2px;border-radius:6px}.pv-filter-bar{
  position:absolute;left:0;bottom:5px;
  width:28px;height:3px;border-radius:999px;
  background:var(--pv-red);
  box-shadow:0 1px 10px rgba(var(--brand-red-rgb), .6);
  pointer-events:none;opacity:0;
  transition:transform .25s var(--pv-ease),opacity .2s var(--pv-ease);
  will-change:transform;
}@media (prefers-reduced-motion:reduce){.pv-filter-bar,.lg-filter{transition:none}
}/* ============ ODDS BOARD promo (Previously Sportsbook) ============ */
.ob-promo{padding:0 16px;margin:26px 0 0}.ob-promo__link{display:flex;align-items:center;gap:14px;text-decoration:none;
  background:var(--desert-bg);border:1px solid var(--desert-ink);border-radius:14px;padding:14px 16px;
  font-family:ui-monospace,'SF Mono',Menlo,Consolas,monospace}.ob-promo__marquee{font-size:11px;letter-spacing:.28em;color:var(--desert-bg);font-weight:700;
  background:linear-gradient(180deg,var(--color-warn),var(--color-warn));padding:8px 10px;border-radius:6px;
  box-shadow:0 0 18px rgba(var(--color-warn-rgb), .35);white-space:nowrap}.ob-promo__copy{display:flex;flex-direction:column;gap:2px;min-width:0}.ob-promo__title{color:var(--color-warn);font-size:15px;font-weight:700;letter-spacing:.04em}.ob-promo__sub{color:var(--color-warn);font-size:12px;letter-spacing:.03em}.ob-promo__cta{margin-left:auto;color:var(--color-warn);font-size:13px;letter-spacing:.08em;
  white-space:nowrap;text-shadow:0 0 8px rgba(var(--color-warn-rgb), .4)}.ob-promo__link:hover .ob-promo__cta,.ob-promo__link:focus-visible .ob-promo__cta{color:var(--color-warn)}.ob-promo__link:focus-visible{outline:2px solid var(--color-warn);outline-offset:2px}@media (max-width:560px){.ob-promo__link{flex-wrap:wrap;row-gap:10px}.ob-promo__copy{flex:1 1 100%;order:2}.ob-promo__sub{display:none}.ob-promo__marquee{letter-spacing:.18em;order:1}.ob-promo__cta{order:3;margin-left:0}
}/* ============ LIGHT THEME (prefers-color-scheme) — color-only overrides ============ */
@media (prefers-color-scheme: light){
  /* score clock + linescore are UI panels, not media — go paper */
  .clockbox { background: rgba(var(--desert-ink-rgb), .05); }
  .linescore { background: rgba(var(--desert-ink-rgb), .05); }
  .linescore .rowtot { background: rgba(var(--desert-ink-rgb), .07); }
  /* team logos sit on light now — warm the drop shadows */
  .team .tlogo { filter: drop-shadow(0 16px 36px rgba(var(--desert-ink-rgb), .25)); }
  .sheet-hero-teams img,
  .sheet-score .tm img { filter: drop-shadow(0 8px 20px rgba(var(--desert-ink-rgb), .25)); }
  /* bottom sheet: warm paper shadow; close chip flips light (ink text) */
  .sheet { box-shadow: 0 30px 90px rgba(var(--desert-ink-rgb), .22); }
  .sheet .close { background: rgba(var(--desert-ink-rgb), .06); }
  /* NOTE (kept dark by design): .vcard .dur + .vplay are on-video chrome;
     .sheet-scrim is a modal scrim; .pv-ticket/.pv-filter-bar are Signal Red fills;
     .sheet .note is a red tint. */
  /* gchip is photo art: ALL its text stays light-on-photo in both themes */
  .gchip{background:transparent;color:var(--desert-ink)}
  .gchip-shade{background:linear-gradient(180deg,rgba(var(--desert-card-rgb), .80) 0%,rgba(var(--desert-card-rgb), .60) 42%,rgba(var(--desert-card-rgb), .92) 100%)}
  /* stage text was authored cream/white for the dark stage; on the light panel it washes out — go ink */
  .team .score{color:var(--desert-ink)}
  .team .meta{color:var(--desert-ink)}
  .gchip:hover{border-color:rgba(var(--desert-ink-rgb), .35)}
  .gchip .lg{color:rgba(var(--desert-ink-rgb), .72)}
  .gchip .ms{color:var(--desert-ink)}
  .gchip .ms .vs{color:rgba(var(--desert-ink-rgb), .6)}
  .gchip .sub{color:rgba(var(--desert-ink-rgb), .66)}
  .gchip .sub .net{color:rgba(var(--desert-ink-rgb), .74)}
}

/* ============================================================================
   SPORTS HOME REDESIGN — laptop/desktop-first (2026-10-03)
   ----------------------------------------------------------------------------
   ESPN-style front page: compact scores strip up top, hero, then a dense
   two-column grid (Top Stories wire + sidebar widgets). The full interactive
   board lives below the fold — glanceable first, deep-dive second.
   Phone collapses to a single column;the strip scrolls horizontally.
   ========================================================================== */

/* ---- scores strip ---- */
.sp-strip-sec{
  border-bottom:1px solid var(--pv-rule);
  background:var(--pv-noir-2);
}.sp-strip-bar{
  max-width:var(--pv-content-max);
  margin:0 auto;
  padding:0 var(--pv-gutter);
  display:flex;align-items:center;gap:12px;
}.sp-strip-label{
  flex:none;
  font-size:11px;font-weight:800;letter-spacing:.22em;text-transform:uppercase;
  color:var(--pv-ivory-dim);
  padding:14px 0;
}.sp-strip-label b{color:var(--pv-red-ember);font-weight:800}#stripUpdated{color:var(--pv-ivory-faint);font-weight:600;letter-spacing:.08em}.ss-strip{
  display:flex;gap:8px;overflow-x:auto;flex:1;
  padding:10px 0;
  scrollbar-width:thin;
  -webkit-overflow-scrolling:touch;
}.ss-tile{
  flex:none;display:flex;flex-direction:column;gap:2px;
  min-width:148px;max-width:172px;
  padding:18px 20px;border:1px solid var(--pv-rule);border-radius:10px;
  background:var(--pv-noir);
  color:var(--pv-ivory);text-decoration:none;
  transition:border-color .18s ease, transform .18s ease;
}.ss-tile:hover{border-color:var(--pv-red);transform:translateY(-1px)}.ss-lg{
  font-size:10px;font-weight:800;letter-spacing:.18em;color:var(--pv-ivory-dim);
  display:flex;align-items:center;gap:6px;
}.ss-dot{width:7px;height:7px;border-radius:50%;background:#E10600;
  box-shadow:0 0 8px var(--pv-red-glow);animation:pulse 1.6s infinite}.ss-tile.is-live{border-color:var(--pv-red)}.ss-teams{font-size:13.5px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ss-teams b{font-variant-numeric:tabular-nums}.ss-at{color:var(--pv-ivory-faint);font-weight:400}.ss-status{font-size:11.5px;color:var(--pv-ivory-dim);font-variant-numeric:tabular-nums;text-decoration:none}a.ss-status:hover{color:var(--pv-red-ember)}.ss-tile.is-live .ss-status{color:var(--pv-red-ember);font-weight:700}.ss-more{justify-content:center;border-style:dashed}.ss-empty{color:var(--pv-ivory-dim);font-size:13px;padding:8px 4px;white-space:nowrap}/* Team rows: real logo + full name + score (James 2026-10-04 — no bare abbreviations) */
.ss-team{display:flex;align-items:center;gap:8px;padding:3px 0;color:var(--pv-ivory);text-decoration:none;min-width:0}a.ss-team:hover .ss-tname{color:var(--pv-red-ember)}.ss-logo{width:26px;height:26px;object-fit:contain;flex:none;filter:drop-shadow(0 1px 2px rgba(var(--desert-shadow-rgb), .5))}.ss-tname{font-size:13px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}.ss-score{font-size:14px;font-weight:800;font-variant-numeric:tabular-nums;margin-left:auto}.ss-tile.is-live .ss-score{color:#FFFFFF}/* ---- home grid: wire + sidebar ---- */
.sp-home{
  max-width:var(--pv-content-max);
  margin:0 auto;
  padding:28px var(--pv-gutter) 8px;
}.sp-grid{
  display:grid;
  grid-template-columns:minmax(0,1fr) 340px;
  gap:28px;
  align-items:start;
}.sp-sec-head{
  display:flex;align-items:baseline;gap:12px;
  margin:0 0 16px;
  border-bottom:2px solid var(--pv-red);
  padding-bottom:10px;
}.sp-sec-head .kicker{
  font-size:11px;font-weight:800;letter-spacing:.22em;text-transform:uppercase;
  color:#FFFFFF;margin:0;
}.sp-sec-head h2{font-size:22px;margin:0;letter-spacing:-.02em;color:#FFFFFF}.sp-sec-head .sp-more{
  margin-left:auto;font-size:13px;font-weight:700;color:var(--pv-ivory-dim);
  text-decoration:none;white-space:nowrap;
}.sp-sec-head .sp-more:hover{color:var(--pv-ivory)}/* ---- wire ---- */
#secWire{margin-bottom:36px}.sw-lead{
  display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);
  gap:0;border:1px solid var(--pv-rule);border-radius:14px;overflow:hidden;
  background:var(--pv-noir-2);color:var(--pv-ivory);text-decoration:none;
  margin-bottom:14px;
  transition:border-color .18s ease;
}.sw-lead:hover{border-color:var(--pv-red)}.sw-lead-art{display:block;min-height:220px;background:var(--pv-noir-3)}.sw-lead-art img{width:100%;height:100%;object-fit:cover;display:block;aspect-ratio:16/10}.sw-lead-body{display:flex;flex-direction:column;gap:8px;padding:20px 22px;justify-content:center}.sw-lead-kicker{font-size:11px;font-weight:800;letter-spacing:.2em;text-transform:uppercase;color:var(--pv-ivory-dim)}.sw-lead-body b{font-size:clamp(19px,2vw,26px);line-height:1.25;letter-spacing:-.01em}.sw-lead:hover .sw-lead-body b{color:var(--pv-red-ember)}.sw-lead-dek{font-size:14px;line-height:1.55;color:var(--pv-ivory-dim);
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.sw-breaking{
  align-self:flex-start;
  font-size:10px;font-weight:800;letter-spacing:.2em;text-transform:uppercase;
  color:#FFFFFF;background:#E10600;border-radius:6px;padding:4px 8px;
}.sw-meta{font-size:12px;color:var(--pv-ivory-faint)}/* Headline GRID (James 2026-10-04): the list is gone — visual tiles only. */
.sw-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-top:18px}.sw-tile{display:flex;flex-direction:column;text-decoration:none;color:var(--pv-ivory);
  border:1px solid var(--pv-rule);border-radius:14px;overflow:hidden;background:var(--pv-noir-2);
  transition:border-color .18s,transform .18s}.sw-tile:hover{border-color:var(--pv-red);transform:translateY(-2px)}.sw-tile-art{display:block;position:relative;aspect-ratio:16/10;overflow:hidden;background:var(--pv-noir-3)}.sw-tile-art img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .3s}.sw-tile:hover .sw-tile-art img{transform:scale(1.04)}.sw-tile-art .sw-breaking{position:absolute;top:10px;left:10px}.sw-tile-body{display:flex;flex-direction:column;gap:6px;padding:14px 16px 16px}.sw-tile-body b{font-size:15.5px;line-height:1.35;letter-spacing:-.005em}.sw-tile:hover .sw-tile-body b{color:var(--pv-red-ember)}.sw-meta{font-size:12px;color:var(--pv-ivory-dim)}@media (max-width:900px){.sw-grid{grid-template-columns:repeat(2,1fr)}}@media (max-width:560px){.sw-grid{grid-template-columns:1fr;gap:14px}}/* ---- sidebar rail ---- */
.sp-rail{display:flex;flex-direction:column;gap:24px;position:static}.sp-widget{
  border:1px solid var(--pv-rule);border-radius:14px;
  background:var(--pv-noir-2);
  padding:18px 20px;
}.sp-widget > .sp-sec-head{margin-bottom:12px}.sp-widget > .sp-sec-head h2{font-size:17px}/* compact odds: force-show the baked compact board inside the rail */
.sp-rail .oh-compact{display:block !important;padding:0}.sp-rail .oh-compact .oh-chead{margin-bottom:6px}/* league quick links */
.sp-leagues{display:grid;grid-template-columns:1fr 1fr;gap:8px}/* the The Ticket label is long — give it the full row so it never wraps mid-word */
.sp-leagues .sp-league:last-child{grid-column:1/-1;justify-content:center}.sp-league{
  display:flex;align-items:center;gap:8px;
  padding:18px 20px;border:1px solid var(--pv-rule);border-radius:10px;
  color:var(--pv-ivory);text-decoration:none;font-size:13.5px;font-weight:700;
  background:var(--pv-noir);
  transition:border-color .18s ease;
}.sp-league:hover{border-color:var(--pv-red)}.sp-league .dot{width:8px;height:8px;border-radius:50%;background:var(--lg,var(--pv-red));flex:none}/* ---- board section placement ---- */
#secBoard{padding-top:8px}#secBoard .sp-sec-head{max-width:var(--pv-content-max);margin:0 auto 0;padding:0 var(--pv-gutter) 10px}/* ---- featured matchups: keep compact on home ---- */
#mcFeatured .mc-grid{grid-template-columns:repeat(3,minmax(0,1fr))}/* ---- responsive: collapse under 1024px ---- */
@media (max-width:1023px){
  .sp-grid{grid-template-columns:minmax(0,1fr)}
  .sp-rail{position:static}
  .sw-lead{grid-template-columns:minmax(0,1fr)}
  .sw-lead-art img{aspect-ratio:16/9}
  #mcFeatured .mc-grid{grid-template-columns:minmax(0,1fr)}
  .sp-strip-bar{padding:0 var(--pv-gutter-sm)}
  .sp-home{padding:20px var(--pv-gutter-sm) 8px}
}@media (prefers-color-scheme:light){.sp-strip-sec{background:transparent}.ss-tile{background:transparent;border-color:rgba(var(--desert-ink-rgb), .12);color:var(--desert-ink)}.ss-teams{color:var(--desert-ink)}.ss-lg,.ss-status{color:rgba(var(--desert-ink-rgb), .62)}.ss-tile.is-live .ss-status{color:var(--pv-red-deep)}.ss-tile.is-live .ss-score{color:#FFFFFF}.sp-widget{background:transparent;border-color:rgba(var(--desert-ink-rgb), .1)}/* the rail board keeps its dark LED-wall DNA in light mode too — pale gold
     on a white widget was unreadable (visual watchdog 2026-10-04) */
  .sp-rail .oh-compact{background:#000000;border-radius:10px;padding:10px 0;color:var(--color-warn)}.sp-sec-head h2{color:#FFFFFF}.sp-league{background:transparent;border-color:rgba(var(--desert-ink-rgb), .12);color:var(--desert-ink)}.sw-lead{background:transparent;border-color:rgba(var(--desert-ink-rgb), .1);color:var(--desert-ink)}.sw-lead-body b{color:var(--desert-ink)}.sw-lead-dek{color:rgba(var(--desert-ink-rgb), .66)}.sw-row{color:var(--desert-ink);border-color:rgba(var(--desert-ink-rgb), .08)}.sw-row-body b{color:var(--desert-ink)}.sw-meta{color:rgba(var(--desert-ink-rgb), .74)}.sw-lead-kicker{color:rgba(var(--desert-ink-rgb), .74)}
}/* sidebar odds widget: the baked compact header duplicates the widget title */
.sp-rail .oh-compact .oh-chead{display:none}.sp-rail .oh-more{margin-top:10px;text-align:center}.sp-rail .oh-more a{font-size:12px;font-weight:800;letter-spacing:.08em;color:var(--pv-red-ember);text-decoration:none}.sp-rail .oh-foot{font-size:10.5px;color:var(--pv-ivory-faint);margin-top:10px;line-height:1.5;text-align:center}/* HERO-ROTATE 2026-10-03 — the sports hero always sits on dark photography,
   so its ink must never follow the light-mode token flip (prefers-color-
   scheme: light turns --pv-ivory near-black, which rendered the hero title
   unreadable on dark art). Pin hero ink to fixed light values. */
#pvFeature .pv-feature__title{ color: var(--desert-ink); }#pvFeature .pv-feature__meta{ color: var(--desert-ink-dim); }#pvFeature .pv-feature__wordmark{ color: var(--desert-ink); }#pvFeature .pv-feature__fallback-title{ color: var(--desert-ink-dim); }#pvFeature .pv-feature__btn--ghost{ color: var(--desert-ink); border-color: rgba(var(--desert-card-rgb), .35); }#pvFeature .pv-feature__btn--ghost:hover{ border-color: var(--desert-ink); }

/* ---------- Editorial prose visibility (audit 2026-10-03) ----------
   .hub-ed-prose sections sit on the paper canvas in daylight;the old
   hardcoded light colors (#fff, #d8d3c4) were invisible. Theme-aware. */
.hub-ed-prose{color:var(--desert-ink)}.hub-ed-prose h3{color:var(--desert-ink)}.hub-ed-prose a{color:var(--desert-accent-deep)}.hub-ed-prose figcaption{color:rgba(var(--desert-ink-rgb), .62)}/* ============ HERO GAME LINK — stretched-link pattern (hero-rotate.js, 2026-10-04)
   James's bug: "MLB hub" / "NFL hub" taps landed on the matchup page. The old
   structure wrapped the hero in one giant <a> and routed span "buttons" via a
   click listener + stopPropagation — but iOS retargets taps on spans inside
   an <a> to the anchor itself, so the span listener never fired and the game
   URL won. Now: a transparent <a class="pv-feature__gamelink"> covers the
   hero (z-index 2), while the CTA buttons and duel team names are REAL <a>
   tags layered ABOVE it (z-index 3 via their positioned containers, with
   pointer-events re-enabled). Taps on buttons hit the real anchors — never
   the game link. Taps anywhere else fall through (pointer-events:none on the
   text layers) to the game link. No JS routing, nothing to fail. */
#pvFeature .pv-feature__gamelink{position:absolute;inset:0;z-index:2;color:inherit;text-decoration:none}#pvFeature:hover .pv-feature__title{text-decoration:underline}#pvFeature .pv-feature__fallback{pointer-events:none}#pvFeature .pv-feature__copy{pointer-events:none}#pvFeature .pv-feature__duel{pointer-events:none;z-index:3}#pvFeature a.pv-feature__btn{pointer-events:auto}#pvFeature a.pv-feature__duel-link{pointer-events:auto;position:relative}/* Premium hub button (James 2026-10-04: "make that button look a little more
   attractive"). Glassmorphism pill: translucent gradient fill, backdrop blur,
   a league-colored inset ring + outer glow, and a glowing league dot. The
   accent arrives per-league via --hub-accent (set inline by hero-rotate.js). */
#pvFeature .pv-feature__btn--hub{
  --hub-accent:var(--brand-red-deep);
  position:relative;border-radius:999px;color:var(--desert-card);
  background:linear-gradient(135deg,rgba(var(--desert-card-rgb), .16),rgba(var(--desert-card-rgb), .04));
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
  box-shadow:inset 0 0 0 1.5px var(--hub-accent),0 8px 24px rgba(var(--desert-shadow-rgb), .45),0 0 24px -6px var(--hub-accent);
  text-shadow:0 1px 8px rgba(var(--desert-shadow-rgb), .5);
  transition:transform .18s ease,box-shadow .18s ease;
}#pvFeature .pv-feature__btn--hub::before{
  content:"";width:8px;height:8px;border-radius:50%;flex:0 0 auto;
  background:var(--hub-accent);box-shadow:0 0 10px var(--hub-accent);
}#pvFeature .pv-feature__btn--hub:hover{
  transform:translateY(-1px);
  box-shadow:inset 0 0 0 1.5px var(--hub-accent),0 12px 30px rgba(var(--desert-shadow-rgb), .5),0 0 34px -4px var(--hub-accent);
}#pvFeature .pv-feature__btn--hub:active{transform:translateY(0)}@media (prefers-reduced-motion:reduce){#pvFeature .pv-feature__btn--hub{transition:none}}.pv-feature__live{display:inline-flex;align-items:center;gap:6px;background:var(--desert-accent);color:var(--desert-card);font-weight:800;font-size:12px;letter-spacing:1px;padding:3px 10px;border-radius:4px;margin-right:8px;vertical-align:2px}.pv-feature__live::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--desert-card);animation:pv-live-pulse 1.4s ease-in-out infinite}@keyframes pv-live-pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.3;transform:scale(.7)}}.pv-feature__score{display:block;font-size:clamp(34px,6vw,60px);font-weight:900;letter-spacing:-.01em;line-height:1.05;margin:4px 0}span.pv-feature__btn{display:inline-block;cursor:pointer}@media (prefers-reduced-motion:reduce){.pv-feature__live::before{animation:none}}/* Hero art must fill the frame — defeats the global img{max-width:100%}rule */
#pvFeature .pv-feature__art{max-width:none}/* Logo duel: the featured game's ACTUAL teams. Premium gradient stage, two
   official logos — always factually correct, never a wrong-stadium photo. */
.pv-feature__duel{position:absolute;inset:0;display:flex;align-items:flex-start;justify-content:center;gap:clamp(12px,4vw,48px);
  padding-top:clamp(60px,12vw,100px);
  background:radial-gradient(120% 90% at 50% 0%,var(--desert-ink) 0%,var(--desert-ink) 55%,var(--desert-bg) 100%);overflow:hidden}.pv-feature__duel::before{content:"";position:absolute;inset:0;
  background:radial-gradient(closest-side,rgba(var(--desert-accent-rgb), .22),transparent 70%);pointer-events:none}.pv-feature__duel::after{content:"";position:absolute;inset:auto 0 0 0;height:55%;
  background:linear-gradient(180deg,transparent,rgba(var(--desert-bg-rgb), .88));pointer-events:none}.pv-feature__duel-team{display:flex;flex-direction:column;align-items:center;gap:10px;position:relative;z-index:1;max-width:38%}.pv-feature__duel-logo{width:clamp(96px,18vw,220px);height:clamp(96px,18vw,220px);object-fit:contain;
  filter:drop-shadow(0 12px 32px rgba(var(--desert-shadow-rgb), .55));background:rgba(var(--desert-card-rgb), .94);border-radius:22px;padding:14px}.pv-feature__duel-name{color:var(--desert-card);font-weight:800;font-size:clamp(13px,2.4vw,20px);letter-spacing:.02em;text-align:center;
  text-decoration:none;text-shadow:0 2px 12px rgba(var(--desert-shadow-rgb), .6)}span.pv-feature__duel-link{cursor:pointer}span.pv-feature__duel-link:hover{color:var(--desert-pressed);text-decoration:underline}.pv-feature__duel-vs{color:var(--desert-accent);font-weight:900;font-size:clamp(16px,3vw,28px);letter-spacing:.28em;text-transform:uppercase;
  position:relative;z-index:1;text-shadow:0 2px 14px rgba(var(--desert-accent-rgb), .5)}@media (max-width:560px){.pv-feature__duel{gap:10px}.pv-feature__duel-logo{width:88px;height:88px;padding:10px;border-radius:16px}.pv-feature__duel-vs{font-size:14px;letter-spacing:.18em}
}/* ---- The Ticket promo band (2026-10-04) ---- */
.pp-promo{background:var(--desert-pressed);border-top:1px solid var(--desert-pressed);border-bottom:1px solid var(--desert-pressed)}.pp-promo__inner{max-width:var(--pv-content-max);margin:0 auto;padding:30px var(--pv-gutter);display:flex;align-items:center;justify-content:space-between;gap:28px}.pp-promo__kicker{font-size:var(--pv-label);font-weight:800;letter-spacing:.24em;text-transform:uppercase;color:var(--color-warn);margin:0 0 10px}.pp-promo__title{font-family:var(--pv-serif);font-weight:800;font-size:clamp(24px,2.6vw,34px);line-height:1.1;color:var(--desert-pressed);margin:0 0 8px;letter-spacing:-.01em}.pp-promo__sub{font-family:var(--pv-sans);font-size:15px;color:var(--desert-ink-dim);margin:0;max-width:56ch}.pp-promo__cta{flex:none;background:var(--color-warn);color:var(--desert-pressed);font-family:var(--pv-sans);font-weight:800;font-size:16px;padding:15px 28px;border-radius:10px;text-decoration:none;white-space:nowrap;transition:background .15s ease}.pp-promo__cta:hover,.pp-promo__cta:focus-visible{background:var(--color-warn);color:var(--desert-pressed)}@media (max-width:640px){.pp-promo__inner{flex-direction:column;align-items:stretch;gap:18px;padding:26px var(--pv-gutter-sm)}.pp-promo__cta{text-align:center;white-space:normal}
}/* ---- Mobile scores strip: full-width banner (James 2026-10-04) ----
   On phone widths the label + strip flex row was squeezing the strip,
   cutting cards off. Now: label stacks on top, strip goes full-width. */
@media (max-width:639.98px){
  .sp-strip-bar{flex-direction:column;align-items:stretch;gap:0;padding:0 var(--pv-gutter-sm)}
  .sp-strip-label{padding:12px 0 0}
  .ss-strip{flex:none;width:100%;margin:0 calc(-1 * var(--pv-gutter-sm));padding:10px var(--pv-gutter-sm)}
}/* ---- Mobile scores strip v2: aggressive fix (James 2026-10-04) ----
   The v1 fix didn't take on device. This v2 uses higher specificity
   and smaller cards on mobile so they fit without cutoff. */
@media (max-width:639.98px){
  .sp-strip-sec .sp-strip-bar{flex-direction:column !important;align-items:stretch !important;gap:0 !important}
  .sp-strip-sec .sp-strip-label{padding:12px 16px 0 !important;flex:none !important}
  .sp-strip-sec .ss-strip{flex:none !important;width:100% !important;overflow-x:auto !important;padding:10px 16px !important}
  .sp-strip-sec .ss-tile{min-width:132px !important;max-width:150px !important}
}

/* ---- Saban doc feature (James 2026-10-07): 24h feature, remove after Oct 8 ---- */
.saban-feature{background:var(--pv-card);border-bottom:1px solid var(--pv-rule);position:relative;overflow:hidden}
.saban-feature__inner{max-width:var(--pv-content-max);margin:0 auto;padding:36px var(--pv-gutter);display:grid;grid-template-columns:1fr 1.2fr;gap:32px;align-items:center}
.saban-feature__art{position:relative;min-height:200px;background:var(--pv-bg);border:1px solid var(--pv-rule);border-radius:var(--pv-r-card);display:flex;align-items:flex-start;justify-content:flex-start;padding:20px}
.saban-feature__badge{background:var(--pv-text);color:var(--pv-bg);font-size:11px;font-weight:800;letter-spacing:.18em;text-transform:uppercase;padding:8px 16px;border-radius:999px}
.saban-feature__kicker{font-size:12px;font-weight:800;letter-spacing:.22em;text-transform:uppercase;color:var(--pv-accent);margin:0 0 8px}
.saban-feature__title{font-family:var(--pv-serif);font-weight:800;font-size:clamp(42px,6vw,68px);line-height:1;color:var(--pv-text);margin:0 0 12px;letter-spacing:-.02em}
.saban-feature__desc{font-size:15px;line-height:1.65;color:var(--pv-text-dim);margin:0 0 20px;max-width:60ch}
@media (max-width:640px){.saban-feature__inner{grid-template-columns:1fr;gap:20px;padding:28px var(--pv-gutter-sm)}.saban-feature__art{min-height:120px}}

/* ============ LEAGUE TAB BAR (James 2026-10-08): ESPN pattern — sticky, horizontal scroll, never wraps ============ */
.eh-leaguebar{position:static;display:flex;align-items:stretch;gap:2px;overflow-x:auto;overflow-y:hidden;background:var(--pv-bg);border-bottom:1px solid var(--pv-rule);padding:0 var(--pv-gutter);scrollbar-width:none;-webkit-overflow-scrolling:touch}
.eh-leaguebar::-webkit-scrollbar{display:none}
.eh-leaguebar a{flex:0 0 auto;display:inline-flex;align-items:center;padding:14px 13px;font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;text-decoration:none;white-space:nowrap;color:var(--pv-text-dim);border-bottom:2px solid transparent;margin-bottom:-1px}
.eh-leaguebar a:hover{color:var(--pv-text)}
.eh-leaguebar a[aria-current="page"]{color:var(--pv-text);border-bottom-color:var(--pv-accent)}
.eh-leaguebar a:focus-visible{outline:2px solid var(--pv-accent);outline-offset:-2px}
/* ============ SABAN FEATURE PHOTO (James 2026-10-08) ============ */
.saban-feature__art{padding:0}
.saban-feature__img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
.saban-feature__badge{position:relative;z-index:1;margin:20px}

/* ---- THE TICKET rich module (James 2026-10-11) ---- */
.tk-mod{background:var(--desert-pressed);border-top:1px solid var(--desert-pressed);border-bottom:1px solid var(--desert-pressed);padding:34px 0}
.tk-mod__inner{max-width:var(--pv-content-max);margin:0 auto;padding:0 var(--pv-gutter)}
.tk-mod__head{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;margin-bottom:22px}
.tk-mod__kicker{font-size:var(--pv-label);font-weight:800;letter-spacing:.24em;text-transform:uppercase;color:var(--color-warn);margin:0 0 10px}
.tk-mod__title{font-family:var(--pv-serif);font-weight:800;font-size:clamp(26px,3vw,38px);line-height:1.05;color:var(--desert-ink);margin:0 0 8px;letter-spacing:-.01em}
.tk-mod__date{font-family:var(--pv-sans);font-size:14px;color:var(--desert-ink-dim);margin:0}
.tk-mod__odds{flex:none;text-align:center;background:var(--desert-card);border-radius:14px;padding:16px 26px;box-shadow:0 8px 28px rgba(0,0,0,.25)}
.tk-mod__odds-num{display:block;font-family:var(--pv-serif);font-weight:800;font-size:clamp(30px,3.4vw,44px);color:var(--desert-ink);line-height:1}
.tk-mod__odds-lbl{display:block;font-size:11px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--desert-ink-dim);margin-top:6px}
.tk-mod__legs{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-bottom:24px}
.tk-leg{background:var(--desert-card);border-radius:12px;padding:18px;display:flex;flex-direction:column;gap:10px;box-shadow:0 4px 18px rgba(0,0,0,.18)}
.tk-leg__top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.tk-leg__sport{font-size:11px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--desert-card);background:var(--desert-accent);padding:4px 10px;border-radius:999px}
.tk-leg__grade{font-size:11px;font-weight:700;color:var(--desert-ink-dim)}
.tk-leg__matchup{font-family:var(--pv-serif);font-size:16px;font-weight:700;line-height:1.3;color:var(--desert-ink);margin:0}
.tk-leg__pick{font-family:var(--pv-sans);font-size:15px;font-weight:800;color:var(--desert-accent);margin:0}
.tk-leg__line{font-weight:600;color:var(--desert-ink-dim)}
.tk-leg__take{font-family:var(--pv-sans);font-size:13.5px;line-height:1.5;color:var(--desert-ink-dim);margin:0;flex:1}
.tk-mod__loading,.tk-mod__unavail{font-family:var(--pv-sans);font-size:15px;color:var(--desert-ink-dim);margin:0;padding:12px 0}
.tk-mod__foot{display:flex;justify-content:flex-end}
.tk-mod__cta{background:var(--desert-accent);color:#fff;font-family:var(--pv-sans);font-weight:800;font-size:16px;padding:15px 28px;border-radius:10px;text-decoration:none;white-space:nowrap;transition:transform .15s ease}
.tk-mod__cta:hover,.tk-mod__cta:focus-visible{transform:translateY(-1px)}
@media (max-width:1024px){.tk-mod__legs{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:640px){.tk-mod__head{flex-direction:column;gap:16px}.tk-mod__odds{align-self:stretch}.tk-mod__legs{grid-template-columns:1fr}.tk-mod__foot{justify-content:stretch}.tk-mod__cta{text-align:center}}

/* ---------- Headline-grid uniformity (fix 2026-10-12) ----------
   Tile headlines: one ink in every state. Resting/visited = scheme ink
   (the light-scheme override block never covered .sw-tile); hover now
   accents with a red underline instead of repainting the whole headline
   red, so a hovered card no longer clashes with the grid. */
.sw-tile-body b{color:var(--pv-ivory)}
.sw-tile:hover .sw-tile-body b{color:var(--pv-ivory);text-decoration:underline;text-decoration-color:var(--pv-red);text-decoration-thickness:2px;text-underline-offset:3px}
@media (prefers-color-scheme:light){
  .sw-tile{color:var(--desert-ink)}
  .sw-tile-body b{color:var(--desert-ink)}
  .sw-tile:hover .sw-tile-body b{color:var(--desert-ink)}
}


/* Contrast fix 2026-10-14 (sweep batch 4): bible.css's anchor reset
   (.b-scope :where(...) a{color:inherit}, specificity 0,1,1) silently beats
   lone-class anchor colors. These (0,2,x) rules restore the intended colors:
   Ticket CTA white on the accent, odds-rail link in Bible red. */
.tk-mod .tk-mod__cta{color:#fff}
.sp-rail .oh-more a{color:#D7DBDD}

/* ss-cardlink-20261015: whole-tile gamecast tap target. The status
   line's link stretches over the whole tile; team links and the pin
   button ride above it and keep their own actions. Keyboard focus on
   any control in the tile rings the tile. */
.ss-tile{position:relative}
.ss-tile .ss-status::after{content:"";position:absolute;inset:0;border-radius:inherit}
.ss-tile .ss-team,.ss-tile .lp-pinbtn{position:relative;z-index:1}
.ss-tile:focus-within{outline:2px solid var(--pv-red);outline-offset:2px}

/* RAIDERS PHASE 2 (2026-10-16): --pv-red resolves to the white accent on
   sports.css pages (section-head rules, live accents). */
:root{--pv-red:#FFFFFF}

/* SWIPE CUE 2026-10-17 (James): the Deep Dive stage swipe gets its teachers.
   The wrap reserves its gutters permanently — stage geometry never depends
   on the pool size, so feed changes cannot shift the layout. Peek cards sit
   BEHIND the stage (z 0 < stage z 1) with their content riding the outer
   edge, so the visible sliver reads as the next game waiting its turn.
   No arrows, no dots, no pills. Content is static (no ambient motion);
   the one transition is a hover fade, killed under reduced motion. */
.stage-wrap{position:relative}
.stage-wrap>.stage{position:relative;z-index:1;width:92%;margin-left:auto;margin-right:auto}
@media (max-width:1023.98px){.stage-wrap>.stage{width:89%}}
.stage-peek{
  position:absolute;top:28px;bottom:28px;width:88px;z-index:0;
  display:flex;flex-direction:column;justify-content:center;gap:7px;
  padding:10px 6px;margin:0;cursor:pointer;text-align:center;
  appearance:none;-webkit-appearance:none;font-family:inherit;
  background:linear-gradient(180deg,#1B1B1B 0%,#101010 100%);
  border:1px solid #2C2C2C;border-radius:20px;
  opacity:.6;color:var(--pv-ivory-dim);
  transition:opacity .18s ease;
}
.stage-peek:hover{opacity:.92}
.stage-peek:focus-visible{outline:2px solid var(--pv-red);outline-offset:2px;opacity:.95}
.stage-peek[hidden]{display:none}
.stage-peek--prev{left:0;align-items:flex-start;padding-left:9px}
.stage-peek--next{right:0;align-items:flex-end;padding-right:9px}
.stage-peek .pk-logos{display:flex;flex-direction:column;gap:6px}
.stage-peek .pk-logo{width:32px;height:32px;object-fit:contain;display:block}
.stage-peek .pk-line{font-size:10px;letter-spacing:.05em;line-height:1.5;color:var(--pv-ivory-dim);font-variant-numeric:tabular-nums;max-width:78px}
.stage-peek--prev .pk-line{text-align:left}
.stage-peek--next .pk-line{text-align:right}
.stage-pos{
  margin:12px 0 0;text-align:center;
  font-size:11px;font-weight:700;letter-spacing:.22em;text-transform:uppercase;
  color:#A5ACAF;opacity:.78;font-variant-numeric:tabular-nums;
}
.stage-pos[hidden]{display:none}
.scoreboard.is-offhours .stage-peek,.scoreboard.is-offhours .stage-pos{display:none}
@media (prefers-reduced-motion:reduce){.stage-peek{transition:none}}

/* SWIPE HINT ON STAGE 2026-10-17 (James, second pass): a whisper-quiet
   "Swipe for more" floating over the stage's top-center padding band,
   above the "@" — pure overlay (absolute + pointer-events:none), no
   tray, no border, no pill. House silver #A5ACAF at half strength.
   JS fades it out and retires it for the session after the visitor's
   first real swipe; off-hours hides it with the rest of the cue.
   Absolute positioning = zero layout shift by construction. */
.stage-swipe-hint{
  position:absolute;top:14px;left:50%;transform:translateX(-50%);z-index:3;
  font-size:10px;font-weight:700;letter-spacing:.26em;text-transform:uppercase;
  color:#A5ACAF;opacity:.5;white-space:nowrap;pointer-events:none;
  transition:opacity .4s ease;
}
.stage-swipe-hint[hidden]{display:none}
.stage-swipe-hint.is-gone{opacity:0}
.scoreboard.is-offhours .stage-swipe-hint{display:none}
@media (max-width:1023.98px){.stage-swipe-hint{top:11px}}
@media (prefers-reduced-motion:reduce){.stage-swipe-hint{transition:none}}
