Files
geograsim/App/forschung/presentation-geografie/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

1509 lines
62 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
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 unterrichten · Präsentation</title>
<link rel="icon" type="image/png" href="../../favicon-96x96.png" sizes="96x96"/>
<link rel="icon" type="image/svg+xml" href="../../favicon.svg"/>
<script src="../API Key.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js@5.1.0/dist/reset.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/reveal.js@5.1.0/dist/reveal.css"/>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.10/dist/katex.min.css"/>
<link rel="stylesheet" href="fonts/fonts.css"/>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.10/dist/katex.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.10/dist/contrib/auto-render.min.js"></script>
<style>
:root {
--brand: #163374;
--bar-h: 52px;
}
/* ── Base ── */
.reveal {
font-family: system-ui, -apple-system, 'Helvetica Neue', Arial, sans-serif;
font-size: 32px;
color: #111;
background: #fff;
}
.reveal h1 { font-size: 1.8em; font-weight: 700; line-height: 1.1; margin-bottom: 0.35em; }
.reveal h2 { font-size: 1.15em; font-weight: 700; line-height: 1.2; margin-bottom: 0.35em; }
.reveal h3 { font-size: 0.68em; font-weight: 600; text-transform: uppercase; letter-spacing: 0.12em; color: #888; margin: 0.8em 0 0.3em; }
.reveal p, .reveal li { font-size: 0.78em; line-height: 1.75; color: #333; }
.reveal p { margin-bottom: 0.35em; }
.reveal strong { font-weight: 700; color: #111; }
.reveal em { font-style: italic; }
.reveal a { color: var(--brand); }
.reveal ul { list-style: none; padding: 0; margin: 0; }
.reveal ul li { padding-left: 1.1em; position: relative; margin-bottom: 0.3em; }
.reveal ul li::before { content: ''; position: absolute; left: 0; color: #aaa; }
.reveal ol li { margin-bottom: 0.3em; }
.reveal .slides section { padding-bottom: calc(var(--bar-h) + 16px) !important; box-sizing: border-box; text-align: left; }
.reveal .progress span { background: var(--brand); }
.reveal .controls { color: var(--brand); bottom: calc(var(--bar-h) + 10px) !important; }
/* ── Footer bar ── */
#slide-footer-bar {
position: fixed; bottom: 0; left: 0; right: 0;
height: var(--bar-h); background: var(--brand);
display: flex; align-items: center; padding: 0 2em;
z-index: 200;
}
#footer-logo { height: 26px; width: 26px; opacity: 0.85; color: rgba(255,255,255,.9); flex-shrink: 0; }
#footer-num { position: absolute; left: 50%; transform: translateX(-50%); font-size: 11px; color: rgba(255,255,255,.45); letter-spacing: .1em; font-family: system-ui; }
#footer-clock { margin-left: auto; font-size: 12px; color: rgba(255,255,255,.45); font-family: system-ui; font-variant-numeric: tabular-nums; }
#slide-footer-bar.bar-light { background: #fff; box-shadow: 0 -1px 0 rgba(0,0,0,.1); }
#slide-footer-bar.bar-light #footer-num,
#slide-footer-bar.bar-light #footer-clock { color: rgba(22,51,116,.4); }
#slide-footer-bar.bar-light #footer-logo { color: var(--brand); }
/* ── UI buttons ── */
.home-btn {
position: fixed; top: 1em; right: 1em; width: 1.9em; height: 1.9em;
border-radius: 50%; border: 1px solid rgba(0,0,0,.15); background: rgba(255,255,255,.9);
color: #555; font-size: 1em; display: flex; align-items: center; justify-content: center;
text-decoration: none; z-index: 300; box-shadow: 0 1px 4px rgba(0,0,0,.1);
}
.home-btn.light { color: var(--brand); }
.fab {
width: 1.9em; height: 1.9em; border-radius: 50%; border: 1px solid rgba(0,0,0,.15);
background: rgba(255,255,255,.9); color: #555; font-size: 1em; cursor: pointer;
display: flex; align-items: center; justify-content: center; text-decoration: none;
box-shadow: 0 1px 4px rgba(0,0,0,.1);
}
.fab.light { color: var(--brand); }
/* ── Collapsible FAB cluster ── */
#fab-cluster {
position: fixed; top: 1em; right: 3.5em;
display: flex; align-items: center; gap: .4em;
z-index: 300;
}
#fab-tools {
display: flex; gap: .4em; align-items: center;
max-width: 0; overflow: hidden; opacity: 0;
transition: max-width .28s ease, opacity .2s ease;
}
#fab-cluster.open #fab-tools { max-width: 22em; opacity: 1; }
#img-btn.generating { animation: spin 1.2s linear infinite; cursor: default; }
@keyframes spin { to { transform: rotate(360deg); } }
/* ── Toast ── */
#img-toast {
position: fixed; bottom: calc(var(--bar-h) + 12px); left: 50%; transform: translateX(-50%);
background: rgba(22,51,116,.92); color: #fff; font-size: .7rem; padding: .38rem 1.1rem;
border-radius: 20px; pointer-events: none; opacity: 0; transition: opacity .4s;
z-index: 400; white-space: nowrap; font-family: system-ui;
}
@media print { #slide-footer-bar, #img-toast { display: none; } .reveal section { page-break-after: always; } }
/* ══ LAYOUT-VARIANTEN ══
Gradient-Modus: Der Verlauf ist direkt in das KI-generierte Bild eingebacken —
linke Seite weiß (Textbereich lesbar), rechte Seite volles Motiv.
Kein CSS-Overlay nötig, Opacity 1. */
/* ══ UI PANELS ══ */
.ui-panel {
display: none;
position: fixed;
bottom: calc(var(--bar-h) + 14px);
right: 1em;
background: #fff;
border: 1px solid #e0e0e0;
border-radius: 10px;
padding: 1.1em 1.2em;
z-index: 350;
box-shadow: 0 6px 28px rgba(0,0,0,.16);
min-width: 280px;
max-width: 340px;
}
.ui-panel.open { display: block; }
.panel-title {
font-size: .65rem; font-weight: 700; text-transform: uppercase;
letter-spacing: .12em; color: #999; margin-bottom: .85em;
font-family: system-ui;
}
/* Layout panel */
.layout-opts { display: flex; gap: .6em; }
.layout-opt {
flex: 1; border: 2px solid #e0e0e0; border-radius: 8px;
padding: .6em .4em; cursor: pointer; background: #fafafa;
transition: border-color .15s, background .15s; text-align: center;
}
.layout-opt:hover { border-color: var(--brand); background: #f0f4fd; }
.layout-opt.active { border-color: var(--brand); background: #eef2fc; }
.lo-icon { font-size: 1.4em; margin-bottom: .25em; color: #444; }
.lo-name { font-size: .62rem; font-weight: 700; color: #222; font-family: system-ui; }
.lo-desc { font-size: .55rem; color: #888; margin-top: .15em; font-family: system-ui; line-height: 1.4; }
/* Font panel */
.font-opts { display: flex; flex-direction: column; gap: .5em; }
.font-opt {
border: 2px solid #e8e8e8; border-radius: 7px; padding: .55em .9em;
cursor: pointer; background: #fafafa; transition: border-color .15s;
display: flex; align-items: center; gap: .8em;
}
.font-opt:hover { border-color: var(--brand); }
.font-opt.active { border-color: var(--brand); background: #eef2fc; }
.fo-sample { font-size: 1.15em; font-weight: 700; color: #111; flex-shrink: 0; width: 2.8em; }
.fo-info { flex: 1; }
.fo-name { font-size: .66rem; font-weight: 700; color: #222; font-family: system-ui; }
.fo-pair { font-size: .58rem; color: #888; font-family: system-ui; }
/* Color panel */
.color-swatches { display: flex; flex-wrap: wrap; gap: .4em; margin-bottom: .75em; }
.color-swatch {
width: 2em; height: 2em; border-radius: 50%; cursor: pointer;
border: 2px solid transparent; transition: transform .12s, border-color .12s;
box-shadow: 0 1px 4px rgba(0,0,0,.12);
}
.color-swatch:hover { transform: scale(1.15); border-color: #555; }
.color-row { display: flex; align-items: center; gap: .6em; margin-top: .4em; }
.color-row input[type=color] {
width: 2.2em; height: 2.2em; border: none; border-radius: 4px;
cursor: pointer; padding: 0; background: none;
}
.color-row label { font-size: .62rem; color: #666; font-family: system-ui; }
.panel-btn {
width: 100%; padding: .45em; font-size: .65rem; border-radius: 6px;
border: 1px solid #ddd; background: #f5f5f5; cursor: pointer;
font-family: system-ui; margin-top: .5em; color: #444;
transition: background .15s;
}
.panel-btn:hover { background: #eee; }
.panel-btn.danger { border-color: #f5a0a0; color: #b71c1c; background: #fff5f5; }
.panel-btn.danger:hover { background: #fde8e8; }
</style>
</head>
<body>
<div class="reveal">
<div class="slides">
<!-- 01 TITEL -->
<section>
<h1>Geografie unterrichten<br>in der Sekundarstufe I</h1>
<p>Lehrplan, Kompetenzen, Schülervorstellungen,<br>Inklusion, Differenzierung &amp; Sprachsensibilität</p>
<p>Thomas Schroffenegger<br>
GeoGraSim — Plattform für Geografie-Simulationen<br>
Auf Basis des österreichischen GW-Lehrplans 2023</p>
</section>
<!-- 02 ZÄSUR -->
<section>
<h3>1. September 2023</h3>
<h1>Der GW-Lehrplan ist neu — kompetenzorientiert &amp; verbindlich</h1>
<p>Bundesgesetzblatt II Nr. 1/2023 · Inkraft seit Schuljahr 2023/24</p>
<ul>
<li>Erstmals <strong>Kompetenzraster</strong> mit verbindlichen Anforderungen pro Klasse</li>
<li><strong>Wirtschaftliche Bildung</strong> erstmals namensgebend gleichberechtigt</li>
<li><strong>4 Basiskonzepte</strong> als roter Faden — Raum, Maßstab, System, Mensch-Umwelt</li>
</ul>
<p>BMBWF, BGBl. II 1/2023 · Geographie und wirtschaftliche Bildung</p>
</section>
<!-- 03 DIE FRAGE -->
<section>
<h2>Was bedeutet das für den Unterricht?</h2>
<p>Vom „Wir lernen über Länder" hin zum „Wir bauen Verstehen von räumlichen Systemen" — das ist die Verschiebung des neuen Lehrplans.</p>
<p>Welche Kompetenzen stehen im Zentrum? Wie unterrichten wir sie? Und wie gehen wir mit den Schülervorstellungen um, die schon da sind?</p>
<ul>
<li>10 bis 14 Jahre — die Konzepte werden hier grundgelegt</li>
<li>Klimawandel, Migration, Globalisierung — drängende Themen, jede Stunde</li>
<li>Inklusion, Sprachsensibilität, Digitalität als Querschnittsanforderung</li>
</ul>
</section>
<!-- 04 ÜBERBLICK -->
<section>
<h2>Überblick</h2>
<h3>Theorie &amp; Lehrplan</h3>
<ol>
<li>Grundlagen der Geografie-Didaktik</li>
<li>Der GW-Lehrplan 2023 im Detail</li>
<li>Schülervorstellungen &amp; Conceptual Change</li>
<li>Kompetenzorientierung</li>
</ol>
<h3>Praxis</h3>
<ol start="5">
<li>Inklusion, Differenzierung, Sprache</li>
<li>Assessment &amp; Feedback</li>
<li>Internationaler Vergleich</li>
<li>Herausforderungen &amp; Ausblick</li>
</ol>
<p>Basis: 135 peer-reviewed Quellen · GW-Lehrplan 2023 · DACH-Vergleich · IGU/GeoCapabilities</p>
</section>
<!-- KAPITEL 1 -->
<section>
<h3>Kapitel 1 — Grundlagen</h3>
<h1>Was ist<br>Geografie-Didaktik?</h1>
</section>
<!-- 06 PARADIGMEN -->
<section>
<h2>Drei prägende Paradigmen</h2>
<h3>Powerful Knowledge</h3>
<p>Geografie liefert Wissen, das Alltagsdenken übersteigt — Strukturwissen statt Faktenliste. Young, Lambert.</p>
<h3>Basiskonzepte</h3>
<p>Wenige Schlüsselideen strukturieren das gesamte Fach: Raum, Maßstab, System, Mensch-Umwelt. Im AT-Lehrplan 2023 verbindlich verankert.</p>
<h3>Raumkonzepte</h3>
<p>Vier Zugänge: Container · Beziehung · System · Konstrukt. Die Wahl prägt den ganzen Unterricht.</p>
</section>
<!-- 07 ENTWICKLUNG -->
<section>
<h2>Vom Realienunterricht zur GW-Bildung</h2>
<ul>
<li><strong>Bis 1962</strong> — Erdkunde als beschreibende Länderkunde</li>
<li><strong>1962</strong> — „Geografie und Wirtschaftskunde" als Doppelfach in der HS</li>
<li><strong>1985</strong> — Lehrplan: regionalgeografisch, wirtschaftsorientiert</li>
<li><strong>2000</strong> — Kompetenzorientierung beginnt</li>
<li><strong>2023</strong> — Lehrplan-Neuverordnung: Kompetenzraster, Basiskonzepte, wirtschaftliche Bildung gleichberechtigt</li>
</ul>
<p>Österreich ist in dieser Hinsicht didaktisch fortschrittlich — aber Stundenknappheit bleibt.</p>
</section>
<!-- KAPITEL 2 -->
<section>
<h3>Kapitel 2 — Lehrplan</h3>
<h1>GW-Lehrplan 2023<br>im Detail</h1>
</section>
<!-- 09 KOMPETENZMODELL -->
<section>
<h2>Das Kompetenzmodell — vier Bereiche</h2>
<h3>Fachwissen</h3>
<p>Geografische Konzepte, räumliche Strukturen, ökonomische Zusammenhänge.</p>
<h3>Erkenntnisgewinnung</h3>
<p>Methodisches Arbeiten mit Geomedien, Daten, Karten, Modellen.</p>
<h3>Kommunikation</h3>
<p>Räumliche Sachverhalte fachsprachlich darstellen und argumentieren.</p>
<h3>Bewertung &amp; Handeln</h3>
<p>Werteorientierte Beurteilung räumlicher Konflikte und Folgen.</p>
</section>
<!-- 10 KLASSENSTUFEN -->
<section>
<h2>Aufbau über vier Klassenstufen</h2>
<h3>1. Klasse — Leben und Wirtschaften (2 Wo.-Std.)</h3>
<p>Grundkonzepte Raum, Maßstab, System; Wetter und Klima; Einführung in Karten.</p>
<h3>2. Klasse — Nachhaltiges Leben und Wirtschaften (1 Wo.-Std.)</h3>
<p>Ressourcen, Energie, Kreisläufe; Konsum, Lebensstile, Globalisierung in Ansätzen.</p>
<h3>3. Klasse — Österreich (2 Wo.-Std.)</h3>
<p>Verkehr, Logistik, Wirtschaft, Bevölkerung — eigenes Land in Detail.</p>
<h3>4. Klasse — Globalisierte Welt (2 Wo.-Std.)</h3>
<p>Klimawandel, Migration, Welthandel, internationale Verflechtung.</p>
</section>
<!-- 11 BASISKONZEPTE -->
<section>
<h2>Vier Basiskonzepte als roter Faden</h2>
<ol>
<li><strong>Raum</strong> — was ist räumlich gemeint? Container, Beziehung, System, Konstrukt</li>
<li><strong>Maßstab</strong> — von lokal bis global · Wechsel der Maßstabsebene</li>
<li><strong>System</strong> — Elemente, Prozesse, Wechselwirkungen, Emergenz</li>
<li><strong>Mensch-Umwelt</strong> — Wechselwirkung, Verantwortung, Nachhaltigkeit</li>
</ol>
<p>Diese Konzepte sind der eigentliche Lerngegenstand — die Inhalte sind Beispiele, an denen sie geübt werden.</p>
</section>
<!-- KAPITEL 3 -->
<section>
<h3>Kapitel 3 — Vorstellungen</h3>
<h1>Schülervorstellungen<br>&amp; Conceptual Change</h1>
</section>
<!-- 13 ALLTAGSVORSTELLUNGEN -->
<section>
<h2>Was Schüler*innen mitbringen</h2>
<p>Kinder kommen nicht als leere Tafel in den Unterricht. Sie haben Alltagsvorstellungen — oft anschaulich, oft falsch — von Klima, Raum, Wirtschaft.</p>
<ul>
<li><strong>„Das Ozonloch ist die Erderwärmung."</strong> — Robust, weltweit verbreitet, hartnäckig.</li>
<li><strong>„Tropisch = warm, nichts mehr."</strong> — Reduktion auf Temperatur statt Niederschlag und Vegetation.</li>
<li><strong>„Geld kommt vom Staat."</strong> — Ökonomisches Alltagsmodell mit Lücken.</li>
<li><strong>„Migration = Flucht."</strong> — Mediendominiertes Vorverständnis</li>
</ul>
<p>Quelle: Reinfried 2015, Conrad 2020 u. v. a.</p>
</section>
<!-- 14 CONCEPTUAL CHANGE -->
<section>
<h2>Conceptual Change im GW-Unterricht</h2>
<p>Vorstellungen ändern sich nicht durch Wiederholung, sondern durch <em>Konflikt mit Erfahrung</em>.</p>
<h3>Vier Schritte (Posner et al.)</h3>
<ol>
<li><strong>Unzufriedenheit</strong> mit der bisherigen Vorstellung erzeugen</li>
<li><strong>Verständlichkeit</strong> der neuen Vorstellung sichern</li>
<li><strong>Plausibilität</strong> — die neue Vorstellung muss erfahrungslogisch sinnvoll sein</li>
<li><strong>Fruchtbarkeit</strong> — sie erklärt Neues, nicht nur das Alte</li>
</ol>
<p><em>Simulationen können genau das leisten</em> — Vorhersage formulieren, Konflikt zur Erwartung erleben, neu denken.</p>
</section>
<!-- KAPITEL 4 -->
<section>
<h3>Kapitel 4 — Kompetenzen</h3>
<h1>Kompetenz-<br>orientierung</h1>
</section>
<!-- 16 KOMPETENZBEREICHE -->
<section>
<h2>Drei tragende Kompetenzen</h2>
<h3>Systemkompetenz</h3>
<p>Erkennen, beschreiben, modellieren von Wechselwirkungen — Kernanliegen der Geografie.</p>
<h3>Räumliche Orientierungskompetenz</h3>
<p>Karten lesen, Maßstäbe wechseln, sich im Raum verorten — fachspezifischer als oft angenommen.</p>
<h3>Argumentations- &amp; Kommunikationskompetenz</h3>
<p>Räumliche Sachverhalte mit Fachsprache darstellen, Positionen begründen, Konflikte bewerten.</p>
</section>
<!-- 17 INHALT VS KOMPETENZ -->
<section>
<h2>Vom Inhalt zur Kompetenz</h2>
<h3>Früher</h3>
<ul>
<li><em>„Die Schüler*innen kennen die Hauptstadt von Norwegen."</em></li>
<li>Faktenwissen, abprüfbar, kurzlebig</li>
</ul>
<h3>Heute</h3>
<ul>
<li><em>„Die Schüler*innen können räumliche Strukturen Norwegens unter Bezug auf Klima und Wirtschaft erklären."</em></li>
<li>Anwendungswissen, übertragbar</li>
</ul>
<p>Inhalte verschwinden nicht — sie werden Mittel zum Aufbau von Kompetenzen, nicht Selbstzweck.</p>
</section>
<!-- KAPITEL 5 -->
<section>
<h3>Kapitel 5 — Inklusion</h3>
<h1>Inklusion, Differenzierung,<br>Sprachsensibilität</h1>
</section>
<!-- 19 INKLUSION -->
<section>
<h2>Inklusiver GW-Unterricht</h2>
<p>Inklusion ist Querschnittsaufgabe, nicht Sonderfall einer einzelnen Stunde. Geografie eignet sich gut — räumliches Denken ist nicht an Lese- oder Rechenkompetenz gebunden.</p>
<ul>
<li><strong>Mehrere Zugänge</strong> — Karte, Modell, Bild, Erfahrung, Erzählung</li>
<li><strong>Unterschiedliche Anforderungsniveaus</strong> bei gleicher Aufgabenklasse</li>
<li><strong>Soziales Lernen</strong> — räumliche Konflikte als Anlass für Perspektivwechsel</li>
</ul>
</section>
<!-- 20 DIFFERENZIERUNG -->
<section>
<h2>Differenzierte Instruktion</h2>
<p>Tomlinsons Modell unterscheidet drei Achsen — alle drei sind im GW-Unterricht praktikabel.</p>
<h3>Inhalt</h3>
<p>Verschiedene Quellen, Tiefen, Maßstabsebenen für dieselbe Frage.</p>
<h3>Prozess</h3>
<p>Manche Schüler*innen rechnen, andere kartieren, andere argumentieren — gleiches Ziel, andere Wege.</p>
<h3>Produkt</h3>
<p>Plakat, Karte, Vortrag, Simulation, Text — Wahl der Darstellungsform.</p>
<p>Simulationen sind hier besonders flexibel — gleiche Software, unterschiedliche Aufgabentiefe pro Lernendem.</p>
</section>
<!-- 21 SPRACHE -->
<section>
<h2>Sprachsensibler Fachunterricht</h2>
<p>GW-Unterricht ist Sprachunterricht — wer Fachsprache nicht lernt, lernt das Fach nicht. Besonders relevant für DaZ-Lernende.</p>
<h3>Drei Schichten</h3>
<ul>
<li><strong>Alltagssprache</strong> — Vorerfahrung, Zugang</li>
<li><strong>Bildungssprache</strong> — Argumentation, Begründung</li>
<li><strong>Fachsprache</strong> — präzise Begriffe, korrekte Konzepte</li>
</ul>
<p>Methodische Hilfen: Wortspeicher, Satzbausteine, Scaffolding-Karten, Bild-Wort-Listen, Anwendungs- statt Definitionsorientierung.</p>
</section>
<!-- KAPITEL 6 -->
<section>
<h3>Kapitel 6 — Assessment</h3>
<h1>Leistungsfeststellung<br>&amp; Feedback</h1>
</section>
<!-- 23 FORMATIV -->
<section>
<h2>Formatives Assessment</h2>
<p>Die wirkungsvollste Form von Leistungsbewertung ist die, die <em>nicht</em> am Ende kommt — sondern zwischendurch.</p>
<h3>Kernidee</h3>
<ul>
<li>Lernen sichtbar machen — für Lernende und Lehrkraft</li>
<li>Korrektur in dem Moment, in dem sie noch wirken kann</li>
<li>Selbstreflexion als Teil der Lernarbeit</li>
</ul>
<p>Hattie-Effektstärke: <strong>d ≈ 0,90</strong> — eine der wirksamsten Interventionen überhaupt.</p>
</section>
<!-- 24 ASSESSMENT-DASHBOARD -->
<section>
<h2>Assessment in Simulationsumgebungen</h2>
<p>Digitale Lernumgebungen ermöglichen Beobachtungen, die im Buchunterricht unsichtbar bleiben.</p>
<ul>
<li><strong>Prozessdaten</strong> — wie lange, wie oft, in welcher Reihenfolge gearbeitet</li>
<li><strong>Vorhersage vs. Ergebnis</strong> — direkter Zugang zu Schülervorstellungen</li>
<li><strong>Reflexionsantworten</strong> — qualitatives Verstehen</li>
<li><strong>Lehrkräfte-Dashboard</strong> — Übersicht über die ganze Klasse, Drilldown auf Einzelne</li>
</ul>
<p>Wichtig: Datenschutz · Pseudonymisierung · Einwilligung der Erziehungsberechtigten.</p>
</section>
<!-- KAPITEL 7 -->
<section>
<h3>Kapitel 7 — Vergleich</h3>
<h1>Internationale<br>Perspektive</h1>
</section>
<!-- 26 DACH -->
<section>
<h2>Geografie im DACH-Raum</h2>
<h3>Österreich</h3>
<p>„Geographie und wirtschaftliche Bildung" — Wirtschaft gleichberechtigt namensgebend, eigenes Profil.</p>
<h3>Deutschland (16 Länder)</h3>
<p>Erdkunde / Geographie / Gesellschaftswissenschaften — uneinheitlich; teils mit Geschichte/Politik fusioniert.</p>
<h3>Schweiz (Lehrplan 21)</h3>
<p>„Räume, Zeiten, Gesellschaften" — Geografie eingebettet in einen größeren Verbund.</p>
<p>Im Vergleich profiliert AT die wirtschaftliche Bildung am stärksten — eine Stärke, die international Beachtung findet.</p>
</section>
<!-- 27 GEOCAPABILITIES -->
<section>
<h2>GeoCapabilities &amp; Powerful Knowledge</h2>
<p>Internationale Bewegung um Lambert, Solem, Tani: Welche <em>Befähigungen</em> liefert Geografie für ein gelingendes Leben?</p>
<ul>
<li><strong>Räumliches Denken</strong> als kognitiver Werkzeugkasten</li>
<li><strong>Verständnis komplexer Systeme</strong> — Klima, Migration, Wirtschaft</li>
<li><strong>Werteorientierung</strong> — kritisch über Räume und ihre Nutzung urteilen</li>
<li><strong>Bürgerschaftliche Handlungsfähigkeit</strong> — räumliche Konflikte begreifen, sich beteiligen</li>
</ul>
<p>IGU Commission on Geography Education — internationale Plattform.</p>
</section>
<!-- KAPITEL 8 -->
<section>
<h3>Kapitel 8 — Hürden</h3>
<h1>Herausforderungen<br>&amp; Ausblick</h1>
</section>
<!-- 29 HERAUSFORDERUNGEN -->
<section>
<h2>Was den Alltag schwer macht</h2>
<h3>Stundenknappheit &amp; Stofffülle</h3>
<ul>
<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>
<ul>
<li>Kompetenzorientierung muss explizit gelernt werden — Eigene Schulzeit war oft anders</li>
<li>Fortbildung zur Digitalität noch lückenhaft</li>
</ul>
<h3>Digitale Transformation &amp; Inklusion</h3>
<ul>
<li>Geräteausstattung sehr ungleich, BYOD-Heterogenität</li>
<li>Inklusion als Querschnittsaufgabe ohne zusätzliche Ressourcen</li>
</ul>
</section>
<!-- 30 AUSBLICK -->
<section>
<h2>Was wir besser machen können</h2>
<h3>Simulationen als Teil des Werkzeugkastens</h3>
<p>Klima, Stadt, Wirtschaft, Logistik — manipulierbar im Unterricht statt nur erzählt.</p>
<h3>Kollegiale Vorbereitung</h3>
<p>Geteilte Stundenbilder, geteilte Aufgaben, gemeinsame Fortbildung.</p>
<h3>Forschung-Praxis-Brücken</h3>
<p>Universitäten, Pädagogische Hochschulen, Lehrkräfte gemeinsam — Begleitforschung statt Wissensgefälle.</p>
<h3>Stundenmindeststandard</h3>
<p>2 Wo.-Std. in allen vier Klassen wäre fachlich angemessen — politische Forderung.</p>
</section>
<!-- 31 EMPFEHLUNGEN -->
<section>
<h2>5 Empfehlungen für die Praxis</h2>
<ol>
<li><strong>Basiskonzepte sichtbar machen</strong> — bei jeder Stunde explizit benennen, welches Konzept gerade geübt wird</li>
<li><strong>Schülervorstellungen aktiv abfragen</strong> — vor dem Lehrstoff, nicht erst danach</li>
<li><strong>Sprachsensibel planen</strong> — Wortspeicher, Satzbausteine, Bild-Wort-Brücken</li>
<li><strong>Differenzieren über Maßstabsebene</strong> — gleiche Aufgabe, andere Tiefe</li>
<li><strong>Formatives Feedback verankern</strong> — Lernen sichtbar machen, nicht erst am Ende prüfen</li>
</ol>
</section>
<!-- 32 FAZIT -->
<section>
<h2>Die entscheidende Frage</h2>
<p>ist nicht <strong>was</strong> wir unterrichten —</p>
<p>sondern <strong>wozu</strong> die Schüler*innen es brauchen.</p>
<p>Geografie liefert Werkzeuge zum Denken über Räume, Systeme, Mensch-Umwelt — eine Befähigung für das ganze Leben, nicht nur für die nächste Schularbeit.</p>
</section>
<!-- 33 QUELLEN -->
<section>
<h2>Kernquellen</h2>
<p>Vollständig unter quellen-geografie.html</p>
<p>BMBWF (2023). Lehrplan Geographie und wirtschaftliche Bildung. <em>BGBl. II 1/2023.</em></p>
<p>Reinfried, S. (2015). Schülervorstellungen und Geographieunterricht. <em>VS / Springer.</em></p>
<p>Lambert, D. &amp; Solem, M. (2014). GeoCapabilities. <em>Journal of Geography.</em></p>
<p>Young, M. (2013). Powerful knowledge. <em>Curriculum Journal.</em></p>
<p>Tomlinson, C. A. (2014). <em>The Differentiated Classroom.</em></p>
<p>Hattie, J. (2009/2023). <em>Visible Learning.</em></p>
<p>Posner et al. (1982). Conceptual change. <em>Science Education.</em></p>
</section>
<!-- 34 DANKE -->
<section>
<h1>Danke.</h1>
<p>Fragen &amp; Diskussion</p>
<p>Artikel &amp; Quellenverzeichnis: geografie-didaktik.html · quellen-geografie.html</p>
<p>Thomas Schroffenegger · GeoGraSim · Sekundarstufe I · 2026</p>
</section>
</div><!-- /slides -->
</div><!-- /reveal -->
<!-- Home Button -->
<a class="home-btn" id="home-btn" href="../index.html" title="Zurück zum Artikel"></a>
<!-- Panels -->
<div id="panel-layout" class="ui-panel">
<div class="panel-title">Design-Variante — Text immer fix oben links</div>
<div class="layout-opts">
<button class="layout-opt" id="lopt-rein" onclick="setLayout('rein')">
<div class="lo-icon"></div>
<div class="lo-name">Rein</div>
<div class="lo-desc">Kein Bild, klarer Hintergrund</div>
</button>
<button class="layout-opt" id="lopt-gradient" onclick="setLayout('gradient')">
<div class="lo-icon">◁▨</div>
<div class="lo-name">Verlauf</div>
<div class="lo-desc">Bild blendet rechts ein</div>
</button>
<button class="layout-opt" id="lopt-bg" onclick="setLayout('bg')">
<div class="lo-icon"></div>
<div class="lo-name">Hintergrund</div>
<div class="lo-desc">Bild blass dahinter</div>
</button>
</div>
</div>
<div id="panel-font" class="ui-panel">
<div class="panel-title">Schriftstil</div>
<div class="font-opts" id="font-opts-list"></div>
</div>
<div id="panel-color" class="ui-panel">
<div class="panel-title">Hintergrundfarbe — aktuelle Folie</div>
<div class="color-swatches" id="color-swatches"></div>
<div class="color-row">
<input type="color" id="custom-color-input" value="#163374" oninput="applySlideColor(this.value)"/>
<label>Eigene Farbe</label>
</div>
<button class="panel-btn danger" onclick="clearSlideColor()">Farbe entfernen</button>
</div>
<!-- FAB Cluster — standardmäßig eingeklappt -->
<div id="fab-cluster">
<button class="fab" id="fab-toggle" title="Werkzeuge" onclick="toggleFabCluster()"></button>
<div id="fab-tools">
<a class="fab" id="stil-btn" href="stile.html" title="Bildstil"></a>
<button class="fab" id="img-btn" title="Alle Folien generieren" onclick="generateAllImages()"></button>
<button class="fab" id="regen-btn" title="Nur diese Folie" onclick="regenCurrentSlide()"></button>
<button class="fab" id="layout-btn" title="Design-Variante" onclick="togglePanel('layout')"></button>
<button class="fab" id="font-btn" title="Schriftstil" onclick="togglePanel('font')">Aa</button>
<button class="fab" id="color-btn" title="Farbe" onclick="togglePanel('color')"></button>
<button class="fab" id="save-btn" title="Speichern" onclick="saveAllSettings()"></button>
<button class="fab" id="deploy-btn" title="Deployment-ZIP erstellen" onclick="buildDeployment()"></button>
<button class="fab" id="pptx-btn" title="PowerPoint exportieren" onclick="exportPPTX()">⬇P</button>
</div>
</div>
<!-- Fixed Footer Bar -->
<div id="slide-footer-bar">
<svg id="footer-logo" xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 16 16" aria-hidden="true"><path d="M8 15c4.418 0 8-3.134 8-7s-3.582-7-8-7-8 3.134-8 7c0 1.76.743 3.37 1.97 4.6-.097 1.016-.417 2.13-.771 2.966-.079.186.074.394.273.362 2.256-.37 3.597-.938 4.18-1.234A9 9 0 0 0 8 15m0-9.007c1.664-1.711 5.825 1.283 0 5.132-5.825-3.85-1.664-6.843 0-5.132"/></svg>
<span id="footer-num"></span>
<span id="footer-clock"></span>
</div>
<!-- Toast notification -->
<div id="img-toast"></div>
<script src="https://cdn.jsdelivr.net/npm/reveal.js@5.1.0/dist/reveal.js"></script>
<script>
Reveal.initialize({
hash: true,
transition: 'fade',
transitionSpeed: 'fast',
controls: true,
progress: true,
center: false,
slideNumber: false,
overview: true,
keyboard: true,
touch: true,
width: 1280,
height: 720,
margin: 0.10,
minScale: 0.2,
maxScale: 2.0,
plugins: []
});
// ── Footer bar ──
const homeBtn = document.getElementById('home-btn');
const imgBtn = document.getElementById('img-btn');
const stilBtn = document.getElementById('stil-btn');
const footerBar = document.getElementById('slide-footer-bar');
const footerNum = document.getElementById('footer-num');
const footerClk = document.getElementById('footer-clock');
var totalSlides = 0;
(function() {
var sn = localStorage.getItem('fal_presentation_style_name');
if (sn) imgBtn.title = 'KI-Bilder generieren · Stil: ' + sn;
})();
function isDarkSlide(slide) {
if (!slide) return false;
return slide.classList.contains('chapter-slide') || slide.classList.contains('title-slide');
}
function updateFooter() {
const slide = Reveal.getCurrentSlide();
const idx = Reveal.getState().indexh + 1;
const dark = isDarkSlide(slide);
if (dark) {
footerBar.classList.add('bar-light');
homeBtn.classList.remove('light');
imgBtn.classList.remove('light');
stilBtn.classList.remove('light');
} else {
footerBar.classList.remove('bar-light');
homeBtn.classList.add('light');
imgBtn.classList.add('light');
stilBtn.classList.add('light');
}
if (totalSlides > 0) footerNum.textContent = idx + ' / ' + totalSlides;
}
function updateClock() {
var now = new Date();
footerClk.textContent =
String(now.getHours()).padStart(2,'0') + ':' +
String(now.getMinutes()).padStart(2,'0') + ':' +
String(now.getSeconds()).padStart(2,'0');
}
setInterval(updateClock, 1000);
updateClock();
Reveal.on('slidechanged', updateFooter);
Reveal.on('ready', function() {
totalSlides = Reveal.getTotalSlides();
updateFooter();
setTimeout(_restoreCachedBackgrounds, 300);
if (window.renderMathInElement) {
renderMathInElement(document.body, {
delimiters: [{left:'$$',right:'$$',display:true},{left:'$',right:'$',display:false}],
throwOnError: false
});
}
});
// ══════════════════════════════════════════════════════════════════
// KI-BILDGENERIERUNG (fal.ai Flux)
// ══════════════════════════════════════════════════════════════════
var _LS_KEY = 'fal_presentation_style';
// Visueller Rahmenstil: technische Blaupause / Blueprint-Ästhetik
// Wird durch stile.html überschrieben falls der User einen Stil wählt.
var _DEFAULT_STYLE = "precise engineering schematic illustration, fine clean lines on dark navy blue " +
"background, schematic diagram, technical drawing aesthetic, no text labels, no numbers, no letters, " +
"ultra wide 16:9 format, elegant minimal composition";
var IMG_STYLE = localStorage.getItem(_LS_KEY + '_prompt') || _DEFAULT_STYLE;
var _imgGenerating = false;
var _SLIDE_CACHE_KEY = 'fal_slide_bg_v4';
var _SLIDE_CACHE_TTL = 55 * 60 * 1000;
function _slideCacheSet(idx, url) {
try {
var c = JSON.parse(localStorage.getItem(_SLIDE_CACHE_KEY) || '{}');
c['s' + idx] = { url: url, ts: Date.now() };
localStorage.setItem(_SLIDE_CACHE_KEY, JSON.stringify(c));
} catch(e) {}
}
function _slideCacheGet(idx) {
try {
var c = JSON.parse(localStorage.getItem(_SLIDE_CACHE_KEY) || '{}');
var e = c['s' + idx];
if (!e || Date.now() - e.ts > _SLIDE_CACHE_TTL) return null;
return e.url;
} catch(e) { return null; }
}
function _applyBackground(section, imageUrl) {
section.setAttribute('data-background-image', imageUrl);
section.setAttribute('data-background-opacity', '0.18');
section.setAttribute('data-background-size', 'cover');
section.setAttribute('data-background-position', 'center');
Reveal.sync();
}
function _restoreCachedBackgrounds() {
if (_currentLayout === 'rein') return;
var sects = [...document.querySelectorAll('.reveal .slides > section')];
var anyRestored = false;
sects.forEach(function(s, idx) {
var url = _slideCacheGet(idx);
if (url) { _applyBackground(s, url); anyRestored = true; }
});
if (anyRestored) setTimeout(function() { Reveal.sync(); }, 1200);
}
function _toast(msg, ms) {
var t = document.getElementById('img-toast');
t.textContent = msg;
t.style.opacity = '1';
setTimeout(function() { t.style.opacity = '0'; }, ms || 2500);
}
async function _fetchImage(prompt) {
var key = window.FAL_KEY;
if (!key) return null;
try {
var res = await fetch('https://fal.run/fal-ai/flux/schnell', {
method: 'POST',
headers: { 'Authorization': 'Key ' + key, 'Content-Type': 'application/json' },
body: JSON.stringify({
prompt: prompt + ', ' + IMG_STYLE + ', no text, no letters, no numbers',
image_size: 'landscape_16_9',
num_inference_steps: 4,
num_images: 1,
enable_safety_checker: true
})
});
var data = await res.json();
if (data.detail) { console.warn('fal.ai:', data.detail); return null; }
return (data.images && data.images[0]) ? data.images[0].url : null;
} catch(e) { console.warn('fal.ai Fehler:', e); return null; }
}
// ── Thematische Bildbeschreibung pro Folie (Blueprint-Stil) ──
// Motiv passend zum Slide-Inhalt, dargestellt als technische Blaupause / Schemazeichnung.
// Kein Foto, kein Text, keine Buchstaben im Bild.
function _slideVisual(section) {
var h1 = (section.querySelector('h1') || {}).textContent || '';
var h2 = (section.querySelector('h2') || {}).textContent || '';
var h3 = (section.querySelector('h3') || {}).textContent || '';
var txt = (h1 + ' ' + h2 + ' ' + h3).toLowerCase();
if (/geografie unterrichten|sekundarstufe i|titel.*geografie|gw-lehrplan 2023.*titel/.test(txt))
return "schematic of an open atlas with stylised austrian alpine landscape and a teacher figure pointing, fine white and gold lines on dark navy blue background, technical educational illustration";
if (/lehrplan ist neu|2023.*verbindlich|kompetenzraster|bgbl/.test(txt))
return "schematic of an open lawbook or codex with chapter markers and a stamped seal, technical illustration, fine white and gold lines on dark navy blue";
if (/was bedeutet das|10 bis 14|verschiebung/.test(txt))
return "schematic of a stylised map of austria zoomed at multiple scales connected by guide lines, technical cartographic illustration, fine white lines on dark navy blue";
if (/überblick|aufbau|leitfragen/.test(txt))
return "top-down technical grid schematic of a presentation outline, two columns of stacked rectangular sections, structured plan view, fine white lines on dark navy blue";
if (/was ist.*geografie-didakt|paradigm|powerful knowledge|raumkonzept|basiskonzept/.test(txt))
return "schematic of three nested geometric shapes representing paradigms, abstract conceptual diagram, fine white and gold lines on dark navy blue background";
if (/realienunterricht|wirtschaftskund|gw-bildung|entwicklung/.test(txt))
return "schematic horizontal timeline with marked decade points and stylised chronology icons, technical historical diagram, fine white lines on dark navy blue";
if (/lehrplan 2023.*detail|kompetenzmodell|kompetenzbereich/.test(txt))
return "schematic of four interlocking puzzle pieces representing competence areas, abstract diagram, fine white and gold lines on dark navy blue";
if (/aufbau über vier|klassenstufe|klasse.*wo.*std|wochenstunde/.test(txt))
return "schematic of four stacked teaching modules ascending in size, abstract diagram of curriculum progression, fine white lines on dark navy blue";
if (/basiskonzept|raum.*maßstab.*system/.test(txt))
return "schematic of four labelled concentric rings representing basic concepts, abstract conceptual diagram, fine white and gold lines on dark navy blue";
if (/schülervorstellung|alltagsvorstellung|ozonloch|tropisch/.test(txt))
return "schematic of a child silhouette with thought bubbles containing simplified concept icons, conceptual diagram, fine white lines on dark navy blue";
if (/conceptual change|posner|unzufriedenheit|plausibilität/.test(txt))
return "schematic of two arrows curving from an old to a new concept node, abstract transformation diagram, fine white and gold lines on dark navy blue";
if (/kompetenzorientier|systemkompetenz|orientierungskompetenz|argumentation/.test(txt))
return "schematic of a tree-shaped diagram with labelled branches representing competences, abstract conceptual illustration, fine white lines on dark navy blue";
if (/inhalt zur kompetenz|früher.*heute|faktenwissen/.test(txt))
return "schematic of a balance scale comparing fact icons on one side and concept-network on the other, abstract diagram, fine white lines on dark navy blue";
if (/inklusion|differenzierung|sprachsensib/.test(txt))
return "schematic of multiple stylised student silhouettes of different sizes in a classroom row, with thin connecting guide lines, fine white lines on dark navy blue";
if (/inklusiver.*unterricht|querschnitt/.test(txt))
return "schematic of an inclusive classroom layout with diverse student silhouettes connected by thin lines, technical illustration, fine white and gold lines on dark navy blue";
if (/differenzierte instruktion|tomlinson|inhalt.*prozess.*produkt/.test(txt))
return "schematic of three parallel paths leading to one shared goal, abstract diagram of differentiation, fine white and gold lines on dark navy blue";
if (/sprache|sprachsens|fachsprache|wortspeicher/.test(txt))
return "schematic of stacked layered speech bubbles representing language layers, conceptual diagram, fine white lines on dark navy blue";
if (/leistungsfeststell|assessment|formativ|hattie/.test(txt))
return "schematic of a clipboard with feedback arrows looping back to a stylised student silhouette, technical illustration, fine white lines on dark navy blue";
if (/dashboard|simulationsumgeb|prozessdaten/.test(txt))
return "schematic of a teacher dashboard with stylised charts and student row icons, abstract user interface diagram, fine white and gold lines on dark navy blue";
if (/internationale|dach|deutschland|schweiz|lehrplan 21/.test(txt))
return "schematic of three labelled country outlines side by side connected by thin lines, abstract comparison diagram, fine white lines on dark navy blue";
if (/geocapabilities|powerful.*knowledge|igu|bürgerschaftlich/.test(txt))
return "schematic of a stylised globe with five labelled radial spokes representing capabilities, abstract diagram, fine white and gold lines on dark navy blue";
if (/herausforder|stundenknapp|lehrkräftebild|digitale transformat/.test(txt))
return "schematic of multiple obstacle blocks in a row with thin guide lines around them, technical illustration of challenges, fine white lines on dark navy blue";
if (/besser machen|simulationen.*werkzeug|kollegiale|forschung-praxis/.test(txt))
return "schematic of a telescope cross-section with light rays pointing forward, technical optical diagram, fine white and gold lines on dark navy blue";
if (/empfehlung|praxis/.test(txt))
return "schematic of a clipboard with five numbered annotation lines, technical checklist illustration, fine white and gold lines on dark navy blue";
if (/entscheidend.*frage|fazit|wozu|brauchen/.test(txt))
return "schematic of a key inserted into a lock cross-section, abstract technical diagram, fine white and gold lines on dark navy blue";
if (/quellen|literatur|kernquellen/.test(txt))
return "schematic cross-section of a library bookshelf with stacked volumes, technical drawing, fine white lines on dark navy blue";
if (/danke|diskussion/.test(txt))
return "schematic of a stylised circular rose window divided into equal segments radiating from center, fine white lines on dark navy blue, elegant symmetry";
return "schematic of an open atlas with stylised landscape and route arrows, fine white and gold lines on dark navy blue, technical educational illustration";
}
window.generateAllImages = async function() {
if (_imgGenerating) return;
if (!window.FAL_KEY) { alert('Kein API-Key.\nBitte in „API Key.js" eintragen.'); return; }
IMG_STYLE = localStorage.getItem(_LS_KEY + '_prompt') || _DEFAULT_STYLE;
_imgGenerating = true;
imgBtn.classList.add('generating');
var allSects = [...document.querySelectorAll('.reveal .slides > section')];
var total = allSects.length;
var done = 0;
_toast('Generiere ' + total + ' Bilder — Navigation weiter möglich ✓', 3500);
for (var i = 0; i < allSects.length; i++) {
var section = allSects[i];
done++;
imgBtn.textContent = done + '/' + total;
var visual = _slideVisual(section);
var url = await _fetchImage(visual);
if (url) {
_slideCacheSet(i, url);
_applyBackground(section, url);
}
}
_imgGenerating = false;
imgBtn.classList.remove('generating');
imgBtn.textContent = '↺';
imgBtn.title = 'Bilder neu generieren';
_toast('Fertig — alle Bilder generiert ✓', 3000);
};
// ── Per-Folie neu generieren ──
window.regenCurrentSlide = async function() {
if (_imgGenerating) return;
if (!window.FAL_KEY) { alert('Kein API-Key.\nBitte in „API Key.js" eintragen.'); return; }
IMG_STYLE = localStorage.getItem(_LS_KEY + '_prompt') || _DEFAULT_STYLE;
var allSects = [...document.querySelectorAll('.reveal .slides > section')];
var section = Reveal.getCurrentSlide();
var idx = allSects.indexOf(section);
document.getElementById('regen-btn').textContent = '…';
var url = await _fetchImage(_slideVisual(section));
if (url) {
_slideCacheSet(idx, url);
_applyBackground(section, url);
_toast('Bild aktualisiert ✓', 2000);
}
document.getElementById('regen-btn').textContent = '◎';
};
// ══ LAYOUT-VARIANTEN ══
// Drei Modi — Text sitzt immer fix, Bilder sind reine Dekoration.
// rein: Kein Bild, klarer Hintergrund
// gradient: Bild von rechts einblendend (Gradient-Overlay schützt Text)
// bg: Bild blass im gesamten Hintergrund
var _currentLayout = localStorage.getItem('pres_layout_v1') || 'rein';
function _bgOpacityForLayout() {
return _currentLayout === 'gradient' ? '1' : '0.18';
}
window.setLayout = function(name) {
_currentLayout = name;
localStorage.setItem('pres_layout_v1', name);
var allSects = [...document.querySelectorAll('.reveal .slides > section')];
var slidesEl = document.querySelector('.reveal .slides');
// CSS-Klasse für mask-image auf .slide-background-image + .slides inline background
if (slidesEl) slidesEl.style.background = '';
if (name === 'rein') {
allSects.forEach(function(s) { s.removeAttribute('data-background-image'); });
Reveal.sync();
} else {
// gradient + bg: _applyBackground-Überschreibung kümmert sich um Canvas-Verarbeitung
allSects.forEach(function(s, idx) {
var url = _slideCacheGet(idx);
if (url) _applyBackground(s, url);
});
// Finales Sync nach async Canvas-Verarbeitung
setTimeout(function() { Reveal.sync(); }, 1200);
}
// Panel-Buttons markieren
['rein','gradient','bg'].forEach(function(id) {
var el = document.getElementById('lopt-' + id);
if (el) el.classList.toggle('active', id === name);
});
closePanel('layout');
};
function _applyStoredLayout() {
setLayout(_currentLayout);
}
// ── Canvas-Gradient: weiß links → voll rechts (Pixelebene, kein CSS-Layer-Problem) ──
function _processImageWithGradient(imageUrl) {
return new Promise(function(resolve) {
var img = new Image();
img.crossOrigin = 'anonymous';
img.onload = function() {
try {
var W = 1280, H = 720;
var canvas = document.createElement('canvas');
canvas.width = W; canvas.height = H;
var ctx = canvas.getContext('2d');
// Bild skaliert auf Canvas zeichnen
ctx.drawImage(img, 0, 0, W, H);
// Weißen Verlauf drüberlegen: links deckend → rechts transparent
var grad = ctx.createLinearGradient(0, 0, W, 0);
grad.addColorStop(0, 'rgba(255,255,255,1)');
grad.addColorStop(0.50, 'rgba(255,255,255,1)');
grad.addColorStop(0.65, 'rgba(255,255,255,0.80)');
grad.addColorStop(0.78, 'rgba(255,255,255,0.45)');
grad.addColorStop(0.90, 'rgba(255,255,255,0.12)');
grad.addColorStop(1, 'rgba(255,255,255,0)');
ctx.fillStyle = grad;
ctx.fillRect(0, 0, W, H);
resolve(canvas.toDataURL('image/jpeg', 0.93));
} catch(e) {
// CORS-Taint — Original-URL als Fallback
console.warn('Canvas CORS-Fehler, Fallback auf Original:', e);
resolve(imageUrl);
}
};
img.onerror = function() { resolve(imageUrl); };
img.src = imageUrl;
});
}
// _applyBackground berücksichtigt den aktuellen Layout-Modus
var _origApplyBackground = _applyBackground;
_applyBackground = async function(section, imageUrl) {
if (_currentLayout === 'rein') return;
var url = imageUrl;
if (_currentLayout === 'gradient') {
url = await _processImageWithGradient(imageUrl);
}
var opacity = _currentLayout === 'gradient' ? '1' : '0.18';
section.setAttribute('data-background-image', url);
section.setAttribute('data-background-opacity', opacity);
section.setAttribute('data-background-size', 'cover');
section.setAttribute('data-background-position', 'center');
Reveal.sync();
};
// ══ SCHRIFTSTILE ══
var FONT_THEMES = [
{
id: 'system',
name: 'System',
pair: 'system-ui — neutral',
h: 'system-ui, -apple-system, sans-serif',
b: 'system-ui, -apple-system, sans-serif'
},
{
id: 'fraunces',
name: 'Fraunces',
pair: 'Fraunces + Inter — elegant Serif',
h: "'Fraunces', Georgia, serif",
b: "'Inter', system-ui, sans-serif"
},
{
id: 'space',
name: 'Space Grotesk',
pair: 'Space Grotesk — geometrisch',
h: "'Space Grotesk', system-ui, sans-serif",
b: "'Space Grotesk', system-ui, sans-serif"
},
{
id: 'syne',
name: 'Syne',
pair: 'Syne — Graphic Display',
h: "'Syne', system-ui, sans-serif",
b: "'Syne', system-ui, sans-serif"
},
{
id: 'bricolage',
name: 'Bricolage',
pair: 'Bricolage Grotesque — zeitgenössisch',
h: "'Bricolage Grotesque', system-ui, sans-serif",
b: "'Bricolage Grotesque', system-ui, sans-serif"
},
{
id: 'barlow',
name: 'Barlow Condensed',
pair: 'Barlow Condensed — Lettering-Style',
h: "'Barlow Condensed', system-ui, sans-serif",
b: "'Inter', system-ui, sans-serif"
},
{
id: 'caveat',
name: 'Caveat Brush',
pair: 'Caveat Brush — Hand Lettering',
h: "'Caveat Brush', cursive",
b: "'Inter', system-ui, sans-serif"
},
{
id: 'satisfy',
name: 'Satisfy',
pair: 'Satisfy — Brush Script',
h: "'Satisfy', cursive",
b: "'Inter', system-ui, sans-serif"
}
];
var _currentFontId = (function() {
var stored = localStorage.getItem('pres_font_v1') || 'system';
return FONT_THEMES.some(function(f){ return f.id === stored; }) ? stored : 'system';
})();
function _renderFontPanel() {
var list = document.getElementById('font-opts-list');
if (!list) return;
list.innerHTML = '';
FONT_THEMES.forEach(function(t) {
var div = document.createElement('button');
div.className = 'font-opt' + (t.id === _currentFontId ? ' active' : '');
div.id = 'fopt-' + t.id;
div.onclick = function() { applyFontTheme(t.id); };
div.innerHTML =
'<span class="fo-sample" style="font-family:' + t.h + ';font-weight:700">Ag</span>' +
'<span class="fo-info"><span class="fo-name">' + t.name + '</span>' +
'<span class="fo-pair" style="display:block">' + t.pair + '</span></span>';
list.appendChild(div);
});
}
window.applyFontTheme = function(id) {
var t = FONT_THEMES.find(function(f){ return f.id === id; });
if (!t) return;
_currentFontId = id;
localStorage.setItem('pres_font_v1', id);
var style = document.getElementById('font-theme-style') || document.createElement('style');
style.id = 'font-theme-style';
style.textContent =
'.reveal h1, .reveal h2 { font-family: ' + t.h + ' !important; }' +
'.reveal, .reveal p, .reveal li, .reveal h3 { font-family: ' + t.b + ' !important; }';
document.head.appendChild(style);
// Update active state
document.querySelectorAll('.font-opt').forEach(function(el) {
el.classList.toggle('active', el.id === 'fopt-' + id);
});
closePanel('font');
_toast(t.name + ' aktiviert', 1800);
};
// ══ HINTERGRUNDFARBE ══
var _COLORS_KEY = 'pres_colors_v1';
var _COLOR_PRESETS = [
'#ffffff','#f8f7f4','#f0f4fd','#e8f5ee','#fdf6e3',
'#0c0f18','#163374','#1a3a1a','#2d2d2d','#f5e6d3'
];
function _renderColorPanel() {
var box = document.getElementById('color-swatches');
if (!box) return;
box.innerHTML = '';
_COLOR_PRESETS.forEach(function(c) {
var s = document.createElement('div');
s.className = 'color-swatch';
s.style.background = c;
s.style.border = c === '#ffffff' ? '2px solid #ddd' : '2px solid transparent';
s.title = c;
s.onclick = function() { applySlideColor(c); };
box.appendChild(s);
});
}
window.applySlideColor = function(color) {
var section = Reveal.getCurrentSlide();
var allSects = [...document.querySelectorAll('.reveal .slides > section')];
var idx = allSects.indexOf(section);
section.setAttribute('data-background-color', color);
try {
var c = JSON.parse(localStorage.getItem(_COLORS_KEY) || '{}');
c['s' + idx] = color;
localStorage.setItem(_COLORS_KEY, JSON.stringify(c));
} catch(e) {}
Reveal.sync();
};
window.clearSlideColor = function() {
var section = Reveal.getCurrentSlide();
var allSects = [...document.querySelectorAll('.reveal .slides > section')];
var idx = allSects.indexOf(section);
section.removeAttribute('data-background-color');
try {
var c = JSON.parse(localStorage.getItem(_COLORS_KEY) || '{}');
delete c['s' + idx];
localStorage.setItem(_COLORS_KEY, JSON.stringify(c));
} catch(e) {}
Reveal.sync();
};
function _restoreSlideColors() {
try {
var c = JSON.parse(localStorage.getItem(_COLORS_KEY) || '{}');
var sects = [...document.querySelectorAll('.reveal .slides > section')];
Object.keys(c).forEach(function(k) {
var idx = parseInt(k.slice(1));
var color = c[k];
if (sects[idx]) {
sects[idx].setAttribute('data-background-color', color);
}
});
if (Object.keys(c).length) Reveal.sync();
} catch(e) {}
}
// ══ FAB TOGGLE ══
var _fabOpen = false;
window.toggleFabCluster = function() {
_fabOpen = !_fabOpen;
document.getElementById('fab-cluster').classList.toggle('open', _fabOpen);
document.getElementById('fab-toggle').textContent = _fabOpen ? '✕' : '⚙';
if (!_fabOpen && _openPanel) closePanel(_openPanel);
};
// ══ PANELS ══
var _openPanel = null;
window.togglePanel = function(name) {
var el = document.getElementById('panel-' + name);
if (!el) return;
if (_openPanel && _openPanel !== name) {
var prev = document.getElementById('panel-' + _openPanel);
if (prev) prev.classList.remove('open');
}
el.classList.toggle('open');
_openPanel = el.classList.contains('open') ? name : null;
};
window.closePanel = function(name) {
var el = document.getElementById('panel-' + name);
if (el) el.classList.remove('open');
if (_openPanel === name) _openPanel = null;
};
// Close panels + fab on outside click
document.addEventListener('click', function(e) {
var inFab = e.target.closest('#fab-cluster');
var inPanel = e.target.closest('.ui-panel');
var inHome = e.target.closest('.home-btn');
if (_openPanel && !inPanel && !inFab && !inHome) closePanel(_openPanel);
if (_fabOpen && !inFab && !inPanel) {
_fabOpen = false;
document.getElementById('fab-cluster').classList.remove('open');
document.getElementById('fab-toggle').textContent = '⚙';
}
});
// ══ SPEICHERN ══
window.saveAllSettings = function() {
var settings = {
layout: _currentLayout,
font: _currentFontId,
styleId: localStorage.getItem('fal_presentation_style_id') || '',
stylePrompt: localStorage.getItem('fal_presentation_style_prompt') || '',
slideColors: JSON.parse(localStorage.getItem(_COLORS_KEY) || '{}'),
slideImages: JSON.parse(localStorage.getItem(_SLIDE_CACHE_KEY) || '{}'),
savedAt: new Date().toISOString()
};
// Download als JSON
var blob = new Blob([JSON.stringify(settings, null, 2)], { type: 'application/json' });
var a = document.createElement('a');
a.href = URL.createObjectURL(blob);
a.download = 'praesentation-einstellungen.json';
a.click();
_toast('Einstellungen gespeichert ✓', 2500);
};
// ══ INIT ══
Reveal.on('ready', function() {
_renderFontPanel();
_renderColorPanel();
setTimeout(function() {
_applyStoredLayout();
_restoreSlideColors();
applyFontTheme(_currentFontId);
}, 400);
});
// ══ DEPLOYMENT-EXPORT ══
// Erstellt ein ZIP mit statischer Präsentation (Bilder eingebettet, kein FAB),
// standalone.html, quellen.html und lokalen Schriften.
window.buildDeployment = async function() {
var deployBtn = document.getElementById('deploy-btn');
deployBtn.textContent = '…';
// JSZip dynamisch laden
if (!window.JSZip) {
await new Promise(function(resolve, reject) {
var s = document.createElement('script');
s.src = 'https://cdn.jsdelivr.net/npm/jszip@3.10.1/dist/jszip.min.js';
s.onload = resolve; s.onerror = reject;
document.head.appendChild(s);
});
}
var zip = new JSZip();
_toast('Deployment wird erstellt …', 10000);
// ── 1. Statische Präsentation ──
// Aktuellen DOM klonen, Werkzeuge entfernen
var clone = document.documentElement.cloneNode(true);
['#fab-cluster', '#panel-layout', '#panel-font', '#panel-color', '#img-toast'].forEach(function(sel) {
var el = clone.querySelector(sel); if (el) el.remove();
});
// API Key Script entfernen
clone.querySelectorAll('script').forEach(function(s) {
if (s.src && s.src.includes('API Key')) s.remove();
});
// Aktuelle Font-Theme-Styles als statisch einbetten (bereits im DOM)
zip.file('presentation/index.html', '<!DOCTYPE html>\n' + clone.outerHTML);
// ── 2. Schriften ──
var fontFiles = [
'fonts.css',
'barlow-condensed-600.woff2','barlow-condensed-700.woff2','barlow-condensed-800.woff2',
'bricolage-grotesque.woff2','caveat-brush.woff2','fraunces-normal.woff2','fraunces-italic.woff2',
'inter.woff2','satisfy.woff2','space-grotesk.woff2','syne.woff2',
'SpaceGrotesk-400.woff2','SpaceGrotesk-600.woff2','SpaceGrotesk-700.woff2',
'PlayfairDisplay-400.woff2','PlayfairDisplay-700.woff2','PlayfairDisplay-900.woff2'
];
for (var ff of fontFiles) {
try {
var r = await fetch('fonts/' + ff);
if (r.ok) zip.file('presentation/fonts/' + ff, await r.arrayBuffer());
} catch(e) {}
}
// ── 3. Artikel und Quellen ──
for (var pf of ['standalone.html', 'quellen.html']) {
try {
var r2 = await fetch('../' + pf);
if (r2.ok) zip.file(pf, await r2.text());
} catch(e) { console.warn('Nicht ladbar:', pf, e); }
}
// ── 4. Landingpage ──
var meta = document.title || 'Forschungsartikel';
zip.file('index.html', '<!DOCTYPE html>\n<html lang="de">\n<head>\n<meta charset="UTF-8"/>\n' +
'<meta name="viewport" content="width=device-width,initial-scale=1"/>\n' +
'<title>' + meta + '</title>\n' +
'<style>body{font-family:system-ui,sans-serif;max-width:680px;margin:4rem auto;padding:0 2rem;color:#222}' +
'h1{font-size:1.4rem;margin-bottom:.5rem}p{color:#666;margin-bottom:2rem}' +
'nav{display:flex;flex-direction:column;gap:.8rem}' +
'a{display:inline-block;padding:.7rem 1.2rem;background:#163374;color:#fff;text-decoration:none;border-radius:6px;width:fit-content}' +
'a:hover{background:#0f2456}</style>\n</head>\n<body>\n' +
'<h1>' + meta + '</h1>\n<p>Wähle einen Bereich:</p>\n<nav>\n' +
'<a href="standalone.html">📄 Artikel lesen</a>\n' +
'<a href="quellen.html">📚 Quelldatenbank</a>\n' +
'<a href="presentation/index.html">▶ Präsentation</a>\n' +
'</nav>\n</body>\n</html>');
// ── 5. ZIP herunterladen ──
var blob = await zip.generateAsync({ type: 'blob', compression: 'DEFLATE', compressionOptions: { level: 6 } });
var a = document.createElement('a');
a.href = URL.createObjectURL(blob);
a.download = 'deployment.zip';
a.click();
deployBtn.textContent = '⬇';
_toast('deployment.zip heruntergeladen ✓', 3000);
};
// ══ PPTX-EXPORT ══
// Erzeugt eine echte .pptx-Datei mit pptxgenjs — editierbar in PowerPoint/LibreOffice
window.exportPPTX = async function() {
var btn = document.getElementById('pptx-btn');
btn.textContent = '…';
_toast('PowerPoint wird erstellt …', 8000);
// pptxgenjs dynamisch laden
if (!window.PptxGenJS) {
await new Promise(function(resolve, reject) {
var s = document.createElement('script');
s.src = 'https://cdn.jsdelivr.net/npm/pptxgenjs@3.12.0/dist/pptxgen.bundle.js';
s.onload = resolve; s.onerror = reject;
document.head.appendChild(s);
});
}
var pptx = new PptxGenJS();
pptx.layout = 'LAYOUT_WIDE';
pptx.author = document.title || 'Forschungsartikel';
var sections = document.querySelectorAll('.reveal .slides > section');
for (var i = 0; i < sections.length; i++) {
var sec = sections[i];
var slide = pptx.addSlide();
// ── Hintergrundbild ──
var bgImg = sec.getAttribute('data-background-image');
var bgColor = sec.getAttribute('data-background-color');
var bgOpacity = parseFloat(sec.getAttribute('data-background-opacity') || '1');
if (bgImg) {
try {
var imgData = bgImg;
if (!bgImg.startsWith('data:')) {
imgData = await (async function(url) {
try {
var resp = await fetch(url);
var blob = await resp.blob();
return await new Promise(function(resolve) {
var reader = new FileReader();
reader.onloadend = function() { resolve(reader.result); };
reader.readAsDataURL(blob);
});
} catch(e) { return null; }
})(bgImg);
}
if (imgData) {
if (bgOpacity < 0.5) {
imgData = await (async function(dataUrl, opacity) {
return new Promise(function(resolve) {
var img = new Image();
img.onload = function() {
var c = document.createElement('canvas');
c.width = 1280; c.height = 720;
var ctx = c.getContext('2d');
ctx.fillStyle = '#fff';
ctx.fillRect(0, 0, 1280, 720);
ctx.globalAlpha = opacity;
ctx.drawImage(img, 0, 0, 1280, 720);
ctx.globalAlpha = 1;
resolve(c.toDataURL('image/jpeg', 0.92));
};
img.onerror = function() { resolve(dataUrl); };
img.src = dataUrl;
});
})(imgData, bgOpacity);
}
slide.background = { data: imgData };
} else {
slide.background = { color: bgColor ? bgColor.replace('#', '') : 'FFFFFF' };
}
} catch(e) {
slide.background = { color: 'FFFFFF' };
}
} else if (bgColor) {
slide.background = { color: bgColor.replace('#', '') };
} else {
slide.background = { color: 'FFFFFF' };
}
// ── Texte ──
var h1 = sec.querySelector('h1');
var h2 = sec.querySelector('h2');
var h3 = sec.querySelector('h3');
var pars = sec.querySelectorAll('p');
var lis = sec.querySelectorAll('li');
var yPos = 0.5;
if (h3) {
slide.addText(h3.textContent.trim(), {
x: 0.6, y: yPos, w: '80%', h: 0.4,
fontSize: 11, color: '888888', fontFace: 'Arial',
bold: true, charSpacing: 3, isTextBox: true
});
yPos += 0.45;
}
if (h1) {
slide.addText(h1.textContent.trim(), {
x: 0.6, y: yPos, w: '55%', h: 1.0,
fontSize: 32, color: '111111', fontFace: 'Arial',
bold: true, isTextBox: true, shrinkText: true
});
yPos += 1.1;
}
if (h2 && (!h1 || h2.textContent !== h1.textContent)) {
slide.addText(h2.textContent.trim(), {
x: 0.6, y: yPos, w: '55%', h: 0.6,
fontSize: 20, color: '163374', fontFace: 'Arial',
bold: true, isTextBox: true
});
yPos += 0.7;
}
if (lis.length > 0) {
var bullets = [];
lis.forEach(function(li) {
var text = li.textContent.trim();
if (text) bullets.push({ text: text, options: { fontSize: 14, color: '333333', bullet: { code: '2013' }, indentLevel: 0 } });
});
if (bullets.length > 0) {
slide.addText(bullets, {
x: 0.6, y: yPos, w: '55%', h: 5.5 - yPos,
fontFace: 'Arial', lineSpacingMultiple: 1.3,
valign: 'top', isTextBox: true, shrinkText: true
});
}
}
if (lis.length === 0 && pars.length > 0) {
var parTexts = [];
pars.forEach(function(p) { var t = p.textContent.trim(); if (t && t.length > 2) parTexts.push(t); });
if (parTexts.length > 0) {
slide.addText(parTexts.join('\n\n'), {
x: 0.6, y: yPos, w: '55%', h: 5.5 - yPos,
fontSize: 14, color: '333333', fontFace: 'Arial',
lineSpacingMultiple: 1.4, valign: 'top', isTextBox: true, shrinkText: true
});
}
}
}
var filename = (document.title || 'praesentation').replace(/[^a-zA-Z0-9äöüÄÖÜß\-_ ]/g, '').trim();
await pptx.writeFile({ fileName: filename + '.pptx' });
btn.textContent = '⬇P';
_toast('PowerPoint heruntergeladen ✓', 3000);
};
// ── Stil-Wechsel aus stile.html automatisch erkennen und Bilder neu generieren ──
window.addEventListener('storage', function(e) {
if (e.key === _LS_KEY + '_prompt' && e.newValue && e.newValue !== e.oldValue) {
IMG_STYLE = e.newValue;
var name = localStorage.getItem(_LS_KEY + '_name') || 'Neuer Stil';
_toast('Stil gewechselt: ' + name + ' — generiere Bilder …', 3500);
setTimeout(generateAllImages, 600);
}
});
</script>
</body>
</html>