/* Design tokens, CSS reset, and base typography — extracted from
   41.01-pipeline.html (Task 2, frontend rebuild). */
@font-face {
  font-family: "IBM Plex Sans";
  src: url("/static/fonts/IBMPlexSans-Regular.woff2?v=2026-08-18-p79") format("woff2");
  font-weight: 400;
  font-display: swap;
}
@font-face {
  font-family: "IBM Plex Sans";
  src: url("/static/fonts/IBMPlexSans-SemiBold.woff2?v=2026-08-18-p79") format("woff2");
  font-weight: 600;
  font-display: swap;
}
@font-face {
  font-family: "IBM Plex Mono";
  src: url("/static/fonts/IBMPlexMono-Medium.woff2?v=2026-08-18-p79") format("woff2");
  font-weight: 500;
  font-display: swap;
}
:root {
  /* dark, default (DP132). Values are the locked mockup's exact palette —
     docs/superpowers/specs/2026-08-10-screen-c-manifest-redesign-design.md §1.
     Renamed from Plan A's provisional --paper/--overdue/--at-risk/--on-track/
     teal --accent; see that spec for the full old->new mapping. */
  --bg: #14171c;
  --rail: #191c22;
  --surface: #1a1e25;
  --surface-2: #20242c;
  --surface-3: #262b34;
  --border: #2a2f3a;
  --border-soft: #232830;
  --ink: #e9e6df;
  --ink-dim: #9aa1ac;
  --ink-faint: #6b7280;
  --accent: #86a8d6;
  --accent-ink: #0f1218;
  --accent-wash: #223133;
  --focus: #a9c4ee;
  --bad: #cf7362;
  --bad-wash: #3a221d;
  --warn: #d1a054;
  --warn-wash: #362c14;
  --good: #6fae8c;
  --good-wash: #1d2f22;
  --cat-1: #0089a3; --cat-2: #8a4fd0; --cat-3: #b06a00;
  --cat-4: #3a63d8; --cat-5: #bd3577; --cat-6: #5f8f00;
  --shadow: 0 12px 32px -12px rgba(0, 0, 0, 0.55);
  --sans: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
  --mono: "IBM Plex Mono", ui-monospace, "SF Mono", "Menlo", "Consolas", monospace;
}
@media (prefers-color-scheme: light) {
  :root:not([data-theme="dark"]) {
    --bg: #f4f2ec;
    --rail: #ece8de;
    --surface: #ffffff;
    --surface-2: #f1efe7;
    --surface-3: #e9e5d9;
    --border: #ddd8c9;
    --border-soft: #e6e2d4;
    --ink: #23261f;
    --ink-dim: #5b5b4f;
    --ink-faint: #8a8878;
    --accent: #3f6aa8;
    --accent-ink: #ffffff;
    --accent-wash: #dfe9ea;
    --focus: #3f6aa8;
    --bad: #a8412d;
    --bad-wash: #f4e0da;
    --warn: #a06a1e;
    --warn-wash: #f2e8d2;
    --good: #3c7d5c;
    --good-wash: #dcece1;
    --shadow: 0 12px 28px -14px rgba(30, 25, 10, 0.25);
  }
}
:root[data-theme="light"] {
  --bg: #f4f2ec;
  --rail: #ece8de;
  --surface: #ffffff;
  --surface-2: #f1efe7;
  --surface-3: #e9e5d9;
  --border: #ddd8c9;
  --border-soft: #e6e2d4;
  --ink: #23261f;
  --ink-dim: #5b5b4f;
  --ink-faint: #8a8878;
  --accent: #3f6aa8;
  --accent-ink: #ffffff;
  --accent-wash: #dfe9ea;
  --focus: #3f6aa8;
  --bad: #a8412d;
  --bad-wash: #f4e0da;
  --warn: #a06a1e;
  --warn-wash: #f2e8d2;
  --good: #3c7d5c;
  --good-wash: #dcece1;
  --shadow: 0 12px 28px -14px rgba(30, 25, 10, 0.25);
}
  * { box-sizing: border-box; }
  html, body { height: 100%; }
  body {
    margin: 0;
    background: var(--bg);
    color: var(--ink);
    font-family: var(--sans);
    line-height: 1.45;
  }
  ::selection { background: var(--accent); color: var(--surface); }
  :focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
  button, select, input { font-family: inherit; }
  @media (prefers-reduced-motion: reduce) {
    *, *::before, *::after { transition: none !important; animation: none !important; }
  }
  /* A plain single-class utility rule ties in specificity with any other
     single-class component rule (e.g. .dform-grid { display: grid }) —
     whichever stylesheet loads later then wins the tie regardless of class
     order in the HTML. .hidden is a utility meant to unconditionally win,
     so it needs !important, not just cascade position (root-caused P41:
     .dform-grid.hidden elements were rendering visible because
     42.02-components.css's .dform-grid loads after this file). */
  .hidden { display: none !important; }
