@charset "UTF-8";
/* Corridor R-01 — design tokens for the error-analysis site (dashboard/errors).
   GENERATED from corridor-r01-design-system.md (§2 colour, §3 type, §4 space/shape/elevation/state, §5 stroke) — do not edit by hand.
   Bare :root = light. Dark: prefers-color-scheme (unless data-theme="light") or data-theme="dark" on :root or ANY
   element (the night canvas: data-theme="dark" data-canvas="night" renders dark in both page themes).
   Colour values are the resolved hex from the design-system tables; domain aliases are var() so they follow the theme.
   Fonts: Roboto variable (wght 100–900), SIL Open Font License 1.1, via @fontsource-variable/roboto 5.3.0 — see fonts/OFL.txt. */

/* ---- Fonts (self-hosted; no network) ---- */
@font-face {
  font-family: "Roboto";
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url("fonts/roboto-latin-wght-normal.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: "Roboto";
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url("fonts/roboto-cyrillic-wght-normal.woff2") format("woff2");
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: "Roboto Cyrillic";
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url("fonts/roboto-cyrillic-wght-normal.woff2") format("woff2");
  unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}

/* State glyphs (DS §1 Iconography: Unicode, fixed) — neither Roboto subset has them, so without this family
   they fell back to whatever the OS had (e.g. Noto Sans CJK, where ❚❚ reads as two hairlines).
   Subsets of Noto Sans Symbols 2 / Noto Sans Math / Noto Sans Symbols, SIL OFL 1.1 — see fonts/OFL-noto.txt. */
@font-face {
  font-family: "Corridor Symbols";
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url("fonts/noto-sans-symbols-2-subset.woff2") format("woff2");
  unicode-range: U+25A0, U+25B2, U+25C7, U+25CB, U+25CC, U+25CF, U+25D0, U+25F7, U+26A0, U+26D4, U+2713, U+2717, U+275A;
}
@font-face {
  font-family: "Corridor Symbols";
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url("fonts/noto-sans-math-subset.woff2") format("woff2");
  unicode-range: U+2021, U+2192, U+2197-2198, U+21AA, U+21C4, U+21C6, U+2205, U+2260-2261, U+2264-2265, U+2298, U+22EF, U+29D7;
}
@font-face {
  font-family: "Corridor Symbols";
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url("fonts/noto-sans-symbols-subset.woff2") format("woff2");
  unicode-range: U+2691;
}

/* ---- Colour: LIGHT (default) ---- */
:root,
[data-theme="light"] {
  color-scheme: light;
  /* Brand primitives */
  --brand-strawberry: #e63946;
  --brand-honeydew: #f1faee;
  --brand-frosted: #a8dadc;
  --brand-steel: #457b9d;
  --brand-deep-space: #1d3557;
  --ext-amber-300: #f8b73e;
  --ext-amber-500: #dda227;
  --ext-amber-700: #996a00;
  --ext-amber-800: #906405;
  --ink-deep: #010715;
  /* Material 3 roles */
  --primary: #3e5f90;
  --on-primary: #ffffff;
  --primary-container: #d5e3ff;
  --on-primary-container: #001b3c;
  --secondary: #426278;
  --on-secondary: #ffffff;
  --secondary-container: #c7e7ff;
  --on-secondary-container: #001e2e;
  --tertiary: #2c6769;
  --on-tertiary: #ffffff;
  --tertiary-container: #b2edef;
  --on-tertiary-container: #002021;
  --surface: #f9f9fe;
  --surface-dim: #dad9df;
  --surface-bright: #f9f9fe;
  --surface-container-lowest: #ffffff;
  --surface-container-low: #f3f3f8;
  --surface-container: #eeedf3;
  --surface-container-high: #e8e8ed;
  --surface-container-highest: #e2e2e7;
  --on-surface: #1a1c1f;
  --on-surface-variant: #424751;
  --outline: #727782;
  --outline-variant: #c2c6d2;
  --inverse-surface: #2f3034;
  --inverse-on-surface: #f1f0f5;
  --inverse-primary: #a7c8ff;
  --scrim: #000000;
  --primary-hover: #4d6c99;
  /* Spec aliases (palette_tokens.css names) */
  --bg: #f9f9fe; /* = surface */
  --panel: #f3f3f8; /* = surface-container-low */
  --elevated: #f3f3f8; /* = surface-container-low */
  --sunken: #f3f3f8; /* = surface-container-low */
  --appbar-bg: #eeedf3; /* = surface-container */
  --appbar-fg: #1a1c1f; /* = on-surface */
  --text-primary: #1a1c1f; /* = on-surface */
  --text-secondary: #424751; /* = on-surface-variant */
  --text-muted: #424751; /* = on-surface-variant */
  --text-link: #3e5f90; /* = primary */
  --text-on-accent: #ffffff; /* = on-primary */
  --border-subtle: #c2c6d2; /* = outline-variant */
  --border-strong: #727782; /* = outline */
  --gridline: #c2c6d2; /* = outline-variant */
  --axis: #727782; /* = outline */
  --accent: #3e5f90; /* = primary */
  --accent-hover: #4d6c99; /* = primary-hover */
  --accent-soft: #c7e7ff; /* = secondary-container */
  --focus-ring: #426278; /* = secondary */
  --selection-halo: #1a1c1f; /* = on-surface */
  --mark-ring: #f9f9fe; /* = surface */
  --text-disabled: #1a1c1f61;
  /* Status families */
  --status-ok: #457b9d; /* = brand-steel */
  --status-ok-text: #357196;
  --status-ok-subtle: #e2f3ff;
  --status-ok-solid: #457b9d; /* = brand-steel */
  --status-ok-on-solid: #ffffff;
  --status-info: #1d3557; /* = brand-deep-space */
  --status-info-text: #1d3557; /* = brand-deep-space */
  --status-info-subtle: #e8f1fe;
  --status-info-solid: #1d3557; /* = brand-deep-space */
  --status-info-on-solid: #f1faee; /* = brand-honeydew */
  --status-warning: #996a00; /* = ext-amber-700 */
  --status-warning-text: #906405; /* = ext-amber-800 */
  --status-warning-subtle: #fef0d8;
  --status-warning-solid: #f8b73e; /* = ext-amber-300 */
  --status-warning-on-solid: #1d3557; /* = brand-deep-space */
  --status-danger: #e63946; /* = brand-strawberry */
  --status-danger-text: #cf283a;
  --status-danger-subtle: #ffedec;
  --status-danger-solid: #e63946; /* = brand-strawberry */
  --status-danger-on-solid: #010715;
  --status-unknown: #484e54;
  --status-unknown-text: #484e54;
  --status-unknown-subtle: #ecf1f5;
  --status-unknown-solid: #484e54;
  --status-unknown-on-solid: #ffffff;
  /* Chart ramps */
  --seq-1: #daebf4;
  --seq-2: #b1d0e2;
  --seq-3: #87b3cf;
  --seq-4: #6296b7;
  --seq-5: #457b9d; /* = brand-steel */
  --seq-6: #2f5679;
  --seq-7: #1d3557; /* = brand-deep-space */
  --conf-1: #87b3cf;
  --conf-2: #6296b7;
  --conf-3: #457b9d; /* = brand-steel */
  --conf-4: #2f5679;
  --conf-5: #1d3557; /* = brand-deep-space */
  --div-n3: #195579;
  --div-n2: #457b9d; /* = brand-steel */
  --div-n1: #82b8df;
  --div-0: #e9eeea;
  --div-p1: #fe8a88;
  --div-p2: #e63946; /* = brand-strawberry */
  --div-p3: #970620;
  --cat-1: #005798;
  --cat-2: #816dd2;
  --cat-3: #009ba8;
  --cat-4: #8d2661;
  /* Derived (site): ink for values printed on ramp cells — the theme ink with the higher contrast */
  --on-seq-1: #010715; /* = ink-deep, 16.47:1 */
  --on-seq-2: #010715; /* = ink-deep, 12.46:1 */
  --on-seq-3: #010715; /* = ink-deep, 9.00:1 */
  --on-seq-4: #010715; /* = ink-deep, 6.30:1 */
  --on-seq-5: #ffffff; /* = white (on-primary light), 4.59:1 */
  --on-seq-6: #ffffff; /* = white (on-primary light), 7.70:1 */
  --on-seq-7: #ffffff; /* = white (on-primary light), 12.36:1 */
  --on-conf-1: #010715; /* = ink-deep, 9.00:1 */
  --on-conf-2: #010715; /* = ink-deep, 6.30:1 */
  --on-conf-3: #ffffff; /* = white (on-primary light), 4.59:1 */
  --on-conf-4: #ffffff; /* = white (on-primary light), 7.70:1 */
  --on-conf-5: #ffffff; /* = white (on-primary light), 12.36:1 */
  --on-div-n3: #ffffff; /* = white (on-primary light), 8.02:1 */
  --on-div-n2: #ffffff; /* = white (on-primary light), 4.59:1 */
  --on-div-n1: #010715; /* = ink-deep, 9.47:1 */
  --on-div-0: #010715; /* = ink-deep, 17.15:1 */
  --on-div-p1: #010715; /* = ink-deep, 8.83:1 */
  --on-div-p2: #010715; /* = ink-deep, 4.83:1 */
  --on-div-p3: #ffffff; /* = white (on-primary light), 8.89:1 */
}

/* ---- Colour: DARK (system preference) ---- */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    color-scheme: dark;
    /* Brand primitives */
    --brand-strawberry: #e63946;
    --brand-honeydew: #f1faee;
    --brand-frosted: #a8dadc;
    --brand-steel: #457b9d;
    --brand-deep-space: #1d3557;
    --ext-amber-300: #f8b73e;
    --ext-amber-500: #dda227;
    --ext-amber-700: #996a00;
    --ext-amber-800: #906405;
    --ink-deep: #010715;
    /* Material 3 roles */
    --primary: #a7c8ff;
    --on-primary: #04305f;
    --primary-container: #244777;
    --on-primary-container: #d5e3ff;
    --secondary: #aacbe4;
    --on-secondary: #103447;
    --secondary-container: #2a4a5f;
    --on-secondary-container: #c7e7ff;
    --tertiary: #96d1d3;
    --on-tertiary: #003739;
    --tertiary-container: #0b4f51;
    --on-tertiary-container: #b2edef;
    --surface: #121317;
    --surface-dim: #121317;
    --surface-bright: #38393d;
    --surface-container-lowest: #0c0e12;
    --surface-container-low: #1a1c1f;
    --surface-container: #1e2023;
    --surface-container-high: #282a2e;
    --surface-container-highest: #333539;
    --on-surface: #e2e2e7;
    --on-surface-variant: #c2c6d2;
    --outline: #8c919c;
    --outline-variant: #424751;
    --inverse-surface: #e2e2e7;
    --inverse-on-surface: #2f3034;
    --inverse-primary: #3e5f90;
    --scrim: #000000;
    --primary-hover: #9abcf2;
    /* Spec aliases (palette_tokens.css names) */
    --bg: #121317; /* = surface */
    --panel: #1a1c1f; /* = surface-container-low */
    --elevated: #1a1c1f; /* = surface-container-low */
    --sunken: #1a1c1f; /* = surface-container-low */
    --appbar-bg: #1e2023; /* = surface-container */
    --appbar-fg: #e2e2e7; /* = on-surface */
    --text-primary: #e2e2e7; /* = on-surface */
    --text-secondary: #c2c6d2; /* = on-surface-variant */
    --text-muted: #c2c6d2; /* = on-surface-variant */
    --text-link: #a7c8ff; /* = primary */
    --text-on-accent: #04305f; /* = on-primary */
    --border-subtle: #424751; /* = outline-variant */
    --border-strong: #8c919c; /* = outline */
    --gridline: #424751; /* = outline-variant */
    --axis: #8c919c; /* = outline */
    --accent: #a7c8ff; /* = primary */
    --accent-hover: #9abcf2; /* = primary-hover */
    --accent-soft: #2a4a5f; /* = secondary-container */
    --focus-ring: #aacbe4; /* = secondary */
    --selection-halo: #e2e2e7; /* = on-surface */
    --mark-ring: #121317; /* = surface */
    --text-disabled: #e2e2e761;
    /* Status families */
    --status-ok: #a8dadc; /* = brand-frosted */
    --status-ok-text: #a8dadc; /* = brand-frosted */
    --status-ok-subtle: #2b4358;
    --status-ok-solid: #a8dadc; /* = brand-frosted */
    --status-ok-on-solid: #1d3557; /* = brand-deep-space */
    --status-info: #7aa4ef;
    --status-info-text: #7aa4ef;
    --status-info-subtle: #22395b;
    --status-info-solid: #7aa4ef;
    --status-info-on-solid: #010715;
    --status-warning: #dda227; /* = ext-amber-500 */
    --status-warning-text: #dda227; /* = ext-amber-500 */
    --status-warning-subtle: #343937;
    --status-warning-solid: #dda227; /* = ext-amber-500 */
    --status-warning-on-solid: #010715;
    --status-danger: #e63946; /* = brand-strawberry */
    --status-danger-text: #fb7172;
    --status-danger-subtle: #36263d;
    --status-danger-solid: #e63946; /* = brand-strawberry */
    --status-danger-on-solid: #010715;
    --status-unknown: #7a7d82;
    --status-unknown-text: #979ea6;
    --status-unknown-subtle: #223248;
    --status-unknown-solid: #7a7d82;
    --status-unknown-on-solid: #010715;
    /* Chart ramps */
    --seq-1: #294a6d;
    --seq-2: #366286;
    --seq-3: #457b9d; /* = brand-steel */
    --seq-4: #6498b9;
    --seq-5: #88b5d0;
    --seq-6: #b2d1e4;
    --seq-7: #dfeef6;
    --conf-1: #457b9d; /* = brand-steel */
    --conf-2: #6498b9;
    --conf-3: #88b5d0;
    --conf-4: #b2d1e4;
    --conf-5: #dfeef6;
    --div-n3: #90c5e9;
    --div-n2: #5291ba;
    --div-n1: #2e6386;
    --div-0: #373e47;
    --div-p1: #a12f35;
    --div-p2: #e63946; /* = brand-strawberry */
    --div-p3: #f8a4a1;
    --cat-1: #60b0ff;
    --cat-2: #9470cd;
    --cat-3: #2cecf5;
    --cat-4: #ec84b7;
    /* Derived (site): ink for values printed on ramp cells — the theme ink with the higher contrast */
    --on-seq-1: #ffffff; /* = white (on-primary light), 9.15:1 */
    --on-seq-2: #ffffff; /* = white (on-primary light), 6.47:1 */
    --on-seq-3: #ffffff; /* = white (on-primary light), 4.59:1 */
    --on-seq-4: #010715; /* = ink-deep, 6.46:1 */
    --on-seq-5: #010715; /* = ink-deep, 9.18:1 */
    --on-seq-6: #010715; /* = ink-deep, 12.60:1 */
    --on-seq-7: #010715; /* = ink-deep, 16.98:1 */
    --on-conf-1: #ffffff; /* = white (on-primary light), 4.59:1 */
    --on-conf-2: #010715; /* = ink-deep, 6.46:1 */
    --on-conf-3: #010715; /* = ink-deep, 9.18:1 */
    --on-conf-4: #010715; /* = ink-deep, 12.60:1 */
    --on-conf-5: #010715; /* = ink-deep, 16.98:1 */
    --on-div-n3: #010715; /* = ink-deep, 10.89:1 */
    --on-div-n2: #010715; /* = ink-deep, 5.87:1 */
    --on-div-n1: #ffffff; /* = white (on-primary light), 6.47:1 */
    --on-div-0: #ffffff; /* = white (on-primary light), 10.81:1 */
    --on-div-p1: #ffffff; /* = white (on-primary light), 7.06:1 */
    --on-div-p2: #010715; /* = ink-deep, 4.83:1 */
    --on-div-p3: #010715; /* = ink-deep, 10.38:1 */
  }
}

/* ---- Colour: DARK (explicit, page or element level; night canvas) ---- */
:root[data-theme="dark"],
[data-theme="dark"] {
  color-scheme: dark;
  /* Brand primitives */
  --brand-strawberry: #e63946;
  --brand-honeydew: #f1faee;
  --brand-frosted: #a8dadc;
  --brand-steel: #457b9d;
  --brand-deep-space: #1d3557;
  --ext-amber-300: #f8b73e;
  --ext-amber-500: #dda227;
  --ext-amber-700: #996a00;
  --ext-amber-800: #906405;
  --ink-deep: #010715;
  /* Material 3 roles */
  --primary: #a7c8ff;
  --on-primary: #04305f;
  --primary-container: #244777;
  --on-primary-container: #d5e3ff;
  --secondary: #aacbe4;
  --on-secondary: #103447;
  --secondary-container: #2a4a5f;
  --on-secondary-container: #c7e7ff;
  --tertiary: #96d1d3;
  --on-tertiary: #003739;
  --tertiary-container: #0b4f51;
  --on-tertiary-container: #b2edef;
  --surface: #121317;
  --surface-dim: #121317;
  --surface-bright: #38393d;
  --surface-container-lowest: #0c0e12;
  --surface-container-low: #1a1c1f;
  --surface-container: #1e2023;
  --surface-container-high: #282a2e;
  --surface-container-highest: #333539;
  --on-surface: #e2e2e7;
  --on-surface-variant: #c2c6d2;
  --outline: #8c919c;
  --outline-variant: #424751;
  --inverse-surface: #e2e2e7;
  --inverse-on-surface: #2f3034;
  --inverse-primary: #3e5f90;
  --scrim: #000000;
  --primary-hover: #9abcf2;
  /* Spec aliases (palette_tokens.css names) */
  --bg: #121317; /* = surface */
  --panel: #1a1c1f; /* = surface-container-low */
  --elevated: #1a1c1f; /* = surface-container-low */
  --sunken: #1a1c1f; /* = surface-container-low */
  --appbar-bg: #1e2023; /* = surface-container */
  --appbar-fg: #e2e2e7; /* = on-surface */
  --text-primary: #e2e2e7; /* = on-surface */
  --text-secondary: #c2c6d2; /* = on-surface-variant */
  --text-muted: #c2c6d2; /* = on-surface-variant */
  --text-link: #a7c8ff; /* = primary */
  --text-on-accent: #04305f; /* = on-primary */
  --border-subtle: #424751; /* = outline-variant */
  --border-strong: #8c919c; /* = outline */
  --gridline: #424751; /* = outline-variant */
  --axis: #8c919c; /* = outline */
  --accent: #a7c8ff; /* = primary */
  --accent-hover: #9abcf2; /* = primary-hover */
  --accent-soft: #2a4a5f; /* = secondary-container */
  --focus-ring: #aacbe4; /* = secondary */
  --selection-halo: #e2e2e7; /* = on-surface */
  --mark-ring: #121317; /* = surface */
  --text-disabled: #e2e2e761;
  /* Status families */
  --status-ok: #a8dadc; /* = brand-frosted */
  --status-ok-text: #a8dadc; /* = brand-frosted */
  --status-ok-subtle: #2b4358;
  --status-ok-solid: #a8dadc; /* = brand-frosted */
  --status-ok-on-solid: #1d3557; /* = brand-deep-space */
  --status-info: #7aa4ef;
  --status-info-text: #7aa4ef;
  --status-info-subtle: #22395b;
  --status-info-solid: #7aa4ef;
  --status-info-on-solid: #010715;
  --status-warning: #dda227; /* = ext-amber-500 */
  --status-warning-text: #dda227; /* = ext-amber-500 */
  --status-warning-subtle: #343937;
  --status-warning-solid: #dda227; /* = ext-amber-500 */
  --status-warning-on-solid: #010715;
  --status-danger: #e63946; /* = brand-strawberry */
  --status-danger-text: #fb7172;
  --status-danger-subtle: #36263d;
  --status-danger-solid: #e63946; /* = brand-strawberry */
  --status-danger-on-solid: #010715;
  --status-unknown: #7a7d82;
  --status-unknown-text: #979ea6;
  --status-unknown-subtle: #223248;
  --status-unknown-solid: #7a7d82;
  --status-unknown-on-solid: #010715;
  /* Chart ramps */
  --seq-1: #294a6d;
  --seq-2: #366286;
  --seq-3: #457b9d; /* = brand-steel */
  --seq-4: #6498b9;
  --seq-5: #88b5d0;
  --seq-6: #b2d1e4;
  --seq-7: #dfeef6;
  --conf-1: #457b9d; /* = brand-steel */
  --conf-2: #6498b9;
  --conf-3: #88b5d0;
  --conf-4: #b2d1e4;
  --conf-5: #dfeef6;
  --div-n3: #90c5e9;
  --div-n2: #5291ba;
  --div-n1: #2e6386;
  --div-0: #373e47;
  --div-p1: #a12f35;
  --div-p2: #e63946; /* = brand-strawberry */
  --div-p3: #f8a4a1;
  --cat-1: #60b0ff;
  --cat-2: #9470cd;
  --cat-3: #2cecf5;
  --cat-4: #ec84b7;
  /* Derived (site): ink for values printed on ramp cells — the theme ink with the higher contrast */
  --on-seq-1: #ffffff; /* = white (on-primary light), 9.15:1 */
  --on-seq-2: #ffffff; /* = white (on-primary light), 6.47:1 */
  --on-seq-3: #ffffff; /* = white (on-primary light), 4.59:1 */
  --on-seq-4: #010715; /* = ink-deep, 6.46:1 */
  --on-seq-5: #010715; /* = ink-deep, 9.18:1 */
  --on-seq-6: #010715; /* = ink-deep, 12.60:1 */
  --on-seq-7: #010715; /* = ink-deep, 16.98:1 */
  --on-conf-1: #ffffff; /* = white (on-primary light), 4.59:1 */
  --on-conf-2: #010715; /* = ink-deep, 6.46:1 */
  --on-conf-3: #010715; /* = ink-deep, 9.18:1 */
  --on-conf-4: #010715; /* = ink-deep, 12.60:1 */
  --on-conf-5: #010715; /* = ink-deep, 16.98:1 */
  --on-div-n3: #010715; /* = ink-deep, 10.89:1 */
  --on-div-n2: #010715; /* = ink-deep, 5.87:1 */
  --on-div-n1: #ffffff; /* = white (on-primary light), 6.47:1 */
  --on-div-0: #ffffff; /* = white (on-primary light), 10.81:1 */
  --on-div-p1: #ffffff; /* = white (on-primary light), 7.06:1 */
  --on-div-p2: #010715; /* = ink-deep, 4.83:1 */
  --on-div-p3: #010715; /* = ink-deep, 10.38:1 */
}

/* ---- Domain aliases: declared on :root AND on every themed element so var() re-resolves inside it ---- */
:root,
[data-theme],
[data-canvas] {
  --seg-open: var(--status-ok);
  --seg-congested: var(--status-warning);
  --seg-partial: var(--status-danger);
  --seg-closed: var(--status-danger);
  --seg-unknown: var(--status-unknown);
  --act-no-action: var(--status-unknown);
  --act-continue: var(--status-ok);
  --act-limit-speed: var(--status-warning);
  --act-reroute: var(--status-ok);
  --act-hold: var(--status-info);
  --act-safe-stop: var(--status-danger);
  --odd-compliant: var(--status-ok);
  --odd-violated: var(--status-danger);
  --odd-unknown: var(--status-unknown);
  --src-ok: var(--status-ok);
  --src-degraded: var(--status-warning);
  --src-failed: var(--status-danger);
  --src-unknown: var(--status-unknown);
  --rs-free: var(--status-unknown);
  --rs-connecting: var(--status-info);
  --rs-active: var(--status-info);
  --rs-released: var(--status-unknown);
  --rs-pool-full: var(--status-warning);
  --rs-pool-over: var(--status-danger);
  --lat-ok: var(--status-ok);
  --lat-warn: var(--status-warning);
  --lat-serious: var(--status-warning);
  --lat-breach: var(--status-danger);
  --eval-correct: var(--status-ok);
  --eval-over: var(--status-warning);
  --eval-under: var(--status-danger);
  --eval-abstain: var(--status-unknown);
  --grp-main: var(--cat-1);
  --grp-north: var(--cat-2);
  --grp-south: var(--cat-3);
  --grp-connector: var(--cat-4);
  --chart-grid: var(--gridline);
  --chart-axis: var(--axis);
  --chart-series-1: var(--cat-1);
  --chart-series-2: var(--cat-2);
  --chart-series-3: var(--cat-3);
  --chart-series-4: var(--cat-4);
  --chart-run-a: var(--cat-1);
  --chart-run-b: var(--cat-2);
  --chart-pred: var(--accent);
  --chart-truth: var(--text-primary);
  --chart-cursor: var(--accent);
  --chart-budget-line: var(--status-danger);
  --chart-threshold: var(--text-muted);
  --chart-band: var(--accent-soft);
  --route-overlay: var(--selection-halo);
  --route-overlay-casing: var(--mark-ring);
  --truth-outline: var(--text-primary);
  /* Site extras (follow the theme) */
  /* heatmaps sit on data surfaces (DS §1): correct cells are the surface itself, so every status mark is
     drawn on surface; not-evaluated cells are surface-container-lowest plus an outline-variant hatch */
  --eval-correct-quiet: var(--surface);
  --eval-na: var(--surface-container-lowest);
}

/* ---- Theme-independent tokens ---- */
:root {
  --font-sans: Roboto, "Roboto Cyrillic", "Corridor Symbols", system-ui, sans-serif;
  --font-feature-numeric: tabular-nums;

  /* Type scale (M3) — §3 */
  --type-display-small-size: 36px; --type-display-small-line: 44px; --type-display-small-weight: 400; --type-display-small-tracking: 0;
  --type-display-small-font: 400 36px/44px var(--font-sans); /* canvas ctx.font / font shorthand */
  --type-headline-medium-size: 28px; --type-headline-medium-line: 36px; --type-headline-medium-weight: 400; --type-headline-medium-tracking: 0;
  --type-headline-medium-font: 400 28px/36px var(--font-sans); /* canvas ctx.font / font shorthand */
  --type-headline-small-size: 24px; --type-headline-small-line: 32px; --type-headline-small-weight: 400; --type-headline-small-tracking: 0;
  --type-headline-small-font: 400 24px/32px var(--font-sans); /* canvas ctx.font / font shorthand */
  --type-title-large-size: 22px; --type-title-large-line: 28px; --type-title-large-weight: 400; --type-title-large-tracking: 0;
  --type-title-large-font: 400 22px/28px var(--font-sans); /* canvas ctx.font / font shorthand */
  --type-title-medium-size: 16px; --type-title-medium-line: 24px; --type-title-medium-weight: 500; --type-title-medium-tracking: 0.15px;
  --type-title-medium-font: 500 16px/24px var(--font-sans); /* canvas ctx.font / font shorthand */
  --type-title-small-size: 14px; --type-title-small-line: 20px; --type-title-small-weight: 500; --type-title-small-tracking: 0.1px;
  --type-title-small-font: 500 14px/20px var(--font-sans); /* canvas ctx.font / font shorthand */
  --type-body-large-size: 16px; --type-body-large-line: 24px; --type-body-large-weight: 400; --type-body-large-tracking: 0.5px;
  --type-body-large-font: 400 16px/24px var(--font-sans); /* canvas ctx.font / font shorthand */
  --type-body-medium-size: 14px; --type-body-medium-line: 20px; --type-body-medium-weight: 400; --type-body-medium-tracking: 0.25px;
  --type-body-medium-font: 400 14px/20px var(--font-sans); /* canvas ctx.font / font shorthand */
  --type-body-small-size: 12px; --type-body-small-line: 16px; --type-body-small-weight: 400; --type-body-small-tracking: 0.4px;
  --type-body-small-font: 400 12px/16px var(--font-sans); /* canvas ctx.font / font shorthand */
  --type-label-large-size: 14px; --type-label-large-line: 20px; --type-label-large-weight: 500; --type-label-large-tracking: 0.1px;
  --type-label-large-font: 500 14px/20px var(--font-sans); /* canvas ctx.font / font shorthand */
  --type-label-medium-size: 12px; --type-label-medium-line: 16px; --type-label-medium-weight: 500; --type-label-medium-tracking: 0.5px;
  --type-label-medium-font: 500 12px/16px var(--font-sans); /* canvas ctx.font / font shorthand */
  --type-label-small-size: 11px; --type-label-small-line: 16px; --type-label-small-weight: 500; --type-label-small-tracking: 0.5px;
  --type-label-small-font: 500 11px/16px var(--font-sans); /* canvas ctx.font / font shorthand */

  /* Spacing — §4 */
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-6: 24px;
  --space-8: 32px;

  /* Shape — §4 */
  --shape-xs: 4px;
  --shape-sm: 8px;
  --shape-md: 12px;
  --shape-lg: 16px;
  --shape-xl: 28px;
  --shape-full: 999px;

  /* Elevation — §4 */
  --elevation-1: 0 1px 2px 0 rgba(0,0,0,0.30), 0 1px 3px 1px rgba(0,0,0,0.15);
  --elevation-2: 0 1px 2px 0 rgba(0,0,0,0.30), 0 2px 6px 2px rgba(0,0,0,0.15);
  --elevation-3: 0 1px 3px 0 rgba(0,0,0,0.30), 0 4px 8px 3px rgba(0,0,0,0.15);

  /* State layers — §4 */
  --state-hover: 0.08;
  --state-focus: 0.10;
  --state-pressed: 0.10;
  --state-dragged: 0.16;
  --disabled-content: 0.38;
  --disabled-container: 0.12;

  /* Stroke cues — §5 */
  --seg-width-motorway: 4px;
  --seg-width-trunk: 3px;
  --seg-width-link: 2px;
  --seg-width-unknown: 2px;
  --seg-congested-extra-width: 1.5px;
  --seg-partial-dash: 8 4;
  --seg-unknown-dash: 1 6;
  --seg-closed-tick-spacing: 32px;
  --seg-chevron-spacing: 24px;
  --route-overlay-dash: 6 6;
  --rs-connecting-dash: 3 3;
  --focus-ring-width: 2px;
  --focus-ring-offset: 2px;
  --selection-halo-width: 2px;

  /* Stroke cues from palette_tokens.css not listed in the DS table */
  --seg-open-dash: none;
  --seg-congested-dash: none;
  --seg-closed-dash: none;
  --chart-hatch-angle: 45deg;
  --lat-warn-ms: 1000;
  --lat-tick-ms: 1500;
  --lat-budget-ms: 2000;

  /* State layers as percentages (for color-mix) and the modal scrim */
  --state-hover-pct: 8%;
  --state-focus-pct: 10%;
  --state-pressed-pct: 10%;
  --state-dragged-pct: 16%;
  --disabled-content-pct: 38%;
  --disabled-container-pct: 12%;
  --scrim-opacity: 0.32;
  --scrim-pct: 32%;

  /* Glyphs (fixed Unicode state glyphs, §1 Iconography) — CSS content: var(--glyph-…); in JS strip the quotes */
  --glyph-seg-closed: "⛔"; /* Закрыт */
  --glyph-hold: "❚❚"; /* Удержание */
  --glyph-reroute: "↪"; /* Объезд */
  --glyph-odd-violated: "⚠"; /* Нарушение ODD */
  --glyph-unknown: "?"; /* Неизвестно */
  --glyph-src-ok: "●"; /* Норма */
  --glyph-src-degraded: "◐"; /* Деградация */
  --glyph-src-failed: "⊘"; /* Отказ */
  --glyph-src-unknown: "◌"; /* Неизвестно */
  --glyph-eval-correct: "✓"; /* Верно */
  --glyph-eval-over: "▲"; /* Перестраховка */
  --glyph-eval-under: "✗"; /* Пропуск */
  --glyph-eval-abstain: "?"; /* Воздержался */

  /* Motion (M3 easing, spec durations) */
  --ease-standard: cubic-bezier(0.2, 0, 0, 1);
  --ease-emphasized-decelerate: cubic-bezier(0.05, 0.7, 0.1, 1);
  --ease-emphasized-accelerate: cubic-bezier(0.3, 0, 0.8, 0.15);
  --ease-enter: var(--ease-emphasized-decelerate);
  --ease-exit: var(--ease-emphasized-accelerate);
  --ease-linear: linear;
  --dur-instant: 80ms;
  --dur-fast: 120ms;
  --dur-base: 200ms;
  --dur-state: 300ms;
  --dur-slow: 400ms;

  /* Layout sizes and stacking (site) */
  --appbar-height: 64px;
  --rail-width: 80px;
  --sheet-width: 480px;
  --z-appbar: 20;
  --z-rail: 15;
  --z-scrim: 40;
  --z-sheet: 50;
  --z-snackbar: 60;
  --z-tooltip: 70;
}

@media (prefers-reduced-motion: reduce) {
  :root { --dur-instant: 0ms; --dur-fast: 0ms; --dur-base: 0ms; --dur-state: 0ms; --dur-slow: 0ms; }
}

/* ---- Type utility classes (M3 type scale) ---- */
.t-display-small { font-size: var(--type-display-small-size); line-height: var(--type-display-small-line); font-weight: var(--type-display-small-weight); letter-spacing: var(--type-display-small-tracking); }
.t-headline-medium { font-size: var(--type-headline-medium-size); line-height: var(--type-headline-medium-line); font-weight: var(--type-headline-medium-weight); letter-spacing: var(--type-headline-medium-tracking); }
.t-headline-small { font-size: var(--type-headline-small-size); line-height: var(--type-headline-small-line); font-weight: var(--type-headline-small-weight); letter-spacing: var(--type-headline-small-tracking); }
.t-title-large { font-size: var(--type-title-large-size); line-height: var(--type-title-large-line); font-weight: var(--type-title-large-weight); letter-spacing: var(--type-title-large-tracking); }
.t-title-medium { font-size: var(--type-title-medium-size); line-height: var(--type-title-medium-line); font-weight: var(--type-title-medium-weight); letter-spacing: var(--type-title-medium-tracking); }
.t-title-small { font-size: var(--type-title-small-size); line-height: var(--type-title-small-line); font-weight: var(--type-title-small-weight); letter-spacing: var(--type-title-small-tracking); }
.t-body-large { font-size: var(--type-body-large-size); line-height: var(--type-body-large-line); font-weight: var(--type-body-large-weight); letter-spacing: var(--type-body-large-tracking); }
.t-body-medium { font-size: var(--type-body-medium-size); line-height: var(--type-body-medium-line); font-weight: var(--type-body-medium-weight); letter-spacing: var(--type-body-medium-tracking); }
.t-body-small { font-size: var(--type-body-small-size); line-height: var(--type-body-small-line); font-weight: var(--type-body-small-weight); letter-spacing: var(--type-body-small-tracking); }
.t-label-large { font-size: var(--type-label-large-size); line-height: var(--type-label-large-line); font-weight: var(--type-label-large-weight); letter-spacing: var(--type-label-large-tracking); }
.t-label-medium { font-size: var(--type-label-medium-size); line-height: var(--type-label-medium-line); font-weight: var(--type-label-medium-weight); letter-spacing: var(--type-label-medium-tracking); }
.t-label-small { font-size: var(--type-label-small-size); line-height: var(--type-label-small-line); font-weight: var(--type-label-small-weight); letter-spacing: var(--type-label-small-tracking); }
.t-tabular { font-variant-numeric: tabular-nums; }
.t-caps { text-transform: uppercase; }
