3b99f1f332
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>
1284 lines
125 KiB
CSS
1284 lines
125 KiB
CSS
@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;
|
||
}
|
||
}
|