---
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.
