Neustart-Festhaenger, OTA-Pruefsumme, Statistik-Kopfzahl (2026.8.31.4)

Die App blieb nach einem Neustart von Home Assistant auf dem alten Stand
stehen, mit einer 502-Fehlerzeile, die erst ein Beenden der App wegbekam.
Zwei Ursachen: 502/503/504 galten als harter Ladefehler statt als "Server
faehrt gerade hoch", und nach dem Wiederverbinden wurde genau einmal
nachgeladen - schlug das fehl, kam nie wieder ein Versuch. Beides behoben,
vier Regressionstests dazu.

OTA: das Buendel ist von HEAD ueber die Platte bis zu den ausgelieferten
Bytes nachweislich deckungsgleich. Die Fassung haengt jetzt trotzdem als
?v= an der Adresse (der statische Pfad kommt ohne Cache-Control, aber mit
ETag), und ein Pruefsummenfehler wird erklaert statt durchgereicht.

Statistik: der Gesamtwert steht jetzt als grosse Zahl in der Kopfzeile,
darunter bleiben vier Spalten - fuenf passen auf dem Telefon nachweislich
nicht in eine Zeile.

Fahrzeugfoto ohne Beschnitt und ohne Bodenschatten, damit auch ohne den
Schalter dafuer. Setup filtert zusaetzlich nach dem Signalnamen aus dem
Katalog.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-31 15:35:56 +02:00
parent 4af38d7e65
commit 90efcc5b00
19 changed files with 565 additions and 161 deletions
@@ -596,30 +596,27 @@ button.leaf:active { background: var(--tile-2); }
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;
/* 26/96 statt 42/78: der Verlauf soll die harte Bildkante ausblenden,
nicht das Fahrzeug. Mit 42% Hoehe und Vollton ab 78% war das untere
Drittel des Fotos praktisch einfarbig - Raeder und Schweller lagen
darunter (gemeldet vom Eigentuemer, 2026-08-31). */
height: 26%;
background: linear-gradient(to bottom, transparent, var(--canvas) 96%);
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%); }
/* Der Ausblend-Verlauf und der Bodenschatten sind am 2026-08-31 entfallen.
Beide lagen ueber dem unteren Teil des Fotos, und der Eigentuemer hat
zweimal darum gebeten, das Fahrzeug unverdeckt zu sehen. Zurueckholen
waere ein linear-gradient auf .szene.bleed::before bzw. ein
radial-gradient auf .szene.strasse::after - beides steht in der
Versionsgeschichte. */
.carbox { position: relative; }
.carfix { width: 100%; aspect-ratio: 16 / 9; }
.carfix.klein { aspect-ratio: 16 / 8; }
/* Das Fahrzeugfoto wird nicht mehr beschnitten.
Gemessen am echten Foto (2026-08-31): es ist 2000x1125 gross, also 16:9.
Der Kasten stand auf 16:8 - bei object-fit:cover wurde das Bild auf die
Kastenbreite skaliert und oben wie unten je ein Viertel abgeschnitten
(796x220 Kasten, 796x448 skaliertes Bild). Das Dach lag darin.
Statt das Seitenverhaeltnis auf 16:9 festzuschreiben - was beim naechsten
Foto in einem anderen Format wieder schneiden wuerde - bestimmt jetzt das
Bild selbst die Hoehe. Der Platzhalter behaelt sein festes Verhaeltnis,
er hat ja keines von sich aus. */
.bildbox.carfix.klein { aspect-ratio: auto; height: auto; }
img.carfix.klein { aspect-ratio: auto; height: auto; }
/* 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. */
@@ -890,7 +887,23 @@ button.leaf:active { background: var(--tile-2); }
nebeneinander: bei 307px Innenbreite blieben je 51px, und "209.177" braucht
bei 16px Audi Type Wide rund 60. auto-fit bricht deshalb um - auf dem Telefon
drei plus zwei, auf einem breiten Bildschirm alle fuenf in einer Reihe. */
.quad { display: grid; grid-template-columns: repeat(auto-fit, minmax(84px, 1fr)); gap: var(--sp-3); margin-top: var(--sp-3); }
/* Vier feste Spalten - Jahr, Monat, Woche, Tag muessen in EINE Zeile passen.
Vorher stand hier repeat(auto-fit, minmax(84px, 1fr)). Auf dem Telefon ist
die Kachel innen 307px breit, damit passten bei 12px Abstand nur drei
Spalten (3 x 84 + 2 x 12 = 276; vier waeren 372) - die vierte rutschte in
eine zweite Zeile.
Mit vier festen Spalten bleiben 67,75px je Spalte. Der laengste realistisch
vorkommende Wert ist ein sechsstelliger Kilometerstand wie "209.177": am
laufenden Panel gemessen 67px in Audi Type Wide 300 bei 16px. Es passt
also, aber ohne Reserve - eine fuenfte Spalte gaebe es nur mit kleinerer
Schrift, und genau deshalb steht der Gesamtwert jetzt in der Kopfzeile der
Kachel statt in einer eigenen Spalte.
Bewusst kein white-space:nowrap: waere ein Wert doch einmal breiter,
umbricht er innerhalb seiner Spalte, statt aus der Kachel zu laufen. */
.quad { display: grid; grid-template-columns: repeat(4, minmax(0, 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; }