Musterseite verworfen, Zahnrad-Regression behoben, Fotomenue als Aktionsblatt

Musterseite entfernt (companion-app/muster, vite.muster.config.ts,
/config/www/dmmuster). Ansage des Eigentuemers: sie fuehrt nur zu neuen
Fehlerquellen. Ausloeser war ein Befund, den ich als App-Fehler gemeldet hatte
- Ringe und Typenschild schwarz auf schwarz - und der nur dort bestand.

Behoben:

* Das Zahnrad im Autohaus-Kasten hatte seine Ecke verlassen (58/288 statt
  8/8). Ursache war mein HIG-Durchgang von gestern: .zahnrad kam in die
  Gruppe fuer die 44x44-Trefferflaeche und bekam damit position:relative,
  was das absolute aus dem Basisblatt ueberschrieb. Die Auflage war
  ueberfluessig - .zahnrad ist dort schon 44x44.
* Das Fotomenue hing mit position:absolute an der Kachel statt am
  Bildschirm und lag bei der hohen Raeder-Kachel ausserhalb des Sichtfelds;
  einen Abbrechen-Knopf hatte es nie. Das Panel benutzt jetzt dasselbe
  Aktionsblatt wie die App. .bildmenu ist samt Zustand, Markup, totem
  Handler und CSS entfernt.
* Der Blattkopf las sich als dritte Auswahl (linksbuendig, 15px, --fg).
  Jetzt zentriert, 13px, gedaempft - Apples Muster, in beiden Codebasen.
* "Anstehende Termine" stand 5px ueber "Oelwechsel" und wirkte als dessen
  Beischrift. Entfernt.
* Wartungsplan-Formular: Art nach oben, Datum 124px statt Browser-Vorgabe,
  Werkstatt ueber die volle Zeile (218 -> 306px), Kosten 116px. Zwei
  Erklaertexte entfernt.
* Thema folgt jetzt einer Systemumstellung im laufenden Betrieb. Vorher las
  es prefers-color-scheme genau einmal beim Laden. Drei Tests, die ohne die
  Behebung nachweislich fallen.

Geprueft: 295 App-Tests, Panel node --check, 0 Tracebacks, alle Aenderungen
live an der Testinstanz gemessen.

Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
2026-09-05 02:24:08 +02:00
co-authored by Claude Opus 5
parent 863284e540
commit e9c16325cc
16 changed files with 2674 additions and 2467 deletions
+35
View File
@@ -68,6 +68,16 @@ function einstellung<T>(
return {
stand: () => wert,
/** Ob überhaupt etwas in der Ablage steht - also eine bewusste Wahl. */
gewaehlt: () => ablageLesen(schluessel) !== null,
/* Setzt den gehaltenen Wert, OHNE ihn zu speichern. Für Werte, die dem
System folgen, solange niemand selbst gewählt hat: eine Systemumstellung
ist keine Entscheidung des Nutzers und darf deshalb keine ablegen. */
ausSystem: (neu: T) => {
if (neu === wert) return
wert = neu
for (const bei of horcher) bei()
},
horchen: (bei: () => void) => {
horcher.add(bei)
return () => horcher.delete(bei)
@@ -95,6 +105,31 @@ const THEMA = einstellung<Theme>(
(wert) => wert,
)
/* Systemumstellung im laufenden Betrieb nachziehen.
Der Startwert oben liest `prefers-color-scheme` genau einmal, beim Laden des
Moduls. Stellt das Gerät danach um - etwa durch die automatische Umschaltung
bei Sonnenuntergang -, folgte das Stylesheet sofort (es hängt selbst an der
Medienabfrage), der React-Zustand aber nie. Alles, was sein Bild aus
`useTheme()` wählt statt aus CSS, blieb damit auf der alten Fassung stehen:
die Vier Ringe und das Typenschild sind `<img>` mit eingebettetem SVG und
je einer hellen und einer dunklen Fassung (siehe VierRinge in
Typenschild.tsx). Auf dunklem Grund stand dann die dunkle Fassung - schwarz
auf schwarz, vom Eigentümer am 05.09.2026 gemeldet. Ein Neuladen räumte es
auf, weshalb es sprunghaft wirkte.
Nur solange niemand selbst gewählt hat: eine gespeicherte Wahl in
"Einstellungen" bleibt unangetastet. */
if (typeof window !== "undefined" && typeof window.matchMedia === "function") {
const dunkel = window.matchMedia("(prefers-color-scheme: dark)")
const nachziehen = () => {
if (THEMA.gewaehlt()) return
THEMA.ausSystem(dunkel.matches ? "nacht" : "tag")
}
if (typeof dunkel.addEventListener === "function") dunkel.addEventListener("change", nachziehen)
else if (typeof dunkel.addListener === "function") dunkel.addListener(nachziehen)
}
const TABBESCHRIFTUNG = einstellung<boolean>(
"dm360.tabbeschriftung",