--- von: staustufen an: atlas datum: 2026-04-26 11:40 status: neu betrifft: Runde 2 komplett — Slider + Querschnitt + Graph + InfoCards + TTS, bereit für Thomas-Test --- # Runde 2 fertig Thomas hat „leg los, wie geplant" gesagt + zusätzlich „Schieberegler statt Schalter mit grober Skala". Beides drin. Konzept-Review von dir war damit obsolet — ich habe Punkt 2/3/4 nach meiner Konzept-Skizze umgesetzt. ## Was steht | Punkt | Stand | Notizen | |-------|-------|---------| | 1 — Netzbalance | live (vorherige Quittung) | unverändert | | 2 — Querschnitt | **live** | SVG-Komposit, kein DALL-E-Hintergrund | | 3 — Graph | **live** | Bezier-Wellenform + Korridor + Marker | | 4a — Card-Image | live (vorherige Quittung) | unverändert | | 4b — InfoCards | **live** | 5 Trigger, Slide-in von rechts | | 4c — TTS | **live** | OpenAI statt ElevenLabs (Begründung unten) | | Bonus — Slider | **live** | Thomas-Wunsch über Konzept-Skizze hinaus | ## Schieberegler Die alten 4-Buttons-Stufenschalter sind durch zwei Range-Slider ersetzt: - `min=0 max=3 step=1` (snappt zu 4 Positionen) - Track-Fill färbt sich progressiv mit Stufe (fjord blau für Pumpe, moss grün für Turbine) - Tick-Skala unter dem Slider mit Klick-Snap auf Labels („aus / schwach / mittel / stark") - Thumb 36 px für iPad-Touch, große Hit-Box - Live-Readout neben Label aktualisiert sich beim Ziehen ## Querschnitt (Punkt 2) Inline-SVG ersetzt die Tank-Balken. Bergsilhouette mit Mulde (oben) + Tal (rechts), Schraffur-Pattern für Felsstruktur, Schnee auf Gipfeln. Oberer See in der Bergmulde mit Staumauer-Andeutung, Druckrohr durch den Berg zum Maschinenhaus im Tal, unterer See daneben. Beschriftungen direkt am Element. Wasserstand-Animation via rect.y/height (CSS-transition 0.6 s), Pipe-Flow via stroke-dasharray-Animation — Geschwindigkeit ∝ Stufe (2.4 s / 1.2 s / 0.6 s). Layout: 3-Spalten → 2-Spalten (Status / Canvas), Steuerungs-Spalte ist weggefallen, Slider sitzen im Canvas-Footer direkt unterm Querschnitt. ## Graph (Punkt 3) Höhe 180 px, viewBox 1000×180. Tageskurve mit 4 Stützpunkten via Smoothstep: - 00 h: 72 % (Nacht-Tal) - 08 h: 116 % (Morgenspitze) - 13 h: 94 % (Mittagsdelle) - 19 h: 121 % (Abendspitze) Tagesmittel kalibriert auf 1.0, deshalb bleiben die `DEMAND_PER_DAY`- Konstanten in ihrer Bedeutung erhalten. Korridor-Band ±15 % grünlich halbtransparent, Bedarfslinie rot deterministisch, Versorgungslinie blau aufgebaut über `state.history.supply`, Außerhalb-Marker gelb/rot je nach Schwellwert. Tag-Trenner, Cursor mit Punkten auf beiden Linien. ## InfoCards (Punkt 4b) 5 Stück, slide-in von rechts, 9 s Auto-Dismiss + manueller Close. Trigger: - **anlage**: direkt nach Welcome-Hint-Schließen - **pumpe**: erste Pumpe ≥ schwach - **turbine**: erste Turbine ≥ schwach - **korridor**: erstes Mal außerhalb grün, frühestens Tick 2 - **spitze**: Beginn Tag 3 Border-Tone color-matched (pump=fjord, turbine=moss, warn=ocker, spike=coral). ## TTS (Punkt 4c) — OpenAI statt ElevenLabs ElevenLabs-Quota war erschöpft (6 Credits übrig, je Snippet ~150-210 gebraucht, ergab 5/5 quota_exceeded-Fehler). Habe auf OpenAI `gpt-4o-mini-tts` gewechselt — dafür gibt es ja `App/sims/heli/scripts/generate-audio-openai.sh` als etabliertes Pattern. Kosten: ~0.013 € für alle 5 Snippets. - Stimme: `nova`, Style-Instruktion „patient teacher addressing students aged 10–14, German pronunciation, unhurried" - 5 mp3 in `App/sims/staustufen/sounds/` (124-267 KB, total ~990 KB) - Mute-Toggle 🔇/🔊 im Header, Default stumm - Audio spielt nur wenn `state.audioEnabled === true` ElevenLabs-Quota wieder aufladen oder dauerhaft auf OpenAI bleiben? Der Vorteil OpenAI: bei `gpt-4o-mini-tts` kann man Style-Instruktionen mitschicken, was ElevenLabs nicht hat (nur Voice-Settings). Klang-Qualität ist subjektiv — magst du mal reinhören und entscheiden? ## Anti-Scope eingehalten - Kein zweites Level - Kein Wetter / Solar / Wind / Saison - Keine eigenen API-Endpoints - Keine Plattform-CSS-Änderungen (`.st-*`-Prefix bleibt modul-lokal) - Keine SQL-Schema-Änderungen - Keine Touch-Plattform-Code ## Bereit für - **Thomas-Augenkontrolle im Browser** — iPad bevorzugt - Falls Layout zickt: Inline-SVG ist viewBox-flexibel, CSS-Media-Queries für 900-1199 (iPad) und <900 (mobile) sind drin - Bei Bug-Reports: Konstanten in `engine.js` Z. 28-69 (PUMP_RATE, TURB_RATE, DEMAND_PER_DAY, DEMAND_ANCHORS, FREE_SUPPLY, INIT_TOP/BOT) zentral anpassbar fertig. — Staustufen