feat(design): neues Theme Aura (hell Sunshine, dunkel Mond)

Sonne bzw. Mond in der Ecke oben rechts der Leiste, dahinter ziehen
Wolken in zwei Lagen langsam von links nach rechts (reines CSS, nahtlose
Kacheln). Im hellen Modus fallen alle 16-24 s zwei bis drei
Sonnenstrahlen diagonal ueber den Bildschirm. Bernstein bei Tag,
Lavendel und Sterne bei Nacht. Bei prefers-reduced-motion still.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Sascha Wolf
2026-09-17 18:49:45 +02:00
co-authored by Claude Opus 5
parent 5cdc42002a
commit 3c56cf8361
15 changed files with 497 additions and 15 deletions
+26 -3
View File
@@ -138,7 +138,7 @@ Die Darstellung hat **zwei unabhängige Achsen**, beide als Klasse am `<html>`:
| Achse | Klasse | Werte |
| --- | --- | --- |
| Farbwelt | `theme-perinco`, `theme-pixel`, `theme-outdoor`, `theme-cyberpunk`, `theme-rainy`, `theme-snow` | perinco ist der Standard |
| Farbwelt | `theme-perinco`, `theme-pixel`, `theme-outdoor`, `theme-cyberpunk`, `theme-rainy`, `theme-snow`, `theme-aura` | perinco ist der Standard |
| Modus | `dark` bzw. keine | hell, dunkel, oder der Systemeinstellung folgen |
`src/index.css` tauscht darin nur Variablenwerte: `canvas`, `surface`, `ink-*`,
@@ -212,9 +212,9 @@ Das ist kein Umweg, sondern erledigt zwei Dinge zugleich:
> nur Licht - über Dunkel leuchtet das Neon, über Weiss bleiben blasse farbige
> Linien. Wer eine Grafik ergänzt: **keine deckenden Flächen**, nur Motiv.
### Rainy und Snow: Themes mit Wetter
### Rainy, Snow und Aura: Themes mit Wetter
Rainy und Snow sind die Themes mit Bewegung. Hier zuerst Rainy, Snow folgt unten. Farben und Grafiken funktionieren wie
Rainy, Snow und Aura sind die Themes mit Bewegung. Hier zuerst Rainy, Snow und Aura folgen unten. Farben und Grafiken funktionieren wie
bei den anderen; dazu kommt `src/components/RainyWeather.tsx`, das der
`ThemeProvider` nur bei aktivem Rainy einhängt - auch auf der Anmeldeseite, und
beim Wechsel auf ein anderes Theme verschwindet es samt Animationsschleife.
@@ -262,6 +262,29 @@ neue Spaltenzahl umgerechnet, nach dem Neuladen ist der Boden frei.
> gleichzeitig landen also nur etwa 5 je Sekunde. Wer die Wachstumszeit
> ändert, rechnet mit dieser Zahl.
#### Aura
Ein Theme mit zwei Namen: hell heißt es **Sunshine**, dunkel **Mond**. Beides
ist `theme-aura`, der Unterschied kommt wie immer aus `.dark`.
| Teil | Umsetzung |
| --- | --- |
| **Leiste** | Vier Hintergrundebenen statt zwei: Sonne bzw. Mond (`aura-sun.svg`, `aura-moon.svg`, 130 px in der Ecke oben rechts, halb angeschnitten), Schleier, Sterne (`aura-stars.svg`, nur nachts) und ein Himmelsverlauf. Weil jede Ebene eigene Lage und Größe braucht, stehen die in `--aura-header-position` und `--aura-header-size` |
| **Ziehende Wolken** | Reines CSS: `.app-header::before` mit zwei nahtlosen 800-px-Kacheln (`aura-clouds-near.svg`, `aura-clouds-far.svg`). `@keyframes aura-clouds` schiebt sie in 150 s um genau 1600 bzw. 800 px - Neustart ohne Ruck, vordere Lage doppelt so schnell. Nachts auf `--aura-cloud-opacity` 0,28 abgedunkelt |
| **Sonnenstrahlen** | `src/components/AuraWeather.tsx`, nur hell. Alle 16–24 s zwei oder drei `.aura-ray`-Elemente: vom Sonnenmittelpunkt in Richtung Ecke unten links, leicht aufgefächert, per `clip-path` zur Sonne hin verjüngt und weichgezeichnet. Web Animations API: 4 s anschwellen, leicht schwenken, verblassen, danach entfernt |
Zwei Stolperstellen:
1. **Wolken hinter die Schrift.** `::before` mit `z-index: -1` verschwände
hinter dem Hintergrund der Leiste. `isolation: isolate` an `.app-header`
macht sie zum eigenen Stapelkontext - dann liegen die Wolken über dem
Himmel, aber unter Titel und Knöpfen. `overflow: hidden` an der Leiste wäre
der naheliegende Weg und ist falsch: sie enthält Aufklappmenüs.
2. **Sonne und Strahlen gehören zusammen.** `SUN_FROM_RIGHT`/`SUN_FROM_TOP` in
`AuraWeather.tsx` sind aus Position und Größe der Sonne in `index.css`
gerechnet. Wer die Sonne verschiebt, muss beide mitziehen, sonst kommen die
Strahlen aus dem Nichts.
### Was ein neues Theme können muss
Die Rollen der Skalen sind über die ganze App gleich; ein Theme, das sie
+9 -4
View File
@@ -66,7 +66,7 @@ die Scanner-Einstellungen. Alles andere ist für beide Rollen gleich.
zusammen - hilfreich auf kleinen Bildschirmen.
* Rechts oben stehen zwei Schalter. Der rechte wechselt zwischen **hell und
dunkel**; ein **Doppelklick** darauf folgt wieder der Systemeinstellung.
* Links daneben steht das **Design**. Es gibt sechs zur Wahl, jedes in hell und
* Links daneben steht das **Design**. Es gibt sieben zur Wahl, jedes in hell und
dunkel:
| Design | Aussehen |
@@ -77,6 +77,7 @@ die Scanner-Einstellungen. Alles andere ist für beide Rollen gleich.
| **Cyberpunk** | Neon in der Nacht: scharfe Kanten, violettes Leuchten, Blaustahl |
| **Rainy** | Regenwetter: Schieferblau, leichter Nieselregen, Wolken mit Wetterleuchten |
| **Snow** | Winter: Eisblau, Schneefall, der sich am unteren Rand zu einer Schneedecke sammelt |
| **Aura** | Hell „Sunshine“: Sonne, Himmelblau, warmes Bernstein; dunkel „Mond“: Mond, Sterne, Lavendel |
> **Die Wahl gehört dir, nicht dem Rechner.** Sie wird an deinem Benutzerkonto
> gespeichert. Meldest du dich an einem anderen Rechner an, ist dein Design
@@ -90,11 +91,11 @@ die Scanner-Einstellungen. Alles andere ist für beide Rollen gleich.
Die Designs neben perinco haben zusätzlich eine **Grafik** hinter der
oberen Leiste und der Seitenleiste: 8-bit-Himmel und Steinmauer, blauer Himmel
und Wiese, Neonröhren und Regen, Regenwolken und nasse Hügel, verschneite
Berge und Tannen. Sie liegt hinter einem Schleier, damit die Schrift darauf
Berge und Tannen, Sonne bzw. Mond mit Himmel. Sie liegt hinter einem Schleier, damit die Schrift darauf
lesbar bleibt, und ist dort am deutlichsten, wo die Leisten frei sind - in der
Mitte oben und unten links. perinco bleibt einfarbig.
**Rainy** und **Snow** sind die Designs, in denen sich etwas bewegt. Das
**Rainy**, **Snow** und **Aura** sind die Designs, in denen sich etwas bewegt. Das
Wetter liegt nur optisch über der Oberfläche: es fängt keine Klicks ab, und
geöffnete Dialoge liegen darüber.
@@ -107,9 +108,13 @@ die Scanner-Einstellungen. Alles andere ist für beide Rollen gleich.
kleines **Räumfahrzeug** in perinco-Grün mit Rundumleuchte vorbei und schiebt den Schnee
vom Bildschirm - abwechselnd von links nach rechts und zurück. Die erste
Fahrt startet gleich nach dem Laden der Seite.
* Bei **Aura** ziehen in der oberen Leiste langsam Wolken von links nach
rechts. Im hellen Modus („Sunshine“) fallen etwa alle 20 Sekunden zwei bis
drei Sonnenstrahlen von der Sonne oben rechts quer über den Bildschirm nach
unten links; im dunklen Modus („Mond“) steht dort der Mond, ohne Strahlen.
Wer im Betriebssystem **„Bewegung reduzieren"** eingeschaltet hat, sieht bei
beiden nur Farben und Grafiken - ohne Regen, Blitz und Schnee.
allen nur Farben und Grafiken - ohne Regen, Blitz, Schnee, Wolkenzug und Sonnenstrahlen.
![Dieselbe Ansicht im dunklen Design](bilder/aus-mails-dunkel.png)
* Die Menüpunkte **Akquise**, **Opportunities**, **Kontakte**, **Mails** und
+1 -1
View File
@@ -295,7 +295,7 @@ Uhrzeit, dieses Jahr Tag und Monat, sonst mit Jahr.
| Datei | Hält | Eigenheit |
| --- | --- | --- |
| `auth.tsx` | Benutzer, `isAdmin`, `login`, `logout`, `updateUser` | prüft beim Start das gespeicherte Token gegen `/auth/me` |
| `theme.tsx` | Farbwelt (perinco/Pixel Art/Outdoor/Cyberpunk/Rainy/Snow, Hintergrundgrafiken in `public/themes/`; bei Rainy hängt er zusätzlich `components/RainyWeather.tsx` mit Regen und Wetterleuchten ein, bei Snow `components/SnowWeather.tsx` mit Schneefall und Schneedecke) und Modus (hell/dunkel/System) | Beides gehört dem Benutzer und steht in `crm_users`; `localStorage` ist nur der Zwischenspeicher fürs Inline-Skript in `index.html`. Doppelklick auf den Modus-Schalter folgt wieder dem System |
| `theme.tsx` | Farbwelt (perinco/Pixel Art/Outdoor/Cyberpunk/Rainy/Snow, Hintergrundgrafiken in `public/themes/`; bei Rainy hängt er zusätzlich `components/RainyWeather.tsx` mit Regen und Wetterleuchten ein, bei Snow `components/SnowWeather.tsx` mit Schneefall, Schneedecke und Räumfahrzeug, bei Aura `components/AuraWeather.tsx` mit Sonnenstrahlen) und Modus (hell/dunkel/System) | Beides gehört dem Benutzer und steht in `crm_users`; `localStorage` ist nur der Zwischenspeicher fürs Inline-Skript in `index.html`. Doppelklick auf den Modus-Schalter folgt wieder dem System |
| `navigation.tsx` | `currentView`, `goTo(view, { tab, leadId })` | erspart es, Callbacks durch vier Ebenen zu reichen; `leadId` öffnet den Kontakt direkt |
| `whisper.tsx` | Modellstatus, Worker, Fortschritt, `transcribe` | ein Worker für die ganze App |