- Markers now scale with zoom (--veh-scale, ~0.42 at z5 → 1.20 at z14) via a
transform on .veh-inner, so they no longer bloat at country zoom; pins stay
anchored on their coordinate (verified 0px drift).
- Selecting a plate or cost centre now filters the LIVE markers immediately and
recomputes the header KPIs (previously the filter card only fed Show trips, so
selections didn't reflect on the live map). Time period still applies to trips.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Re-setting el.className each render dropped the maplibregl-marker class
(position:absolute), so live markers fell into document flow and stacked
+32px each — vehicles drifted south, worse when zoomed out, dragging their
plate labels with them. Use classList (preserve maplibregl-marker) and wrap
pin+plate in a .veh-inner positioning context so a class change can't reflow.
Verified: every marker now projects to dX=0,dY=0 on its coordinate.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Single-file MapLibre SPA merging live vehicle positions and historical
trips into one console. Reads the existing dashboard read-API
(fleetapi.rahamafresh.com); served as a static nginx image for Coolify.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>