:root {
    --color-void: #050506;
    --color-deep: #0b0b0e;
    --color-raised: #131317;
    --color-hairline: #33291d;
    --color-phosphor: #f0a848;
    --color-phosphor-dim: #8a6430;
    --color-phosphor-ghost: #4a361c;
    --color-ochre: #c8863c;
    --color-signal-red: #d8452e;
    --color-starlight: #e8e4dc;

    --surface-desktop: var(--color-void);
    --surface-console: var(--color-deep);
    --surface-chrome: var(--color-raised);

    /* Declaring a flat rgba immediately above the color-mix so the boot scrim still darkens the sky on Android WebView below 111, where an unsupported color-mix would drop the declaration outright and leave the gate sitting on bare starfield */
    --surface-scrim: rgba(5, 5, 6, 0.35);
    --surface-scrim: color-mix(in srgb, var(--color-void) 35%, transparent);

    --border-hairline: var(--color-hairline);
    --border-focus: var(--color-phosphor);
    --ink-primary: var(--color-phosphor);
    --ink-label: var(--color-phosphor-dim);
    --ink-inert: var(--color-phosphor-ghost);
    --state-nominal: var(--color-phosphor);
    --state-caution: var(--color-ochre);
    --state-fault: var(--color-signal-red);
    --trace-signal: var(--color-phosphor);
    --trace-grid: var(--color-phosphor-ghost);
    --star-near: var(--color-starlight);
    --star-far: var(--color-phosphor-dim);

    /* Reaching for system faces rather than a webfont, since a station that paints its own starfield from a seed should not block first paint on a 60 KB download that only supplies letterforms */
    --face-label: ui-sans-serif, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
    --face-numeral: ui-monospace, "Cascadia Mono", "SF Mono", Consolas, "Liberation Mono", monospace;
    --size-micro: 9px;
    --size-label: 10px;
    --size-body: 12px;
    --size-readout: 16px;
    --size-rail: 11px;
    --tracking-label: 0.14em;
    --tracking-numeral: 0.02em;
    --leading-tight: 1.15;
    --leading-body: 1.5;
    --weight-label: 600;

    --rail-height: 28px;
    --gutter-width: 116px;
    --titlebar-height: 24px;
    --console-min-width: 240px;
    --console-min-height: 140px;
    --hairline-width: 1px;
    --radius-chrome: 2px;
    --grid-pitch: 32px;
    --pad-tight: 4px;
    --pad-base: 8px;
    --pad-wide: 16px;
    --gap-row: 6px;

    --dur-chrome: 140ms;
    --dur-boot: 520ms;
    --dur-sweep: 9s;
    --ease-chrome: cubic-bezier(0.2, 0, 0.2, 1);

    --layer-starfield: 0;
    --layer-console-base: 10;
    --layer-rail: 800;
    --layer-boot: 900;
}

/* Collapsing the durations at the token layer rather than in each rule, so any transition written in a later ship inherits the preference without the author having to remember it, since the infinite animations still need switching off by name in chrome.css where a zero-length animation set to repeat forever re-fires every frame instead of stopping */
@media (prefers-reduced-motion: reduce) {
    :root {
        --dur-chrome: 0ms;
        --dur-boot: 0ms;
        --dur-sweep: 0ms;
    }
}