Dark Mode: folgt dem System, mit Umschalter

Drei Zustaende in der Kopfzeile — System, Hell, Dunkel. Drei statt zwei, weil
ein reiner Ein/Aus-Schalter nach dem ersten Klick fuer immer eine feste Wahl
bedeutet; wer "System" waehlt, bekommt abends dunkel und morgens hell.

Umgesetzt ueber `light-dark()` im CSS, nicht ueber `dark:`-Klassen. Die
Oberflaeche benutzt an rund 440 Stellen feste Farbklassen; jede davon zu
verdoppeln waere eine riesige Fleissarbeit, und jede kuenftige Zeile muesste
daran denken. Stattdessen entscheiden die Farbvariablen selbst, welchen Wert
sie tragen — gesteuert ueber `color-scheme`. Deshalb genuegt fuer den
Umschalter ein Attribut am html-Element, und die Systemwahl funktioniert
sogar ohne JavaScript. Das Skript im Kopf setzt nur eine ausdrueckliche Wahl,
damit die helle Fassung nicht kurz aufblitzt.

Zwei Faelle liessen sich nicht ueber Variablen loesen: `bg-white` muss im
Dunkeln eine dunkle Flaeche sein, `text-white` dagegen weiss bleiben — beide
teilen sich aber dieselbe Variable. Fuer Flaechen gibt es deshalb jetzt
`bg-surface`. Ebenso brauchen Akzent-Links im Dunkeln eine hellere Stufe als
Akzent-Knoepfe: dafuer `text-accent-text` und `bg-accent-soft`.

Bewusst unveraendert bleiben die QR-Codes selbst — deren Farben legt die
Gestaltung fest.

Die dunklen Werte sind keine Spiegelung: Reines Schwarz unter weisser Schrift
flimmert. Alle Textkontraste sind gemessen und liegen ueber 4,5:1, der
niedrigste bei 5,9:1.
This commit is contained in:
Florian Wilde
2026-08-16 09:09:10 +02:00
parent 4046b72626
commit b828f38ca5
32 changed files with 332 additions and 67 deletions
+32 -1
View File
@@ -368,7 +368,38 @@ der Stufe 600 steht weiße Schrift. Käme die Helligkeit aus der Eingabe, würde
ein helles Gelb die Kopfzeile unlesbar machen — so bleibt jeder Farbton
benutzbar.
**Auf den Landingpages** gelten Farbe und Favicon, aber weder Logo noch
### Hell und dunkel
Die Anwendung folgt von sich aus der Einstellung des Betriebssystems. In der
Kopfzeile steht ein Umschalter mit drei Zuständen:
| | |
| --- | --- |
| **System** | folgt dem Betriebssystem — abends dunkel, morgens hell |
| **Hell** | immer hell |
| **Dunkel** | immer dunkel |
Drei statt zwei, weil ein reiner Ein/Aus-Schalter nach dem ersten Klick für
immer eine feste Wahl bedeutet. Die Wahl merkt sich der Browser; ein zweiter
Tab zieht automatisch nach.
**Wie es umgesetzt ist.** Nicht über `dark:`-Klassen — die hätten an rund 440
Stellen ergänzt werden müssen, und jede neue Zeile müsste daran denken.
Stattdessen entscheidet `light-dark()` im CSS, welchen Wert die Farbvariablen
tragen; gesteuert wird das über `color-scheme`. Deshalb genügt für den
Umschalter ein Attribut am `<html>`-Element — und die Systemwahl funktioniert
sogar **ohne JavaScript**.
Die dunklen Werte sind keine Spiegelung der hellen: Reines Schwarz unter
weißer Schrift flimmert. Die Flächen liegen bei 20–26 % Helligkeit im selben
leicht blauen Ton wie die helle Reihe. Alle Textkontraste liegen über der
Anforderung von 4,5:1 — gemessen, nicht geschätzt.
Unverändert bleiben die QR-Codes selbst. Deren Farben legt die Gestaltung
fest, und ein Code, der hell gedruckt wird, soll in der Vorschau nicht anders
aussehen.
**Auf den Landingpages** gelten Farbe, Favicon und das Farbthema, aber weder Logo noch
Navigation. Wer einen Aushang scannt, soll die Seite des Inhalts sehen, nicht
die einer Verwaltungssoftware. Ein Logo je Gruppe auf den Landingpages steht
als eigener Punkt auf der [Roadmap](roadmap.md).
+6
View File
@@ -68,6 +68,12 @@ Name, Logo, Favicon und Akzentfarbe im Admin-Bereich einstellbar. Die Farbe
wirkt über die Farbvariablen, die Tailwind ohnehin benutzt — deshalb ohne
Umbau der rund 60 eingefärbten Stellen.
### Dark Mode (16.08.2026)
Folgt dem Betriebssystem, mit Umschalter für Hell, Dunkel und System.
Umgesetzt über `light-dark()` statt über `dark:`-Klassen — deshalb ohne
Änderung an den rund 440 Farbklassen und ohne JavaScript für die Systemwahl.
### Dokumentation (15.08.2026)
Bedienungsanleitung mit Bildern, Authentik-Anleitung, Funktionsübersicht.