Files
geograsim/App/index.html
T
Adminator fecd8bb9c9 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>
2026-08-22 12:38:19 +02:00

918 lines
56 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GeoGraSim — Geografie erleben</title>
<link rel="icon" type="image/png" href="favicon-96x96.png" sizes="96x96"><link rel="icon" type="image/svg+xml" href="favicon.svg">
<link rel="stylesheet" href="assets/fonts/inter.css">
<style>
*, *::before, *::after { margin:0; padding:0; box-sizing:border-box; }
:root {
--bg: #f7f6f3; --bg2: #efeee9; --white: #fff;
--text: #1a1a1a; --text2: #4a4a4a; --text3: #9a9a9a;
--fjord: #4a7c8a; --fjord-l: #dae8ec; --fjord-d: #3a6470;
--moss: #5a8a5e; --moss-l: #dceadd;
--sand: #c4a35a; --sand-l: #f2eacc;
--coral: #c07a6b; --coral-l: #f2ddd8;
--r: 20px; --rs: 12px;
}
html { scroll-behavior: smooth; }
body { font-family: 'Inter', system-ui, sans-serif; background: var(--bg); color: var(--text); overflow-x: hidden; -webkit-font-smoothing: antialiased; line-height: 1.6; }
/* ===== NAV ===== */
.nav { position: fixed; top: 0; left: 0; right: 0; z-index: 100; padding: .7rem 0; transition: all .4s; }
.nav.scrolled { backdrop-filter: blur(20px); background: rgba(247,246,243,0.92); box-shadow: 0 1px 0 rgba(0,0,0,0.04); }
.nav .w { max-width: 1200px; margin: 0 auto; padding: 0 2rem; display: flex; justify-content: space-between; align-items: center; }
.nav-brand { display: flex; align-items: center; text-decoration: none; }
.nav-brand img { height: 38px; }
.nav-links { display: flex; gap: .2rem; align-items: center; }
.nav-links a { color: var(--text2); text-decoration: none; padding: .4rem .8rem; border-radius: 8px; font-size: .82rem; font-weight: 500; transition: all .2s; }
.nav-links a:hover { background: rgba(0,0,0,0.04); }
.btn { display: inline-flex; align-items: center; gap: .4rem; padding: .55rem 1.3rem; border-radius: var(--rs); font-weight: 600; font-size: .82rem; text-decoration: none; border: none; cursor: pointer; transition: all .25s cubic-bezier(.22,1,.36,1); }
.btn-p { background: var(--fjord); color: #fff; box-shadow: 0 2px 10px rgba(74,124,138,.2); }
.btn-p:hover { background: var(--fjord-d); transform: translateY(-2px); box-shadow: 0 6px 20px rgba(74,124,138,.25); }
.btn-o { background: rgba(255,255,255,.85); color: var(--fjord); border: 1.5px solid rgba(74,124,138,.4); }
.btn-o:hover { border-color: var(--fjord); background: var(--fjord-l); }
/* ===== HERO ===== */
.hero { min-height: 85vh; position: relative; overflow: hidden; display: flex; align-items: center; }
.hero canvas { position: absolute; inset: 0; z-index: 0; width: 100%; height: 100%; }
.hero-content { position: relative; z-index: 2; max-width: 1200px; margin: 0 auto; padding: 6rem 2rem 3rem; width: 100%; display: grid; grid-template-columns: 1fr 1fr; gap: 3rem; align-items: center; }
.hero-text h1 { font-size: clamp(2.2rem, 4.5vw, 3.8rem); font-weight: 900; line-height: 1.05; letter-spacing: -.04em; margin-bottom: .8rem; }
.hero-text h1 em { font-style: normal; color: var(--fjord); }
.hero-text .lead { font-size: 1.05rem; color: var(--text2); max-width: 440px; margin-bottom: 1.5rem; }
.hero-btns { display: flex; gap: .6rem; flex-wrap: wrap; }
.hero-visual { display: flex; justify-content: center; perspective: 800px; }
.hero-card { width: 340px; background: var(--white); border-radius: var(--r); box-shadow: 0 20px 60px rgba(0,0,0,.1); overflow: hidden; transform: rotateY(-8deg) rotateX(3deg); transition: transform .5s cubic-bezier(.22,1,.36,1); }
.hero-card:hover { transform: rotateY(0) rotateX(0); }
.hero-card img { width: 100%; aspect-ratio: 1; object-fit: cover; }
.hero-card-body { padding: 1rem; }
.hero-card-body h3 { font-size: .9rem; font-weight: 700; }
.hero-card-body p { font-size: .75rem; color: var(--text3); }
.hero-mini { position: absolute; background: var(--white); border-radius: var(--rs); box-shadow: 0 8px 30px rgba(0,0,0,.08); padding: .6rem .9rem; font-size: .75rem; font-weight: 600; }
.hero-mini-1 { top: 10%; right: -10px; transform: rotate(3deg); animation: bobA 4s ease-in-out infinite; }
.hero-mini-2 { bottom: 28%; left: -20px; transform: rotate(-2deg); animation: bobB 5s ease-in-out infinite; }
@keyframes bobA { 0%,100% { transform: rotate(3deg) translateY(0); } 50% { transform: rotate(3deg) translateY(-8px); } }
@keyframes bobB { 0%,100% { transform: rotate(-2deg) translateY(0); } 50% { transform: rotate(-2deg) translateY(6px); } }
/* ===== SECTION ===== */
.sec { padding: 4rem 0; }
.w { max-width: 1200px; margin: 0 auto; padding: 0 2rem; }
.label { font-size: .68rem; font-weight: 700; text-transform: uppercase; letter-spacing: .1em; color: var(--fjord); }
.sec-title { font-size: 2.2rem; font-weight: 900; letter-spacing: -.03em; margin: .3rem 0; }
.sec-sub { color: var(--text2); max-width: 520px; font-size: .95rem; }
/* ===== SIM CARDS ===== */
.sim-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; margin-top: 2rem; }
.sim-card { background: var(--white); border-radius: 16px; overflow: hidden; position: relative; box-shadow: 0 4px 16px rgba(0,0,0,.06); border: 1.5px solid rgba(0,0,0,.05); transition: all .35s cubic-bezier(.22,1,.36,1); cursor: pointer; padding: .6rem; text-decoration: none; color: inherit; display: block; }
.sim-card:hover { transform: translateY(-5px); box-shadow: 0 12px 35px rgba(74,124,138,.12); border-color: rgba(74,124,138,.2); }
.sim-card-img { height: 210px; overflow: hidden; position: relative; border-radius: 10px; }
.sim-card-img img { width: 100%; height: 100%; object-fit: cover; transition: transform .5s; }
.sim-card:hover .sim-card-img img { transform: scale(1.06); }
.sim-card-body { padding: .8rem .4rem .4rem; }
.sim-card-body h3 { font-size: .88rem; font-weight: 700; margin-bottom: .2rem; display: flex; align-items: center; gap: .4rem; flex-wrap: wrap; }
.sim-card-body p { font-size: .75rem; color: var(--text2); margin-bottom: .5rem; }
.sim-card-tags { display: flex; gap: .3rem; flex-wrap: wrap; }
.sim-tag { font-size: .62rem; font-weight: 600; padding: 2px 8px; border-radius: 6px; }
.st1 { background: var(--fjord-l); color: var(--fjord); }
.st2 { background: var(--moss-l); color: var(--moss); }
.st3 { background: var(--sand-l); color: var(--sand); }
.st4 { background: var(--coral-l); color: var(--coral); }
.st-time { background: #f0eeea; color: var(--text3); }
.badge-new { background: linear-gradient(135deg,#4a7c8a,#6aa8b8); color: #fff; font-size: .58rem; padding: 2px 6px; border-radius: 4px; font-weight: 800; letter-spacing: .04em; }
.badge-free { background: linear-gradient(135deg,#5a8a5e,#7ab88a); color: #fff; font-size: .58rem; padding: 2px 6px; border-radius: 4px; font-weight: 800; letter-spacing: .04em; }
/* Locked sim cards */
.sim-card.locked { opacity: .75; }
.sim-card.locked:hover { transform: translateY(-3px); }
.sim-card.locked .sim-card-img::after { content: ''; position: absolute; inset: 0; background: rgba(0,0,0,.15); border-radius: 10px; }
.lock-overlay { position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%); background: rgba(255,255,255,.95); border-radius: 12px; padding: .6rem 1rem; font-size: .72rem; font-weight: 600; color: var(--fjord); box-shadow: 0 4px 15px rgba(0,0,0,.1); text-align: center; z-index: 2; }
/* Card-Split: zwei CTAs statt Klick auf gesamte Card */
.sim-card-cta { display: flex; gap: .45rem; margin-top: .55rem; flex-wrap: wrap; }
.sim-btn { flex: 1; display: inline-flex; align-items: center; justify-content: center; gap: .3rem; padding: .55rem .7rem; min-height: 40px; border-radius: 10px; font-size: .78rem; font-weight: 700; text-decoration: none; border: 1.5px solid transparent; transition: all .2s cubic-bezier(.22,1,.36,1); min-width: 0; }
.sim-btn-primary { background: var(--fjord); color: #fff; }
.sim-btn-primary:hover { background: var(--fjord-d); transform: translateY(-1px); }
.sim-btn-secondary { background: var(--white); color: var(--fjord); border-color: var(--fjord); }
.sim-btn-secondary:hover { background: var(--fjord-l); }
.sim-btn-disabled { background: var(--bg2); color: var(--text3); border-color: rgba(0,0,0,.06); cursor: default; }
/* Cards sind nicht mehr als Ganze klickbar — nur noch Hover-Optik */
.sim-card.split { cursor: default; display: block; }
.sim-card.split:hover { transform: translateY(-3px); }
/* ===== VALUE PROPOSITION (for teachers) ===== */
.value-sec { background: var(--bg2); position: relative; }
.value-sec::before { content: ''; position: absolute; top: -50px; left: 0; right: 0; height: 100px; background: var(--bg2); transform: skewY(-2deg); z-index: -1; }
.value-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 3rem; margin-top: 2rem; align-items: center; }
.value-text h3 { font-size: 1.5rem; font-weight: 800; margin-bottom: .8rem; letter-spacing: -.02em; }
.value-text p { font-size: .9rem; color: var(--text2); margin-bottom: 1rem; line-height: 1.7; }
.value-list { list-style: none; display: flex; flex-direction: column; gap: .5rem; }
.value-list li { display: flex; align-items: flex-start; gap: .6rem; font-size: .85rem; color: var(--text2); }
.value-list li .vi { font-size: 1.1rem; flex-shrink: 0; margin-top: .05rem; }
/* ===== FEATURES ===== */
.feat-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; margin-top: 2rem; }
.feat { background: var(--white); border-radius: var(--r); padding: 1.4rem; border: 1px solid rgba(0,0,0,.03); transition: all .3s; }
.feat:hover { transform: translateY(-4px); box-shadow: 0 8px 25px rgba(0,0,0,.06); }
.feat-ico { font-size: 1.6rem; margin-bottom: .5rem; }
.feat h3 { font-size: .85rem; font-weight: 700; margin-bottom: .2rem; }
.feat p { font-size: .75rem; color: var(--text2); }
/* ===== SVG SCENE DECORATIONS ===== */
.scene-deco { position: absolute; pointer-events: none; z-index: 1; opacity: .12; }
.scene-deco svg { display: block; }
.deco-mountains { bottom: 0; left: 0; right: 0; }
.deco-float { animation: decoFloat 6s ease-in-out infinite; }
.deco-drift { animation: decoDrift 20s linear infinite; }
.deco-wave { animation: decoWave 3s ease-in-out infinite; }
@keyframes decoFloat { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-8px); } }
@keyframes decoDrift { 0% { transform: translateX(-100px); } 100% { transform: translateX(calc(100vw + 100px)); } }
@keyframes decoWave { 0%,100% { transform: translateY(0) rotate(0deg); } 25% { transform: translateY(-3px) rotate(2deg); } 75% { transform: translateY(2px) rotate(-1deg); } }
/* Section dividers with landscape SVG */
.landscape-divider { position: relative; overflow: hidden; height: 80px; margin: -1px 0; }
.landscape-divider svg { position: absolute; bottom: 0; width: 100%; height: 100%; }
/* ===== HERO-ANIMATION: Boote, Vögel, Fachbegriffe-Drift ===== */
.hero-anim { position: absolute; inset: 0; pointer-events: none; overflow: hidden; z-index: 1; }
.hero-sea { position: absolute; left: 0; right: 0; bottom: 0; height: 38%; background: linear-gradient(180deg, transparent, rgba(74,124,138,0.08) 30%, rgba(74,124,138,0.18) 100%); }
/* Boote — outer Wrapper macht horizontale Drift, inner Element macht Wippen.
Zwei Animationen auf demselben Element würden sich auf transform überschreiben. */
.hero-boat { position: absolute; will-change: transform; opacity: .9; left: -300px; }
.hero-boat-inner { display: inline-block; will-change: transform; }
/* Segelyacht 1 — fern (hinteres Drittel des Meers, klein, leicht entsättigt), segelt nach rechts */
.boat-sail { bottom: 30%; animation: driftRight 75s linear infinite;
opacity: .7; filter: saturate(.85); transform-origin: left center; }
.boat-sail .hero-boat-inner { animation: bobSail 5.5s ease-in-out infinite; transform-origin: left center; }
/* Segelyacht 2 — näher (weiter vorne, größer, mit Startnummer 26 in Orange), segelt nach links */
.boat-sail-2 { bottom: 18%; left: auto; right: -300px; opacity: .95;
animation: driftLeft 55s linear infinite; animation-delay: -22s;
transform-origin: right center; }
.boat-sail-2 .hero-boat-inner { animation: bobSail2 4.2s ease-in-out infinite; transform-origin: right center; }
/* Containerschiff — ganz weit hinten am Horizont, sehr langsamer Transit
(deutlich langsamer als die Segler), kreuzt ≈1× pro 6 Min.
Sehr klein und stark entsättigt (atmosphärische Perspektive). Segelt nach links. */
.boat-container { bottom: 37%; left: auto; right: -400px; opacity: .35;
filter: saturate(.4);
animation: passContainer 360s linear infinite;
transform-origin: right center; }
.boat-container .hero-boat-inner { animation: bobContainer 9s ease-in-out infinite; transform-origin: right center; }
/* Drift-Keyframes + Sail-Bob (Scale + sanftes Wippen kombiniert) */
@keyframes driftRight { 0% { transform: translateX(0); } 100% { transform: translateX(calc(100vw + 500px)); } }
@keyframes driftLeft { 0% { transform: translateX(0); } 100% { transform: translateX(calc(-100vw - 500px)); } }
/* Container-Pass: in ~120s (33%) extra-langsam durchqueren, dann 240s versteckt → ≈1× pro 6 Min */
@keyframes passContainer {
0% { transform: translateX(0); }
33% { transform: translateX(calc(-100vw - 700px)); }
100% { transform: translateX(calc(-100vw - 700px)); }
}
@keyframes bobSail {
0%,100% { transform: scale(.32) translateY(0); }
50% { transform: scale(.32) translateY(-10px); }
}
@keyframes bobSail2 {
0%,100% { transform: scale(.5) translateY(0); }
50% { transform: scale(.5) translateY(-8px); }
}
@keyframes bobContainer {
0%,100% { transform: scale(.28) translateY(0); }
50% { transform: scale(.28) translateY(-2px); }
}
/* Vögel */
.hero-bird { position: absolute; top: 0; left: 0; width: 32px; will-change: transform; opacity: .55; }
/* animation-fill-mode: backwards → Vogel sitzt während des Delays in seinem
0%-Keyframe-Zustand (off-screen), nicht in der Ursprungs-Position top-left. */
.hero-bird-1 { animation: birdFly1 18s linear infinite; animation-delay: 0s; animation-fill-mode: backwards; }
.hero-bird-2 { animation: birdFly2 22s linear infinite; animation-delay: 6s; animation-fill-mode: backwards; transform-origin: 50% 50%; }
.hero-bird-3 { animation: birdFly3 25s linear infinite; animation-delay: 12s; animation-fill-mode: backwards; }
@keyframes birdFly1 { 0% { transform: translate(-60px, 40px) rotate(8deg); } 100% { transform: translate(calc(100vw + 60px), 30px) rotate(-3deg); } }
@keyframes birdFly2 { 0% { transform: translate(calc(100vw + 60px), 80px) rotate(-5deg) scaleX(-1); } 100% { transform: translate(-60px, 70px) rotate(2deg) scaleX(-1); } }
@keyframes birdFly3 { 0% { transform: translate(-60px, 110px) rotate(-2deg); } 100% { transform: translate(calc(100vw + 60px), 130px) rotate(4deg); } }
.hero-bird svg path { animation: wingFlap 0.6s ease-in-out infinite; transform-origin: center; }
@keyframes wingFlap { 0%, 100% { d: path('M0,8 Q6,2 12,8 Q18,2 24,8 Q18,6 12,6 Q6,6 0,8 Z'); } 50% { d: path('M0,8 Q6,12 12,8 Q18,12 24,8 Q18,8 12,8 Q6,8 0,8 Z'); } }
/* Fachbegriffe-Drift */
.hero-words { position: absolute; inset: 0; pointer-events: none; }
.hero-word { position: absolute; font-family: var(--display, 'Fraunces', Georgia, serif); font-weight: 700; font-style: italic; color: var(--fjord); opacity: .07; white-space: nowrap; will-change: transform; font-size: clamp(1.4rem, 3vw, 2.8rem); }
.hero-word.hw-1 { top: 18%; left: -300px; animation: wordDrift 80s linear infinite; }
.hero-word.hw-2 { top: 32%; left: -300px; animation: wordDrift 95s linear infinite; animation-delay: -25s; }
.hero-word.hw-3 { top: 58%; left: -300px; animation: wordDrift 110s linear infinite; animation-delay: -55s; }
.hero-word.hw-4 { top: 72%; left: -300px; animation: wordDrift 70s linear infinite; animation-delay: -10s; }
.hero-word.hw-5 { top: 8%; left: -300px; animation: wordDrift 100s linear infinite; animation-delay: -65s; }
.hero-word.hw-6 { top: 45%; left: -300px; animation: wordDrift 88s linear infinite; animation-delay: -38s; }
@keyframes wordDrift { 0% { transform: translateX(0); } 100% { transform: translateX(calc(100vw + 600px)); } }
@media (max-width: 700px) { .hero-bird, .hero-word { display: none; } }
/* ===== HERO-PILLS (Lehrplan, Glossar) ===== */
.hero-pills { display: flex; gap: .5rem; flex-wrap: wrap; margin-top: 1rem; }
.hero-pill { display: inline-flex; align-items: center; gap: .35rem; padding: .35rem .8rem; background: var(--white); border: 1.5px solid rgba(31,75,55,.18); border-radius: 99px; font-size: .78rem; font-weight: 600; color: var(--fjord); text-decoration: none; transition: all .2s; }
.hero-pill:hover { border-color: var(--fjord); background: var(--fjord-l); transform: translateY(-2px); }
/* Catcher-Pill: Glossar als visuelles Verkaufsargument (orange-akzentuiert) */
.hero-pill.catcher { border-color: #e8833a; color: #e8833a; }
.hero-pill.catcher:hover { border-color: #e8833a; background: #fde8d0; }
/* ===== FACHARTIKEL-SEKTION ===== */
.articles-sec { padding: 4rem 0 3rem; background: var(--bg2); }
.articles-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 2rem; margin-top: 2rem; }
.article-card { background: var(--white); border-radius: var(--r); overflow: hidden; box-shadow: 0 4px 16px rgba(0,0,0,.06); border: 1px solid rgba(0,0,0,.04); transition: all .3s; display: flex; flex-direction: column; }
.article-card:hover { transform: translateY(-4px); box-shadow: 0 12px 32px rgba(0,0,0,.08); border-color: rgba(74,124,138,.2); }
.article-cover { height: 200px; background: var(--fjord-l); position: relative; overflow: hidden; }
.article-cover img { width: 100%; height: 100%; object-fit: cover; display: block; }
.article-cover::after { content: 'FACHARTIKEL'; position: absolute; top: 12px; left: 12px; background: rgba(255,255,255,.92); color: var(--fjord); padding: .15rem .55rem; border-radius: 4px; font-size: .58rem; font-weight: 800; letter-spacing: .06em; z-index: 2; }
.article-body { padding: 1.4rem 1.5rem 1.5rem; flex: 1; display: flex; flex-direction: column; }
.article-body h3 { font-size: 1.05rem; font-weight: 800; margin-bottom: .4rem; line-height: 1.25; }
.article-body p { font-size: .85rem; color: var(--text2); margin-bottom: 1rem; line-height: 1.55; flex: 1; }
.article-meta { font-size: .68rem; color: var(--text3); margin-bottom: .8rem; text-transform: uppercase; letter-spacing: .04em; }
.article-cta { align-self: flex-start; padding: .55rem 1rem; background: var(--fjord); color: var(--white); border-radius: 8px; font-weight: 700; font-size: .8rem; text-decoration: none; transition: all .2s; }
.article-cta:hover { background: #3d6671; transform: translateY(-1px); }
@media (max-width: 700px) { .articles-grid { grid-template-columns: 1fr; } }
/* ===== CTA ===== */
.cta { text-align: center; padding: 5rem 2rem; }
.cta h2 { font-size: 2.5rem; font-weight: 900; letter-spacing: -.03em; }
.cta h2 em { font-style: normal; color: var(--fjord); }
.cta p { color: var(--text2); margin: .5rem 0 1.5rem; max-width: 500px; margin-left: auto; margin-right: auto; }
/* ===== FOOTER ===== */
footer { padding: 1.5rem; text-align: center; color: var(--text3); font-size: .72rem; border-top: 1px solid rgba(0,0,0,.04); }
footer a { color: var(--fjord); text-decoration: none; }
/* ===== USER PILL (logged in state) ===== */
.user-pill { display: flex; align-items: center; gap: .4rem; padding: .3rem .7rem .3rem .4rem; background: var(--fjord-l); border-radius: 99px; font-size: .75rem; font-weight: 600; color: var(--fjord); text-decoration: none; }
.user-pill .emoji { font-size: 1.1rem; }
/* ===== SCROLL REVEAL ===== */
.reveal { opacity: 0; transform: translateY(40px); transition: all .8s cubic-bezier(.22,1,.36,1); }
.reveal.visible { opacity: 1; transform: translateY(0); }
/* ===== RESPONSIVE ===== */
@media (max-width: 900px) {
.hero-content { grid-template-columns: 1fr; text-align: center; }
.hero-text .lead { margin: 0 auto .8rem; }
.hero-btns { justify-content: center; }
.hero-visual { display: none; }
.feat-grid { grid-template-columns: 1fr; }
.sim-grid { grid-template-columns: repeat(2, 1fr) !important; }
.value-grid { grid-template-columns: 1fr; }
.steps { grid-template-columns: repeat(2, 1fr); }
.step::after { display: none; }
.nav-links { gap: 0; }
.nav-links .hide-m { display: none; }
}
@media (max-width: 550px) {
.sim-grid { grid-template-columns: 1fr !important; }
.steps { grid-template-columns: 1fr; }
}
</style>
</head>
<body>
<!-- NAV -->
<nav class="nav" id="nav">
<div class="w">
<a href="#" class="nav-brand"><img src="assets/img/geograsim_t.svg" alt="GeoGraSim"></a>
<div class="nav-links">
<a href="#sims" class="hide-m">Simulationen</a>
<a href="#fuer-lehrkraefte" class="hide-m">Lehrperson</a>
<a href="lehrplan" class="hide-m">Lehrplan</a>
<a href="forschung/" class="hide-m">Forschung</a>
<a href="handbuch.html" class="hide-m">Handbuch</a>
<a href="kontakt.html" class="hide-m">Kontakt</a>
<span id="nav-auth"></span>
</div>
</div>
</nav>
<!-- HERO -->
<section class="hero">
<canvas id="sc"></canvas>
<!-- Hero-Animation: Fachbegriffe driften, Vögel ziehen, Boote segeln -->
<div class="hero-anim" aria-hidden="true">
<div class="hero-words">
<span class="hero-word hw-1">Klimawandel</span>
<span class="hero-word hw-2">Topografie</span>
<span class="hero-word hw-3">Mitentscheidung</span>
<span class="hero-word hw-4">Klimazonen</span>
<span class="hero-word hw-5">Hochwasserschutz</span>
<span class="hero-word hw-6">Pumpspeicher</span>
</div>
<!-- Drei Vögel im V-Flug -->
<div class="hero-bird hero-bird-1">
<svg viewBox="0 0 24 16" width="32" height="22"><path d="M0,8 Q6,2 12,8 Q18,2 24,8 Q18,6 12,6 Q6,6 0,8 Z" fill="#1f4e5a"/></svg>
</div>
<div class="hero-bird hero-bird-2">
<svg viewBox="0 0 24 16" width="26" height="18"><path d="M0,8 Q6,2 12,8 Q18,2 24,8 Q18,6 12,6 Q6,6 0,8 Z" fill="#4a7c8a"/></svg>
</div>
<div class="hero-bird hero-bird-3">
<svg viewBox="0 0 24 16" width="22" height="16"><path d="M0,8 Q6,2 12,8 Q18,2 24,8 Q18,6 12,6 Q6,6 0,8 Z" fill="#1f4e5a"/></svg>
</div>
<div class="hero-sea"></div>
<!-- Containerschiff — weit hinten am Horizont, kreuzt nur 1× pro 2 Min (links) -->
<div class="hero-boat boat-container"><div class="hero-boat-inner">
<img src="assets/img/containerschiff.svg" alt="" width="320" height="60">
</div></div>
<!-- Segelyacht 1 — fährt fern im hinteren Drittel des Meeres, klein/leicht entsättigt -->
<div class="hero-boat boat-sail"><div class="hero-boat-inner">
<img src="assets/img/segelyacht.svg" alt="" width="170" height="125">
</div></div>
<!-- Segelyacht 2 — fährt näher/größer in Gegenrichtung, Startnummer 26 in Orange -->
<div class="hero-boat boat-sail-2"><div class="hero-boat-inner">
<img src="assets/img/segelyacht-race.svg" alt="" width="170" height="125">
</div></div>
</div>
<div class="hero-content">
<div class="hero-text">
<h1>Geografie<br><em>erleben.</em><br>Nicht nur lesen.</h1>
<p class="lead">Interaktive Simulationen für den GW-Unterricht. Klimawandel verstehen. Städte planen. Flüsse managen. Evidenzbasiert und lehrplankonform.</p>
<div class="hero-btns">
<a href="#sims" class="btn btn-p">Jetzt ausprobieren</a>
<a href="#fuer-lehrkraefte" class="btn btn-o">Für Lehrpersonen</a>
</div>
<div class="hero-pills">
<a href="lehrplan" class="hero-pill">📋 Lehrplan-Bezug 1. - 4. Klasse</a>
<a href="glossar" class="hero-pill catcher">📚 Glossar · <span data-glossar-count>140</span> Begriffe — alle bebildert</a>
</div>
</div>
<div class="hero-visual">
<div class="hero-card">
<img src="assets/img/card-climate.webp" alt="Klimasimulation">
<div class="hero-card-body">
<h3>Klimasimulator 3D</h3>
<p>Inselstaat durch die Klimakrise führen. Kostenlos ausprobieren.</p>
</div>
</div>
<div class="hero-mini hero-mini-1">3 Module sofort testen</div>
<div class="hero-mini hero-mini-2">Lernen mit Simulationen</div>
</div>
</div>
</section>
<!-- SVG Landscape Divider: Mountains + Trees -->
<div class="landscape-divider" style="background:var(--bg)">
<svg viewBox="0 0 1440 80" preserveAspectRatio="none">
<!-- Mountains -->
<path d="M0,80 L120,25 L200,55 L320,10 L440,45 L520,20 L640,50 L720,15 L840,40 L960,8 L1080,35 L1160,18 L1280,42 L1360,12 L1440,38 L1440,80 Z" fill="#8a9a82" opacity=".15"/>
<path d="M0,80 L80,45 L180,60 L280,30 L400,55 L500,35 L620,58 L740,28 L860,50 L980,32 L1100,52 L1200,38 L1320,55 L1440,40 L1440,80 Z" fill="#5a8a5e" opacity=".1"/>
<!-- Trees -->
<g fill="#5a8a5e" opacity=".12">
<path d="M100,80 L108,55 L96,58 L104,40 L92,43 L100,28 L108,43 L96,40 L104,58 L92,55 Z"/>
<path d="M300,80 L308,58 L296,61 L304,45 L292,48 L300,35 L308,48 L296,45 L304,61 L292,58 Z"/>
<path d="M500,80 L507,60 L494,63 L502,48 L490,51 L500,38 L510,51 L498,48 L506,63 L494,60 Z"/>
<path d="M750,80 L758,55 L746,58 L754,40 L742,43 L750,28 L758,43 L746,40 L754,58 L742,55 Z"/>
<path d="M1000,80 L1007,62 L995,64 L1003,50 L991,52 L1000,40 L1009,52 L997,50 L1005,64 L993,62 Z"/>
<path d="M1200,80 L1208,56 L1196,59 L1204,42 L1192,45 L1200,30 L1208,45 L1196,42 L1204,59 L1192,56 Z"/>
</g>
</svg>
</div>
<!-- ======================== SIMULATIONEN ======================== -->
<section class="sec" id="sims" style="padding-top:3rem">
<div class="w">
<div class="reveal">
<span class="label">Jetzt ausprobieren</span>
<h2 class="sec-title">Drei Simulationen.<br>Sofort testen.</h2>
<p class="sec-sub">Einfach starten und Geografie erleben — oder erst mehr über Lehrplan-Bezug und Lernziele lesen.</p>
</div>
<div class="sim-grid reveal">
<!-- FREE: Klimasimulator 3D -->
<div class="sim-card split">
<div class="sim-card-img"><img src="assets/img/card-climate.webp" alt="Klimasimulator 3D"></div>
<div class="sim-card-body">
<h3>Klimasimulator 3D <span class="badge-free">TESTEN</span></h3>
<p>Führe einen Inselstaat durch 75 Jahre Klimakrise. Steigende Meeresspiegel, Extremwetter, politische Entscheidungen.</p>
<div class="sim-card-tags"><span class="sim-tag st1">1. Klasse</span><span class="sim-tag st-time">20 min</span></div>
<div class="sim-card-cta">
<a href="modul-klima" class="sim-btn sim-btn-secondary">📖 Mehr erfahren</a>
<a href="klima-3d" class="sim-btn sim-btn-primary">▶ Simulation starten</a>
</div>
</div>
</div>
<!-- FREE: Sonnensystem -->
<div class="sim-card split">
<div class="sim-card-img"><img src="assets/img/card-sonnensystem.webp" alt="Sonnensystem"></div>
<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-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>
</div>
</div>
</div>
<!-- FREE: Heli-Navigation -->
<div class="sim-card split">
<div class="sim-card-img"><img src="assets/img/card-heli.webp" alt="Heli-Navigation"></div>
<div class="sim-card-body">
<h3>Heli-Navigation <span class="badge-free">TESTEN</span></h3>
<p>Rettungsflüge in den Alpen: Koordinaten lesen, Höhenstufen interpretieren, Einsatzplanung unter Zeitdruck.</p>
<div class="sim-card-tags"><span class="sim-tag st2">2. Klasse</span><span class="sim-tag st-time">40 min</span></div>
<div class="sim-card-cta">
<a href="modul-heli" class="sim-btn sim-btn-secondary">📖 Mehr erfahren</a>
<a href="heli-game" class="sim-btn sim-btn-primary">▶ Simulation starten</a>
</div>
</div>
</div>
</div>
</div>
</section>
<!-- ======================== WEITERE MODULE ======================== -->
<section class="sec" style="padding-top:1rem">
<div class="w">
<div class="reveal">
<span class="label">Im Unterricht</span>
<h2 class="sec-title">Weitere Module —<br>mit Begleitung der Lehrperson.</h2>
<p class="sec-sub">Diese Simulationen entfalten ihren vollen Wert im begleiteten Unterricht: mit Lernzielen, Assessment und Ergebnissicherung.</p>
</div>
<div class="sim-grid reveal">
<div class="sim-card locked split">
<div class="sim-card-img"><img src="assets/img/card-climate.webp" alt="Klimasimulator 2D"></div>
<div class="sim-card-body">
<h3>Klimasimulator 2D</h3>
<p>Dieselbe Klimasimulation in 2D-Ansicht. Ideal für ältere Geräte und barrierefreien Unterricht.</p>
<div class="sim-card-tags"><span class="sim-tag st1">1. Klasse</span><span class="sim-tag st-time">20 min</span></div>
<div class="sim-card-cta">
<a href="modul-klima" class="sim-btn sim-btn-secondary">📖 Mehr erfahren</a>
<a href="login.html" class="sim-btn sim-btn-disabled">🔒 Anmelden</a>
</div>
</div>
</div>
<div class="sim-card locked split">
<div class="sim-card-img"><img src="assets/img/card-fluss.webp" alt="Flussmanagement"></div>
<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-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>
</div>
</div>
</div>
<div class="sim-card locked split">
<div class="sim-card-img"><img src="assets/img/card-eu-werkstatt.webp" alt="EU-Werkstatt"></div>
<div class="sim-card-body">
<h3>EU-Werkstatt</h3>
<p>Wie ein EU-Gesetz entsteht — zehn echte Fälle von der Bürgerinitiative bis zum Mitentscheidungsverfahren.</p>
<div class="sim-card-tags"><span class="sim-tag st3">3.4. Klasse</span><span class="sim-tag st-time">20 min</span></div>
<div class="sim-card-cta">
<a href="modul-eu-werkstatt" class="sim-btn sim-btn-secondary">📖 Mehr erfahren</a>
<a href="login.html" class="sim-btn sim-btn-disabled">🔒 Anmelden</a>
</div>
</div>
</div>
<div class="sim-card locked split">
<div class="sim-card-img"><img src="assets/img/card-farmer.webp" alt="Landwirtschaft"></div>
<div class="sim-card-body">
<h3>Landwirtschaft</h3>
<p>Bau auf der Welt-Karte Pflanzen an und halte Tiere. Lerne durch wiederholte Versuche, welche Region welcher Pflanze gerecht wird.</p>
<div class="sim-card-tags"><span class="sim-tag st2">2.3. Klasse</span><span class="sim-tag st-time">25 min</span></div>
<div class="sim-card-cta">
<a href="modul-farmer" class="sim-btn sim-btn-secondary">📖 Mehr erfahren</a>
<a href="login.html" class="sim-btn sim-btn-disabled">🔒 Anmelden</a>
</div>
</div>
</div>
<div class="sim-card locked split">
<div class="sim-card-img"><img src="assets/img/card-busfahrt.webp" alt="Busfahrt"></div>
<div class="sim-card-body">
<h3>Busfahrt</h3>
<p>Topografie Europa: Aufträge kommen rein („Fahre nach Paris"), tippe die richtige Stadt auf der Karte. Drei Versuche pro Auftrag.</p>
<div class="sim-card-tags"><span class="sim-tag st1">1.2. Klasse</span><span class="sim-tag st-time">15 min</span></div>
<div class="sim-card-cta">
<a href="modul-busfahrt" class="sim-btn sim-btn-secondary">📖 Mehr erfahren</a>
<a href="login.html" class="sim-btn sim-btn-disabled">🔒 Anmelden</a>
</div>
</div>
</div>
<div class="sim-card locked split">
<div class="sim-card-img"><img src="assets/img/card-energiemanager.webp" alt="Energiemanager"></div>
<div class="sim-card-body">
<h3>Energiemanager</h3>
<p>Strom durch den Tag balancieren: Pumpspeicher hoch- und runterfahren, je nach Wetter und Verbrauch. 18 Tagesszenarien.</p>
<div class="sim-card-tags"><span class="sim-tag st2">2.3. Klasse</span><span class="sim-tag st-time">20 min</span></div>
<div class="sim-card-cta">
<a href="modul-energiemanager" class="sim-btn sim-btn-secondary">📖 Mehr erfahren</a>
<a href="login.html" class="sim-btn sim-btn-disabled">🔒 Anmelden</a>
</div>
</div>
</div>
<div class="sim-card locked split">
<div class="sim-card-img"><img src="assets/img/card-logistik.webp" alt="Logistik Europa"></div>
<div class="sim-card-body">
<h3>Logistik Europa</h3>
<p>Plane Transportaufträge quer durch Europa. Wähle Fahrzeuge, beachte Fristen, vermeide Leerfahrten.</p>
<div class="sim-card-tags"><span class="sim-tag st3">3.4. Klasse</span><span class="sim-tag st-time">30 min</span></div>
<div class="sim-card-cta">
<a href="modul-logistik" class="sim-btn sim-btn-secondary">📖 Mehr erfahren</a>
<a href="login.html" class="sim-btn sim-btn-disabled">🔒 Anmelden</a>
</div>
</div>
</div>
</div>
<p style="text-align:center;margin-top:1.5rem;font-size:.85rem;color:var(--text2)" class="reveal">
Alle Module sind im begleiteten Unterricht verfügbar. <a href="login.html" style="color:var(--fjord);font-weight:600;text-decoration:none">Jetzt anmelden</a> oder <a href="handbuch.html" style="color:var(--fjord);font-weight:600;text-decoration:none">Handbuch lesen</a>.
</p>
</div>
</section>
<!-- ======================== IN KÜRZE ======================== -->
<section class="sec" style="padding-top:1rem">
<div class="w">
<div class="reveal">
<span class="label">In Vorbereitung</span>
<h2 class="sec-title">In Kürze.</h2>
<p class="sec-sub">Diese Module sind in Entwicklung. Sobald sie fertig sind, kommen sie hier hoch.</p>
</div>
<div class="sim-grid reveal">
<div class="sim-card locked split" style="opacity:.65">
<div class="sim-card-img"><img src="assets/img/card-city.webp" alt="Stadt &amp; Raumplanung"></div>
<div class="sim-card-body">
<h3>Stadt &amp; Raumplanung <span style="font-size:.7rem;background:#fde8d0;color:#a37800;padding:.1rem .5rem;border-radius:5px">🚧 In Kürze</span></h3>
<p>Plane eine Stadt mit Wohngebieten, Gewerbe, Infrastruktur. Nutzungskonflikte und Standortentscheidungen erleben.</p>
<div class="sim-card-tags"><span class="sim-tag st3">3. Klasse</span></div>
</div>
</div>
<div class="sim-card locked split" style="opacity:.65">
<div class="sim-card-img"><img src="assets/img/card-tectonic.webp" alt="Erdbeben"></div>
<div class="sim-card-body">
<h3>Erdbeben &amp; Plattentektonik <span style="font-size:.7rem;background:#fde8d0;color:#a37800;padding:.1rem .5rem;border-radius:5px">🚧 In Kürze</span></h3>
<p>50 Jahre Stadtplanung in einer Erdbebenzone. Bauqualität und Vorsorge entscheiden über Überleben.</p>
<div class="sim-card-tags"><span class="sim-tag st1">1. Klasse</span></div>
</div>
</div>
<div class="sim-card locked split" style="opacity:.65">
<div class="sim-card-img"><img src="assets/img/card-globe.webp" alt="Regenwald"></div>
<div class="sim-card-body">
<h3>Regenwald-Expedition <span style="font-size:.7rem;background:#fde8d0;color:#a37800;padding:.1rem .5rem;border-radius:5px">🚧 In Kürze</span></h3>
<p>Fahre mit dem Boot den Fluss hoch. Entdecke Tiere, Pflanzen und Menschen vom Delta bis zum Nebelwald.</p>
<div class="sim-card-tags"><span class="sim-tag st1">1. Klasse</span></div>
</div>
</div>
<div class="sim-card locked split" style="opacity:.65">
<div class="sim-card-img"><img src="assets/img/card-energy.webp" alt="Energiemix"></div>
<div class="sim-card-body">
<h3>Energiemix <span style="font-size:.7rem;background:#fde8d0;color:#a37800;padding:.1rem .5rem;border-radius:5px">🚧 In Kürze</span></h3>
<p>Stelle den Energiemix eines Landes zusammen. Sonne, Wind, Wasser, Gas, Kohle — wann kommt der Blackout?</p>
<div class="sim-card-tags"><span class="sim-tag st2">2. Klasse</span></div>
</div>
</div>
<div class="sim-card locked split" style="opacity:.65">
<div class="sim-card-img"><img src="assets/img/card-globe.webp" alt="Lieferketten"></div>
<div class="sim-card-body">
<h3>Lieferketten <span style="font-size:.7rem;background:#fde8d0;color:#a37800;padding:.1rem .5rem;border-radius:5px">🚧 In Kürze</span></h3>
<p>Folge Rohstoffen und Waren um die Welt. Sieh Arbeitsbedingungen, CO₂-Fußabdruck und Fairness.</p>
<div class="sim-card-tags"><span class="sim-tag st2">2. Klasse</span></div>
</div>
</div>
</div>
</div>
</section>
<!-- ======================== FACHARTIKEL ======================== -->
<section class="sec articles-sec">
<div class="w">
<div class="reveal">
<span class="label">Forschung &amp; Didaktik</span>
<h2 class="sec-title">Wissenschaftlich<br>fundiert.</h2>
<p class="sec-sub">Zwei Fachartikel als Hintergrund: Wirkung von Simulationen im Geografieunterricht und der aktuelle Stand der Geografie-Didaktik in der Sekundarstufe I.</p>
</div>
<div class="articles-grid reveal">
<article class="article-card">
<div class="article-cover"><img src="assets/img/articles/lernen-durch-simulation.png" alt="Lernen durch Simulation"></div>
<div class="article-body">
<div class="article-meta">Fachartikel · Sekundarstufe I</div>
<h3>Lernen durch Simulation</h3>
<p>Wie wirken interaktive Simulationen im Unterricht — kognitiv, motivational, didaktisch? Forschungsstand, Mechanismen und Gestaltungs­prinzipien für GW-Lehrkräfte.</p>
<a href="forschung/lernen-durch-simulation.html" class="article-cta" target="_blank" rel="noopener">Artikel öffnen →</a>
</div>
</article>
<article class="article-card">
<div class="article-cover"><img src="assets/img/articles/geografie-didaktik.png" alt="Geografie unterrichten"></div>
<div class="article-body">
<div class="article-meta">Fachartikel · GW-Lehrplan 2023</div>
<h3>Geografie unterrichten in der Sekundarstufe I</h3>
<p>Aktuelle Geografie-Didaktik nach österreichischem Lehrplan: Kompetenzen, Schüler­vorstellungen, Inklusion, Differenzierung und Sprach­sensibilität.</p>
<a href="forschung/geografie-didaktik.html" class="article-cta" target="_blank" rel="noopener">Artikel öffnen →</a>
</div>
</article>
</div>
</div>
</section>
<!-- SVG Divider: City Skyline + Water -->
<div class="landscape-divider" style="height:100px;background:var(--bg)">
<svg viewBox="0 0 1440 100" preserveAspectRatio="none">
<!-- City skyline -->
<g fill="#1f4e5a" opacity=".08">
<rect x="80" y="40" width="25" height="60"/>
<rect x="110" y="55" width="20" height="45"/>
<rect x="135" y="30" width="15" height="70" rx="1"/>
<rect x="155" y="50" width="22" height="50"/>
<rect x="400" y="45" width="18" height="55"/>
<rect x="422" y="35" width="12" height="65" rx="1"/>
<rect x="438" y="55" width="25" height="45"/>
<rect x="468" y="42" width="14" height="58"/>
<rect x="800" y="38" width="20" height="62"/>
<rect x="825" y="50" width="16" height="50"/>
<rect x="845" y="28" width="12" height="72" rx="1"/>
<rect x="862" y="48" width="22" height="52"/>
<rect x="1100" y="52" width="18" height="48"/>
<rect x="1122" y="40" width="14" height="60"/>
<rect x="1140" y="55" width="24" height="45"/>
<!-- Windows (tiny dots) -->
<rect x="84" y="48" width="3" height="3" fill="#e8833a" opacity=".5"/>
<rect x="92" y="48" width="3" height="3" fill="#e8833a" opacity=".3"/>
<rect x="84" y="56" width="3" height="3" fill="#e8833a" opacity=".4"/>
<rect x="92" y="56" width="3" height="3" fill="#e8833a" opacity=".6"/>
<rect x="84" y="64" width="3" height="3" fill="#e8833a" opacity=".3"/>
<rect x="406" y="52" width="2" height="2" fill="#e8833a" opacity=".5"/>
<rect x="412" y="52" width="2" height="2" fill="#e8833a" opacity=".3"/>
<rect x="406" y="58" width="2" height="2" fill="#e8833a" opacity=".4"/>
<rect x="806" y="46" width="3" height="3" fill="#e8833a" opacity=".5"/>
<rect x="813" y="46" width="3" height="3" fill="#e8833a" opacity=".3"/>
<rect x="806" y="54" width="3" height="3" fill="#e8833a" opacity=".4"/>
</g>
<!-- Water waves -->
<path d="M0,88 Q60,82 120,88 Q180,94 240,88 Q300,82 360,88 Q420,94 480,88 Q540,82 600,88 Q660,94 720,88 Q780,82 840,88 Q900,94 960,88 Q1020,82 1080,88 Q1140,94 1200,88 Q1260,82 1320,88 Q1380,94 1440,88 L1440,100 L0,100 Z" fill="#4a7c8a" opacity=".06">
<animate attributeName="d" dur="4s" repeatCount="indefinite"
values="M0,88 Q60,82 120,88 Q180,94 240,88 Q300,82 360,88 Q420,94 480,88 Q540,82 600,88 Q660,94 720,88 Q780,82 840,88 Q900,94 960,88 Q1020,82 1080,88 Q1140,94 1200,88 Q1260,82 1320,88 Q1380,94 1440,88 L1440,100 L0,100 Z;
M0,90 Q60,84 120,90 Q180,96 240,90 Q300,84 360,90 Q420,96 480,90 Q540,84 600,90 Q660,96 720,90 Q780,84 840,90 Q900,96 960,90 Q1020,84 1080,90 Q1140,96 1200,90 Q1260,84 1320,90 Q1380,96 1440,90 L1440,100 L0,100 Z;
M0,88 Q60,82 120,88 Q180,94 240,88 Q300,82 360,88 Q420,94 480,88 Q540,82 600,88 Q660,94 720,88 Q780,82 840,88 Q900,94 960,88 Q1020,82 1080,88 Q1140,94 1200,88 Q1260,82 1320,88 Q1380,94 1440,88 L1440,100 L0,100 Z"/>
</path>
</svg>
</div>
<!-- ======================== WERT-VERSPRECHEN (Lehrkraefte) ======================== -->
<section class="sec value-sec" id="fuer-lehrkraefte">
<div class="w">
<div class="reveal">
<span class="label">Für Lehrpersonen</span>
<h2 class="sec-title">Simulationen wirken im Unterricht.<br>Nicht als Einzelerlebnis.</h2>
</div>
<div class="value-grid reveal">
<div class="value-text">
<p>
Jede Simulation ist für eine 45-Minuten-Einheit konzipiert: mit Hinleitung, Vorhersage, Durchführung, Auswertung und Reflexion. Das didaktische Modell basiert auf <strong>PredictObserveExplain</strong> — Schüler*innen formulieren zuerst eine Hypothese, beobachten dann die Simulation und erklären abschließend die Abweichung.
</p>
<p>
Der eigentliche Wert liegt nicht in der Software allein, sondern in der <strong>Einbettung im Unterricht</strong>: Lehrpersonen steuern, welche Module wann freigeschaltet sind, begleiten den Lernprozess und sichern Ergebnisse.
</p>
<ul class="value-list">
<li><span class="vi">📊</span> <span><strong>Dashboard:</strong> Echtzeit-Überblick über Fortschritt, Ergebnisse und Fehlkonzepte aller Schüler*innen</span></li>
<li><span class="vi">🔒</span> <span><strong>Modulsteuerung:</strong> Module einzeln freischalten, sperren oder auf Knopfdruck starten</span></li>
<li><span class="vi">👩‍🎓</span> <span><strong>Anonyme Zugänge:</strong> Automatisch generierte Benutzernamen — DSGVO-konform, kein Aufwand mit Schüler*innendaten</span></li>
<li><span class="vi">🎫</span> <span><strong>Einladungstickets:</strong> PDF mit Zugangsdaten zum Ausdrucken und Verteilen</span></li>
<li><span class="vi">📖</span> <span><strong>Didaktisches Handbuch:</strong> Zu jedem Modul ein fertiger Unterrichtsentwurf für 45 Minuten</span></li>
<li><span class="vi">🎯</span> <span><strong>Lehrplan 2023:</strong> Alle Module auf den österreichischen GW-Lehrplan gemapped</span></li>
</ul>
</div>
<div style="display:flex;flex-direction:column;gap:1rem">
<div class="feat"><div class="feat-ico">1.</div><h3>Registrieren</h3><p>E-Mail-Adresse als Benutzername. Kostenlos starten.</p></div>
<div class="feat"><div class="feat-ico">2.</div><h3>Klasse anlegen</h3><p>Schüler*innen-Zugänge automatisch generieren oder Daten einzeln eingeben.</p></div>
<div class="feat"><div class="feat-ico">3.</div><h3>Modul freischalten</h3><p>Bestimmen Sie, welche Simulation wann gespielt wird.</p></div>
<div class="feat"><div class="feat-ico">4.</div><h3>Ergebnisse sichern</h3><p>Alle Entscheidungen, Vorhersagen und Reflexionen werden gespeichert.</p></div>
</div>
</div>
<div style="text-align:center;margin-top:2.5rem" class="reveal">
<a href="login.html" class="btn btn-p" style="padding:.7rem 2rem;font-size:.9rem">Jetzt als Lehrperson registrieren</a>
<a href="handbuch.html" class="btn btn-o" style="margin-left:.6rem">Handbuch lesen</a>
</div>
</div>
</section>
<!-- ======================== FEATURES ======================== -->
<section class="sec" id="features">
<div class="w">
<div class="reveal">
<span class="label">Features</span>
<h2 class="sec-title">Für Schüler*innen und Lehrpersonen.</h2>
</div>
<div class="feat-grid reveal">
<div class="feat"><div class="feat-ico">📊</div><h3>Dashboard</h3><p>Echtzeit-Überblick, Ergebnisvergleich, Fehlkonzept-Erkennung.</p></div>
<div class="feat"><div class="feat-ico"></div><h3>Inklusion</h3><p>Vereinfachte Sprache, flexible Zeiten, barrierefreie Bedienung.</p></div>
<div class="feat"><div class="feat-ico">🎯</div><h3>Lehrplan 2023</h3><p>Alle Kompetenzziele und Basiskonzepte referenziert. DACH-kompatibel.</p></div>
<div class="feat"><div class="feat-ico">⚙️</div><h3>Steuerbar</h3><p>Module freischalten, Schwierigkeit und Zeitlimits anpassen.</p></div>
<div class="feat"><div class="feat-ico">📈</div><h3>Assessment</h3><p>PredictObserveExplain eingebaut. Prozess- und Ergebnisdaten.</p></div>
<div class="feat"><div class="feat-ico">🔐</div><h3>DSGVO-konform</h3><p>Anonyme Pseudonyme, keine personenbezogenen Daten nötig. Hosting in Europa.</p></div>
</div>
</div>
</section>
<!-- SVG Divider: Mountain + Forest panorama -->
<div class="landscape-divider" style="height:90px;background:var(--bg)">
<svg viewBox="0 0 1440 90" preserveAspectRatio="none">
<!-- Far mountains -->
<path d="M0,90 L0,60 Q100,35 200,55 Q280,25 380,50 Q460,18 560,45 Q640,12 720,40 Q800,20 900,48 Q980,15 1060,42 Q1140,22 1240,50 Q1320,30 1440,55 L1440,90 Z" fill="#1f4e5a" opacity=".06"/>
<!-- Near hills -->
<path d="M0,90 L0,70 Q120,55 240,68 Q360,50 480,65 Q600,48 720,62 Q840,52 960,66 Q1080,50 1200,64 Q1320,55 1440,68 L1440,90 Z" fill="#5a8a5e" opacity=".08"/>
<!-- Trees on hills -->
<g fill="#5a8a5e" opacity=".1">
<path d="M200,68 L206,52 L194,55 L200,42 L206,55 L194,52 Z"/>
<path d="M215,70 L220,58 L210,60 L215,50 L220,60 L210,58 Z"/>
<path d="M550,65 L556,50 L544,53 L550,40 L556,53 L544,50 Z"/>
<path d="M565,67 L570,56 L560,58 L565,48 L570,58 L560,56 Z"/>
<path d="M900,66 L906,51 L894,54 L900,41 L906,54 L894,51 Z"/>
<path d="M920,68 L925,57 L915,59 L920,49 L925,59 L915,57 Z"/>
<path d="M1250,64 L1256,50 L1244,53 L1250,40 L1256,53 L1244,50 Z"/>
</g>
<!-- Subtle cloud -->
<ellipse cx="350" cy="25" rx="50" ry="10" fill="#fff" opacity=".15">
<animate attributeName="cx" values="350;380;350" dur="12s" repeatCount="indefinite"/>
</ellipse>
<ellipse cx="1000" cy="20" rx="40" ry="8" fill="#fff" opacity=".1">
<animate attributeName="cx" values="1000;1030;1000" dur="15s" repeatCount="indefinite"/>
</ellipse>
</svg>
</div>
<!-- ======================== CTA ======================== -->
<section class="cta reveal" style="position:relative;overflow:hidden">
<!-- Decorative mini landscape behind CTA -->
<svg style="position:absolute;bottom:0;left:0;right:0;height:60px;opacity:.05" viewBox="0 0 1440 60" preserveAspectRatio="none">
<path d="M0,60 L0,40 Q200,20 400,35 Q600,10 800,30 Q1000,15 1200,32 Q1350,20 1440,35 L1440,60 Z" fill="#4a7c8a"/>
<path d="M0,60 L0,48 Q300,35 600,45 Q900,30 1200,42 L1440,38 L1440,60 Z" fill="#5a8a5e"/>
</svg>
<h2 style="position:relative">Bereit, Geografie<br>zu <em>erleben</em>?</h2>
<p style="position:relative">Drei Module sofort testen. Alle Module mit Lehrpersonen-Konto.</p>
<div style="display:flex;gap:.6rem;justify-content:center;flex-wrap:wrap;position:relative">
<a href="#sims" class="btn btn-p" style="padding:.7rem 2rem;font-size:.9rem">Module ausprobieren</a>
<a href="login.html" class="btn btn-o">Anmelden / Registrieren</a>
</div>
</section>
<footer>
<div style="margin-bottom:.5rem"><img src="assets/img/bildLogo.png" alt="GeoGraSim" style="height:40px;opacity:.5"></div>
<p>GeoGraSim — Schroffenegger & Mößlang, 2026 · <a href="handbuch.html">Handbuch</a> · <a href="lehrplan">Lehrplan</a> · <a href="glossar">Glossar</a> · <a href="kontakt.html">Kontakt</a> · <a href="impressum.html">Impressum</a> · <a href="datenschutz.html">Datenschutz</a> · <a href="barrierefreiheit.html">Barrierefreiheit</a></p>
<p style="font-size:.62rem;margin-top:.3rem">
<a href="forschung/">Forschung-Übersicht</a> ·
<a href="forschung/geografie-didaktik.html">Aktueller Forschungsstand GW-Didaktik</a> ·
<a href="forschung/quellen-geografie.html">Literatur GW-Didaktik</a> ·
<a href="forschung/lernen-durch-simulation.html">Simulationen im Unterricht</a> ·
<a href="forschung/quellen-simulation.html">Literatur Simulation</a>
</p>
</footer>
<script>
var BASE = (window.__GGS__?.baseUrl) || '';
if (!BASE) { var p = location.pathname, i = p.indexOf('/geograsim'); if (i !== -1) { var rest = p.substring(i + '/geograsim'.length); BASE = rest.indexOf('/App/') === 0 ? p.substring(0, i) + '/geograsim/App' : p.substring(0, i) + '/geograsim'; } }
// === GLOSSAR-ZAEHLER (dynamisch aus DB) ===
(async function() {
try {
var r = await fetch(BASE + '/api/glossar?count=1', { credentials: 'same-origin' });
if (!r.ok) return;
var d = await r.json();
if (d && d.count) {
document.querySelectorAll('[data-glossar-count]').forEach(function(el){ el.textContent = d.count; });
}
} catch (e) { /* Fallback: gerendeter Statik-Wert bleibt sichtbar */ }
})();
// === AUTH STATE ===
(async function() {
try {
var r = await fetch(BASE + '/api/auth', {
method: 'POST', headers: {'Content-Type':'application/json'}, credentials: 'same-origin',
body: JSON.stringify({action: 'status'})
});
var d = await r.json();
var el = document.getElementById('nav-auth');
if (d.role === 'teacher') {
el.innerHTML = '<a href="teacher.html" class="user-pill"><span class="emoji">👩‍🏫</span>' + (d.user?.display_name || 'Lehrperson') + '</a>';
// Sim-Cards für eingeloggte Lehrer:innen freischalten — Ziel ist das
// Schüler:innen-Cockpit, von dort wird die jeweilige Sim per Wrapper geöffnet.
document.querySelectorAll('.sim-card.locked').forEach(function(c) {
if (c.getAttribute('href') === 'login.html') c.href = 'schueler.html';
c.classList.remove('locked');
var ov = c.querySelector('.lock-overlay');
if (ov) ov.remove();
});
} else if (d.role === 'student') {
el.innerHTML = '<a href="profil.html" class="user-pill"><span class="emoji">🧑‍🎓</span>' + (d.session?.display_name || 'Schueler') + '</a>';
document.querySelectorAll('.sim-card.locked').forEach(function(c) {
if (c.getAttribute('href') === 'login.html') c.href = 'schueler.html';
c.classList.remove('locked');
var ov = c.querySelector('.lock-overlay');
if (ov) ov.remove();
});
} else {
el.innerHTML = '<a href="login.html" class="btn btn-p" style="margin-left:.3rem">Anmelden</a>';
}
} catch(e) {
document.getElementById('nav-auth').innerHTML = '<a href="login.html" class="btn btn-p" style="margin-left:.3rem">Anmelden</a>';
}
})();
// === NAV SCROLL ===
var nav = document.getElementById('nav');
window.addEventListener('scroll', function() { nav.classList.toggle('scrolled', scrollY > 50); });
// === SCROLL REVEAL ===
var obs = new IntersectionObserver(function(entries) {
entries.forEach(function(e) { if (e.isIntersecting) { e.target.classList.add('visible'); obs.unobserve(e.target); } });
}, { threshold: 0.15 });
document.querySelectorAll('.reveal').forEach(function(el) { obs.observe(el); });
// === SCENIC CANVAS ===
var C = document.getElementById('sc'), X = C.getContext('2d');
var W, H, t = 0;
function resize() {
var dpr = devicePixelRatio || 1;
W = C.parentElement.offsetWidth; H = C.parentElement.offsetHeight;
C.width = W * dpr; C.height = H * dpr; X.scale(dpr, dpr);
}
resize(); addEventListener('resize', resize);
var cls = [];
for (var i = 0; i < 7; i++) cls.push({ x: Math.random()*1500, y: H*(.04+Math.random()*.18), w: 40+Math.random()*100, sp: .06+Math.random()*.14, op: .2+Math.random()*.4 });
function frame() {
t += .016; X.clearRect(0,0,W,H);
var wl = H * .56;
// Sky
var sk = X.createLinearGradient(0,0,0,wl);
sk.addColorStop(0,'#e8ebe4'); sk.addColorStop(.5,'#dde3d8'); sk.addColorStop(1,'#ced8ca');
X.fillStyle = sk; X.fillRect(0,0,W,wl);
// Sun glow
var sg = X.createRadialGradient(W*.78,H*.1,0,W*.78,H*.1,H*.3);
sg.addColorStop(0,'rgba(255,235,200,.3)'); sg.addColorStop(1,'rgba(255,235,200,0)');
X.fillStyle = sg; X.fillRect(0,0,W,wl);
// Mountains
[{c:'#c0caba',p:6,r:.05,h:.3},{c:'#a8b5a0',p:9,r:.08,h:.4},{c:'#8a9a82',p:12,r:.11,h:.5}].forEach(function(m) {
X.beginPath(); X.moveTo(0,wl);
var sw = W/m.p;
for(var j=0;j<=m.p;j++){
var px=j*sw, py=wl-wl*m.h*(.4+Math.sin(j*1.7+.3)*.3+Math.cos(j*.9)*m.r);
j===0?X.lineTo(px,py):X.quadraticCurveTo(px-sw*.4,py-wl*m.r*.2,px,py);
}
X.lineTo(W,wl); X.closePath(); X.fillStyle=m.c; X.fill();
});
// Water
var wg = X.createLinearGradient(0,wl,0,H);
wg.addColorStop(0,'#9ab5a8'); wg.addColorStop(.4,'#7a9a8a'); wg.addColorStop(1,'#5a7a6a');
X.fillStyle = wg; X.fillRect(0,wl,W,H-wl);
// Water shimmer
X.globalAlpha = .08;
for(var j=0;j<15;j++){
var wy = wl+10+j*(H-wl)/15;
X.beginPath(); X.moveTo(0,wy);
for(var k=0;k<W;k+=30) X.lineTo(k,wy+Math.sin(k*.01+t*1.5+j)*.8);
X.strokeStyle='#fff'; X.lineWidth=.5; X.stroke();
}
X.globalAlpha = 1;
// Clouds
cls.forEach(function(c) {
c.x += c.sp; if(c.x>W+c.w*2){c.x=-c.w*2; c.y=H*(.04+Math.random()*.18);}
X.globalAlpha=c.op; X.fillStyle='#fff';
X.beginPath(); X.ellipse(c.x,c.y,c.w*.5,c.w*.18,0,0,Math.PI*2); X.fill();
X.beginPath(); X.ellipse(c.x+c.w*.2,c.y-c.w*.06,c.w*.35,c.w*.15,0,0,Math.PI*2); X.fill();
X.globalAlpha=1;
});
requestAnimationFrame(frame);
}
frame();
</script>
<script src="assets/js/version-tag.js" defer></script>
</body>
</html>