Desktop-Sidebar-Markenklon (.navmarke) aus Claude Design nachziehen
audi-dashboard-app.js war bereits mit dem Design-Projekt identisch, aber audi-dashboard-ios.css war seit einer Weile nicht mehr neu gezogen worden: Design hatte inzwischen einen Rings-Klon oben in der Desktop-Sidebar (.navmarke) sowie einen gefuellten Pill-Stil fuer den aktiven Tab ergaenzt. Nach Byte-Diff-Pruefung (nur additive CSS-Aenderungen) komplett uebernommen, in Docker deployt und bei 402px/1400px verifiziert. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -286,6 +286,20 @@ capacitor/iframe/browser (`umgebung.ts`), types + entity table (`types.ts`), fac
|
|||||||
viewport-anchored, not parent-relative) inside `@container (min-width:860px)`. Verified live at
|
viewport-anchored, not parent-relative) inside `@container (min-width:860px)`. Verified live at
|
||||||
both narrow (mobile tab bar, full content) and wide (1144px container, grid side-nav,
|
both narrow (mobile tab bar, full content) and wide (1144px container, grid side-nav,
|
||||||
navigation clicks, settings back-arrow) — screenshots taken, no regressions found.
|
navigation clicks, settings back-arrow) — screenshots taken, no regressions found.
|
||||||
|
- [x] Desktop-Sidebar-Markenklon (`.navmarke`) nachgezogen — done 2026-08-12. The user compared the
|
||||||
|
deployed app against the live Claude Design "Board" (the two-viewport comparison page, which
|
||||||
|
genuinely iframes this project's own `audi-dashboard-app.js`/`-ios.css`, not a static mockup)
|
||||||
|
and asked why the desktop Audi-rings placement differed: Design showed the rings pinned above
|
||||||
|
the sidebar nav list, ours showed them in the content header next to the title. Root cause,
|
||||||
|
confirmed via `DesignSync get_file` + byte-diff: `audi-dashboard-app.js` was already fully in
|
||||||
|
sync (identical), but `audi-dashboard-ios.css` had drifted — the Design project had since
|
||||||
|
added a `.navmarke` sidebar clone of the rings (only visible in the `@container
|
||||||
|
(min-width:860px)` block; `.rings{display:none!important}` hides the header copy there so the
|
||||||
|
mark appears once) plus a filled-pill active-tab style (`.tabpille`), neither pulled back
|
||||||
|
locally. Diffed the two full files first to confirm every change was additive/CSS-only, then
|
||||||
|
replaced the local file wholesale. Verified in `audi_ha_test` at both 402px and 1400px: rings
|
||||||
|
now sit above the nav list on desktop, gear icon alone in the content header, mobile view
|
||||||
|
unaffected, no console errors beyond the pre-existing missing-vehicle-photo 404 gap.
|
||||||
- [x] Standort-Kachel (live vehicle GPS position on the Übersicht, above "Zuletzt") — done
|
- [x] Standort-Kachel (live vehicle GPS position on the Übersicht, above "Zuletzt") — done
|
||||||
2026-08-12. New tile with a real (non-fake) Leaflet mini-map, opens a fullscreen "Standort"
|
2026-08-12. New tile with a real (non-fake) Leaflet mini-map, opens a fullscreen "Standort"
|
||||||
route on tap; fullscreen has 4 floating controls (map style, center-on-vehicle,
|
route on tap; fullscreen has 4 floating controls (map style, center-on-vehicle,
|
||||||
|
|||||||
@@ -72,7 +72,13 @@ html,body{height:100%}
|
|||||||
.sync svg{width:13px;height:13px}
|
.sync svg{width:13px;height:13px}
|
||||||
.themebtn{width:36px;height:36px;border:0;background:var(--ios-fill);color:var(--fg2)}
|
.themebtn{width:36px;height:36px;border:0;background:var(--ios-fill);color:var(--fg2)}
|
||||||
.themebtn:hover{background:var(--tile-2);color:var(--fg)}
|
.themebtn:hover{background:var(--tile-2);color:var(--fg)}
|
||||||
|
/* Telefonbreite: die Ringe stehen oben rechts und oeffnen die Einstellungen
|
||||||
|
(Stand nach dem Design-Audit). Das Zahnrad entfaellt dort, damit oben rechts
|
||||||
|
nur ein Element sitzt. */
|
||||||
|
.rings{order:9;margin-left:8px;margin-right:-10px;pointer-events:auto;cursor:pointer;
|
||||||
|
min-width:44px;min-height:44px;height:44px;justify-content:flex-end;padding:0 10px}
|
||||||
.rings svg{height:17px}
|
.rings svg{height:17px}
|
||||||
|
.profilbtn{display:none}
|
||||||
/* Unterseite: kompakter, zentrierter Titel wie in einer iOS-Navigationsleiste */
|
/* Unterseite: kompakter, zentrierter Titel wie in einer iOS-Navigationsleiste */
|
||||||
.phone:has(.back.on) .topbar{padding:54px 16px 6px;gap:8px}
|
.phone:has(.back.on) .topbar{padding:54px 16px 6px;gap:8px}
|
||||||
.phone:has(.back.on) .head{align-items:center}
|
.phone:has(.back.on) .head{align-items:center}
|
||||||
@@ -158,14 +164,18 @@ main{padding:0 16px 30px;scroll-behavior:smooth}
|
|||||||
background:rgba(12,16,20,.72);
|
background:rgba(12,16,20,.72);
|
||||||
-webkit-backdrop-filter:saturate(180%) blur(24px);backdrop-filter:saturate(180%) blur(24px)}
|
-webkit-backdrop-filter:saturate(180%) blur(24px);backdrop-filter:saturate(180%) blur(24px)}
|
||||||
:host([data-theme="tag"]) .tabbar{background:rgba(242,242,247,.78)}
|
:host([data-theme="tag"]) .tabbar{background:rgba(242,242,247,.78)}
|
||||||
.tab{border-top:0;margin-top:0;padding:9px 2px 7px;gap:3px;
|
.tab{border-top:0;margin-top:0;padding:7px 2px 6px;gap:3px;
|
||||||
font-size:10px;letter-spacing:0;text-transform:none;color:var(--ios-grau)}
|
font-size:10px;letter-spacing:0;text-transform:none;color:var(--ios-grau)}
|
||||||
/* Beschriftung folgt weiter dem Schalter in den Einstellungen */
|
/* Beschriftung folgt weiter dem Schalter in den Einstellungen */
|
||||||
.tabbar.ohne .tab span{display:none}
|
.tabbar.ohne .tab span{display:none}
|
||||||
.tab svg{width:26px;height:26px;stroke-width:1.5}
|
.tab svg{width:26px;height:26px;stroke-width:1.5}
|
||||||
.tab.on{color:var(--ios-tint);border-top-color:transparent}
|
/* myAudi-Menueleiste: das aktive Symbol sitzt hell in einer gefuellten Pille,
|
||||||
.tab.on svg polygon{fill:var(--ios-tint);stroke:var(--ios-tint)}
|
die uebrigen bleiben grau - kein farbiger Tint, kein Oberkantenstrich. */
|
||||||
.tabbar.ohne .tab{padding:14px 2px 12px}
|
.tabpille{width:63px;height:39px;border-radius:20px}
|
||||||
|
.tab.on{color:var(--fg);border-top-color:transparent}
|
||||||
|
.tab.on .tabpille{background:rgba(255,255,255,.14)}
|
||||||
|
:host([data-theme="tag"]) .tab.on .tabpille{background:rgba(0,0,0,.07)}
|
||||||
|
.tabbar.ohne .tab{padding:11px 2px 10px}
|
||||||
|
|
||||||
:focus-visible{outline:2px solid var(--ios-tint);outline-offset:2px}
|
:focus-visible{outline:2px solid var(--ios-tint);outline-offset:2px}
|
||||||
|
|
||||||
@@ -180,6 +190,9 @@ main{padding:0 16px 30px;scroll-behavior:smooth}
|
|||||||
begrenzte Spalte. Container-Abfrage statt @media, weil die App in einem
|
begrenzte Spalte. Container-Abfrage statt @media, weil die App in einem
|
||||||
eigenen Rahmen sitzt und nicht die Fensterbreite messen darf. Schwelle 860 px.
|
eigenen Rahmen sitzt und nicht die Fensterbreite messen darf. Schwelle 860 px.
|
||||||
================================================================== */
|
================================================================== */
|
||||||
|
/* Klon der Ringe in der Menueleiste - nur im Spaltenlayout sichtbar */
|
||||||
|
.navmarke{display:none}
|
||||||
|
|
||||||
@container (min-width:860px){
|
@container (min-width:860px){
|
||||||
/* Ab hier keine schwebende Telefonkarte mehr - die 880px-Deckelung faellt,
|
/* Ab hier keine schwebende Telefonkarte mehr - die 880px-Deckelung faellt,
|
||||||
die App fuellt die tatsaechliche (weiterhin viewport-verankerte) Hoehe. */
|
die App fuellt die tatsaechliche (weiterhin viewport-verankerte) Hoehe. */
|
||||||
@@ -202,10 +215,22 @@ main{padding:0 16px 30px;scroll-behavior:smooth}
|
|||||||
padding:12px 14px;border-radius:12px;font-size:15px;letter-spacing:0}
|
padding:12px 14px;border-radius:12px;font-size:15px;letter-spacing:0}
|
||||||
.tab span{display:block}
|
.tab span{display:block}
|
||||||
.tab svg{width:22px;height:22px}
|
.tab svg{width:22px;height:22px}
|
||||||
|
.tabpille{width:auto;height:auto;border-radius:0;background:none}
|
||||||
|
.tab.on .tabpille{background:none}
|
||||||
.tab:hover{background:var(--tile)}
|
.tab:hover{background:var(--tile)}
|
||||||
.tab.on{background:rgba(245,5,55,.14);color:var(--ios-tint)}
|
.tab.on{background:rgba(245,5,55,.14);color:var(--ios-tint)}
|
||||||
.tabbar.ohne .tab span{display:block}
|
.tabbar.ohne .tab span{display:block}
|
||||||
.tabbar.ohne .tab{padding:12px 14px}
|
.tabbar.ohne .tab{padding:12px 14px;gap:14px}
|
||||||
|
.tabbar.ohne .tab svg{width:22px;height:22px}
|
||||||
|
/* Marke am Kopf der Seitenspalte, dafuer keine Ringe in der Kopfzeile
|
||||||
|
(Design-Audit: die Marke soll nur einmal im Bild stehen). */
|
||||||
|
.navmarke{display:block;margin:2px 0 26px 14px;color:var(--fg)}
|
||||||
|
.navmarke svg{width:54px;height:auto;display:block}
|
||||||
|
/* Grosser Bildschirm: Marke am Kopf der Spalte, Zahnrad wieder oben rechts */
|
||||||
|
.profilbtn{display:inline-flex}
|
||||||
|
/* Die Kopf-Ringe setzt die App per Inline-Stil (display:inline-flex),
|
||||||
|
deshalb hier mit !important. */
|
||||||
|
.rings{display:none !important}
|
||||||
|
|
||||||
.duo{grid-template-columns:repeat(3,minmax(0,1fr))}
|
.duo{grid-template-columns:repeat(3,minmax(0,1fr))}
|
||||||
.carfix,.bildbox.carfix{height:260px}
|
.carfix,.bildbox.carfix{height:260px}
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"version": 1786536000}
|
{"version": 1786543200}
|
||||||
|
|||||||
Reference in New Issue
Block a user