/* CannaTech design system — token layer
 * GENERATED by design-system/generate.cjs from design-system/tokens.json — do not edit.
 * Change a color: edit the seed/target in scripts/solve-tokens.cjs, re-run it, then
 * design-system/build-tokens.cjs, then this generator. Contract: design-system/SPEC.md.
 */

/* Tier 1/2 mechanics — spacing, radius, control geometry, motion, z-ladder, type. Theme-independent. */
:root {
  --space-1: 4px;
  --space-2: 8px;
  --space-3: 12px;
  --space-4: 16px;
  --space-5: 24px;
  --space-6: 32px;
  --space-7: 48px;
  --space-8: 64px;
  --space-05: 2px;
  --radius-none: 0px;
  --radius-control: 6px;
  --radius-sm: 6px;
  --radius-badge: 6px;
  --radius: 6px;
  --radius-lg: 6px;
  --radius-pill: 999px;
  --radius-check: 3px;
  --control-h-sm: 36px;
  --control-h: 48px;
  --control-h-lg: 56px;
  --control-h-touch: 64px;
  --target-min: 44px;
  --counter-min: 20px;
  --check-size: 16px;
  --check-mark-width: 2px;
  --pad-x: 12px;
  --pad-chevron: 30px;
  --icon-xs: 12px;
  --icon-sm: 16px;
  --icon-md: 20px;
  --icon-lg: 24px;
  --icon-hero: 48px;
  --row-compact: 36px;
  --row-comfortable: 44px;
  --row-touch: 56px;
  --sidebar: 240px;
  --sidebar-collapsed: 64px;
  --board-col: 320px;
  --card-min-h: 120px;
  --topbar-h: 60px;
  --container-sm: 720px;
  --container: 1100px;
  --container-lg: 1400px;
  --modal-sm: 420px;
  --modal: 640px;
  --modal-lg: 900px;
  --bp-xs: 480px;
  --bp-sm: 640px;
  --bp-md: 768px;
  --bp-lg: 1024px;
  --bp-xl: 1400px;
  --bp-xxl: 1800px;
  --tracking-caps: 0.6px;
  --tracking-normal: 0;
  --dur-fast: 120ms;
  --dur-base: 160ms;
  --dur-slow: 240ms;
  --dur-toast: 4000ms;
  --dur-pulse: 2000ms;
  --dur-spin: 700ms;
  --dur-shimmer: 1300ms;
  --dur-flash: 650ms;
  --dur-blink: 1000ms;
  --ease-out: cubic-bezier(0.22, 1, 0.36, 1);
  --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
  --z-base: 0;
  --z-local-raised: 2;
  --z-local-sticky: 3;
  --z-local-float: 4;
  --z-local-top: 5;
  --z-pill: 90;
  --z-sticky: 100;
  --z-dropdown: 200;
  --z-overlay: 300;
  --z-modal-backdrop: 400;
  --z-modal: 500;
  --z-toast: 600;
  --z-banner: 700;
  --z-tooltip: 800;
  --overlay-hover: 0.06;
  --overlay-active: 0.1;
  --fs-kds-hero: 3rem;
  --fs-kds: 2rem;
  --fs-display: 1.625rem;
  --fs-heading: 1.375rem;
  --fs-title: 1.125rem;
  --fs-body: 1rem;
  --fs-sm: 0.875rem;
  --fs-label: 0.75rem;
  --lh-tight: 1.2;
  --lh-body: 1.4;
  --lh-loose: 1.6;
  --fw-medium: 500;
  --fw-bold: 700;
  --font-display: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --font-sans: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  --font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --label-width: 2in;
  --label-title-size: 14pt;
  --label-body-size: 9pt;
  --label-margin: 0.08in;
  --absolute-paper: #FFFFFF;
  --absolute-ink: #000000;
}

/* Theme-INVARIANT color: the nine-stage status ramp, its inks and its light-theme edges.
   The ramp does not change between light and dark on purpose — an operator learns one board (SPEC §6). */
:root {
  --on-status-deep: #FFFFFF;
  --on-status-mid: #252529;
  --on-status-bright: #252529;
  --on-status-white: #252529;
  --status-received: #BE4240;
  --on-status-received: #FFFFFF;
  --status-working: #ECBD51;
  --on-status-working: #252529;
  --status-ready-for-packing: #047B6A;
  --on-status-ready-for-packing: #FFFFFF;
  --status-packed: #5AD8B1;
  --on-status-packed: #252529;
  --status-ready-for-delivery: #356CBD;
  --on-status-ready-for-delivery: #FFFFFF;
  --status-out-for-delivery: #85CEF9;
  --on-status-out-for-delivery: #252529;
  --status-en-route: #FFFFFF;
  --on-status-en-route: #252529;
  --status-waiting: #D17326;
  --on-status-waiting: #252529;
  --status-complete: #037E3F;
  --on-status-complete: #FFFFFF;
  --status-en-route-outline: #95949C;
  --status-working-edge-solid: #BB8E0E;
  --status-working-edge: rgba(187, 142, 14, 0.55);
  --status-packed-edge-solid: #16A884;
  --status-packed-edge: rgba(22, 168, 132, 0.55);
  --status-out-for-delivery-edge-solid: #549CC6;
  --status-out-for-delivery-edge: rgba(84, 156, 198, 0.55);
  --spine-width: 4px;
}

/* Tier 2 — dark is the default for ops surfaces (SPEC §12) — plus the ring recipes, the tier-3
   component aliases, and the back-compat block. A component rule may use tier-2 roles and these
   tier-3 aliases only: never a primitive, never a literal (SPEC §2.4). */
:root,
[data-theme="dark"] {
  --bg: #101013;
  --panel: #17171A;
  --card: #1E1E21;
  --card-2: #26262A;
  --card-3: #2F2E33;
  --border: #3C3B41;
  --border-strong: #54535A;
  --border-subtle: rgba(228, 227, 231, 0.06);
  --scrim: rgba(16, 16, 19, 0.72);
  --scrim-soft: rgba(16, 16, 19, 0.40);
  --inverse-chip: #EAE9ED;
  --on-inverse-chip: #504A5C;
  --border-mark: #69686F;
  --surface-hover: #2D2C31;
  --text: #E4E3E6;
  --text-secondary: #B1B0B6;
  --text-muted: #97979C;
  --accent: #8159DA;
  --on-accent: #FFFFFF;
  --accent-hover: #683CBC;
  --accent-pressed: #4B1397;
  --accent-subtle: #282040;
  --accent-text: #9E87E3;
  --accent-disabled: #36343F;
  --on-accent-disabled: #7E7E83;
  --focus-ring: #B093E4;
  --focus-ring-inner: #101013;
  --accent-wash: rgba(129, 89, 218, 0.13);
  --accent-wash-strong: rgba(129, 89, 218, 0.28);
  --success: #1B8641;
  --success-text: #45A860;
  --on-success: #FFFFFF;
  --success-wash: #1D3127;
  --success-edge: rgba(27, 134, 65, 0.42);
  --warning: #986D15;
  --warning-text: #BA8E3E;
  --on-warning: #FFFFFF;
  --warning-wash: #342C1F;
  --warning-edge: rgba(152, 109, 21, 0.42);
  --danger: #C84B48;
  --danger-text: #EE6D67;
  --on-danger: #FFFFFF;
  --danger-wash: #3D2628;
  --danger-edge: rgba(200, 75, 72, 0.42);
  --info: #198095;
  --info-text: #44A1B6;
  --on-info: #FFFFFF;
  --info-wash: #1D3036;
  --info-edge: rgba(25, 128, 149, 0.42);
  --danger-hover: #A92D2F;
  --danger-pressed: #820011;
  --rush: #CA6D1D;
  --overdue-ring: #EE6D67;
  --on-lime: #4B6138;
  --viz-cat-1: #A184E4;
  --viz-cat-2: #ED9C55;
  --viz-cat-3: #0D75A8;
  --viz-cat-4: #EAD070;
  --viz-cat-5: #048575;
  --viz-cat-6: #ED9AC1;
  --viz-cat-7: #A74F3F;
  --viz-cat-8: #9E9DA4;
  --viz-seq-1: #432D6F;
  --viz-seq-2: #644F94;
  --viz-seq-3: #8672BA;
  --viz-seq-4: #AB96E2;
  --viz-seq-5: #CFBFFE;
  --viz-div-1: #BE5A0A;
  --viz-div-2: #DE9A60;
  --viz-div-3: #9E9EA1;
  --viz-div-4: #6EACD7;
  --viz-div-5: #3970C2;
  --viz-annotation: #A3E635;
  --viz-annotation-inner: #101013;
  --viz-axis: #97979C;
  --viz-grid: rgba(228, 227, 231, 0.06);
  --viz-track: #26262A;
  --viz-tooltip-bg: #17171A;
  --viz-tooltip-border: #54535A;
  --map-route: #8159DA;
  --map-route-alt: #97979C;
  --map-cluster: #17171A;
  --map-cluster-ink: #E4E3E6;
  --map-geofence: #8159DA;
  --map-geofence-wash: rgba(129, 89, 218, 0.13);
  --map-self: #A3E635;
  --map-land: #1B1B1E;
  --map-water: #12263B;
  --map-park: #16301F;
  --map-commercial: #332D22;
  --map-building: #292930;
  --map-road-casing: #141417;
  --map-road-other: #2E2D36;
  --map-road-minor: #3C3B44;
  --map-road-major: #4B4A53;
  --map-road-highway: #5A5962;
  --map-boundary: #55535A;
  --map-label-ink: #B1B0B6;
  --map-label-halo: #101013;
  --map-poi: #8E877C;
  --theme-mode: "dark";
  --elev-resting: 0 1px 2px rgba(0, 0, 0, 0.45);
  --elev-raised: 0 8px 24px rgba(0, 0, 0, 0.45);
  --elev-overlay: 0 16px 40px rgba(0, 0, 0, 0.5);
  --glow-accent: 0 6px 16px -8px rgba(129, 89, 218, 0.42);
  --glow-danger: 0 6px 16px -8px rgba(200, 75, 72, 0.5);
  --border-width: 1px;
  --ring-focus: 0 0 0 2px var(--focus-ring-inner), 0 0 0 4px var(--focus-ring);
  --ring-overdue: inset 0 0 0 2px var(--overdue-ring);
  --ring-selected: inset 3px 0 0 0 var(--accent);
  --btn-primary-bg: var(--accent);
  --btn-primary-bg-hover: var(--accent-hover);
  --btn-primary-bg-pressed: var(--accent-pressed);
  --btn-primary-ink: var(--on-accent);
  --btn-primary-glow: var(--glow-accent);
  --btn-secondary-bg: var(--card-2);
  --btn-secondary-bg-hover: var(--surface-hover);
  --btn-secondary-ink: var(--text);
  --btn-secondary-border: var(--border-mark);
  --btn-ghost-ink: var(--accent-text);
  --btn-ghost-border: var(--border-mark);
  --btn-danger-bg: var(--danger);
  --btn-danger-bg-hover: var(--danger-hover);
  --btn-danger-bg-pressed: var(--danger-pressed);
  --btn-danger-ink: var(--on-danger);
  --btn-danger-glow: var(--glow-danger);
  --btn-disabled-bg: var(--accent-disabled);
  --btn-disabled-ink: var(--on-accent-disabled);
  --btn-height: var(--control-h);
  --btn-radius: var(--radius-control);
  --btn-pad-x: var(--pad-x);
  --checkbox-bg: var(--card-2);
  --checkbox-border: var(--border-strong);
  --checkbox-border-hover: var(--border-mark);
  --checkbox-checked-bg: var(--accent);
  --checkbox-checked-bg-hover: var(--accent-hover);
  --checkbox-checked-border: var(--accent);
  --checkbox-ink: var(--on-accent);
  --checkbox-disabled-bg: var(--accent-disabled);
  --checkbox-disabled-border: var(--border);
  --checkbox-disabled-ink: var(--on-accent-disabled);
  --checkbox-size: var(--check-size);
  --checkbox-radius: var(--radius-check);
  --checkbox-mark-width: var(--check-mark-width);
  --field-bg: var(--bg);
  --field-ink: var(--text);
  --field-placeholder: var(--text-muted);
  --field-border: var(--border-mark);
  --field-border-focus: var(--focus-ring);
  --field-label-ink: var(--text-secondary);
  --field-help-ink: var(--text-muted);
  --field-error-ink: var(--danger-text);
  --field-error-border: var(--danger-text);
  --field-disabled-bg: var(--accent-disabled);
  --field-disabled-ink: var(--on-accent-disabled);
  --field-height: var(--control-h);
  --field-radius: var(--radius-control);
  --field-pad-x: var(--pad-x);
  --field-pad-chevron: var(--pad-chevron);
  --table-head-bg: var(--panel);
  --table-head-ink: var(--text-secondary);
  --table-row-bg: var(--card);
  --table-row-bg-alt: var(--card-2);
  --table-row-bg-hover: var(--surface-hover);
  --table-row-bg-selected: var(--accent-subtle);
  --table-row-selected-bar: var(--accent);
  --table-border: var(--border);
  --table-ink: var(--text);
  --table-num-ink: var(--text);
  --card-bg: var(--card);
  --card-bg-raised: var(--card-2);
  --card-bg-hover: var(--surface-hover);
  --card-border: var(--border);
  --card-shadow: var(--elev-resting);
  --card-radius: var(--radius);
  --card-spine-width: var(--spine-width);
  --badge-radius: var(--radius-badge);
  --badge-font-size: var(--fs-label);
  --badge-font-weight: var(--fw-bold);
  --badge-tracking: var(--tracking-caps);
  --badge-success-bg: var(--success-wash);
  --badge-success-ink: var(--success-text);
  --badge-success-edge: var(--success-edge);
  --badge-warning-bg: var(--warning-wash);
  --badge-warning-ink: var(--warning-text);
  --badge-warning-edge: var(--warning-edge);
  --badge-danger-bg: var(--danger-wash);
  --badge-danger-ink: var(--danger-text);
  --badge-danger-edge: var(--danger-edge);
  --badge-info-bg: var(--info-wash);
  --badge-info-ink: var(--info-text);
  --badge-info-edge: var(--info-edge);
  --badge-rush-ink: var(--rush);
  --badge-rush-border: var(--rush);
  --badge-counter-radius: var(--radius-pill);
  --badge-counter-font-size: var(--fs-label);
  --badge-counter-min-width: var(--counter-min);
  --badge-counter-bg: var(--accent);
  --badge-counter-ink: var(--on-accent);
  --badge-counter-attention-bg: var(--danger);
  --badge-counter-attention-ink: var(--on-danger);
  --modal-bg: var(--card);
  --modal-border: var(--border-strong);
  --modal-shadow: var(--elev-overlay);
  --modal-scrim: var(--scrim);
  --modal-head-ink: var(--text);
  --modal-body-ink: var(--text-secondary);
  --modal-width: var(--modal);
  --modal-radius: var(--radius-lg);
  --toast-bg: var(--panel);
  --toast-border: var(--border-strong);
  --toast-shadow: var(--elev-overlay);
  --toast-ink: var(--text);
  --toast-success-edge: var(--success);
  --toast-warning-edge: var(--warning);
  --toast-danger-edge: var(--danger);
  --toast-info-edge: var(--info);
  --toast-duration: var(--dur-toast);
  --nav-bg: var(--panel);
  --nav-ink: var(--text-secondary);
  --nav-ink-active: var(--text);
  --nav-item-bg-hover: var(--surface-hover);
  --nav-item-bg-active: var(--accent-subtle);
  --nav-active-bar: var(--accent);
  --nav-border: var(--border);
  --nav-height: var(--topbar-h);
  --nav-width: var(--sidebar);
  --board-bg: var(--bg);
  --board-col-bg: var(--panel);
  --board-col-ink: var(--text-secondary);
  --board-card-bg: var(--card);
  --board-col-width: var(--board-col);
  --board-card-min-h: var(--card-min-h);
  --banner-offline-bg: var(--danger);
  --banner-offline-ink: var(--on-danger);
  --banner-stale-bg: var(--warning);
  --banner-stale-ink: var(--on-warning);
  --banner-approval-bg: var(--warning-wash);
  --banner-approval-ink: var(--warning-text);
  --banner-z: var(--z-banner);
  --empty-ink: var(--text-muted);
  --empty-icon-ink: var(--border-mark);
  --empty-action-ink: var(--accent-text);
  --chart-axis: var(--viz-axis);
  --chart-grid: var(--viz-grid);
  --chart-track: var(--viz-track);
  --chart-tooltip-bg: var(--viz-tooltip-bg);
  --chart-tooltip-border: var(--viz-tooltip-border);
  --chart-annotation: var(--viz-annotation);
  --chart-annotation-inner: var(--viz-annotation-inner);
  --pagination-item-ink: var(--text-secondary);
  --pagination-item-ink-active: var(--on-accent);
  --pagination-item-bg-active: var(--accent);
  --pagination-item-bg-hover: var(--surface-hover);
  --pagination-item-ink-disabled: var(--on-accent-disabled);
  --pagination-height: var(--control-h-sm);
  --pagination-radius: var(--radius-control);
  --avatar-bg: var(--panel);
  --avatar-ink: var(--text);
  --avatar-border: var(--border);
  --avatar-radius: var(--radius-pill);
  --avatar-size: var(--icon-lg);
  --lang-select-bg: var(--card-2);
  --lang-select-ink: var(--text);
  --lang-select-border: var(--border-mark);
  --lang-select-height: var(--control-h-sm);
  --lang-select-radius: var(--radius-control);
  --lang-select-pad-x: var(--pad-x);
  --lang-select-pad-chevron: var(--pad-chevron);
  --bell-ink: var(--text-secondary);
  --bell-ink-active: var(--text);
  --bell-counter-bg: var(--danger);
  --bell-counter-ink: var(--on-danger);
  --bell-size: var(--icon-md);
  --toolbar-gap: var(--space-2);
  --toolbar-control-h: var(--control-h-sm);
  --toolbar-radius: var(--radius-control);
  --toolbar-bg: var(--panel);
  --toolbar-border: var(--border);
  --accent-2: var(--accent-pressed);
  --accent-ink: var(--on-accent);
  --accent-soft: var(--accent-wash);
  --accent-glow: var(--accent-wash-strong);
  --muted: var(--text-muted);
  --lime: var(--viz-annotation);
  --lime-ink: var(--on-lime);
  --danger-deep: var(--danger-pressed);
  --error-text: var(--danger-text);
  --overdue: var(--overdue-ring);
  --shadow-1: var(--elev-resting);
  --shadow-2: var(--elev-raised);
  --speed: var(--dur-base);
  --fs-input: var(--fs-body);
}

/* Tier 2 — light: admin default and the customer portal. */
[data-theme="light"] {
  --bg: #F8F6FB;
  --panel: #FFFFFF;
  --card: #FFFFFF;
  --card-2: #F1EFF5;
  --card-3: #E8E5EC;
  --border: #E2DDE7;
  --border-strong: #C5BFCE;
  --border-subtle: rgba(54, 44, 72, 0.08);
  --scrim: rgba(54, 44, 72, 0.45);
  --scrim-soft: rgba(54, 44, 72, 0.25);
  --inverse-chip: #362C48;
  --on-inverse-chip: #F8F6FB;
  --border-mark: #9892A1;
  --surface-hover: #EDEAF1;
  --text: #352C47;
  --text-secondary: #554C64;
  --text-muted: #6A6376;
  --accent: #8D51D1;
  --on-accent: #FFFFFF;
  --accent-hover: #7334B3;
  --accent-pressed: #54038F;
  --accent-subtle: #F1E8FE;
  --accent-text: #8449C5;
  --accent-disabled: #E8E5EC;
  --on-accent-disabled: #888194;
  --focus-ring: #8D51D1;
  --focus-ring-inner: #FFFFFF;
  --accent-wash: rgba(141, 81, 209, 0.13);
  --accent-wash-strong: rgba(141, 81, 209, 0.28);
  --success-wash: #DBF9E2;
  --success-text: #1F7E3F;
  --success: #1F7E3F;
  --success-edge-solid: #4DA665;
  --success-edge: rgba(77, 166, 101, 0.55);
  --on-success: #FFFFFF;
  --warning-wash: #FFF0D8;
  --warning-text: #996307;
  --warning: #996307;
  --warning-edge-solid: #C28A3E;
  --warning-edge: rgba(194, 138, 62, 0.55);
  --on-warning: #FFFFFF;
  --danger-wash: #FEE9E8;
  --danger-text: #C4393A;
  --danger: #C4393A;
  --danger-edge-solid: #F56762;
  --danger-edge: rgba(245, 103, 98, 0.55);
  --on-danger: #FFFFFF;
  --info-wash: #D6F6FE;
  --info-text: #087792;
  --info: #087792;
  --info-edge-solid: #44A0BB;
  --info-edge: rgba(68, 160, 187, 0.55);
  --on-info: #FFFFFF;
  --danger-hover: #A51420;
  --danger-pressed: #74000E;
  --rush: #B4611A;
  --overdue-ring: #C4393A;
  --on-lime: #4B6138;
  --viz-cat-1: #705AB8;
  --viz-cat-2: #944B00;
  --viz-cat-3: #4996D0;
  --viz-cat-4: #5B4600;
  --viz-cat-5: #309C8A;
  --viz-cat-6: #8A436E;
  --viz-cat-7: #D77D62;
  --viz-cat-8: #6A6970;
  --viz-seq-1: #DFCDFF;
  --viz-seq-2: #B598E3;
  --viz-seq-3: #8672BB;
  --viz-seq-4: #62539A;
  --viz-seq-5: #453B70;
  --viz-div-1: #CE6924;
  --viz-div-2: #89470C;
  --viz-div-3: #606063;
  --viz-div-4: #176185;
  --viz-div-5: #5F8AE1;
  --viz-annotation: #A3E635;
  --viz-annotation-inner: #648000;
  --viz-axis: #6A6376;
  --viz-grid: rgba(54, 44, 72, 0.08);
  --viz-track: #F1EFF5;
  --viz-tooltip-bg: #FFFFFF;
  --viz-tooltip-border: #C5BFCE;
  --map-route: #8D51D1;
  --map-route-alt: #6A6376;
  --map-cluster: #FFFFFF;
  --map-cluster-ink: #352C47;
  --map-geofence: #8D51D1;
  --map-geofence-wash: rgba(141, 81, 209, 0.13);
  --map-self: #A3E635;
  --map-land: #EFEDEA;
  --map-water: #A6D8F0;
  --map-park: #C3E7C8;
  --map-commercial: #EFE3CB;
  --map-building: #DEDAD4;
  --map-road-casing: #BDB8B0;
  --map-road-other: #F4F2EF;
  --map-road-minor: #FAF9F7;
  --map-road-major: #FFFFFF;
  --map-road-highway: #FFFFFF;
  --map-boundary: #B0ABA3;
  --map-label-ink: #4A4640;
  --map-label-halo: #FFFFFF;
  --map-poi: #8A8177;
  --theme-mode: "light";
  --elev-resting: 0 1px 2px rgba(54, 44, 72, 0.10);
  --elev-raised: 0 8px 24px rgba(54, 44, 72, 0.12);
  --elev-overlay: 0 16px 40px rgba(54, 44, 72, 0.18);
  --glow-accent: 0 6px 16px -8px rgba(141, 81, 209, 0.38);
  --glow-danger: 0 6px 16px -8px rgba(196, 57, 58, 0.42);
  --border-width: 1px;
  --ring-focus: 0 0 0 2px var(--focus-ring-inner), 0 0 0 4px var(--focus-ring);
  --ring-overdue: inset 0 0 0 2px var(--overdue-ring);
  --ring-selected: inset 3px 0 0 0 var(--accent);
  --btn-primary-bg: var(--accent);
  --btn-primary-bg-hover: var(--accent-hover);
  --btn-primary-bg-pressed: var(--accent-pressed);
  --btn-primary-ink: var(--on-accent);
  --btn-primary-glow: var(--glow-accent);
  --btn-secondary-bg: var(--card-2);
  --btn-secondary-bg-hover: var(--surface-hover);
  --btn-secondary-ink: var(--text);
  --btn-secondary-border: var(--border-mark);
  --btn-ghost-ink: var(--accent-text);
  --btn-ghost-border: var(--border-mark);
  --btn-danger-bg: var(--danger);
  --btn-danger-bg-hover: var(--danger-hover);
  --btn-danger-bg-pressed: var(--danger-pressed);
  --btn-danger-ink: var(--on-danger);
  --btn-danger-glow: var(--glow-danger);
  --btn-disabled-bg: var(--accent-disabled);
  --btn-disabled-ink: var(--on-accent-disabled);
  --btn-height: var(--control-h);
  --btn-radius: var(--radius-control);
  --btn-pad-x: var(--pad-x);
  --checkbox-bg: var(--card-2);
  --checkbox-border: var(--border-strong);
  --checkbox-border-hover: var(--border-mark);
  --checkbox-checked-bg: var(--accent);
  --checkbox-checked-bg-hover: var(--accent-hover);
  --checkbox-checked-border: var(--accent);
  --checkbox-ink: var(--on-accent);
  --checkbox-disabled-bg: var(--accent-disabled);
  --checkbox-disabled-border: var(--border);
  --checkbox-disabled-ink: var(--on-accent-disabled);
  --checkbox-size: var(--check-size);
  --checkbox-radius: var(--radius-check);
  --checkbox-mark-width: var(--check-mark-width);
  --field-bg: var(--bg);
  --field-ink: var(--text);
  --field-placeholder: var(--text-muted);
  --field-border: var(--border-mark);
  --field-border-focus: var(--focus-ring);
  --field-label-ink: var(--text-secondary);
  --field-help-ink: var(--text-muted);
  --field-error-ink: var(--danger-text);
  --field-error-border: var(--danger-text);
  --field-disabled-bg: var(--accent-disabled);
  --field-disabled-ink: var(--on-accent-disabled);
  --field-height: var(--control-h);
  --field-radius: var(--radius-control);
  --field-pad-x: var(--pad-x);
  --field-pad-chevron: var(--pad-chevron);
  --table-head-bg: var(--panel);
  --table-head-ink: var(--text-secondary);
  --table-row-bg: var(--card);
  --table-row-bg-alt: var(--card-2);
  --table-row-bg-hover: var(--surface-hover);
  --table-row-bg-selected: var(--accent-subtle);
  --table-row-selected-bar: var(--accent);
  --table-border: var(--border);
  --table-ink: var(--text);
  --table-num-ink: var(--text);
  --card-bg: var(--card);
  --card-bg-raised: var(--card-2);
  --card-bg-hover: var(--surface-hover);
  --card-border: var(--border);
  --card-shadow: var(--elev-resting);
  --card-radius: var(--radius);
  --card-spine-width: var(--spine-width);
  --badge-radius: var(--radius-badge);
  --badge-font-size: var(--fs-label);
  --badge-font-weight: var(--fw-bold);
  --badge-tracking: var(--tracking-caps);
  --badge-success-bg: var(--success-wash);
  --badge-success-ink: var(--success-text);
  --badge-success-edge: var(--success-edge);
  --badge-warning-bg: var(--warning-wash);
  --badge-warning-ink: var(--warning-text);
  --badge-warning-edge: var(--warning-edge);
  --badge-danger-bg: var(--danger-wash);
  --badge-danger-ink: var(--danger-text);
  --badge-danger-edge: var(--danger-edge);
  --badge-info-bg: var(--info-wash);
  --badge-info-ink: var(--info-text);
  --badge-info-edge: var(--info-edge);
  --badge-rush-ink: var(--rush);
  --badge-rush-border: var(--rush);
  --badge-counter-radius: var(--radius-pill);
  --badge-counter-font-size: var(--fs-label);
  --badge-counter-min-width: var(--counter-min);
  --badge-counter-bg: var(--accent);
  --badge-counter-ink: var(--on-accent);
  --badge-counter-attention-bg: var(--danger);
  --badge-counter-attention-ink: var(--on-danger);
  --modal-bg: var(--card);
  --modal-border: var(--border-strong);
  --modal-shadow: var(--elev-overlay);
  --modal-scrim: var(--scrim);
  --modal-head-ink: var(--text);
  --modal-body-ink: var(--text-secondary);
  --modal-width: var(--modal);
  --modal-radius: var(--radius-lg);
  --toast-bg: var(--panel);
  --toast-border: var(--border-strong);
  --toast-shadow: var(--elev-overlay);
  --toast-ink: var(--text);
  --toast-success-edge: var(--success);
  --toast-warning-edge: var(--warning);
  --toast-danger-edge: var(--danger);
  --toast-info-edge: var(--info);
  --toast-duration: var(--dur-toast);
  --nav-bg: var(--panel);
  --nav-ink: var(--text-secondary);
  --nav-ink-active: var(--text);
  --nav-item-bg-hover: var(--surface-hover);
  --nav-item-bg-active: var(--accent-subtle);
  --nav-active-bar: var(--accent);
  --nav-border: var(--border);
  --nav-height: var(--topbar-h);
  --nav-width: var(--sidebar);
  --board-bg: var(--bg);
  --board-col-bg: var(--panel);
  --board-col-ink: var(--text-secondary);
  --board-card-bg: var(--card);
  --board-col-width: var(--board-col);
  --board-card-min-h: var(--card-min-h);
  --banner-offline-bg: var(--danger);
  --banner-offline-ink: var(--on-danger);
  --banner-stale-bg: var(--warning);
  --banner-stale-ink: var(--on-warning);
  --banner-approval-bg: var(--warning-wash);
  --banner-approval-ink: var(--warning-text);
  --banner-z: var(--z-banner);
  --empty-ink: var(--text-muted);
  --empty-icon-ink: var(--border-mark);
  --empty-action-ink: var(--accent-text);
  --chart-axis: var(--viz-axis);
  --chart-grid: var(--viz-grid);
  --chart-track: var(--viz-track);
  --chart-tooltip-bg: var(--viz-tooltip-bg);
  --chart-tooltip-border: var(--viz-tooltip-border);
  --chart-annotation: var(--viz-annotation);
  --chart-annotation-inner: var(--viz-annotation-inner);
  --pagination-item-ink: var(--text-secondary);
  --pagination-item-ink-active: var(--on-accent);
  --pagination-item-bg-active: var(--accent);
  --pagination-item-bg-hover: var(--surface-hover);
  --pagination-item-ink-disabled: var(--on-accent-disabled);
  --pagination-height: var(--control-h-sm);
  --pagination-radius: var(--radius-control);
  --avatar-bg: var(--panel);
  --avatar-ink: var(--text);
  --avatar-border: var(--border);
  --avatar-radius: var(--radius-pill);
  --avatar-size: var(--icon-lg);
  --lang-select-bg: var(--card-2);
  --lang-select-ink: var(--text);
  --lang-select-border: var(--border-mark);
  --lang-select-height: var(--control-h-sm);
  --lang-select-radius: var(--radius-control);
  --lang-select-pad-x: var(--pad-x);
  --lang-select-pad-chevron: var(--pad-chevron);
  --bell-ink: var(--text-secondary);
  --bell-ink-active: var(--text);
  --bell-counter-bg: var(--danger);
  --bell-counter-ink: var(--on-danger);
  --bell-size: var(--icon-md);
  --toolbar-gap: var(--space-2);
  --toolbar-control-h: var(--control-h-sm);
  --toolbar-radius: var(--radius-control);
  --toolbar-bg: var(--panel);
  --toolbar-border: var(--border);
  --accent-2: var(--accent-pressed);
  --accent-ink: var(--on-accent);
  --accent-soft: var(--accent-wash);
  --accent-glow: var(--accent-wash-strong);
  --muted: var(--text-muted);
  --lime: var(--viz-annotation);
  --lime-ink: var(--on-lime);
  --danger-deep: var(--danger-pressed);
  --error-text: var(--danger-text);
  --overdue: var(--overdue-ring);
  --shadow-1: var(--elev-resting);
  --shadow-2: var(--elev-raised);
  --speed: var(--dur-base);
  --fs-input: var(--fs-body);
}

/* High contrast on the dark base: muted rises to 7:1, borders double, washes promote to solid, glows off. */
[data-theme="hc"],
[data-theme="dark"][data-contrast="hc"] {
  --bg: #101013;
  --panel: #17171A;
  --card: #1E1E21;
  --card-2: #26262A;
  --card-3: #2F2E33;
  --border: #69686F;
  --border-strong: #54535A;
  --border-subtle: rgba(228, 227, 231, 0.06);
  --scrim: rgba(16, 16, 19, 0.72);
  --scrim-soft: rgba(16, 16, 19, 0.40);
  --inverse-chip: #EAE9ED;
  --on-inverse-chip: #504A5C;
  --border-mark: #69686F;
  --surface-hover: #2D2C31;
  --text: #E4E3E6;
  --text-secondary: #C9C7CE;
  --text-muted: #BABBC0;
  --accent: #8159DA;
  --on-accent: #FFFFFF;
  --accent-hover: #683CBC;
  --accent-pressed: #4B1397;
  --accent-subtle: #282040;
  --accent-text: #C1B0FF;
  --accent-disabled: #36343F;
  --on-accent-disabled: #7E7E83;
  --focus-ring: #B093E4;
  --focus-ring-inner: #101013;
  --accent-wash: rgba(129, 89, 218, 0.13);
  --accent-wash-strong: rgba(129, 89, 218, 0.28);
  --success: #1B8641;
  --success-text: #45A860;
  --on-success: #FFFFFF;
  --success-wash: #1B8641;
  --success-edge: rgba(27, 134, 65, 0.42);
  --warning: #986D15;
  --warning-text: #BA8E3E;
  --on-warning: #FFFFFF;
  --warning-wash: #986D15;
  --warning-edge: rgba(152, 109, 21, 0.42);
  --danger: #C84B48;
  --danger-text: #EE6D67;
  --on-danger: #FFFFFF;
  --danger-wash: #C84B48;
  --danger-edge: rgba(200, 75, 72, 0.42);
  --info: #198095;
  --info-text: #44A1B6;
  --on-info: #FFFFFF;
  --info-wash: #198095;
  --info-edge: rgba(25, 128, 149, 0.42);
  --danger-hover: #A92D2F;
  --danger-pressed: #820011;
  --rush: #CA6D1D;
  --overdue-ring: #EE6D67;
  --on-lime: #4B6138;
  --viz-cat-1: #A184E4;
  --viz-cat-2: #ED9C55;
  --viz-cat-3: #0D75A8;
  --viz-cat-4: #EAD070;
  --viz-cat-5: #048575;
  --viz-cat-6: #ED9AC1;
  --viz-cat-7: #A74F3F;
  --viz-cat-8: #9E9DA4;
  --viz-seq-1: #432D6F;
  --viz-seq-2: #644F94;
  --viz-seq-3: #8672BA;
  --viz-seq-4: #AB96E2;
  --viz-seq-5: #CFBFFE;
  --viz-div-1: #BE5A0A;
  --viz-div-2: #DE9A60;
  --viz-div-3: #9E9EA1;
  --viz-div-4: #6EACD7;
  --viz-div-5: #3970C2;
  --viz-annotation: #A3E635;
  --viz-annotation-inner: #101013;
  --viz-axis: #97979C;
  --viz-grid: rgba(228, 227, 231, 0.06);
  --viz-track: #26262A;
  --viz-tooltip-bg: #17171A;
  --viz-tooltip-border: #54535A;
  --map-route: #8159DA;
  --map-route-alt: #97979C;
  --map-cluster: #17171A;
  --map-cluster-ink: #E4E3E6;
  --map-geofence: #8159DA;
  --map-geofence-wash: rgba(129, 89, 218, 0.13);
  --map-self: #A3E635;
  --map-land: #050507;
  --map-water: #12263B;
  --map-park: #16301F;
  --map-commercial: #332D22;
  --map-building: #292930;
  --map-road-casing: #000000;
  --map-road-other: #2E2D36;
  --map-road-minor: #3C3B44;
  --map-road-major: #4B4A53;
  --map-road-highway: #5A5962;
  --map-boundary: #55535A;
  --map-label-ink: #BFBEC4;
  --map-label-halo: #101013;
  --map-poi: #8E877C;
  --theme-mode: "hc";
  --elev-resting: 0 1px 2px rgba(0, 0, 0, 0.45);
  --elev-raised: 0 8px 24px rgba(0, 0, 0, 0.45);
  --elev-overlay: 0 16px 40px rgba(0, 0, 0, 0.5);
  --glow-accent: none;
  --glow-danger: none;
  --border-width: 2px;
  --on-success-wash: #FFFFFF;
  --on-warning-wash: #FFFFFF;
  --on-danger-wash: #FFFFFF;
  --on-info-wash: #FFFFFF;
  --ring-focus: 0 0 0 2px var(--focus-ring-inner), 0 0 0 4px var(--focus-ring);
  --ring-overdue: inset 0 0 0 2px var(--overdue-ring);
  --ring-selected: inset 3px 0 0 0 var(--accent);
  --btn-primary-bg: var(--accent);
  --btn-primary-bg-hover: var(--accent-hover);
  --btn-primary-bg-pressed: var(--accent-pressed);
  --btn-primary-ink: var(--on-accent);
  --btn-primary-glow: var(--glow-accent);
  --btn-secondary-bg: var(--card-2);
  --btn-secondary-bg-hover: var(--surface-hover);
  --btn-secondary-ink: var(--text);
  --btn-secondary-border: var(--border-mark);
  --btn-ghost-ink: var(--accent-text);
  --btn-ghost-border: var(--border-mark);
  --btn-danger-bg: var(--danger);
  --btn-danger-bg-hover: var(--danger-hover);
  --btn-danger-bg-pressed: var(--danger-pressed);
  --btn-danger-ink: var(--on-danger);
  --btn-danger-glow: var(--glow-danger);
  --btn-disabled-bg: var(--accent-disabled);
  --btn-disabled-ink: var(--on-accent-disabled);
  --btn-height: var(--control-h);
  --btn-radius: var(--radius-control);
  --btn-pad-x: var(--pad-x);
  --checkbox-bg: var(--card-2);
  --checkbox-border: var(--border-strong);
  --checkbox-border-hover: var(--border-mark);
  --checkbox-checked-bg: var(--accent);
  --checkbox-checked-bg-hover: var(--accent-hover);
  --checkbox-checked-border: var(--accent);
  --checkbox-ink: var(--on-accent);
  --checkbox-disabled-bg: var(--accent-disabled);
  --checkbox-disabled-border: var(--border);
  --checkbox-disabled-ink: var(--on-accent-disabled);
  --checkbox-size: var(--check-size);
  --checkbox-radius: var(--radius-check);
  --checkbox-mark-width: var(--check-mark-width);
  --field-bg: var(--bg);
  --field-ink: var(--text);
  --field-placeholder: var(--text-muted);
  --field-border: var(--border-mark);
  --field-border-focus: var(--focus-ring);
  --field-label-ink: var(--text-secondary);
  --field-help-ink: var(--text-muted);
  --field-error-ink: var(--danger-text);
  --field-error-border: var(--danger-text);
  --field-disabled-bg: var(--accent-disabled);
  --field-disabled-ink: var(--on-accent-disabled);
  --field-height: var(--control-h);
  --field-radius: var(--radius-control);
  --field-pad-x: var(--pad-x);
  --field-pad-chevron: var(--pad-chevron);
  --table-head-bg: var(--panel);
  --table-head-ink: var(--text-secondary);
  --table-row-bg: var(--card);
  --table-row-bg-alt: var(--card-2);
  --table-row-bg-hover: var(--surface-hover);
  --table-row-bg-selected: var(--accent-subtle);
  --table-row-selected-bar: var(--accent);
  --table-border: var(--border);
  --table-ink: var(--text);
  --table-num-ink: var(--text);
  --card-bg: var(--card);
  --card-bg-raised: var(--card-2);
  --card-bg-hover: var(--surface-hover);
  --card-border: var(--border);
  --card-shadow: var(--elev-resting);
  --card-radius: var(--radius);
  --card-spine-width: var(--spine-width);
  --badge-radius: var(--radius-badge);
  --badge-font-size: var(--fs-label);
  --badge-font-weight: var(--fw-bold);
  --badge-tracking: var(--tracking-caps);
  --badge-success-bg: var(--success-wash);
  --badge-success-ink: var(--success-text);
  --badge-success-edge: var(--success-edge);
  --badge-warning-bg: var(--warning-wash);
  --badge-warning-ink: var(--warning-text);
  --badge-warning-edge: var(--warning-edge);
  --badge-danger-bg: var(--danger-wash);
  --badge-danger-ink: var(--danger-text);
  --badge-danger-edge: var(--danger-edge);
  --badge-info-bg: var(--info-wash);
  --badge-info-ink: var(--info-text);
  --badge-info-edge: var(--info-edge);
  --badge-rush-ink: var(--rush);
  --badge-rush-border: var(--rush);
  --badge-counter-radius: var(--radius-pill);
  --badge-counter-font-size: var(--fs-label);
  --badge-counter-min-width: var(--counter-min);
  --badge-counter-bg: var(--accent);
  --badge-counter-ink: var(--on-accent);
  --badge-counter-attention-bg: var(--danger);
  --badge-counter-attention-ink: var(--on-danger);
  --modal-bg: var(--card);
  --modal-border: var(--border-strong);
  --modal-shadow: var(--elev-overlay);
  --modal-scrim: var(--scrim);
  --modal-head-ink: var(--text);
  --modal-body-ink: var(--text-secondary);
  --modal-width: var(--modal);
  --modal-radius: var(--radius-lg);
  --toast-bg: var(--panel);
  --toast-border: var(--border-strong);
  --toast-shadow: var(--elev-overlay);
  --toast-ink: var(--text);
  --toast-success-edge: var(--success);
  --toast-warning-edge: var(--warning);
  --toast-danger-edge: var(--danger);
  --toast-info-edge: var(--info);
  --toast-duration: var(--dur-toast);
  --nav-bg: var(--panel);
  --nav-ink: var(--text-secondary);
  --nav-ink-active: var(--text);
  --nav-item-bg-hover: var(--surface-hover);
  --nav-item-bg-active: var(--accent-subtle);
  --nav-active-bar: var(--accent);
  --nav-border: var(--border);
  --nav-height: var(--topbar-h);
  --nav-width: var(--sidebar);
  --board-bg: var(--bg);
  --board-col-bg: var(--panel);
  --board-col-ink: var(--text-secondary);
  --board-card-bg: var(--card);
  --board-col-width: var(--board-col);
  --board-card-min-h: var(--card-min-h);
  --banner-offline-bg: var(--danger);
  --banner-offline-ink: var(--on-danger);
  --banner-stale-bg: var(--warning);
  --banner-stale-ink: var(--on-warning);
  --banner-approval-bg: var(--warning-wash);
  --banner-approval-ink: var(--warning-text);
  --banner-z: var(--z-banner);
  --empty-ink: var(--text-muted);
  --empty-icon-ink: var(--border-mark);
  --empty-action-ink: var(--accent-text);
  --chart-axis: var(--viz-axis);
  --chart-grid: var(--viz-grid);
  --chart-track: var(--viz-track);
  --chart-tooltip-bg: var(--viz-tooltip-bg);
  --chart-tooltip-border: var(--viz-tooltip-border);
  --chart-annotation: var(--viz-annotation);
  --chart-annotation-inner: var(--viz-annotation-inner);
  --pagination-item-ink: var(--text-secondary);
  --pagination-item-ink-active: var(--on-accent);
  --pagination-item-bg-active: var(--accent);
  --pagination-item-bg-hover: var(--surface-hover);
  --pagination-item-ink-disabled: var(--on-accent-disabled);
  --pagination-height: var(--control-h-sm);
  --pagination-radius: var(--radius-control);
  --avatar-bg: var(--panel);
  --avatar-ink: var(--text);
  --avatar-border: var(--border);
  --avatar-radius: var(--radius-pill);
  --avatar-size: var(--icon-lg);
  --lang-select-bg: var(--card-2);
  --lang-select-ink: var(--text);
  --lang-select-border: var(--border-mark);
  --lang-select-height: var(--control-h-sm);
  --lang-select-radius: var(--radius-control);
  --lang-select-pad-x: var(--pad-x);
  --lang-select-pad-chevron: var(--pad-chevron);
  --bell-ink: var(--text-secondary);
  --bell-ink-active: var(--text);
  --bell-counter-bg: var(--danger);
  --bell-counter-ink: var(--on-danger);
  --bell-size: var(--icon-md);
  --toolbar-gap: var(--space-2);
  --toolbar-control-h: var(--control-h-sm);
  --toolbar-radius: var(--radius-control);
  --toolbar-bg: var(--panel);
  --toolbar-border: var(--border);
  --accent-2: var(--accent-pressed);
  --accent-ink: var(--on-accent);
  --accent-soft: var(--accent-wash);
  --accent-glow: var(--accent-wash-strong);
  --muted: var(--text-muted);
  --lime: var(--viz-annotation);
  --lime-ink: var(--on-lime);
  --danger-deep: var(--danger-pressed);
  --error-text: var(--danger-text);
  --overdue: var(--overdue-ring);
  --shadow-1: var(--elev-resting);
  --shadow-2: var(--elev-raised);
  --speed: var(--dur-base);
  --fs-input: var(--fs-body);
}

/* High contrast on the light base. */
[data-theme="hc-light"],
[data-theme="light"][data-contrast="hc"] {
  --bg: #F8F6FB;
  --panel: #FFFFFF;
  --card: #FFFFFF;
  --card-2: #F1EFF5;
  --card-3: #E8E5EC;
  --border: #9892A1;
  --border-strong: #C5BFCE;
  --border-subtle: rgba(54, 44, 72, 0.08);
  --scrim: rgba(54, 44, 72, 0.45);
  --scrim-soft: rgba(54, 44, 72, 0.25);
  --inverse-chip: #362C48;
  --on-inverse-chip: #F8F6FB;
  --border-mark: #9892A1;
  --surface-hover: #EDEAF1;
  --text: #352C47;
  --text-secondary: #453C54;
  --text-muted: #4F485A;
  --accent: #8D51D1;
  --on-accent: #FFFFFF;
  --accent-hover: #7334B3;
  --accent-pressed: #54038F;
  --accent-subtle: #F1E8FE;
  --accent-text: #6727A4;
  --accent-disabled: #E8E5EC;
  --on-accent-disabled: #888194;
  --focus-ring: #8D51D1;
  --focus-ring-inner: #FFFFFF;
  --accent-wash: rgba(141, 81, 209, 0.13);
  --accent-wash-strong: rgba(141, 81, 209, 0.28);
  --success-wash: #1B8641;
  --success-text: #1F7E3F;
  --success: #1F7E3F;
  --success-edge-solid: #4DA665;
  --success-edge: rgba(77, 166, 101, 0.55);
  --on-success: #FFFFFF;
  --warning-wash: #986D15;
  --warning-text: #996307;
  --warning: #996307;
  --warning-edge-solid: #C28A3E;
  --warning-edge: rgba(194, 138, 62, 0.55);
  --on-warning: #FFFFFF;
  --danger-wash: #C84B48;
  --danger-text: #C4393A;
  --danger: #C4393A;
  --danger-edge-solid: #F56762;
  --danger-edge: rgba(245, 103, 98, 0.55);
  --on-danger: #FFFFFF;
  --info-wash: #198095;
  --info-text: #087792;
  --info: #087792;
  --info-edge-solid: #44A0BB;
  --info-edge: rgba(68, 160, 187, 0.55);
  --on-info: #FFFFFF;
  --danger-hover: #A51420;
  --danger-pressed: #74000E;
  --rush: #B4611A;
  --overdue-ring: #C4393A;
  --on-lime: #4B6138;
  --viz-cat-1: #705AB8;
  --viz-cat-2: #944B00;
  --viz-cat-3: #4996D0;
  --viz-cat-4: #5B4600;
  --viz-cat-5: #309C8A;
  --viz-cat-6: #8A436E;
  --viz-cat-7: #D77D62;
  --viz-cat-8: #6A6970;
  --viz-seq-1: #DFCDFF;
  --viz-seq-2: #B598E3;
  --viz-seq-3: #8672BB;
  --viz-seq-4: #62539A;
  --viz-seq-5: #453B70;
  --viz-div-1: #CE6924;
  --viz-div-2: #89470C;
  --viz-div-3: #606063;
  --viz-div-4: #176185;
  --viz-div-5: #5F8AE1;
  --viz-annotation: #A3E635;
  --viz-annotation-inner: #648000;
  --viz-axis: #6A6376;
  --viz-grid: rgba(54, 44, 72, 0.08);
  --viz-track: #F1EFF5;
  --viz-tooltip-bg: #FFFFFF;
  --viz-tooltip-border: #C5BFCE;
  --map-route: #8D51D1;
  --map-route-alt: #6A6376;
  --map-cluster: #FFFFFF;
  --map-cluster-ink: #352C47;
  --map-geofence: #8D51D1;
  --map-geofence-wash: rgba(141, 81, 209, 0.13);
  --map-self: #A3E635;
  --map-land: #EFEDEA;
  --map-water: #A6D8F0;
  --map-park: #C3E7C8;
  --map-commercial: #EFE3CB;
  --map-building: #DEDAD4;
  --map-road-casing: #9E9992;
  --map-road-other: #F4F2EF;
  --map-road-minor: #FAF9F7;
  --map-road-major: #FFFFFF;
  --map-road-highway: #FFFFFF;
  --map-boundary: #B0ABA3;
  --map-label-ink: #423E39;
  --map-label-halo: #FFFFFF;
  --map-poi: #8A8177;
  --theme-mode: "hc-light";
  --elev-resting: 0 1px 2px rgba(54, 44, 72, 0.10);
  --elev-raised: 0 8px 24px rgba(54, 44, 72, 0.12);
  --elev-overlay: 0 16px 40px rgba(54, 44, 72, 0.18);
  --glow-accent: none;
  --glow-danger: none;
  --border-width: 2px;
  --on-success-wash: #FFFFFF;
  --on-warning-wash: #FFFFFF;
  --on-danger-wash: #FFFFFF;
  --on-info-wash: #FFFFFF;
  --ring-focus: 0 0 0 2px var(--focus-ring-inner), 0 0 0 4px var(--focus-ring);
  --ring-overdue: inset 0 0 0 2px var(--overdue-ring);
  --ring-selected: inset 3px 0 0 0 var(--accent);
  --btn-primary-bg: var(--accent);
  --btn-primary-bg-hover: var(--accent-hover);
  --btn-primary-bg-pressed: var(--accent-pressed);
  --btn-primary-ink: var(--on-accent);
  --btn-primary-glow: var(--glow-accent);
  --btn-secondary-bg: var(--card-2);
  --btn-secondary-bg-hover: var(--surface-hover);
  --btn-secondary-ink: var(--text);
  --btn-secondary-border: var(--border-mark);
  --btn-ghost-ink: var(--accent-text);
  --btn-ghost-border: var(--border-mark);
  --btn-danger-bg: var(--danger);
  --btn-danger-bg-hover: var(--danger-hover);
  --btn-danger-bg-pressed: var(--danger-pressed);
  --btn-danger-ink: var(--on-danger);
  --btn-danger-glow: var(--glow-danger);
  --btn-disabled-bg: var(--accent-disabled);
  --btn-disabled-ink: var(--on-accent-disabled);
  --btn-height: var(--control-h);
  --btn-radius: var(--radius-control);
  --btn-pad-x: var(--pad-x);
  --checkbox-bg: var(--card-2);
  --checkbox-border: var(--border-strong);
  --checkbox-border-hover: var(--border-mark);
  --checkbox-checked-bg: var(--accent);
  --checkbox-checked-bg-hover: var(--accent-hover);
  --checkbox-checked-border: var(--accent);
  --checkbox-ink: var(--on-accent);
  --checkbox-disabled-bg: var(--accent-disabled);
  --checkbox-disabled-border: var(--border);
  --checkbox-disabled-ink: var(--on-accent-disabled);
  --checkbox-size: var(--check-size);
  --checkbox-radius: var(--radius-check);
  --checkbox-mark-width: var(--check-mark-width);
  --field-bg: var(--bg);
  --field-ink: var(--text);
  --field-placeholder: var(--text-muted);
  --field-border: var(--border-mark);
  --field-border-focus: var(--focus-ring);
  --field-label-ink: var(--text-secondary);
  --field-help-ink: var(--text-muted);
  --field-error-ink: var(--danger-text);
  --field-error-border: var(--danger-text);
  --field-disabled-bg: var(--accent-disabled);
  --field-disabled-ink: var(--on-accent-disabled);
  --field-height: var(--control-h);
  --field-radius: var(--radius-control);
  --field-pad-x: var(--pad-x);
  --field-pad-chevron: var(--pad-chevron);
  --table-head-bg: var(--panel);
  --table-head-ink: var(--text-secondary);
  --table-row-bg: var(--card);
  --table-row-bg-alt: var(--card-2);
  --table-row-bg-hover: var(--surface-hover);
  --table-row-bg-selected: var(--accent-subtle);
  --table-row-selected-bar: var(--accent);
  --table-border: var(--border);
  --table-ink: var(--text);
  --table-num-ink: var(--text);
  --card-bg: var(--card);
  --card-bg-raised: var(--card-2);
  --card-bg-hover: var(--surface-hover);
  --card-border: var(--border);
  --card-shadow: var(--elev-resting);
  --card-radius: var(--radius);
  --card-spine-width: var(--spine-width);
  --badge-radius: var(--radius-badge);
  --badge-font-size: var(--fs-label);
  --badge-font-weight: var(--fw-bold);
  --badge-tracking: var(--tracking-caps);
  --badge-success-bg: var(--success-wash);
  --badge-success-ink: var(--success-text);
  --badge-success-edge: var(--success-edge);
  --badge-warning-bg: var(--warning-wash);
  --badge-warning-ink: var(--warning-text);
  --badge-warning-edge: var(--warning-edge);
  --badge-danger-bg: var(--danger-wash);
  --badge-danger-ink: var(--danger-text);
  --badge-danger-edge: var(--danger-edge);
  --badge-info-bg: var(--info-wash);
  --badge-info-ink: var(--info-text);
  --badge-info-edge: var(--info-edge);
  --badge-rush-ink: var(--rush);
  --badge-rush-border: var(--rush);
  --badge-counter-radius: var(--radius-pill);
  --badge-counter-font-size: var(--fs-label);
  --badge-counter-min-width: var(--counter-min);
  --badge-counter-bg: var(--accent);
  --badge-counter-ink: var(--on-accent);
  --badge-counter-attention-bg: var(--danger);
  --badge-counter-attention-ink: var(--on-danger);
  --modal-bg: var(--card);
  --modal-border: var(--border-strong);
  --modal-shadow: var(--elev-overlay);
  --modal-scrim: var(--scrim);
  --modal-head-ink: var(--text);
  --modal-body-ink: var(--text-secondary);
  --modal-width: var(--modal);
  --modal-radius: var(--radius-lg);
  --toast-bg: var(--panel);
  --toast-border: var(--border-strong);
  --toast-shadow: var(--elev-overlay);
  --toast-ink: var(--text);
  --toast-success-edge: var(--success);
  --toast-warning-edge: var(--warning);
  --toast-danger-edge: var(--danger);
  --toast-info-edge: var(--info);
  --toast-duration: var(--dur-toast);
  --nav-bg: var(--panel);
  --nav-ink: var(--text-secondary);
  --nav-ink-active: var(--text);
  --nav-item-bg-hover: var(--surface-hover);
  --nav-item-bg-active: var(--accent-subtle);
  --nav-active-bar: var(--accent);
  --nav-border: var(--border);
  --nav-height: var(--topbar-h);
  --nav-width: var(--sidebar);
  --board-bg: var(--bg);
  --board-col-bg: var(--panel);
  --board-col-ink: var(--text-secondary);
  --board-card-bg: var(--card);
  --board-col-width: var(--board-col);
  --board-card-min-h: var(--card-min-h);
  --banner-offline-bg: var(--danger);
  --banner-offline-ink: var(--on-danger);
  --banner-stale-bg: var(--warning);
  --banner-stale-ink: var(--on-warning);
  --banner-approval-bg: var(--warning-wash);
  --banner-approval-ink: var(--warning-text);
  --banner-z: var(--z-banner);
  --empty-ink: var(--text-muted);
  --empty-icon-ink: var(--border-mark);
  --empty-action-ink: var(--accent-text);
  --chart-axis: var(--viz-axis);
  --chart-grid: var(--viz-grid);
  --chart-track: var(--viz-track);
  --chart-tooltip-bg: var(--viz-tooltip-bg);
  --chart-tooltip-border: var(--viz-tooltip-border);
  --chart-annotation: var(--viz-annotation);
  --chart-annotation-inner: var(--viz-annotation-inner);
  --pagination-item-ink: var(--text-secondary);
  --pagination-item-ink-active: var(--on-accent);
  --pagination-item-bg-active: var(--accent);
  --pagination-item-bg-hover: var(--surface-hover);
  --pagination-item-ink-disabled: var(--on-accent-disabled);
  --pagination-height: var(--control-h-sm);
  --pagination-radius: var(--radius-control);
  --avatar-bg: var(--panel);
  --avatar-ink: var(--text);
  --avatar-border: var(--border);
  --avatar-radius: var(--radius-pill);
  --avatar-size: var(--icon-lg);
  --lang-select-bg: var(--card-2);
  --lang-select-ink: var(--text);
  --lang-select-border: var(--border-mark);
  --lang-select-height: var(--control-h-sm);
  --lang-select-radius: var(--radius-control);
  --lang-select-pad-x: var(--pad-x);
  --lang-select-pad-chevron: var(--pad-chevron);
  --bell-ink: var(--text-secondary);
  --bell-ink-active: var(--text);
  --bell-counter-bg: var(--danger);
  --bell-counter-ink: var(--on-danger);
  --bell-size: var(--icon-md);
  --toolbar-gap: var(--space-2);
  --toolbar-control-h: var(--control-h-sm);
  --toolbar-radius: var(--radius-control);
  --toolbar-bg: var(--panel);
  --toolbar-border: var(--border);
  --accent-2: var(--accent-pressed);
  --accent-ink: var(--on-accent);
  --accent-soft: var(--accent-wash);
  --accent-glow: var(--accent-wash-strong);
  --muted: var(--text-muted);
  --lime: var(--viz-annotation);
  --lime-ink: var(--on-lime);
  --danger-deep: var(--danger-pressed);
  --error-text: var(--danger-text);
  --overdue: var(--overdue-ring);
  --shadow-1: var(--elev-resting);
  --shadow-2: var(--elev-raised);
  --speed: var(--dur-base);
  --fs-input: var(--fs-body);
}

/* Ambient night: ink relaxes 13:1 -> 8:1 and glows stop. Status, feedback and viz hues are untouched —
   a night shift must read the board exactly the same way (SPEC §12). */
[data-ambient="night"]:not([data-theme="light"]):not([data-theme="hc-light"]) {
  --text: #B4B4B6;
  --text-secondary: #9C9CA1;
  --text-muted: #97979C;
  --theme-mode: "night";
  --glow-accent: none;
  --glow-danger: none;
  --ring-focus: 0 0 0 2px var(--focus-ring-inner), 0 0 0 4px var(--focus-ring);
  --ring-overdue: inset 0 0 0 2px var(--overdue-ring);
  --ring-selected: inset 3px 0 0 0 var(--accent);
  --btn-primary-bg: var(--accent);
  --btn-primary-bg-hover: var(--accent-hover);
  --btn-primary-bg-pressed: var(--accent-pressed);
  --btn-primary-ink: var(--on-accent);
  --btn-primary-glow: var(--glow-accent);
  --btn-secondary-bg: var(--card-2);
  --btn-secondary-bg-hover: var(--surface-hover);
  --btn-secondary-ink: var(--text);
  --btn-secondary-border: var(--border-mark);
  --btn-ghost-ink: var(--accent-text);
  --btn-ghost-border: var(--border-mark);
  --btn-danger-bg: var(--danger);
  --btn-danger-bg-hover: var(--danger-hover);
  --btn-danger-bg-pressed: var(--danger-pressed);
  --btn-danger-ink: var(--on-danger);
  --btn-danger-glow: var(--glow-danger);
  --btn-disabled-bg: var(--accent-disabled);
  --btn-disabled-ink: var(--on-accent-disabled);
  --btn-height: var(--control-h);
  --btn-radius: var(--radius-control);
  --btn-pad-x: var(--pad-x);
  --checkbox-bg: var(--card-2);
  --checkbox-border: var(--border-strong);
  --checkbox-border-hover: var(--border-mark);
  --checkbox-checked-bg: var(--accent);
  --checkbox-checked-bg-hover: var(--accent-hover);
  --checkbox-checked-border: var(--accent);
  --checkbox-ink: var(--on-accent);
  --checkbox-disabled-bg: var(--accent-disabled);
  --checkbox-disabled-border: var(--border);
  --checkbox-disabled-ink: var(--on-accent-disabled);
  --checkbox-size: var(--check-size);
  --checkbox-radius: var(--radius-check);
  --checkbox-mark-width: var(--check-mark-width);
  --field-bg: var(--bg);
  --field-ink: var(--text);
  --field-placeholder: var(--text-muted);
  --field-border: var(--border-mark);
  --field-border-focus: var(--focus-ring);
  --field-label-ink: var(--text-secondary);
  --field-help-ink: var(--text-muted);
  --field-error-ink: var(--danger-text);
  --field-error-border: var(--danger-text);
  --field-disabled-bg: var(--accent-disabled);
  --field-disabled-ink: var(--on-accent-disabled);
  --field-height: var(--control-h);
  --field-radius: var(--radius-control);
  --field-pad-x: var(--pad-x);
  --field-pad-chevron: var(--pad-chevron);
  --table-head-bg: var(--panel);
  --table-head-ink: var(--text-secondary);
  --table-row-bg: var(--card);
  --table-row-bg-alt: var(--card-2);
  --table-row-bg-hover: var(--surface-hover);
  --table-row-bg-selected: var(--accent-subtle);
  --table-row-selected-bar: var(--accent);
  --table-border: var(--border);
  --table-ink: var(--text);
  --table-num-ink: var(--text);
  --card-bg: var(--card);
  --card-bg-raised: var(--card-2);
  --card-bg-hover: var(--surface-hover);
  --card-border: var(--border);
  --card-shadow: var(--elev-resting);
  --card-radius: var(--radius);
  --card-spine-width: var(--spine-width);
  --badge-radius: var(--radius-badge);
  --badge-font-size: var(--fs-label);
  --badge-font-weight: var(--fw-bold);
  --badge-tracking: var(--tracking-caps);
  --badge-success-bg: var(--success-wash);
  --badge-success-ink: var(--success-text);
  --badge-success-edge: var(--success-edge);
  --badge-warning-bg: var(--warning-wash);
  --badge-warning-ink: var(--warning-text);
  --badge-warning-edge: var(--warning-edge);
  --badge-danger-bg: var(--danger-wash);
  --badge-danger-ink: var(--danger-text);
  --badge-danger-edge: var(--danger-edge);
  --badge-info-bg: var(--info-wash);
  --badge-info-ink: var(--info-text);
  --badge-info-edge: var(--info-edge);
  --badge-rush-ink: var(--rush);
  --badge-rush-border: var(--rush);
  --badge-counter-radius: var(--radius-pill);
  --badge-counter-font-size: var(--fs-label);
  --badge-counter-min-width: var(--counter-min);
  --badge-counter-bg: var(--accent);
  --badge-counter-ink: var(--on-accent);
  --badge-counter-attention-bg: var(--danger);
  --badge-counter-attention-ink: var(--on-danger);
  --modal-bg: var(--card);
  --modal-border: var(--border-strong);
  --modal-shadow: var(--elev-overlay);
  --modal-scrim: var(--scrim);
  --modal-head-ink: var(--text);
  --modal-body-ink: var(--text-secondary);
  --modal-width: var(--modal);
  --modal-radius: var(--radius-lg);
  --toast-bg: var(--panel);
  --toast-border: var(--border-strong);
  --toast-shadow: var(--elev-overlay);
  --toast-ink: var(--text);
  --toast-success-edge: var(--success);
  --toast-warning-edge: var(--warning);
  --toast-danger-edge: var(--danger);
  --toast-info-edge: var(--info);
  --toast-duration: var(--dur-toast);
  --nav-bg: var(--panel);
  --nav-ink: var(--text-secondary);
  --nav-ink-active: var(--text);
  --nav-item-bg-hover: var(--surface-hover);
  --nav-item-bg-active: var(--accent-subtle);
  --nav-active-bar: var(--accent);
  --nav-border: var(--border);
  --nav-height: var(--topbar-h);
  --nav-width: var(--sidebar);
  --board-bg: var(--bg);
  --board-col-bg: var(--panel);
  --board-col-ink: var(--text-secondary);
  --board-card-bg: var(--card);
  --board-col-width: var(--board-col);
  --board-card-min-h: var(--card-min-h);
  --banner-offline-bg: var(--danger);
  --banner-offline-ink: var(--on-danger);
  --banner-stale-bg: var(--warning);
  --banner-stale-ink: var(--on-warning);
  --banner-approval-bg: var(--warning-wash);
  --banner-approval-ink: var(--warning-text);
  --banner-z: var(--z-banner);
  --empty-ink: var(--text-muted);
  --empty-icon-ink: var(--border-mark);
  --empty-action-ink: var(--accent-text);
  --chart-axis: var(--viz-axis);
  --chart-grid: var(--viz-grid);
  --chart-track: var(--viz-track);
  --chart-tooltip-bg: var(--viz-tooltip-bg);
  --chart-tooltip-border: var(--viz-tooltip-border);
  --chart-annotation: var(--viz-annotation);
  --chart-annotation-inner: var(--viz-annotation-inner);
  --pagination-item-ink: var(--text-secondary);
  --pagination-item-ink-active: var(--on-accent);
  --pagination-item-bg-active: var(--accent);
  --pagination-item-bg-hover: var(--surface-hover);
  --pagination-item-ink-disabled: var(--on-accent-disabled);
  --pagination-height: var(--control-h-sm);
  --pagination-radius: var(--radius-control);
  --avatar-bg: var(--panel);
  --avatar-ink: var(--text);
  --avatar-border: var(--border);
  --avatar-radius: var(--radius-pill);
  --avatar-size: var(--icon-lg);
  --lang-select-bg: var(--card-2);
  --lang-select-ink: var(--text);
  --lang-select-border: var(--border-mark);
  --lang-select-height: var(--control-h-sm);
  --lang-select-radius: var(--radius-control);
  --lang-select-pad-x: var(--pad-x);
  --lang-select-pad-chevron: var(--pad-chevron);
  --bell-ink: var(--text-secondary);
  --bell-ink-active: var(--text);
  --bell-counter-bg: var(--danger);
  --bell-counter-ink: var(--on-danger);
  --bell-size: var(--icon-md);
  --toolbar-gap: var(--space-2);
  --toolbar-control-h: var(--control-h-sm);
  --toolbar-radius: var(--radius-control);
  --toolbar-bg: var(--panel);
  --toolbar-border: var(--border);
  --accent-2: var(--accent-pressed);
  --accent-ink: var(--on-accent);
  --accent-soft: var(--accent-wash);
  --accent-glow: var(--accent-wash-strong);
  --muted: var(--text-muted);
  --lime: var(--viz-annotation);
  --lime-ink: var(--on-lime);
  --danger-deep: var(--danger-pressed);
  --error-text: var(--danger-text);
  --overdue: var(--overdue-ring);
  --shadow-1: var(--elev-resting);
  --shadow-2: var(--elev-raised);
  --speed: var(--dur-base);
  --fs-input: var(--fs-body);
}

/* Density (SPEC §10) — comfortable is the default. */
:root {
  --row-h: var(--row-comfortable);
  --action-min: 96px;
  --action-max: none;
  --badge-pad-y: 5px;
  --badge-pad-x: 12px;
  --order-card-min-h: 260px;
  --order-card-pad: 14px;
  --order-card-spine: 10px;
}

/* Compact = pointer-driven surfaces (admin shell). Never a gloved-hand surface. */
[data-density="compact"] {
  --row-h: var(--row-compact);
  --control-h-sm: 28px;
  --control-h: 36px;
  --control-h-lg: 40px;
  --control-h-touch: 44px;
  --action-max: 200px;
  --badge-pad-y: 3px;
  --badge-pad-x: 8px;
  --order-card-min-h: var(--card-min-h);
  --order-card-pad: 10px;
  --order-card-spine: var(--card-spine-width);
}

[data-density="touch"] {
  --row-h: var(--row-touch);
  --control-h: var(--control-h-touch);
}

/* Phone type remap (SPEC §9): display 26 -> 22, heading 22 -> 20. Body and below are
   already at their floor, and --fs-input stays >= 16px so iOS does not zoom the field. */
@media (max-width: 480px) {
  :root {
    --fs-display: 1.375rem;
    --fs-heading: 1.25rem;
  }
}

/* Reduced motion: rewrite the duration tokens themselves, so every consumer stops at once.
   Sheen and pulse animations are removed outright, not merely shortened. */
@media (prefers-reduced-motion: reduce) {
  :root {
    --dur-fast: 0ms;
    --dur-base: 0ms;
    --dur-slow: 0ms;
    --dur-pulse: 0ms;
    --dur-spin: 0ms;
    --dur-shimmer: 0ms;
    --dur-flash: 0ms;
    --dur-blink: 0ms;
  }
  *,
  *::before,
  *::after {
    animation-duration: 0ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0ms !important;
    scroll-behavior: auto !important;
  }
}

/* Print / thermal (SPEC §13). Monochrome — a status is its label and its glyph on paper. */
@media print {
  :root {
    --bg: #FFFFFF;
    --panel: #FFFFFF;
    --card: #FFFFFF;
    --card-2: #FFFFFF;
    --card-3: #FFFFFF;
    --text: #000000;
    --text-secondary: #000000;
    --text-muted: #000000;
    --border: #000000;
    --border-strong: #000000;
    --border-mark: #000000;
    --accent: #000000;
    --accent-text: #000000;
    --elev-resting: none;
    --elev-raised: none;
    --elev-overlay: none;
    --glow-accent: none;
    --glow-danger: none;
  }
  [class*="badge"],
  [class*="status"] {
    background: #FFFFFF !important;
    color: #000000 !important;
    border: 1pt solid #000000 !important;
  }
}
