diff --git a/docs/ux/command-deck.md b/docs/ux/command-deck.md index d3cc091..c7474bb 100644 --- a/docs/ux/command-deck.md +++ b/docs/ux/command-deck.md @@ -66,7 +66,7 @@ never occluded, at every breakpoint. lead value** → support sections (full weight) → "More — N sections ▾" (collapsed-but-obvious, full contrast) → TOOLS. Deep tools open **inside this column** (master-detail) or shrink the stage — never as a `bottom:0 z12` sheet. -- **DOCK** (bottom, full width): the twilight gantt as its **own reserved row** at +- **DOCK** (bottom, full width): the time helix (the twilight strip — `TimeHelix.svelte`, née the twilight gantt; the row keeps its `.gantt` smoke contract) as its **own reserved row** at every breakpoint — so "X floats over the twilight strip" is structurally impossible. Deletes the ~120 lines of `--field-panel-*` math + `!important` overrides + the portrait clearance special-case. @@ -110,7 +110,7 @@ pre-fills the deep tool with `{lat,lon,et,lens,layers,boresight,horizon}` with z re-entry. Hover-to-**peek** (ephemeral), click-to-**pin** (commit + enable CTAs); value + its one CTA share one large target (Fitts). -- ◐ **Sky** "dark window here" — **≤1 click** (hover=0): inspector leads Bortle + tonight's dark-window inline; full gantt always in the DOCK. +- ◐ **Sky** "dark window here" — **≤1 click** (hover=0): inspector leads Bortle + tonight's dark-window inline; the full time helix always in the DOCK. - ☁ **Air** "AQI here" — **≤1 click**: smog field present on Air-lens entry; inspector leads driving pollutant + NowCast-labeled AQI; AQ summary docked in-inspector. - 📡 **Links** "link margin" — **≤2 clicks**: click → path-AOD→T→dB line; "Design a link" → boresight + Tx/Rx + loss breakdown expand *into* the inspector. - 🛰 **Orbit** "next pass" — **≤2 clicks**: next DEM-gated pass on pin regardless of lens; "Plan a pass" → polar az/el track + pass list expand in-inspector. diff --git a/src/app.css b/src/app.css index 8385c5c..afc6cab 100644 --- a/src/app.css +++ b/src/app.css @@ -88,12 +88,15 @@ html { html { --field-bottom-reserve: 8.75rem; --map-toolbar-inset-rem: 5rem; - /* The mobile twilight gantt is ~200px tall — taller than --field-bottom-reserve - (8.75rem ≈ 140px), so a tall readout-only state would dip ~60px into it - (TIN-1810). The readout-only portrait rule clears the gantt by anchoring its - bottom at this reserve instead; the gantt/attribution/toolbar keep - --field-bottom-reserve. Tuned against real-font render (the GF cell is - fontless so the overlap never shows in CI). */ + /* TIN-1810 (gantt era): the old mobile twilight gantt was ~200px tall — + taller than --field-bottom-reserve (8.75rem ≈ 140px) — so a tall + readout-only state dipped ~60px into it. The readout-only portrait rule + clears the strip by anchoring its bottom at this reserve instead; the + strip/attribution/toolbar keep --field-bottom-reserve. The TimeHelix + strip is ~100px (comfortably inside the reserve) but the rule stays — + it is the structural guarantee, not a height tweak. Tuned against + real-font render (the GF cell is fontless so the overlap never shows + in CI). */ --gantt-reserve-rem: 13rem; } } @@ -406,7 +409,7 @@ pre.shiki span { owns layout. Five named, non-overlapping regions — 'header header header' / 'rail stage inspector' / 'dock dock dock', tracks [20rem][1fr][22rem] — so overlap is impossible by construction: the - map (grid-area:stage) + the twilight gantt (its own DOCK row) can only be + map (grid-area:stage) + the time helix (its own DOCK row) can only be SHRUNK, never occluded. The old z4→z13 ladder + the `.field-hud` scrim are deleted; the surfaces flow into grid cells. The only remaining fixed/absolute overlays clip to the STAGE cell (toolbar, sky compass, deep-tool sheets, @@ -420,7 +423,7 @@ pre.shiki span { ─────── ─────────────────── ───────────────────────────── 5 attribution bottom-left 6 SkyCompass top-right (hidden ≤560px) - 6 EphemerisGantt strip bottom, full width (minus toolbar inset) + 6 TimeHelix strip bottom, full width (minus toolbar inset) 8 MapToolbar bottom-right 8 MapErrorToast bottom-left 9 LayerRail backdrop full (mobile drawer only) diff --git a/src/lib/cache/badge.ts b/src/lib/cache/badge.ts index 27b7ee6..11951c4 100644 --- a/src/lib/cache/badge.ts +++ b/src/lib/cache/badge.ts @@ -3,7 +3,7 @@ * * Field users need to glance at the map and tell whether a given * overlay is showing fresh data, cached data, stale data, or nothing - * at all. The bottom rail in `EphemerisGantt.svelte` already grew a + * at all. The old `EphemerisGantt.svelte` bottom rail grew a * one-off `RangeBadge` for the twilight viewport-summary; this module * generalizes the same idea into a reusable contract so every overlay * surface — LayerRail health pills, future per-overlay chips, the @@ -47,7 +47,8 @@ export interface CacheBadgeInputs { /** * Human "… ago" string for a stored/computed timestamp. Exported so the - * EphemerisGantt viewport-summary pill (which this module generalizes) shares + * twilight viewport-summary pill (the old EphemerisGantt surface this + * module generalizes; deferred in TimeHelix V1) shares * one age formatter — including the >24h day rollover — instead of its own copy. */ export const fmtAge = (storedAtMs: number, nowMs: number): string => { @@ -136,8 +137,9 @@ export const buildCacheBadge = (inputs: CacheBadgeInputs, nowMs: number = Date.n }; /** - * Map a `CacheBadgeTone` to the `.cache-pill` modifier classes used by - * `EphemerisGantt.svelte`. Exported so a Svelte component can apply + * Map a `CacheBadgeTone` to the `.cache-pill` modifier classes the old + * `EphemerisGantt.svelte` wore (no consumer while TimeHelix V1 defers the + * cache pill). Exported so a Svelte component can apply * the right tonal class without re-typing the union. */ export const cachePillToneClass = (tone: CacheBadgeTone): string => `cache-pill-${tone}`; diff --git a/src/lib/components/MapToolbar.svelte b/src/lib/components/MapToolbar.svelte index 9b5a102..c2c639f 100644 --- a/src/lib/components/MapToolbar.svelte +++ b/src/lib/components/MapToolbar.svelte @@ -2,7 +2,8 @@ /** * MapToolbar — vertical stack of map-overlay toggles in the * bottom-right corner. Replaces the two standalone time / sun-moon - * buttons that fought the EphemerisGantt + TimeDock for the same space. + * buttons that fought the twilight strip (now TimeHelix) + TimeDock for + * the same space. * * The toolbar publishes its width via the `--toolbar-w-rem` CSS * custom property on `:host`. The gantt + dock read that variable diff --git a/src/lib/components/ResponsiveDock.svelte b/src/lib/components/ResponsiveDock.svelte index 46f912d..0d8e785 100644 --- a/src/lib/components/ResponsiveDock.svelte +++ b/src/lib/components/ResponsiveDock.svelte @@ -229,7 +229,7 @@ with PEEK / HALF / FULL detents (CSS scroll-snap). The map de-fixes into the stage behind it (a map strip is ALWAYS visible at the top — FULL ≈ 88vh, never 100%). A [Layers · Readout · Tools] segmented control SWAPS the single sheet's - content; switching never spawns a 2nd panel. The twilight gantt is a thin + content; switching never spawns a 2nd panel. The time helix is a thin always-present row ABOVE the sheet peek at every detent. Marked .responsive-dock + data-responsive-dock so W4a's tolerant HUD-overlap assertion keys off it. --> @@ -264,7 +264,7 @@