:root{
/* Surfaces */
--surface-page:var(--ink-100);--surface-card:var(--white);--surface-sunken:var(--ink-050);--surface-raised:var(--white);
--surface-inverse:var(--ink-900);--surface-inverse-soft:var(--ink-800);--surface-hover:var(--ink-050);--surface-active:var(--ink-150);
--surface-selected:var(--amber-050);--surface-brand:var(--amber-400);--surface-brand-soft:var(--amber-100);
/* Text */
--text-primary:var(--ink-900);--text-secondary:var(--ink-600);--text-muted:var(--ink-500);--text-disabled:var(--ink-400);
--text-inverse:var(--white);--text-inverse-muted:var(--ink-300);--text-on-brand:var(--ink-950);
--text-link:var(--teal-700);--text-link-hover:var(--teal-800);--text-danger:var(--red-600);
/* Borders */
--border-subtle:var(--ink-150);--border-default:var(--ink-200);--border-strong-color:var(--ink-300);
--border-inverse:rgb(255 255 255 / .12);--border-brand:var(--amber-400);--focus-ring:var(--teal-600);
/* Brand actions */
--brand:var(--amber-400);--brand-hover:var(--amber-500);--brand-press:var(--amber-600);
--action-neutral:var(--ink-900);--action-neutral-hover:var(--ink-800);--action-neutral-press:var(--ink-950);
--action-danger:var(--red-600);--action-danger-hover:var(--red-700);
/* Trip & fleet status — the product's core colour language */
--status-parked-fg:var(--ink-700);--status-parked-bg:var(--ink-150);--status-parked-dot:var(--ink-500);
--status-boarding-fg:var(--amber-700);--status-boarding-bg:var(--amber-100);--status-boarding-dot:var(--amber-500);
--status-enroute-fg:var(--green-700);--status-enroute-bg:var(--green-100);--status-enroute-dot:var(--green-500);
--status-arrived-fg:var(--teal-700);--status-arrived-bg:var(--teal-100);--status-arrived-dot:var(--teal-500);
--status-delay-fg:var(--orange-700);--status-delay-bg:var(--orange-100);--status-delay-dot:var(--orange-600);
--status-emergency-fg:var(--red-700);--status-emergency-bg:var(--red-100);--status-emergency-dot:var(--red-600);
--status-emergency-bg-soft:var(--red-050); /* P4 — row ground for an emergency notification (list rows, not chips). Same precedent as --info-bg-soft */
--status-completed-fg:var(--ink-600);--status-completed-bg:var(--ink-150);--status-completed-dot:var(--ink-400);
/* Payment & condition */
--fee-paid-fg:var(--green-700);--fee-paid-bg:var(--green-100);--fee-unpaid-fg:var(--red-700);--fee-unpaid-bg:var(--red-100);
--fee-partial-fg:var(--orange-700);--fee-partial-bg:var(--orange-100);--fee-waived-fg:var(--ink-600);--fee-waived-bg:var(--ink-150);
/* Scopes. Violet = platform (Zeneon superadmin) chrome only. Org scope (above one
   branch, inside one customer) is SOLID blue-700 fills only; tinted blue stays the
   info semantic. Rule: a scope marker is never tinted, an info notice is never solid.
   The -soft pair is alpha-over-inverse for the sidebar (same precedent as
   --border-inverse) — derived from the palette, never inlined as rgb() literals. */
--scope-platform:var(--violet-600);--scope-platform-bg:var(--violet-100);
--scope-org:var(--blue-700);--scope-org-hover:var(--blue-600);--scope-org-on:var(--white);
--scope-org-soft:color-mix(in srgb,var(--blue-600) 18%,transparent);--scope-org-soft-border:color-mix(in srgb,var(--blue-100) 16%,transparent);
--info-fg:var(--blue-700);--info-bg:var(--blue-100);--info-bg-soft:var(--blue-050);
/* Map */
--map-route-line:var(--teal-600);--map-route-done:var(--ink-400);--map-bus-live:var(--green-500);--map-bus-parked:var(--ink-500);--map-geofence:rgb(18 160 168 / .14);
}
