Textsystem: Bis-Strich mit Leerzeichen (Zahl – Zahl) per Agent-Sweep
562 Ersetzungen in 50 Dateien: Halbgeviertstrich zwischen zwei Ziffern (= "bis"-Bereich) bekommt Leerzeichen davor/danach (3–4 -> 3 – 4). Regex /([0-9])\s*–\s*(?=[0-9])/ auf Rohtext (format-erhaltend, CRLF/Einrueckung unveraendert), Bindestriche in Woertern und Minuszeichen unangetastet, alle JSON weiter gueltig. Energiemanager-Zeitbloecke sind Display-Labels (kein Logik-Key) -> safe. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@@ -0,0 +1,78 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Display-Vorschau (lokal)</title>
|
||||
<style>
|
||||
:root { --bg:#f4f2ec; --card:#fff; --ink:#1f2b26; --accent:#1f4b37; --muted:#6b7a72; --line:rgba(0,0,0,.08); }
|
||||
* { box-sizing:border-box; }
|
||||
body { margin:0; font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif; background:var(--bg); color:var(--ink); }
|
||||
header { background:var(--accent); color:#fff; padding:20px 28px; position:sticky; top:0; z-index:10; box-shadow:0 2px 10px rgba(0,0,0,.15); }
|
||||
header h1 { margin:0; font-size:1.4rem; }
|
||||
header .meta { font-size:.82rem; opacity:.85; margin-top:4px; }
|
||||
nav.toc { display:flex; flex-wrap:wrap; gap:6px; padding:14px 28px; background:#e9e6dd; border-bottom:1px solid var(--line); }
|
||||
nav.toc a { font-size:.82rem; text-decoration:none; color:var(--accent); background:#fff; border:1px solid var(--line); border-radius:999px; padding:4px 11px; }
|
||||
nav.toc a:hover { background:var(--accent); color:#fff; }
|
||||
main { padding:24px 28px 60px; max-width:1500px; margin:0 auto; }
|
||||
section.sim { background:var(--card); border-radius:14px; padding:18px 20px 22px; margin-bottom:26px; box-shadow:0 4px 14px rgba(0,0,0,.06); scroll-margin-top:90px; }
|
||||
section.sim h2 { margin:0 0 14px; font-size:1.25rem; color:var(--accent); display:flex; align-items:baseline; gap:10px; }
|
||||
.simid { font-size:.72rem; font-weight:600; color:var(--muted); background:#eef0ec; padding:2px 8px; border-radius:6px; letter-spacing:.03em; }
|
||||
table { width:100%; border-collapse:collapse; table-layout:fixed; }
|
||||
thead th { text-align:left; font-size:.82rem; color:var(--muted); padding:0 0 8px; font-weight:700; }
|
||||
thead th .res { font-weight:500; opacity:.7; }
|
||||
th.screen { width:150px; vertical-align:top; font-size:.9rem; color:var(--ink); padding-top:8px; }
|
||||
td { padding:6px 6px 14px; vertical-align:top; width:calc((100% - 150px)/2); }
|
||||
a.shot { display:block; border:1px solid var(--line); border-radius:8px; overflow:hidden; background:#0d1512; text-decoration:none; }
|
||||
a.shot img { display:block; width:100%; max-width:100%; height:auto; }
|
||||
.cap { display:block; font-size:.72rem; color:var(--muted); padding:5px 8px; background:#fafafa; border-top:1px solid var(--line); }
|
||||
a.shot .cap { color:#c8d4ce; background:#141f1a; border-top:none; }
|
||||
.missing { display:flex; flex-direction:column; align-items:center; justify-content:center; gap:6px; min-height:120px; border:1px dashed var(--line); border-radius:8px; color:var(--muted); font-size:.85rem; background:#faf9f5; }
|
||||
.missing .cap { background:none; border:none; }
|
||||
@media (max-width:820px){ th.screen{width:90px;} td{width:calc((100% - 90px)/2);} }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<h1>Display-Vorschau (lokal)</h1>
|
||||
<div class="meta">16 Simulationen · je Onboarding/Start + Spielverlauf · iPad 1180×820 & Full HD 1920×1080 · generiert am 19.08.2026, 15:06</div>
|
||||
</header>
|
||||
<nav class="toc"><a href="#sim-busfahrt">🚌 Busfahrt</a><a href="#sim-energiemanager">⚡ Energiemanager</a><a href="#sim-entscheidungstag">📅 Entscheidungstag</a><a href="#sim-eu-werkstatt">🇪🇺 EU-Werkstatt</a><a href="#sim-farmer">🌾 Farmer</a><a href="#sim-fluggesellschaft">✈️ Fluggesellschaft</a><a href="#sim-fluss">🌊 Flussmanagement</a><a href="#sim-heli">🚁 Helikopter-Navigation</a><a href="#sim-logistik">🚚 Logistik</a><a href="#sim-sonnensystem">🪐 Sonnensystem</a><a href="#sim-staustufen">💧 Staustufen</a><a href="#sim-tourismusregion">🗺️ Tourismusregion</a><a href="#sim-tourismustal">🏔️ Tourismustal</a><a href="#sim-vulkan">🌋 Vulkan</a><a href="#sim-wal">🐋 Wal</a><a href="#sim-weltkueche">🍲 Welt-Küche</a></nav>
|
||||
<main>
|
||||
<section class="sim" id="sim-busfahrt"><h2>🚌 Busfahrt <span class="simid">busfahrt</span></h2><table><thead><tr><th class="screen"></th><th>iPad <span class="res">1180×820</span></th><th>Full HD <span class="res">1920×1080</span></th></tr></thead><tbody><tr><th class="screen">Onboarding / Start</th><td><a href="shots/busfahrt__ipad__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/busfahrt__ipad__start.png" alt="busfahrt iPad start"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/busfahrt__fullhd__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/busfahrt__fullhd__start.png" alt="busfahrt Full HD start"><span class="cap">Full HD · 1920×1080</span></a></td></tr>
|
||||
<tr><th class="screen">Spielverlauf</th><td><a href="shots/busfahrt__ipad__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/busfahrt__ipad__play.png" alt="busfahrt iPad play"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/busfahrt__fullhd__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/busfahrt__fullhd__play.png" alt="busfahrt Full HD play"><span class="cap">Full HD · 1920×1080</span></a></td></tr></tbody></table></section>
|
||||
<section class="sim" id="sim-energiemanager"><h2>⚡ Energiemanager <span class="simid">energiemanager</span></h2><table><thead><tr><th class="screen"></th><th>iPad <span class="res">1180×820</span></th><th>Full HD <span class="res">1920×1080</span></th></tr></thead><tbody><tr><th class="screen">Onboarding / Start</th><td><a href="shots/energiemanager__ipad__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/energiemanager__ipad__start.png" alt="energiemanager iPad start"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/energiemanager__fullhd__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/energiemanager__fullhd__start.png" alt="energiemanager Full HD start"><span class="cap">Full HD · 1920×1080</span></a></td></tr>
|
||||
<tr><th class="screen">Spielverlauf</th><td><a href="shots/energiemanager__ipad__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/energiemanager__ipad__play.png" alt="energiemanager iPad play"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/energiemanager__fullhd__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/energiemanager__fullhd__play.png" alt="energiemanager Full HD play"><span class="cap">Full HD · 1920×1080</span></a></td></tr>
|
||||
<tr><th class="screen">Spielverlauf (2)</th><td><a href="shots/energiemanager__ipad__play2.png" target="_blank" class="shot"><img loading="lazy" src="shots/energiemanager__ipad__play2.png" alt="energiemanager iPad play2"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/energiemanager__fullhd__play2.png" target="_blank" class="shot"><img loading="lazy" src="shots/energiemanager__fullhd__play2.png" alt="energiemanager Full HD play2"><span class="cap">Full HD · 1920×1080</span></a></td></tr></tbody></table></section>
|
||||
<section class="sim" id="sim-entscheidungstag"><h2>📅 Entscheidungstag <span class="simid">entscheidungstag</span></h2><table><thead><tr><th class="screen"></th><th>iPad <span class="res">1180×820</span></th><th>Full HD <span class="res">1920×1080</span></th></tr></thead><tbody><tr><th class="screen">Onboarding / Start</th><td><a href="shots/entscheidungstag__ipad__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/entscheidungstag__ipad__start.png" alt="entscheidungstag iPad start"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/entscheidungstag__fullhd__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/entscheidungstag__fullhd__start.png" alt="entscheidungstag Full HD start"><span class="cap">Full HD · 1920×1080</span></a></td></tr>
|
||||
<tr><th class="screen">Spielverlauf</th><td><a href="shots/entscheidungstag__ipad__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/entscheidungstag__ipad__play.png" alt="entscheidungstag iPad play"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/entscheidungstag__fullhd__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/entscheidungstag__fullhd__play.png" alt="entscheidungstag Full HD play"><span class="cap">Full HD · 1920×1080</span></a></td></tr></tbody></table></section>
|
||||
<section class="sim" id="sim-eu-werkstatt"><h2>🇪🇺 EU-Werkstatt <span class="simid">eu-werkstatt</span></h2><table><thead><tr><th class="screen"></th><th>iPad <span class="res">1180×820</span></th><th>Full HD <span class="res">1920×1080</span></th></tr></thead><tbody><tr><th class="screen">Onboarding / Start</th><td><a href="shots/eu-werkstatt__ipad__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/eu-werkstatt__ipad__start.png" alt="eu-werkstatt iPad start"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/eu-werkstatt__fullhd__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/eu-werkstatt__fullhd__start.png" alt="eu-werkstatt Full HD start"><span class="cap">Full HD · 1920×1080</span></a></td></tr>
|
||||
<tr><th class="screen">Spielverlauf</th><td><a href="shots/eu-werkstatt__ipad__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/eu-werkstatt__ipad__play.png" alt="eu-werkstatt iPad play"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/eu-werkstatt__fullhd__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/eu-werkstatt__fullhd__play.png" alt="eu-werkstatt Full HD play"><span class="cap">Full HD · 1920×1080</span></a></td></tr></tbody></table></section>
|
||||
<section class="sim" id="sim-farmer"><h2>🌾 Farmer <span class="simid">farmer</span></h2><table><thead><tr><th class="screen"></th><th>iPad <span class="res">1180×820</span></th><th>Full HD <span class="res">1920×1080</span></th></tr></thead><tbody><tr><th class="screen">Onboarding / Start</th><td><a href="shots/farmer__ipad__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/farmer__ipad__start.png" alt="farmer iPad start"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/farmer__fullhd__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/farmer__fullhd__start.png" alt="farmer Full HD start"><span class="cap">Full HD · 1920×1080</span></a></td></tr>
|
||||
<tr><th class="screen">Spielverlauf</th><td><a href="shots/farmer__ipad__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/farmer__ipad__play.png" alt="farmer iPad play"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/farmer__fullhd__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/farmer__fullhd__play.png" alt="farmer Full HD play"><span class="cap">Full HD · 1920×1080</span></a></td></tr></tbody></table></section>
|
||||
<section class="sim" id="sim-fluggesellschaft"><h2>✈️ Fluggesellschaft <span class="simid">fluggesellschaft</span></h2><table><thead><tr><th class="screen"></th><th>iPad <span class="res">1180×820</span></th><th>Full HD <span class="res">1920×1080</span></th></tr></thead><tbody><tr><th class="screen">Onboarding / Start</th><td><a href="shots/fluggesellschaft__ipad__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/fluggesellschaft__ipad__start.png" alt="fluggesellschaft iPad start"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/fluggesellschaft__fullhd__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/fluggesellschaft__fullhd__start.png" alt="fluggesellschaft Full HD start"><span class="cap">Full HD · 1920×1080</span></a></td></tr>
|
||||
<tr><th class="screen">Spielverlauf</th><td><a href="shots/fluggesellschaft__ipad__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/fluggesellschaft__ipad__play.png" alt="fluggesellschaft iPad play"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/fluggesellschaft__fullhd__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/fluggesellschaft__fullhd__play.png" alt="fluggesellschaft Full HD play"><span class="cap">Full HD · 1920×1080</span></a></td></tr></tbody></table></section>
|
||||
<section class="sim" id="sim-fluss"><h2>🌊 Flussmanagement <span class="simid">fluss</span></h2><table><thead><tr><th class="screen"></th><th>iPad <span class="res">1180×820</span></th><th>Full HD <span class="res">1920×1080</span></th></tr></thead><tbody><tr><th class="screen">Onboarding / Start</th><td><a href="shots/fluss__ipad__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/fluss__ipad__start.png" alt="fluss iPad start"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/fluss__fullhd__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/fluss__fullhd__start.png" alt="fluss Full HD start"><span class="cap">Full HD · 1920×1080</span></a></td></tr></tbody></table></section>
|
||||
<section class="sim" id="sim-heli"><h2>🚁 Helikopter-Navigation <span class="simid">heli</span></h2><table><thead><tr><th class="screen"></th><th>iPad <span class="res">1180×820</span></th><th>Full HD <span class="res">1920×1080</span></th></tr></thead><tbody><tr><th class="screen">Onboarding / Start</th><td><a href="shots/heli__ipad__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/heli__ipad__start.png" alt="heli iPad start"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/heli__fullhd__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/heli__fullhd__start.png" alt="heli Full HD start"><span class="cap">Full HD · 1920×1080</span></a></td></tr>
|
||||
<tr><th class="screen">Spielverlauf</th><td><a href="shots/heli__ipad__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/heli__ipad__play.png" alt="heli iPad play"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/heli__fullhd__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/heli__fullhd__play.png" alt="heli Full HD play"><span class="cap">Full HD · 1920×1080</span></a></td></tr></tbody></table></section>
|
||||
<section class="sim" id="sim-logistik"><h2>🚚 Logistik <span class="simid">logistik</span></h2><table><thead><tr><th class="screen"></th><th>iPad <span class="res">1180×820</span></th><th>Full HD <span class="res">1920×1080</span></th></tr></thead><tbody><tr><th class="screen">Onboarding / Start</th><td><a href="shots/logistik__ipad__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/logistik__ipad__start.png" alt="logistik iPad start"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/logistik__fullhd__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/logistik__fullhd__start.png" alt="logistik Full HD start"><span class="cap">Full HD · 1920×1080</span></a></td></tr>
|
||||
<tr><th class="screen">Spielverlauf</th><td><a href="shots/logistik__ipad__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/logistik__ipad__play.png" alt="logistik iPad play"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/logistik__fullhd__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/logistik__fullhd__play.png" alt="logistik Full HD play"><span class="cap">Full HD · 1920×1080</span></a></td></tr></tbody></table></section>
|
||||
<section class="sim" id="sim-sonnensystem"><h2>🪐 Sonnensystem <span class="simid">sonnensystem</span></h2><table><thead><tr><th class="screen"></th><th>iPad <span class="res">1180×820</span></th><th>Full HD <span class="res">1920×1080</span></th></tr></thead><tbody><tr><th class="screen">Onboarding / Start</th><td><a href="shots/sonnensystem__ipad__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/sonnensystem__ipad__start.png" alt="sonnensystem iPad start"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/sonnensystem__fullhd__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/sonnensystem__fullhd__start.png" alt="sonnensystem Full HD start"><span class="cap">Full HD · 1920×1080</span></a></td></tr>
|
||||
<tr><th class="screen">Spielverlauf</th><td><a href="shots/sonnensystem__ipad__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/sonnensystem__ipad__play.png" alt="sonnensystem iPad play"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/sonnensystem__fullhd__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/sonnensystem__fullhd__play.png" alt="sonnensystem Full HD play"><span class="cap">Full HD · 1920×1080</span></a></td></tr>
|
||||
<tr><th class="screen">Spielverlauf (2)</th><td><a href="shots/sonnensystem__ipad__play2.png" target="_blank" class="shot"><img loading="lazy" src="shots/sonnensystem__ipad__play2.png" alt="sonnensystem iPad play2"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/sonnensystem__fullhd__play2.png" target="_blank" class="shot"><img loading="lazy" src="shots/sonnensystem__fullhd__play2.png" alt="sonnensystem Full HD play2"><span class="cap">Full HD · 1920×1080</span></a></td></tr></tbody></table></section>
|
||||
<section class="sim" id="sim-staustufen"><h2>💧 Staustufen <span class="simid">staustufen</span></h2><table><thead><tr><th class="screen"></th><th>iPad <span class="res">1180×820</span></th><th>Full HD <span class="res">1920×1080</span></th></tr></thead><tbody><tr><th class="screen">Onboarding / Start</th><td><a href="shots/staustufen__ipad__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/staustufen__ipad__start.png" alt="staustufen iPad start"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/staustufen__fullhd__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/staustufen__fullhd__start.png" alt="staustufen Full HD start"><span class="cap">Full HD · 1920×1080</span></a></td></tr>
|
||||
<tr><th class="screen">Spielverlauf</th><td><a href="shots/staustufen__ipad__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/staustufen__ipad__play.png" alt="staustufen iPad play"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/staustufen__fullhd__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/staustufen__fullhd__play.png" alt="staustufen Full HD play"><span class="cap">Full HD · 1920×1080</span></a></td></tr></tbody></table></section>
|
||||
<section class="sim" id="sim-tourismusregion"><h2>🗺️ Tourismusregion <span class="simid">tourismusregion</span></h2><table><thead><tr><th class="screen"></th><th>iPad <span class="res">1180×820</span></th><th>Full HD <span class="res">1920×1080</span></th></tr></thead><tbody><tr><th class="screen">Onboarding / Start</th><td><a href="shots/tourismusregion__ipad__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/tourismusregion__ipad__start.png" alt="tourismusregion iPad start"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/tourismusregion__fullhd__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/tourismusregion__fullhd__start.png" alt="tourismusregion Full HD start"><span class="cap">Full HD · 1920×1080</span></a></td></tr>
|
||||
<tr><th class="screen">Spielverlauf</th><td><a href="shots/tourismusregion__ipad__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/tourismusregion__ipad__play.png" alt="tourismusregion iPad play"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/tourismusregion__fullhd__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/tourismusregion__fullhd__play.png" alt="tourismusregion Full HD play"><span class="cap">Full HD · 1920×1080</span></a></td></tr></tbody></table></section>
|
||||
<section class="sim" id="sim-tourismustal"><h2>🏔️ Tourismustal <span class="simid">tourismustal</span></h2><table><thead><tr><th class="screen"></th><th>iPad <span class="res">1180×820</span></th><th>Full HD <span class="res">1920×1080</span></th></tr></thead><tbody><tr><th class="screen">Onboarding / Start</th><td><a href="shots/tourismustal__ipad__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/tourismustal__ipad__start.png" alt="tourismustal iPad start"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/tourismustal__fullhd__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/tourismustal__fullhd__start.png" alt="tourismustal Full HD start"><span class="cap">Full HD · 1920×1080</span></a></td></tr>
|
||||
<tr><th class="screen">Spielverlauf</th><td><a href="shots/tourismustal__ipad__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/tourismustal__ipad__play.png" alt="tourismustal iPad play"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/tourismustal__fullhd__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/tourismustal__fullhd__play.png" alt="tourismustal Full HD play"><span class="cap">Full HD · 1920×1080</span></a></td></tr></tbody></table></section>
|
||||
<section class="sim" id="sim-vulkan"><h2>🌋 Vulkan <span class="simid">vulkan</span></h2><table><thead><tr><th class="screen"></th><th>iPad <span class="res">1180×820</span></th><th>Full HD <span class="res">1920×1080</span></th></tr></thead><tbody><tr><th class="screen">Onboarding / Start</th><td><a href="shots/vulkan__ipad__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/vulkan__ipad__start.png" alt="vulkan iPad start"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/vulkan__fullhd__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/vulkan__fullhd__start.png" alt="vulkan Full HD start"><span class="cap">Full HD · 1920×1080</span></a></td></tr>
|
||||
<tr><th class="screen">Spielverlauf</th><td><a href="shots/vulkan__ipad__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/vulkan__ipad__play.png" alt="vulkan iPad play"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/vulkan__fullhd__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/vulkan__fullhd__play.png" alt="vulkan Full HD play"><span class="cap">Full HD · 1920×1080</span></a></td></tr>
|
||||
<tr><th class="screen">Spielverlauf (2)</th><td><a href="shots/vulkan__ipad__play2.png" target="_blank" class="shot"><img loading="lazy" src="shots/vulkan__ipad__play2.png" alt="vulkan iPad play2"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/vulkan__fullhd__play2.png" target="_blank" class="shot"><img loading="lazy" src="shots/vulkan__fullhd__play2.png" alt="vulkan Full HD play2"><span class="cap">Full HD · 1920×1080</span></a></td></tr></tbody></table></section>
|
||||
<section class="sim" id="sim-wal"><h2>🐋 Wal <span class="simid">wal</span></h2><table><thead><tr><th class="screen"></th><th>iPad <span class="res">1180×820</span></th><th>Full HD <span class="res">1920×1080</span></th></tr></thead><tbody><tr><th class="screen">Onboarding / Start</th><td><a href="shots/wal__ipad__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/wal__ipad__start.png" alt="wal iPad start"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/wal__fullhd__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/wal__fullhd__start.png" alt="wal Full HD start"><span class="cap">Full HD · 1920×1080</span></a></td></tr>
|
||||
<tr><th class="screen">Spielverlauf</th><td><a href="shots/wal__ipad__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/wal__ipad__play.png" alt="wal iPad play"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/wal__fullhd__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/wal__fullhd__play.png" alt="wal Full HD play"><span class="cap">Full HD · 1920×1080</span></a></td></tr></tbody></table></section>
|
||||
<section class="sim" id="sim-weltkueche"><h2>🍲 Welt-Küche <span class="simid">weltkueche</span></h2><table><thead><tr><th class="screen"></th><th>iPad <span class="res">1180×820</span></th><th>Full HD <span class="res">1920×1080</span></th></tr></thead><tbody><tr><th class="screen">Onboarding / Start</th><td><a href="shots/weltkueche__ipad__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/weltkueche__ipad__start.png" alt="weltkueche iPad start"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/weltkueche__fullhd__start.png" target="_blank" class="shot"><img loading="lazy" src="shots/weltkueche__fullhd__start.png" alt="weltkueche Full HD start"><span class="cap">Full HD · 1920×1080</span></a></td></tr>
|
||||
<tr><th class="screen">Spielverlauf</th><td><a href="shots/weltkueche__ipad__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/weltkueche__ipad__play.png" alt="weltkueche iPad play"><span class="cap">iPad · 1180×820</span></a></td><td><a href="shots/weltkueche__fullhd__play.png" target="_blank" class="shot"><img loading="lazy" src="shots/weltkueche__fullhd__play.png" alt="weltkueche Full HD play"><span class="cap">Full HD · 1920×1080</span></a></td></tr></tbody></table></section>
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,282 @@
|
||||
/**
|
||||
* regen-gameplay-shots.cjs
|
||||
* ------------------------
|
||||
* Ersetzt die "Spielverlauf"-Screenshots (play / play2) der Display-Vorschau
|
||||
* durch ECHTE Spielszenen: Auswahl-Screens (Welt/Karte/Szenario) werden
|
||||
* betreten und das Onboarding wird zuverlässig weggeklickt (Skip-Buttons +
|
||||
* mehrseitige "Weiter"-Tutorials, auch wenn der Button unter dem Fold liegt),
|
||||
* bevor der Screenshot fällt.
|
||||
*
|
||||
* Ersetzt NUR die play/play2-Bilder in-place; die start-Bilder (Onboarding)
|
||||
* und display_preview.html bleiben unangetastet, damit die Galerie
|
||||
* unverändert funktioniert.
|
||||
*
|
||||
* Start (aus dem playwright-Ordner wegen node_modules):
|
||||
* cd /c/xampp/htdocs/geograsim/.dontDeploy/playwright && \
|
||||
* NODE_PATH="C:\\xampp\\htdocs\\geograsim\\.dontDeploy\\playwright\\node_modules" \
|
||||
* node ../../App/.LocalDeveloperTools/display-preview/regen-gameplay-shots.cjs
|
||||
*
|
||||
* Optional: --only=sonnensystem,wal --vp=ipad
|
||||
*/
|
||||
const { chromium } = require('@playwright/test');
|
||||
const path = require('path');
|
||||
|
||||
const SHOTS_DIR = 'C:/xampp/htdocs/geograsim/App/.LocalDeveloperTools/display-preview/shots';
|
||||
const BASE_URL = 'http://localhost/geograsim/App/sims';
|
||||
|
||||
const VIEWPORTS = [
|
||||
{ key: 'ipad', w: 1180, h: 820 },
|
||||
{ key: 'fullhd', w: 1920, h: 1080 },
|
||||
];
|
||||
|
||||
// Sims mit "play"-Screenshot in der Galerie (fluss hat keinen play -> weggelassen).
|
||||
const SIMS = [
|
||||
{ id: 'busfahrt' },
|
||||
{ id: 'energiemanager', play2: true },
|
||||
{ id: 'entscheidungstag' },
|
||||
{ id: 'eu-werkstatt' },
|
||||
{ id: 'farmer' },
|
||||
{ id: 'fluggesellschaft' },
|
||||
{ id: 'heli' },
|
||||
{ id: 'logistik' },
|
||||
{ id: 'sonnensystem', play2: true },
|
||||
{ id: 'staustufen' },
|
||||
{ id: 'tourismusregion' },
|
||||
{ id: 'tourismustal' },
|
||||
{ id: 'vulkan', play2: true },
|
||||
{ id: 'wal' },
|
||||
{ id: 'weltkueche' },
|
||||
];
|
||||
|
||||
// ---- In-Page: EIN Onboarding-Schritt wegklicken -------------------------
|
||||
async function skipStep(page) {
|
||||
return await page.evaluate(() => {
|
||||
// "loose": gerendert, aber darf auch unter dem Fold liegen (.click() geht trotzdem)
|
||||
const rendered = (el) => {
|
||||
if (!el) return false;
|
||||
const r = el.getBoundingClientRect();
|
||||
if (r.width < 6 || r.height < 6) return false;
|
||||
const s = getComputedStyle(el);
|
||||
return s.visibility !== 'hidden' && s.display !== 'none' && +s.opacity > 0.05
|
||||
&& !el.disabled && el.getAttribute('aria-hidden') !== 'true'
|
||||
&& !el.classList.contains('hidden');
|
||||
};
|
||||
const clean = (s) => (s || '').replace(/\s+/g, ' ').trim();
|
||||
const norm = (s) => clean(s).replace(/[^\p{L}\p{N} ]+/gu, '').trim().toLowerCase();
|
||||
|
||||
// Namensfelder füllen
|
||||
document.querySelectorAll('input[type=text],input[type=search],input:not([type])').forEach((i) => {
|
||||
if (rendered(i) && !i.value) {
|
||||
i.value = 'Demo';
|
||||
i.dispatchEvent(new Event('input', { bubbles: true }));
|
||||
i.dispatchEvent(new Event('change', { bubbles: true }));
|
||||
}
|
||||
});
|
||||
|
||||
// 1) Explizite Skip-Buttons (schließen das GANZE Tutorial auf einmal)
|
||||
const skipSel = [
|
||||
'#emOnbSkip', '#tutorial-skip', '#heliOnbSkip', '#snOnbSkip',
|
||||
'[onclick*="skipTutorial"]', '[onclick*="closeTutorial"]',
|
||||
'[onclick*="skipOnboarding"]', '[onclick*="skipHeliOnboarding"]',
|
||||
];
|
||||
for (const sel of skipSel) {
|
||||
const el = [...document.querySelectorAll(sel)].find(rendered);
|
||||
if (el) { el.click(); return 'skip:' + sel; }
|
||||
}
|
||||
// Skip per Text
|
||||
{
|
||||
const el = [...document.querySelectorAll('button,a,[role=button]')].find(
|
||||
(e) => rendered(e) && /^(uberspringen|tutorial uberspringen|einfuhrung uberspringen|nicht mehr anzeigen)$/.test(norm(e.textContent))
|
||||
);
|
||||
if (el) { el.click(); return 'skiptext'; }
|
||||
}
|
||||
|
||||
// 2) "Weiter"/"Los geht's" NUR innerhalb eines sichtbaren Overlays
|
||||
// (verhindert das Anklicken von Gameplay-Buttons wie Vulkan "Weiter →")
|
||||
const overSel = '.ggs-modal-overlay,.ggs-overlay,.ggs-overlay-card,.sn-overlay,'
|
||||
+ '.overlay,.overlay-card,.splash-overlay,.lg-splash-overlay,.modal,'
|
||||
+ '.st-hint-overlay,.st-hint-modal,#vulk-overlay,#vulk-modal,.ggs-qi-back,'
|
||||
+ '[id*="Onb"],[id*="onboard"],[id*="overlay" i],[id*="modal" i],'
|
||||
+ '[class*="onb"],[class*="welcome"],[class*="tutorial"],[class*="intro"],'
|
||||
+ '[class*="willkommen"],[class*="overlay" i],[class*="ggs-qi"]';
|
||||
const overlays = [...document.querySelectorAll(overSel)].filter((o) => {
|
||||
if (!rendered(o)) return false;
|
||||
const r = o.getBoundingClientRect();
|
||||
return r.width > 240 && r.height > 150;
|
||||
});
|
||||
const proceedRx = /^(weiter|weiter gehts|los gehts|los geht s|auf gehts|verstanden|alles klar|habe verstanden|fertig|los arbeiten|jetzt starten|jetzt loslegen|jetzt spielen|spiel starten|neue partie|partie starten|los|okay|ok|schliessen|start|starten|beginnen)$/;
|
||||
for (const ov of overlays) {
|
||||
const btns = [...ov.querySelectorAll('button,a,[role=button],.btn')].filter(rendered);
|
||||
let el = btns.find((b) => proceedRx.test(norm(b.textContent)));
|
||||
if (!el) el = btns.find((b) => /^(x|close)$/.test(norm(b.textContent)) || /(^|\s)(close|ggs-modal-close)(\s|$)/i.test(b.className));
|
||||
if (el) { el.click(); return 'proceed:' + norm(el.textContent).slice(0, 24); }
|
||||
}
|
||||
return null;
|
||||
}).catch(() => null);
|
||||
}
|
||||
|
||||
// Noch ein Onboarding-Overlay sichtbar? (Heuristik für den Report)
|
||||
async function onboardingStillVisible(page) {
|
||||
return await page.evaluate(() => {
|
||||
const rx = /(willkommen|wusstest du|anleitung|was lerne ich|so funktioniert|einf(ü|u)hrung|beobachtungs-?aufgaben|dein kreislauf|uberspringen|überspringen|vulkanologie|observatorium|du erkundest die planeten|was tust du)/i;
|
||||
const els = [...document.querySelectorAll('.overlay,.ggs-overlay,.ggs-modal-overlay,.sn-overlay,.st-hint-overlay,#vulk-overlay,[class*="onb"],[class*="tutorial"],[class*="intro"],[class*="welcome"],[class*="overlay" i]')];
|
||||
return els.some((el) => {
|
||||
const r = el.getBoundingClientRect();
|
||||
if (r.width < 240 || r.height < 150) return false;
|
||||
const s = getComputedStyle(el);
|
||||
if (s.visibility === 'hidden' || s.display === 'none' || +s.opacity < 0.05 || el.classList.contains('hidden')) return false;
|
||||
return rx.test((el.textContent || '').slice(0, 500));
|
||||
});
|
||||
}).catch(() => false);
|
||||
}
|
||||
|
||||
async function clickSel(page, sel) {
|
||||
return await page.evaluate((sel) => {
|
||||
const el = [...document.querySelectorAll(sel)].find((e) => {
|
||||
const r = e.getBoundingClientRect();
|
||||
const s = getComputedStyle(e);
|
||||
return r.width > 4 && r.height > 4 && s.visibility !== 'hidden' && s.display !== 'none' && !e.classList.contains('hidden');
|
||||
});
|
||||
if (el) { el.click(); return true; }
|
||||
return false;
|
||||
}, sel).catch(() => false);
|
||||
}
|
||||
|
||||
async function clickByText(page, source) {
|
||||
return await page.evaluate((src) => {
|
||||
const rx = new RegExp(src, 'i');
|
||||
const norm = (s) => (s || '').replace(/\s+/g, ' ').trim().replace(/[^\p{L}\p{N} ]+/gu, '').trim();
|
||||
const el = [...document.querySelectorAll('button,a,[role=button],.btn')].find((e) => {
|
||||
const r = e.getBoundingClientRect();
|
||||
const s = getComputedStyle(e);
|
||||
if (r.width < 6 || r.height < 6 || s.visibility === 'hidden' || s.display === 'none' || e.classList.contains('hidden')) return false;
|
||||
return rx.test(norm(e.textContent));
|
||||
});
|
||||
if (el) { el.click(); return true; }
|
||||
return false;
|
||||
}, source).catch(() => false);
|
||||
}
|
||||
|
||||
async function skipLoop(page, rounds = 12) {
|
||||
const seq = [];
|
||||
for (let i = 0; i < rounds; i++) {
|
||||
const r = await skipStep(page);
|
||||
if (!r) break;
|
||||
seq.push(r);
|
||||
await page.waitForTimeout(420);
|
||||
}
|
||||
return seq;
|
||||
}
|
||||
|
||||
// ---- pro-Sim: Auswahl-Screen betreten, dann Tutorial wegklicken ---------
|
||||
const ENTRY = {
|
||||
// heli: Flugkarte braucht PHP-injizierte Waypoints (WP), die beim direkten
|
||||
// Aufruf von game.html fehlen (-> "WP is not defined"). Daher bleibt der
|
||||
// stabile Gameplay-Screen die Einsatzzentrale (Missionsauswahl nach Onboarding).
|
||||
'wal': async (page) => {
|
||||
await clickSel(page, '.era-card-cta'); // "In dieser Welt starten →"
|
||||
await page.waitForTimeout(1800);
|
||||
await skipLoop(page);
|
||||
},
|
||||
'tourismusregion': async (page) => {
|
||||
await clickSel(page, '#mapList .map-btn, .map-btn'); // Wegkarte wählen
|
||||
await page.waitForTimeout(3000); // 3D-Szene
|
||||
await skipLoop(page); // "Willkommen …" weg
|
||||
},
|
||||
'tourismustal': async (page) => {
|
||||
await clickSel(page, '[data-scene]'); // Szene wählen
|
||||
await page.waitForTimeout(3000);
|
||||
await skipLoop(page); // "Die Gäste …" weg
|
||||
},
|
||||
'eu-werkstatt': async (page) => {
|
||||
await clickSel(page, '.scenario-card'); // Szenario betreten
|
||||
await page.waitForTimeout(1600);
|
||||
await skipLoop(page, 8); // Konzept-Intro weg
|
||||
await page.waitForTimeout(900);
|
||||
await clickByText(page, 'los gehts|los geht|^weiter|verstanden|alles klar');
|
||||
await page.waitForTimeout(700);
|
||||
await skipLoop(page, 4);
|
||||
},
|
||||
};
|
||||
|
||||
// Nach dem Wegklicken des Onboardings noch aufräumen, um die echte Szene zu zeigen.
|
||||
const POST = {
|
||||
'vulkan': async (page) => {
|
||||
// "Los geht's" öffnet direkt das erste Aufgaben-Modal (#vulk-overlay).
|
||||
// Schließen -> darunter liegt die 3D-Vulkanszene + Steuerpanel (Slider).
|
||||
await page.evaluate(() => { const o = document.getElementById('vulk-overlay'); if (o) o.classList.remove('show'); });
|
||||
await page.waitForTimeout(500);
|
||||
},
|
||||
};
|
||||
|
||||
const PLAY2 = {
|
||||
'vulkan': async (page) => { await clickSel(page, '#erupt-btn'); await page.waitForTimeout(3200); },
|
||||
'sonnensystem': async (page) => { await clickSel(page, '#obs-open-btn'); await page.waitForTimeout(1800); await skipLoop(page, 4); await page.waitForTimeout(1200); },
|
||||
'energiemanager': async (page) => { await clickSel(page, '#btnRunDay'); await page.waitForTimeout(3200); },
|
||||
};
|
||||
|
||||
(async () => {
|
||||
const onlyArg = (process.argv.find((a) => a.startsWith('--only=')) || '').slice(7);
|
||||
const vpArg = (process.argv.find((a) => a.startsWith('--vp=')) || '').slice(5);
|
||||
const list = onlyArg ? SIMS.filter((s) => onlyArg.split(',').includes(s.id)) : SIMS;
|
||||
const vps = vpArg ? VIEWPORTS.filter((v) => v.key === vpArg) : VIEWPORTS;
|
||||
|
||||
const browser = await chromium.launch({
|
||||
args: ['--use-gl=swiftshader', '--ignore-gpu-blocklist', '--enable-unsafe-swiftshader'],
|
||||
});
|
||||
|
||||
for (const vp of vps) {
|
||||
console.log(`\n===== ${vp.key} (${vp.w}x${vp.h}) =====`);
|
||||
for (const sim of list) {
|
||||
const ctx = await browser.newContext({ viewport: { width: vp.w, height: vp.h }, deviceScaleFactor: 1 });
|
||||
const page = await ctx.newPage();
|
||||
const errs = [];
|
||||
page.on('pageerror', (e) => { if (errs.length < 3) errs.push('PE:' + e.message.slice(0, 50)); });
|
||||
|
||||
const url = `${BASE_URL}/${sim.id}/game.html`;
|
||||
try {
|
||||
await page.goto(url, { waitUntil: 'load', timeout: 40000 });
|
||||
} catch (e) { errs.push('GOTO:' + e.message.slice(0, 40)); }
|
||||
await page.waitForTimeout(3200); // 3D / CDN
|
||||
|
||||
let seq = await skipLoop(page, 14); // sofortiges Onboarding
|
||||
if (ENTRY[sim.id]) await ENTRY[sim.id](page); // Auswahl-Screen + Tutorial
|
||||
await page.waitForTimeout(2000);
|
||||
// Zweiter Durchlauf: 3D-Sims (vulkan/sonnensystem) laden ihr Onboarding
|
||||
// asynchron erst NACH dem ersten Skip -> hier erneut wegklicken.
|
||||
seq = seq.concat(await skipLoop(page, 10));
|
||||
if (POST[sim.id]) await POST[sim.id](page);
|
||||
await page.waitForTimeout(1000);
|
||||
|
||||
const stuck = await onboardingStillVisible(page);
|
||||
let ok = false;
|
||||
try {
|
||||
await page.screenshot({ path: path.join(SHOTS_DIR, `${sim.id}__${vp.key}__play.png`) });
|
||||
ok = true;
|
||||
} catch (e) { errs.push('SHOT:' + e.message.slice(0, 40)); }
|
||||
|
||||
let ok2 = null;
|
||||
if (sim.play2 && PLAY2[sim.id]) {
|
||||
try {
|
||||
await PLAY2[sim.id](page);
|
||||
await page.waitForTimeout(1000);
|
||||
await page.screenshot({ path: path.join(SHOTS_DIR, `${sim.id}__${vp.key}__play2.png`) });
|
||||
ok2 = true;
|
||||
} catch (e) { ok2 = false; errs.push('SHOT2:' + e.message.slice(0, 40)); }
|
||||
}
|
||||
|
||||
console.log(
|
||||
' ' + sim.id.padEnd(18)
|
||||
+ (ok ? 'play OK' : 'play FAIL')
|
||||
+ (ok2 === null ? '' : ok2 ? ' · play2 OK' : ' · play2 FAIL')
|
||||
+ (stuck ? ' [!! ONBOARDING NOCH SICHTBAR]' : '')
|
||||
+ ' clicks=' + seq.length + (seq.length ? ' (' + seq.slice(0, 6).join(',') + ')' : '')
|
||||
+ (errs.length ? ' ' + errs.slice(0, 2).join(' | ') : '')
|
||||
);
|
||||
|
||||
await ctx.close();
|
||||
}
|
||||
}
|
||||
await browser.close();
|
||||
console.log('\nFertig. Galerie: http://localhost/geograsim/App/.LocalDeveloperTools/display-preview/display_preview.html');
|
||||
})();
|
||||
|
After Width: | Height: | Size: 369 KiB |
|
After Width: | Height: | Size: 304 KiB |
|
After Width: | Height: | Size: 194 KiB |
|
After Width: | Height: | Size: 167 KiB |
|
After Width: | Height: | Size: 145 KiB |
|
After Width: | Height: | Size: 154 KiB |
|
After Width: | Height: | Size: 228 KiB |
|
After Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 114 KiB |
|
After Width: | Height: | Size: 175 KiB |
|
After Width: | Height: | Size: 286 KiB |
|
After Width: | Height: | Size: 106 KiB |
|
After Width: | Height: | Size: 247 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 301 KiB |
|
After Width: | Height: | Size: 279 KiB |
|
After Width: | Height: | Size: 153 KiB |
|
After Width: | Height: | Size: 167 KiB |
|
After Width: | Height: | Size: 492 KiB |
|
After Width: | Height: | Size: 316 KiB |
|
After Width: | Height: | Size: 303 KiB |
|
After Width: | Height: | Size: 170 KiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 1.2 MiB |
|
After Width: | Height: | Size: 721 KiB |
|
After Width: | Height: | Size: 505 KiB |
|
After Width: | Height: | Size: 316 KiB |
|
After Width: | Height: | Size: 225 KiB |
|
After Width: | Height: | Size: 240 KiB |
|
After Width: | Height: | Size: 242 KiB |
|
After Width: | Height: | Size: 218 KiB |
|
After Width: | Height: | Size: 164 KiB |
|
After Width: | Height: | Size: 454 KiB |
|
After Width: | Height: | Size: 306 KiB |
|
After Width: | Height: | Size: 277 KiB |
|
After Width: | Height: | Size: 189 KiB |
|
After Width: | Height: | Size: 154 KiB |
|
After Width: | Height: | Size: 174 KiB |
|
After Width: | Height: | Size: 184 KiB |
|
After Width: | Height: | Size: 123 KiB |
|
After Width: | Height: | Size: 137 KiB |
|
After Width: | Height: | Size: 147 KiB |
|
After Width: | Height: | Size: 266 KiB |
|
After Width: | Height: | Size: 264 KiB |
|
After Width: | Height: | Size: 177 KiB |
|
After Width: | Height: | Size: 188 KiB |
|
After Width: | Height: | Size: 2.1 MiB |
|
After Width: | Height: | Size: 192 KiB |
|
After Width: | Height: | Size: 1.1 MiB |
|
After Width: | Height: | Size: 160 KiB |
|
After Width: | Height: | Size: 714 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 444 KiB |
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 485 KiB |
|
After Width: | Height: | Size: 595 KiB |
|
After Width: | Height: | Size: 298 KiB |
|
After Width: | Height: | Size: 332 KiB |
|
After Width: | Height: | Size: 413 KiB |
|
After Width: | Height: | Size: 238 KiB |
|
After Width: | Height: | Size: 391 KiB |
|
After Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 178 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 601 KiB |
|
After Width: | Height: | Size: 85 KiB |
|
After Width: | Height: | Size: 500 KiB |
|
After Width: | Height: | Size: 79 KiB |
@@ -0,0 +1,272 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="de">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>GeoGraSim — Test-Checkliste (19.08.2026)</title>
|
||||
<style>
|
||||
:root{
|
||||
--bg:#f4f2ec; --card:#fff; --ink:#242018; --muted:#7a7266; --line:rgba(0,0,0,.08);
|
||||
--accent:#4a7c8a; --accent-d:#356070; --ok:#4a8a5a; --warn:#c58a2a; --sim:#7a5ca8;
|
||||
}
|
||||
*{margin:0;padding:0;box-sizing:border-box}
|
||||
body{font-family:'Inter',system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--ink);line-height:1.5;padding-bottom:4rem}
|
||||
header{position:sticky;top:0;z-index:10;background:#fff;border-bottom:1px solid var(--line);
|
||||
padding:.9rem 1.2rem;display:flex;align-items:center;gap:1rem;flex-wrap:wrap;box-shadow:0 1px 6px rgba(0,0,0,.04)}
|
||||
header h1{font-size:1.15rem;font-weight:900;color:var(--accent-d);letter-spacing:-.02em}
|
||||
header .sub{font-size:.72rem;color:var(--muted)}
|
||||
.progress{margin-left:auto;display:flex;align-items:center;gap:.6rem;font-size:.8rem;font-weight:700;color:var(--accent-d)}
|
||||
.bar{width:160px;height:9px;border-radius:99px;background:#e4e0d6;overflow:hidden}
|
||||
.bar > div{height:100%;background:var(--ok);width:0;transition:width .3s}
|
||||
.reset{font-size:.66rem;color:var(--muted);border:1px solid var(--line);background:#fff;border-radius:6px;padding:.25rem .5rem;cursor:pointer}
|
||||
.wrap{max-width:920px;margin:1.4rem auto;padding:0 1.1rem}
|
||||
.intro{font-size:.86rem;color:var(--muted);margin-bottom:1.4rem;background:#fff;border:1px solid var(--line);border-radius:10px;padding:.8rem 1rem}
|
||||
.intro code{background:#eee9df;padding:.05rem .35rem;border-radius:4px;font-size:.85em}
|
||||
section{margin-bottom:1.8rem}
|
||||
.sec-h{font-size:.7rem;font-weight:800;text-transform:uppercase;letter-spacing:.1em;color:var(--accent);
|
||||
margin:0 0 .6rem .2rem;display:flex;align-items:center;gap:.5rem}
|
||||
.sec-h .cnt{font-size:.62rem;color:var(--muted);font-weight:600;letter-spacing:.02em}
|
||||
.item{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:.85rem 1rem;margin-bottom:.7rem;
|
||||
box-shadow:0 1px 3px rgba(0,0,0,.03);transition:opacity .2s}
|
||||
.item.done{opacity:.55}
|
||||
.item-top{display:flex;gap:.7rem;align-items:flex-start}
|
||||
.item-top input[type=checkbox]{width:22px;height:22px;margin-top:.1rem;accent-color:var(--ok);cursor:pointer;flex-shrink:0}
|
||||
.item-title{font-weight:800;font-size:.98rem}
|
||||
.item.done .item-title{text-decoration:line-through;text-decoration-color:rgba(0,0,0,.3)}
|
||||
.tag{display:inline-block;font-size:.58rem;font-weight:800;text-transform:uppercase;letter-spacing:.05em;
|
||||
padding:.12rem .5rem;border-radius:99px;vertical-align:middle;margin-left:.5rem}
|
||||
.tag.live{background:#dceadd;color:#2f6b3a}
|
||||
.tag.pending{background:#fdeecd;color:#8a6510}
|
||||
.body{padding-left:calc(22px + .7rem);margin-top:.4rem;font-size:.86rem;color:#4a463d}
|
||||
.body .row{margin:.28rem 0}
|
||||
.body b{color:var(--ink)}
|
||||
.k{display:inline-block;min-width:74px;font-weight:700;color:var(--muted);font-size:.72rem;text-transform:uppercase;letter-spacing:.03em}
|
||||
a.url{color:var(--accent-d);font-family:ui-monospace,monospace;font-size:.82em;text-decoration:none;border-bottom:1px dotted var(--accent)}
|
||||
a.url:hover{background:#eaf2f4}
|
||||
.exp{background:#f0f6f1;border-left:3px solid var(--ok);border-radius:0 6px 6px 0;padding:.35rem .6rem;margin-top:.35rem;font-size:.82rem;color:#33613f}
|
||||
.note{width:100%;margin-top:.5rem;border:1px solid var(--line);border-radius:7px;padding:.4rem .55rem;font-family:inherit;
|
||||
font-size:.82rem;resize:vertical;min-height:0;height:2rem;background:#fcfbf8;color:var(--ink)}
|
||||
.note::placeholder{color:#b3ac9e}
|
||||
footer{text-align:center;color:var(--muted);font-size:.72rem;margin:2rem 0}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<div>
|
||||
<h1>🧪 GeoGraSim — Test-Checkliste</h1>
|
||||
<div class="sub">Alle Erledigungen seit den Weltküche-Lebensmitteln · Stand 19.08.2026 · lokal testen</div>
|
||||
</div>
|
||||
<div class="progress">
|
||||
<span id="pcount">0 / 0</span>
|
||||
<div class="bar"><div id="pbar"></div></div>
|
||||
<button class="reset" onclick="if(confirm('Alle Haken + Notizen zurücksetzen?')){localStorage.clear();location.reload();}">reset</button>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="wrap">
|
||||
<div class="intro">
|
||||
Basis-URL lokal: <code>http://localhost/geograsim/App/</code> · <b>Haken & Notizen</b> werden im Browser gespeichert.
|
||||
<span class="tag live">live</span> = auf Prod, <span class="tag pending">bereit</span> = committed, kommt mit dem nächsten Deploy.
|
||||
Für Admin-Seiten zuerst über <a class="url" href="http://localhost/geograsim/App/admin.html" target="_blank">admin.html</a> anmelden (Username <b>Thomas</b> → PIN ist lokal vorausgefüllt).
|
||||
</div>
|
||||
|
||||
<!-- ================= WELTKÜCHE (SIM) ================= -->
|
||||
<section data-sec="Weltküche – Simulation"></section>
|
||||
|
||||
<!-- ================= WELTKÜCHE (LEHRPLAN/ADMIN) ================= -->
|
||||
<section data-sec="Weltküche – Lehrplan & Admin"></section>
|
||||
|
||||
<!-- ================= LEHRER-COCKPIT ================= -->
|
||||
<section data-sec="Lehrer-Cockpit (teacher.html)"></section>
|
||||
|
||||
<!-- ================= TOURISMUSREGION ================= -->
|
||||
<section data-sec="Tourismusregion"></section>
|
||||
|
||||
<!-- ================= LOGISTIK & PLATTFORM ================= -->
|
||||
<section data-sec="Logistik & Plattform"></section>
|
||||
|
||||
<!-- ================= ADMIN & AUTH ================= -->
|
||||
<section data-sec="Admin & Auth-Fundament"></section>
|
||||
</div>
|
||||
|
||||
<footer>GeoGraSim · Test-Checkliste · lokal generiert 19.08.2026</footer>
|
||||
|
||||
<script>
|
||||
// Alle Test-Items als Daten — daraus wird die Liste gebaut.
|
||||
const BASE = 'http://localhost/geograsim/App/';
|
||||
function u(path){ return BASE + path; }
|
||||
const ITEMS = {
|
||||
'Weltküche – Simulation': [
|
||||
{ id:'wk-artikel', t:'Korrekte Artikel für alle 70 Zutaten', tag:'live',
|
||||
w:'der/die/das je Zutat („die Kartoffel", „der Pfeffer", „das Olivenöl") statt Platzhalter.',
|
||||
url:'sims/weltkueche/game.html', steps:'Ein Gericht spielen, Zutat lösen/falsch klicken – im Feedback-Satz steht der richtige Artikel.',
|
||||
exp:'Nie mehr „der/die/das Kartoffel" – immer „die Kartoffel" usw.' },
|
||||
{ id:'wk-ukraine', t:'Verdrehter Herkunfts-Satz korrigiert (Ukraine-Fall)', tag:'live',
|
||||
w:'Bei fernem Großproduzenten (z. B. Ukraine-Kartoffel im AT-Gericht) sachlich korrektes Feedback.',
|
||||
url:'sims/weltkueche/game.html', steps:'Tiroler Gröstl → Kartoffel → ein fernes Land wie Ukraine anklicken.',
|
||||
exp:'„…in unseren Handel kommt davon kaum etwas… nimmt man die Kartoffel aus Österreich oder einem Nachbarland." (nicht mehr „…stammt die Kartoffel von dort").' },
|
||||
{ id:'wk-heimat', t:'Heimat-Banner neu formuliert', tag:'live',
|
||||
w:'Erklärt „bevorzugt aus AT, aber AT deckt den Bedarf nicht allein".',
|
||||
url:'sims/weltkueche/game.html', steps:'AT-Gericht, eine Heimat-Zutat lösen → grünes Banner lesen.',
|
||||
exp:'„Zutaten werden zwar bevorzugt aus Österreich verwendet, aber Österreich allein deckt den Bedarf nicht ab – darum zählt auch ein Nachbarland."' },
|
||||
{ id:'wk-gravitation', t:'Herkunft per Handels-Gravitation (Nähe × Menge)', tag:'pending',
|
||||
w:'Zweit-Lieferant = nächster großer Nachbar, nicht ferner Großproduzent.',
|
||||
url:'sims/weltkueche/game.html', steps:'Ein AT-Gericht mit Eiern/Kartoffel spielen – richtige Länder prüfen.',
|
||||
exp:'AT-Eier → Österreich + Deutschland (NICHT Frankreich), obwohl FR mehr Eier erzeugt.' },
|
||||
{ id:'wk-punkte', t:'Punktefix: „alle Falschen zuerst = 0"', tag:'pending',
|
||||
w:'Strafe pro Fehlklick = 100 ÷ Anzahl Distraktoren.',
|
||||
url:'sims/weltkueche/game.html', steps:'Bei einer Zutat ALLE falschen Länder zuerst anklicken, dann die richtigen.',
|
||||
exp:'Ergebnis 0 Punkte. Banner zeigt die tatsächliche Strafe pro Fehlklick.' },
|
||||
{ id:'wk-phase', t:'Live-State zeigt echten Fortschritt statt „forschen"', tag:'live',
|
||||
w:'GGS_LIVE_STATE-Phase = „Gericht X · Zutat Y/Z".',
|
||||
url:'teacher.html', steps:'Als Lehrer im Cockpit „Aktuell" ein Weltküche-Kind ansehen (oder Live-State im Sim prüfen).',
|
||||
exp:'Phase/Info zeigt „Gericht 2 · Zutat 3/5" – nicht dauerhaft „forschen".' },
|
||||
{ id:'wk-submit', t:'Backend-Submit + Persistenz geschaffter Gerichte', tag:'live',
|
||||
w:'Pro fertigem Gericht ein assessments-Eintrag; geschaffte Gerichte bleiben nach Reload.',
|
||||
url:'sims/weltkueche/game.html', steps:'Ein Gericht abschließen, Seite neu laden.',
|
||||
exp:'Bereits geschaffte Gerichte bleiben erkennbar; im Lehrer-Cockpit taucht das Ergebnis auf.' },
|
||||
],
|
||||
'Weltküche – Lehrplan & Admin': [
|
||||
{ id:'wk-lehrplan', t:'Lehrplan-Bezug auf der Weltküche-Modulseite', tag:'live',
|
||||
w:'Kompetenz „Welternährung, Konsum und globale Disparitäten" + Anker.',
|
||||
url:'modul-weltkueche', steps:'Seite öffnen, zu „Lehrplan-Bezug" scrollen.',
|
||||
exp:'Kompetenzen + Anker sichtbar (nicht mehr „Noch keine Kompetenzen zugeordnet").' },
|
||||
{ id:'wk-filter', t:'Länder-Filter im Lehrplan-Bezug wirkt', tag:'live',
|
||||
w:'Filter-Chips (Alle/AT/DE/CH/FL) blenden Fach-Anker wirklich um.',
|
||||
url:'modul-weltkueche', steps:'Bei „Lehrplan-Bezug" auf Deutschland, dann Österreich klicken.',
|
||||
exp:'Sichtbare Fach-Anker ändern sich je Land (vorher passierte nichts).' },
|
||||
{ id:'wk-admin', t:'Admin-QA: Weltküche-Herkunftsübersicht (NEU)', tag:'pending',
|
||||
w:'Pro Gericht × Zutat richtige Länder + Distraktoren; „nur Auffällige"-Filter.',
|
||||
url:'admin-weltkueche.html', steps:'Als Admin einloggen, Seite öffnen. Suche/Kategorie testen, „nur Auffällige" aktivieren.',
|
||||
exp:'30 Gerichte; Kartoffel/Eier → 🟢 AT+DE. „Nur Auffällige" zeigt ~5 Kandidaten zum Prüfen.' },
|
||||
],
|
||||
'Lehrer-Cockpit (teacher.html)': [
|
||||
{ id:'tc-menu', t:'Menü „Live" → „Ergebnisse" mit Tag · Aktuell · Vergleich · Gesamt', tag:'pending',
|
||||
w:'Umbenannt + 4. Unteransicht „Gesamt" (alte Ergebnis-Ansicht).',
|
||||
url:'teacher.html', steps:'Als Lehrer einloggen, Klasse wählen, Tab „Ergebnisse".',
|
||||
exp:'Vier Unteransichten; „Gesamt" zeigt die frühere Ergebnis-/Auswertungsansicht.' },
|
||||
{ id:'tc-quali', t:'Qualitäts-Kennzahl (richtig ↔ falsch als Balken)', tag:'pending',
|
||||
w:'Grafischer Balken (grün/rot) je Kind in Aktuell + Vergleich.',
|
||||
url:'teacher.html', steps:'Ergebnisse → Aktuell/Vergleich bei aktivem Weltküche-Kind.',
|
||||
exp:'Zweifarbiger Balken + %-Wert („blödeln vs. gut" sichtbar).' },
|
||||
{ id:'tc-labels', t:'Klartext-Labels statt Jargon', tag:'pending',
|
||||
w:'„Stark/Solide/Viele Fehler" statt „Kritisch/OK"; „Gerade dabei" statt „Phase".',
|
||||
url:'teacher.html', steps:'Aktuell/Vergleich ansehen.',
|
||||
exp:'Keine „Kritisch"-Bezeichnung mehr.' },
|
||||
{ id:'tc-simlabels', t:'Sim-Bezeichner: Wort + 3-Buchstaben-Kürzel', tag:'pending',
|
||||
w:'Kein „Log L1" mehr — enger Balken zeigt Kürzel (LOG), breiter das Wort.',
|
||||
url:'teacher.html', steps:'Ergebnisse → Tag, Session-Balken ansehen.',
|
||||
exp:'Balken tragen LOG/Logistik statt „Log L1".' },
|
||||
{ id:'tc-logistik', t:'Logistik hat kuratierte Spalten (statt Roh-Dump)', tag:'pending',
|
||||
w:'Stufe · Budget · Geliefert · Unterwegs · Offen · Verspätet · Fortschritt.',
|
||||
url:'teacher.html', steps:'Ergebnisse → Aktuell mit aktivem Logistik-Kind.',
|
||||
exp:'Sinnvolle Spalten – keine simId/__activeMs/timestamp-Spalten mehr.' },
|
||||
{ id:'tc-streifen', t:'Aktivitätsstreifen: Farbe je Sim, Höhe=Erfolg, Rahmen=Zustand', tag:'pending',
|
||||
w:'Fertig = geschlossener Rahmen · läuft = rechts offen · Abbruch = gestrichelt + ✖.',
|
||||
url:'teacher.html', steps:'Ergebnisse → Tag, mit Sessions eines Tages.',
|
||||
exp:'Balken je Sim gefärbt, höher = besser; Rahmen/✖ zeigen den Zustand; Legende erklärt es.' },
|
||||
{ id:'tc-assess', t:'assessment-Skip-Fix (keine leeren Ping-Zeilen mehr)', tag:'pending',
|
||||
w:'„started/running"-Pings landen nicht mehr als leere Zeilen in Ergebnisse/Tag.',
|
||||
url:'teacher.html', steps:'Nach etwas Spielzeit Ergebnisse/Tag ansehen.',
|
||||
exp:'Nur echte Abschlüsse als Balken – kein leeres Rauschen.' },
|
||||
],
|
||||
'Tourismusregion': [
|
||||
{ id:'tr-start', t:'Startseite: keine Name/Klasscode-Felder, Klick auf Route startet', tag:'live',
|
||||
w:'Felder entfernt; Klick auf eine Wegkarte startet sofort (kein „Partie starten").',
|
||||
url:'sims/tourismusregion/game.html', steps:'Sim öffnen, eine Wegkarte anklicken.',
|
||||
exp:'Keine Eingabefelder; Partie startet direkt bei Kartenklick.' },
|
||||
{ id:'tr-ipad', t:'iPad-Responsive (Panels decken die Karte nicht mehr zu)', tag:'live',
|
||||
w:'Panels mit Höhen-Deckel + eigene iPad-Landscape-Regeln. AM IPAD TESTEN!',
|
||||
url:'sims/tourismusregion/game.html', steps:'Am echten iPad (Landscape) öffnen und ein Gebäude antippen.',
|
||||
exp:'KPIs/Baumenü/Info-Panel überdecken die Karte nicht; Info-Panel scrollt statt zu überziehen.' },
|
||||
{ id:'tr-lift', t:'Seilbahn hat eine Talstation (nicht mehr „transparent")', tag:'live',
|
||||
w:'Talstation mit Dach + Umlenkrad unten am Lift.',
|
||||
url:'sims/tourismusregion/game.html', steps:'Seilbahn bauen (Berg erschließen), auf die Talstation schauen.',
|
||||
exp:'Solider Baukörper unten – kein durchsichtiger Lift-Anfang.' },
|
||||
{ id:'tr-save', t:'Abschluss: kein „Ergebnis speichern"-Button (Auto-Save)', tag:'live',
|
||||
w:'Automatisches Speichern am Partie-Ende; Button entfernt.',
|
||||
url:'sims/tourismusregion/game.html', steps:'Eine Partie zu Ende bringen.',
|
||||
exp:'Hinweis „automatisch gespeichert", kein Speichern-Button.' },
|
||||
{ id:'tr-pass', t:'Neue Karte „Passstraße"', tag:'live',
|
||||
w:'Route bergauf (136 Punkte) + 41 Bauslots + Hintergrundbild.',
|
||||
url:'sims/tourismusregion/game.html', steps:'Im Startbildschirm „Passstraße" wählen.',
|
||||
exp:'Karte lädt, Route + Bauslots passen aufs Bild (optisch prüfen).' },
|
||||
{ id:'tr-balance', t:'Balance: Umwelt beißt jetzt (Übertourismus)', tag:'pending',
|
||||
w:'Zu viel Bauen + Verkehr senken die Umwelt spürbar; Umwelt-Malus wirkt.',
|
||||
url:'sims/tourismusregion/game.html', steps:'Viel/dicht bauen und laufen lassen; Umwelt-KPI beobachten.',
|
||||
exp:'Umwelt fällt deutlich (Richtung <45), umweltbewusste Gäste werden unzufriedener.' },
|
||||
{ id:'tr-erklaer', t:'Schüler-Erklärung: Umwelt & Naturschutzgebiet', tag:'pending',
|
||||
w:'Willkommenskarte + Warnkarte bei Umwelt<50 + klarere Naturschutz-Beschreibung.',
|
||||
url:'sims/tourismusregion/game.html', steps:'Neu starten → Willkommenskarte lesen; Umwelt absacken lassen → Warnkarte.',
|
||||
exp:'Karte erklärt Umwelt-Mechanik + Naturschutzgebiet; Warnkarte erscheint bei <50.' },
|
||||
],
|
||||
'Logistik & Plattform': [
|
||||
{ id:'lg-pause', t:'Logistik-Pause friert die Aktivzeit ein', tag:'pending',
|
||||
w:'Bei Pause zählt die „Seit"-Zeit im Cockpit nicht weiter.',
|
||||
url:'sims/logistik/game.html', steps:'Logistik spielen, ⏸ drücken, im Lehrer-Cockpit die Aktivzeit beobachten.',
|
||||
exp:'Aktivzeit steht still, solange pausiert; läuft nach dem Fortsetzen weiter.' },
|
||||
{ id:'pf-scripts', t:'Wrapper-Bug behoben (/teacher lud kein Script mehr)', tag:'live',
|
||||
w:'Favicon wurde ins letzte </head> injiziert – zerschoss ein JS-Popup-Script.',
|
||||
url:'teacher', steps:'Die /teacher-Route (Wrapper) öffnen.',
|
||||
exp:'Seite lädt sauber, keine „Invalid token"-Konsolenfehler. (teacher.html direkt lief immer.)' },
|
||||
],
|
||||
'Admin & Auth-Fundament': [
|
||||
{ id:'ad-login', t:'Lokaler Admin-Login ohne Mailversand (Dev-PIN)', tag:'pending',
|
||||
w:'PIN wird lokal vorausgefüllt; Mailer-Fehler sperrt nicht mehr aus. Auf Prod bleibt 2FA-Mail Pflicht.',
|
||||
url:'admin.html', steps:'Username Thomas + Passwort → „Anmelden".',
|
||||
exp:'PIN-Feld ist vorausgefüllt („Dev: … vorausgefüllt"), „Bestätigen" → eingeloggt.' },
|
||||
{ id:'auth-found', t:'Auth-Fundament JWT + Redis (schlafend, non-breaking)', tag:'pending',
|
||||
w:'firebase/php-jwt + predis + Jwt/SessionStore + Session-Kanalisierung. AUTH_BACKEND=session.',
|
||||
url:'', steps:'Kein direkter Test nötig — nur sicherstellen, dass Login/Admin normal funktionieren.',
|
||||
exp:'Alles läuft wie bisher (das Fundament ist inaktiv, bis der JWT-Cutover kommt).' },
|
||||
],
|
||||
};
|
||||
|
||||
const listWrap = document.querySelector('.wrap');
|
||||
document.querySelectorAll('section[data-sec]').forEach(sec => {
|
||||
const name = sec.getAttribute('data-sec');
|
||||
const items = ITEMS[name] || [];
|
||||
let html = '<div class="sec-h">' + name + ' <span class="cnt">' + items.length + ' Punkte</span></div>';
|
||||
items.forEach(it => {
|
||||
const urlHtml = it.url ? '<a class="url" href="' + u(it.url) + '" target="_blank" rel="noopener">' + u(it.url) + '</a>' : '<span style="color:#b3ac9e">—</span>';
|
||||
html += ''
|
||||
+ '<div class="item" data-id="' + it.id + '">'
|
||||
+ '<div class="item-top">'
|
||||
+ '<input type="checkbox" data-check="' + it.id + '">'
|
||||
+ '<div style="flex:1"><span class="item-title">' + it.t + '</span>'
|
||||
+ '<span class="tag ' + it.tag + '">' + (it.tag==='live'?'live':'bereit') + '</span></div>'
|
||||
+ '</div>'
|
||||
+ '<div class="body">'
|
||||
+ '<div class="row"><span class="k">Was</span> ' + it.w + '</div>'
|
||||
+ '<div class="row"><span class="k">Öffnen</span> ' + urlHtml + '</div>'
|
||||
+ '<div class="row"><span class="k">Testen</span> ' + it.steps + '</div>'
|
||||
+ '<div class="exp">✓ Erwartet: ' + it.exp + '</div>'
|
||||
+ '<textarea class="note" data-note="' + it.id + '" placeholder="Notiz / gefundene Abweichung…"></textarea>'
|
||||
+ '</div>'
|
||||
+ '</div>';
|
||||
});
|
||||
sec.innerHTML = html;
|
||||
});
|
||||
|
||||
// Persistenz + Fortschritt
|
||||
const checks = document.querySelectorAll('input[data-check]');
|
||||
function refresh(){
|
||||
let done = 0;
|
||||
checks.forEach(c => { if(c.checked){ done++; c.closest('.item').classList.add('done'); } else c.closest('.item').classList.remove('done'); });
|
||||
document.getElementById('pcount').textContent = done + ' / ' + checks.length;
|
||||
document.getElementById('pbar').style.width = (checks.length? (done/checks.length*100):0) + '%';
|
||||
}
|
||||
checks.forEach(c => {
|
||||
const key = 'chk_' + c.getAttribute('data-check');
|
||||
c.checked = localStorage.getItem(key) === '1';
|
||||
c.addEventListener('change', () => { localStorage.setItem(key, c.checked?'1':'0'); refresh(); });
|
||||
});
|
||||
document.querySelectorAll('textarea[data-note]').forEach(t => {
|
||||
const key = 'note_' + t.getAttribute('data-note');
|
||||
t.value = localStorage.getItem(key) || '';
|
||||
t.addEventListener('input', () => localStorage.setItem(key, t.value));
|
||||
});
|
||||
refresh();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -173,7 +173,7 @@ var SIMS = [
|
||||
start_population:{min:1000,max:20000,def:6000,label:'Start-Bevölkerung'},
|
||||
income_per_10k:{min:50,max:500,def:220,label:'Einnahmen pro 10.000 Bürger'},
|
||||
budget_loss:{min:-2000,max:0,def:-500,label:'Pleite-Grenze (Mio €, negativ)'},
|
||||
event_frequency:{min:0,max:1,def:0.3,step:0.1,label:'Ereignis-Häufigkeit (0–1)'},
|
||||
event_frequency:{min:0,max:1,def:0.3,step:0.1,label:'Ereignis-Häufigkeit (0 – 1)'},
|
||||
time_limit:{min:30,max:150,def:75,label:'Simulationsdauer (Runden)'}
|
||||
}},
|
||||
{id:'sim-05', name:'Klimawächter 2D (V1)', icon:'🌡️', img:'assets/img/card-climate.webp',
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* Icons sind sauber generierte Emblems (Flat-Scandinavian, keine Emojis) unter
|
||||
* assets/img/badges/. Gesperrte Abzeichen bleiben sichtbar (Zielvorstellung),
|
||||
* die Beschreibung ist das Ziel. Sterne laufen parallel; ggsErfolgToStars()
|
||||
* bildet den normierten Erfolg (0–100) auf 0–5 Sterne ab.
|
||||
* bildet den normierten Erfolg (0 – 100) auf 0 – 5 Sterne ab.
|
||||
*
|
||||
* progressObj (pro Sim): { plays, best_stars, level }
|
||||
* ==========================================================================*/
|
||||
|
||||
@@ -53,7 +53,7 @@
|
||||
const MONSOON = [5, 6, 7, 8];
|
||||
|
||||
// Regen pro Monat in mm.
|
||||
// Normal: Mumbai (Colaba) 1981–2010, India Meteorological Department.
|
||||
// Normal: Mumbai (Colaba) 1981 – 2010, India Meteorological Department.
|
||||
const NORMAL = [1, 0, 1, 0, 16, 506, 769, 472, 356, 82, 9, 3];
|
||||
// Schwacher Monsun (Dürre-Jahr): Spitzen-Monate stark reduziert.
|
||||
const WEAK = [1, 0, 1, 0, 10, 280, 420, 240, 180, 60, 6, 2];
|
||||
|
||||
@@ -322,7 +322,7 @@
|
||||
svgEl('text', { x: 450, y: 22, 'text-anchor': 'middle', 'font-size': '12', 'font-weight': '800', fill: '#1f4e5a' }, svg).textContent = 'Zusammengelegt';
|
||||
const mergedG = svgEl('g', {}, svg);
|
||||
|
||||
// Balken: Stückkosten je Gast (Skala 0–50 €, Höhe 110 px)
|
||||
// Balken: Stückkosten je Gast (Skala 0 – 50 €, Höhe 110 px)
|
||||
const BAR_BASE = 240, BAR_MAXH = 110, SCALE = 50;
|
||||
svgEl('line', { x1: 30, y1: BAR_BASE, x2: 570, y2: BAR_BASE, stroke: '#b5c9cf', 'stroke-width': '1.5' }, svg);
|
||||
// Referenzbalken links: 45 € (statisch)
|
||||
@@ -500,9 +500,9 @@
|
||||
};
|
||||
// Farbzonen
|
||||
[
|
||||
{ a1: -80, a2: -40, c: '#c85c4a' }, // 49,80–49,90
|
||||
{ a1: -40, a2: -20, c: '#e8833a' }, // 49,90–49,95
|
||||
{ a1: -20, a2: 20, c: '#5a8a5e' }, // 49,95–50,05
|
||||
{ a1: -80, a2: -40, c: '#c85c4a' }, // 49,80 – 49,90
|
||||
{ a1: -40, a2: -20, c: '#e8833a' }, // 49,90 – 49,95
|
||||
{ a1: -20, a2: 20, c: '#5a8a5e' }, // 49,95 – 50,05
|
||||
{ a1: 20, a2: 40, c: '#e8833a' },
|
||||
{ a1: 40, a2: 80, c: '#c85c4a' }
|
||||
].forEach(z => svgEl('path', { d: arcPath(z.a1, z.a2, R), stroke: z.c, 'stroke-width': '20', fill: 'none', 'stroke-linecap': 'butt', opacity: '0.9' }, svg));
|
||||
@@ -599,7 +599,7 @@
|
||||
<div class="ge-gh-pill" id="ge-ps-status" data-state="now">Das Unterbecken ist voll — pumpe Wasser hinauf!</div>
|
||||
</div>
|
||||
<p class="ge-note">Pumpspeicherkraftwerke sind bis heute der einzige großtechnische
|
||||
Stromspeicher: Aus 100 kWh Pumpstrom kommen rund 75–80 kWh wieder heraus
|
||||
Stromspeicher: Aus 100 kWh Pumpstrom kommen rund 75 – 80 kWh wieder heraus
|
||||
(Gesamtwirkungsgrad, hier gerechnet mit 78 %). Quellen: VERBUND (Malta- und
|
||||
Kaprun-Kraftwerke) · Fraunhofer ISE.</p>
|
||||
</div>
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
<li><a href="#mechanik">Mechanik-Erkenntnisse aus Trace-Tests</a></li>
|
||||
<li><a href="#ui">UI / Interaktion</a></li>
|
||||
<li><a href="#visual">Visualisierung (2D / 3D)</a></li>
|
||||
<li><a href="#erklaerungen">Erklärungen für Kinder 10–14</a></li>
|
||||
<li><a href="#erklaerungen">Erklärungen für Kinder 10 – 14</a></li>
|
||||
<li><a href="#folgen">Weitere Folgen des Klimawandels</a></li>
|
||||
<li><a href="#offen">Offene Punkte & nächste Schritte</a></li>
|
||||
</ol>
|
||||
@@ -129,7 +129,7 @@
|
||||
<section id="ziel">
|
||||
<h2>1. Didaktisches Ziel und Zielgruppe</h2>
|
||||
|
||||
<p>Der <strong>Klimawächter</strong> ist kein Spiel um einen high score. Er soll Schülerinnen und Schülern der 1.–4. Klasse Sekundarstufe I (ca. <strong>10–14 Jahre</strong>) vermitteln, dass:</p>
|
||||
<p>Der <strong>Klimawächter</strong> ist kein Spiel um einen high score. Er soll Schülerinnen und Schülern der 1.–4. Klasse Sekundarstufe I (ca. <strong>10 – 14 Jahre</strong>) vermitteln, dass:</p>
|
||||
<ul>
|
||||
<li>der Klimawandel träge ist — Folgen kommen verzögert, Entscheidungen wirken erst in Jahren</li>
|
||||
<li>es keine Wunderlösung gibt — man muss mehrere Strategien kombinieren</li>
|
||||
@@ -202,7 +202,7 @@
|
||||
<li>Deiche allein retten kurzfristig Häuser, aber nicht das Klima.</li>
|
||||
<li>Aufforsten ist wichtig, aber als Einzelmaßnahme zu langsam.</li>
|
||||
<li>Wind ist stärker als Solar, aber wegen Wartungskosten nicht immer die beste Wahl.</li>
|
||||
<li>Das Klima hat eine Trägheit von ca. 8 %/Jahr für Temperatur und 6–8 %/Jahr für Meeresspiegel.</li>
|
||||
<li>Das Klima hat eine Trägheit von ca. 8 %/Jahr für Temperatur und 6 – 8 %/Jahr für Meeresspiegel.</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -226,7 +226,7 @@
|
||||
|
||||
<div class="card green">
|
||||
<h3><span class="tag done">done</span> Bürger-Beschwerden mit Choices</h3>
|
||||
<p>Modaler Dialog mit Avatar, Message und 2–3 Choice-Karten. Jede Wahl hat echte Konsequenzen. Spiel pausiert automatisch bis der Spieler entscheidet. Bibliothek: 7 Events über die 75 Jahre verteilt (Fischerin, Forscherin, Bauer, Hotel, Jugend-Streik, Industrie, Bergdorf).</p>
|
||||
<p>Modaler Dialog mit Avatar, Message und 2 – 3 Choice-Karten. Jede Wahl hat echte Konsequenzen. Spiel pausiert automatisch bis der Spieler entscheidet. Bibliothek: 7 Events über die 75 Jahre verteilt (Fischerin, Forscherin, Bauer, Hotel, Jugend-Streik, Industrie, Bergdorf).</p>
|
||||
</div>
|
||||
|
||||
<div class="card green">
|
||||
@@ -336,7 +336,7 @@
|
||||
|
||||
<div class="card sand">
|
||||
<h3><span class="tag todo">todo</span> Krisen-Mini-Spiele</h3>
|
||||
<p>Bei Sturmflut, Hitzewelle, Murenabgang ein kurzes (10–20 s) Klick-Mini-Spiel. Erfolg mildert den Schaden.</p>
|
||||
<p>Bei Sturmflut, Hitzewelle, Murenabgang ein kurzes (10 – 20 s) Klick-Mini-Spiel. Erfolg mildert den Schaden.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -394,9 +394,9 @@
|
||||
|
||||
<!-- ====================================================== -->
|
||||
<section id="erklaerungen">
|
||||
<h2>6. Erklärungen für Kinder 10–14</h2>
|
||||
<h2>6. Erklärungen für Kinder 10 – 14</h2>
|
||||
|
||||
<p>Das neue <code>info-overlay.ts</code>-Modul bietet eine Bibliothek kindgerechter Erklärtexte. Jeder Graph und jedes wichtige Event hat einen (i)-Button, der ein Overlay öffnet. Zielgruppe: 10–14 Jahre, einfache Sätze, max. 3 Absätze plus "Merksatz".</p>
|
||||
<p>Das neue <code>info-overlay.ts</code>-Modul bietet eine Bibliothek kindgerechter Erklärtexte. Jeder Graph und jedes wichtige Event hat einen (i)-Button, der ein Overlay öffnet. Zielgruppe: 10 – 14 Jahre, einfache Sätze, max. 3 Absätze plus "Merksatz".</p>
|
||||
|
||||
<h3>Bisher erklärte Begriffe</h3>
|
||||
<ul>
|
||||
|
||||
@@ -491,7 +491,7 @@
|
||||
<h2>Was den Alltag schwer macht</h2>
|
||||
<h3>Stundenknappheit & Stofffülle</h3>
|
||||
<ul>
|
||||
<li>1–2 Wo.-Std. — der ganze Lehrplan muss durchgenommen werden</li>
|
||||
<li>1 – 2 Wo.-Std. — der ganze Lehrplan muss durchgenommen werden</li>
|
||||
<li>Tendenz zur Oberflächlichkeit, Verlust von Tiefe</li>
|
||||
</ul>
|
||||
<h3>Lehrkräftebildung</h3>
|
||||
|
||||
@@ -428,7 +428,7 @@
|
||||
<li><strong>Lernende ↔ Lehrperson:</strong> Reflexion, Bedeutungsaushandlung, soziales Lernen</li>
|
||||
<li><strong>Lehrperson ↔ Simulation:</strong> Auswahl, Vorbereitung, Didaktisierung — Inszenierung des Lernanlasses</li>
|
||||
</ul>
|
||||
<p>Studienbefund: Bei kompetenter Begleitung steigt die Effektstärke um den Faktor 1,5–2.</p>
|
||||
<p>Studienbefund: Bei kompetenter Begleitung steigt die Effektstärke um den Faktor 1,5 – 2.</p>
|
||||
</section>
|
||||
|
||||
<!-- KAPITEL 6 -->
|
||||
|
||||
@@ -282,7 +282,7 @@
|
||||
|
||||
<p style="font-size:.85rem;color:#7a7567;">
|
||||
Klassenangaben beziehen sich auf die österreichische Sekundarstufe I
|
||||
(Klasse 1 = 5. Schulstufe = ca. 10–11 Jahre). Alle Module sind auch in
|
||||
(Klasse 1 = 5. Schulstufe = ca. 10 – 11 Jahre). Alle Module sind auch in
|
||||
höheren Klassen einsetzbar; einige Module (Energiemanager, EU-Werkstatt)
|
||||
setzen mehr Vorwissen voraus.
|
||||
</p>
|
||||
@@ -297,12 +297,12 @@
|
||||
<p class="subtitle">Klima retten, Küste schützen.</p>
|
||||
<img class="module-image" src="assets/img/glossar/co2-keeling-kurve.svg" alt="CO₂-Konzentration nach Mauna-Loa-Messreihe">
|
||||
<span class="tag tag-status">aktiv</span>
|
||||
<span class="tag tag-age">10–16 Jahre</span>
|
||||
<span class="tag tag-age">10 – 16 Jahre</span>
|
||||
<span class="tag tag-time">⏱ 35 min</span>
|
||||
<span class="tag tag-topic">Klimawandel · Energie · Küstenschutz</span>
|
||||
|
||||
<p><strong>Beschreibung:</strong> Als Klimawächter*in lenkst du
|
||||
einen Inselstaat 75 Jahre lang (2025–2100) durch den Klimawandel.
|
||||
einen Inselstaat 75 Jahre lang (2025 – 2100) durch den Klimawandel.
|
||||
Du baust Windparks, Solaranlagen, Mangroven und Deiche, reagierst
|
||||
auf Sturmfluten und Hitzewellen und balancierst dein Budget gegen
|
||||
den steigenden Meeresspiegel. Zwei Varianten — <em>2D-Karte</em>
|
||||
@@ -355,7 +355,7 @@
|
||||
<p class="subtitle">Hochwasser verstehen, Fluss naturnah führen.</p>
|
||||
<img class="module-image" src="assets/img/glossar/flussbegradigung-vergleich.svg" alt="Mäander vs. begradigter Fluss im Vergleich">
|
||||
<span class="tag tag-status">aktiv</span>
|
||||
<span class="tag tag-age">10–16 Jahre</span>
|
||||
<span class="tag tag-age">10 – 16 Jahre</span>
|
||||
<span class="tag tag-time">⏱ 30 min</span>
|
||||
<span class="tag tag-topic">Hydrologie · Raumplanung · Naturgefahr</span>
|
||||
|
||||
@@ -403,7 +403,7 @@
|
||||
<p class="subtitle">Bergrettung auf Koordinaten — Kartenlesen unter Zeitdruck.</p>
|
||||
<img class="module-image" src="assets/img/glossar/koordinate.png" alt="Koordinatensystem auf Europa-Karte" onerror="this.style.display='none'">
|
||||
<span class="tag tag-status">aktiv</span>
|
||||
<span class="tag tag-age">10–16 Jahre</span>
|
||||
<span class="tag tag-age">10 – 16 Jahre</span>
|
||||
<span class="tag tag-time">⏱ 40 min</span>
|
||||
<span class="tag tag-topic">Kartografie · Koordinaten · Topografie</span>
|
||||
|
||||
@@ -449,7 +449,7 @@
|
||||
<p class="subtitle">Waren, Wege, Warten.</p>
|
||||
<img class="module-image" src="assets/img/glossar/logistikkette-schema.svg" alt="Logistikkette von Hersteller bis Kund*in">
|
||||
<span class="tag tag-status">aktiv</span>
|
||||
<span class="tag tag-age">12–15 Jahre</span>
|
||||
<span class="tag tag-age">12 – 15 Jahre</span>
|
||||
<span class="tag tag-time">⏱ 30 min</span>
|
||||
<span class="tag tag-topic">Wirtschaft · Verkehr · Europa</span>
|
||||
|
||||
@@ -496,7 +496,7 @@
|
||||
<p class="subtitle">Topografie Europa — Hauptstädte und Distanzen.</p>
|
||||
<img class="module-image" src="assets/img/glossar/hauptstadt.png" alt="Skyline einer europäischen Hauptstadt" onerror="this.style.display='none'">
|
||||
<span class="tag tag-status">aktiv</span>
|
||||
<span class="tag tag-age">10–16 Jahre</span>
|
||||
<span class="tag tag-age">10 – 16 Jahre</span>
|
||||
<span class="tag tag-time">⏱ 20 min</span>
|
||||
<span class="tag tag-topic">Topografie · Europa · Hauptstädte</span>
|
||||
|
||||
@@ -541,7 +541,7 @@
|
||||
<p class="subtitle">Anbau weltweit — wo wächst was und warum.</p>
|
||||
<img class="module-image" src="assets/img/glossar/monokultur.png" alt="Endloses Maisfeld als Monokultur" onerror="this.style.display='none'">
|
||||
<span class="tag tag-status">aktiv</span>
|
||||
<span class="tag tag-age">10–16 Jahre</span>
|
||||
<span class="tag tag-age">10 – 16 Jahre</span>
|
||||
<span class="tag tag-time">⏱ 20 min</span>
|
||||
<span class="tag tag-topic">Landwirtschaft · Klimazonen · Welternährung</span>
|
||||
|
||||
@@ -588,7 +588,7 @@
|
||||
<p class="subtitle">Strom durch den Tag balancieren.</p>
|
||||
<img class="module-image" src="assets/img/glossar/dunkelflaute.png" alt="Stillstehende Windräder bei Dunkelflaute" onerror="this.style.display='none'">
|
||||
<span class="tag tag-status">aktiv</span>
|
||||
<span class="tag tag-age">13–16 Jahre</span>
|
||||
<span class="tag tag-age">13 – 16 Jahre</span>
|
||||
<span class="tag tag-time">⏱ 20 min</span>
|
||||
<span class="tag tag-topic">Energie · Versorgung · Speicher</span>
|
||||
|
||||
@@ -635,7 +635,7 @@
|
||||
<p class="subtitle">Wie ein Gesetz entsteht.</p>
|
||||
<img class="module-image" src="assets/img/glossar/eu-parlament.png" alt="EU-Parlament-Plenarsaal in Straßburg" onerror="this.style.display='none'">
|
||||
<span class="tag tag-status">aktiv</span>
|
||||
<span class="tag tag-age">13–16 Jahre</span>
|
||||
<span class="tag tag-age">13 – 16 Jahre</span>
|
||||
<span class="tag tag-time">⏱ 20 min</span>
|
||||
<span class="tag tag-topic">Politische Bildung · Demokratie · EU</span>
|
||||
|
||||
@@ -683,7 +683,7 @@
|
||||
<p class="subtitle">Astronomie zum Beobachten — Tag, Jahreszeiten, Finsternisse.</p>
|
||||
<img class="module-image" src="assets/img/glossar/sonnenfinsternis.png" alt="Schematische Sonnenfinsternis" onerror="this.style.display='none'">
|
||||
<span class="tag tag-status">aktiv</span>
|
||||
<span class="tag tag-age">10–14 Jahre</span>
|
||||
<span class="tag tag-age">10 – 14 Jahre</span>
|
||||
<span class="tag tag-time">⏱ 20 min</span>
|
||||
<span class="tag tag-topic">Astronomie · Erdrotation · Finsternisse</span>
|
||||
|
||||
@@ -729,7 +729,7 @@
|
||||
<p class="subtitle">Wo kommt unser Essen wirklich her?</p>
|
||||
<img class="module-image" src="assets/img/card-weltkueche.webp" alt="Acht Gerichte aus aller Welt rund um eine Weltkarte mit Handelsrouten">
|
||||
<span class="tag tag-status">aktiv · neu</span>
|
||||
<span class="tag tag-age">11–16 Jahre</span>
|
||||
<span class="tag tag-age">11 – 16 Jahre</span>
|
||||
<span class="tag tag-time">⏱ 25 min</span>
|
||||
<span class="tag tag-topic">Welternährung · Handel · Konsumkritik</span>
|
||||
|
||||
@@ -789,7 +789,7 @@
|
||||
<p class="subtitle">Großkreis-Routen und CO₂ — Geografie über die EU hinaus.</p>
|
||||
<img class="module-image" src="assets/img/card-fluggesellschaft.webp" alt="Flugrouten weltweit als Großkreise auf einer Weltkarte" onerror="this.style.display='none'">
|
||||
<span class="tag tag-status">aktiv · neu</span>
|
||||
<span class="tag tag-age">12–16 Jahre</span>
|
||||
<span class="tag tag-age">12 – 16 Jahre</span>
|
||||
<span class="tag tag-time">⏱ 25 min</span>
|
||||
<span class="tag tag-topic">Verkehr · Globalisierung · CO₂</span>
|
||||
|
||||
@@ -836,7 +836,7 @@
|
||||
<p class="subtitle">Ein Tag im eigenen Haushalt — kWh, km und Watt.</p>
|
||||
<img class="module-image" src="sims/entscheidungstag/assets/splash/splash-winter.webp" alt="Wintertag — Wohnung mit Heizung, Beleuchtung und Schulweg" onerror="this.style.display='none'">
|
||||
<span class="tag tag-status">aktiv · neu</span>
|
||||
<span class="tag tag-age">10–14 Jahre</span>
|
||||
<span class="tag tag-age">10 – 14 Jahre</span>
|
||||
<span class="tag tag-time">⏱ 20 min</span>
|
||||
<span class="tag tag-topic">Haushalt · Energie · Mobilität · Alltag</span>
|
||||
|
||||
@@ -922,11 +922,11 @@
|
||||
<td>Vor-Fragen besprechen, Vorwissen aktivieren.</td></tr>
|
||||
<tr><td>Einführung</td><td>3 min</td>
|
||||
<td>Modul kurz vorstellen, Bedienlogik zeigen, Einsatzformen klären.</td></tr>
|
||||
<tr><td>Bearbeitung</td><td>20–30 min</td>
|
||||
<tr><td>Bearbeitung</td><td>20 – 30 min</td>
|
||||
<td>Schüler*innen arbeiten selbstständig (Einzel- oder Partnerarbeit).</td></tr>
|
||||
<tr><td>Auswertung</td><td>5 min</td>
|
||||
<td>Ergebnisse vergleichen — Lehrerdashboard zeigt Bearbeitungsprofile.</td></tr>
|
||||
<tr><td>Reflexion</td><td>7–10 min</td>
|
||||
<tr><td>Reflexion</td><td>7 – 10 min</td>
|
||||
<td>Nach-Fragen, Transfer auf die Realität, Glossar-Recherche.</td></tr>
|
||||
</table>
|
||||
|
||||
@@ -964,7 +964,7 @@
|
||||
|
||||
<h3>Empfohlene Reflexions-Aufgaben (zur Leistungsfeststellung)</h3>
|
||||
<ol>
|
||||
<li>„Beschreibe deine Strategie in 3–5 Sätzen. Was war dein wichtigstes Ziel?"</li>
|
||||
<li>„Beschreibe deine Strategie in 3 – 5 Sätzen. Was war dein wichtigstes Ziel?"</li>
|
||||
<li>„Nenne einen Zielkonflikt, den du erlebt hast. Wie hast du dich entschieden?"</li>
|
||||
<li>„Was würdest du in der Realität anders machen als in der Simulation? Warum?"</li>
|
||||
<li>„Vergleiche deine <em>Strategie</em> mit der einer Mitschülerin. Was habt ihr unterschiedlich gemacht – und warum?" (Fokus auf Denkwege, nicht auf „besser/schlechter".)</li>
|
||||
@@ -1020,7 +1020,7 @@ Die Effektstärken sind grobe Orientierung und werden methodisch diskutiert: Fü
|
||||
werden Werte von d ≈ 0,7 (Hattie, 2009) bis d ≈ 0,48 in neueren Meta-Analysen (Wisniewski,
|
||||
Zierer & Hattie, 2020) berichtet; das Teaching-and-Learning-Toolkit der Education
|
||||
Endowment Foundation beziffert Feedback mit etwa +6, Metakognition/Selbstregulation mit etwa
|
||||
+7 Lernmonaten. Für „formative Beurteilung" als Sammelbegriff reicht die Spanne von d ≈ 0,4–0,7
|
||||
+7 Lernmonaten. Für „formative Beurteilung" als Sammelbegriff reicht die Spanne von d ≈ 0,4 – 0,7
|
||||
(Black & Wiliam, 1998) bis zu deutlich moderateren d ≈ 0,20 in einer strengeren Meta-Analyse
|
||||
(Kingston & Nash, 2011). Die Botschaft ist nicht die exakte Zahl, sondern: <strong>die
|
||||
Wirkung hängt fast vollständig von der Art des Feedbacks ab</strong> – aufgaben- und
|
||||
@@ -1074,32 +1074,32 @@ Schritt (Feed forward; Hattie & Timperley, 2007).</p>
|
||||
|
||||
<h3 id="literatur-leistung">Literaturverzeichnis</h3>
|
||||
<div style="font-size:.86em;line-height:1.5">
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Baker, R. S. J. d., Corbett, A. T., Koedinger, K. R. & Wagner, A. Z. (2004). Off-Task Behavior in the Cognitive Tutor Classroom: When Students „Game the System". <em>Proceedings of ACM CHI 2004</em>, 383–390.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Black, P. & Wiliam, D. (1998). Assessment and Classroom Learning. <em>Assessment in Education</em>, 5(1), 7–74.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Bloom, B. S. (1968). Learning for Mastery. <em>Evaluation Comment</em>, 1(2), 1–12.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Butler, R. (1988). Enhancing and undermining intrinsic motivation: The effects of task-involving and ego-involving evaluation. <em>British Journal of Educational Psychology</em>, 58(1), 1–14.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Carroll, J. B. (1963). A Model of School Learning. <em>Teachers College Record</em>, 64(8), 723–733.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Baker, R. S. J. d., Corbett, A. T., Koedinger, K. R. & Wagner, A. Z. (2004). Off-Task Behavior in the Cognitive Tutor Classroom: When Students „Game the System". <em>Proceedings of ACM CHI 2004</em>, 383 – 390.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Black, P. & Wiliam, D. (1998). Assessment and Classroom Learning. <em>Assessment in Education</em>, 5(1), 7 – 74.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Bloom, B. S. (1968). Learning for Mastery. <em>Evaluation Comment</em>, 1(2), 1 – 12.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Butler, R. (1988). Enhancing and undermining intrinsic motivation: The effects of task-involving and ego-involving evaluation. <em>British Journal of Educational Psychology</em>, 58(1), 1 – 14.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Carroll, J. B. (1963). A Model of School Learning. <em>Teachers College Record</em>, 64(8), 723 – 733.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Deci, E. L. & Ryan, R. M. (1985). <em>Intrinsic Motivation and Self-Determination in Human Behavior</em>. New York: Plenum.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Dweck, C. S. (2006). <em>Mindset: The New Psychology of Success</em>. New York: Random House.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Education Endowment Foundation (o. J.). <em>Teaching and Learning Toolkit: Feedback; Metacognition and Self-Regulation</em>. educationendowmentfoundation.org.uk</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Fredricks, J. A., Blumenfeld, P. C. & Paris, A. H. (2004). School Engagement: Potential of the Concept, State of the Evidence. <em>Review of Educational Research</em>, 74(1), 59–109.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Glaser, R. (1963). Instructional Technology and the Measurement of Learning Outcomes. <em>American Psychologist</em>, 18(8), 519–521.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Guskey, T. R. (2010). Lessons of Mastery Learning. <em>Educational Leadership</em>, 68(2), 52–57.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Harlen, W. & Deakin Crick, R. (2003). Testing and Motivation for Learning. <em>Assessment in Education</em>, 10(2), 169–207.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Fredricks, J. A., Blumenfeld, P. C. & Paris, A. H. (2004). School Engagement: Potential of the Concept, State of the Evidence. <em>Review of Educational Research</em>, 74(1), 59 – 109.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Glaser, R. (1963). Instructional Technology and the Measurement of Learning Outcomes. <em>American Psychologist</em>, 18(8), 519 – 521.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Guskey, T. R. (2010). Lessons of Mastery Learning. <em>Educational Leadership</em>, 68(2), 52 – 57.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Harlen, W. & Deakin Crick, R. (2003). Testing and Motivation for Learning. <em>Assessment in Education</em>, 10(2), 169 – 207.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Hattie, J. (2009). <em>Visible Learning</em>. London: Routledge.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Hattie, J. & Timperley, H. (2007). The Power of Feedback. <em>Review of Educational Research</em>, 77(1), 81–112.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Hughes, G. (2011). Towards a Personal Best: A Case for Introducing Ipsative Assessment in Higher Education. <em>Studies in Higher Education</em>, 36(3), 353–367.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Kingston, N. & Nash, B. (2011). Formative Assessment: A Meta-Analysis and a Call for Research. <em>Educational Measurement: Issues and Practice</em>, 30(4), 28–37.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Kluger, A. N. & DeNisi, A. (1996). The Effects of Feedback Interventions on Performance. <em>Psychological Bulletin</em>, 119(2), 254–284.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Nicol, D. J. & Macfarlane-Dick, D. (2006). Formative Assessment and Self-Regulated Learning: A Model and Seven Principles of Good Feedback Practice. <em>Studies in Higher Education</em>, 31(2), 199–218.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Ramaprasad, A. (1983). On the Definition of Feedback. <em>Behavioral Science</em>, 28(1), 4–13.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Sadler, D. R. (1989). Formative Assessment and the Design of Instructional Systems. <em>Instructional Science</em>, 18(2), 119–144.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Shute, V. J. (2008). Focus on Formative Feedback. <em>Review of Educational Research</em>, 78(1), 153–189.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Hattie, J. & Timperley, H. (2007). The Power of Feedback. <em>Review of Educational Research</em>, 77(1), 81 – 112.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Hughes, G. (2011). Towards a Personal Best: A Case for Introducing Ipsative Assessment in Higher Education. <em>Studies in Higher Education</em>, 36(3), 353 – 367.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Kingston, N. & Nash, B. (2011). Formative Assessment: A Meta-Analysis and a Call for Research. <em>Educational Measurement: Issues and Practice</em>, 30(4), 28 – 37.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Kluger, A. N. & DeNisi, A. (1996). The Effects of Feedback Interventions on Performance. <em>Psychological Bulletin</em>, 119(2), 254 – 284.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Nicol, D. J. & Macfarlane-Dick, D. (2006). Formative Assessment and Self-Regulated Learning: A Model and Seven Principles of Good Feedback Practice. <em>Studies in Higher Education</em>, 31(2), 199 – 218.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Ramaprasad, A. (1983). On the Definition of Feedback. <em>Behavioral Science</em>, 28(1), 4 – 13.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Sadler, D. R. (1989). Formative Assessment and the Design of Instructional Systems. <em>Instructional Science</em>, 18(2), 119 – 144.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Shute, V. J. (2008). Focus on Formative Feedback. <em>Review of Educational Research</em>, 78(1), 153 – 189.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Vygotskij, L. S. (1978). <em>Mind in Society</em>. Cambridge, MA: Harvard University Press.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Weiner, B. (1985). An Attributional Theory of Achievement Motivation and Emotion. <em>Psychological Review</em>, 92(4), 548–573.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Weiner, B. (1985). An Attributional Theory of Achievement Motivation and Emotion. <em>Psychological Review</em>, 92(4), 548 – 573.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Wiliam, D. (2011). <em>Embedded Formative Assessment</em>. Bloomington: Solution Tree Press.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Wisniewski, B., Zierer, K. & Hattie, J. (2020). The Power of Feedback Revisited: A Meta-Analysis of Educational Feedback Research. <em>Frontiers in Psychology</em>, 10:3087.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Zimmerman, B. J. (2002). Becoming a Self-Regulated Learner: An Overview. <em>Theory Into Practice</em>, 41(2), 64–70.</p>
|
||||
<p style="margin:.25em 0 .25em 1.6em;text-indent:-1.6em">Zimmerman, B. J. (2002). Becoming a Self-Regulated Learner: An Overview. <em>Theory Into Practice</em>, 41(2), 64 – 70.</p>
|
||||
</div>
|
||||
|
||||
<!-- ========== 7. TECHNISCHES ========== -->
|
||||
|
||||
@@ -408,7 +408,7 @@
|
||||
<div class="sim-card-body">
|
||||
<h3>Sonnensystem <span class="badge-free">TESTEN</span></h3>
|
||||
<p>Sonne, Erde und Mond als 3D-Modell. Tag und Nacht, Jahreszeiten, Sonnen- und Mondfinsternis selbst beobachten.</p>
|
||||
<div class="sim-card-tags"><span class="sim-tag st1">1.–2. Klasse</span><span class="sim-tag st-time">15–25 min</span></div>
|
||||
<div class="sim-card-tags"><span class="sim-tag st1">1.–2. Klasse</span><span class="sim-tag st-time">15 – 25 min</span></div>
|
||||
<div class="sim-card-cta">
|
||||
<a href="modul-sonnensystem" class="sim-btn sim-btn-secondary">📖 Mehr erfahren</a>
|
||||
<a href="sonnensystem" class="sim-btn sim-btn-primary">▶ Simulation starten</a>
|
||||
@@ -462,7 +462,7 @@
|
||||
<div class="sim-card-body">
|
||||
<h3>Flussmanagement</h3>
|
||||
<p>Deiche bauen, Fluss begradigen oder renaturieren? Finde die Balance zwischen Hochwasserschutz, Ökologie und Wirtschaft.</p>
|
||||
<div class="sim-card-tags"><span class="sim-tag st1">1.–2. Klasse</span><span class="sim-tag st-time">10–35 min</span></div>
|
||||
<div class="sim-card-tags"><span class="sim-tag st1">1.–2. Klasse</span><span class="sim-tag st-time">10 – 35 min</span></div>
|
||||
<div class="sim-card-cta">
|
||||
<a href="modul-fluss" class="sim-btn sim-btn-secondary">📖 Mehr erfahren</a>
|
||||
<a href="login.html" class="sim-btn sim-btn-disabled">🔒 Anmelden</a>
|
||||
|
||||
@@ -174,18 +174,18 @@ var AVATAR_GROUPS = [
|
||||
{slug:'wettersatellit-meteosat', name:'Meteosat — Wettersatellit über Europa', emoji:'📡'},
|
||||
]},
|
||||
{ name: 'Berühmte Forscherinnen und Forscher', color: '#8d6e63', items: [
|
||||
{slug:'humboldt-alexander', name:'Alexander von Humboldt (1769–1859) — Universalgelehrter, Südamerika', emoji:'🌿'},
|
||||
{slug:'mercator-gerhard', name:'Gerhard Mercator (1512–1594) — Kartograph, Welt-Karte', emoji:'🗺️'},
|
||||
{slug:'cook-james', name:'James Cook (1728–1779) — Pazifik-Entdecker', emoji:'⚓'},
|
||||
{slug:'polo-marco', name:'Marco Polo (1254–1324) — Reise nach China', emoji:'🐫'},
|
||||
{slug:'ibn-battuta', name:'Ibn Battuta (1304–1369) — 120.000 km durch die Welt', emoji:'🕌'},
|
||||
{slug:'nansen-fridtjof', name:'Fridtjof Nansen (1861–1930) — Polarforscher, Nobelpreis', emoji:'🧭'},
|
||||
{slug:'piccard-auguste', name:'Auguste Piccard (1884–1962) — Stratosphäre + Tiefsee', emoji:'🎈'},
|
||||
{slug:'amundsen-roald', name:'Roald Amundsen (1872–1928) — erster am Südpol 1911', emoji:'🐧'},
|
||||
{slug:'earhart-amelia', name:'Amelia Earhart (1897–1937) — Pilotin, Atlantik-Überquerung', emoji:'✈️'},
|
||||
{slug:'humboldt-alexander', name:'Alexander von Humboldt (1769 – 1859) — Universalgelehrter, Südamerika', emoji:'🌿'},
|
||||
{slug:'mercator-gerhard', name:'Gerhard Mercator (1512 – 1594) — Kartograph, Welt-Karte', emoji:'🗺️'},
|
||||
{slug:'cook-james', name:'James Cook (1728 – 1779) — Pazifik-Entdecker', emoji:'⚓'},
|
||||
{slug:'polo-marco', name:'Marco Polo (1254 – 1324) — Reise nach China', emoji:'🐫'},
|
||||
{slug:'ibn-battuta', name:'Ibn Battuta (1304 – 1369) — 120.000 km durch die Welt', emoji:'🕌'},
|
||||
{slug:'nansen-fridtjof', name:'Fridtjof Nansen (1861 – 1930) — Polarforscher, Nobelpreis', emoji:'🧭'},
|
||||
{slug:'piccard-auguste', name:'Auguste Piccard (1884 – 1962) — Stratosphäre + Tiefsee', emoji:'🎈'},
|
||||
{slug:'amundsen-roald', name:'Roald Amundsen (1872 – 1928) — erster am Südpol 1911', emoji:'🐧'},
|
||||
{slug:'earhart-amelia', name:'Amelia Earhart (1897 – 1937) — Pilotin, Atlantik-Überquerung', emoji:'✈️'},
|
||||
{slug:'earle-sylvia', name:'Sylvia Earle (*1935) — Meeresbiologin, „Her Deepness"', emoji:'🐠'},
|
||||
{slug:'anning-mary', name:'Mary Anning (1799–1847) — Paläontologin, erste Saurierfunde', emoji:'🦕'},
|
||||
{slug:'carson-rachel', name:'Rachel Carson (1907–1964) — Umweltschutz-Pionierin', emoji:'🌳'},
|
||||
{slug:'anning-mary', name:'Mary Anning (1799 – 1847) — Paläontologin, erste Saurierfunde', emoji:'🦕'},
|
||||
{slug:'carson-rachel', name:'Rachel Carson (1907 – 1964) — Umweltschutz-Pionierin', emoji:'🌳'},
|
||||
]},
|
||||
];
|
||||
// Slug → Emoji-Lookup (fuer Fallback-Rendering)
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
],
|
||||
"didactic": {
|
||||
"topic": "Pannenhilfe, Fahrzeugtechnik",
|
||||
"sachinfo": "Laut TÜV Süd Bus-Report ist die Reifenpanne mit ≈ 35 % aller Bus-Notfälle die häufigste Pannenursache. Reisebusse haben 6 Räder (2 vorne, 4 hinten als Zwillingsbereifung). Ein Bus-Reifen wiegt 60 kg, kostet 400–700 €, hält ca. 150.000 km. Auf Autobahn-Pannenstreifen ist die Warndreieck-Distanz 100 m (vs. 50 m auf Landstraße).",
|
||||
"sachinfo": "Laut TÜV Süd Bus-Report ist die Reifenpanne mit ≈ 35 % aller Bus-Notfälle die häufigste Pannenursache. Reisebusse haben 6 Räder (2 vorne, 4 hinten als Zwillingsbereifung). Ein Bus-Reifen wiegt 60 kg, kostet 400 – 700 €, hält ca. 150.000 km. Auf Autobahn-Pannenstreifen ist die Warndreieck-Distanz 100 m (vs. 50 m auf Landstraße).",
|
||||
"lehrplan": ["Verkehrserziehung: Pannenhilfe, Warnsystem", "Physik: Reibung, Materialermüdung", "GW: Wirtschaft (Reparatur-Kosten)"],
|
||||
"glossary": ["panne", "warndreieck", "zwillingsbereifung"]
|
||||
}
|
||||
@@ -278,7 +278,7 @@
|
||||
],
|
||||
"didactic": {
|
||||
"topic": "Winter-Verkehrssicherheit, Alpen-Klima",
|
||||
"sachinfo": "Schneekettenpflicht gilt in AT/CH/IT/SI auf bestimmten Strecken, signalisiert durch blaues Schild „Schneeketten\" (Vorschrifts-Zeichen). Pflicht ab November bis Ostern auf Pässen wie Großglockner, Stilfser Joch, Tauern. Reifenketten erhöhen die Traktion auf Schnee/Eis um Faktor 5–10. Auf Lkw/Bus muss man mind. 2 Antriebsräder mit Ketten ausstatten. Schweiz: ab Dezember sowieso Winterreifenpflicht (M+S-Symbol).",
|
||||
"sachinfo": "Schneekettenpflicht gilt in AT/CH/IT/SI auf bestimmten Strecken, signalisiert durch blaues Schild „Schneeketten\" (Vorschrifts-Zeichen). Pflicht ab November bis Ostern auf Pässen wie Großglockner, Stilfser Joch, Tauern. Reifenketten erhöhen die Traktion auf Schnee/Eis um Faktor 5 – 10. Auf Lkw/Bus muss man mind. 2 Antriebsräder mit Ketten ausstatten. Schweiz: ab Dezember sowieso Winterreifenpflicht (M+S-Symbol).",
|
||||
"lehrplan": ["GW: Alpenklima, Wetter", "Physik: Reibung, Traktion", "Verkehrserziehung: Winter"],
|
||||
"glossary": ["schneekettenpflicht", "winterreifen", "alpenklima"]
|
||||
}
|
||||
|
||||
@@ -74,7 +74,7 @@ window.BusfahrtEngine = (function () {
|
||||
return {
|
||||
fee: 320,
|
||||
label: '🚇 Kanaltunnel / Fähre (Calais–Dover, Folkestone–Calais)',
|
||||
sachinfo: 'Seit Brexit 2021 ist UK kein EU-Mitglied mehr — Zoll- und Pass-Kontrollen erforderlich. Reisebus-Tarif rund 280–360 € für Eurotunnel-Shuttle (35 min Le Shuttle Freight) oder Fähre (90 min, DFDS/P&O).',
|
||||
sachinfo: 'Seit Brexit 2021 ist UK kein EU-Mitglied mehr — Zoll- und Pass-Kontrollen erforderlich. Reisebus-Tarif rund 280 – 360 € für Eurotunnel-Shuttle (35 min Le Shuttle Freight) oder Fähre (90 min, DFDS/P&O).',
|
||||
glossar: 'kanaltunnel'
|
||||
};
|
||||
}
|
||||
@@ -116,7 +116,7 @@ window.BusfahrtEngine = (function () {
|
||||
return {
|
||||
fee: 520,
|
||||
label: '⛴ Norröna-Fähre Hirtshals–Tórshavn–Seyðisfjörður',
|
||||
sachinfo: 'Die einzige Auto-/Bus-Fähre nach Island ist die Norröna der Smyril Line. Route: Hirtshals (DK, nördlichste Spitze Jütlands) → Tórshavn (Färöer) → Seyðisfjörður (Ostküste Island). 1× pro Woche, Dauer 2,5 Tage. Bus-Tarif rund 400–600 €. Danach noch ca. 700 km quer durch Island bis Reykjavik (Westküste). 95 % aller Island-Reisenden fliegen — Bus-Anreise ist Roadtrip-Variante.',
|
||||
sachinfo: 'Die einzige Auto-/Bus-Fähre nach Island ist die Norröna der Smyril Line. Route: Hirtshals (DK, nördlichste Spitze Jütlands) → Tórshavn (Färöer) → Seyðisfjörður (Ostküste Island). 1× pro Woche, Dauer 2,5 Tage. Bus-Tarif rund 400 – 600 €. Danach noch ca. 700 km quer durch Island bis Reykjavik (Westküste). 95 % aller Island-Reisenden fliegen — Bus-Anreise ist Roadtrip-Variante.',
|
||||
glossar: 'norroena-faehre'
|
||||
};
|
||||
}
|
||||
@@ -135,7 +135,7 @@ window.BusfahrtEngine = (function () {
|
||||
return {
|
||||
fee: 290,
|
||||
label: '⛴ Direktfähre Dublin–Cherbourg (Irish Ferries)',
|
||||
sachinfo: 'Die Direktfähre zwischen Irland und dem Festland (Dublin–Cherbourg oder Rosslare–Roscoff) umgeht das UK seit Brexit. Dauer 17–20 h, Bus-Tarif rund 280–320 €. Alternative: über Holyhead+Eurotunnel — dann aber doppelte UK-Zollkontrolle.',
|
||||
sachinfo: 'Die Direktfähre zwischen Irland und dem Festland (Dublin–Cherbourg oder Rosslare–Roscoff) umgeht das UK seit Brexit. Dauer 17 – 20 h, Bus-Tarif rund 280 – 320 €. Alternative: über Holyhead+Eurotunnel — dann aber doppelte UK-Zollkontrolle.',
|
||||
glossar: 'norroena-faehre'
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1070,14 +1070,14 @@
|
||||
desc: 'Gleichmäßiger Bedarf, mittags reichlich Solar. Klassischer Pump-Tag.',
|
||||
tankTopInit: 20,
|
||||
blocks: [
|
||||
{ range: '00–03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03–06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06–09', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '09–12', demand: 5, solar: 16 }, // 2P
|
||||
{ range: '12–15', demand: 5, solar: 16 }, // 2P
|
||||
{ range: '15–18', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '18–21', demand: 15, solar: 5 }, // 2T
|
||||
{ range: '21–24', demand: 10, solar: 0 }, // 2T
|
||||
{ range: '00 – 03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03 – 06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06 – 09', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '09 – 12', demand: 5, solar: 16 }, // 2P
|
||||
{ range: '12 – 15', demand: 5, solar: 16 }, // 2P
|
||||
{ range: '15 – 18', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '18 – 21', demand: 15, solar: 5 }, // 2T
|
||||
{ range: '21 – 24', demand: 10, solar: 0 }, // 2T
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -1086,14 +1086,14 @@
|
||||
desc: 'Dichte Wolken, Solar nur schwach. Speicher voll, viel turbinieren.',
|
||||
tankTopInit: 40,
|
||||
blocks: [
|
||||
{ range: '00–03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03–06', demand: 10, solar: 0 }, // 2T
|
||||
{ range: '06–09', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '09–12', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '12–15', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '15–18', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '18–21', demand: 10, solar: 0 }, // 2T
|
||||
{ range: '21–24', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '00 – 03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03 – 06', demand: 10, solar: 0 }, // 2T
|
||||
{ range: '06 – 09', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '09 – 12', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '12 – 15', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '15 – 18', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '18 – 21', demand: 10, solar: 0 }, // 2T
|
||||
{ range: '21 – 24', demand: 5, solar: 0 }, // 1T
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -1102,14 +1102,14 @@
|
||||
desc: 'Wind nachts und am Morgen, tagsüber bedeckt. Tagesgang umgedreht.',
|
||||
tankTopInit: 25,
|
||||
blocks: [
|
||||
{ range: '00–03', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '03–06', demand: 5, solar: 16 }, // 2P
|
||||
{ range: '06–09', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '09–12', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '12–15', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '15–18', demand: 10, solar: 0 }, // 2T
|
||||
{ range: '18–21', demand: 15, solar: 5 }, // 2T
|
||||
{ range: '21–24', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '00 – 03', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '03 – 06', demand: 5, solar: 16 }, // 2P
|
||||
{ range: '06 – 09', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '09 – 12', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '12 – 15', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '15 – 18', demand: 10, solar: 0 }, // 2T
|
||||
{ range: '18 – 21', demand: 15, solar: 5 }, // 2T
|
||||
{ range: '21 – 24', demand: 5, solar: 10 }, // 1P
|
||||
],
|
||||
},
|
||||
],
|
||||
@@ -1123,14 +1123,14 @@
|
||||
desc: 'Klimaanlagen drehen auf — Bedarf nachmittags extrem. Mittags Solar voll.',
|
||||
tankTopInit: 35,
|
||||
blocks: [
|
||||
{ range: '00–03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03–06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06–09', demand: 10, solar: 15 }, // 1P
|
||||
{ range: '09–12', demand: 10, solar: 20 }, // 2P
|
||||
{ range: '12–15', demand: 15, solar: 20 }, // 1P
|
||||
{ range: '15–18', demand: 20, solar: 10 }, // 2T
|
||||
{ range: '18–21', demand: 15, solar: 5 }, // 2T
|
||||
{ range: '21–24', demand: 10, solar: 0 }, // 2T
|
||||
{ range: '00 – 03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03 – 06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06 – 09', demand: 10, solar: 15 }, // 1P
|
||||
{ range: '09 – 12', demand: 10, solar: 20 }, // 2P
|
||||
{ range: '12 – 15', demand: 15, solar: 20 }, // 1P
|
||||
{ range: '15 – 18', demand: 20, solar: 10 }, // 2T
|
||||
{ range: '18 – 21', demand: 15, solar: 5 }, // 2T
|
||||
{ range: '21 – 24', demand: 10, solar: 0 }, // 2T
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -1139,14 +1139,14 @@
|
||||
desc: 'Wolken vorm Mittag — Solar fällt aus. Speicher aus dem ersten Tag muss reichen.',
|
||||
tankTopInit: 42,
|
||||
blocks: [
|
||||
{ range: '00–03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03–06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06–09', demand: 10, solar: 10 }, // Aus
|
||||
{ range: '09–12', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '12–15', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '15–18', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '18–21', demand: 15, solar: 5 }, // 2T
|
||||
{ range: '21–24', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '00 – 03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03 – 06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06 – 09', demand: 10, solar: 10 }, // Aus
|
||||
{ range: '09 – 12', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '12 – 15', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '15 – 18', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '18 – 21', demand: 15, solar: 5 }, // 2T
|
||||
{ range: '21 – 24', demand: 5, solar: 0 }, // 1T
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -1155,14 +1155,14 @@
|
||||
desc: 'Klare Luft, viel Solar, Bedarf moderat. Solar-Überschuss füllt den Speicher.',
|
||||
tankTopInit: 20,
|
||||
blocks: [
|
||||
{ range: '00–03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03–06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06–09', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '09–12', demand: 5, solar: 16 }, // 2P
|
||||
{ range: '12–15', demand: 5, solar: 16 }, // 2P
|
||||
{ range: '15–18', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '18–21', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '21–24', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '00 – 03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03 – 06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06 – 09', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '09 – 12', demand: 5, solar: 16 }, // 2P
|
||||
{ range: '12 – 15', demand: 5, solar: 16 }, // 2P
|
||||
{ range: '15 – 18', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '18 – 21', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '21 – 24', demand: 5, solar: 0 }, // 1T
|
||||
],
|
||||
},
|
||||
],
|
||||
@@ -1176,14 +1176,14 @@
|
||||
desc: 'Klare Tage, gleichmäßiger Wechsel. Solar mittags noch ergiebig.',
|
||||
tankTopInit: 30,
|
||||
blocks: [
|
||||
{ range: '00–03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03–06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06–09', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '09–12', demand: 5, solar: 15 }, // 2P
|
||||
{ range: '12–15', demand: 5, solar: 15 }, // 2P
|
||||
{ range: '15–18', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '18–21', demand: 15, solar: 5 }, // 2T
|
||||
{ range: '21–24', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '00 – 03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03 – 06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06 – 09', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '09 – 12', demand: 5, solar: 15 }, // 2P
|
||||
{ range: '12 – 15', demand: 5, solar: 15 }, // 2P
|
||||
{ range: '15 – 18', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '18 – 21', demand: 15, solar: 5 }, // 2T
|
||||
{ range: '21 – 24', demand: 10, solar: 5 }, // 1T
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -1192,14 +1192,14 @@
|
||||
desc: 'Starker Wind durchgehend, Solar moderat. Pumpe und Turbine wechseln sich ständig ab.',
|
||||
tankTopInit: 15,
|
||||
blocks: [
|
||||
{ range: '00–03', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '03–06', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '06–09', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '09–12', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '12–15', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '15–18', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '18–21', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '21–24', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '00 – 03', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '03 – 06', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '06 – 09', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '09 – 12', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '12 – 15', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '15 – 18', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '18 – 21', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '21 – 24', demand: 5, solar: 10 }, // 1P
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -1208,14 +1208,14 @@
|
||||
desc: 'Morgens Nebel, mittags Wolkenlücken, abends Tief. Sehr unbeständig.',
|
||||
tankTopInit: 42,
|
||||
blocks: [
|
||||
{ range: '00–03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03–06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06–09', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '09–12', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '12–15', demand: 10, solar: 0 }, // 2T
|
||||
{ range: '15–18', demand: 10, solar: 0 }, // 2T
|
||||
{ range: '18–21', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '21–24', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '00 – 03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03 – 06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06 – 09', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '09 – 12', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '12 – 15', demand: 10, solar: 0 }, // 2T
|
||||
{ range: '15 – 18', demand: 10, solar: 0 }, // 2T
|
||||
{ range: '18 – 21', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '21 – 24', demand: 5, solar: 0 }, // 1T
|
||||
],
|
||||
},
|
||||
],
|
||||
@@ -1229,14 +1229,14 @@
|
||||
desc: 'Eisig kalt, Bedarf hoch wegen Heizen. Solar tagsüber knapp, abends Spitze.',
|
||||
tankTopInit: 42,
|
||||
blocks: [
|
||||
{ range: '00–03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03–06', demand: 10, solar: 0 }, // 2T
|
||||
{ range: '06–09', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '09–12', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '12–15', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '15–18', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '18–21', demand: 15, solar: 5 }, // 2T
|
||||
{ range: '21–24', demand: 10, solar: 0 }, // 2T
|
||||
{ range: '00 – 03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03 – 06', demand: 10, solar: 0 }, // 2T
|
||||
{ range: '06 – 09', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '09 – 12', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '12 – 15', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '15 – 18', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '18 – 21', demand: 15, solar: 5 }, // 2T
|
||||
{ range: '21 – 24', demand: 10, solar: 0 }, // 2T
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -1245,14 +1245,14 @@
|
||||
desc: 'Tagsüber Solar gut, abends sehr kalt. Mit Pumpe-Mittag den Abend vorbereiten.',
|
||||
tankTopInit: 30,
|
||||
blocks: [
|
||||
{ range: '00–03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03–06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06–09', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '09–12', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '12–15', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '15–18', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '18–21', demand: 10, solar: 0 }, // 2T
|
||||
{ range: '21–24', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '00 – 03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03 – 06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06 – 09', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '09 – 12', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '12 – 15', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '15 – 18', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '18 – 21', demand: 10, solar: 0 }, // 2T
|
||||
{ range: '21 – 24', demand: 5, solar: 0 }, // 1T
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -1261,14 +1261,14 @@
|
||||
desc: 'Heftiger Wind, kaum Solar. Wind hilft tagsüber etwas, abends große Lücke.',
|
||||
tankTopInit: 30,
|
||||
blocks: [
|
||||
{ range: '00–03', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '03–06', demand: 10, solar: 10 }, // Aus
|
||||
{ range: '06–09', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '09–12', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '12–15', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '15–18', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '18–21', demand: 15, solar: 5 }, // 2T
|
||||
{ range: '21–24', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '00 – 03', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '03 – 06', demand: 10, solar: 10 }, // Aus
|
||||
{ range: '06 – 09', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '09 – 12', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '12 – 15', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '15 – 18', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '18 – 21', demand: 15, solar: 5 }, // 2T
|
||||
{ range: '21 – 24', demand: 5, solar: 5 }, // Aus
|
||||
],
|
||||
},
|
||||
],
|
||||
@@ -1282,14 +1282,14 @@
|
||||
desc: 'Industriegürtel mit hoher Tageslast. Wenig Pump-Spielraum, viel Turbinieren.',
|
||||
tankTopInit: 40,
|
||||
blocks: [
|
||||
{ range: '00–03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03–06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06–09', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '09–12', demand: 15, solar: 15 }, // Aus
|
||||
{ range: '12–15', demand: 15, solar: 20 }, // 1P
|
||||
{ range: '15–18', demand: 15, solar: 10 }, // 1T
|
||||
{ range: '18–21', demand: 15, solar: 5 }, // 2T
|
||||
{ range: '21–24', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '00 – 03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03 – 06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06 – 09', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '09 – 12', demand: 15, solar: 15 }, // Aus
|
||||
{ range: '12 – 15', demand: 15, solar: 20 }, // 1P
|
||||
{ range: '15 – 18', demand: 15, solar: 10 }, // 1T
|
||||
{ range: '18 – 21', demand: 15, solar: 5 }, // 2T
|
||||
{ range: '21 – 24', demand: 5, solar: 0 }, // 1T
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -1298,14 +1298,14 @@
|
||||
desc: 'Drei Bedarfsspitzen statt zwei. Speicher von gestern entscheidet.',
|
||||
tankTopInit: 50,
|
||||
blocks: [
|
||||
{ range: '00–03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03–06', demand: 10, solar: 0 }, // 2T
|
||||
{ range: '06–09', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '09–12', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '12–15', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '15–18', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '18–21', demand: 15, solar: 5 }, // 2T
|
||||
{ range: '21–24', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '00 – 03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03 – 06', demand: 10, solar: 0 }, // 2T
|
||||
{ range: '06 – 09', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '09 – 12', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '12 – 15', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '15 – 18', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '18 – 21', demand: 15, solar: 5 }, // 2T
|
||||
{ range: '21 – 24', demand: 10, solar: 5 }, // 1T
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -1314,14 +1314,14 @@
|
||||
desc: 'Großer Verbraucher legt um — Solar-Überschuss überall. Pumpen, was geht.',
|
||||
tankTopInit: 20,
|
||||
blocks: [
|
||||
{ range: '00–03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03–06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06–09', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '09–12', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '12–15', demand: 5, solar: 16 }, // 2P
|
||||
{ range: '15–18', demand: 5, solar: 16 }, // 2P
|
||||
{ range: '18–21', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '21–24', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '00 – 03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03 – 06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06 – 09', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '09 – 12', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '12 – 15', demand: 5, solar: 16 }, // 2P
|
||||
{ range: '15 – 18', demand: 5, solar: 16 }, // 2P
|
||||
{ range: '18 – 21', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '21 – 24', demand: 5, solar: 0 }, // 1T
|
||||
],
|
||||
},
|
||||
],
|
||||
@@ -1335,14 +1335,14 @@
|
||||
desc: 'Niedriger Bedarf, normaler Solar-Verlauf. Großer Pump-Tag.',
|
||||
tankTopInit: 15,
|
||||
blocks: [
|
||||
{ range: '00–03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03–06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06–09', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '09–12', demand: 5, solar: 16 }, // 2P
|
||||
{ range: '12–15', demand: 5, solar: 16 }, // 2P
|
||||
{ range: '15–18', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '18–21', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '21–24', demand: 10, solar: 0 }, // 2T
|
||||
{ range: '00 – 03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03 – 06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06 – 09', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '09 – 12', demand: 5, solar: 16 }, // 2P
|
||||
{ range: '12 – 15', demand: 5, solar: 16 }, // 2P
|
||||
{ range: '15 – 18', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '18 – 21', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '21 – 24', demand: 10, solar: 0 }, // 2T
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -1351,14 +1351,14 @@
|
||||
desc: 'Sehr niedriger Bedarf. Speicher fast unverändert, kaum Bewegung nötig.',
|
||||
tankTopInit: 20,
|
||||
blocks: [
|
||||
{ range: '00–03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03–06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06–09', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '09–12', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '12–15', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '15–18', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '18–21', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '21–24', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '00 – 03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03 – 06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06 – 09', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '09 – 12', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '12 – 15', demand: 5, solar: 10 }, // 1P
|
||||
{ range: '15 – 18', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '18 – 21', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '21 – 24', demand: 5, solar: 0 }, // 1T
|
||||
],
|
||||
},
|
||||
{
|
||||
@@ -1367,14 +1367,14 @@
|
||||
desc: 'Eigentlich ruhig, abends überraschende Spitze. Speicher bis dahin retten.',
|
||||
tankTopInit: 40,
|
||||
blocks: [
|
||||
{ range: '00–03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03–06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06–09', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '09–12', demand: 10, solar: 10 }, // Aus
|
||||
{ range: '12–15', demand: 10, solar: 15 }, // 1P
|
||||
{ range: '15–18', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '18–21', demand: 15, solar: 5 }, // 2T
|
||||
{ range: '21–24', demand: 10, solar: 0 }, // 2T
|
||||
{ range: '00 – 03', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '03 – 06', demand: 5, solar: 0 }, // 1T
|
||||
{ range: '06 – 09', demand: 5, solar: 5 }, // Aus
|
||||
{ range: '09 – 12', demand: 10, solar: 10 }, // Aus
|
||||
{ range: '12 – 15', demand: 10, solar: 15 }, // 1P
|
||||
{ range: '15 – 18', demand: 10, solar: 5 }, // 1T
|
||||
{ range: '18 – 21', demand: 15, solar: 5 }, // 2T
|
||||
{ range: '21 – 24', demand: 10, solar: 0 }, // 2T
|
||||
],
|
||||
},
|
||||
],
|
||||
@@ -2104,10 +2104,10 @@
|
||||
netzfrequenz: { title:'Netzfrequenz — der Pulsschlag des Stromnetzes (50 Hz)', text:'In unseren Steckdosen fließt kein Gleichstrom wie aus einer Batterie, sondern WECHSELSTROM. Das heißt: Die elektrische Spannung wechselt fünfzig Mal pro Sekunde ihre Richtung — von Plus zu Minus und zurück. Diese Geschwindigkeit nennt man die Netzfrequenz, gemessen in Hertz (Hz).\n\nWarum ist das wichtig? Alle Kraftwerke und alle Verbraucher in Europa hängen am selben Netz und müssen GANZ GENAU im Takt von 50 Hz arbeiten. Stell dir das wie einen riesigen Chor vor: Wenn auch nur ein Sänger zu schnell oder zu langsam singt, klingt es schief.\n\nGenauer: Die Frequenz zeigt, ob Erzeugung und Verbrauch im Gleichgewicht sind:\n• Mehr Strom erzeugt als verbraucht → Frequenz STEIGT über 50 Hz.\n• Mehr Strom verbraucht als erzeugt → Frequenz SINKT unter 50 Hz.\n\nDie Toleranz ist winzig: ±0,2 Hz sind noch normal. Außerhalb davon (49,5 oder 50,5 Hz) greifen automatische Schutzmaßnahmen, damit kein Blackout passiert. Maschinen, Computer und Industrieanlagen sind auf exakt 50 Hz ausgelegt — Abweichungen zerstören sie.\n\nDie Netzfrequenz ist deshalb wie ein Pulsmesser für das ganze Stromnetz Europas — von Portugal bis Polen, von Norwegen bis Sizilien synchron.', unit:'Hz' },
|
||||
blackout: { title:'Blackout', text:'Großflächiger und längerer Stromausfall. Heizung, Wasser, Ampeln, Internet fallen aus. Kann Stunden bis Tage dauern.' },
|
||||
lastabwurf: { title:'Lastabwurf', text:'Notmaßnahme bei Frequenz-Einbruch: gezieltes Abschalten großer Stromabnehmer, um Blackout zu verhindern.' },
|
||||
pumpspeicher: { title:'Pumpspeicherkraftwerk', text:'Zwei Becken in unterschiedlicher Höhe + Turbine. Wasser hochpumpen speichert Energie, ablaufen lassen erzeugt Strom. Wirkungsgrad 70–85 %.' },
|
||||
pumpspeicher: { title:'Pumpspeicherkraftwerk', text:'Zwei Becken in unterschiedlicher Höhe + Turbine. Wasser hochpumpen speichert Energie, ablaufen lassen erzeugt Strom. Wirkungsgrad 70 – 85 %.' },
|
||||
turbine: { title:'Turbine', text:'Maschine mit Schaufelrad — durch strömendes Wasser angetrieben, treibt einen Generator an.' },
|
||||
wirkungsgrad: { title:'Wirkungsgrad', text:'Wie viel Prozent der eingesetzten Energie als Nutz-Energie ankommen. Pumpspeicher: 70–85 %, PV: 20–23 %.' },
|
||||
photovoltaik: { title:'Photovoltaik', text:'Technik, die Sonnenlicht direkt in Strom umwandelt. Wirkungsgrad 20–23 %.' },
|
||||
wirkungsgrad: { title:'Wirkungsgrad', text:'Wie viel Prozent der eingesetzten Energie als Nutz-Energie ankommen. Pumpspeicher: 70 – 85 %, PV: 20 – 23 %.' },
|
||||
photovoltaik: { title:'Photovoltaik', text:'Technik, die Sonnenlicht direkt in Strom umwandelt. Wirkungsgrad 20 – 23 %.' },
|
||||
spitzenlast: { title:'Spitzenlast', text:'Höchster Strombedarf des Tages — meist morgens und abends.' },
|
||||
grundlast: { title:'Grundlast', text:'Strom, der praktisch nie unter einen bestimmten Wert fällt — Kühlschränke, Server, Lüftung etc.' },
|
||||
lastausgleich:{ title:'Lastausgleich', text:'Aufgabe des Stromnetzes: Erzeugung und Verbrauch ständig in Balance halten.' },
|
||||
@@ -2473,7 +2473,7 @@
|
||||
}
|
||||
window.closeFunFact = closeFunFact;
|
||||
|
||||
// Einheitliche Zeit-Formatierung: '00–03' → '00 – 03 Uhr'
|
||||
// Einheitliche Zeit-Formatierung: '00 – 03' → '00 – 03 Uhr'
|
||||
function fmtTimeRange(r) {
|
||||
if (!r) return '';
|
||||
// Akzeptiere Bindestrich, en-dash, em-dash und Slash als Trenner
|
||||
|
||||
@@ -3957,7 +3957,7 @@ function renderDashboard() {
|
||||
${INVESTMENTS.map(inv => renderInvestCard(inv, totals.money)).join('')}
|
||||
</div>
|
||||
<div class="disclaimer-card">
|
||||
<strong>Wichtig:</strong> Diese Werte sind <em>historische Mittelwerte</em> der letzten 10–30 Jahre. Sie sind <strong>keine Prognose</strong> für die Zukunft. Geldanlagen können auch <strong>Verlust machen</strong>, vor allem in Krisenjahren — und je riskanter die Anlage, desto stärker schwankt sie. Sparbuch verliert real (nach Inflation) langfristig meist an Kaufkraft.
|
||||
<strong>Wichtig:</strong> Diese Werte sind <em>historische Mittelwerte</em> der letzten 10 – 30 Jahre. Sie sind <strong>keine Prognose</strong> für die Zukunft. Geldanlagen können auch <strong>Verlust machen</strong>, vor allem in Krisenjahren — und je riskanter die Anlage, desto stärker schwankt sie. Sparbuch verliert real (nach Inflation) langfristig meist an Kaufkraft.
|
||||
</div>
|
||||
|
||||
<!-- Anlage selbst konfigurieren -->
|
||||
|
||||
@@ -2081,7 +2081,7 @@ const CONCEPTS = {
|
||||
<h4>Was machen sie da?</h4>
|
||||
<p>Sie diskutieren die ganz großen Themen: Krieg in der Ukraine, Migrationspolitik, Klimaziele, Beziehungen zu China und den USA, Erweiterung der EU. Sie geben politische Richtungen vor – beschließen aber selbst KEINE Gesetze.</p>
|
||||
<h4>Wie oft tagen sie?</h4>
|
||||
<p>Mindestens 4 Mal im Jahr, oft auch öfter, wenn eine Krise das verlangt. Die Treffen finden meist in Brüssel statt und dauern 1–2 Tage.</p>
|
||||
<p>Mindestens 4 Mal im Jahr, oft auch öfter, wenn eine Krise das verlangt. Die Treffen finden meist in Brüssel statt und dauern 1 – 2 Tage.</p>
|
||||
<h4>Wichtig: Verwechslungsgefahr!</h4>
|
||||
<p>Der „Europäische Rat" und der „Rat der EU" (Ministerrat) sind ZWEI VERSCHIEDENE Institutionen. Der Europäische Rat sind die Chef*innen, der Rat der EU sind die jeweiligen Fachminister*innen. Selbst Erwachsene verwechseln das ständig.</p>
|
||||
`,
|
||||
@@ -2154,7 +2154,7 @@ const CONCEPTS = {
|
||||
`,
|
||||
caseContext: {
|
||||
cage_age: `
|
||||
<h4>End the Cage Age (2018–2021)</h4>
|
||||
<h4>End the Cage Age (2018 – 2021)</h4>
|
||||
<p>Die Initiative wurde von der britischen Tierschutzorganisation <strong>Compassion in World Farming (CIWF)</strong> ins Leben gerufen und von über 170 weiteren NGOs unterstützt. Sie startete im September 2018 und sammelte bis September 2019 stolze <strong>1.397.113 gültige Unterschriften aus 18 Ländern</strong> – damit die viertbestätigte Bürgerinitiative aller Zeiten.</p>
|
||||
<p>Im Bürgerkomitee saßen Tierschützer*innen aus mehreren Ländern, darunter <strong>Mahi Klosterhalfen</strong>, Präsident der Albert Schweitzer Stiftung in Deutschland. Die meisten Unterschriften kamen aus Deutschland (~360.000), Frankreich (~165.000) und Italien (~135.000). Aus Österreich kamen rund 23.000.</p>
|
||||
`
|
||||
@@ -3039,7 +3039,7 @@ const SCENARIOS = {
|
||||
narration: 'Nach einem Jahr ist es geschafft: 1.397.113 Unterschriften aus 18 Ländern – mehr als nötig! Auch deine Eltern haben unterschrieben. Die Kommission lädt das Bürgerkomitee zu einer öffentlichen Anhörung im EU-Parlament ein. Aber dann kommt die entscheidende Frage: Wer darf jetzt eigentlich den Gesetzestext schreiben?',
|
||||
milestone: {
|
||||
title: '1,4 Millionen Stimmen!',
|
||||
text: '<strong>End the Cage Age</strong> sammelte 2018–2019 echte 1.397.113 Unterschriften aus 18 Ländern. Damit gehört sie zu den vier erfolgreichsten Bürgerinitiativen aller Zeiten. Die Kommission MUSS sich nun befassen.'
|
||||
text: '<strong>End the Cage Age</strong> sammelte 2018 – 2019 echte 1.397.113 Unterschriften aus 18 Ländern. Damit gehört sie zu den vier erfolgreichsten Bürgerinitiativen aller Zeiten. Die Kommission MUSS sich nun befassen.'
|
||||
},
|
||||
question: 'Wer darf den offiziellen Gesetzestext einbringen?',
|
||||
pool: ['kommission', 'parlament', 'ministerrat', 'buergerinitiative'],
|
||||
@@ -3079,7 +3079,7 @@ const SCENARIOS = {
|
||||
type: 'mixed',
|
||||
title: 'Du hast es geschafft …',
|
||||
subtitle: 'Das Bürgerkomitee hat den Weg von der Idee bis zur Mitentscheidung richtig durchlaufen. Aber: Auch der lehrbuchmäßig richtige Weg garantiert kein Gesetz.',
|
||||
realStory: 'Die Bürgerinitiative „End the Cage Age" wurde von der britischen Organisation Compassion in World Farming gestartet und sammelte 2018–2019 rund 1,4 Millionen Unterschriften aus 18 EU-Ländern. Im Juni 2021 versprach die Kommission feierlich, einen Gesetzesvorschlag bis Ende 2023 vorzulegen. Doch bis heute (Mai 2026) ist das nicht passiert. Das Bürgerkomitee – darunter Mahi Klosterhalfen von der Albert Schweitzer Stiftung – klagt deshalb seit März 2024 vor dem Europäischen Gerichtshof. Im März 2026 fand die mündliche Verhandlung statt, das Urteil steht noch aus. Der Fall zeigt: Auch wenn alle demokratischen Schritte richtig gemacht werden, garantiert das noch kein Gesetz. Demokratie ist ein langer Atem.'
|
||||
realStory: 'Die Bürgerinitiative „End the Cage Age" wurde von der britischen Organisation Compassion in World Farming gestartet und sammelte 2018 – 2019 rund 1,4 Millionen Unterschriften aus 18 EU-Ländern. Im Juni 2021 versprach die Kommission feierlich, einen Gesetzesvorschlag bis Ende 2023 vorzulegen. Doch bis heute (Mai 2026) ist das nicht passiert. Das Bürgerkomitee – darunter Mahi Klosterhalfen von der Albert Schweitzer Stiftung – klagt deshalb seit März 2024 vor dem Europäischen Gerichtshof. Im März 2026 fand die mündliche Verhandlung statt, das Urteil steht noch aus. Der Fall zeigt: Auch wenn alle demokratischen Schritte richtig gemacht werden, garantiert das noch kein Gesetz. Demokratie ist ein langer Atem.'
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
@@ -41,15 +41,15 @@
|
||||
},
|
||||
"narratives": {
|
||||
"S1": [
|
||||
"Klimatisch ein Glücksgriff: Sommer mild bei 18–22 °C, ausreichend Niederschlag (500–700 mm), kühle Winter, die der Winterweizen für die spätere Kornbildung braucht. Die Halme stehen kniehoch, Ähren prall mit ~40 Körnern. Ertrag ~5–6 t/ha — europäischer Spitzenwert.",
|
||||
"Klimatisch ein Glücksgriff: Sommer mild bei 18 – 22 °C, ausreichend Niederschlag (500 – 700 mm), kühle Winter, die der Winterweizen für die spätere Kornbildung braucht. Die Halme stehen kniehoch, Ähren prall mit ~40 Körnern. Ertrag ~5 – 6 t/ha — europäischer Spitzenwert.",
|
||||
"Goldgelbe Felder bis zum Horizont. Der Mähdrescher hat zu tun. Korn-Qualität top, mahlfähig zu Mehl Type 550. Volle Lieferung."
|
||||
],
|
||||
"S2": [
|
||||
"Klima passt grob, aber der Sommer war zu trocken (unter 400 mm im Vegetationszyklus). Ähren etwas leerer, Korn kleiner. Ertrag ~3–4 t/ha — solide, nicht spitze. Brot wird daraus.",
|
||||
"Klima passt grob, aber der Sommer war zu trocken (unter 400 mm im Vegetationszyklus). Ähren etwas leerer, Korn kleiner. Ertrag ~3 – 4 t/ha — solide, nicht spitze. Brot wird daraus.",
|
||||
"Ein Hitzesommer hat zugesetzt. Die Halme sind kürzer, die Reife früher. Ernte unter Schnitt, aber gut verkaufbar."
|
||||
],
|
||||
"S3": [
|
||||
"Die Wachstumsperiode ist zu kurz, oder es regnet im falschen Moment. Magere Ähren mit oft tauben Körnern. Ertrag ~1–2 t/ha — kaum profitabel.",
|
||||
"Die Wachstumsperiode ist zu kurz, oder es regnet im falschen Moment. Magere Ähren mit oft tauben Körnern. Ertrag ~1 – 2 t/ha — kaum profitabel.",
|
||||
"Pilzbefall im feuchten Frühsommer (Mehltau, Rost). Was übrig bleibt, hat nur Futtermittel-Qualität."
|
||||
],
|
||||
"N1": [
|
||||
@@ -95,15 +95,15 @@
|
||||
},
|
||||
"narratives": {
|
||||
"S1": [
|
||||
"Ganzjährig 26–30 °C, 1500–2500 mm Regen, kein Frost — Bananenstauden-Paradies. Nach 9–12 Monaten erste Trauben. Ertrag ~30–40 t/ha — eines der ertragreichsten Anbausysteme der Welt.",
|
||||
"Ganzjährig 26 – 30 °C, 1500 – 2500 mm Regen, kein Frost — Bananenstauden-Paradies. Nach 9 – 12 Monaten erste Trauben. Ertrag ~30 – 40 t/ha — eines der ertragreichsten Anbausysteme der Welt.",
|
||||
"Pralle, schwere Trauben. Reifen langsam in der Wärme, Geschmack vollmundig. Direkt verschiffbar wenn sie noch grün sind."
|
||||
],
|
||||
"S2": [
|
||||
"Wärme passt, aber die Trockenzeit ist deutlich (3–4 Monate fast ohne Regen). Ohne Bewässerung Ertrag ~15–20 t/ha. Trauben kleiner, aber gut verkaufbar.",
|
||||
"Wärme passt, aber die Trockenzeit ist deutlich (3 – 4 Monate fast ohne Regen). Ohne Bewässerung Ertrag ~15 – 20 t/ha. Trauben kleiner, aber gut verkaufbar.",
|
||||
"Solide Ernte. Die Pflanzen wachsen langsamer in der trockenen Phase, holen aber im Regen wieder auf."
|
||||
],
|
||||
"S3": [
|
||||
"Im Winter rutscht die Temperatur auf 14–18 °C — Bananen stocken im Wachstum, treiben kaum. Ohne Folientunnel oder Mauerschutz nur Mini-Bananen.",
|
||||
"Im Winter rutscht die Temperatur auf 14 – 18 °C — Bananen stocken im Wachstum, treiben kaum. Ohne Folientunnel oder Mauerschutz nur Mini-Bananen.",
|
||||
"Mediterraner Versuch: geht knapp, aber die Trauben sind klein und stechreif. Touristen-Ware, kein Welthandel."
|
||||
],
|
||||
"N1": [
|
||||
@@ -204,7 +204,7 @@
|
||||
},
|
||||
"narratives": {
|
||||
"S1": [
|
||||
"Heiße trockene Tage, kalte Nächte, sandiger Boden, sparsame Vegetation — Kamel-Heimat. Die Tiere fressen Dornsträucher die andere verschmähen, trinken alle 1–2 Wochen, geben gleichbleibend Milch. Robuste Herde, hochwertige Tiere.",
|
||||
"Heiße trockene Tage, kalte Nächte, sandiger Boden, sparsame Vegetation — Kamel-Heimat. Die Tiere fressen Dornsträucher die andere verschmähen, trinken alle 1 – 2 Wochen, geben gleichbleibend Milch. Robuste Herde, hochwertige Tiere.",
|
||||
"Klassische Trocken-Savanne oder Steppe. Die Tiere sind genügsam, krank werden sie selten. Premium-Marktware aus den Wüstenrändern."
|
||||
],
|
||||
"S2": [
|
||||
@@ -258,11 +258,11 @@
|
||||
},
|
||||
"narratives": {
|
||||
"S1": [
|
||||
"Mekong-/Ganges-Delta-Bedingungen: ganzjährig 25–30 °C, Monsun bringt 1500+ mm Regen, Boden steht zeitweise unter Wasser. Nassreis trägt zwei bis drei Ernten pro Jahr. Ertrag ~5–7 t/ha — Asiens Standard.",
|
||||
"Mekong-/Ganges-Delta-Bedingungen: ganzjährig 25 – 30 °C, Monsun bringt 1500+ mm Regen, Boden steht zeitweise unter Wasser. Nassreis trägt zwei bis drei Ernten pro Jahr. Ertrag ~5 – 7 t/ha — Asiens Standard.",
|
||||
"Volle Rispen, glänzende Körner. Die Terrassen sind perfekt geflutet, der Reis steht hüfthoch. Spitzenernte."
|
||||
],
|
||||
"S2": [
|
||||
"Mit Bewässerung geht's. Die Trockenzeit ist lang, ohne Kanäle würde nichts wachsen. Ertrag ~3–4 t/ha, qualitativ ok.",
|
||||
"Mit Bewässerung geht's. Die Trockenzeit ist lang, ohne Kanäle würde nichts wachsen. Ertrag ~3 – 4 t/ha, qualitativ ok.",
|
||||
"Reis hält sich, aber das Wasser muss gepumpt werden. Nicht ohne Aufwand."
|
||||
],
|
||||
"S3": [
|
||||
@@ -310,7 +310,7 @@
|
||||
},
|
||||
"narratives": {
|
||||
"S1": [
|
||||
"Klassische Kaffee-Region (Brasilien-Cerrado, Kolumbien-Anden, Äthiopien-Hochland): Tagsüber 22–28 °C, kühle Nächte, ~1500 mm Regen. Die Sträucher hängen voller roter Kirschen. Ertrag ~1–2 t Bohnen/ha — Spitzenqualität.",
|
||||
"Klassische Kaffee-Region (Brasilien-Cerrado, Kolumbien-Anden, Äthiopien-Hochland): Tagsüber 22 – 28 °C, kühle Nächte, ~1500 mm Regen. Die Sträucher hängen voller roter Kirschen. Ertrag ~1 – 2 t Bohnen/ha — Spitzenqualität.",
|
||||
"Arabica-Bedingungen perfekt. Die Kirschen reifen langsam und gleichmäßig — feiner Geschmack, hoher Marktpreis."
|
||||
],
|
||||
"S2": [
|
||||
@@ -416,11 +416,11 @@
|
||||
},
|
||||
"narratives": {
|
||||
"S1": [
|
||||
"US-Corn-Belt-Bedingungen: heiße feuchte Sommer (25–30 °C), tiefer Mutterboden, ~600–800 mm Niederschlag im Vegetationszyklus. Kolben hängen schwer. Ertrag ~10–12 t/ha — Welt-Spitze.",
|
||||
"US-Corn-Belt-Bedingungen: heiße feuchte Sommer (25 – 30 °C), tiefer Mutterboden, ~600 – 800 mm Niederschlag im Vegetationszyklus. Kolben hängen schwer. Ertrag ~10 – 12 t/ha — Welt-Spitze.",
|
||||
"Mannshohe Maisstangen, dichte Felder. Mähdrescher arbeitet einen Tag pro Hektar. Top-Ernte für Futter und Stärke."
|
||||
],
|
||||
"S2": [
|
||||
"Klima passt grob — etwas zu trocken oder zu warm in der Reife. Ertrag ~5–7 t/ha, vermarktbar.",
|
||||
"Klima passt grob — etwas zu trocken oder zu warm in der Reife. Ertrag ~5 – 7 t/ha, vermarktbar.",
|
||||
"Mais kommt durch, aber die Kolben sind kleiner. Solide Ernte."
|
||||
],
|
||||
"S3": ["Magere Ernte, viele leere Kolben. Mit Bewässerung würde mehr gehen."],
|
||||
@@ -463,7 +463,7 @@
|
||||
},
|
||||
"narratives": {
|
||||
"S1": [
|
||||
"Lachsfarm im Fjord oder Tilapia-Käfig im warmen Meer — perfekte Bedingungen. Sauerstoffreiches Wasser, gleichmäßige Temperaturen, viel Platz. Pro Käfig ~30–50 t alle 2 Jahre. Norwegen-, Chile-, Vietnam-Modell.",
|
||||
"Lachsfarm im Fjord oder Tilapia-Käfig im warmen Meer — perfekte Bedingungen. Sauerstoffreiches Wasser, gleichmäßige Temperaturen, viel Platz. Pro Käfig ~30 – 50 t alle 2 Jahre. Norwegen-, Chile-, Vietnam-Modell.",
|
||||
"Volle Käfige, gesunde Fische, hohe Marktpreise. Aquakultur ist der am schnellsten wachsende Bereich der Tierproduktion weltweit."
|
||||
],
|
||||
"S2": ["Solide Ernte — Wassertemperatur etwas suboptimal, aber Fische gedeihen."],
|
||||
@@ -474,7 +474,7 @@
|
||||
"Aquakultur funktioniert nicht im Hinterland — kein Wasserkörper, kein Fisch."
|
||||
],
|
||||
"wasser": [
|
||||
"🌊 Lachsfarm im Fjord — perfekte Bedingungen, kühles klares Wasser, viel Sauerstoff. Pro Käfig ~30–50 t Lachs alle 2 Jahre.",
|
||||
"🌊 Lachsfarm im Fjord — perfekte Bedingungen, kühles klares Wasser, viel Sauerstoff. Pro Käfig ~30 – 50 t Lachs alle 2 Jahre.",
|
||||
"🌊 Tilapia-Farm im warmen Meer. Schnellwachsend, robust, stabile Erträge — Vietnam-/Indonesien-Modell."
|
||||
],
|
||||
"disease": [
|
||||
@@ -508,7 +508,7 @@
|
||||
},
|
||||
"narratives": {
|
||||
"S1": [
|
||||
"Mediterran perfekt: heiße trockene Sommer (25–35 °C), milde Winter (5–10 °C, kein Dauerfrost), karger Kalkboden. Olivenbäume tragen alle 2 Jahre voll. Ertrag ~3–4 t Oliven/ha → ~600 kg Olivenöl.",
|
||||
"Mediterran perfekt: heiße trockene Sommer (25 – 35 °C), milde Winter (5 – 10 °C, kein Dauerfrost), karger Kalkboden. Olivenbäume tragen alle 2 Jahre voll. Ertrag ~3 – 4 t Oliven/ha → ~600 kg Olivenöl.",
|
||||
"Silbergraue Hänge bis zum Horizont, jahrhundertealte Bäume tragen schwer. Kaltgepresstes Olivenöl extra vergine — Spitzenpreis."
|
||||
],
|
||||
"S2": ["Solide Ernte, etwas zu trocken oder zu warm. Tafeloliven gehen, Öl-Qualität OK."],
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* Totalausfall des ganzen Clusters. Deterministisch via Mulberry32.
|
||||
* - Unlock-System: Sorten haben unlockYear; ab dem Jahr verfügbar.
|
||||
* Counter pro Sorte sinkt je nach Anzahl freigeschalteter Sorten:
|
||||
* 1–3 Sorten = 3, 4 = 2, 5 = 2, 6+ = 1.
|
||||
* 1 – 3 Sorten = 3, 4 = 2, 5 = 2, 6+ = 1.
|
||||
*
|
||||
* Daten (assets/data/):
|
||||
* crops.json — Sorten, Eignung, Diagnose, monoculture-Konfig
|
||||
@@ -214,7 +214,7 @@ window.FarmerEngine = (function () {
|
||||
const MARKET_BLOCK_YEARS = 3;
|
||||
|
||||
/** Markt-Auftrag des Jahres: pro 3 Jahre ein Hub, dann zum nächsten zyklisch.
|
||||
* Jahr 1–3 → Hub 0, Jahr 4–6 → Hub 1, ... */
|
||||
* Jahr 1 – 3 → Hub 0, Jahr 4 – 6 → Hub 1, ... */
|
||||
function getMarketHubForYear(year) {
|
||||
if (!HUBS_DATA || !HUBS_DATA.hubs.length) return null;
|
||||
const block = Math.floor((year - 1) / MARKET_BLOCK_YEARS);
|
||||
|
||||
@@ -802,7 +802,7 @@ let currentReports = [];
|
||||
let currentReportIdx = 0;
|
||||
let currentHighlightedId = null;
|
||||
let startTime = Date.now(); // für Endbericht: gespielte Zeit
|
||||
const END_REPORT_TRIGGER_YEAR = 11; // Endbericht-Modal nach 10 abgeschlossenen Jahren — passt zur 10–20-Min-Spielzeit. Schüler*in kann „Weiter arbeiten" wählen bis Jahr 22+ (alle Sorten unlocked).
|
||||
const END_REPORT_TRIGGER_YEAR = 11; // Endbericht-Modal nach 10 abgeschlossenen Jahren — passt zur 10 – 20-Min-Spielzeit. Schüler*in kann „Weiter arbeiten" wählen bis Jahr 22+ (alle Sorten unlocked).
|
||||
|
||||
// ===== Boot =====
|
||||
(async function boot() {
|
||||
|
||||
@@ -226,8 +226,8 @@
|
||||
</td>
|
||||
<td>
|
||||
<span class="cat cat-geschick">Geschick</span><br>
|
||||
• Start-Sterne (1–5)<br>
|
||||
• Landung-Sterne (1–5)<br>
|
||||
• Start-Sterne (1 – 5)<br>
|
||||
• Landung-Sterne (1 – 5)<br>
|
||||
• G-Kraft-Durchschnitt<br>
|
||||
• Berührungen
|
||||
</td>
|
||||
|
||||
@@ -2366,7 +2366,7 @@ var HELI_ONBOARDING_STEPS = [
|
||||
+ '<text x="445" y="110" fill="#3d5165">+ Auswertung</text>'
|
||||
+ '</g>'
|
||||
+ '<defs><marker id="arrowg" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" fill="#5a8a5e"/></marker></defs>'
|
||||
+ '<text x="240" y="158" text-anchor="middle" font-size="9" fill="#3d5165" font-style="italic">~ 5–8 Minuten pro Einsatz</text>'
|
||||
+ '<text x="240" y="158" text-anchor="middle" font-size="9" fill="#3d5165" font-style="italic">~ 5 – 8 Minuten pro Einsatz</text>'
|
||||
+ '</svg>',
|
||||
text: 'Jede Mission besteht aus <b>5 Phasen</b>:<ul>'
|
||||
+ '<li><b>📋 Auftrag wählen</b> — wir bekommen drei Einsätze vorgeschlagen. Such einen aus.</li>'
|
||||
@@ -2470,7 +2470,7 @@ var HELI_ONBOARDING_STEPS = [
|
||||
+ '<br><br><ul>'
|
||||
+ '<li><span class="heli-glossar-term" data-glossar="vogelschlag"><b>🦅 Vögel (Vogelschlag)</b></span> — gefährlich für Rotor und Cockpitscheibe. Besonders über Seen (Möwen), bei Dämmerung (Zugvögel) und an Berghängen (Greifvögel auf Aufwinden). Bei Sichtung kurz Höhe oder Kurs ändern.</li>'
|
||||
+ '<li><span class="heli-glossar-term" data-glossar="luftverkehr"><b>✈ Anderer Luftverkehr</b></span> — andere Helis, Flugzeuge, Drohnen, Segelflieger, Paragleiter. Abstand halten über <span class="heli-glossar-term" data-glossar="tower">Funk</span> und Sicht. Als Notarzt-Heli haben wir Vorflugrecht, andere müssen ausweichen.</li>'
|
||||
+ '<li><span class="heli-glossar-term" data-glossar="gewitter-flug"><b>⛈ Gewitter</b></span> — lebensgefährlich für Helis (Sturmböen, Hagel, Sicht-Verlust, Blitz). Mindestens <b>10–15 km Abstand</b> halten. Bei plötzlichem Gewitter: sofort landen, Patient später holen.</li>'
|
||||
+ '<li><span class="heli-glossar-term" data-glossar="gewitter-flug"><b>⛈ Gewitter</b></span> — lebensgefährlich für Helis (Sturmböen, Hagel, Sicht-Verlust, Blitz). Mindestens <b>10 – 15 km Abstand</b> halten. Bei plötzlichem Gewitter: sofort landen, Patient später holen.</li>'
|
||||
+ '</ul>'
|
||||
+ '<br><b>Tipp:</b> Klick auf jeden der unterstrichenen Begriffe — Marlene erklärt sie dir kurz. Im <b>📖 Glossar</b> findest du die ausführlichen Versionen.'
|
||||
},
|
||||
@@ -2496,11 +2496,11 @@ var HELI_ONBOARDING_STEPS = [
|
||||
+ '<text x="390" y="118" font-size="8" fill="#3d5165">Landezone frei</text>'
|
||||
// Mittelwert-Pfeil
|
||||
+ '<path d="M 240 135 L 240 148" stroke="#c97a3f" stroke-width="2" marker-end="url(#arrowo)"/>'
|
||||
+ '<text x="240" y="158" font-weight="800" fill="#c97a3f">⌀ Gesamtbewertung 1–5 ★</text>'
|
||||
+ '<text x="240" y="158" font-weight="800" fill="#c97a3f">⌀ Gesamtbewertung 1 – 5 ★</text>'
|
||||
+ '</g>'
|
||||
+ '<defs><marker id="arrowo" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" fill="#c97a3f"/></marker></defs>'
|
||||
+ '</svg>',
|
||||
text: 'Wir bewerten drei Bereiche: <b>📍 Routenplanung</b>, <b>🛫 Start</b>, <b>🛬 Landung</b> — jeweils 1–5 Sterne. Aus dem Mittelwert ergibt sich deine Gesamtbewertung.'
|
||||
text: 'Wir bewerten drei Bereiche: <b>📍 Routenplanung</b>, <b>🛫 Start</b>, <b>🛬 Landung</b> — jeweils 1 – 5 Sterne. Aus dem Mittelwert ergibt sich deine Gesamtbewertung.'
|
||||
+ '<br><br><b>Und wenn du Fehler machst?</b> Keine Sorge — ich sitze ja neben dir. Bei der Routenplanung darfst du <b>15 falsche Wegpunkt-Klicks</b> ausprobieren. Bei mehr greife ich ein und plane den Rest. Beim Start oder bei der Landung übernehme ich, wenn ein Manöver zu riskant wird. <b>Den Patient bringen wir in jedem Fall sicher ins Krankenhaus</b> — du sammelst nur weniger Sterne und kannst es im nächsten Einsatz selbst besser machen.'
|
||||
+ '<br><br>📍 Diese Einschulung kannst du übrigens jederzeit oben über den <b>❓ Spielhilfe</b>-Button nochmal aufrufen. Und die <b>📍 Übersichtskarte</b> ist deine beste Vorbereitung — schau dir Stützpunkte, Städte und Berge vorher in Ruhe an.'
|
||||
+ '<br><br>Bereit? Such dir deinen ersten Einsatz aus. 💪'
|
||||
|
||||
@@ -1131,7 +1131,7 @@
|
||||
mastH: 30 + Math.random() * 12
|
||||
});
|
||||
}
|
||||
// 2–3 große Segelschiffe mit hohem Mast (echtes Hindernis)
|
||||
// 2 – 3 große Segelschiffe mit hohem Mast (echtes Hindernis)
|
||||
const tall = 2 + Math.floor(Math.random() * 2);
|
||||
for (let i = 0; i < tall; i++) {
|
||||
let x;
|
||||
@@ -1168,7 +1168,7 @@
|
||||
const segStart = segmentStarts[segIdx], segEnd = segmentEnds[segIdx];
|
||||
const zoneW = 220;
|
||||
const zoneX = segStart + 40 + Math.random() * (segEnd - segStart - zoneW - 80);
|
||||
// Unfallstelle 100–160 px vor oder hinter der Landezone — aber im selben Segment
|
||||
// Unfallstelle 100 – 160 px vor oder hinter der Landezone — aber im selben Segment
|
||||
let crashX = zoneX + zoneW/2 + (Math.random() < 0.5 ? -1 : 1) * (110 + Math.random()*40);
|
||||
crashX = Math.max(segStart + 60, Math.min(segEnd - 60, crashX));
|
||||
// Gaffer im naheren Umfeld der Landezone — sie laufen durchgehend in
|
||||
@@ -3508,7 +3508,7 @@
|
||||
else if (sinkRate > 40) { lzR=74; lzG=124; lzB=78; lzLabel='GUTES TEMPO'; }
|
||||
else { lzLabel='ANFLUG — TIEFER'; }
|
||||
}
|
||||
// Landezone deutlich heller (Alpha 0.65–1.0, voller Farbton statt gedaempft)
|
||||
// Landezone deutlich heller (Alpha 0.65 – 1.0, voller Farbton statt gedaempft)
|
||||
ctx.fillStyle = `rgba(${lzR},${lzG},${lzB},${0.65 + 0.35 * blink})`;
|
||||
ctx.fillRect(lzSx, GROUND_Y - 22, lz.w, 22);
|
||||
ctx.strokeStyle = `rgba(255,255,255,1.0)`;
|
||||
@@ -3988,7 +3988,7 @@
|
||||
state._fuelTrack.lastFuel = h.fuel;
|
||||
state._fuelTrack.lastT = state.t;
|
||||
}
|
||||
// Balken: 0..12 l/min (typisch 4–6, Vollschub bis ~10), mit Mindestbreite 4%
|
||||
// Balken: 0..12 l/min (typisch 4 – 6, Vollschub bis ~10), mit Mindestbreite 4%
|
||||
const lpm = state._fuelLitersPerMin || 0;
|
||||
const fr = document.getElementById('fFuelRate');
|
||||
const vr = document.getElementById('vFuelRate');
|
||||
|
||||
@@ -290,7 +290,7 @@ var ROUTES = [
|
||||
waypoints:['hohenems','dornbirn','egg','bezau','au','schroecken','warth','riezlern'],
|
||||
desc:'Einsatz im Kleinwalsertal. Das Tal ist nur von Deutschland oder per Luft erreichbar — eine der anspruchsvollsten Routen Vorarlbergs.', reason:'Funktionale Exklave — Luftweg einzige österreichische Verbindung', region:'vlbg'},
|
||||
|
||||
// === TIROL-ROUTEN (31–60) ===
|
||||
// === TIROL-ROUTEN (31 – 60) ===
|
||||
// Von C1 Innsbruck
|
||||
{id:31, name:'Innsbruck → Sölden (Skiunfall)', start:'innsbruck_c1', end:'skiunfall_soelden', difficulty:'medium', region:'tirol',
|
||||
waypoints:['innsbruck_c1','telfs','oetz','soelden','skiunfall_soelden'],
|
||||
|
||||
@@ -1068,12 +1068,12 @@ const GLOSSAR = {
|
||||
co2: { title:'CO₂ (Kohlendioxid)', text:'Ein farbloses Gas, das beim Verbrennen von Kohle, Öl und Gas entsteht. Es verstärkt den Treibhauseffekt — der wichtigste Treiber des Klimawandels.', unit:'in ppm (parts per million)', link:'https://de.wikipedia.org/wiki/Kohlenstoffdioxid' },
|
||||
ppm: { title:'ppm (parts per million)', text:'Anteilseinheit: 1 ppm bedeutet ein Teilchen pro Million. Bei CO₂ misst man, wie viele CO₂-Moleküle pro Million Luftmoleküle in der Atmosphäre sind. Vorindustriell ~280 ppm, heute ~425 ppm.', unit:'1 ppm = 1 Teilchen / 1.000.000', link:'https://de.wikipedia.org/wiki/Parts_per_million' },
|
||||
megatonne: { title:'Megatonne (Mt)', text:'Eine Million Tonnen. Österreich stößt etwa 70 Mt CO₂ pro Jahr aus.', unit:'1 Mt = 1.000.000 Tonnen' },
|
||||
megawatt: { title:'Megawatt (MW)', text:'Einheit der elektrischen Leistung. 1 MW = 1 Million Watt. Reicht für ca. 1.000 Haushalte, je nach Verbrauch. Ein modernes Windrad liefert 3–5 MW, eine große Solaranlage 1 MW oder mehr.', unit:'1 MW = 1.000.000 Watt', link:'https://de.wikipedia.org/wiki/Watt_(Einheit)' },
|
||||
megawatt: { title:'Megawatt (MW)', text:'Einheit der elektrischen Leistung. 1 MW = 1 Million Watt. Reicht für ca. 1.000 Haushalte, je nach Verbrauch. Ein modernes Windrad liefert 3 – 5 MW, eine große Solaranlage 1 MW oder mehr.', unit:'1 MW = 1.000.000 Watt', link:'https://de.wikipedia.org/wiki/Watt_(Einheit)' },
|
||||
temperatur: { title:'Globale Durchschnittstemperatur', text:'Seit der Industrialisierung (~1850) ist sie um etwa 1,2 °C gestiegen. Das Pariser Abkommen will den Anstieg auf 1,5 °C begrenzen.', unit:'°C', link:'https://de.wikipedia.org/wiki/Globale_Erwärmung' },
|
||||
meeresspiegel:{ title:'Meeresspiegel', text:'Steigt durch schmelzendes Eis und die Ausdehnung warmen Wassers. Seit 1900 rund 20 cm. Bis 2100 möglicherweise über 1 m.', unit:'in cm über Startniveau', link:'https://de.wikipedia.org/wiki/Meeresspiegelanstieg' },
|
||||
ueberflutung: { title:'Überflutete Fläche', text:'Prozentanteil der Siedlungen, die unter Wasser stehen, sobald der Meeresspiegel den Schutz (Deiche etc.) überschreitet.', unit:'in %' },
|
||||
windpark: { title:'Windpark', text:'Gruppe von Windkraftanlagen. Rotoren wandeln Wind in elektrische Energie um. Oft an Küsten oder auf See (Offshore).', unit:'Leistung in MW', link:'https://de.wikipedia.org/wiki/Windpark' },
|
||||
solaranlage: { title:'Solaranlage', text:'Wandelt Sonnenlicht in Strom um (Photovoltaik). Dachanlage: 5–10 kW, Solarpark: mehrere MW.', unit:'Leistung in kW/MW', link:'https://de.wikipedia.org/wiki/Photovoltaikanlage' },
|
||||
solaranlage: { title:'Solaranlage', text:'Wandelt Sonnenlicht in Strom um (Photovoltaik). Dachanlage: 5 – 10 kW, Solarpark: mehrere MW.', unit:'Leistung in kW/MW', link:'https://de.wikipedia.org/wiki/Photovoltaikanlage' },
|
||||
deich: { title:'Deich', text:'Künstlicher Damm aus Erde oder Stein, der Siedlungen vor Hochwasser schützt. Wirkt sofort, braucht aber Pflege.', link:'https://de.wikipedia.org/wiki/Deich' },
|
||||
mangrove: { title:'Mangroven', text:'Salzwasser-verträgliche Bäume an tropischen Küsten. Binden CO₂ und schützen vor Erosion — Naturlösung gegen zwei Probleme.', link:'https://de.wikipedia.org/wiki/Mangroven' },
|
||||
co2_filter: { title:'CO₂-Filter (Carbon Capture)', text:'Technologie, die CO₂ aus der Luft filtert. Noch teuer und energieintensiv, wird als Ergänzung erforscht.', link:'https://de.wikipedia.org/wiki/CO2-Abscheidung_und_-Speicherung' },
|
||||
|
||||
@@ -1205,12 +1205,12 @@ const GLOSSAR = {
|
||||
co2: { title:'CO₂ (Kohlendioxid)', text:'Ein farbloses Gas, das beim Verbrennen von Kohle, Öl und Gas entsteht. Es verstärkt den Treibhauseffekt — der wichtigste Treiber des Klimawandels.', unit:'in ppm (parts per million)', link:'https://de.wikipedia.org/wiki/Kohlenstoffdioxid' },
|
||||
ppm: { title:'ppm (parts per million)', text:'Anteilseinheit: 1 ppm bedeutet ein Teilchen pro Million. Bei CO₂ misst man, wie viele CO₂-Moleküle pro Million Luftmoleküle in der Atmosphäre sind. Vorindustriell ~280 ppm, heute ~425 ppm.', unit:'1 ppm = 1 Teilchen / 1.000.000', link:'https://de.wikipedia.org/wiki/Parts_per_million' },
|
||||
megatonne: { title:'Megatonne (Mt)', text:'Eine Million Tonnen. Österreich stößt etwa 70 Mt CO₂ pro Jahr aus.', unit:'1 Mt = 1.000.000 Tonnen' },
|
||||
megawatt: { title:'Megawatt (MW)', text:'Einheit der elektrischen Leistung. 1 MW = 1 Million Watt. Reicht für ca. 1.000 Haushalte, je nach Verbrauch. Ein modernes Windrad liefert 3–5 MW, eine große Solaranlage 1 MW oder mehr.', unit:'1 MW = 1.000.000 Watt', link:'https://de.wikipedia.org/wiki/Watt_(Einheit)' },
|
||||
megawatt: { title:'Megawatt (MW)', text:'Einheit der elektrischen Leistung. 1 MW = 1 Million Watt. Reicht für ca. 1.000 Haushalte, je nach Verbrauch. Ein modernes Windrad liefert 3 – 5 MW, eine große Solaranlage 1 MW oder mehr.', unit:'1 MW = 1.000.000 Watt', link:'https://de.wikipedia.org/wiki/Watt_(Einheit)' },
|
||||
temperatur: { title:'Globale Durchschnittstemperatur', text:'Seit der Industrialisierung (~1850) ist sie um etwa 1,2 °C gestiegen. Das Pariser Abkommen will den Anstieg auf 1,5 °C begrenzen.', unit:'°C', link:'https://de.wikipedia.org/wiki/Globale_Erwärmung' },
|
||||
meeresspiegel:{ title:'Meeresspiegel', text:'Steigt durch schmelzendes Eis und die Ausdehnung warmen Wassers. Seit 1900 rund 20 cm. Bis 2100 möglicherweise über 1 m.', unit:'in cm über Startniveau', link:'https://de.wikipedia.org/wiki/Meeresspiegelanstieg' },
|
||||
ueberflutung: { title:'Überflutete Fläche', text:'Prozentanteil der Siedlungen, die unter Wasser stehen, sobald der Meeresspiegel den Schutz (Deiche etc.) überschreitet.', unit:'in %' },
|
||||
windpark: { title:'Windpark', text:'Gruppe von Windkraftanlagen. Rotoren wandeln Wind in elektrische Energie um. Oft an Küsten oder auf See (Offshore).', unit:'Leistung in MW', link:'https://de.wikipedia.org/wiki/Windpark' },
|
||||
solaranlage: { title:'Solaranlage', text:'Wandelt Sonnenlicht in Strom um (Photovoltaik). Dachanlage: 5–10 kW, Solarpark: mehrere MW.', unit:'Leistung in kW/MW', link:'https://de.wikipedia.org/wiki/Photovoltaikanlage' },
|
||||
solaranlage: { title:'Solaranlage', text:'Wandelt Sonnenlicht in Strom um (Photovoltaik). Dachanlage: 5 – 10 kW, Solarpark: mehrere MW.', unit:'Leistung in kW/MW', link:'https://de.wikipedia.org/wiki/Photovoltaikanlage' },
|
||||
deich: { title:'Deich', text:'Künstlicher Damm aus Erde oder Stein, der Siedlungen vor Hochwasser schützt. Wirkt sofort, braucht aber Pflege.', link:'https://de.wikipedia.org/wiki/Deich' },
|
||||
mangrove: { title:'Mangroven', text:'Salzwasser-verträgliche Bäume an tropischen Küsten. Binden CO₂ und schützen vor Erosion — Naturlösung gegen zwei Probleme.', link:'https://de.wikipedia.org/wiki/Mangroven' },
|
||||
co2_filter: { title:'CO₂-Filter (Carbon Capture)', text:'Technologie, die CO₂ aus der Luft filtert. Noch teuer und energieintensiv, wird als Ergänzung erforscht.', link:'https://de.wikipedia.org/wiki/CO2-Abscheidung_und_-Speicherung' },
|
||||
@@ -1295,7 +1295,7 @@ const INFO_TOPICS = {
|
||||
mangrove_info: {
|
||||
title: '🪸 Mangrovenwald',
|
||||
text: 'Mangroven sind salzwasser-verträgliche Bäume an tropischen Küsten. Sie binden CO₂ UND schützen das Land vor Wellen und Erosion — zwei Klimaschutz-Jobs in einem.\n\nIn Indonesien, Bangladesch und Vietnam retten Mangrovenwälder jedes Jahr Millionen von Menschen vor Sturmfluten.',
|
||||
hint: 'Kippen aber ab etwa 30–70 cm Meeresanstieg um: sie können dann nicht mehr schnell genug mitwachsen und ersticken.',
|
||||
hint: 'Kippen aber ab etwa 30 – 70 cm Meeresanstieg um: sie können dann nicht mehr schnell genug mitwachsen und ersticken.',
|
||||
},
|
||||
sand_fill_info: {
|
||||
title: '🏖 Sand-Aufschüttung',
|
||||
|
||||