Files
audi-app/homeassistant/installationspaket/www/audi-dashboard.css
T
tobias 3b99f1f332 Vergangene Daten aus dem HA-Verlauf importierbar, Auslieferstand bereinigt
Datenaufbewahrung (recorder_snippet.yaml, neu): Home Assistant loescht
Sensor-Verlaeufe standardmaessig nach 10 Tagen - das war die stille
Obergrenze dafuer, wie weit sich ueberhaupt je etwas rekonstruieren
laesst, denn geloeschte recorder-Zeilen sind endgueltig weg. Der Block
hebt das auf 365 Tage. Die Bestaende der App selbst (fahrten.jsonl,
tankvorgaenge.jsonl, batteriespannung.jsonl, fahrzeugprofil.json) waren
davon nie betroffen, die kennen ohnehin keine Purge-Logik. Platzbedarf
an der Testinstanz gemessen statt geschaetzt: 90.858 Zeilen in 17 Tagen,
hochgerechnet grob 1,9 Mio. Zeilen und 1-1,5 GB im Jahr, davon 96 % aus
der EU-Data-Act-Integration - dafuer liegt eine auskommentierte
exclude:-Liste bei. Bewusst kein include:-Block, der wuerde jeder
anderen Integration den Verlauf nehmen und dabei kaum Platz sparen.

Historienimport (pyscript/historienimport.py, neu): neuer Dienst
audi_dashboard_historie_importieren(start, ende) liest denselben
Verlauf, den die Live-Trigger in Echtzeit sehen, und leitet rueckwirkend
dieselben Datensaetze ab - Fahrten aus dem Zuendungsverlauf (inklusive
der Pausenregel, kurze Unterbrechungen verschmelzen zu einer Fahrt),
Tankvorgaenge nach derselben Tiefststand-Logik und denselben Schwellen
wie tankerkennung.py, Tagesmin/-max der Batteriespannung. Mehrfach
ausfuehrbar: ueberschneidet sich eine Fahrt mit einer bereits erfassten,
wird sie uebersprungen statt doppelt angelegt. Erzeugte Datensaetze
tragen source: "import".

Gelesen wird ueber HAs eigene recorder-API (get_significant_states),
nicht per direktem SQL auf home-assistant_v2.db: das Schema ist
HA-intern und aendert sich zwischen Versionen, die Funktion ist die
stabile Schnittstelle. Preis dafuer ist hass_is_global: true im
pyscript-Block; ohne die Zeile laeuft alles andere unveraendert weiter,
nur der Import meldet, dass er den Verlauf nicht lesen kann.

Oberflaeche in beiden Codebasen: Knopf "Daten importieren aus Home
Assistant" unter Einstellungen -> Einrichten, dahinter ein Fenster mit
Von/Bis (Vorbelegung: letzte 30 Tage), "Importieren" als Hauptaktion und
"Abbrechen" als zweite Wahl. Das Fenster bleibt offen und zeigt das
Ergebnis, statt optimistisch zu schliessen - hier ist das Ergebnis der
Zweck des Aufrufs. Fortschritt ueber die Entitaet
pyscript.audi_dashboard_import_status, weil pyscript-Dienste sofort
zurueckkehren. In companion-app bewusst NICHT ueber die
Offline-Warteschlange: ein spaeter aus dem Nichts abgefeuerter
Importlauf waere fuer den Nutzer nicht nachvollziehbar.

Beim Testen gefunden und mitgefixt: profil.batterieverlauf_tageswert_
aktualisieren() haengte in Einfuegereihenfolge an. Solange nur die
Live-Aufzeichnung schrieb, war das dasselbe wie sortiert (sie traegt
immer den heutigen Tag ein) - der Import traegt vergangene Tage nach,
die waeren hinter den neueren gelandet und das Diagramm haette zeitlich
rueckwaerts gelaufen. Sortiert jetzt nach Datum, wie der eigene
Docstring es ohnehin versprach.

Auslieferstand bereinigt: einstellungen.py brachte zwei Entity-IDs einer
laengst abgeraeumten Testinstanz mit (testzone_fmm003_...). Beim Testen
unsichtbar, weil die Testinstanz sie ueber entitaeten.json ueberschreibt
- auf einer Neuinstallation waeren sie die wirksamen Werte gewesen. Und
schlimmer als nur wirkungslos: fahrterkennung.py registriert seinen
@state_trigger nur, wenn das Feld belegt ist, ausdruecklich als Schutz
gegen eine leere Entity-ID. Ein gesetzter, aber nicht existierender Wert
hebelt genau diesen Schutz aus. Beide Felder jetzt leer wie alle
anderen; Kopfkommentar der Datei ueberarbeitet, er behauptete noch, die
EU-Data-Act-Integration werde nicht mehr verwendet.

install.ps1 abgesichert, da die erste echte Installation auf HA OS
ansteht: die feste configuration.yaml.bak wurde bei jedem Lauf
ueberschrieben, ausgerechnet das Original war nach dem zweiten Lauf weg
- Sicherungen jetzt zeitgestempelt. Nach dem Schreiben wird die Datei
zurueckgelesen und geprueft (Laenge, genau ein Markerblock, bisheriger
Inhalt unveraendert); bei der kleinsten Abweichung rollt das Skript
automatisch zurueck. Die Sicherheitseigenschaften stehen jetzt im Kopf
der Datei, statt dass man ihnen glauben muss.

Standort-Blatt: "Teilen" war im Tagmodus unsichtbar - .standort-pille
nutzte var(--tile), das Blatt darunter var(--tile-deckend), und die
iOS-Auflage setzt im Tagmodus beide auf #FFFFFF. Gemessener Kontrast
1,00:1, weiss auf weiss. Beide Pillen folgen jetzt der Knopfsprache des
Panels (.aktion / .aktion.primaer): Umriss fuer die Nebenaktion, var(--fg)
gefuellt fuer "Route". Danach 17-21:1 Textkontrast in beiden Themes.
Nebenbei ist damit --line-strong - eine Linienfarbe - nicht laenger als
Knopffuellung im Einsatz.

Geprueft: Import zweimal ueber die echte Oberflaeche im Browser gegen
eine in die recorder-DB eingespielte Kunsthistorie (der Testcontainer
laeuft nicht, waehrend das Auto faehrt, echte Fahrten liegen dort also
nicht vor) - drei Fahrten wie erwartet, die 5-Minuten-Unterbrechung
korrekt zu einer 50-Minuten-Fahrt verschmolzen, die 30-Sekunden-Zuendung
verworfen, Strecken kilometergenau; zweiter Lauf legte 0 an und meldete
3 als vorhanden. Neuinstallation in einem Wegwerf-Container: nur
Profilvorlage und Parser, keine Fahrten-/Tank-/Batteriedatei, null
Fehler im Log. install.ps1 gegen Attrappen: -Pruefen schreibt nichts,
echter Lauf laesst automations.yaml bytegleich (SHA-256) und fremde
Bloecke stehen, Ergebnis parst als gueltiges HA-YAML, zweiter Lauf
idempotent, bei fremdem pyscript:/panel_custom: bleibt die Datei
bytegleich. tsc --noEmit sauber, companion-app-Tests 106/106, vite build
sauber, HA-Configcheck und Start ohne Fehler.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-23 20:42:54 +02:00

1284 lines
125 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@font-face{font-family:"Audi Type";src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:"Audi Type Wide";src:url(data:font/woff2;base64,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) format("woff2");font-weight:300;font-style:normal;font-display:swap}
@font-face{font-family:"Audi Type Extended";src:url(data:font/woff2;base64,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) format("woff2");font-weight:400;font-style:italic;font-display:swap}
/* audi-dashboard.css — Stil des Panels, aufgebaut auf den Tokens und
Komponenten des Design-Systems AudiDashUI (_ds_bundle.css). Klassennamen
wie im Prototyp/Panel (unpräfixiert), Werte 1:1 aus dem Design-System. */
:host {
--red: #F50537;
--r-tile: 20px;
--r-pill: 999px;
--r-func: 8px;
--rahmen-hg: #111;
--sp-1: 4px; --sp-2: 8px; --sp-3: 12px; --sp-4: 16px; --sp-5: 22px;
--canvas: #161b23;
--tile: #1f2733;
--tile-2: #2a3341;
--line: rgba(255,255,255,.10);
--line-strong: rgba(255,255,255,.20);
--fg: #FFFFFF;
--fg2: #9aa1ad;
/* A2: von #657081 (3,0:1 auf --tile) auf 4,6:1 angehoben. Unterhalb von
12 px wird diese Farbe nicht mehr verwendet. */
--fg3: #8a94a3;
--ok: #15da15;
--warn: #ffaa00;
--bad: #fd2c4e;
--shade: rgba(255,255,255,.05);
--font-stack: "Audi Type", Helvetica, Arial, sans-serif;
/* Bugfix: in der echten HA-Einbettung liefert partial-panel-resolver
(display:inline, height:auto) keine definierte Höhe - eine
height:100%-Kette von hier nach oben rechnet also gegen eine
Auto-Box und kollabiert auf die Inhaltshöhe (nur Topbar+Tabbar
sichtbar, main#view ohne Fläche zum Scrollen). Deshalb wie im
ursprünglichen Prototyp direkt an der Viewport-Höhe verankert,
unabhängig von der Elternkette - und zentriert wie eine
Telefon-Karte, statt randlos zu füllen. */
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
height: 100dvh;
overflow: hidden;
}
:host([data-theme=tag]) {
--canvas: #FFFFFF;
--tile: #f2f2f2;
--tile-2: #e5e5e5;
--line: rgba(0,0,0,.10);
--line-strong: rgba(0,0,0,.22);
--fg: #000000;
--fg2: #4c4c4c;
--fg3: #666666;
--ok: #0DA20D;
--warn: #ffaa00;
--bad: #eb0d3f;
--shade: rgba(0,0,0,.04);
}
* { box-sizing: border-box; }
/* Sichtbarer Tastatur-Fokus. Bis hierher gab es .feld input:focus als einzige
Fokus-Regel im ganzen Blatt - alle Knöpfe, Kacheln und Tabs waren zwar
fokussierbar, aber ohne jede sichtbare Markierung. Auf dem Telefon fällt das
nicht auf, per Bluetooth-Tastatur (iPadOS/Desktop über Tailscale) oder mit
iOS-Vollzugriff per Tastatur ist die App dadurch praktisch unbedienbar.
:focus-visible statt :focus, damit Maus- und Tipp-Bedienung unverändert
ohne Rahmen bleibt - der Browser entscheidet, was "echte" Tastaturnavigation
ist. */
:focus-visible {
outline: 2px solid var(--red);
outline-offset: 2px;
border-radius: 2px;
}
/* Zwischen-Wrapper, den _aufbauen() in den Shadow Root haengt - bekommt hier
die einzige "echte" (viewport-verankerte) Höhe der ganzen Kette; .phone
darunter kann sich dann gefahrlos mit height:100% darauf beziehen. */
:host > div {
width: 100%;
max-width: 412px;
height: min(880px, calc(100vh - 24px));
height: min(880px, calc(100dvh - 24px));
min-height: 0;
/* Verhindert, dass eine Zieh-Geste, die main#view unten nach oben hin
verlaesst, an die dahinterliegende HA-Seite weitergereicht wird - sonst
kann der Browser selbst ein natives Overscroll/Pull-to-Refresh starten
und der eigene Ziehen-zum-Aktualisieren-Indikator bekommt die Geste nie
zu Ende. */
overscroll-behavior: none;
}
/* ------------------------------------------------------------- Gerüst */
.phone {
display: flex;
flex-direction: column;
height: 100%;
min-height: 0;
/* B4: Bezugsrahmen für Action Sheet und Popups. */
position: relative;
background: var(--canvas);
color: var(--fg);
font-family: var(--font-stack);
font-variant-numeric: tabular-nums;
overflow: hidden;
/* B2: kein graues Safari-Rechteck beim Tippen - Rückmeldung kommt aus den
:active-Regeln unten. */
-webkit-tap-highlight-color: transparent;
}
.topbar {
display: flex;
align-items: center;
gap: var(--sp-3);
/* B1: oben Platz für Statusbalken/Dynamic Island. */
padding: max(22px, calc(env(safe-area-inset-top) + 10px)) 20px 14px;
flex: 0 0 auto;
background: var(--canvas);
}
.back {
/* B6: 44 px Trefferfläche. */
width: 44px; height: 44px;
margin-left: -5px;
flex: 0 0 auto;
display: inline-flex; align-items: center; justify-content: center;
border: none; border-radius: 50%;
background: none;
color: var(--fg3);
cursor: pointer;
padding: 0;
opacity: 0;
pointer-events: none;
}
.back.on { opacity: 1; pointer-events: auto; }
.back:hover { background: var(--tile-2); color: var(--fg); }
.back:active { background: var(--tile-2); color: var(--fg); transform: scale(.92); }
.head { flex: 1; min-width: 0; }
.eyebrow {
font-size: 11px;
letter-spacing: .18em;
text-transform: uppercase;
color: var(--fg3);
min-height: 12px;
}
.title {
font-size: 23px;
letter-spacing: -.015em;
line-height: 1.15;
color: var(--fg);
overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.sync {
display: flex;
align-items: center;
gap: 6px;
margin-top: 4px;
font-size: 11px;
color: var(--fg3);
white-space: nowrap;
}
.themebtn, .rings {
display: inline-flex; align-items: center; justify-content: center;
border: none; background: none; color: var(--fg3);
cursor: pointer; padding: 0; flex: 0 0 auto;
}
.themebtn { width: 44px; height: 44px; border-radius: 50%; }
/* A6: Die Topbar-Taste ist entfallen - die Wahl liegt in den Einstellungen und
folgt sonst der Systemeinstellung. display:inline-flex oben würde das
hidden-Attribut sonst überstimmen. */
.themebtn[hidden] { display: none; }
.themebtn:hover { background: var(--tile-2); color: var(--fg); }
.themebtn:active { background: var(--tile-2); color: var(--fg); transform: scale(.92); }
.themebtn svg { fill: none; stroke: currentColor; stroke-width: 1.5; stroke-linecap: round; }
/* D4 war urspruenglich: die Ringe sind Marke, kein Knopf. Seit die
iOS-Auflage in Telefonbreite das Zahnrad ausblendet, sind sie dort aber der
einzige Zugang zu den Einstellungen - und als reines div mit
pointer-events:none war dieser Zugang fuer Tastatur und Sprachausgabe gar
nicht erreichbar. Sie sind deshalb jetzt ein echter Knopf, in jeder Breite
bedienbar. Auf grossen Bildschirmen gibt es damit zwei Wege in die
Einstellungen (Ringe und Zahnrad) - unschaedlich, und der Zugang haengt
nicht mehr davon ab, ob audi-dashboard-ios.css geladen wurde. */
/* Design-Audit 2026-08-13: in Telefonbreite ist dies der einzige Zugang zu
den Einstellungen (siehe Kommentar oben), war mit 42px aber deutlich
kleiner als jeder andere Symbol-Knopf in der Kopfzeile (.themebtn/
.profilbtn/.back sind alle 44px) und lag damit unter der ueblichen
44px-Mindestgroesse fuer Tippflaechen. */
.rings { width: 58px; height: 32px; color: var(--fg); }
.rings svg { width: 58px; height: auto; }
/* Der Markenklon in der Seitenleiste wird vom Skript unbedingt in die
Menueleiste gehaengt; sichtbar macht ihn erst die iOS-Auflage ab 860px.
Das Verstecken gehoert deshalb hierher: laedt die Auflage nicht (404,
Cache), waere er sonst ein sechstes Element im fuenfspaltigen Raster und
die Menueleiste zerfiele. */
.navmarke { display: none; }
.profilbtn {
display: inline-flex; align-items: center; justify-content: center;
width: 44px; height: 44px; border-radius: 50%;
border: none; background: var(--tile); color: var(--fg2);
cursor: pointer; padding: 0; flex: 0 0 auto;
}
.profilbtn svg { width: 19px; height: 19px; fill: none; stroke: currentColor; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; }
.profilbtn:hover { color: var(--fg); }
.profilbtn:active { background: var(--tile-2); color: var(--fg); transform: scale(.94); }
.ptr {
height: 0;
overflow: hidden;
display: flex;
align-items: center;
justify-content: center;
gap: 8px;
color: var(--fg3);
font-size: 12.5px;
transition: height .2s;
flex: 0 0 auto;
}
.ptr.spin svg { animation: drehen 1s linear infinite; }
@keyframes drehen { to { transform: rotate(360deg); } }
main#view {
/* Der seitliche Rand steht als Variable, weil randlose Elemente ihn per
negativem Rand ausgleichen muessen (siehe .standort-vollbild). Wer das
Padding aendert, ohne die Variable zu benutzen, verschiebt die randlosen
Elemente unbemerkt. */
--seitenrand: 20px;
flex: 1 1 0;
min-height: 0;
overflow-y: auto;
overflow-x: hidden;
padding: 10px var(--seitenrand) 34px;
scroll-behavior: smooth;
-webkit-overflow-scrolling: touch;
scrollbar-width: none;
/* Ohne das hier greift auf echten Touch-Geraeten oft das native
Overscroll/Pull-to-Refresh des Browsers, sobald am oberen Rand weiter
nach unten gezogen wird - das nimmt der eigenen "Ziehen zum
Aktualisieren"-Geste (siehe ptrY0-Logik in ereignisseVerdrahten()) die
Kontrolle weg, obwohl deren JS/CSS für sich genommen korrekt arbeitet. */
overscroll-behavior-y: contain;
}
main#view::-webkit-scrollbar { width: 0; height: 0; }
#overlay:empty { display: none; }
.tabbar {
display: grid;
grid-template-columns: repeat(5, 1fr);
border-top: 1px solid var(--line);
flex: 0 0 auto;
background: var(--canvas);
/* B1: Luft über dem Home-Indikator. */
padding-bottom: max(6px, env(safe-area-inset-bottom));
}
/* B5: kein roter Oberkantenstrich (Desktop-Muster), sondern eine gefüllte
Pille um das aktive Symbol - wie in der myAudi-App. */
.tab {
display: flex; flex-direction: column; align-items: center; gap: 7px;
padding: 12px 0 10px;
background: none; border: none;
color: var(--fg3);
font-family: inherit;
cursor: pointer;
transition: color .15s;
}
.tab.on { color: var(--fg); }
/* Die Pille ist ein eigenes Feld um das Symbol - so bleibt ihre Groesse
unabhaengig vom Symbol und der Wechsel laeuft sauber ueber background. */
.tabpille {
display: flex; align-items: center; justify-content: center;
width: 60px; height: 34px; border-radius: var(--r-pill);
transition: background .18s;
}
.tab.on .tabpille { background: var(--tile-2); }
.tab svg {
fill: none; stroke: currentColor; stroke-width: 1.6;
stroke-linecap: round; stroke-linejoin: round;
transition: transform .18s;
}
.tab svg.voll { fill: currentColor; stroke: none; }
.tab:active svg { transform: scale(.9); }
.tab span { font-size: 11px; letter-spacing: .01em; }
/* :not(.tabpille) - die Icon-Huelle ist selbst ein <span>, ein blosses
".tab span" hier hiess frueher auch der Pille (samt Icon) display:none.
Ueberschrieben von derselben Regel in audi-dashboard-ios.css (dieselbe
Spezifitaet, spaeter geladen), aber auch hier falsch und daher fixiert. */
.tabbar.ohne .tab span:not(.tabpille) { display: none; }
.tabbar.ohne .tab { padding: 14px 0 12px; }
.tabbar.ohne .tab svg { width: 26px; height: 26px; }
/* -------------------------------------------------------------- Kacheln */
.tile {
background: var(--tile);
border-radius: var(--r-tile);
padding: var(--sp-5);
margin-bottom: var(--sp-4);
position: relative;
}
.tile.flat { background: none; padding: 0; }
button.tile, .tilebtn {
display: block;
width: 100%;
border: none;
font-family: inherit;
text-align: left;
cursor: pointer;
color: inherit;
}
button.tile:hover { background: var(--tile-2); }
button.tile:active, .tilebtn:active { background: var(--tile-2); transform: scale(.99); }
button.tile, .tilebtn { transition: background .15s, transform .1s; }
.go {
position: absolute;
top: var(--sp-5); right: var(--sp-5);
width: 6px; height: 10px;
color: var(--fg3);
fill: none; stroke: currentColor; stroke-width: 1.4;
}
.zahnrad {
position: absolute;
top: 11px; right: 11px;
width: 44px; height: 44px;
display: inline-flex; align-items: center; justify-content: center;
border: none; border-radius: 50%;
background: none; color: var(--fg3);
cursor: pointer; padding: 0;
}
.zahnrad:hover { background: var(--tile-2); color: var(--fg); }
.zahnrad:active { background: var(--tile-2); color: var(--fg); transform: scale(.92); }
.zahnrad svg { width: 17px; height: 17px; }
/* Titelzeile nie unter dem Zahnrad/Chevron hindurchlaufen lassen */
.tile:has(> .zahnrad) > .label:first-child,
.tile:has(> .go) > .label:first-child { padding-right: 44px; }
/* C1: Abschnittstitel gemischt geschrieben, 14 px, ohne Sperrung - wie in der
aktuellen myAudi-App. Versalien trägt nur noch .eyebrow über dem Seitentitel. */
.label {
font-size: 14px;
letter-spacing: normal;
color: var(--fg2);
display: block;
line-height: 1.3;
}
/* HIG "Loading": statt reinem Text ein sichtbar laufender Indikator, solange
DATEN_GELADEN false ist - hilft auch, "lädt noch" optisch von "hängt fest"
zu unterscheiden (dieser Bildschirm hatte schon ein echtes Hänger-Problem). */
.lade-spinner {
width: 16px; height: 16px; flex: none;
border: 2px solid var(--line-strong);
border-top-color: var(--fg2);
border-radius: 50%;
animation: lade-spin .8s linear infinite;
}
@keyframes lade-spin { to { transform: rotate(360deg); } }
/* Echte Überschrift innerhalb einer Kachel (z.B. "Sommerräder"/"Winterräder")
statt des sonst üblichen kleinen, gedämpften .label-Abschnittstitels -
selbe Typografie-Stufe wie .title (Seitentitel), nur etwas kleiner, weil
sie innerhalb einer Kachel steht statt in der Kopfzeile. */
.tile-headline {
font-size: 20px;
letter-spacing: -.01em;
line-height: 1.2;
color: var(--fg);
display: block;
}
/* Icon + Text statt reinem Fließtext-Label (z.B. Batterie-Symbol vor
"Ruhespannung") - dieselbe Zeilen-Geometrie wie .sync in der Kopfzeile. */
.bv-skala-kopf { display: flex; align-items: center; gap: 6px; }
/* A4: Messwerte erben nie mehr das uppercase der Label-Klasse. */
.wert {
font-size: 14px;
letter-spacing: normal;
text-transform: none;
color: var(--fg2);
}
.fig {
font-family: "Audi Type Wide", var(--font-stack);
font-weight: 300;
letter-spacing: -.02em;
line-height: .95;
color: var(--fg);
}
.fig .unit {
/* A3: relativ zur Zahl, aber nie unter der Lesbarkeitsgrenze - bei einer
29-px-Zahl ergäbe .32em nur 9,3 px. */
font-size: max(11px, .32em);
font-weight: 400;
letter-spacing: normal;
color: var(--fg2);
margin-left: .32em;
}
.werte { font-size: 14px; color: var(--fg); display: block; }
.rows { margin: 0; }
.row {
display: flex;
justify-content: space-between;
align-items: baseline;
gap: var(--sp-4);
padding: 15px 0;
border-bottom: 1px solid var(--line);
}
.row dt { font-size: 13.5px; color: var(--fg2); line-height: 1.4; }
.row dd { margin: 0; font-size: 14.5px; color: var(--fg); text-align: right; }
.row dd small { display: block; font-size: 11.5px; color: var(--fg3); margin-top: 3px; }
.rows-fest dd { min-width: 120px; }
/* Fussnote unter einer Zeile, ueber die volle Kachelbreite statt in der
rechten Spalte: dort blieben nur ~217px, in die eine Prognose wie
"9.029 km, voraussichtlich am 12.04.2027" zwangslaeufig umbrach.
:has() grenzt das Umbrechen auf genau die Zeilen ein, die eine Fussnote
fuehren - alle anderen .row bleiben unveraendert einzeilig. */
.row:has(.row-fussnote) { flex-wrap: wrap; }
.row-fussnote {
flex: 1 0 100%;
text-align: left;
font-size: 11.5px;
color: var(--fg3);
margin-top: 4px;
}
.leaf {
display: flex; align-items: center; justify-content: space-between;
gap: var(--sp-4);
width: 100%;
background: none; border: none;
font-family: inherit; text-align: left;
padding: 14px 0 14px 40px;
min-height: 56px;
cursor: pointer;
border-bottom: 1px solid var(--line);
color: inherit;
}
.leaf .k { font-size: 14px; color: var(--fg); display: flex; flex-direction: column; gap: 3px; line-height: 1.35; }
.leaf .k small { font-size: 12px; color: var(--fg3); }
.leaf .v { font-size: 13px; color: var(--fg2); text-align: right; display: flex; flex-direction: column; flex: 0 0 auto; }
.leaf .v small { font-size: 12px; color: var(--fg3); }
.leaf { transition: background .15s; }
.leaf:active { background: var(--tile-2); }
.chev { width: 6px; height: 10px; color: var(--fg3); flex: 0 0 auto; fill: none; stroke: currentColor; stroke-width: 1.4; }
/* ------------------------------------------------------------- Status */
.status {
display: flex; align-items: center; gap: var(--sp-3);
width: 100%;
background: none; border: none; padding: 16px 0 0;
min-height: 44px;
text-align: left; font-family: inherit; cursor: pointer;
color: inherit;
}
.dot { width: 11px; height: 11px; border-radius: 50%; flex: 0 0 auto; background: var(--ok); display: inline-block; }
.dot.warn { background: var(--warn); }
.dot.bad { background: var(--bad); }
.status .t { font-size: 14px; color: var(--fg); }
.status { transition: opacity .15s; }
.status:active { opacity: .55; }
/* -------------------------------------------------------------- Übersicht */
.tankzeile { display: flex; align-items: flex-end; justify-content: space-between; gap: 14px; margin-bottom: 14px; }
.pct { font-size: 15px; color: var(--fg2); padding-bottom: 6px; }
.balken { height: 4px; border-radius: var(--r-pill); background: var(--line); overflow: hidden; }
.balken i { display: block; height: 100%; background: var(--fg); border-radius: var(--r-pill); }
/* Der Außenabstand sitzt am Raster, nicht an den Kacheln - sonst wird er im
2×2-Raster (vHome) zum zusätzlichen internen Zeilenabstand und der Abstand
innerhalb der Gruppe wäre größer als der zur nächsten. */
/* Übersicht: "Nächster Service" als tippbare Kennzahl, darunter der
Kilometerstand als Wertezeile (siehe Kommentar in vHome()). Der Knopf sitzt
INNERHALB einer normalen .tile - nicht die Kachel selbst ist der Knopf,
sondern nur ihr oberer Teil, damit die Kilometerstand-Zeile erkennbar reine
Anzeige bleibt. Der Chevron steht deshalb auf right:0 relativ zum Knopf und
landet damit genau auf demselben Innenabstand wie ein normales .go in einer
gepolsterten Kachel. */
.serviceblock {
position: relative;
display: block; width: 100%;
border: 0; background: none; padding: 0;
font-family: inherit; text-align: left; color: inherit; cursor: pointer;
}
.serviceblock > .go { top: 3px; right: 0; }
/* Rückmeldung beim Tippen: ein Hintergrundwechsel wie bei .tilebtn ginge hier
nicht, der Knopf liegt ja schon auf der Kachelfläche. */
.serviceblock:active { opacity: .55; }
/* Beschriftung nie unter dem Chevron hindurchlaufen lassen */
.serviceblock > .label:first-child { padding-right: 24px; }
/* Serviceart-Icon links der Kennzahl statt des Wortes "bis zum/zur ...". */
.fig-zeile { display: flex; align-items: center; gap: 8px; margin-top: 8px; }
.fig-zeile svg { color: var(--fg2); flex: 0 0 auto; }
.servicezeile {
display: flex; align-items: baseline; justify-content: space-between;
gap: var(--sp-4);
border-top: 1px solid var(--line);
margin-top: 14px; padding-top: 13px;
}
/* Anstehende Termine (vService): drei sichtbar getrennte Bloecke statt einer
dt/dd-Liste - Apple HIG ("essential information... don't obscure it by
crowding it with nonessential details") plus Audi-CI (Flaeche mit Haarlinien
statt Karten, eigene Groessenklasse fuer Zahlen). Trennung ueber Abstand und
eine Haarlinie zwischen den Bloecken, nicht ueber verschachtelte Kacheln.
Jeder Block: Kopfzeile (Icon + Art-Name, optional ein Chip fuer einen
vereinbarten Werkstatttermin), optionale Herstellervorgabe-Zeile, der Wert,
optional die eigene Prognose als Fusszeile. */
.termingruppe { padding: 18px 0; border-top: 1px solid var(--line); }
.termingruppe:first-of-type { padding-top: 2px; border-top: 0; }
.tg-kopf { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.tg-name { display: flex; align-items: center; gap: 9px; min-width: 0; }
.tg-name svg { color: var(--fg2); flex: 0 0 auto; }
.tg-name span { font-size: 16.5px; color: var(--fg); font-weight: 400; }
/* Chip statt rotem Fliesstext fuer einen vereinbarten Werkstatttermin - Rot
bleibt Akzent (Text/Rahmen), nie Flaeche, wie im Rest der App. */
.tg-chip {
font-size: 10.5px; color: var(--red);
border: 1px solid var(--red); border-radius: var(--r-pill);
padding: 3px 8px; white-space: nowrap; flex: 0 0 auto;
}
.tg-vorgabe { font-size: 11.5px; color: var(--fg2); margin-top: 8px; }
.tg-wert {
font-family: "Audi Type Wide", var(--font-stack); font-weight: 300;
font-size: 22px; color: var(--fg); letter-spacing: -.005em; margin-top: 4px;
}
.tg-wert.leer { font-family: var(--font-stack); font-weight: 400; font-size: 15px; color: var(--fg3); margin-top: 8px; }
.tg-prognose { font-size: 12px; color: var(--fg2); margin-top: 6px; }
.badge { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.badge img { height: 18px; width: auto; display: none; }
:host([data-theme=nacht]) .badge img.negative { display: block; }
:host([data-theme=tag]) .badge img.positive { display: block; }
.badge .zusatz { font-size: 13px; color: var(--fg2); }
.szene { position: relative; padding: 8px 0 18px; }
/* C5: randloses Fahrzeugbild - hebt die 20 px Seitenrand von main#view auf und
blendet nach unten in die Fläche aus. */
.szene.bleed { margin: -10px -20px 0; padding: 0 0 10px; }
.szene.bleed .carbox { padding: 0 8px; }
.szene.bleed::before {
content: "";
position: absolute; left: 0; right: 0; bottom: 0;
height: 42%;
background: linear-gradient(to bottom, transparent, var(--canvas) 78%);
pointer-events: none;
z-index: 1;
}
.szene.strasse::after, .szene.winter::after {
content: "";
position: absolute;
left: 8%; right: 8%; bottom: 6px;
height: 26px;
border-radius: 50%;
background: radial-gradient(ellipse at center, var(--shade), transparent 70%);
}
.szene.winter::after { background: radial-gradient(ellipse at center, rgba(150,190,255,.16), transparent 70%); }
.carbox { position: relative; }
.carfix { width: 100%; aspect-ratio: 16 / 9; }
.carfix.klein { aspect-ratio: 16 / 8; }
/* Reifenfoto ist oft eine breite Aufnahme; statt beide Ränder symmetrisch
wegzuschneiden (object-fit:cover-Standard), bleibt bewusst der rechte Rand
des Originalfotos erhalten - dort sitzt das Rad meist im Bild. */
.radbild { object-position: right center; }
/* .bildbox.radbild statt .radbild allein: .bildbox unten setzt width/aspect-
ratio auf derselben Spezifitaet (eine Klasse) und gewinnt als spaeter
notierte Regel sonst automatisch - die Box blieb dadurch bislang die volle
Kachelbreite im 4:3-Format statt eines echten 96x96-Quadrats. Rechtsbündig
sitzt es jetzt ueber .radkopf-row (display:flex; justify-content:space-
between), kein margin-left:auto mehr noetig. */
.bildbox.radbild { width: 96px; height: 96px; aspect-ratio: 1 / 1; }
.bildbox { position: relative; width: 100%; aspect-ratio: 4 / 3; border-radius: 12px; overflow: hidden; }
.bildbox img { display: block; width: 100%; height: 100%; object-fit: cover; }
.bildbox .platzhalter { display: none; position: absolute; inset: 0; }
.bildbox.bild-fehlt img { display: none; }
.bildbox.bild-fehlt .platzhalter { display: flex; }
/* D1: Solange kein Foto vorliegt, bleibt die Bildfläche flach - vorher standen
260 px gestrichelte Leerfläche vor der Reichweite, der wichtigsten Zahl der
App. Mit Foto gilt wieder das volle Seitenverhältnis. */
.bildbox.bild-fehlt.carfix { aspect-ratio: auto; height: 132px; }
.bildbox.bild-fehlt.carfix.klein { height: 120px; }
.szene.bleed:has(.bild-fehlt)::before { display: none; }
.szene.bleed:has(.bild-fehlt) { margin-left: 0; margin-right: 0; }
.szene.bleed:has(.bild-fehlt) .carbox { padding: 0; }
/* A5/C5: kein gestrichelter Rahmen und kein Dateiname mehr - Motivname plus
Aufforderung, die Fläche ist tippbar. */
.platzhalter {
width: 100%; height: 100%;
flex-direction: column; align-items: center; justify-content: center; gap: 7px;
background: var(--shade);
border: 1px solid var(--line);
border-radius: inherit;
color: var(--fg3);
text-align: center;
padding: var(--sp-3);
}
.platzhalter-icon { width: 26px; height: 26px; color: var(--fg3); }
.platzhalter-label { font-size: 13px; letter-spacing: normal; color: var(--fg2); }
.platzhalter-aktion { font-size: 12px; color: var(--fg3); }
.dots { display: flex; gap: 6px; justify-content: center; margin-top: 12px; }
.dots i { width: 5px; height: 5px; border-radius: 50%; background: var(--line-strong); }
.dots i.on { background: var(--red); }
.marke { display: inline-flex; align-items: center; gap: 6px; }
.marke-logo { display: inline-flex; align-items: center; }
.marke-logo img { height: 13px; width: auto; }
.marke-logo .ph { display: none; font-size: 11px; letter-spacing: .06em; text-transform: uppercase; color: var(--fg3); }
.marke-logo.logo-fehlt img { display: none; }
.marke-logo.logo-fehlt .ph { display: inline; }
/* -------------------------------------------------------------- Formulare */
.feld {
display: flex; justify-content: space-between; align-items: center;
gap: var(--sp-4);
padding: 14px 0;
min-height: 56px;
border-bottom: 1px solid var(--line);
}
/* :not(.switch): der Schalter (Tanken/Einstellungen etc.) ist selbst ein
<label class="switch">, kein Textlabel - ohne den Ausschluss erbte er
dieselbe flex:1 1 auto-Regel und zog sich über die ganze Zeilenbreite. */
.feld label:not(.switch) { font-size: 14px; color: var(--fg2); flex: 1 1 auto; min-width: 0; line-height: 1.35; }
/* Eingaben nie breiter als die Kachel: die im Markup gesetzten festen
Breiten (width:132px) bleiben Obergrenze, schrumpfen aber mit. */
.feld input, .feld select, .notiz {
background: var(--tile-2);
border: 1px solid var(--line);
color: var(--fg);
font-family: inherit;
/* Muss >= 16px bleiben: Safari/WKWebView (und damit auch die HA-Companion-App
auf dem iPhone) zoomt die Seite beim Fokussieren automatisch hinein, wenn
das Feld kleiner als 16px gesetzt ist - der Nutzer muss dann nach jedem
Feld von Hand wieder herauszoomen. Vorher standen hier 15px. */
font-size: 16px;
padding: 11px 13px;
border-radius: 12px;
text-align: right;
min-width: 0;
max-width: 100%;
flex: 0 1 auto;
-webkit-appearance: none;
appearance: none;
}
.feld input:focus, .feld select:focus, .notiz:focus { outline: none; border-color: var(--red); }
/* Das AUFGEKLAPPTE <select>-Popup ist Browser-/OS-Chrome, kein Teil des
Seiten-DOMs - color-scheme (siehe :host weiter oben) beeinflusst es nur
teilweise, der Rest bleibt hell. Einzige zuverlaessige Stellschraube:
Chrome (u.a.) rendert die Zeilen im Popup tatsaechlich mit dem hier
gesetzten background-color/color statt Systemfarben - deckende Werte,
var(--tile-2) im Nacht-Theme ist transparent und wuerde durchscheinen. */
.feld select option { background-color: var(--canvas); color: var(--fg); }
/* Pull-down-Button-Optik (Apple HIG): einzelner Abwaerts-Chevron statt des
durch appearance:none oben entfernten nativen Browser-Pfeils. */
.feld select {
padding-right: 30px;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M2.5 4.5l3.5 3.5 3.5-3.5' fill='none' stroke='%238a94a3' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 11px center;
background-size: 10px 10px;
}
:host([data-theme=tag]) .feld select {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M2.5 4.5l3.5 3.5 3.5-3.5' fill='none' stroke='%23666666' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}
.feld > span { flex: 0 1 auto; min-width: 0; }
.mitEinheit { display: inline-flex; align-items: center; gap: var(--sp-2); max-width: 100%; }
.mitEinheit input { min-width: 0; width: 96px; text-align: right; }
.mitEinheit span:last-child { font-size: 13px; color: var(--fg2); }
.druckfeld { width: 58px !important; min-width: 0 !important; }
.notiz { width: 100%; text-align: left; margin-top: 14px; line-height: 1.55; resize: vertical; }
.switch { position: relative; display: inline-block; flex-shrink: 0; width: 46px; height: 27px; }
.switch input { position: absolute; inset: 0; opacity: 0; margin: 0; cursor: pointer; min-width: 0; }
.switch .track {
position: absolute; inset: 0;
background: var(--tile-2);
border: 1px solid var(--line);
border-radius: var(--r-pill);
transition: background .18s;
pointer-events: none;
}
.switch .track::before {
content: ""; position: absolute; left: 2px; top: 1px;
width: 23px; height: 23px; background: #fff; border-radius: 50%;
transition: transform .18s;
}
/* A7: Rot bleibt Akzent und Destruktiv. Der aktive Schalter trägt --fg mit
dunklem Knopf. */
.switch input:checked + .track { background: var(--fg); border-color: var(--fg); }
.switch input:checked + .track::before { transform: translateX(19px); background: var(--canvas); }
/* C3: gemischt geschrieben, 15 px, 48 px hoch. .primaer ist gefüllt,
.aktion allein bleibt die Umriss-Sekundäraktion. */
.aktion {
display: block; width: 100%;
font-family: inherit; font-size: 15px;
letter-spacing: normal;
color: var(--fg);
background: none;
border: 1px solid var(--line-strong);
border-radius: var(--r-pill);
padding: 14px 18px;
min-height: 48px;
margin-top: var(--sp-4);
cursor: pointer;
transition: border-color .15s, background .15s, transform .1s, opacity .15s;
}
.aktion + .aktion, .aktion + label.aktion { margin-top: 10px; }
.aktion:hover { border-color: var(--line-strong); background: var(--shade); }
.aktion:active { transform: scale(.985); background: var(--shade); }
.aktion.primaer { background: var(--fg); border-color: var(--fg); color: var(--canvas); }
.aktion.primaer:hover { opacity: .9; background: var(--fg); }
.aktion.primaer:active { opacity: .8; background: var(--fg); }
.aktion.loeschen { color: var(--bad); border-color: var(--bad); background: none; }
.aktion.loeschen:hover { background: var(--bad); color: #fff; }
.aktion.loeschen:active { background: var(--bad); color: #fff; }
/* C4: eine Bahn mit wanderndem Knopf statt zwei getrennter Umrisspillen. */
.seg {
display: flex; gap: 0;
background: var(--tile-2);
border-radius: var(--r-pill);
padding: 3px;
}
.seg button {
flex: 1;
border: none;
background: none;
color: var(--fg2);
font-family: inherit;
font-size: 14px;
letter-spacing: normal;
padding: 11px 8px;
min-height: 44px;
border-radius: var(--r-pill);
cursor: pointer;
transition: background .18s, color .18s;
}
.seg button.on { background: var(--fg); color: var(--canvas); }
.seg button:active { opacity: .8; }
.pill {
display: inline-flex; align-items: center;
font-size: 12px; letter-spacing: normal;
color: var(--fg2);
background: none;
border: 1px solid var(--line-strong);
border-radius: var(--r-pill);
padding: 6px 12px;
}
/* ------------------------------------------------------------ Akkordeon */
.acc-h {
display: flex; align-items: center; gap: var(--sp-3);
width: 100%;
background: none; border: none;
font-family: inherit; text-align: left;
padding: 15px 0;
min-height: 56px;
cursor: pointer;
border-bottom: 1px solid var(--line);
color: inherit;
}
.acc-h .k { flex: 1; font-size: 15px; color: var(--fg); }
.acc-h .v { font-size: 12.5px; color: var(--fg2); text-align: right; white-space: nowrap; flex: 0 0 auto; }
.acc-h { transition: background .15s; }
.acc-h:active { background: var(--tile-2); }
.mark {
/* Design-Audit 2026-08-13: die Border-Ecken-Technik (zwei Kanten +
45deg-Drehung) braucht ein Quadrat, um einen sauberen Chevron zu
ergeben - bei 6x10px (nicht quadratisch, wie fuer die SVG-Chevrons
.chev/.go gedacht) sind die beiden Kantenlaengen ungleich lang und das
Ergebnis sah eher wie ein Haekchen als ein Pfeil aus. */
width: 8px; height: 8px;
border-right: 1.4px solid var(--fg3);
border-bottom: 1.4px solid var(--fg3);
transform: rotate(-45deg);
transition: transform .15s, border-color .15s;
flex: 0 0 auto;
}
/* A8: ein Chevron, eine Farbe - nur die Drehung zeigt den Zustand. */
.acc-h[aria-expanded=true] .mark { transform: rotate(45deg); }
.acc-b { display: none; }
.acc-b.on { display: block; }
.lvl2 { margin-left: 22px; }
.lvl2 .acc-h .k { font-size: 13px; }
.tile-h {
display: block; width: 100%;
background: none; border: none;
font-family: inherit; text-align: left;
padding: 0; cursor: pointer; color: inherit;
}
.tile-b { display: none; }
.tile-b.on { display: block; }
/* -------------------------------------------------------------- Statistik */
.quad { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--sp-3); margin-top: var(--sp-3); }
.quad .n { display: block; font-family: "Audi Type Wide", var(--font-stack); font-size: 16px; font-weight: 300; color: var(--fg); line-height: 1.2; }
.quad .l { display: block; margin-top: 4px; font-size: 11px; letter-spacing: normal; color: var(--fg3); line-height: 1.3; }
.bar { display: flex; height: 4px; border-radius: var(--r-pill); overflow: hidden; gap: 2px; }
.bar i { display: block; border-radius: var(--r-pill); }
.legend { display: flex; flex-wrap: wrap; gap: var(--sp-3); margin-top: var(--sp-2); font-size: 11px; color: var(--fg2); }
.legend span { display: inline-flex; align-items: center; gap: 6px; }
.legend i { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }
/* -------------------------------------------------------------- Wischen */
.swipe-wrap { position: relative; overflow: hidden; }
/* Der rote Loeschknopf liegt dauerhaft hinter der Zeile. Zeilenhoehen sind
gebrochen (z. B. 66,28 px), dadurch fiel die Kante von .swipe-content nicht
aufs Geraetepixelraster und der rote Knopf blitzte als duenne Linie an den
Zeilenraendern durch - sichtbar als roter Teilrahmen um jede Listenzeile.
Er wird deshalb erst sichtbar, sobald wirklich gewischt wird ("wischt"
waehrend der Geste, "swiped" fuer die offen stehende Zeile). */
.swipe-delete { position: absolute; inset: 0 0 0 auto; width: 84px; display: flex; visibility: hidden; }
.swipe-wrap.wischt .swipe-delete,
.swipe-wrap.swiped .swipe-delete { visibility: visible; }
.swipe-loeschen {
width: 100%;
background: var(--bad); color: #fff; border: none;
font-family: inherit; font-size: 13px;
letter-spacing: normal;
cursor: pointer;
}
.swipe-loeschen:active { filter: brightness(.88); }
.swipe-content { position: relative; background: var(--tile); touch-action: pan-y; transition: transform .18s; }
.swipe-wrap.swiped .swipe-content { transform: translateX(-84px); }
/* -------------------------------------------------------------- Karte */
/* position:relative, damit der Zentrieren-Knopf im Einzelbeleg (absolut
positioniert, siehe .kartensteuerung-klein) sich an dieser Kachel ausrichtet
und nicht am naechsten Vorfahren weiter oben. */
.mapbox { position: relative; border-radius: var(--r-tile); overflow: hidden; height: 210px; background: var(--tile); }
.mapbox #map { width: 100%; height: 100%; }
/* --------------------------------------------------------- Standort
Vorschau-Kachel (Übersicht) + Vollbildansicht + Fahrzeug-Menü. Höhen sind
bewusst fest statt prozentual/vererbt - eine relative Höhe wird von
panel_custom nicht zuverlässig durchgereicht (siehe audi-dashboard-
ios.css-Kommentar zur selben Falle). */
.standort-kachel { padding: 0; overflow: hidden; }
.standort-kachelbtn {
display: block; width: 100%; position: relative;
border: none; padding: 0; margin: 0; background: none; cursor: pointer;
}
.standort-vorschau { width: 100%; height: 190px; background: var(--tile); }
.standort-leer {
position: absolute; inset: 0;
display: flex; align-items: center; justify-content: center;
font-size: 13px; color: var(--fg3); text-align: center; padding: 0 30px;
background: var(--tile);
}
.fahrzeug-pin-wrap { background: none; border: none; }
/* poi-car/poi aus dem CI-Satz sind reine Konturformen (Ring aus zwei
gegenlaeufigen Randlinien + duenne Detaillinien) - eine Pixelprobe ergab
nur 13-40% gefuellte Flaeche in der eigenen Bounding-Box und war auf
Kartenkacheln praktisch unsichtbar (Nutzer-Feedback "Pin ist transparent").
fahrzeugMarkerSVG()/tankstellenMarkerSVG() rendern deshalb zusaetzlich eine
Vollton-Silhouette (CI.*Sil, exakt der aeussere Ballon-Umriss desselben
CI-Pfads, keine Neuzeichnung) als unterste Ebene; die Iconfarbe hier ist
deshalb weiss statt dunkel, damit Umriss und Detaillinien auf der jetzt
massiven Flaeche lesbar bleiben. Feste Farben statt Theme-Variablen, damit
die Nadeln in Tag- und Nachtansicht gleich aussehen. */
.fahrzeug-pin {
display: flex; align-items: center; justify-content: center;
color: #fff;
filter: drop-shadow(0 2px 4px rgba(0,0,0,.4));
}
.user-pin-wrap { background: none; border: none; }
.user-pin {
position: relative; width: 16px; height: 16px; border-radius: 50%;
background: #0A84FF; border: 3px solid #fff;
box-shadow: 0 2px 6px rgba(0,0,0,.3);
}
.user-pin::after {
content: ""; position: absolute; inset: -14px; border-radius: 50%;
background: rgba(10,132,255,.18);
animation: user-pulse 2.4s ease-out infinite;
}
@keyframes user-pulse { 0% { transform: scale(.4); opacity: .9; } 100% { transform: scale(1); opacity: 0; } }
.standort-vollbild { position: relative; height: min(640px, calc(100dvh - 190px)); border-radius: var(--r-tile); overflow: hidden; margin: 0 calc(-1 * var(--seitenrand)); }
.standort-karte { width: 100%; height: 100%; }
.kartensteuerung {
position: absolute; z-index: 400; top: 16px; right: 16px;
display: flex; flex-direction: column; gap: 12px;
}
.kartensteuerung button {
width: 48px; height: 48px; border-radius: 50%;
display: flex; align-items: center; justify-content: center;
background: rgba(16, 20, 26, .84); color: #fff;
border: none; box-shadow: 0 4px 14px rgba(0,0,0,.32);
-webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
cursor: pointer; padding: 0;
}
/* Tag-Theme: helle Kapsel mit dunklem Symbol - die CI-Symbole selbst tragen
fill="currentColor" und folgen der Textfarbe, es gibt keine zweite Datei. */
:host([data-theme="tag"]) .kartensteuerung button {
background: rgba(255,255,255,.92); color: #101418;
box-shadow: 0 4px 14px rgba(0,0,0,.18);
}
.kartensteuerung button:active { transform: scale(.94); }
:host([data-theme="tag"]) .kartensteuerung button:active { background: #fff; }
/* Variante in der Belegkarte: die Karte ist dort nur 210px hoch, ein 48er-
Knopf mit 16px Abstand wuerde ein Viertel davon verdecken. */
.kartensteuerung-klein { top: 10px; right: 10px; }
.kartensteuerung-klein button { width: 36px; height: 36px; }
.kartensteuerung-klein button:disabled { opacity: .45; cursor: default; }
.kartensteuerung-klein button:disabled:active { transform: none; }
/* Sichtbarer Anteil im geschlossenen Zustand (STANDORT_PEEK_PX im Frontend) -
beide Werte müssen zusammenpassen, siehe Kommentar dort. Der Rest des
Blatts wird nach unten geschoben und mit einem Zug nach oben geöffnet. */
.standortmenu {
position: absolute; z-index: 410; left: 0; right: 0; bottom: 0;
--standort-peek: 96px;
/* Deckend, nicht durchscheinend - unter dem Blatt liegt die Karte. */
background: var(--tile-deckend, var(--canvas));
border-radius: var(--r-tile) var(--r-tile) 0 0;
box-shadow: 0 -6px 24px rgba(0,0,0,.35);
padding: 0 20px max(18px, env(safe-area-inset-bottom));
transform: translateY(calc(100% - var(--standort-peek)));
transition: transform .28s cubic-bezier(.22,.61,.36,1);
}
.standortmenu.offen { transform: translateY(0); }
.standortmenu-griffzone { padding: 10px 0 14px; touch-action: none; cursor: grab; position: relative; }
/* Der Griff ist jetzt ein Knopf (Tastaturzugang zum Menue). Die Knopf-
Voreinstellungen des Browsers werden deshalb zurueckgesetzt; die
Trefferflaeche waechst per Pseudo-Element auf 44px, ohne den sichtbaren
Strich zu vergroessern. */
.standortmenu-griff {
position: relative; display: block; width: 36px; height: 4px;
border: 0; padding: 0; border-radius: 2px;
background: var(--line-strong); margin: 0 auto; cursor: pointer;
}
.standortmenu-griff::after {
content: ""; position: absolute; left: 50%; top: 50%;
transform: translate(-50%, -50%); width: 88px; height: 44px;
}
.standortmenu-schliessen {
position: absolute; top: 14px; right: 0; width: 32px; height: 32px; border-radius: 50%;
display: flex; align-items: center; justify-content: center;
background: var(--tile); border: none; color: var(--fg2); cursor: pointer; padding: 0;
}
.standortmenu-kopf { margin-top: 8px; padding-right: 44px; }
.standortmenu-name { font-size: 17px; color: var(--fg); }
.standortmenu-distanz { font-size: 12.5px; color: var(--fg3); margin-top: 4px; }
/* Abstand als leere Zeile zwischen Kopf und Details */
.standortmenu-adresse { font-size: 13.5px; color: var(--fg2); margin-top: 20px; }
.standortmenu-status { display: flex; align-items: center; gap: 9px; margin-top: 8px; font-size: 13.5px; color: var(--fg2); }
.standortmenu-status svg { color: var(--fg3); flex: 0 0 auto; }
.standortmenu-werte { display: flex; align-items: center; gap: 10px; margin-top: 8px; font-size: 13.5px; color: var(--fg2); }
.standortmenu-werte svg { color: var(--fg3); flex: 0 0 auto; }
.standortmenu-aktionen { display: flex; gap: 10px; margin-top: 18px; padding-bottom: 4px; }
/* Beide Pillen folgen der Knopfsprache des restlichen Panels (.aktion /
.aktion.primaer weiter oben): Umriss fuer die Nebenaktion, gefuellt fuer
die Hauptaktion.
Vorher stand hier background: var(--tile) fuer "Teilen" und
background: var(--line-strong) fuer "Route". Beides ging im Tagmodus
schief: das Blatt darunter ist var(--tile-deckend), und die iOS-Auflage
(audi-dashboard-ios.css) setzt im Tagmodus --tile UND --tile-deckend
beide auf #FFFFFF - "Teilen" war damit weiss auf weiss, Kontrast 1,0:1,
also schlicht unsichtbar. --line-strong als Flaeche war ausserdem eine
Linienfarbe in der Rolle einer Fuellung.
Der Umriss haengt jetzt an denselben Tokens wie jeder andere Knopf und
traegt deshalb in beiden Themes und auch unter der iOS-Auflage, ohne dass
hier eine eigene Farbe gepflegt werden muss. */
.standort-pille {
display: inline-flex; align-items: center; justify-content: center; gap: 8px;
height: 40px; padding: 0 20px; border-radius: var(--r-pill);
border: 1px solid var(--line-strong); background: none; color: var(--fg);
font-family: inherit; font-size: 14px; text-decoration: none; cursor: pointer;
}
.standort-pille.primaer {
background: var(--fg); border-color: var(--fg); color: var(--canvas);
}
.standort-pille:active { transform: scale(.97); }
.standort-pille[disabled] { opacity: .4; pointer-events: none; }
/* ------------------------------------------------------- Bilderverwaltung */
.bildmenu-catcher { position: fixed; inset: 0; z-index: 1000; }
.bildmenu {
position: absolute; z-index: 1001;
background: var(--tile-2);
border-radius: 14px;
padding: var(--sp-2);
display: flex; flex-direction: column;
min-width: 160px;
}
.bildmenu.rad { top: 90px; left: 22px; }
/* "Bild der Übersicht": das Vorschaubild füllt die ganze Kachelbreite, seine
Unterkante liegt daher immer nah an der Kachel-Unterkante - das Menü von
dort aus verankern statt mit einem festen top-Wert, der bei jedem
Bildseitenverhältnis neu nachgemessen werden müsste. */
.bildmenu.ansicht { bottom: var(--sp-5); left: 50%; transform: translateX(-50%); }
.bildmenu button {
display: block; width: 100%; text-align: left;
background: none; border: none;
color: var(--fg); font-family: inherit; font-size: 15px;
padding: 13px 10px; min-height: 46px; border-radius: 10px;
cursor: pointer;
}
.bildmenu button:active { background: var(--shade); }
.bildmenu button.loeschen { color: var(--bad); }
.sdpopup {
position: absolute; z-index: 1001;
left: var(--sp-5); right: var(--sp-5); top: 60px;
background: var(--tile-2);
border-radius: 14px;
padding: var(--sp-4);
}
/* Beleg-Fenster: PDF hineinziehen (Rechner) oder einfügen (Telefon). */
.beleg-catcher {
position: absolute; inset: 0; z-index: 1000;
background: rgba(0,0,0,.45);
animation: sheet-fade .18s ease-out;
}
.beleg-popup {
position: absolute; z-index: 1001;
left: var(--sp-5); right: var(--sp-5);
top: 50%; transform: translateY(-50%);
/* Wie .setup-popup: --tile-2 ist im Nacht-Theme transluzent, ein frei
schwebendes Fenster braucht einen blickdichten Grund. */
background: var(--tile-deckend, var(--canvas));
border-radius: var(--r-tile);
padding: var(--sp-4);
}
.beleg-drop {
margin-top: var(--sp-3);
border: 1px dashed var(--line-strong);
border-radius: 14px;
padding: 28px var(--sp-4);
text-align: center;
display: flex; flex-direction: column; gap: 6px;
}
.beleg-drop strong { font-size: 15px; color: var(--fg); }
.beleg-drop span { font-size: 12.5px; color: var(--fg2); }
.beleg-drop.darueber { border-color: var(--fg); border-style: solid; background: var(--shade); }
/* Kopfzeile der Reifen-Kachel: Überschrift+km links, Radfoto rechts, beide
oben bündig - ersetzt die frühere Überlagerung (Montiert absolut über dem
Foto), seit Überschrift und km ihren eigenen Platz über Montiert bekommen
haben. */
.radkopf-row { display: flex; justify-content: space-between; align-items: flex-start; gap: var(--sp-4); }
.radkopf { display: flex; flex-direction: column; }
/* Editier-Symbol links neben der km-Anzeige (Audi-CI edit-s) - oeffnet das
Korrekturfeld fuer den manuell gepflegten Kilometerstand des Reifensatzes.
44x44pt Tippflaeche per unsichtbarem ::before wie bei .montiert/.zahnrad,
optisch bleibt nur das kleine Symbol sichtbar. */
.km-edit {
position: relative;
display: inline-flex; align-items: center; justify-content: center;
width: 22px; height: 22px;
border: none; background: none; color: var(--fg3);
padding: 0; cursor: pointer; flex: 0 0 auto;
}
.km-edit::before { content: ""; position: absolute; inset: -11px; }
.km-edit:hover { color: var(--fg); }
.km-edit:active { color: var(--fg); transform: scale(.92); }
/* Zeile aus einer bearbeitbaren Liste entfernen (z. B. Selbstbeteiligung im
Vertrag) - 44x44pt Tippflaeche per unsichtbarem ::before wie bei .km-edit,
optisch bleibt nur das kleine × sichtbar. */
.zeile-loeschen {
position: relative;
display: inline-flex; align-items: center; justify-content: center;
width: 22px; height: 22px;
border: none; background: none; color: var(--fg3);
font-size: 18px; line-height: 1;
padding: 0; cursor: pointer; flex: 0 0 auto;
}
.zeile-loeschen::before { content: ""; position: absolute; inset: -11px; }
.zeile-loeschen:hover { color: var(--bad); }
.zeile-loeschen:active { color: var(--bad); transform: scale(.92); }
/* Kompakte Pille statt voller Breite (Apple-HIG-Pull-down-Maß): normale
Flusslage unter der Kachel-Überschrift/km, nicht mehr über dem Foto
überlagert (das saß nur dort, solange Überschrift+km diesen Platz noch
nicht beanspruchten). */
.montiert {
position: relative; margin-top: var(--sp-4);
display: inline-flex; align-items: center; justify-content: center;
font-family: inherit; font-size: 12px; letter-spacing: normal;
color: var(--fg2);
background: none;
border: 1px solid var(--line-strong);
border-radius: var(--r-pill);
padding: 7px 13px;
cursor: pointer;
transition: background .15s, color .15s, border-color .15s, transform .1s;
}
/* Optisch bleibt die Pille klein, die Tippflaeche wird per unsichtbarem
Pseudo-Element auf Apple-HIG-Mindestmass 44x44pt gebracht (Klick auf die
Flaeche des ::before zaehlt als Klick auf den echten Button). */
.montiert::before { content: ""; position: absolute; top: -8px; bottom: -8px; left: 0; right: 0; }
.montiert:hover { background: var(--shade); }
.montiert:active { transform: scale(.96); background: var(--shade); }
.montiert.on { background: var(--fg); border-color: var(--fg); color: var(--canvas); }
/* ------------------------------------------------- B4: Action Sheet
Ersetzt confirm()/alert(). Von unten eingeblendet, destruktive Zeile rot,
Abbrechen abgesetzt - iOS-Muster. */
.sheet-catcher {
position: absolute; inset: 0; z-index: 1200;
background: rgba(0,0,0,.45);
animation: sheet-fade .18s ease-out;
}
.sheet {
position: absolute; z-index: 1201;
left: 10px; right: 10px;
bottom: max(10px, env(safe-area-inset-bottom));
display: flex; flex-direction: column; gap: 8px;
animation: sheet-rein .24s cubic-bezier(.22,.61,.36,1);
}
@keyframes sheet-fade { from { opacity: 0 } to { opacity: 1 } }
@keyframes sheet-rein { from { transform: translateY(18px); opacity: 0 } to { transform: none; opacity: 1 } }
.sheet-gruppe {
/* --tile-2 is translucent in the iOS overlay's night theme (rgba white,
meant for tile-on-tile layering) - a confirm sheet sits directly over
whatever page content triggered it, so a see-through card made titles
like "Doppelt zugeordnet" hard to read against the busy background
bleeding through. Same fix already applied to .setup-popup/.standortmenu
for the same reason - opaque surface token, with the --canvas fallback
this file already uses elsewhere for when the (purely additive, in
principle removable) overlay isn't loaded. */
background: var(--tile-deckend, var(--canvas));
border-radius: 16px;
overflow: hidden;
display: flex; flex-direction: column;
}
.sheet-kopf {
padding: 15px 18px 14px;
border-bottom: 1px solid var(--line);
display: flex; flex-direction: column; gap: 4px;
}
.sheet-kopf strong { font-size: 15px; font-weight: 400; color: var(--fg); }
.sheet-kopf span { font-size: 13px; color: var(--fg2); line-height: 1.45; }
.sheet-gruppe button {
background: none; border: none;
font-family: inherit; font-size: 16px;
color: var(--fg);
padding: 16px 18px; min-height: 52px;
text-align: left; cursor: pointer;
border-bottom: 1px solid var(--line);
}
.sheet-gruppe button:last-child { border-bottom: none; }
.sheet-gruppe button:active { background: var(--shade); }
.sheet-gruppe button.loeschen { color: var(--bad); }
.sheet-abbrechen {
background: var(--tile-deckend, var(--canvas)); border: none; border-radius: 16px;
font-family: inherit; font-size: 16px; color: var(--fg);
padding: 16px; min-height: 52px; cursor: pointer;
}
.sheet-abbrechen:active { background: var(--shade); }
/* ------------------------------------------------------- Setup-Popup
Sensor-zu-Entität-Zuordnung (Einstellungen -> Fahrzeug einrichten ->
Setup). Gleiche Catcher/Karten-Bauweise wie .bildmenu/.sdpopup oben,
aber großformatig und scrollbar statt Bottom-Sheet-Größe; nutzt die
bereits vorhandenen sheet-fade/sheet-rein-Keyframes. z-index bewusst
unter .sheet (1200er), damit ein Fehlerhinweis (hinweis()) bei
fehlgeschlagenem Speichern über dem noch offenen Setup-Popup liegt. */
.setup-catcher {
position: absolute; inset: 0; z-index: 1000;
background: rgba(0,0,0,.45);
animation: sheet-fade .18s ease-out;
}
.setup-popup {
position: absolute; z-index: 1001;
left: 10px; right: 10px;
top: max(10px, env(safe-area-inset-top));
bottom: max(10px, env(safe-area-inset-bottom));
/* --tile-2 ist inzwischen transluzent (rgba(255,255,255,.1) im Nacht-
Theme) - fuer ein frei ueber dem Inhalt schwebendes Popup braucht es
einen blickdichten Hintergrund, gleiches Muster wie .standortmenu
oben. */
background: var(--tile-deckend, var(--canvas));
border-radius: var(--r-tile);
display: flex; flex-direction: column;
overflow: hidden;
animation: sheet-rein .24s cubic-bezier(.22,.61,.36,1);
}
.setup-kopf {
flex: 0 0 auto;
padding: 18px 20px 14px;
border-bottom: 1px solid var(--line);
display: flex; flex-direction: column; gap: 4px;
}
.setup-kopf strong { font-size: 17px; font-weight: 400; color: var(--fg); }
.setup-kopf span { font-size: 13px; color: var(--fg2); line-height: 1.45; }
.setup-kopf-schalter { display: flex; align-items: center; gap: 10px; margin-top: 10px; }
.setup-kopf-schalter span { font-size: 13.5px; color: var(--fg); }
.setup-koerper { flex: 1 1 0; min-height: 0; overflow-y: auto; padding: 4px 20px 20px; }
.setup-gruppe { margin-top: 18px; }
.setup-gruppe:first-child { margin-top: 6px; }
.setup-gruppe-titel { font-size: 11px; letter-spacing: .1em; text-transform: uppercase; color: var(--fg3); margin-bottom: 6px; }
.setup-feldzeile { padding: 12px 0; border-bottom: 1px solid var(--line); }
.setup-feldzeile:last-child { border-bottom: none; }
.setup-feld-kopf { display: flex; flex-direction: column; gap: 2px; margin-bottom: 8px; }
.setup-feld-label { font-size: 14.5px; color: var(--fg); }
.setup-feld-hinweis { font-size: 12.5px; color: var(--fg2); line-height: 1.4; }
.setup-feld-neustart { font-size: 12px; color: var(--warn); line-height: 1.4; }
.setup-unterfelder { display: flex; flex-direction: column; gap: 12px; }
.setup-unterfeld { display: flex; flex-direction: column; gap: 4px; }
.setup-unterfeld-label { font-size: 12px; color: var(--fg3); }
.entitaet-combo { position: relative; }
.entitaet-combo-icon {
position: absolute; left: 12px; top: 50%; transform: translateY(-50%);
color: var(--fg3); display: flex; pointer-events: none;
}
.entitaet-combo-input {
width: 100%; box-sizing: border-box;
background: var(--tile-deckend, var(--canvas)); border: 1px solid var(--line); color: var(--fg);
font-family: inherit; font-size: 16px; /* siehe .feld input weiter oben: >=16px gegen Safari-Autozoom */
padding: 11px 34px 11px 36px;
border-radius: 12px;
text-align: left;
-webkit-appearance: none; appearance: none;
}
.entitaet-combo-input:focus { outline: none; border-color: var(--red); }
.entitaet-combo-reset {
position: absolute; right: 8px; top: 50%; transform: translateY(-50%);
width: 26px; height: 26px; display: flex; align-items: center; justify-content: center;
background: none; border: none; color: var(--fg3); cursor: pointer; padding: 0;
}
.entitaet-combo-reset:active { color: var(--fg); }
.entitaet-liste {
position: absolute; z-index: 5; left: 0; right: 0; top: calc(100% + 4px);
max-height: 240px; overflow-y: auto;
background: var(--tile-deckend, var(--canvas)); border: 1px solid var(--line-strong);
border-radius: 12px;
box-shadow: 0 12px 28px rgba(0,0,0,.35);
}
.entitaet-eintrag {
display: flex; flex-direction: column; gap: 1px;
width: 100%; text-align: left;
background: none; border: none; border-bottom: 1px solid var(--line);
color: var(--fg); font-family: inherit;
padding: 9px 12px; cursor: pointer;
}
.entitaet-eintrag:last-child { border-bottom: none; }
.entitaet-eintrag:active, .entitaet-eintrag.aktiv { background: var(--shade); }
.entitaet-eintrag-name { font-size: 14px; color: var(--fg); }
.entitaet-eintrag-id { font-size: 11.5px; color: var(--fg3); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
.entitaet-eintrag-wert { font-size: 11.5px; color: var(--fg2); margin-top: 1px; }
.entitaet-eintrag-wert.unbekannt { color: var(--warn); }
.entitaet-leer { padding: 14px 12px; font-size: 13px; color: var(--fg2); }
.setup-feld-warnung { font-size: 12px; color: var(--warn); line-height: 1.4; margin-top: 6px; }
.setup-fuss {
flex: 0 0 auto;
display: flex; gap: 10px;
padding: 14px 20px max(14px, env(safe-area-inset-bottom));
border-top: 1px solid var(--line);
}
.setup-fuss .aktion { flex: 1; margin-top: 0; }
/* ------------------------------------------------- B3: Push/Pop
Seitenwechsel wie auf iOS: neue Ebene kommt von rechts, zurück geht sie
dorthin. */
.push-rein { animation: push-rein .26s cubic-bezier(.32,.72,0,1); }
.push-raus { animation: push-raus .26s cubic-bezier(.32,.72,0,1); }
@keyframes push-rein { from { transform: translateX(26px); opacity: 0 } to { transform: none; opacity: 1 } }
@keyframes push-raus { from { transform: translateX(-18px); opacity: 0 } to { transform: none; opacity: 1 } }
/* D5: Leerzustand nennt die Ursache und die nächste Handlung. */
.leer { display: flex; flex-direction: column; gap: 8px; padding: 4px 0 2px; }
.leer strong { font-size: 16px; font-weight: 400; color: var(--fg); }
.leer p { margin: 0; font-size: 13.5px; line-height: 1.55; color: var(--fg2); text-wrap: pretty; }
/* B7 */
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after {
animation-duration: .01ms !important;
animation-iteration-count: 1 !important;
transition-duration: .01ms !important;
scroll-behavior: auto !important;
}
}