feat(05-04): route paint stack + endpoint markers + load-hook install + shell chrome
- route-layers.ts: 2 empty GeoJSON sources + 4 line layers (route-alt-casing
5px matte-black / route-alt-line 3px soft-beige / route-casing 9px
matte-black / route-line 5px signal-orange), opacity 1.0, cap square,
join bevel, no beforeId — idempotent install, setData-only updates,
zero setStyle (T-05-09); verbatim tokens.css hex (DSGN-01)
- route-markers.ts: origin ring (24px, 2px matte-black, aria-hidden) +
destination pin (12px square + 3px×8px tail, white inset rule, never
orange) + 160px ellipsis name chip; WeakMap-tracked removal
- map.ts: bootMap gains opts.onLoad — invoked inside the existing load
handler AFTER building-3d, BEFORE the ready log, its own try/catch
- shell.css: .route-stack registers (64px control-clearance composite),
telemetry/diff/chips rows composing the .card child rules (no padding
overrides), 28px chips with 44px ::after hit slop + instant :active
invert + 3px focus bracket, marker chrome — token references only