/* RaceIntake-v2 design tokens: UI_SPEC.md §2 + every mockup value, exactly as UI_PLAN.md §1.3.
   The ONLY file allowed to hold colour literals (tests/test_web_shell.py). IBM Plex is vendored
   from the official @ibm/plex 6.4.1 npm package (static/fonts/OFL.txt). */
@font-face { font-family: "IBM Plex Sans"; src: url(/static/fonts/IBMPlexSans-Regular.woff2) format("woff2"); font-weight: 400; font-display: swap; }
@font-face { font-family: "IBM Plex Sans"; src: url(/static/fonts/IBMPlexSans-Medium.woff2) format("woff2"); font-weight: 500; font-display: swap; }
@font-face { font-family: "IBM Plex Sans"; src: url(/static/fonts/IBMPlexSans-SemiBold.woff2) format("woff2"); font-weight: 600; font-display: swap; }
@font-face { font-family: "IBM Plex Mono"; src: url(/static/fonts/IBMPlexMono-Regular.woff2) format("woff2"); font-weight: 400; font-display: swap; }
@font-face { font-family: "IBM Plex Mono"; src: url(/static/fonts/IBMPlexMono-Medium.woff2) format("woff2"); font-weight: 500; font-display: swap; }
:root {
  /* UI_SPEC §2 colour */
  --bg-page:#F3F2ED; --bg-card:#FFFFFF; --bg-subtle:#FBFAF7; --bg-group:#F6F5F1; --bg-chip:#F1F0EB;
  --border:#E3E1D9; --border-row:#EEECE6; --border-control:#CFCCC3; --backdrop:rgb(0 0 0 / 0.25);
  --text:#1B1D1F; --text-secondary:#5E625F; --text-muted:#6A6E6A; --accent:#0F6E66;
  --sidebar-bg:#17191B; --sidebar-active:#2A2E31; --sidebar-text:#C3C7C1; --sidebar-text-active:#FFFFFF; --sidebar-icon-active:#7FC8BE;
  --info-bg:#F2F5FC; --info-border:#C9D6F2; --info-text:#2A4A9A;
  --warn-bg:#FDF7E7; --warn-border:#E7C77A; --warn-text:#7A5100;
  --error-bg:#FDF1EC; --error-border:#EDB39C; --error-text:#9A2F12;
  /* UI_SPEC §2 status system: pill bg / fg per ui_status, track colours */
  --pill-loaded-bg:#EDECE6; --pill-loaded-fg:#45474A;   --pill-building-bg:#E6ECFA; --pill-building-fg:#2A4A9A;
  --pill-built-bg:#EDECE6;  --pill-built-fg:#45474A;    --pill-needs_review-bg:#FBF0D5; --pill-needs_review-fg:#7A5100;
  --pill-sending-bg:#E6ECFA; --pill-sending-fg:#2A4A9A; --pill-retrying-bg:#FBF0D5; --pill-retrying-fg:#7A5100;
  --pill-accepted-bg:#E1F0EC; --pill-accepted-fg:#0B5A52; --pill-rejected-bg:#FBE4DB; --pill-rejected-fg:#9A2F12;
  --track-done:var(--accent); --track-active:#3558C9; --track-warn:#B7791F; --track-fail:#C2410C; --track-todo:#DCDAD2;
  /* Harvested from the mockups */
  --accent-hover:#0A4F49; --accent-tint:#0F6E6614; --ok-text:#0B5A52; --text-strong-secondary:#4A4E4B;
  --info-strong:#1B2F66; --info-control-border:#8EA6E6; --warn-control-bg:#FFFCF4; --error-row-tint:#FFF8F5;
  --timeline-todo-ring:#BDBAB0; --segmented-active-bg:#1B1D1F; --segmented-active-count:#C9CCC7;
  --tile-dot-all:#1B1D1F; --tile-dot-loaded:#8A8D88; --tile-dot-built:#5F6B7A; --tile-dot-dispatching:#3558C9;
  --tile-dot-accepted:var(--accent); --tile-dot-review:#B7791F; --tile-dot-rejected:#C2410C;
  --sidebar-heading:#8E938D; --sidebar-divider:#2E3236; --sidebar-badge-text:#D5D8D3;
  --sidebar-badge-warn-bg:#4A3D1F; --sidebar-badge-warn-text:#F2D899;
  --svc-text:#D5D8D3; --svc-text-dim:#A9ADA8; --svc-dot-ok:#7FC8BE; --svc-dot-busy:#7FA2F0;
  --svc-dot-warn:#E0A93B; --svc-text-warn:#F2D899;
  --svc-dot-error:#F08A6B; --svc-text-error:#F5B7A3;   /* NOT drawn: proposed red service state (UI-Q10) */
  /* Type, shape, spacing (UI_SPEC §2) */
  --font-sans:"IBM Plex Sans", system-ui, sans-serif; --font-mono:"IBM Plex Mono", ui-monospace, monospace;
  --fs-title:28px; --fs-card-title:15px; --fs-panel-title:20px; --fs-editor-title:22px;
  --fs-body:14px; --fs-meta:13px; --fs-small:12px; --fs-tiny:11px;
  --r-control:8px; --r-inner:10px; --r-card:12px; --r-pill:999px; --r-chip:6px;
  --h-control:40px; --h-control-table:36px; --h-row:52px; --h-row-compact:44px; --h-thead:40px; --h-group:36px;
  --pad-top:28px; --pad-x:32px; --gap-section:20px; --w-sidebar:232px; --w-panel:400px; --w-list:300px;
}
body.compact { --h-row: var(--h-row-compact); }
/* Dark theme (owner 2026-10-02, "navy" redesign): overrides the spec's light colours above. Ink-navy surfaces in
   steps (sidebar < page < recessed bands < card < group band < chip), azure accent, one hue per pipeline status.
   --svc-dot-warn stays the spec amber (tests/test_web_shell.py reads it). */
:root {
  color-scheme: dark;
  --bg-page:#0A101C; --bg-card:#111A2B; --bg-subtle:#0D1524; --bg-group:#17223A; --bg-chip:#1C2841;
  --bg-control:#0C1422; --bg-raised:#16223A; --row-hover:#152036;
  --border:#1F2B42; --border-row:#19233A; --border-control:#3A4A68; --border-control-hover:#4F6288;
  --backdrop:rgb(2 6 15 / 0.66); --shadow:rgb(2 6 15 / 0.45); --edge-hi:#FFFFFF0A;
  --text:#E8EEF7; --text-secondary:#A3B1C6; --text-muted:#8C9BB2; --text-strong-secondary:#C2CDDD;
  --accent:#22B5DC; --accent-hover:#4FCBEA; --accent-tint:#22B5DC24;
  --segmented-active-surface:#14364B;
  --segmented-active-bg:var(--accent); --segmented-active-count:var(--bg-card);   /* unused while app.css's dark segmented rule stands */
  /* Status hues: strong (dots, rails, tracks), -bg (pill fill, pressed-tile wash), -tint (pill ring, pressed-tile halo) */
  --status-loaded:#94A3B8;   --status-loaded-bg:#1E293D;   --status-loaded-tint:#94A3B84D;
  --status-building:#6B9BFF; --status-building-bg:#16264A; --status-building-tint:#6B9BFF59;
  --status-built:#A78BFA;    --status-built-bg:#251F48;    --status-built-tint:#A78BFA59;
  --status-review:#F2B33D;   --status-review-bg:#2E2410;   --status-review-tint:#F2B33D52;
  --status-accepted:#34D399; --status-accepted-bg:#0F2E2A; --status-accepted-tint:#34D39952;
  --status-rejected:#F87171; --status-rejected-bg:#351820; --status-rejected-tint:#F8717159;
  --status-all-bg:#10304A;
  --tile-c:var(--border-control); --tile-t:transparent; --tile-r:var(--accent-tint); --pill-ring:transparent;   /* per-class in app.css */
  --pill-loaded-bg:var(--status-loaded-bg);     --pill-loaded-fg:#C3CEDF;
  --pill-building-bg:var(--status-building-bg); --pill-building-fg:#A9C3FF;
  --pill-sending-bg:var(--status-building-bg);  --pill-sending-fg:#A9C3FF;
  --pill-built-bg:var(--status-built-bg);       --pill-built-fg:#CBBBFF;
  --pill-needs_review-bg:var(--status-review-bg); --pill-needs_review-fg:#F7CC74;
  --pill-retrying-bg:var(--status-review-bg);   --pill-retrying-fg:#F7CC74;
  --pill-accepted-bg:var(--status-accepted-bg); --pill-accepted-fg:#6EE7B7;
  --pill-rejected-bg:var(--status-rejected-bg); --pill-rejected-fg:#FFA4A4;
  --track-done:var(--accent); --track-active:#4C7DFF; --track-warn:var(--status-review);
  --track-fail:var(--status-rejected); --track-todo:#2C3954; --timeline-todo-ring:#45556F;
  --tile-dot-all:var(--accent); --tile-dot-loaded:var(--status-loaded); --tile-dot-built:var(--status-built);
  --tile-dot-dispatching:var(--status-building); --tile-dot-accepted:var(--status-accepted);
  --tile-dot-review:var(--status-review); --tile-dot-rejected:var(--status-rejected);
  --info-bg:#10203F; --info-border:#28457F; --info-text:#9EBBFF; --info-strong:#D3E0FF; --info-control-border:#3F66BF;
  --warn-bg:#271F0E; --warn-border:#6B5220; --warn-text:#F5C76A; --warn-control-bg:#1C170C;
  --warn-note-text:#D6BC85;   /* repeated warnings (Build note rows, "No template", "Not set"): readable, not shouty */
  --error-bg:#2C141B; --error-border:#7D2E3A; --error-text:#FFA4A4; --error-row-tint:#22131C;
  --ok-text:#5EE3A8;
  --sidebar-bg:#070C16; --sidebar-active:#13203A; --sidebar-text:#A9B6CB; --sidebar-text-active:#F2F6FC;
  --sidebar-icon-active:#4FCBEA; --sidebar-heading:#7586A0; --sidebar-divider:#1A253A;
  --sidebar-badge-text:#C9D3E3; --sidebar-badge-warn-bg:#3A2C10; --sidebar-badge-warn-text:#F7CC74;
  --svc-text:#C9D3E3; --svc-text-dim:#8D9BB2; --svc-dot-ok:#34D399; --svc-dot-busy:#6B9BFF;
  --svc-text-warn:#F7CC74; --svc-dot-error:#F87171; --svc-text-error:#FFA4A4;
}
