- Die eigene Prognose rechnet ab dem letzten Eintrag der jeweiligen Art im Servicebuch neu
+ Die eigene Prognose rechnet ab dem letzten Eintrag der jeweiligen Art im Wartungsplan neu
und nutzt die seither tatsächlich gefahrene Strecke. Sie ersetzt die Meldung des
Fahrzeugs nicht, sondern ergänzt sie.
@@ -196,7 +196,7 @@ export function Service({ geheZu }: { geheZu: (name: SeitenName, id?: string) =>
beiKlick={() => geheZu("werkstatt")}
/>
geheZu("sbuch")}
/>
@@ -324,7 +324,7 @@ export function Servicebuch() {
}
const entfernen = async (index: number) => {
- if (!bestaetigen("Diesen Servicebuch-Eintrag löschen?")) return
+ if (!bestaetigen("Diesen Wartungsplan-Eintrag löschen?")) return
await schreiben(buch.filter((_, i) => i !== index))
}
@@ -397,7 +397,7 @@ export function Servicebuch() {
{buch.length === 0 && !neuOffen && (
setzeNeuOffen(true) }}
/>
diff --git a/companion-app/src/screens/Uebersicht.tsx b/companion-app/src/screens/Uebersicht.tsx
index e741517..6e31f66 100644
--- a/companion-app/src/screens/Uebersicht.tsx
+++ b/companion-app/src/screens/Uebersicht.tsx
@@ -176,7 +176,7 @@ export function Uebersicht({ geheZu }: { geheZu: (name: SeitenName, id?: string)
>
) : (
- kein Eintrag im Servicebuch
+ kein Eintrag im Wartungsplan
)}
diff --git a/companion-app/src/stile/screens.css b/companion-app/src/stile/screens.css
index e86d169..f71f392 100644
--- a/companion-app/src/stile/screens.css
+++ b/companion-app/src/stile/screens.css
@@ -24,6 +24,22 @@
color: var(--fg3);
}
+/* type="date": ohne appearance-Reset behält Safari/WKWebView (die iOS-Hülle
+ dieser App) sein eigenes, stark abgerundetes natives Eingabe-Chrome statt
+ der Box-Optik aus @audi-dash/ui's Feld - beim Nutzer sichtbar als
+ "gestreckter Kreis statt Box" (Reifen.tsx, Wechseltermin). @audi-dash/ui
+ selbst bleibt unangetastet (kein appearance-Reset dort, andere Felder
+ zeigen den Fehler nicht) - der Reset sitzt hier, spezifisch für type=date,
+ höhere Selektor-Spezifität als das geteilte ".ads-feld input" schlägt
+ dessen feste min-width:132px, die hier breiter ist als "27.08.2026"
+ braucht. */
+input[type="date"].dm-eingabe {
+ -webkit-appearance: none;
+ appearance: none;
+ min-width: 0;
+ width: fit-content;
+}
+
/* Eine Zeile aus einer bearbeitbaren Liste (z. B. Selbstbeteiligung im
Vertrag) - zwei Eingaben plus Löschen-Knopf in einer Reihe, deckungsgleich
mit .feld/.zeile-loeschen im Panel (audi-dashboard.css). */
diff --git a/custom_components/audi_dashboard/frontend/audi-dashboard-app.js b/custom_components/audi_dashboard/frontend/audi-dashboard-app.js
index c43ec10..f2aef41 100644
--- a/custom_components/audi_dashboard/frontend/audi-dashboard-app.js
+++ b/custom_components/audi_dashboard/frontend/audi-dashboard-app.js
@@ -116,7 +116,6 @@ function profilZuConfig(p) {
fahrzeuguntertitel: p.fahrzeug.untertitel,
kennzeichen: p.fahrzeug.kennzeichen,
startbild: p.einstellungen.uebersichtsbild,
- version: "1.0",
tankvolumen: p.fahrzeug.tankvolumen_liter,
nachtVon: p.einstellungen.nacht_von,
nachtBis: p.einstellungen.nacht_bis,
@@ -1394,7 +1393,7 @@ function terminText(t) {
const restKmAbs = restKm !== null ? Math.abs(restKm) : null;
const haupt = t.zuerst === "km" && restKm !== null ? "in " + de(restKmAbs) + " km" : dedat(t.datum);
const neben = t.zuerst === "km" ? "voraussichtlich " + dedat(t.kmDatum) + " · " + dedat(t.datum)
- : (t.km !== null ? "in " + de(restKmAbs) + " km" : (t.art === "Hauptuntersuchung" ? "" : "aus dem Servicebuch fortgeschrieben"));
+ : (t.km !== null ? "in " + de(restKmAbs) + " km" : (t.art === "Hauptuntersuchung" ? "" : "aus dem Wartungsplan fortgeschrieben"));
return { haupt, neben, restKm };
}
@@ -1468,7 +1467,7 @@ function vHome() {
`;
if (!t) return `
Nächster Service:
-
kein Eintrag im Servicebuch
+
kein Eintrag im Wartungsplan
${kmZeile}
`;
// naechsterTermin() waehlt bereits ueber alle drei Arten hinweg (Oelwechsel,
@@ -1656,13 +1655,13 @@ function vAudi() {
Aus dem Servicebuch berechnet die App die Fälligkeit von Inspektion, Ölwechsel und Hauptuntersuchung. Der erste Eintrag ist die Grundlage für jede Prognose.
+
Aus dem Wartungsplan berechnet die App die Fälligkeit von Inspektion, Ölwechsel und Hauptuntersuchung. Der erste Eintrag ist die Grundlage für jede Prognose.
Integration-Update
@@ -2958,9 +2954,9 @@ function vReifen() {
` : ""}
-
+
-
+
${feld(k, "marke", "Hersteller")}
@@ -3418,14 +3414,14 @@ function swipeZeile(id, inhaltHtml) {
const LOESCH_TEXT = {
trip: "Fahrt löschen?",
fill: "Tankvorgang löschen?",
- sbuch: "Servicebuch-Eintrag löschen?",
+ sbuch: "Wartungsplan-Eintrag löschen?",
bild: "Foto löschen?",
batt: "Messwert löschen?",
};
const LOESCH_HINWEIS = {
trip: "Die Fahrt wird aus dem Fahrtenbuch entfernt. Das lässt sich nicht widerrufen.",
fill: "Der Tankvorgang und der zugehörige Beleg werden entfernt. Das lässt sich nicht widerrufen.",
- sbuch: "Der Eintrag wird aus dem Servicebuch entfernt. Das lässt sich nicht widerrufen.",
+ sbuch: "Der Eintrag wird aus dem Wartungsplan entfernt. Das lässt sich nicht widerrufen.",
bild: "Das Foto wird vom Server gelöscht. Der Platz bleibt bestehen und kann neu belegt werden.",
batt: "Der Tageseintrag wird aus der Messwertliste entfernt. Das lässt sich nicht widerrufen.",
};
@@ -4077,7 +4073,7 @@ function render() {
else if (route.name === "werkstatt") { head = ["Service", "Autohaus"]; v.innerHTML = vWerkstatt(); }
else if (route.name === "battverlauf") { head = ["Fahrzeug", "Batteriespannung"]; v.innerHTML = vBatterieverlauf(); bvZeichnen(); }
else if (route.name === "battliste") { head = ["Batteriespannung", "Messwerte"]; v.innerHTML = vBatterieliste(); }
- else if (route.name === "sbuch") { head = ["Servicebuch", "Eintrag"]; v.innerHTML = vSbuch(); }
+ else if (route.name === "sbuch") { head = ["Wartungsplan", "Eintrag"]; v.innerHTML = vSbuch(); }
else if (route.name === "standort") { head = ["Fahrzeug", "Standort"]; v.innerHTML = vStandort(); }
else { const t = TABS.find((x) => x.id === route.name); head = [t.eyebrow, t.id === "audi" ? "Mein Audi" : t.title];
v.innerHTML = { audi: vAudi, trips: vTrips, stat: vStat, fuel: vFuel }[route.name](); }
diff --git a/custom_components/audi_dashboard/frontend/audi-dashboard.css b/custom_components/audi_dashboard/frontend/audi-dashboard.css
index 85a8a00..66ddf74 100644
--- a/custom_components/audi_dashboard/frontend/audi-dashboard.css
+++ b/custom_components/audi_dashboard/frontend/audi-dashboard.css
@@ -182,6 +182,12 @@
}
.iconbtn:hover { background: var(--tile-2); color: var(--fg); }
.iconbtn:active { background: var(--tile-2); color: var(--fg); transform: scale(.92); }
+/* "Neue Räder anlegen" auf der Reifen-Seite: bewusst dauerhaft mit
+ sichtbarem Hintergrund statt nur bei Hover/Tap wie .iconbtn sonst - sitzt
+ direkt neben dem gefüllten "Montiert"-Knopf und wirkt ohne eigene Fläche
+ zu unscheinbar, um dort als eigenständiger Knopf erkannt zu werden. */
+.archivbtn { background: var(--tile-2); color: var(--fg2); }
+.archivbtn:hover, .archivbtn:active { color: var(--fg); }
/* 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
@@ -1131,7 +1137,7 @@ button.leaf:active { background: var(--tile-2); }
überlagert (das saß nur dort, solange Überschrift+km diesen Platz noch
nicht beanspruchten). */
.montiert {
- position: relative; margin-top: var(--sp-4);
+ position: relative;
display: inline-flex; align-items: center; justify-content: center;
font-family: inherit; font-size: 12px; letter-spacing: normal;
color: var(--fg2);
diff --git a/custom_components/audi_dashboard/manifest.json b/custom_components/audi_dashboard/manifest.json
index 11d1667..115c350 100644
--- a/custom_components/audi_dashboard/manifest.json
+++ b/custom_components/audi_dashboard/manifest.json
@@ -1,7 +1,7 @@
{
"domain": "audi_dashboard",
"name": "Audi Dashboard",
- "version": "2026.8.27.22",
+ "version": "2026.8.28.1",
"documentation": "https://gitea.nothaft.cloud/paul/audi-app/src/branch/main/README.md",
"issue_tracker": "https://gitea.nothaft.cloud/paul/audi-app/issues",
"codeowners": ["@paul"],