/* spikefreak + spikefan — design tokens v1
   One file, shared by both sites. Injected CSS strings (shell, drawer, modal, map) reference these vars.
   Contrast figures are against --sf-paper (#fff) unless noted. Target: body text >= 7:1, nothing < 4.5:1. */

@font-face { /* self-host + precache in the service worker; numerals + headings only */
  font-family: "Barlow Semi Condensed";
  src: url("/fonts/barlow-semi-condensed-600.woff2?v=f158417e92") format("woff2");
  font-weight: 600; font-display: swap;
}
@font-face {
  font-family: "Barlow Semi Condensed";
  src: url("/fonts/barlow-semi-condensed-700.woff2?v=fb958c8c20") format("woff2");
  font-weight: 700; font-display: swap;
}

:root, .sf-report { /* .sf-report (the printed Top ten) is always the light set: black on white whatever the app theme */
  color-scheme: light;

  /* ── Neutrals ─────────────────────────────── replaces #222…#f4f4f4 */
  --sf-ink:          #111418;  /* 18.4:1  primary text, timer digits */
  --sf-ink-2:        #39404a;  /* 10.6:1  secondary text, sublines */
  --sf-ink-3:        #59616b;  /*  6.3:1  LOWEST allowed text colour */
  --sf-line-strong:  #8a929b;  /*  3.1:1  control borders (inputs, chips) */
  --sf-print-chip:   #d4d4d4;  /*  grey chip behind a faster change on paper (Season improvement, PR report print); paper is white in every theme, so no dark value */
  --sf-line:         #d5d9de;  /*          card + table borders */
  --sf-line-soft:    #e8ebee;  /*          row dividers */
  --sf-paper:        #ffffff;  /*          cards, sheets, bars */
  --sf-page:         #f2f3f5;  /*          page background */
  --sf-sunk:         #eaedf0;  /*          table header, segmented track, inset */
  --sf-overlay:      rgb(10 12 15 / .55);

  /* ── Action (one accent) ──────────────────── replaces #007bff/#0056b3 AND #1a5fb4/#e3edfb */
  --sf-accent:        #1748b4; /* 8.0:1 — white text on it 8.0:1 */
  --sf-accent-hover:  #0f3990;
  --sf-accent-press:  #0b2d73;
  --sf-accent-soft:   #e7eefb; /* selected rows, current nav, pressed chips */
  --sf-accent-ink:    #0f3990; /* text on accent-soft, 9.6:1 */
  --sf-link:          #1748b4;
  --sf-on-accent:     #ffffff;
  --sf-focus:         #1748b4;

  /* ── Go / Stop / Warn / Info ──────────────── replaces #28a745 #dc3545 #e0a800 #fff8e1 */
  --sf-go:        #147a49;  /* 5.4:1 white-on */
  --sf-go-hover:  #0f6239;
  --sf-go-soft:   #e2f3ea;
  --sf-go-ink:    #0d5a34;
  --sf-stop:      #c21f1a;  /* 6.0:1 white-on — danger, stop, delete */
  --sf-stop-hover:#9e1813;
  --sf-stop-soft: #fbe7e6;
  --sf-stop-ink:  #9e1813;
  --sf-warn:      #e0a800;  /* fill/border only — never text */
  --sf-warn-soft: #fff3d1;
  --sf-warn-ink:  #6b4800;  /* 8.3:1 on warn-soft */
  --sf-route:     #e8710a;  /* the course line drawn on map thumbnails (tiles are not themed, so neither is the line) */
  --sf-sun:       #b87500;  /* sun and cloud-sun icons; 3.4:1 on paper (an icon, never text) */
  /* Weather chip (js/conditions/weatherPillView.js, the weather chip rule in components.css): icon colours and the three kind washes */
  --sf-wx-sun: #e0a010; --sf-wx-cloud: #5a86c0; --sf-wx-rain: #2f6fdb; --sf-wx-umbrella: #4a5fd1; --sf-wx-humidity: #0a8fc4; --sf-wx-wind: #12877e;
  --sf-wx-hist: var(--sf-sunk);                                                       /* happened / at race time */
  --sf-wx-fcst: color-mix(in srgb, var(--sf-accent) 11%, var(--sf-paper));            /* not yet happened */
  --sf-wx-pick: color-mix(in srgb, var(--sf-go-ink) 11%, var(--sf-paper));            /* chooseable (calculator picker) */
  --sf-race-head: color-mix(in srgb, var(--sf-accent-soft) 45%, var(--sf-paper));     /* an open race card's head */

  /* ── Live states (shared w/ spikefan) ─────── */
  --sf-live:      #c21f1a;
  --sf-live-soft: #fbe7e6;
  --sf-final:     #4b5563;
  --sf-final-soft:#eceef1;

  /* ── Runner status (always icon + label) ──── */
  --st-healthy:      #147a49; --st-healthy-soft: #e2f3ea;   /* icon: check */
  --st-limited:      #8a5a00; --st-limited-soft: #fff3d1;   /* icon: half-circle */
  --st-injured:      #c21f1a; --st-injured-soft: #fbe7e6;   /* icon: bandage */
  --st-sick:         #7a3a9e; --st-sick-soft:    #f3e8fa;   /* icon: thermometer */
  --st-out:          #4b5563; --st-out-soft:     #eceef1;   /* icon: ban */

  /* ── Verdict card (Runner Duel): the one dark answer card, dark in every theme ── */
  --sf-verdict-bg:        #111418;
  --sf-verdict-tile:      #1f2329;
  --sf-verdict-ink:       #ffffff;  /* 18.4:1 on the card */
  --sf-verdict-ink-2:     #e6e9ec;
  --sf-verdict-ink-3:     #c3c9d0;  /* 10.4:1 on the card, 8.9:1 on a tile: lowest text on it */
  --sf-verdict-a:         #3d6fe0;  /* Runner A's filled circle on the dark card */
  --sf-verdict-go:        #8fe0b4;
  --sf-verdict-warn:      #ffd978;
  --sf-verdict-warn-soft: #36290a;
  --sf-verdict-stop:      #ffb1ab;

  /* ── Race-day condition tags (grouped, icon + word) */
  --cond-body:       #8a5a00; --cond-body-soft:  #fff3d1;   /* tired, sore */
  --cond-health:     #7a3a9e; --cond-health-soft:#f3e8fa;   /* sick */
  --cond-injury:     #c21f1a; --cond-injury-soft:#fbe7e6;   /* injured, fell */
  --cond-env:        #a3470a; --cond-env-soft:   #fdeadb;   /* heat */
  --cond-gear:       #39404a; --cond-gear-soft:  #eaedf0;   /* spikes, travel */

  /* ── Course data ─────────────────────────── keep meaning, ColorBrewer RdYlGn 7 */
  --pace-1: #1a9850;  /* much faster */
  --pace-2: #66bd63;  /* faster */
  --pace-3: #a6d96a;  /* slightly faster */
  --pace-4: #bdbdbd;  /* about flat */
  --pace-5: #fdae61;  /* slightly slower */
  --pace-6: #f46d43;  /* slower */
  --pace-7: #d73027;  /* much slower */
  --elev-fill: #e8710a;
  --sf-highlight: #ffd43b; /* the highlighter halo under a selected stretch (Course Intel), 55% on the map, 60% on the profile */
  --elev-line: #9a4700;

  --surf-grass:    #5f9e45;
  --surf-dirt:     #8b5a2b;
  --surf-gravel:   #9a9a94;
  --surf-pavement: #4a4f55;
  --surf-track:    #b8432f;
  --surf-sand:     #e2c487;
  --surf-mud:      #5a4330;
  --surf-woodchip: #b07a45;
  --surf-rock:     #4a4e69;
  --thumb-course: #555555; --thumb-lane: #c8c8c8; --thumb-start: #333333; /* course thumbnails: drawn on white for exports, same in every theme */
  --sf-map-ink:    #111418;  /* text and rings on the map's white chips, same in every theme */
  --sf-toast-link: #8fb0ff;
  --map-other-course: #c3c9d0;  /* other courses on a map: light grey on the map tiles in every theme */
  --sf-white:      #ffffff;  /* fixed, does not flip in dark: ink on map colours, canvas fills */
  --sf-black:      #000000;
  --brand-g-red: #ea4335; --brand-g-blue: #4285f4; --brand-g-yellow: #fbbc05; --brand-g-green: #34a853; /* Google sign-in mark */

  --sun-full:    #f5b800;            /* solid */
  --sun-partial: #f5b800;            /* drawn as 45° stripes over --sun-shade */
  --sun-shade:   #3f5f86;            /* solid */
  --leaves-on:   #3f7d32;
  --leaves-off:  #b0743a;

  /* ── Type ─────────────────────────────────── replaces generic sans-serif / monospace */
  --sf-font-ui:  system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --sf-font-num: "Barlow Semi Condensed", system-ui, -apple-system, "Segoe UI", sans-serif;
  --sf-font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace; /* code/admin only */

  --sf-text-xs:  0.75rem;   /* 12 — desktop table meta only, never at a meet */
  --sf-text-sm:  0.8125rem; /* 13 — sublines, meta, chips, labels */
  --sf-text-md:  1rem;      /* 16 — body, buttons */
  --sf-text-lg:  1.125rem;  /* 18 — row titles on phone */
  --sf-text-xl:  1.25rem;   /* 20 — card and section titles */
  --sf-text-2xl: 1.75rem;   /* 28 — page titles */
  --sf-text-3xl: 2.25rem;   /* 36 — stat numerals */
  --sf-text-4xl: 3.25rem;   /* 52 — the timer clock on a tablet and PC */
  --sf-text-head: 1.5rem;   /* 24 — the replay head's race title */
  --sf-text-head-len: 1.0625rem; /* 17 — the replay head's course length */
  --sf-text-head-name: 0.9375rem; /* 15 — the replay head's course name */
  --sf-hub-cols: 3;         /* the Runners hub's tiles per row from 600px (tools: 2, then 4 from 1024) */
  --sf-text-kpi-pc:  2.125rem; /* 34 — the improvement report's KPI numbers: PC */
  --sf-text-kpi-tab: 1.875rem; /* 30 — tablet */
  --sf-text-kpi-ph:  1.625rem; /* 26 — phone */
  --sf-imp-num:    1.1875rem; /* 19 — the improvement report's row numbers and phone times */
  --sf-imp-num-sm: 1.0625rem; /* 17 — its distance rows and race tables */
  --sf-imp-big:    1.375rem;  /* 22 — its phone change number */
  --sf-imp-range:  0.875rem;  /* 14 — its choice range line and chart note */
  --sf-text-ctl:   0.875rem;  /* 14 — a filter control's label: a half-width segment, the switch tile (handoff_filter_compact) */
  --sf-text-name:  1.0625rem; /* 17 — a race row's name, a best-here name (handoff_meet_page_folds) */
  --sf-imp-axis:   0.6875rem; /* 11 — its chart's "faster" cue */
  --sf-imp-choice-h: 76px;    /* its two comparison choices */
  --sf-imp-row:      72px;    /* a runner row */
  --sf-imp-dist-row: 56px;    /* a distance row and a race row */
  --sf-imp-chart-w:  320px;   /* the chart column of an open distance from 1024 */
  --sf-imp-sw-w: 48px; --sf-imp-sw-h: 28px; --sf-imp-knob: 21px; /* its Show adjusted switch */
  --sf-prs-col-1: 170px; --sf-prs-col-3: 140px; --sf-prs-col-4: 116px; /* the PR report's distance columns: 1-2, 3, 4+ of them */
  --sf-prs-season: 120px; --sf-prs-row: 64px; --sf-prs-frow: 44px; --sf-prs-frow-ph: 52px; --sf-prs-pop-w: 380px;  /* its This season column, runner row, fold row and flyup */
  --sf-prs-fd-pc: 170px; --sf-prs-fd-tab: 130px; --sf-prs-fpr-pc: 96px; --sf-prs-fpr-tab: 84px; --sf-prs-fpr-ph: 70px; /* its fold's Distance and PR columns */
  --sf-prs-fdt-pc: 110px; --sf-prs-fdt-tab: 96px; --sf-prs-fdt-ph: 64px; --sf-prs-fst: 150px; /* its fold's Date and Status columns */
  --sf-num-lg:   3rem;      /* 48 — split readouts */
  --sf-num-xl:   4.5rem;    /* 72 — desktop clock */
  --sf-num-card: 4rem;      /* 64 — the time on the runner report's result card */
  --sf-num-clock: clamp(4.5rem, 24vw, 9rem); /* tracker clock, fills a 360 phone */

  --sf-lh-tight: 1.15;
  --sf-lh: 1.45;
  --sf-w-reg: 400; --sf-w-med: 500; --sf-w-semi: 600; --sf-w-bold: 700;

  /* ── Space (4-based) ─────────────────────── */
  --sf-tab-pad: 14px;   /* a tab's side padding (.sf-tabs) */
  --sf-tab-line: 3px;   /* the active tab's underline */
  --sf-1: 4px;  --sf-2: 8px;  --sf-3: 12px; --sf-4: 16px; --sf-5: 20px;
  --sf-6: 24px; --sf-8: 32px; --sf-10: 40px; --sf-12: 48px; --sf-16: 64px;
  --sf-9: 36px;  --sf-20: 80px; /* Directions button; the Meets list picture */
  --sf-thumb-x: 28px;   /* the visible circle of a thumbnail remove button (its hit area is --sf-tap-min) */
  --sf-thumb-x-icon: 18px;
  --sf-tile-gap: 10px;  /* the gap between tiles in a two-column pick sheet (relay type) */
  --sf-tile-min: 56px;  /* a pick-sheet tile's minimum height */
  --sf-icon-pick: 18px; /* the chevron inside the Check matches runner picker */

  /* ── Radius ──────────────────────────────── */
  --sf-r-sm: 6px;    /* buttons, inputs */
  --sf-r-md: 10px;   /* cards, sheets */
  --sf-r-lg: 16px;   /* timer buttons, bottom sheet top */
  --sf-r-pill: 999px;
  --sf-r-xl: 12px;   /* heat box, result cards */
  --sf-r-2xl: 14px;  /* the stacked weather pill */
  --sf-r-tile: 8px;  /* the race card's stat tiles and race tile */

  /* ── Elevation (borders do the work; shadow only for things that float) */
  --sf-shadow-1: 0 1px 2px rgb(16 20 24 / .06);
  --sf-shadow-2: 0 4px 16px rgb(16 20 24 / .14);
  --sf-shadow-3: 0 16px 48px rgb(16 20 24 / .28);
  --sf-shadow-rail: 8px 0 24px rgb(16 20 24 / .18); /* the tablet rail Expand overlay */

  /* ── Touch + layout ──────────────────────── */
  --sf-tap-min: 44px;   /* absolute floor (desktop-only controls) */
  --sf-tap:     48px;   /* default for anything used at a meet */
  --sf-fold:    36px;   /* the fold-down ring (.sf-fold); 28 on dense rows */
  --sf-tap-lg:  64px;   /* primary actions on race-day screens */
  --sf-tap-xl:  88px;   /* timer Start/Stop, runner split buttons */
  --sf-tap-map: 44px;   /* map overlay buttons (the guide's map control size) */
  --sf-icon-chevron-down: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E"); /* mask for .sf-band chevron (currentColor) */
  --sf-field-h: 52px;   /* sheet form controls and the sheet's primary button */
  --sf-box: 24px;       /* checkbox / radio box */
  --sf-checklist-tools-h: 0px; /* a sheet sets this to the height of its sticky search / filter block, so the select-all row sticks under it */
  --sf-sheet-max: 88dvh; /* auto-height sheet / dialog */
  --sf-sheet-full: 94dvh; /* size: full sheet on a phone */
  --sf-head-band: 36px; /* a list's column-header band (team scores) */
  --sf-grab-w: 36px; --sf-grab-h: 4px; /* sheet grab handle */
  --sf-icon-check: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 12.5 4.5 4.5L19 7.5'/%3E%3C/svg%3E"); /* mask for a ticked box (currentColor) */
  --sf-icon-minus: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3.5' stroke-linecap='round'%3E%3Cpath d='M6 12h12'/%3E%3C/svg%3E"); /* mask for a part-ticked (mixed) box */
  --sf-header-h: 56px;
  --sf-z-map: 0; --sf-z-bar: 20; --sf-z-header: 30; --sf-z-drawer: 40; --sf-z-sheet: 50; --sf-z-toast: 60; --sf-z-fullscreen: 1500; /* nothing in page content sets z-index above --sf-z-map */
  --sf-bar-h:    64px;  /* bottom bar, + env(safe-area-inset-bottom) */
  --sf-bar-icon: 22px;  /* bottom bar tab icon */
  --sf-bar-accent: 3px; /* active tab bar (top of a tab) and active header link underline */
  --sf-dot: 9px;        /* live dot on the Meets bar icon */
  --sf-dot-sm: 8px;     /* live dot after the Meets header link */
  --sf-ring: 2px;       /* paper ring round a dot */
  --sf-switch-w: 44px;  /* a switch track with no word (the course menu's link switch); its hit area is --sf-tap */
  --sf-switch-h: 26px;
  --sf-cmenu-w: 520px;  /* the course ⋮ menu as a centred dialog from 600px */
  --sf-bw-live: 1.5px;  /* live card border */
  --sf-text-nav: 0.9375rem; /* 15 — header links */
  --sf-rail-w:   224px;
  --sf-rail-w-collapsed: 72px;
  --sf-content-max: 1200px;
  --sf-crow-cols: 56px minmax(0, 1fr) 40px; /* the Courses list: tile, name, ⋮ (a phone). From 600px components.css sets 44px minmax(220px, 1fr) 88px 40px (tile, name, length, ⋮) for the header and every row */
  --sf-menu-w: 300px;   /* a row's ⋮ action menu (popover from 600px) */
  --sf-read-max: 760px;
  --sf-report-max-tablet: 680px; /* the coach runner page's one column, 600 to 1023 */
  --sf-report-max: 1000px;       /* the coach runner page's three bands from 1024 */
  --sf-duel-max: 1100px;         /* the Runner Duel's two columns from 1024 (handoff D3) */
  --sf-topten-max: 1180px;       /* the Top Ten's ladder and side panel from 1024 (handoff T3) */
  --sf-topten-max-tablet: 720px; /* the Top Ten's one column, 600 to 1023 (handoff T2) */
  --sf-h2h-label: 72px;          /* the runner sheet's Head to head rows: factor column on a phone (handoff runner sheet, file 02 §3) */
  --sf-h2h-label-wide: 88px;     /* from 600px */
  --sf-h2h-words: 78px;          /* the result words column from 600px (under the bar on a phone) */
  --sf-h2h-cols: var(--sf-h2h-label) minmax(0, 1fr); /* the rows' grid on a phone; .sf-h2h widens it from 600px (components.css) */
  --sf-season-h: 176px;          /* the runner sheet's Season chart */
  --sf-mpanel-label: 76px;       /* the meet panel's difference rows: label column */
  --sf-time-col: 76px;           /* the time column of the Next up event rows and schedule rows (ROW-CONTRACTS) */
  --sf-place-col: 40px;          /* the # / place column of the track event page's athlete rows (ROW-CONTRACTS) */
  --sf-seed-col: 72px;           /* the seed / mark column of the track event page's athlete rows, right-aligned */
  --sf-rangebar-h: 28px;         /* .sf-rangebar: a ladder row's and the Duel's range bar */
  --sf-movechip-h: 24px;         /* .sf-movechip */
  --sf-ladder-place: 28px;       /* .sf-ladderrow one-line grid (600 and up): place · name · bar · time · sparkline */
  --sf-ladder-name: 170px;
  --sf-ladder-time: 64px;
  --sf-ladder-spark: 60px;
  --sf-chart-h: 150px;           /* the Duel's curve charts (finish odds, season, mile by mile) */
  /* Breakpoints (use literal values in @media): phone < 600 · tablet 600–1023 · PC >= 1024 */
  --sf-rail-w-tablet: 76px;

  /* ── Motion ──────────────────────────────── */
  --sf-ease: cubic-bezier(.2, .7, .2, 1);
  --sf-fast: 120ms;
  --sf-med: 200ms;
}

/* ── Dark ("night / rain") ─────────────────────────────────────
   Applied by [data-theme="dark"]. */
:root[data-theme="dark"] {
  color-scheme: dark;
  --sf-ink: #eef1f4; --sf-ink-2: #c3c9d0; --sf-ink-3: #9aa2ab;
  --sf-line-strong: #6b737c; --sf-line: #30363d; --sf-line-soft: #252a30;
  --sf-paper: #171a1f; --sf-page: #0e1013; --sf-sunk: #1f2329;
  --sf-overlay: rgb(0 0 0 / .65);
  --sf-accent: #3d6fe0; --sf-accent-hover: #5281ea; --sf-accent-press: #2d5cc8;
  --sf-accent-soft: #1b2a4a; --sf-accent-ink: #b7ccff; --sf-link: #8fb0ff; --sf-focus: #8fb0ff;
  --sf-go: #1f8f58; --sf-go-hover: #26a366; --sf-go-soft: #12301f; --sf-go-ink: #8fe0b4;
  --sf-stop: #d63a33; --sf-stop-hover: #e5514a; --sf-stop-soft: #3a1514; --sf-stop-ink: #ffb1ab;
  --sf-warn: #f0bf2a; --sf-warn-soft: #36290a; --sf-warn-ink: #ffd978; --sf-sun: #f0bf2a;
  --sf-wx-sun: #f0bf2a; --sf-wx-cloud: #8fb0e0; --sf-wx-rain: #6aa0ff; --sf-wx-umbrella: #9aa8ff; --sf-wx-humidity: #4fc3ee; --sf-wx-wind: #4fd1c5;
  --sf-live: #ff5a4f; --sf-live-soft: #3a1514; --sf-final: #aab3be; --sf-final-soft: #252a30;
  --st-healthy: #8fe0b4; --st-healthy-soft: #12301f;
  --st-limited: #ffd978; --st-limited-soft: #36290a;
  --st-injured: #ffb1ab; --st-injured-soft: #3a1514;
  --st-sick:    #ddb4f5; --st-sick-soft:    #2c1838;
  --st-out:     #c3c9d0; --st-out-soft:     #252a30;
  --cond-body: #ffd978; --cond-body-soft: #36290a;
  --cond-health: #ddb4f5; --cond-health-soft: #2c1838;
  --cond-injury: #ffb1ab; --cond-injury-soft: #3a1514;
  --cond-env: #ffbe8f; --cond-env-soft: #3a2010;
  --cond-gear: #c3c9d0; --cond-gear-soft: #252a30;
  --elev-line: #ffb070;
  --sf-verdict-bg: #232a35; --sf-verdict-tile: #2d3542; --sf-verdict-ink: #ffffff; --sf-verdict-ink-2: #e6e9ec; --sf-verdict-ink-3: #c3c9d0;
  --sf-verdict-a: #5281ea; --sf-verdict-go: #8fe0b4; --sf-verdict-warn: #ffd978; --sf-verdict-warn-soft: #36290a; --sf-verdict-stop: #ffb1ab;
  --sf-shadow-1: 0 1px 2px rgb(0 0 0 / .5);
  --sf-shadow-2: 0 4px 16px rgb(0 0 0 / .5);
  --sf-shadow-3: 0 16px 48px rgb(0 0 0 / .7);
  --sf-shadow-rail: 8px 0 24px rgb(0 0 0 / .5);
}
/* System preference is resolved to data-theme by the inline script in each page head (key sfTheme). */

/* ── Tracker mode ("sun"): race-day max legibility ────────────
   Set on <body class="sf-tracker">. Light by default — glare kills dark screens in sun.
   Pair with [data-theme="dark"] for night/rain; dark overrides below. */
.sf-tracker {
  --sf-ink: #000000; --sf-ink-2: #1c1f23; --sf-ink-3: #3a4048;
  --sf-line-strong: #111418; --sf-line: #8a929b;
  --sf-page: #ffffff; --sf-paper: #ffffff;
  --sf-accent: #0d3a9e; --sf-go: #0e6b3f; --sf-stop: #b3140f;
  --sf-text-md: 1.125rem;
  --sf-tap: 64px;
  --sf-wx-hist: var(--sf-sunk); --sf-wx-fcst: color-mix(in srgb, var(--sf-accent) 11%, var(--sf-paper)); --sf-wx-pick: color-mix(in srgb, var(--sf-go-ink) 11%, var(--sf-paper)); --sf-race-head: color-mix(in srgb, var(--sf-accent-soft) 45%, var(--sf-paper));
  --sf-verdict-bg: #000000; --sf-verdict-tile: #1c1f23; --sf-verdict-ink: #ffffff; --sf-verdict-ink-2: #ffffff; --sf-verdict-ink-3: #e6e9ec;
}
:root[data-theme="dark"] .sf-tracker {
  --sf-ink: #ffffff; --sf-ink-2: #e6e9ec; --sf-ink-3: #c3c9d0;
  --sf-line-strong: #ffffff; --sf-line: #6b737c;
  --sf-page: #000000; --sf-paper: #0b0c0e;
  --sf-accent: #3d6fe0; --sf-go: #1f8f58; --sf-stop: #d63a33;
  --sf-verdict-bg: #1c1f23; --sf-verdict-tile: #2d3542; --sf-verdict-ink: #ffffff; --sf-verdict-ink-2: #ffffff; --sf-verdict-ink-3: #e6e9ec;
}

@media (prefers-reduced-motion: reduce) {
  :root { --sf-fast: 0ms; --sf-med: 0ms; }
}
