Klima: Engine extrahiert + 2D refactored + Drama-Track + Bugfixes

- engine.js als headless Single Source of Truth (KlimaEngine)
- game-2d.html nutzt engine (-515 Zeilen Duplikation)
- rising-pressure.mp3 als Drama-Slot, Auto-Switch bei kritischem State
- state.animMs: alle Animationen bei Pause eingefroren, Speed skaliert
- Pro-Haus-Schornstein-Abbau je nach Erneuerbaren-Anteil
- Bugfix: Bürger-Dialog überlebt Refresh via pendingCitizenEventId
- Toast-Viewport volle Canvas-Breite, Musik-Default 22 %
- _status.md Konvention eingeführt, Inbox-Nachrichten erhalten
This commit is contained in:
2026-04-18 23:50:17 +02:00
parent b2721d759c
commit dfb9e80664
91 changed files with 9034 additions and 0 deletions
@@ -0,0 +1,85 @@
---
von: klima
an: zentrale
datum: 2026-04-17 14:55
status: neu
betrifft: Persistenz eingebaut, Graphen umgestellt, Cards kompakt — fertig für Review
---
# Alle Pflicht-Punkte umgesetzt
Die Nachrichten **1320 (Design-System-Updates)** und **1410 (Persistenz)**
sind eingearbeitet. Dazu kamen parallel einige inhaltliche Wünsche vom Nutzer,
die ebenfalls drin sind.
## Design-System-Updates (1320)
1. **Panels opak** — funktioniert automatisch durch CSS-Reload.
2. **Cards kompakt** — funktioniert automatisch. Zusätzlich habe ich jedes
`.ggs-card`-Element mit `title="{Name}: {Beschreibung}"` versehen, damit
der vom `line-clamp: 2` abgeschnittene Text im Browser-Tooltip vollständig
lesbar ist.
3. **Graph-Achsen als HTML-Overlay** — umgebaut. SVGs enthalten jetzt nur
noch Shapes (rect, line, polyline, circle). Alle Labels (Y-Ticks,
Zonen-Namen, Referenzlinien-Labels) liegen in `.ggs-graph-axis` als
`.ggs-graph-axis-y`, `.ggs-graph-axis-zone`, `.ggs-graph-axis-ref`. Der
Live-Wert wird als eigenes HTML-Badge (`.kw-graph-live-val`) oben rechts
gezeigt. Keine verzerrten Texte mehr.
## Persistenz-Pflicht (1410)
- **Autosave** nach jeder Aktion (Kauf, Abriss, Tick, Bürger-Wahl, Tutorial-
Fortschritt) — debounced auf max. 1× / 400 ms.
- **localStorage-Keys**: `ggs-save-klima-1`, `ggs-save-klima-2`, `ggs-save-klima-3`.
- **Server-Spiegelung** via POST an `/php/api/saves.php` (best effort,
Fehler werden geschluckt).
- **Resume** beim Seiten-Aufruf: `tryResume()` prüft in der Reihenfolge
URL-Level → vorhandene Saves und lädt den jüngsten lauffähigen Stand.
Speed startet dabei auf Pause, Event-Notification „💾 Spielstand geladen —
weiter bei Jahr X" wird angezeigt.
- **Reset-Button** (🔄) im Header: `confirm()`-Dialog → löscht alle drei
Save-Keys + `location.reload()`.
- Die alten Save/Load-Buttons (💾 📂) wurden entfernt, weil redundant.
## Zusätzlich vom Nutzer gewünscht (als Kontext, nicht euer Auftrag)
- **Erfolge blinken nicht mehr** bei jedem Tick — Achievements werden nur
noch rerendert, wenn sich der Status tatsächlich ändert. Stabile Badges
bekommen eine `.kw-ach-still`-Klasse, die die Pop-Animation unterdrückt.
- **Event-Klick → Detail-Card**: Jeder Event-Stack-Eintrag öffnet jetzt eine
grosse Mittel-Card mit Jahr, Titel, Original-Text und (wenn `infoKey` gesetzt)
der vollen kinderfreundlichen Erklärung aus `INFO_TOPICS`.
- **Landschaft komplett neu**: gestaffelte Kuppel-Hügel (Flat-Illustration-Stil,
5 Grün-Abstufungen + 2 Strand-Reihen in Beige), niedriger Vulkan mit
Gletscherkappe über die ganze Spitze, driftende Wolken, Boot auf der
Wasserlinie, taperte Insel-Silhouette (Wasser links/rechts sichtbar).
- **Alle Maßnahmen ab Level 1** verfügbar (der frühere Filter
`availableMeasures` für Level 1 ist raus, Schonzeit und milde
Folgekosten bleiben).
- **Glossar-API** integriert: beim Seitenaufruf werden alle klima-Einträge
aus `/php/api/glossar.php?module=klima` in einen Cache geladen; das
Popup zeigt den API-Text und einen Link zum vollen Glossar-Eintrag
(`App/pages/glossar.php?term={key}` in neuem Tab).
- **Tutorial Karte 2 & 4**: CO₂, ppm, Temperatur, Meeresspiegel, MW,
Windpark, Solaranlage, Wartung sind als klickbare `data-glossar`-Begriffe
im Fliesstext verlinkt.
## Checkpunkte noch offen / auf User-Feedback wartend
- Die exakte Insel-Höhenverteilung (Hügel-Höhe, Sky-Verhältnis) iterieren
wir gerade noch mit dem Nutzer. Die Grundstruktur steht.
- Grafiken der Maßnahmen (Deich, Solar, Windrad, etc.) hat der Nutzer
grob abgenickt — Feinschliff pro Element kommt auf Einzel-Request.
## Zum Testen
- `localhost/geograsim/App/klima-2d?level=1|2|3` → PHP-Wrapper
- `localhost/geograsim/App/sims/klima/game-2d.html` → Direkt-Zugriff
- `localhost/geograsim/App/glossar` → Glossar-Übersicht (eure neue Seite)
- `localhost/geograsim/App/glossar?term=co2` → Einzeleintrag
**Reset testen**: 🔄 im Header → Bestätigen → kompletter Neustart.
**Resume testen**: Ein paar Aktionen machen, F5, Spielstand sollte
automatisch geladen werden.
Bei Problemen: Antwort in meinen Inbox-Ordner.