/* =========================================================
   Hectre Design System — Type stack
   Loads Noto Sans / Display / Mono and applies semantic styles.
   Pair with tokens.css.

   Version:    2.514.0
   Released:   2026-09-24
   Status:     stable
   Owner:      Design

   Changelog
   ─────────
   2.514.0 · 2026-10-15 No type changes — version bump. Unit input as a segmented pill.
   2.513.0 · 2026-10-15 No type changes — version bump. New Unit input.
   2.512.0 · 2026-10-12 No type changes — version bump. English is the default language.
   2.511.0 · 2026-10-12 No type changes — version bump. Language list opens on click only.
   2.510.0 · 2026-10-12 No type changes — version bump. One name per language.
   2.509.0 · 2026-10-12 No type changes — version bump. Language flags + aligned filter.
   2.508.0 · 2026-10-12 No type changes — version bump. Language list: filter + scroll.
   2.507.0 · 2026-10-12 No type changes — version bump. Language row shows selected language only.
   2.506.0 · 2026-10-12 No type changes — version bump. Profile menu language select.
   2.505.0 · 2026-10-08 No type changes — version bump. Result state overlay:
                        no ghost placeholder; corner chips above the scrim.
   2.504.0 · 2026-10-08 No type changes — version bump. Multiple select stays one
                        line; overflow becomes a "+N" chip.
   2.503.0 · 2026-10-08 No type changes — version bump. Column chart .has-values:
                        values replace the tooltip at 880px+.
   2.502.0 · 2026-10-07 No type changes — version bump. Chip field: placeholder
                        goes with the first chip; field shrinks to 24px.
   2.501.0 · 2026-10-07 No type changes — version bump. Multi-select rules also
                        match aria-multiselectable or a Select all row.
   2.500.0 · 2026-10-07 No type changes — version bump. Multi-select Select all
                        fixes + AI build recipe.
   2.499.0 · 2026-10-07 No type changes — version bump. Select all: stronger rule
                        and a picked count.
   2.498.0 · 2026-10-07 No type changes — version bump. Chart sheen skips tooltip
                        hosts; cherry fills on petrol; grouped chart is a container.
   2.497.0 · 2026-10-07 No type changes — version bump. Grouped column chart on
                        the axis (Accuracy reports geometry).
   2.496.0 · 2026-10-07 No type changes — version bump. Column chart clean look
                        (.is-clean).
   2.495.0 · 2026-10-07 No type changes — version bump. Chart sheen on every
                        chart fill.
   2.494.0 · 2026-10-06 No type changes — version bump. Column bars: rounded
                        tops, inset bars, 3px grouped gap, baseline.
   2.493.0 · 2026-10-06 No type changes — version bump. Chart series reordered:
                        orange, mist, steel, petrol.
   2.492.0 · 2026-10-07 No type changes — version bump. Categorical charts: peak
                        value in ink, never orange.
   2.491.0 · 2026-10-07 No type changes — version bump. Data visualisation colour
                        foundation; series 5–6; cherry produce ramp.
   2.490.0 · 2026-10-07 No type changes — version bump. Chart palette: orange,
                        petrol, steel, mist (--chart-series-1…4); --acc-* deprecated.
   2.489.0 · 2026-10-06 No type changes — version bump. Detail chip popover: search,
                        clear selection, loading more; caret to the right edge.
   2.488.0 · 2026-10-06 No type changes — version bump. Detail chip text / number
                        editor; saving disables the whole editor.
   2.487.0 · 2026-10-06 No type changes — version bump. Option list saving state is
                        a plain disabled list; per-row pending spinner removed.
   2.486.0 · 2026-10-06 No type changes — version bump. Detail chip edit popover
                        with a saving state that disables the options.
   2.485.0 · 2026-10-05 No type changes — version bump. System audit: dead and
                        duplicate CSS removed, JSON export completed.
   2.484.0 · 2026-10-05 No type changes — version bump. Inline dropdown with a
                        saving state that locks the options.
   2.483.0 · 2026-10-05 No type changes — version bump. Disabled icon button +
                        no hover on disabled buttons; comment / card fixes.
   2.482.0 · 2026-10-05 No type changes — version bump. Long data tables scroll
                        with the page; only toolbar + header pin.
   2.481.0 · 2026-10-05 No type changes — version bump. .btn-xl retired.
   2.480.0 · 2026-10-05 No type changes — version bump. Select card: one
                        definition, tokens only, focus ring.
   2.479.0 · 2026-10-05 No type changes — version bump. .builder-section-heading
                        collision fixed (canvas label → .builder-grid-heading).
   2.478.0 · 2026-10-05 No type changes — version bump. --preview-scale moved into
                        the token layer (sync fix).
   2.477.0 · 2026-10-05 No type changes — version bump. Select flyout fix + spec,
                        distinct pressed states, buttons / forms docs audit.
   2.476.0 · 2026-10-05 No type changes — version bump. Buttons section audit,
                        Forms overview fixes, functional form demos.
   2.475.0 · 2026-10-05 No type changes — version bump. Brand tertiary button
                        (.btn-tertiary.is-accent).
   2.474.0 · 2026-10-05 No type changes — version bump. Button heights, outlines,
                        white + success primaries, icon-only modifier.
   2.473.0 · 2026-10-05 No type changes — version bump. Buttons and icon buttons:
                        emphasis x colour; destructive / functional / link retired.
   2.472.0 · 2026-10-05 No type changes — version bump. Size-band hover tooltips
                        in table rows.
   2.471.0 · 2026-10-05 No type changes — version bump. Grade cell keeps its pill
                        bar when hover tooltips are on.
   2.470.0 · 2026-10-05 No type changes — version bump. Report content card,
                        Numbered list, Report footer, Preview toolbar, Preview well.
   2.469.0 · 2026-10-05 No type changes — version bump. Visualisation clean-up
                        (dead links, token mirror, dead classes).
   2.468.0 · 2026-10-05 No type changes — version bump. Data table matched to the
                        Arc list: 78px rows, frame + scroll, new cell atoms.
   2.467.0 · 2026-10-02 No type changes — version bump. Growers Report
                        intake (report header, note card, tenant lockup).
   2.466.0 · 2026-10-02 No type changes — version bump. General
                        .btn.s-loading (incl. .btn-danger).
   2.465.0 · 2026-09-30 No type changes — version bump. Page padding
                        32px 32px 48px.
   2.464.0 · 2026-09-30 New type style: .page-description-dashboard (body 15px,
                        --ink-2, max 68ch) under the page title. Petrol rules for
                        .page-title-dashboard and the description.
   2.463.0 · 2026-09-30 No type changes — version bump. Page padding
                        reduced to two tokens.
   2.462.0 · 2026-09-30 No type changes — version bump. Header aligned
                        to the page margin.
   2.461.0 · 2026-09-30 No type changes — version bump. Header gutter
                        confirmed as chrome.
   2.460.0 · 2026-09-30 No type changes — version bump. Page padding
                        classes.
   2.459.0 · 2026-09-30 No type changes — version bump. Page padding
                        tokens (--page-padding-*).
   2.458.0 · 2026-09-30 No type changes — version bump. Single date picker
                        month / year flyouts.
   2.457.0 · 2026-09-30 No type changes — version bump. Simple date picker
                        merged into Single date picker.
   2.456.0 · 2026-09-30 No type changes — version bump. Duplicate petrol
                        placeholder rule removed.
   2.455.0 · 2026-09-30 No type changes — version bump. Range slider fill.
   2.454.0 · 2026-09-30 No type changes — version bump. Checkboxes 14px,
                        1px tick.
   2.453.0 · 2026-09-30 No type changes — version bump. Text links never
                        underlined (enforced in components.css).
   2.452.0 · 2026-09-30 No type changes — version bump. Petrol text input
                        shipped in components.css; disabled clear button.
   2.451.0 · 2026-09-25 No type changes — version bump. Token order fix; locked
                        select text centred; multi clear clears the toggle.
   2.450.0 · 2026-09-25 No type changes — version bump. FormInput clear button
                        sits at the input edge; clearable works with chips.
   2.449.0 · 2026-09-25 No type changes — version bump. FormSelect search keeps
                        focus while typing.
   2.448.0 · 2026-09-25 No type changes — version bump. Pseudo-element icons
                        (ticks, checkbox marks, lock) are SVG masks, not icon-font
                        ligatures.
   2.447.0 · 2026-09-25 No type changes — version bump. FormSelect: one clear
                        control, no toolbar pill, sizes fixed at 32/40/48px.
   2.446.0 · 2026-09-25 No type changes — version bump. Atoms, Components and
                        Modules split into categories; token chapters move to
                        Foundations.
   2.445.0 · 2026-09-25 No type changes — version bump. Atoms gain a Data
                        visualisation category holding every chart piece.
   2.444.0 · 2026-09-25 No type changes — version bump. Navigation: Color moved to
                        Foundations; new Buttons group (Core / Specialised / Toolbar).
   2.443.0 · 2026-09-25 No type changes — version bump. Form components renamed:
                        FormInput, FormSelect, FilterSelect (display names only).
   2.442.0 · 2026-09-25 No type changes — version bump. Sidebar jump fix, two-word
                        display names, Select chapter reordered (base → variations →
                        combinations).
   2.441.0 · 2026-09-25 No type changes — version bump. Composable forms: Field shell,
                        Control box, Option list atoms; Select + Text input variations
                        as combinable modifiers; --control-height-* tokens.
   2.440.0 · 2026-09-25 No type changes — version bump. New Series tooltip atom
                        (hover a band to read every series).
   2.439.0 · 2026-09-25 No type changes — version bump. Date pickers grouped under
                        Date picker in the nav and on the page.
   2.438.0 · 2026-09-25 No type changes — version bump. New Simple date picker
                        (field + dates-only calendar).
   2.437.0 · 2026-09-25 No type changes — version bump. Visualisation regrouped: Forms
                        (5 categories) + Segmented control, Sliders, Filters, Modals
                        popovers & toasts, Chips & badges groups; Form fields split.
   2.436.0 · 2026-09-24 No type changes — version bump. New Single date picker
                        (components.css).
   2.435.0 · 2026-09-24 No type changes — version bump. Select-option tick is
                        now the Material Symbols check icon (components.css).
   2.434.0 · 2026-09-24 No type changes — version bump. New Chip select
                        component (components.css only).
   2.433.0 · 2026-09-22 No type changes — version bump. Result state clear-result
                        copy: "No defects found"; specimen column + panel title
                        "Defects" (wording in specimens + card only).
   2.432.0 · 2026-09-22 No type changes — version bump. New Column chart atom
                        (the detailed bar chart: y-axis, gridlines, printed
                        values, click-a-bar-to-filter) + --column-chart-h token.
   2.431.0 · 2026-09-22 No type changes — version bump. Column group gains
                        .is-grouped (grouped columns — several series per band
                        cell, accessory-palette fills, shared legend; folded in
                        from the Accuracy reports build).
   2.430.0 · 2026-09-18 No type changes — version bump. Tags gain the
                        surface-relative cap .is-fluid (component CSS only).
   2.429.0 · 2026-09-16 No type changes — version bump. Navigation search now
                        finds tokens (visualisation chrome only).
   2.428.0 · 2026-09-16 No type changes — version bump. Result state: Upload
                        pending corrected — "Scan upload pending", scans-only,
                        reason-free copy (wording + specimens only).
   2.427.0 · 2026-09-16 No type changes — version bump. Result state: Upload
                        pending shown in the card (panel) placement (specimens only).
   2.426.0 · 2026-09-16 No type changes — version bump. Result state gains the
                        eighth state, Upload pending (component CSS + docs only).
   2.425.0 · 2026-09-15 No type changes — version bump. Linked-chart empty
                        documented (filtered empty composed in a chart tile;
                        composition + copy only).
   2.424.0 · 2026-09-15 No type changes — version bump. Bento tile chrome
                        documented + pullable as its own Tile chrome card
                        (documentation only).
   2.423.0 · 2026-09-15 No type changes — version bump. Bento grid chrome made
                        hover-only and overlaying (.is-chrome-resting and the
                        bare tile's 110px header padding removed).
   2.422.0 · 2026-09-15 No type changes — version bump. Arc AI removed from the
                        dashboard navigation model (nav-core.jsx), Julie's
                        decision. Also fixed: the @version footer had stalled
                        at 2.420.0 while the header read 2.421.0.
   2.421.0 · 2026-09-14 No type changes — version bump. Split card recomposed on
                        flexbox with real per-half minimum widths (overlap fix;
                        no longer a fixed 50/50 split).
   2.420.0 · 2026-09-14 System bump (Split card: plain atom under Cards + empty
                        state) — no type changes.
   2.419.0 · 2026-09-14 System bump (Split card promoted to its own component —
                        frame shell + width-driven stacking) — no type changes.
   2.418.0 · 2026-09-14 System bump (Rows-per-page selector type harmonized —
                        button now matches its menu options; one body voice)
                        — no type changes.
   2.417.0 · 2026-09-14 System bump (Checkmark glyph atom — sub-chapter of Icons)
                        — no type changes.
   2.416.0 · 2026-09-11 System bump (Clear selection surfaced as a pullable
                        atom) — no type changes.
   2.415.0 · 2026-09-11 System bump (Bento grid audit: menu on every tile) — no
                        type changes.
   2.414.0 · 2026-09-11 System bump (Back button chapter cleanup) — no type
                        changes.
   2.413.0 · 2026-09-11 System bump (Back button alone in the header) — no type
                        changes.
   2.412.0 · 2026-09-11 System bump (Arc lockup SVG downloads) — no type
                        changes.
   2.411.0 · 2026-09-11 System bump (Bento fix: empty slot invisible at rest) —
                        no type changes.
   2.410.0 · 2026-09-11 System bump (Select field: Clear-selection footer) — no
                        type changes.
   2.409.0 · 2026-09-11 System bump (View settings: Size band order section) —
                        no type changes.
   2.408.0 · 2026-09-11 System bump (View settings matched to the shipped
                        flyout) — no type changes.
   2.407.0 · 2026-09-11 System bump (Date picker: "Last year" preset) — no type
                        changes.
   2.406.0 · 2026-09-11 System bump (Bento grid chrome hardening: bare tile,
                        resting chrome, empty slot) — no type changes.
   2.405.0 · 2026-09-11 System bump (View settings: segmented controls replace
                        the switch rows) — no type changes.
   2.404.0 · 2026-09-11 System bump (View settings: toggle rows replace option
                        buttons) — no type changes.
   2.403.0 · 2026-09-10 System bump (Split card adapts inside bento half tiles) —
                        no type changes.
   2.402.0 · 2026-09-10 System bump (Bento tile width menu; double-click removed)
                        — no type changes.
   2.401.0 · 2026-09-10 System bump (Bento responsive rules: 640px collapse, half
                        form restack, touch handle) — no type changes.
   2.400.0 · 2026-09-10 System bump (Bento grid resizing rules + gap-drop fix) — no
                        type changes.
   2.399.0 · 2026-09-10 System bump (Back button goes icon-only) — no type
                        changes.
   2.398.0 · 2026-09-08 System bump (Zoom control fit-button order fix) — no type
                        changes.
   2.397.0 · 2026-09-08 ALL fonts are prod-only now — the three local @font-face
                        rules (Noto Sans upright/italic + the Display alias) are
                        removed by decision; prod's base.css owns every family
                        and this file declares type STYLES only. Tokens keep the
                        family names + fallback stacks; the compiler's “no
                        @font-face” flags are accepted for all four families.
                        The visualisation + nav demo keep their own inline
                        fonts/ rules as doc-viewer chrome — never shipped.
   2.396.0 · 2026-09-08 No type changes — version bump. Filter toolbar gained the
                        View settings button (.toolbar-view-settings, order:4).
   2.395.0 · 2026-09-07 No type changes — version bump. Filter chip dropped its
                        selected-state glow shadow.
   2.394.0 · 2026-09-07 No rule changes here — the visualisation + nav demo dropped
                        their remaining Google Fonts links; both now rely on the
                        same fonts/ variable files this file declares.
   2.393.0 · 2026-09-07 No type changes — version bump. Buttons dropped the glow;
                        Date picker Apply flattened to the flat primary.
   2.392.0 · 2026-09-03 No type changes — version bump. View settings corrected:
                        it is its OWN flyout (new component), not a section of
                        Table settings; option-button rows replace the radio
                        rows for its settings.
   2.391.0 · 2026-09-03 No type changes — version bump. Menus & popovers gains
                        the radio menu row; Table settings ships as a new
                        component (synced from Dashboard / Assessments).
   2.390.0 · 2026-09-03 Documentation only — Julie confirmed Noto Sans Mono and
                        Material Symbols stay PROD-ONLY (no local files). The
                        compiler's two “no @font-face” flags for --font-mono /
                        --font-icon are ACCEPTED as permanent; tokens keep the
                        family names and fallback stacks render locally.
   2.389.0 · 2026-09-03 Fonts consolidated to the VARIABLE files only — the 16
                        static-weight @font-face rules (Noto Sans 400–900 +
                        italics, and the Noto Sans Display aliases) are removed;
                        two variable files now carry wght 100–900 upright +
                        italic, and Display aliases the same upright file. The
                        Google Fonts @import for Noto Sans Mono is removed from
                        this file (and Material Symbols from components.css):
                        locked-down customer networks only allow hectre.com, so
                        prod serves both from its own base.css.
   2.388.0 · 2026-09-03 No type changes — version bump. Zoom control: positioning
                        baked into the atom — bottom-right on any [data-stage].
   2.387.0 · 2026-09-02 No type changes — version bump. Dashboard shell: brand
                        block raised 60px → 66px to align with the header
                        hairline.
   2.386.0 · 2026-09-01 No type changes — version bump. Photo viewer: new
                        .is-modal presentation size (near-fullscreen over the
                        scrim), synced from the assessment detail pages.
   2.385.0 · 2026-08-31 No type changes — version bump. Dashboard navigation:
                        MyGrowers moved to sit directly above Admin (after
                        Maps) — order-only change in nav-core.jsx.
   2.384.0 · 2026-08-31 No type changes — version bump. Modal (dialog): explicit
                        rule — the top-right × (.modal-close) is mandatory on
                        every dialog, at the root and at every deeper step; a
                        footer Cancel never substitutes for it.
   2.383.0 · 2026-08-28 No type changes — version bump. Photo viewer zoom: the Zoom
                        control composes into the stage (live); magnifier glyphs;
                        fit joins the pill once zoomed.
   2.382.0 · 2026-08-28 No type changes — version bump. Locked-select hardening
                        (self-painted \e897 lock, ellipsising instruction);
                        .select-mini disabled parity; .field compact row;
                        new .icon-caption atom.
   2.381.0 · 2026-08-28 No type changes — version bump. Dashboard navigation model
                        synced (Scout and Spray removed; six items added).
   2.380.0 · 2026-08-28 No type changes — version bump. Searchable-select demo:
                        reserved 360px min-height removed (empty petrol slab).
   2.379.0 · 2026-08-28 No type changes — version bump. Selection-bar label sizing
                        fix (.sel-count flex:1 1 auto — sentence ellipsises, bar
                        keeps one line).
   2.378.0 · 2026-08-28 No type changes — version bump. Clean view narrowed to the
                        .spec rule tables; Selection bar Arc parity (sentence
                        label, radius-md); Breadcrumb primary orange on light;
                        Stacked bars · multiple chart recipe.
   2.377.0 · 2026-08-28 No type changes — version bump. Clean view: a sidebar
                        "Show descriptions" switch hides the documentation prose
                        so specimens read alone (visualisation chrome only).
   2.376.0 · 2026-08-28 No type changes — version bump. Locked-field instruction
                        shortened to fit one line; .select-mini.is-locked gains
                        a white-space:nowrap guard.
   2.375.0 · 2026-08-28 No type changes — version bump. Locked (dependent) field
                        state for pick controls (.select.is-locked /
                        .select-mini.is-locked): italic instruction + lock glyph
                        until the prerequisite filter is chosen.
   2.374.0 · 2026-08-27 No type changes — version bump. Waldo BI adoptions: six new
                        components (Floating action button, Report card, QR share,
                        Scan viewfinder, Share row, Pill tabs), the Builder canvas
                        module, Modal .is-wide and App header .app-header-note.
   2.373.0 · 2026-08-27 No type changes — version bump. New Photo pane component +
                        .split-card layout (bin-assessment full-width card: content
                        left, paged photos right, Photo viewer detail).
   2.372.0 · 2026-08-26 No type changes — version bump. Mobile-parity pass: App
                        date picker closed / open-drawer / in-between states;
                        Filter sheet absorbs Sort and records the search /
                        refresh mappings.
   2.371.0 · 2026-08-26 No type changes — version bump. New App component Filter
                        sheet: a Filters trigger with applied-count badge opening
                        a bottom-sheet drawer of filter groups, committed via
                        Clear all · Show N results.
   2.370.0 · 2026-08-26 No type changes — version bump. Brand guidelines merged: new
                        Arc lockup chapter (two sketches, naming rules), Placement
                        table under Logo, logo/tagline geometry reconciled (two-dot
                        clear space, 88px minimum, x-height tagline).
   2.369.0 · 2026-08-25 No type changes — version bump. Result state gains the seventh,
                        plan-gated state .is-not-included (neutral, feature-specific
                        "off" glyph, no action).
   2.368.0 · 2026-08-24 No type changes — version bump. Tags gain a truncation
                        rule (one line, 160px cap, .tag-label ellipsis for
                        unbounded values).
   2.367.0 · 2026-08-24 No type changes — version bump. Filter toolbar gains an
                        icon-only Refresh button (right-most in the tail; loading
                        + disabled states, light + petrol).
   2.366.0 · 2026-08-21 No type changes — version bump. New Scroll area atom
                        (themed overflow scrollbar, light + petrol); nav scrollbar
                        recomposed on it, horizontal axis pinned.
   2.365.0 · 2026-08-20 No type changes — version bump. Buttons: base .btn gains
                        justify-content:center (stretched buttons centre their label).
   2.364.0 · 2026-08-20 No type changes — version bump. Result state panel demos:
                        meta captions removed (demo dressing, not component parts).
   2.363.0 · 2026-08-20 No type changes — version bump. Result state: sixth neutral
                        state .is-none ("No defect data") from the defect cards.
   2.362.0 · 2026-08-20 Data table: 56px row height promoted to the default (was 44px); .roomy is
                         now a deprecated no-op alias; .compact unchanged. Type styles unchanged.
   2.361.0 · 2026-08-19 Dashboard-nav demo: Noto Sans/Display moved off Google Fonts onto the local
                         fonts/ files (13 gstatic subset URLs 404'd at bundle time). Mono stays on
                         Google — no local Mono yet. Type styles unchanged.
   2.360.0 · 2026-08-19 Data table: .roomy 56px row band for rows whose cells carry a column-group
                         chart. Type styles unchanged.
   2.359.0 · 2026-08-18 Selection bar: all controls anchor right (count carries margin-right:auto); compact
                         folds actions AND export behind the overflow menu. Type styles unchanged.
   2.358.0 · 2026-08-17 .surface-label: four instances on petrol were missing the .dark opt-in (2.21:1);
                         the variant now uses a token instead of opacity:0.7. Type styles unchanged.
   2.357.0 · 2026-08-17 Seven raw colour literals converted to tokens; three were AA failures the v2.356
                         token fix could not reach, being literals. Type unchanged.
   2.356.0 · 2026-08-17 --text-on-dark-muted raised 0.55 -> 0.68: at 0.55 it could not clear 4.5:1 on any
                         translucent fill over petrol. Type styles unchanged.
   2.355.0 · 2026-08-17 16 more rules stepped 0.55 -> 0.78 white: normal text on translucent petrol
                         fills measured 3.54-4.47:1. Disabled filter pill exempt. Type unchanged.
   2.354.0 · 2026-08-17 Petrol body text on translucent card fills (room card, card list, insight card)
                         stepped 0.55 -> 0.78 white: 4.29:1 was under 1.4.3. Type unchanged.
   2.353.0 · 2026-08-17 Petrol specimens added for the room card's no-capacity state (v2.352 shipped it
                         light-only). Naming baseline scope pinned. Type unchanged.
   2.352.0 · 2026-08-17 Room card gained a no-capacity-recorded treatment ("No capacity yet"). The
                         label steps up to --ink-2/600 — it is a prompt, not a statistic. Type unchanged.
   2.351.0 · 2026-08-17 .sel-overflow removed — a dead class matching no rule since the v2.347
                         refactor moved visibility onto its wrapper. Type unchanged.
   2.350.0 · 2026-08-17 Empty room card: .rc-unit added to the contrast step-up (3.07:1 on light), and
                         the petrol step-up raised to full white (4.46:1 was 0.04 short). Type unchanged.
   2.349.0 · 2026-08-17 Capacity-bar tones fixed on petrol (+ new --neutral-on-dark token); room-card
                         specimens given their real width. Type unchanged.
   2.348.0 · 2026-08-17 Room card and Card list moved their site/sub line off mono caps onto 12.5px
                         body — it reads as words, not machine metadata. No type styles changed.
   2.347.0 · 2026-08-17 Selection bar specimens escape the 532px content column, so the default state
                         is visible; .sel-overflow moved into .sel-overflow-wrap. Type unchanged.
   2.346.0 · 2026-08-17 Selection bar: tail pinned with margin-left:auto (a flex spacer broke on wrap),
                         compact rule moved to a @container query, .is-empty hides .sel-actions.
                         Type unchanged.
   2.345.0 · 2026-08-17 Selection bar: export pinned right in a new .sel-tail; the close icon-button
                         removed (a persistent bar has nothing to dismiss). Type unchanged.
   2.344.0 · 2026-08-17 --border-whisper and --ink-line added to the visualisation's inline token
                         mirror; the missing token was killing a border shorthand. Type unchanged.
   2.343.0 · 2026-08-17 Selection bar went persistent; .sel-action gained a focus ring and an
                         .is-primary emphasis step. Type unchanged.
   2.342.0 · 2026-08-17 Font tokens (--font-display / -body / -mono / -icon) documented as their own
                         reference under Typography, with the fallback stacks spelled out. Type unchanged.
   2.341.0 · 2026-08-14 One name for the icon typeface: nav-core.jsx, the spec's §3.15 code
                         block and 78 preview cards stopped repeating the family literal.
2.340.0 · 2026-08-14 Icon atom reconciled: one .mdi base rule shared by components.css
                         and the visualisation (was two divergent copies); the --font-icon
                         comment no longer points here — the atom lives in components.css.
2.339.0 · 2026-08-14 Accessibility “Open items” register hidden (kept in source).
                        Type unchanged.
   2.338.0 · 2026-08-14 Room card owns its own size (flex:0 1 280px / max-width:280px);
                        the demo’s inline max-width is gone. Type unchanged.
   2.337.0 · 2026-08-13 Card list rows and Shortcut card go borderless too, matching
                        Room card and the base .card. Type unchanged.
   2.336.0 · 2026-08-13 Room card is borderless: soft --dp-shadow lift, --dp-shadow-hi on
                        hover, 2px accent ring when selected. Type unchanged.
   2.335.0 · 2026-08-13 Index: the per-element changelog filed this component's history
                        under "Process status" in 6 rows. The cl-name labels now read
                        "Result state"; entry prose is left as shipped.
   2.334.0 · 2026-08-13 Fix: the rename missed UPPERCASE occurrences — three CSS section
                        headers still read PROCESS STATUS — and had turned the v2.321
                        tombstone into "RESULT STATE — RETIRED", declaring the live classes
                        removed. Component header corrected to five states, four placements.
   2.333.0 · 2026-08-13 Rename: Process status is now Result state — .process-status →
                        .result-state, the six .ps-* parts spelled out, processStatusPulse →
                        resultStatePulse, every id and cross-link, the preview card and the
                        docs. No token changed. Entries below keep their original wording.
   2.332.0 · 2026-08-13 Fix: the unified processing glyph was invisible on the overlay
                        (3.08:1) — its colour had come from the deleted spinner rule, and
                        the overlay is not inside a .dark-surface. Now --text-on-dark-
                        secondary, the same on-dark neutral as Queued.
   2.331.0 · 2026-08-13 Unify: one processing glyph. The state was a blue spinner in
                        four placements and a neutral pulsing hourglass_top in a table cell.
                        It is the pulsing hourglass_top in neutral grey everywhere now;
                        process status no longer uses the spinner atom.
   2.330.0 · 2026-08-13 Reduction: Process status cut to one states table, the failure
                        reasons and three placements (table, block, card) plus the overlay.
                        Four overlapping tables and two loose rule paragraphs merged.
                        .is-failed is outlined again — FILL 1 removed (2.328 reversed).
   2.329.0 · 2026-08-13 Parity: the Process status preview card caught up with the
                        chapter — light table columns, a label on the block-on-petrol demo,
                        and a petrol pair for the five-states specimen.
   2.328.0 · 2026-08-13 Icon: .is-failed carries FILL 1 in every placement, not only in
                        a table cell — with unavailable also red, the filled error glyph
                        against the outlined no_photography one is the differentiator, and
                        it has to hold everywhere the two can appear.
   2.327.0 · 2026-08-13 Tone: .is-unavailable is RED, reversing 2.308's amber. The
                        product renders "No scans available" in the same red as Failed, so
                        the outlined no_photography glyph and the wording carry the
                        nothing-vs-broken difference instead of the tone.
   2.326.0 · 2026-08-13 Type: the process-status readout is one size — 11.5px label,
                        15px glyph, left-aligned. It was 13px inline and 11.5px in a table,
                        so a state changed size between a list and a table. Block, overlay
                        and card head pinned to their own scale rather than inheriting.
   2.325.0 · 2026-08-13 Parity: all four Process status placements now label their On
                        dark (petrol) pair, and the table placement's petrol demo is a real
                        data-table instead of a bare stack of .is-cell spans.
   2.324.0 · 2026-08-13 Audit: Process status re-cut as one list of states (five states,
                        what each carries, product naming, the canonical five failure
                        reasons, full/short wording) then three placements — table, block,
                        card — plus the overlay. Duplicate second in-table section removed.
   2.323.0 · 2026-08-13 Copy fix: 2.322 claimed the cell placement was the ONE table
                        placement. "In a table — where the result would have been" still
                        shows the same states in a data table at base size. Claim corrected;
                        reconciling the two sections is an open decision.
   2.322.0 · 2026-08-13 Fix: Process status had two sections claiming the same host.
                        The "Inline — inside a table or a list" section showed no table; it
                        is the five states at base size. Retitled and reframed as the
                        vocabulary specimen. No CSS change.
   2.321.0 · 2026-08-13 Merge: Result state retired into Process status. One concept
                        had two components, two vocabularies and two answers for "no scans
                        available" (red vs amber). Amber stands; .is-panel already carried
                        the centred treatment; the good absence is .is-complete.
   2.320.0 · 2026-08-13 Fix: comment hygiene across the CSS layer. Every comment now ends
                        with a line break before the next rule (no declaration or selector
                        shares a line after a comment close), and the .select disabled note
                        that sat inside its own selector was moved above the rule.
   2.319.0 · 2026-08-12 Fix: the 2.317 changelog entry quoted a literal comment-close
                            sequence in this file's header comment, which ENDED the header early
                            and left the following lines to be parsed as CSS. Reworded to
                            describe the sequence instead of quoting it. Never quote a
                            comment-close inside a CSS comment.
   2.318.0 · 2026-08-12 Fix: the .tag-pill tone variants ARE real — they live under their own
                            TAG VARIANTS header at lines 341-343 of the visualisation, ~60 lines
                            below the base rule, and 25 elements use them. 2.318 first deleted
                            them on a bad read, then restored them verbatim within the same
                            version. Stray markup after the closing html tag removed from the visualisation.
   2.317.0 · 2026-08-12 Fix: five section headers in components.css were missing the
                            closing slash of their comment, so each swallowed everything up
                            to the next close — the .tag-pill base rule and .tag-pill .mdi
                            among them. Headers terminated; the tag block restored at parity
                            with the living page.
   2.316.0 · 2026-08-11 Fix: on-dark logo/mark DOWNLOAD data-URIs still carried
                        #EA5D2E; corrected and all 8 downloads verified.
   2.315.0 · 2026-08-11 Accent audit: on-dark logo + mark dot corrected from #EA5D2E
                        to lifted #FF8A4D (SVGs and regenerated PNGs).
   2.314.0 · 2026-08-11 Fix: chapter kickers resequenced after the v2.313 removal
                        (10 → 12 gap closed; Resources is now 11).
   2.313.0 · 2026-08-11 Removed the stale "Still to build" note and the Composition
                        audit chapter; #gap-report links repointed.
   2.312.0 · 2026-08-11 Fix: unknown classes (.micro, .cell-strong) replaced with
                        real atoms; .field-msg/.range-list propagated inline.
   2.311.0 · 2026-08-11 Fix: --chart-grad-a/-b restored; the Graphs gradients had
                        been rendering black. Caught by the v2.310 sweep.
   2.310.0 · 2026-08-11 Filter bar: "Both" removed, predicate simplified, count
                        answers to both filters. Rule 13e silent-failure sweep.
   2.309.0 · 2026-08-11 Process status: product↔system state-name mapping table
                        added; the system’s five names are canonical.
   2.308.0 · 2026-08-11 Decision: "No scans available" stays amber, not red.
                        Nothing-vs-broken rule added to Process status.
   2.307.0 · 2026-08-11 Fix: the app empty state invented .empty-icon (no CSS);
                        now reuses the real .empty-art illustration block.
   2.306.0 · 2026-08-11 Mobile coverage audit closed: Pull to refresh, list-row
                        touch states, phone-width empty states.
   2.305.0 · 2026-08-11 Fix: --ease-in-out was undefined, silently killing the
                        .is-cell processing pulse; added to the token layer.
                        Element changelog re-ordered newest-first again.
   2.303.0 · 2026-08-11 Fix: element changelog re-sorted newest-first after the
                        v2.302 trim; missing v2.302 milestone row added.
   2.302.0 · 2026-08-11 Housekeeping: stale build artefacts removed; in-page
                        changelogs trimmed to 40 rows each (~336 KB off the page).
   2.301.0 · 2026-08-11 .input-wrap restored as an accepted alias of .select-wrap
                        (one declaration, two names).
   2.300.0 · 2026-08-11 Visualisation renders offscreen chapters lazily
                        (content-visibility) — layout cost collapses; parse unchanged.
   2.299.0 · 2026-08-11 Fix: 14 dead in-page anchors repointed (5 inside the App kit);
                        dead-anchor sweep added to the release routine.
   2.298.0 · 2026-08-11 Foundations slice: touch, breakpoint and safe-area tokens
                        (13 new) + the chapter documenting them; App components
                        now reference them instead of literals.
   2.297.0 · 2026-08-11 App kit index + counterpart cross-links + platform-pairing
                        rule — build for either surface without the two drifting.
   2.296.0 · 2026-08-11 App header title — 17px/700 display → 16px/600 body, centred;
                        search icon dropped from the header demo.
   2.295.0 · 2026-08-11 No type changes — version bump. Mobile coverage slice 2:
                        App header bar, App search, Swipe actions.
   2.294.0 · 2026-08-11 No type changes — version bump. Mobile coverage slice 1:
                        App form field, App select, App date picker, Action sheet.
   2.293.0 · 2026-08-11 No type changes — version bump. Platform became a first-class
                        facet on every @dsCard (platform="app|dashboard|both") and
                        platform-specific cards regrouped, so mobile is fetchable.
   2.292.0 · 2026-08-11 No type changes — version bump. Modal: edit-fields body
                        (.modal-field-grid) + .field-label.has-icon and
                        .help.has-icon documented from the Load-assessments edit popup.
   2.291.0 · 2026-08-10 No type changes — version bump. Process status gained the panel
              placement (haloed glyph, 15px grey label, centred note) and a canonical
              set of five failure reasons.
   2.290.0 · 2026-08-10 No type changes — version bump. @dsCard viewports raised to cover
              their content on the Callout card and Process status cards.
   2.289.0 · 2026-08-10 No type changes — version bump. Callout spotlight gained a glow.
   2.288.0 · 2026-08-10 No type changes — version bump. Process status labels now sit at
              one colour (--ink-2 / --text-on-dark-secondary); the icon carries the state.
   2.287.0 · 2026-08-10 No type changes — version bump. Process status gained a fifth
              state, .is-unavailable; "None found" documented as .is-complete relabelled.
   2.286.0 · 2026-08-10 No type changes — version bump. Column group gained a printed
              value on top of each bar: display 700 at --text-micro, tabular.
   2.285.0 · 2026-08-10 No type changes — version bump. Callout tour tip moved its step
              counter from .modal-sub to the mono .modal-eyebrow above the title.
   2.191.0 · 2026-08-04 No type changes — version bump. Date picker light demos split out of a shared
              wrapping row so the popover drop zone is empty at every width.
   2.190.0 · 2026-08-04 No type changes — version bump. Date picker demo row ordering restored so the
              popover stays inside its reserve; light range day-state contrast logged as an open item.
   2.189.0 · 2026-08-04 No type changes — version bump. Date picker gains an open specimen on light,
              matching petrol.
   2.188.0 · 2026-08-04 No type changes — version bump. New Accessibility chapter (Foundations) with
              an Open items register; the v2.187 #accessibility link now resolves.
   2.187.0 · 2026-08-04 No type changes — version bump. Corrected the 2.186 rationale and its
              contrast claim; light field-edge contrast logged as an open item.
   2.186.0 · 2026-08-04 No type changes — version bump. Filter toolbar search field is white on light.
   2.185.0 · 2026-08-03 No type changes — version bump. Repaired a duplicated/mis-escaped measure-frame
              rule that had disabled the filter toolbar's transition freeze.
   2.184.0 · 2026-08-03 No type changes — version bump. Filter toolbar overflow measurement rebuilt
              on natural offsetWidths; the measure frame now un-compresses the filter zone.
   2.183.0 · 2026-08-03 No type changes — version bump. Filter toolbar now genuinely re-fits on
              resize (measure frame + rAF-scheduled ResizeObserver); More panel overflow pinned.
   2.182.0 · 2026-08-03 No type changes — version bump. Filter toolbar: one-axis clipping so pill
              dropdowns are not cut off; measuring escape widened to [data-filter]; More panel capped.
   2.181.0 · 2026-08-03 No type changes — version bump. Eyebrow and Select cards restored to the
              Cards navigation; the .kicker comment header renamed from EYEBROW.
   2.180.0 · 2026-07-31 No type changes — version bump. Trend spark now shown on petrol as
              well as light (light + petrol parity).
   2.179.0 · 2026-07-31 No type changes — version bump. Comparison patterns: two contrast
              failures fixed (delta chip .is-bad, period select .is-on label).
   2.178.0 · 2026-07-31 No type changes — version bump. Comparison overlay withdrawn;
              Comparison patterns (columns + delta chip + range + spark) replaces it.
   2.177.0 · 2026-07-31 No type changes — version bump. Comparison overlay: reference band
              retinted to --chart-grade-3; remaining contrast shortfall documented.
   2.176.0 · 2026-07-31 No type changes — version bump. Comparison overlay redesigned:
              layered lighter-orange reference, caret target, no outlines or rules.
   2.175.0 · 2026-07-31 No type changes — version bump. Comparison overlay: .chart-tick-label
              gains .is-end so a high target label stays inside its chart.
   2.174.0 · 2026-07-31 No type changes — version bump. Comparison overlay: the reference
              outline gains a surface-coloured halo so it reads over the current fill.
   2.173.0 · 2026-07-31 No type changes — version bump. New Comparison overlay for charts
              (earlier timeframe / target), plus petrol fixes to the delta pills.
   2.172.0 · 2026-07-31 No type changes — version bump. Select field: open/focus/placeholder/
              error/disabled states restored to the inline sheet; petrol resting border
              raised to --border-on-dark-hover (clears 3:1).
   2.171.0 · 2026-07-31 No type changes — version bump. Select fields are never native:
              the .select trigger is a <button> + .select-panel listbox everywhere.
   2.170.0 · 2026-07-31 No type changes — version bump. Structure & findability audit:
              nav groups collapsible with counts, Collapse navigation demoted to a
              Dashboard-navigation sub-entry, card layer regrouped, 5 new cards.
   2.169.0 · 2026-07-31 No type changes — version bump. Menu flyout on petrol
              now sits on --petrol-deep; two-line cell rows more airy; overview-tile
              icon discs get on-dark accessory colours.
   2.168.0 · 2026-07-30 No type changes — version bump. Filter toolbar: required
                        .filter-toolbar-wrap (More panel was clipped) +
                        .filter-toolbar.is-measuring escape (pills could not return).
   2.167.0 · 2026-07-30 No type changes — version bump. Toast warning tone added to
                        components.css (was visualisation-only) and regrouped with
                        the other toast tones.
   2.166.0 · 2026-07-30 No type changes — version bump. Column label row
                        (.chart-column-label-row) + grade-bar tooltip layer
                        (.chart-grade-bar-layer); field-label font made explicit.
   2.165.0 · 2026-07-30 No type changes — version bump. 2.164 caret rules finally
                        propagated to components.css as well.
   2.164.0 · 2026-07-30 No type changes — version bump. .select .mdi caret colour
                        moved into the component; petrol was failing 1.4.11.
   2.163.0 · 2026-07-30 No type changes — version bump. New .select.has-caret
                        modifier for a trigger supplying its own chevron.
   2.162.0 · 2026-07-30 No type changes — version bump. .metric-tile tokenised;
                        Form fields card refiled from Brand to Components.
   2.161.0 · 2026-07-30 No type changes — version bump. Searchable select given the
                        peer h3.subhead heading treatment and a nav entry.
   2.160.0 · 2026-07-30 No type changes — version bump. Searchable select added;
                        .select-option.is-selected moved to --primary-press for AA.
   2.159.0 · 2026-07-30 No type changes — version bump. --dur-slow tagged
                        @kind other so the compiler classifies it.
   2.158.0 · 2026-07-30 No type changes — version bump. Motion scale gains --dur-slow
                        (320ms); it had been referenced by two atoms but never defined.
   2.157.0 · 2026-07-30 No type changes — version bump. Petrol control boundaries
                        raised to clear WCAG 1.4.11 (0.25 white measured 2.05:1).
   2.156.0 · 2026-07-30 No type changes — version bump. Filter-pill label colours on
                        petrol fixed (key/value had no on-dark override at all).
   2.155.0 · 2026-07-30 No type changes — version bump. Attribute-tooltip .is-terse
                        demo fixed (duplicate class attribute dropped the modifier).
   2.154.0 · 2026-07-30 Two cell-scale type pairings documented as atoms: the
                        Two-line cell (body 13/600 over mono 10/500 tracked 0.06em)
                        and the Label value row (body 13/500 label, mono 12.5/600
                        tabular-nums value). Both reuse existing type styles.
   2.153.0 · 2026-07-30 No type changes — version bump. Filter toolbar is now always
                        one line; overflowed filters move into the More panel.
   2.152.0 · 2026-07-30 No type changes — version bump. Sub-section version pills
                        are now stamped from DS_VERSION like chapter pills.
   2.151.0 · 2026-07-30 No type changes — version bump. Warm row hover scoped to
                        .data-table; documentation tables keep a neutral hover.
   2.150.0 · 2026-07-30 No type changes — version bump. Data-table row hover moves
                        from neutral grey to a warm accent whisper.
   2.149.0 · 2026-07-30 No type changes — version bump. .tooltip sets white-space:
                        normal so the bubble wraps inside a nowrap host.
   2.148.0 · 2026-07-28 Nav group headers move from mono/uppercase/10px caption type
                        to the nav-row body style (13px / 500 / 0 tracking / sentence
                        case). Mono uppercase is now .dashboard-section’s alone.
   2.147.0 · 2026-07-28 No type changes — version bump. Row states doc reconciled:
                        only the top-level row has no focus state; the sub-item and
                        group toggle keep their rings and document them.
   2.146.0 · 2026-07-28 No type changes — version bump. Dashboard-navigation rows
                        drop the :focus-visible state by request; five states now.
   2.145.0 · 2026-07-28 No type changes — version bump. Dashboard-navigation row
                        states are now documented per state (family/size/weight/
                        tracking); type is deliberately stable across states so a
                        row never reflows — only weight moves, 500 -> 600.
   2.144.0 · 2026-07-28 Icon atom MOVED to components.css, which now also @imports
                        the Material Symbols sheet. It had lived here only, so a
                        consumer loading tokens.css + components.css named a font
                        that was never fetched — every .mdi in every component
                        rendered as ligature text in the host font.
   2.143.0 · 2026-07-28 Icon atom hardening: .mdi falls back to the literal family
                        when --font-icon is absent, and .dashboard-nav-item .mdi
                        pins the family itself so a host reset cannot win on
                        specificity. The dashboard-nav tokens copy gained
                        --font-icon (it had been left out).
   2.142.0 · 2026-07-28 Text link is NEVER underlined — in any state, on any
                        surface. Colour carries the link; hover deepens it.
                        The prose-scoped underline added in 2.140/2.141 is gone.
   2.141.0 · 2026-07-28 Text link: the default underline is scoped to prose
                        containers (p / li / td / dd / blockquote / .lede / .prose)
                        plus .text-link. Applying it to every unclassed anchor
                        underlined navigation and metadata links too.
   2.140.0 · 2026-07-28 Text link is underlined BY DEFAULT (1px, --primary-press,
                        3px offset; 2px on hover). Colour alone was the only signal
                        that a run of prose was a link — WCAG 1.4.1. Hover now
                        deepens colour + thickens the rule instead of adding it.
   2.139.0 · 2026-07-28 No type changes — version bump. The Text link rules added
                        in 2.138 were mirrored into the visualisation’s inline style
                        (they had shipped here only, so the petrol demo failed AA).
   2.138.0 · 2026-07-28 Icon atom now ships here: the Material Symbols Outlined
                        @import + the .mdi base rule (was hand-rolled per page, so
                        consumers of styles.css got ligature text, not icons).
                        Link styling scoped to a:not([class]) + new .text-link, so a
                        classed anchor (nav row, card, RouterLink) is no longer given
                        link colour or a hover underline.
   2.137.0 · 2026-07-28 No type changes — version bump. Info tooltip documented
                        in the spec; it reuses the existing tooltip type style.
   2.136.0 · 2026-07-28 No type changes — version bump. Collapsible nav groups
                        reuse the mono caption style; rail tooltips reuse tooltip type.
   2.135.0 · 2026-07-28 No type changes — version bump. Navigation groups and
                        chapter order sorted alphabetically.
   2.134.0 · 2026-07-27 No type changes — version bump. Headline copy-link made
                        borderless to match the icon-only button atom.
   2.133.0 · 2026-07-27 No type changes — version bump. Sidebar search + filter
                        fixes are visualisation chrome only.
   2.132.0 · 2026-07-27 No type changes — version bump. "Collapse control" renamed
                        to "Collapse navigation" (display name only).
   2.131.0 · 2026-07-27 No type changes — version bump. New Info tooltip atom uses
                        body 12.5px/1.45 and resets inherited tracking/casing.
   2.130.0 · 2026-07-27 No type changes — version bump (closed popovers now
                        honour the hidden attribute).
   2.129.0 · 2026-07-27 No type changes — version bump. Data tables now sit on
                        a card surface (no outline, soft lift); table type unchanged.
   2.128.0 · 2026-07-27 No type changes — version bump. New Collapse navigation
                        component (the rail toggle below the dashboard nav):
                        12.5px body label, one rotating chevron, light + petrol.
   2.127.0 · 2026-07-27 No type changes — version bump. Dashboard nav: sidebar
                        icon + label colour promoted to named tokens (--nav-icon,
                        --nav-icon-active, --nav-label, --nav-section-caption)
                        so consumers can see icons are white on petrol.
   2.126.0 · 2026-07-24 No type changes — version bump. Dashboard nav: added
                        sidebar width tokens (--nav-width-expanded / -rail /
                        -drawer) and specified the sub-nav unfold + collapse-
                        button motion.
   2.125.0 · 2026-07-24 No type changes — version bump. Fix: component headline
                        copy-links now copy a durable project share URL (top-window,
                        ephemeral token stripped) + section hash, instead of the
                        sandbox preview URL.
   2.124.0 · 2026-07-24 No type changes — version bump. Fix: Slide-over primary
                        action hover on petrol now darkens the lifted orange
                        (--lifted-orange-press) instead of dropping to the light
                        --primary; added the --lifted-orange-press token.
   2.123.0 · 2026-07-24 No type changes — version bump. Dashboard navigation: added
                        a visible "Overflow scrollbar" demo + nav entry so the
                        optional .is-scrollable treatment is findable.
   2.122.0 · 2026-07-24 No type changes — version bump. Empty state "No access":
                        removed the Go-to-home button (Go back is the only action);
                        Dashboard navigation gains an optional themed scrollbar
                        (.dashboard-nav.is-scrollable / nav-scroll).
   2.121.0 · 2026-07-23 No type changes — version bump. Rulebook: component names\n                        two-words-minimum rule + completeness check adopted.\n   2.120.0 · 2026-07-23 No type changes — version bump. Profile menu: trigger open
                        state (.is-open) + super-admin tenant-switcher variant.
   2.119.0 · 2026-07-23 No type changes — version bump. Empty states: No access variant
                        gains a Go back button beside Go to home (.empty-actions row).
   2.118.0 · 2026-07-23 No type changes — version bump. Empty states: new No access /
                        permissions variant (403) with lock glyph + Go to home.
   2.117.0 · 2026-07-23 No type changes — version bump. Dashboard nav collapse labels
                        fade+slide in; rebuilt stale standalone + offline bundles.
   2.116.0 · 2026-07-22 No type changes — version bump. Fix: nav drift on tap — cancel
                        listeners attach after the tap settles; timer fallbacks + rAF.
   2.115.0 · 2026-07-22 No type changes — version bump. Fix: sidebar nav jump is now
                        synchronous (v2.114 rAF-gated it); rAF pin is post-reflow only.
   2.114.0 · 2026-07-22 No type changes — version bump. Fix: sidebar nav pins the tapped
                        target across post-jump reflow (per-frame re-assert ~1.4s).
   2.113.0 · 2026-07-22 No type changes — version bump. Fix: sidebar nav no longer jumps
                        to the wrong item — stale re-correction timers now cancelled per tap.
   2.112.0 · 2026-07-22 No type changes — version bump. Fix: cards on petrol now use a
                        petrol-deep fill (were white) — fixes white KPI/stat tiles on dark.
   2.111.0 · 2026-07-22 No type changes — version bump. Stat blocks reworked to the two
                        product patterns: KPI-card overview grid + new .stat-tile inset.
   2.110.0 · 2026-07-22 No type changes — version bump. Fix: sidebar menu links now
                        scroll reliably (re-correct after font/image reflow).
   2.109.0 · 2026-07-22 No type changes — version bump. Plain icon-only button is now
                        borderless + transparent (no outline/fill), hover-tint only.
   2.108.0 · 2026-07-22 No type changes — version bump. Fix: dark favicon dot now uses
                        lifted orange (#FF8A4D) per the accent-on-dark rule.
   2.107.0 · 2026-07-22 No type changes — version bump. Favicon subsection: removed the
                        <link> wiring snippet from the visualisation + card.
   2.106.0 · 2026-07-22 No type changes — version bump. Fix: favicon download links now
                        embed data-URIs (were relative asset paths that failed standalone).
   2.105.0 · 2026-07-22 No type changes — version bump. New brand favicon / app icon
                        (light + dark, SVG + PNG) and a new .spinner loading atom.
   2.104.0 · 2026-07-22 No type changes — version bump. Segmented control gained a size
                        scale (.is-small/.is-medium/.is-large) + leading-icon support.
   2.103.0 · 2026-07-22 No type changes — version bump. Buttons: default size gained an
                        explicit .btn-md class; state demos standardised on default size.
   2.102.0 · 2026-07-22 No type changes — version bump. Button size scale unified: new
                        .btn-xs + .btn-xl added to the shared scale, all tiers now apply
                        to .btn-white too.
   2.101.0 · 2026-07-22 No type changes — version bump. Visualisation: tints shown as a
                        quiet compact list (small chips + muted mono labels), secondary
                        to the core colour swatches. Token values unchanged.
   2.100.0 · 2026-07-22 No type changes — version bump. Token layer: added a 3-step
                        lifted-orange tint scale on petrol (soft/medium/strong) +
                        --tint-neutral-soft; existing 0.16 refs repointed to -medium.
   2.99.0 · 2026-07-22  No type changes — version bump. Modal: back-arrow header row
                        centre-aligned; the pullable card’s petrol demo now carries
                        .dark-surface so it renders the real on-dark (lifted-orange) theme.
   2.98.0 · 2026-07-22  No type changes — version bump. Modal polish + a11y: form
                        fields fixed, borderless header close/back, two-layer back-arrow
                        pattern, and the on-petrol success icon-button flips to a mint fill.
   2.97.0 · 2026-07-22  No type changes — version bump. Fix: Modal panel now uses one
                        uniform surface (white on light / petrol-deep + border on dark)
                        so header/footer no longer merge into the background.
   2.96.0 · 2026-07-21  No type changes — version bump. Rooms dialog coverage:
                        new Modal (centered dialog + destructive-confirm), destructive
                        .btn-danger, and semantic icon-only buttons (.is-success / .is-danger).
   2.95.0 · 2026-07-21  No type changes — version bump. Menus & popovers:
                        anatomy sort-list items align — icon column reserved for
                        all rows (no lone icon among icon-less items).
   2.94.0 · 2026-07-21  No type changes — version bump. Menus & popovers:
                        Menu item gained a disabled state (.menu-item.is-disabled).
   2.93.0 · 2026-07-21  No type changes — version bump. "Toasts" component
                        renamed "Toast notification" (name, nav, docs; class .toast kept).
   2.92.0 · 2026-07-21  No type changes — version bump. Profile menu identity
                        header gained an email line (name · email · role).
   2.91.0 · 2026-07-20  No type changes — version bump. Dashboard-nav items
                        brighten text + icon on hover (matches Arc).
   2.90.0 · 2026-07-20  No type changes — version bump. Dashboard-nav on-hover
                        text underline removed (matches Arc).
   2.89.0 · 2026-07-20  No type changes — version bump. Dashboard-nav hover
                        aligned to the Arc pattern (neutral white on petrol).
   2.88.0 · 2026-07-20  No type changes — version bump. Table hover/selected
                        states unified (neutral, tokenised); Profile-menu petrol
                        icon contrast + avatar-aligned icon column. WCAG AA.
   2.87.0 · 2026-07-17  No type changes — version bump. Profile menu promoted to
                        a standalone component; its CSS tokenised + focus rings
                        (light + petrol parity, WCAG AA).
   2.86.0 · 2026-07-17  No type changes — version bump. Slide-over colour + a11y
                        refresh: neutral record chip + petrol-aware grade / meter /
                        metric-tile classes (light + petrol parity, WCAG AA).
   2.85.0 · 2026-07-17  No type changes — version bump. New Slide-over component
                        (dashboard detail panel, ported from the Rooms assessment
                        drawer) + --scrim-petrol / --shadow-slide-over tokens.
   2.84.0 · 2026-07-17  No type changes — version bump. Consumability: every atom,
                        component & module is now a pullable @dsCard (28 new preview
                        cards, incl. the dashboard Date picker + app Time picker &
                        keypad); wheel/keypad CSS ported into components.css.
   2.70.0 · 2026-07-14  No type changes — version bump. Filter toolbar wrapped as a
                        card (matches the app filter bar) + More-filters overflow
                        button and Clear-all control; new --tint-lifted-soft token.
   2.69.0 · 2026-07-14  No type changes — version bump. Filter pill open state set
                        to accent-border-on-white (matches the app filter bar).
   2.68.0 · 2026-07-14  No type changes — version bump. Filter pill gained the
                        open = petrol state (mirrors the app filter bar); icon-only
                        button moved into the Buttons chapter.
   2.67.0 · 2026-07-14  No type changes — version bump. New Chip input component +
                        Icon-only button atom (matched to the Arc select bar's clear
                        ×); selection bar's clear is now that icon-button. Added
                        on-dark tint/border tokens; all new CSS is token-only.
   2.66.0 · 2026-07-14  No type changes — version bump. Full token sweep: component
                        CSS (components.css + the visualisation's inline styles) now
                        references --* tokens instead of hardcoded values. Added a
                        status-tint scale, on-dark status text colours, and strong
                        focus-ring tokens to the token layer.
   2.65.0 · 2026-07-14  No type changes — version bump. Badges: added the missing
                        .badge.is-info + new .badge.is-neutral (light + petrol) and a
                        .badge-icon sizing rule for non-Material icon glyphs.
   2.64.0 · 2026-07-14  No type changes — version bump. Date picker fix: raised the
                        demo container height so the open popover no longer overflows
                        onto the “Classes:” caption.
   2.63.0 · 2026-07-14  No type changes — version bump. Date picker: dropped the
                        preset radio icons, made the From/To footer fields functional
                        Input-atom inputs, and added a Dashboard platform badge.
   2.62.0 · 2026-07-14  No type changes — version bump. Date picker redesigned to
                        match the Arc dashboard date filter (radio-preset rail,
                        Monday-first calendar, From/To footer + Apply-range).
   2.61.0 · 2026-07-13  No type changes — version bump. Fix: logo SVG/PNG downloads
                        and Copy-page-link now work inside sandboxed previews
                        (Blob download; copy-link refuses the token preview URL).
   2.60.0 · 2026-07-13  No type changes — version bump. Alert banners chapter moved
                        to sit right after Toasts (matches nav; feedback items
                        grouped); “Graphs & data viz” renamed “data visualisation”.
   2.59.0 · 2026-07-13  No type changes — version bump. Hero reworked to a
                        full-width paper opener (no box, no grid, not petrol) —
                        soft warm-orange glow, big ink headline, orange dot.
   2.58.0 · 2026-07-13  No type changes — version bump. Hero made full-bleed:
                        removed the boxy rounded panel + shadow; petrol now
                        dissolves into paper at the bottom (infinity fade).
   2.57.0 · 2026-07-13  No type changes — version bump. Overview hero restyled as
                        a petrol showcase stage (animated orchard-glow gradient,
                        floating orange orb, big display type, palette strip);
                        respects prefers-reduced-motion.
   2.56.0 · 2026-07-13  No type changes — version bump. Removed the redundant
                        “Page title · dashboard” demo from Typography (covered
                        by the type ramp); .page-title-dashboard class retained.
   2.55.0 · 2026-07-13  No type changes — version bump. Download + Copy buttons
   2.54.0 · 2026-07-13  No type changes — version bump. Subhead descriptor chips
                        unified to the standard version-pill; removed the
                        redundant hero border line under the overview meta.
   2.53.0 · 2026-07-13  No type changes — version bump. Consistency pass: one
                        focus ring everywhere (3px primary 35% / lifted 35%),
                        toolbar-search border aligned to the 20% field standard,
                        focus rings added to filter-pill/toolbar-btn/select-mini;
                        rulebook updated 18%→35%.
   2.52.0 · 2026-07-13  No type changes — version bump. All dark placeholders
                        unified to white 0.78 via a catch-all rule (were a mix
                        of 0.45 and inherited grey).
   2.51.0 · 2026-07-13  No type changes — version bump. Dark search-field
                        placeholder was inheriting grey --ink-3; set to white 0.78
                        (existing help value) for AA on petrol.
   2.50.0 · 2026-07-13  No type changes — version bump. WCAG A/AA audit: darkened
                        --success-text (#059669→#047352) and --warning-text
                        (#D97706→#8A5200) so success/warning badge text meets AA.
   2.49.0 · 2026-07-13  No type changes — version bump. Help text on dark raised
                        0.55 → 0.78 white for WCAG-readable contrast on petrol.
   2.48.0 · 2026-07-13  No type changes — version bump. Headline pills aligned.
   2.47.0 · 2026-07-13  No type changes — version bump. Form-field label rule
                        audited: split into label-above (data entry) vs in-field
                        key (compact pick controls) use cases.
   2.46.0 · 2026-07-13  No type changes — version bump. Menu hover recoloured grey
                        → accent (all menus); added .menu-search header; filter
                        select open-state shows search + multi-select checkboxes.
   2.45.0 · 2026-07-13  No type changes — version bump. Filter select gains its
                        multi-select state (circular .fp-count badge) in the
                        atom doc, light + petrol.
   2.44.0 · 2026-07-13  No type changes — version bump. Filter select documented
                        as a Forms atom with its real states (default / open /
                        selected); removed the mislabelled compact-select demo.
   2.43.0 · 2026-07-13  No type changes — version bump. Compact Select
                        (.select-mini) documented with full functionality —
                        label-above, click-to-open, value swap + in-context grid.
   2.42.0 · 2026-07-13  No type changes — version bump. Gap report closed: the
                        nine flagged children documented bottom-up; composition
                        audit shows no open gaps.
   2.41.0 · 2026-07-13  No type changes — version bump. Full re-IA onto the
                        Atomic hierarchy: sidebar regrouped into Atoms /
                        Components / Modules; level pills on every chapter;
                        composition-model intro; per-chapter "Built from" lines;
                        gap report.
   2.40.0 · 2026-07-13  No type changes — version bump. Rows-per-page tick rule
                        made explicit (shown only for the active option); Forms
                        gains a documented Label & help-text rule (labels always
                        above the field).
   2.39.0 · 2026-07-13  No type changes — version bump (no-search-results graphic
                        redrawn as a clean magnifier).
   2.37.0 · 2026-07-13  No type changes — version bump. New empty state: no
                        search results (query echo + Clear search), light + dark.
   2.36.0 · 2026-07-13  No type changes — version bump. Filter toolbar updated to
                        match the Arc prototype (label+value pills, More-filters
                        popover, Sort·value); new Search field + Toggle/Switch
                        atoms in Forms, composed by the toolbar.
   2.35.0 · 2026-07-08  No type changes — version bump. Visualisation opener
                        renamed “The Design Orchard” (orchard metaphor); strap
                        reworked to match.
   2.34.0 · 2026-07-08  No type changes — version bump (new hero headline).
   2.28.0 · 2026-07-07  No type changes — version bump (buttons family + rulebook
                        + state matrix; tertiary neutral; .btn-link).
   2.27.0 · 2026-07-07  No type changes — version bump (primary flat; white
                        button = light action button).
   2.26.0 · 2026-07-07  No type changes — version bump (select cards borderless;
                        avatar, list row, stepper, status hero, bottom sheet,
                        wheel picker, keypad).
   2.25.0 · 2026-07-07  No type changes — version bump (platform/surface filter;
                        borderless cards; segmented, white button, bottom nav,
                        mobile toast, overview tiles).
   2.24.0 · 2026-07-07  No type changes — version bump (Tags reworked; live
                        signal recoloured orange → green).
   2.23.0 · 2026-07-06  No type changes — version bump (Download-HTML button now
                        saves via a Blob URL so it works in sandboxed iframes).
   2.22.0 · 2026-07-06  No type changes — version bump (on-petrol tagline lockup
                        dot recoloured to lifted-orange to match the accent).
   2.21.0 · 2026-07-06  No type changes — version bump (dashboard-nav brand mark
                        now follows the sidebar surface: on-light mark on the
                        light rail theme, on-dark mark on petrol themes).
   2.20.0 · 2026-07-03  No type changes — version bump (compact inline badge/tag
                        size + optional icon; selection-bar petrol default;
                        alert-banner petrol high-emphasis callout).
   2.8.0 · 2026-06-30   New type style: .page-title-dashboard (Display 700, 38px,
                        Arc page title). Type scale now responsive — display /
                        heading / stat / page-title sizes step down at the
                        900 and 540 breakpoints (tokens.css). Body stays fixed.
   2.7.0 · 2026-06-29   No type changes — version bump (priority numbered
                        eyebrow documented in the Eyebrow chapter).
   2.6.0 · 2026-06-29   No type changes — version bump (Eyebrow chapter
                        re-added; eyebrow CSS reconciled across files).
   2.5.0 · 2026-06-23   No type changes — version bump (viz → visualization).
   2.4.0 · 2026-06-23   No type changes — version bump (data-viz classes
                        de-abbreviated; accent-border-soft regrouped).
   2.3.0 · 2026-06-22   No type changes — version bump (data-viz rulebook added
                        to the Graphs chapter).
   2.2.0 · 2026-06-22   No type changes — version bump (date-picker dark a11y +
                        empty-state apple illustration).
   2.2.0 · 2026-06-22   Added --scrim semantic token (modal/overlay backdrop)
                        in tokens.css. No type changes.
   2.1.0 · 2026-06-22   No type changes — version bump only (dashboard data-app
                        components added to components.css).
   2.0.0 · 2026-06-04   Versioning unified across the system — every file and
                        component now ships under one version, stamped from a
                        single source (see CLAUDE.md). No type changes.
   1.4.0 · 2026-05-12   On-dark ramp documented in the system page; accent
                        roles for headline highlight (--primary on light,
                        --lifted-orange on dark). No file changes — semantic
                        classes already cover the cases.
   1.3.0 · 2026-04-28   Italic + extra-bold + black weights wired up for the
                        Display family. Variable-font fallback retained for
                        wght values not covered by static files.
   1.2.0 · 2026-03-18   Sentence-case rule baked into utility classes
                        (.eyebrow, .meta) — text-transform: uppercase only on
                        mono-uppercase labels, never on prose.
   1.1.0 · 2026-02-19   Stat numerals get `font-feature-settings:"tnum"` so
                        figures don't jiggle on hover.
   1.0.0 · 2026-01-22   Initial publication. Three families, three jobs.

   Versioning is single-sourced — the whole system ships under ONE version.
   To bump: change DS_VERSION in "Hectre Design System.html", then mirror it
   here (the @version line below + a changelog entry above). See CLAUDE.md.
   ========================================================= */
/* @version 2.432.0 */

/* NO FONTS ARE LOADED HERE — by decision, not omission (v2.389/2.390 for Noto
   Sans Mono + Material Symbols Outlined; extended to ALL families in v2.397):
   prod's base.css owns Noto Sans, Noto Sans Display, Noto Sans Mono and
   Material Symbols Outlined, because locked-down customer networks only allow
   hectre.com. This file declares type styles only. Tokens keep the family
   names, and a host without base.css renders the fallback stacks in
   --font-body / --font-display / --font-mono / the .mdi rule. The
   design-system compiler's “used but no @font-face” flags are accepted as
   permanent for all four families — never “fix” them by re-adding fonts or
   substituting families. The visualisation + nav demo load fonts/ files in
   their own inline <style> as doc-viewer chrome — never part of shipped CSS. */

html,
body {
  font-family: var(--font-body);
  font-size: var(--text-body-m);
  line-height: 1.5;
  color: var(--ink);
  background: var(--paper);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

/* ---------- Display & headings ---------- */
.display-xl {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: var(--text-display-xl);
  line-height: 0.96;
  letter-spacing: var(--tr-display-xl);
  color: var(--ink);
}
.display-l {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: var(--text-display-l);
  line-height: 1.02;
  letter-spacing: var(--tr-display-l);
  color: var(--ink);
}
.display-m {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: var(--text-display-m);
  line-height: 1.06;
  letter-spacing: var(--tr-display-m);
  color: var(--ink);
}
.display-s {
  font-family: var(--font-display);
  font-weight: 600;
  font-size: var(--text-display-s);
  line-height: 1.12;
  letter-spacing: var(--tr-display-s);
  color: var(--ink);
}

h1,
.h-l {
  font-family: var(--font-display);
  font-weight: 600;
  font-size: var(--text-h-l);
  line-height: 1.2;
  letter-spacing: var(--tr-h-l);
  color: inherit;
  margin: 0;
}
h2,
.h-m {
  font-family: var(--font-display);
  font-weight: 600;
  font-size: var(--text-h-m);
  line-height: 1.25;
  letter-spacing: var(--tr-h-m);
  color: inherit;
  margin: 0;
}
h3,
.h-s {
  font-family: var(--font-display);
  font-weight: 600;
  font-size: var(--text-h-s);
  line-height: 1.33;
  letter-spacing: var(--tr-h-m);
  color: inherit;
  margin: 0;
}

/* ---------- Page title · dashboard ----------
   The product page title (e.g. "Load assessments"). Display 700, responsive:
   38px desktop → 32px tablet → 26px phone (sizes step via --text-page-title). */
.page-title-dashboard {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: var(--text-page-title);
  line-height: 1;
  letter-spacing: var(--tr-page-title);
  color: var(--ink);
  margin: 0;
}
.dark-surface .page-title-dashboard {
  color: var(--text-on-dark);
}

/* ---------- Page description · dashboard ----------
   The line (or short paragraph) under the page title that says what the page is for.
   Sits with the title in .dashboard-content — the title is not a header-bar slot, so
   neither is this. Body 15px, --ink-2 (10.9:1 on white), 8px below the title, capped
   at 68ch so it never runs the full page width. Petrol: 78% white.
   App counterpart: .app-header-large-sub under the App large title. */
.page-description-dashboard {
  font-family: var(--font-body);
  font-size: var(--text-body-m);
  line-height: 1.5;
  color: var(--ink-2);
  max-width: 68ch;
  margin: var(--space-3) 0 0;
  text-wrap: pretty;
}
.dark-surface .page-description-dashboard {
  color: var(--text-on-dark-secondary);
}

/* ---------- Body ---------- */
p,
.body-m {
  font-family: var(--font-body);
  font-size: var(--text-body-m);
  line-height: 1.55;
  color: inherit;
  margin: 0;
}
.body-l {
  font-family: var(--font-body);
  font-size: var(--text-body-l);
  line-height: 1.55;
  color: var(--ink-2);
}
.body-s {
  font-family: var(--font-body);
  font-size: var(--text-body-s);
  line-height: 1.5;
  color: var(--ink-3);
}

/* ---------- Stat numerals ---------- */
.stat-xl {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: var(--text-stat-xl);
  line-height: 0.96;
  letter-spacing: var(--tr-display-l);
  font-variant-numeric: tabular-nums;
  color: var(--ink);
}
.stat-l {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: var(--text-stat-l);
  line-height: 1.02;
  letter-spacing: var(--tr-display-m);
  font-variant-numeric: tabular-nums;
  color: var(--ink);
}
.stat-m {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: var(--text-stat-m);
  line-height: 1.08;
  letter-spacing: var(--tr-display-s);
  font-variant-numeric: tabular-nums;
  color: var(--ink);
}
.stat-s {
  font-family: var(--font-display);
  font-weight: 600;
  font-size: var(--text-stat-s);
  line-height: 1.12;
  letter-spacing: var(--tr-display-s);
  font-variant-numeric: tabular-nums;
  color: var(--ink);
}

/* ---------- Mono labels ---------- */
.meta {
  font-family: var(--font-mono);
  font-size: var(--text-meta);
  font-weight: 500;
  letter-spacing: var(--tr-meta);
  text-transform: uppercase;
  color: var(--ink-3);
}
.micro {
  font-family: var(--font-mono);
  font-size: var(--text-micro);
  font-weight: 500;
  letter-spacing: var(--tr-micro);
  text-transform: uppercase;
  color: var(--ink-3);
}

/* ---------- Icon atom ----------
   Lives in components.css (with the components that use it), which also loads
   the Material Symbols typeface. Not duplicated here — see that file. */

/* ---------- Text link ----------
   Prose links. NEVER underlined — in any state, on any surface. The link reads
   as a link through accent colour, and deepens on hover/active. The element
   rule is scoped to UNCLASSED anchors so an anchor used as a component (a nav
   row, a card, a button, a framework RouterLink carrying its own class) is
   never given link colour; .text-link opts a classed prose link in.
   Note: colour is the only visual signal here, so keep link text descriptive
   and never rely on a link being noticed by colour alone in dense UI. */
a {
  text-decoration: none;
}
a:hover,
a:focus,
a:active {
  text-decoration: none;
}
a:not([class]),
.text-link {
  color: var(--primary);
}
a:not([class]):hover,
.text-link:hover {
  color: var(--primary-press);
}
a:not([class]):focus-visible,
.text-link:focus-visible {
  outline: 2px solid var(--primary);
  outline-offset: 2px;
  border-radius: var(--radius-xs);
}
.dark-surface a:not([class]),
.dark-surface .text-link {
  color: var(--lifted-orange);
}
.dark-surface a:not([class]):hover,
.dark-surface .text-link:hover {
  color: var(--lifted-orange);
}
.dark-surface a:not([class]):focus-visible,
.dark-surface .text-link:focus-visible {
  outline-color: var(--lifted-orange);
}

code,
kbd,
samp,
pre {
  font-family: var(--font-mono);
  font-size: 0.95em;
}

* {
  box-sizing: border-box;
}
