, mit Chevron in der Wertespalte. */
+.dm-wertzeile--knopf {
+ width: 100%;
+ border: 0;
+ background: none;
+ font: inherit;
+ text-align: inherit;
+ color: inherit;
+ cursor: pointer;
+}
+.dm-wertzeile--knopf dd {
+ display: flex;
+ align-items: center;
+ gap: 6px;
+}
+.dm-wertzeile__chevron {
+ color: var(--fg3);
+ font-size: 13px;
+}
+
.dm-fussnote {
margin: var(--sp-3) 0 0;
font-size: 11.5px;
@@ -465,60 +577,12 @@ input[type="date"].dm-eingabe {
/* ------------------------------------------------------ Fahrzeugstatus */
-.dm-pruefliste {
- list-style: none;
- margin: var(--sp-3) 0 0;
- padding: 0;
-}
-
-.dm-pruefliste__zeile {
- display: flex;
- align-items: center;
- gap: var(--sp-3);
- padding: 10px 0;
- border-bottom: 1px solid var(--line);
-}
-
-.dm-pruefliste__zeile:last-child {
- border-bottom: 0;
-}
-
-.dm-pruefliste__label {
- flex: 1;
- font-size: 14px;
- font-weight: 300;
-}
-
-.dm-pruefliste__wert {
- font-size: 12.5px;
- font-weight: 300;
- color: var(--fg2);
-}
-
-.dm-punkt {
- flex: none;
- width: 9px;
- height: 9px;
- border-radius: 50%;
-}
-
-.dm-punkt--ok {
- background: var(--ok);
-}
-
-.dm-punkt--offen {
- background: var(--bad);
-}
-
-/* Unbekannt bewusst als hohler Ring: sichtbar anders als grün und als rot,
- damit "keine Meldung" nie wie eine Aussage aussieht. */
-.dm-punkt--unbekannt {
- border: 1.5px solid var(--fg3);
-}
-
/* Kreis-Häkchen für die vier Sammelzeilen der Sicherheit-Seite - Zustand ist
- so schon am Symbol erkennbar, nicht nur an der Farbe (siehe .dm-punkt
- oben, das bleibt für die Detailliste unverändert). */
+ so schon am Symbol erkennbar, nicht nur an der Farbe. Die Detailliste
+ "Türen und Klappen" (TuerenKlappen.tsx) verwendet stattdessen die
+ gewöhnliche .dm-wertzeile-Zeile mit dem einfachen @audi-dash/ui .ads-dot -
+ deckungsgleich mit dem Panel, dessen vTuerenKlappen() ebenfalls den
+ schlichten Punkt statt des Kreis-Häkchens zeigt. */
.dm-statuskreis {
flex: none;
width: 22px;
@@ -558,6 +622,21 @@ button.dm-sicherheitszeile:active { background: var(--tile-2); }
.dm-sicherheitszeile__text { flex: 1; font-size: 14.5px; }
.dm-sicherheitszeile__chev { margin-left: auto; flex: none; color: var(--fg3); }
+/* Sammelzeile über den vier Sicherheitszeilen - deckungsgleich mit dem
+ obersten Kasten in vSicherheit() (style="display:flex;align-items:center;
+ gap:12px;padding:16px 20px"), dasselbe Kreis-Häkchen-Symbol wie die Zeilen
+ darunter, keine Zeitangabe. */
+.ads-tile.dm-sicherheitssammel {
+ display: flex;
+ align-items: center;
+ gap: 12px;
+ padding: 16px 20px;
+}
+.dm-sicherheitssammel span {
+ font-size: 15px;
+ color: var(--fg);
+}
+
/* ------------------------------------------------------------ Galerie */
.dm-galerie {
@@ -666,6 +745,14 @@ button.dm-listenzeile {
letter-spacing: -0.02em;
}
+/* Einzelfahrt/Einzelbeleg: das Panel zeichnet die Distanz- bzw. Liter-Zahl in
+ vTrip()/dem Tankvorgang-Detail eigens bei 52px (style="font-size:52px"),
+ größer als die übrigen Detailseiten mit ihrer gemeinsamen 40px-.fig - kein
+ Versehen, sondern die Hauptzahl der jeweiligen Seite. */
+.dm-detail__zahl--gross {
+ font-size: 52px;
+}
+
.dm-detail__einheit {
font-size: 15px;
color: var(--fg2);
@@ -795,6 +882,103 @@ button.dm-listenzeile {
margin-top: var(--sp-4);
}
+/* Ausklappbares Korrekturfeld (Anzugsmoment/Reifenkilometer) - deckungsgleich
+ mit dem entsprechenden Block im Panel (margin-top:14-18px, Trennlinie
+ darüber). */
+.dm-bearbeiten-block {
+ margin-top: var(--sp-4);
+ padding-top: var(--sp-4);
+ border-top: 1px solid var(--line);
+}
+
+/* Reifen-Kachel: Kopfzeile aus Überschrift+km links, Radfoto rechts, beide
+ oben bündig - deckungsgleich mit .radkopf-row/.radkopf/.tile-headline im
+ Panel. */
+.dm-radkopf-row {
+ display: flex;
+ justify-content: space-between;
+ align-items: flex-start;
+ gap: var(--sp-4);
+}
+.dm-radkopf {
+ display: flex;
+ flex-direction: column;
+}
+.dm-tile-headline {
+ font-size: 20px;
+ letter-spacing: -0.01em;
+ line-height: 1.2;
+ color: var(--fg);
+ display: block;
+}
+.dm-reifenzeile {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ margin-top: 14px;
+}
+.dm-reifenzeile .ads-icon-button {
+ width: 24px;
+ height: 24px;
+ color: var(--fg3);
+}
+.dm-reifenzeile .ads-icon-button svg {
+ width: 16px;
+ height: 16px;
+}
+.dm-radfoto .ads-bildbox {
+ width: 96px;
+ height: 96px;
+ aspect-ratio: 1 / 1;
+}
+
+/* Kompakte Pille (Montiert) statt voller Breite - deckungsgleich mit
+ .montiert/.montiert.on im Panel. */
+.dm-montiert-reihe {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-top: var(--sp-4);
+}
+.dm-montiert {
+ position: relative;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ 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;
+}
+.dm-montiert::before {
+ content: "";
+ position: absolute;
+ top: -8px;
+ bottom: -8px;
+ left: 0;
+ right: 0;
+}
+.dm-montiert:active {
+ transform: scale(0.96);
+}
+.dm-montiert--an {
+ background: var(--fg);
+ border-color: var(--fg);
+ color: var(--canvas);
+}
+.dm-archivbtn {
+ background: var(--tile-2);
+ color: var(--fg2);
+}
+.dm-archivbtn:hover,
+.dm-archivbtn:active {
+ color: var(--fg);
+}
+
.dm-waehlen {
display: flex;
flex-wrap: wrap;
@@ -836,14 +1020,18 @@ button.dm-listenzeile {
}
/* Der Zusatz neben dem Typenschild darf umbrechen — abgeschnittener Text mit
- Auslassungspunkten sieht nach Fehler aus, ein Umbruch nicht. */
+ Auslassungspunkten sieht nach Fehler aus, ein Umbruch nicht. Größe/Farbe
+ deckungsgleich mit ".badge .zusatz" im Panel (13px, var(--fg2), nicht
+ kursiv) - war hier 19px, geerbt von der (falschen) "ads-title"-Klasse am
+ Umschließer (Parität-Audit 2026-08-30). */
.dm-szene__zusatz {
min-width: 0;
white-space: normal;
overflow: visible;
text-overflow: clip;
- font-size: 19px;
- line-height: 1.2;
+ font-size: 13px;
+ line-height: normal;
+ color: var(--fg2);
}
/* Die Galerie richtet sich nach der festen Kachelbreite der Bibliothek (78px),
@@ -854,3 +1042,265 @@ button.dm-listenzeile {
justify-content: space-between;
gap: var(--sp-3);
}
+
+/* ---------------------------------------------------------------- Standort
+ Live-GPS-Position des Fahrzeugs — deckungsgleich mit .standort-kachel/
+ .standort-vollbild/.standortmenu im Panel (audi-dashboard.css). War bis
+ 2026-08-29 komplett unportiert (Parität-Audit). */
+.dm-standort-kachelbtn {
+ display: block;
+ width: 100%;
+ position: relative;
+ border: none;
+ padding: 0;
+ margin: 0 0 var(--sp-3);
+ background: none;
+ cursor: pointer;
+ border-radius: var(--r-tile);
+ overflow: hidden;
+}
+.dm-standort-vorschau {
+ width: 100%;
+ height: 190px;
+ background: var(--tile);
+}
+.dm-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);
+}
+
+.dm-fahrzeug-pin-wrap,
+.dm-user-pin-wrap {
+ background: none;
+ border: none;
+}
+.dm-fahrzeug-pin {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ color: #fff;
+ filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.4));
+}
+.dm-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, 0.3);
+}
+.dm-user-pin::after {
+ content: "";
+ position: absolute;
+ inset: -14px;
+ border-radius: 50%;
+ background: rgba(10, 132, 255, 0.18);
+ animation: dm-user-pulse 2.4s ease-out infinite;
+}
+@keyframes dm-user-pulse {
+ 0% {
+ transform: scale(0.4);
+ opacity: 0.9;
+ }
+ 100% {
+ transform: scale(1);
+ opacity: 0;
+ }
+}
+
+/* Füllt die verfügbare Höhe der Seite, statt bei 640px zu kappen und darunter
+ leeren, mit dem geschlossenen Blatt verwechselbaren Seitenhintergrund
+ stehen zu lassen (Nutzerbericht "Standort Slide Up ist leer" - der Inhalt
+ fehlte nicht, er saß nur unterhalb der Kappungsgrenze in leerem Weiß).
+ `.dm-inhalt > *{flex:none}` (rahmen.css) gilt für jede andere Seite zu
+ Recht - hier gezielt aufgehoben, die einzige Seite ohne weiteren Inhalt
+ unter einer einzelnen großen Fläche. */
+.dm-inhalt > .dm-standort-vollbild {
+ flex: 1 1 auto;
+}
+.dm-standort-vollbild {
+ position: relative;
+ min-height: 400px;
+ border-radius: var(--r-tile);
+ overflow: hidden;
+ margin: 0 calc(-1 * var(--sp-5));
+}
+.dm-standort-karte {
+ width: 100%;
+ height: 100%;
+}
+
+.dm-kartensteuerung {
+ position: absolute;
+ z-index: 400;
+ top: 16px;
+ right: 16px;
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+}
+.dm-kartensteuerung button {
+ width: 48px;
+ height: 48px;
+ border-radius: 50%;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background: rgba(16, 20, 26, 0.84);
+ color: #fff;
+ border: none;
+ box-shadow: 0 4px 14px rgba(0, 0, 0, 0.32);
+ -webkit-backdrop-filter: blur(10px);
+ backdrop-filter: blur(10px);
+ cursor: pointer;
+ padding: 0;
+}
+[data-theme="tag"] .dm-kartensteuerung button {
+ background: rgba(255, 255, 255, 0.92);
+ color: #101418;
+ box-shadow: 0 4px 14px rgba(0, 0, 0, 0.18);
+}
+.dm-kartensteuerung button:active {
+ transform: scale(0.94);
+}
+
+.dm-standortmenu {
+ position: absolute;
+ z-index: 410;
+ left: 0;
+ right: 0;
+ bottom: 0;
+ --dm-standort-peek: 96px;
+ background: var(--canvas);
+ border-radius: var(--r-tile) var(--r-tile) 0 0;
+ box-shadow: 0 -6px 24px rgba(0, 0, 0, 0.35);
+ padding: 0 20px max(18px, env(safe-area-inset-bottom));
+ transform: translateY(calc(100% - var(--dm-standort-peek)));
+ transition: transform 0.28s cubic-bezier(0.22, 0.61, 0.36, 1);
+}
+.dm-standortmenu--offen {
+ transform: translateY(0);
+}
+.dm-standortmenu__griffzone {
+ padding: 10px 0 14px;
+ position: relative;
+}
+.dm-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;
+}
+.dm-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;
+}
+.dm-standortmenu__kopf {
+ margin-top: 8px;
+ padding-right: 44px;
+}
+.dm-standortmenu__name {
+ font-size: 17px;
+ color: var(--fg);
+}
+.dm-standortmenu__distanz {
+ font-size: 12.5px;
+ color: var(--fg3);
+ margin-top: 4px;
+}
+.dm-standortmenu__adresse {
+ font-size: 13.5px;
+ color: var(--fg2);
+ margin-top: 20px;
+}
+.dm-standortmenu__status {
+ display: flex;
+ align-items: center;
+ gap: 9px;
+ margin-top: 8px;
+ font-size: 13.5px;
+ color: var(--fg2);
+}
+.dm-standortmenu__status svg {
+ color: var(--fg3);
+ flex: none;
+}
+.dm-standortmenu__punkt {
+ width: 8px;
+ height: 8px;
+ border-radius: 50%;
+ background: var(--ok);
+ flex: none;
+}
+.dm-standortmenu__werte {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ margin-top: 8px;
+ font-size: 13.5px;
+ color: var(--fg2);
+}
+.dm-standortmenu__werte svg {
+ color: var(--fg3);
+ flex: none;
+}
+.dm-standortmenu__aktionen {
+ display: flex;
+ gap: 10px;
+ margin-top: 18px;
+ padding-bottom: 4px;
+}
+.dm-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-size: 14px;
+ text-decoration: none;
+ cursor: pointer;
+}
+.dm-standort-pille--primaer {
+ background: var(--fg);
+ border-color: var(--fg);
+ color: var(--canvas);
+}
+.dm-standort-pille:active {
+ transform: scale(0.97);
+}
+.dm-standort-pille:disabled {
+ opacity: 0.4;
+ pointer-events: none;
+}
diff --git a/companion-app/src/symbole.tsx b/companion-app/src/symbole.tsx
index c73b0d4..0682ffc 100644
--- a/companion-app/src/symbole.tsx
+++ b/companion-app/src/symbole.tsx
@@ -54,11 +54,18 @@ export function SymbolUebersicht({ groesse }: SymbolProps) {
)
}
+// Wagen von vorn - dasselbe Symbol wie in der myAudi-App (Audi-Symbolsatz),
+// dasselbe Pfad wie ICONS.audi im Panel. Fläche statt Kontur (voll), wie dort
+// (siehe ICONS_VOLL). War hier bis 2026-08-29 ein grobes Platzhalter-Viereck -
+// nie durch das echte Symbol ersetzt worden (gefunden beim Parität-Audit).
export function SymbolAudi({ groesse }: SymbolProps) {
return (
}
+ voll
+ kinder={
+
+ }
/>
)
}
@@ -238,6 +245,23 @@ export function SymbolInspektion({ groesse }: SymbolProps) {
)
}
+// edit-s aus dem Audi-CI-Icon-Satz (vom Nutzer als SVG geliefert, verbatim
+// übernommen wie oil-change-s/inspection-s oben) - für den km-Korrektur-
+// Stift bei Anzugsmoment/Reifenkilometern (Vorlage: CI.editS im Panel).
+export function SymbolEdit({ groesse }: SymbolProps) {
+ return (
+
+ }
+ />
+ )
+}
+
export function SymbolWarnung({ groesse }: SymbolProps) {
return (
',
planRoute: '
',
upload: '
',
- fuelRange: '
',
parking: '
',
/* battery-12v-l/-s aus dem Audi-CI-Icon-Satz (vom Nutzer als SVG geliefert,
verbatim uebernommen) - l im 48er-, s im 24er-Grid wie poi-l/poi-s. */
@@ -1142,7 +1141,7 @@ function vStandort() {
: `${ciSVG(CI.parking)}
${zustand.seitTs != null ? "Geparkt seit " + dauerSeitText(zustand.seitTs) : "Fahrzeug steht"}`}