/* Reading preferences load after company styles so explicit user choices win. */
:root {
    --font-scale: 1;
    --line-height: 1.6;
    --letter-spacing: 0;
    --word-spacing: 0;
    --para-spacing: 1em;
    --tap-min: 2.75rem;
}

html { font-size: calc(100% * var(--font-scale)); }
body {
    line-height: var(--line-height);
    letter-spacing: var(--letter-spacing);
    word-spacing: var(--word-spacing);
}
p + p, li + li { margin-block-start: var(--para-spacing); }
.timetable__row:nth-child(even) { background: var(--surface-soft); }

:root[data-spacing="wide"] {
    --line-height: 1.9;
    --letter-spacing: .12em;
    --word-spacing: .16em;
    --para-spacing: 2em;
}

:root[data-theme="light"] {
    color-scheme: light;
    --color-bg: #F3F6F2;
    --color-surface: #FFFFFF;
    --color-text: #14211A;
    --color-text-mute: #405047;
    --color-border: #CDD7CF;
    --color-link: #003D22;
    --color-accent: #005A32;
}
:root[data-theme="dark"] {
    color-scheme: dark;
    --color-bg: #10161c;
    --color-surface: #182029;
    --color-text: #e8eef4;
    --color-text-mute: #b5c3ce;
    --color-border: #607383;
    --color-link: #7fc4ff;
    --color-accent: #ffb454;
    --surface-soft: #202b35;
    --brand-soft: #243b32;
    --alert-bg: #351e20;
    --alert: #ffaaa3;
    --late: #ffc078;
    --on-time: #79dd98;
    --line-strong: #91a3b2;
}
:root[data-contrast="high"] {
    --color-bg: #fff;
    --color-surface: #fff;
    --color-text: #000;
    --color-text-mute: #000;
    --color-border: #000;
    --color-link: #000;
    --border-width: 2px;
}
:root[data-contrast="high"][data-theme="dark"] {
    --color-bg: #000;
    --color-surface: #000;
    --color-text: #fff;
    --color-text-mute: #fff;
    --color-border: #fff;
    --color-link: #ff0;
}
:root[data-contrast="high"] a,
:root[data-links="underlined"] a { text-decoration: underline; }

:root[data-motion="reduced"] *,
:root[data-motion="reduced"] *::before,
:root[data-motion="reduced"] *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    scroll-behavior: auto !important;
}

a.button, button, [role="button"], .stop-row a {
    min-height: var(--tap-min);
    min-width: var(--tap-min);
}

.a11y-trigger { display: none; }
.has-js .a11y-trigger {
    display: inline-flex;
    align-items: center;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-sm);
    background: var(--color-surface);
    color: var(--color-link);
    padding: .55rem .8rem;
    font: inherit;
    cursor: pointer;
}
.a11y-panel {
    margin-block: 1rem;
    padding: 1rem;
    border: var(--border-width) solid var(--color-border);
    border-radius: var(--radius);
    background: var(--color-surface);
    color: var(--color-text);
}
.a11y-panel[hidden] { display: none; }
.a11y-panel h2 { margin: 0 0 1rem; }
.a11y-panel__group { margin: 0; padding: .75rem 0; border: 0; border-top: 1px solid var(--color-border); }
.a11y-panel__group legend { padding: .75rem 0 0; font-weight: 700; }
.a11y-panel__options { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .35rem 1rem; }
.a11y-panel__options label { display: flex; align-items: center; gap: .45em; min-height: var(--tap-min); }
.a11y-panel__options input { inline-size: 1.25em; block-size: 1.25em; flex: 0 0 auto; }
.a11y-panel__actions { display: flex; flex-wrap: wrap; gap: .75rem; margin-top: .75rem; }
.a11y-panel__actions button {
    border: 1px solid var(--color-border);
    border-radius: var(--radius-sm);
    padding: .55rem .85rem;
    background: var(--color-surface);
    color: var(--color-text);
    font: inherit;
    cursor: pointer;
}
.a11y-close { font-weight: 700 !important; }

@media (max-width: 34rem) {
    .a11y-panel__options { grid-template-columns: 1fr; }
}

@media (prefers-reduced-motion: reduce) {
    :root:not([data-motion="full"]) *,
    :root:not([data-motion="full"]) *::before,
    :root:not([data-motion="full"]) *::after {
        animation-duration: .01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: .01ms !important;
        scroll-behavior: auto !important;
    }
}
@media (prefers-color-scheme: dark) {
    :root:not([data-theme]) {
        color-scheme: dark;
        --color-bg: #10161c;
        --color-surface: #182029;
        --color-text: #e8eef4;
        --color-text-mute: #b5c3ce;
        --color-border: #607383;
        --color-link: #7fc4ff;
        --color-accent: #ffb454;
        --surface-soft: #202b35;
        --brand-soft: #243b32;
        --alert-bg: #351e20;
        --alert: #ffaaa3;
        --late: #ffc078;
        --on-time: #79dd98;
        --line-strong: #91a3b2;
    }
}
@media (prefers-contrast: more) {
    :root:not([data-contrast]) {
        --color-text: #000;
        --color-text-mute: #000;
        --color-bg: #fff;
        --color-surface: #fff;
        --color-border: #000;
        --color-link: #000;
        --border-width: 2px;
    }
    :root:not([data-contrast]) a { text-decoration: underline; }
}
@media (forced-colors: active) {
    .route-card, .alert, .a11y-panel { border: 1px solid CanvasText; }
    .icon-button::before { forced-color-adjust: none; }
    :focus-visible { outline: 3px solid Highlight; outline-offset: 2px; }
}
