UI polish batch + fix genuinely-invisible map pins, Apple HIG audit
Battery voltage stat cutoff 13.2V -> 12.8V (values above that are already alternator output, not the battery); fixed the battery chart's Y-axis "stretching" on zoom by computing it once from the full dataset; removed two explanatory paragraphs from the battery detail view; Tankfuellung now shows "X % / X l"; removed the "noch etwa X l im Tank" suffix; fuel bar color now matches the headline instead of a red/yellow/green gradient; active/primary buttons are grey again, not red (destructive stays red per HIG); select fields gained an Apple-HIG pull-down chevron (appearance:none had removed the native one with nothing replacing it); selected menu icon is white on desktop, matching mobile; Reifenfoto crops from the right edge; "Montiert" button rebuilt as a compact top-right pill with a 44px invisible tap target; tab-bar active highlight now covers icon+label, not just the icon; removed two leftover explanatory texts from Einstellungen. Root-caused the map pins looking "transparent": the CI poi-car/poi icons are pure contour forms (nonzero-fill-rule ring + thin detail lines, only 13-40% of their own bounding box actually filled). Fixed by extracting each icon's own first sub-path (the true outer balloon silhouette, verified by rasterizing it in isolation) as a solid-filled layer behind the original icon, applied to both the vehicle and station markers. Read Color/Typography/Layout/Buttons/Materials on developer.apple.com and applied the user-approved subset (11px text floor, 44px tap targets); declined items (font weight, materials) documented with rationale. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -13,7 +13,11 @@ two-tone pin+car icon — see section C; a third round the same day found and fi
|
||||
"fragmented Leaflet rendering" defect at its root — the Leaflet stylesheet was loaded into
|
||||
`document.head` and therefore never reached the panel's shadow root — plus light-only map tiles,
|
||||
the CI `poi-car` marker, the red frame on list rows, the select-field grey box, and two more
|
||||
generic-receipt-parser gaps). This file is the entry point for every new agent
|
||||
generic-receipt-parser gaps; a sixth round the same day fixed the map pins' real visibility problem
|
||||
(the CI `poi-car`/`poi` icons are thin outline-only paths, only 13-40% filled — solved with a solid
|
||||
silhouette layer extracted from each icon's own outer contour, not a redraw), applied a batch of
|
||||
~20 user-reported UI polish items against Apple's Human Interface Guidelines, some via a guided
|
||||
Q&A, and lowered the battery-voltage statistic's cutoff from 13.2V to 12.8V). This file is the entry point for every new agent
|
||||
session: what this repo is, what is finished, what is missing, and how to work here. Detail lives in
|
||||
the linked documents — this file points, it does not duplicate.
|
||||
|
||||
@@ -836,6 +840,92 @@ wraps the web app for iPhone; a PWA home-screen install is the accepted intermed
|
||||
app re-renders on each backend push (~30 s), rebuilding the map and re-centring it. Panning
|
||||
the map from the console and checking later therefore proves nothing — spy on
|
||||
`L.Map.prototype.flyTo` instead.
|
||||
- [x] Sixth round the same day (2026-08-16) — a large batch of user-reported UI polish items, plus
|
||||
the map pins' real visibility root cause:
|
||||
(1) **Map pins were genuinely near-invisible, not just a styling nit.** The user reported the
|
||||
vehicle's map pin looked "transparent"; reproduced empirically (not by eye) by rasterizing the
|
||||
live marker's SVG to a canvas and sampling alpha — only ~13% of the icon's own bounding box had
|
||||
any ink, and the exact center pixel was fully transparent. Root cause: `CI.poiCarL`/`poiCar`
|
||||
(and `poiL`/`poiS`, used for the Einzelbeleg station pin) are pure **contour** forms — the
|
||||
balloon outline is drawn as two nested, oppositely-wound paths that cancel to a 1px ring under
|
||||
the default nonzero fill rule, plus thin interior detail lines; there is no filled area at all.
|
||||
A first fix (solid navy circle behind just the icon's round "head", via `::before`) was
|
||||
explicitly rejected by the user ("I want the whole icon solid, not just the car" / "make the
|
||||
needle opaque") — correct, since it only covered ~36% of the icon and left the pointed tip as a
|
||||
bare outline. Real fix: each icon's `d` attribute is multiple sub-paths (split at top-level
|
||||
M/m); the **first** sub-path alone is already the complete, correct outer balloon silhouette
|
||||
(verified by rasterizing it in isolation — solid center pixel, 36-41% fill ratio, matching a
|
||||
normal teardrop-in-square ratio). Extracted that first sub-path verbatim (no redrawing) into
|
||||
four new `CI.poiCarLSil`/`poiCarSil`/`poiLSil`/`poiSSil` constants, fixed-color-filled (not
|
||||
`currentColor`), and `fahrzeugMarkerSVG()`/`tankstellenMarkerSVG()` now render it as the bottom
|
||||
layer behind the original detailed icon; `.fahrzeug-pin`'s color switched from dark navy to
|
||||
white so the original outline/detail lines read against the new solid fill, exactly like the
|
||||
white-glyph-on-solid-teardrop convention of Google/Apple Maps pins. Applies uniformly to both
|
||||
marker types now (station pin included, per explicit user request), so the earlier per-variant
|
||||
`.auto` CSS modifier and its circle-position math were removed again as dead weight.
|
||||
(2) **Battery voltage statistic cutoff lowered 13.2V → 12.8V** (`AGM_RUHE_MAX_V` in
|
||||
`audi-dashboard-app.js`) — user's point: anything above ~12.8V (full-charge resting voltage per
|
||||
the existing in-code research citation) is already alternator output, not the battery's own
|
||||
state, so admitting up to 13.2V let charging-tail values distort the charge-state stats.
|
||||
(3) **Battery chart Y-axis no longer "stretches."** `bvZeichnen()` recomputed `yMin`/`yMax` from
|
||||
whatever points were currently zoomed into (min 0.4V span + 15% pad) on every redraw, so the
|
||||
axis rescaled on every pan/zoom gesture. Now computed once from the full dataset in
|
||||
`vBatterieverlauf()` (`bvYDomain`) and reused unchanged across zoom/pan.
|
||||
(4) Removed two explanatory paragraphs from the Batteriespannung detail view ("Näherung auf
|
||||
Basis…" and "Ziehen zum Verschieben…") per explicit request.
|
||||
(5) **Tankfüllung now shows "X % / X l"** (`vAudi()`) instead of a literal-litre primary value
|
||||
with a redundant "100 % von 58 l" sub-line.
|
||||
(6) Removed the "· noch etwa X l im Tank" suffix from the Übersicht's "Reichweite" label
|
||||
(`vHome()`); the now-unused `liter` local was removed with it.
|
||||
(7) **Active/primary buttons are grey again, not red** — `.aktion.primaer` in
|
||||
`audi-dashboard-ios.css` filled with `--ios-tint` (red) since the 2026-08-13 iOS-overlay
|
||||
decision; explicit user request to drop that and match the base stylesheet's neutral
|
||||
`var(--fg)`/`var(--canvas)` fill. Destructive actions (`.aktion.loeschen`) intentionally stay
|
||||
red — Apple's own HIG reserves red specifically for destructive actions, so this one use is
|
||||
correct per the guideline, not just left over.
|
||||
(8) **`<select>` fields now carry an Apple-HIG pull-down chevron.** They already had
|
||||
`appearance:none` (native arrow removed) but no replacement indicator at all — a real gap, not
|
||||
cosmetic. Added a CSS `background-image` chevron (light/dark variants) in both stylesheets;
|
||||
base `audi-dashboard.css` kept independently correct (own light/dark variant via
|
||||
`:host([data-theme=tag])`) per this repo's "purely additive overlay" convention for the ios
|
||||
file.
|
||||
(9) **Apple HIG research round.** Read Color/Typography/Layout/Buttons/Materials directly off
|
||||
developer.apple.com (the WebFetch tool returned only page titles for this JS-rendered site: the
|
||||
in-app Browser tool's `get_page_text` worked and was used instead) and cross-checked against
|
||||
actual measurements in this codebase, then asked the user via `AskUserQuestion` which findings
|
||||
to apply. Accepted: text below the 11pt iOS legibility minimum (battery-chart axis labels were
|
||||
8px, the header's "Sync" line was 10.5px) raised to 11px; the new compact "Montiert" pill's
|
||||
*invisible* hit area (not its visual size) expanded to the 44×44pt minimum via a `::before`
|
||||
with negative insets, same technique applied to future compact controls. Declined, deliberately:
|
||||
switching the app's few weight-300 ("Light") text spots to 400 — Audi Type only ships 300/400,
|
||||
and the user chose to keep Audi CI's own weight over HIG's general "avoid Light" guidance;
|
||||
making popups/sheets translucent to match the Materials guidance — the app already restricts
|
||||
translucency to the nav layer only (tab bar), which *is* the HIG-correct pattern, and popups
|
||||
were deliberately made opaque on 2026-08-16 earlier the same day to fix a real see-through bug,
|
||||
so translucency there would be a regression, not an improvement.
|
||||
(10) Removed "Aus dem Fahrzeug gelesen" and the Einrichten intro paragraph ("Fahrgestellnummer,
|
||||
Kennzeichen, Erstzulassung…") from `vEinst()`, both per explicit request.
|
||||
(11) **Fuel bar color now matches the headline** (`var(--fg)`) instead of a red/yellow/green
|
||||
status gradient in `vHome()`; the `balkenFarbe` local was removed with it.
|
||||
(12) **Selected menu icon is white (headline color), not red**, in the desktop side-nav
|
||||
(`.tab.on` inside the `@container (min-width:860px)` block in `audi-dashboard-ios.css`) — the
|
||||
mobile tab bar already used `var(--fg)` there, this brought the desktop variant in line.
|
||||
(13) **Reifenfoto (Sommerrad/Winterrad) now crops from the right edge**, not the center —
|
||||
`.radbild` gained `object-position: right center`; the photo is typically wider than the 96px
|
||||
square slot and the wheel itself tends to sit toward the right of the source photo.
|
||||
(14) **"Montiert" button rebuilt as a compact top-right pill** (new `.montiert` class,
|
||||
replacing the old full-width `.seg`-wrapped button) per explicit layout instructions: top edge
|
||||
aligned with the wheel photo's top (`top:var(--sp-5)`, same offset the photo already has from
|
||||
the tile's own padding), right inset equal to the tile's standard left content inset (both
|
||||
`var(--sp-5)`) so left/right margins match. Markup reordered so the button renders before
|
||||
`.radkopf` (position is absolute either way, but keeps DOM order sensible).
|
||||
(15) **Tab-bar active highlight now covers icon *and* label when the label is visible**, not
|
||||
just a tight pill behind the icon — `.tabbar:not(.ohne) .tab.on` gets the highlight background
|
||||
directly (whole button), with the inner `.tabpille` background suppressed in that case; the
|
||||
icon-only mode (`.tabbar.ohne`) keeps the original tight icon-pill unchanged.
|
||||
Deployed to `audi_ha_test` (version `1786901000`); pin fix visually confirmed live (solid
|
||||
teardrop pin with white car glyph, clearly over the map's "Obergurgl" label text) and the
|
||||
tab-bar highlight confirmed covering both icon and "Übersicht" label.
|
||||
- [ ] Fix remaining documentation drift (statistics claim, README gaps, obsolete TODO comment) —
|
||||
text-only changes; INSTALL.md's WLAN/TommiG1 drift and stale variable names were fixed
|
||||
2026-08-12 (see section B); `DESIGN_REVIEW_2026-08-13.md` and `REVIEW_main_2026-08-13.md`
|
||||
|
||||
Reference in New Issue
Block a user