/* Splash Play · shared visual system, September 2026.
 * Paint only: the application owns all typography metrics, spacing, widths,
 * row heights, breakpoints, overflow, sticky positioning and interactions.
 * Do not add !important or geometry declarations to this stylesheet.
 * Semantic inline paint and state classes remain authoritative. In particular,
 * never recolor heatmap cells, team badges, chart series or manual input values.
 */
body[data-sp-ui] {
  --sp-canvas:#08111d;
  --sp-surface:#101c2b;
  --sp-raised:#172638;
  --sp-input:#0b1624;
  --sp-line:#2a3c51;
  --sp-line-soft:#233449;
  --sp-control-line:#52677f;
  --sp-text:#e8eef7;
  --sp-secondary:#b5c2d4;
  --sp-muted:#93a6bf;
  --sp-action:#49c8ff;
  --sp-sport:#49c8ff;
  --sp-focus:#8bdeff;
  --sp-hover:#1b3046;
  --sp-shadow:0 16px 48px #0007;
  background:var(--sp-canvas);
  color:var(--sp-text);
}
body[data-sp-ui=mlb] {--sp-sport:#ff4b3e}
body[data-sp-ui=nba],body[data-sp-ui=nba-draft] {--sp-sport:#fcb040;--sp-action:#fcb040}
/* Decorative texture is quieter; its positioning/pointer behavior is untouched. */
body[data-sp-ui]::before {opacity:.012}
body[data-sp-ui]::after {opacity:.3}

/* Existing surfaces only. No wrapper cards or new containing/scroll contexts. */
body[data-sp-ui] :is(.gl,.gc,.mc,.game-card,.card,.feature-card,.account-card) {
  background:var(--sp-surface);
  border-color:var(--sp-line);
  box-shadow:none;
}
body[data-sp-ui] :is(.bb9,.topbar) {background:#09121e;border-bottom-color:var(--sp-line)}
body[data-sp-ui] nav.bb5 {background:var(--sp-surface)}
body[data-sp-ui] .bb {border-bottom-color:var(--sp-line-soft)}
body[data-sp-ui] .bt {border-top-color:var(--sp-line-soft)}
body[data-sp-ui] .gto {background:var(--sp-raised);border-bottom-color:var(--sp-line)}
body[data-sp-ui] .group-header th {background:var(--sp-raised)}
body[data-sp-ui] .ts4 {color:var(--sp-secondary)}
body[data-sp-ui] :is(.ts5,.ts6) {color:var(--sp-muted)}
/* Brand headings keep their existing face, size and tracking. */
body[data-sp-ui] .to4 {color:var(--sp-sport)}
body[data-sp-ui] .hr:hover {background:var(--sp-hover)}

/* Button roles retain all existing metrics and disabled/locked semantics.
 * Inline platform, danger, favorite and export colors are deliberately untouched. */
body[data-sp-ui] .btn {box-shadow:none;transition:none}
body[data-sp-ui] .btn:hover {transform:none;box-shadow:none}
body[data-sp-ui] .btn.bs:not(.blk):not(:disabled) {
  background:var(--sp-raised);border-color:var(--sp-control-line);color:var(--sp-secondary);
}
body[data-sp-ui] .btn.bs:not(.blk):not(:disabled):hover {
  background:var(--sp-hover);border-color:var(--sp-focus);color:var(--sp-text);
}
body[data-sp-ui] .btn:is(.bp,.ba):not(.blk):not(:disabled) {
  background:var(--sp-action);color:#04121e;
}
/* Independent focus outline: validation border/background never get replaced.
 * No global input color, background, opacity, border or font-size override. */
body[data-sp-ui] :is(button,input,select,textarea,a,summary,[tabindex]):focus-visible {
  outline:2px solid var(--sp-focus);outline-offset:2px;
}
body[data-sp-ui] :is(input,textarea)::placeholder {color:var(--sp-muted);opacity:1}
body[data-sp-ui] .edit-input:disabled {cursor:not-allowed}
body[data-sp-ui] :is(.user-dropdown,.research-dropdown,.nfl-nav-menu) {
  background:var(--sp-surface);border-color:var(--sp-control-line);box-shadow:var(--sp-shadow);
}

/* NFL completed books, build dialogs, exposure charts, pending edits and batches. */
body[data-sp-ui=nfl] :is(.nfl-portfolio-dialog,.nfl-exposure-panel,.nfl-batch-dialog) {
  background:var(--sp-surface);border-color:var(--sp-line);box-shadow:var(--sp-shadow);
}
body[data-sp-ui=nfl] :is(.nfl-exposure-scroll th,.nfl-exposure-confirm) {background:var(--sp-raised)}
body[data-sp-ui=nfl] :is(.nfl-exposure-heading p,.nfl-exposure-player small,.nfl-build-track-card span) {color:var(--sp-secondary)}
body[data-sp-ui=nfl] :is(.nfl-exposure-draft,.nfl-pool-strip,.nfl-batch-list) {background:var(--sp-input)}
body[data-sp-ui=nfl] .nfl-exposure-share i {background:var(--sp-line)}
body[data-sp-ui=nfl] .nfl-build-track-card:not(.is-selected) {background:var(--sp-raised);border-color:var(--sp-line)}
body[data-sp-ui=nfl] .nfl-lineups-exposure {background:var(--sp-surface);border-color:var(--sp-line)}
body[data-sp-ui=nfl] .nfl-lineups-exposure-header {border-bottom-color:var(--sp-line)}
body[data-sp-ui=nfl] .nfl-lineups-exposure-search {border-bottom-color:var(--sp-line-soft)}
body[data-sp-ui=nfl] :is(.nfl-batch-subtitle,.nfl-batch-total,.nfl-elapsed) {color:var(--sp-muted)}

/* Populated Recap: captions/sticky identity column share an opaque surface.
 * recap-heat-0..4, reversed-stat mapping, nulls, good/bad and notes stay intact. */
body[data-sp-ui=nfl] .nfl-recap {color:var(--sp-text)}
body[data-sp-ui=nfl] .recap-game {background:var(--sp-surface);border-color:var(--sp-line)}
body[data-sp-ui=nfl] .recap-table-wrap {border-color:var(--sp-line)}
body[data-sp-ui=nfl] .recap-table caption {background:var(--sp-raised);color:var(--sp-secondary)}
body[data-sp-ui=nfl] .recap-table thead th {background:var(--sp-raised);color:var(--sp-secondary)}
body[data-sp-ui=nfl] .recap-table tbody th:first-child {background:var(--sp-raised)}
body[data-sp-ui=nfl] .recap-table :is(td,th) {border-bottom-color:var(--sp-line-soft)}
body[data-sp-ui=nfl] .recap-table tbody tr:nth-child(even) {background:#122032}
body[data-sp-ui=nfl] :is(.recap-muted,.recap-table small) {color:var(--sp-muted)}

/* MLB DK and FD portfolio surfaces. Error/success/warning paints and every
 * exposure input remain owned by their existing components. */
body[data-sp-ui=mlb] :is(.mp-dialog,.fdp-panel) {
  background:var(--sp-surface);border-color:var(--sp-line);box-shadow:var(--sp-shadow);
}
body[data-sp-ui=mlb] :is(.mp-box,.mp-table-wrap,.fdp-panel details) {border-color:var(--sp-line)}
body[data-sp-ui=mlb] :is(.mp-dialog th,.fdp-panel th) {background:var(--sp-raised);color:var(--sp-secondary)}
body[data-sp-ui=mlb] :is(.mp-dialog td,.fdp-panel td) {border-bottom-color:var(--sp-line-soft)}
body[data-sp-ui=mlb] :is(.mp-dialog p,.mp-dialog td small,.fdp-muted,.fdp-panel small) {color:var(--sp-secondary)}

/* Native title tooltips keep their interaction; custom tooltip shells only. */
body[data-sp-ui] [role=tooltip] {background:var(--sp-raised);border-color:var(--sp-control-line);box-shadow:var(--sp-shadow)}
/* NBA Draft radar grid/labels only: never data polygons, marks, scales or axes. */
body[data-sp-ui=nba-draft] svg[viewBox="0 0 220 200"] text[fill="#94a3b8"] {fill:var(--sp-secondary)}
body[data-sp-ui=nba-draft] svg[viewBox="0 0 220 200"] [stroke="rgba(255,255,255,.08)"] {stroke:var(--sp-control-line)}
/* Admin growth series keep their red/green/gold legend. */
body[data-sp-ui=brand] #ae-growth {background:var(--sp-input)}
body[data-sp-ui=brand] :is(.card p.desc,.admin-header p) {color:var(--sp-secondary)}
body[data-sp-ui=brand] .btn-secondary {background:var(--sp-raised);border-color:var(--sp-control-line)}
body[data-sp-ui] ::-webkit-scrollbar-thumb {background:#526c86}
body[data-sp-ui] ::-webkit-scrollbar-track {background:var(--sp-input)}
/* Mobile uses the exact same paint layer. Do not override the application's
 * 360/390px font sizes, input widths, padding, name truncation or scrollbars.
 * This replaces the rejected review-only SPAGS font/width/padding treatment.
 */

/* MLB Lineups: same pool-strip geometry and mobile wrap as NFL ui-parity.css. */
body[data-sp-ui=mlb] .mlb-pool-strip{padding:4px 8px;background:var(--sp-input);border-radius:5px;min-height:32px}
body[data-sp-ui=mlb] .mlb-pool-strip .mlb-page-slate-controls{margin-left:auto}
@media(max-width:700px){body[data-sp-ui=mlb] .mlb-pool-strip .mlb-page-slate-controls{width:100%;margin-left:0}}
