Commit Graph

167 Commits

Author SHA1 Message Date
Adminator b6b6c6ccce Weltkueche: Ei-Zweitherkunft AT = Deutschland+Niederlande (statt Slowakei)
- eier.correct_for.oesterreich: ["deutschland","niederlande"] (war ["slowakei"])
  -> AT-Ei-Gerichte zeigen jetzt AT + DE + NL (Thomas-Vorgabe: NL/DE sind die
  echten Import-Herkuenfte, SK spielt kaum Rolle). Gilt fuer alle 7 AT-Gerichte
  mit Ei; DE-Gerichte zeigen via Heuristik ohnehin schon DE + NL.
- buildTaskFor Heimat-Zweig: Distraktoren auf 5-correct.length gedeckelt, damit
  bei 3 richtigen Laendern trotzdem 5 Karten bleiben (Punkte-Norm).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-21 18:08:36 +02:00
Adminator c3e61f4da7 Weltkueche: Auflösungs-Aussage korrigiert + Admin-QA kennt correct_for
- Auflösung: „Das ist ein Gericht aus <Land> → Zutaten aus <Land>" nur noch bei
  ECHTEN Signatur-Zutaten (Tiroler Speck etc.). Grundzutaten (Butter, Mehl) bekommen
  die neutrale „aus der Nähe"-Begründung statt der falschen Gericht-Herkunft-Logik.
- admin-weltkueche.html: classify() respektiert jetzt correct_for (zeigt sonst falsche
  Herkünfte, z.B. Mehl AT+DE statt AT+Ungarn).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-21 11:50:07 +02:00
Adminator b353f25b07 Weltkueche Punktesystem: neue Formel (25 x verbleibende Falsche) + immer 5 Karten
- Auswahl auf IMMER 2 richtig + 3 Distraktoren (5 Karten) genormt (Welt-Zweig
  wuerfelte 2-4). Damit ist die Bewertung fair & vergleichbar.
- Punkte pro richtigem Klick = 25 x (noch verbleibende falsche Optionen).
  Frueh gefunden = mehr; jeder Fehlklick vorher senkt den Wert. Max 2x75 = 150,
  0 moeglich (alle falsch zuerst). 50er-Bonus entfaellt (150 = 75+75).
- Live-Feedback: schwebendes +75/+50/+25/+0 (gruen) bzw. "Fehlversuch -
  erreichbare Punkte sinken" (rot) bei jedem Klick.
- Banner/Interim/Onboarding-Text angepasst; trade-Abzeichen 3000 -> 2000
  (da Max jetzt 150 statt ~250 pro Zutat).
- BUGFIX: dasselbe richtige Land liess sich doppelt anklicken/zaehlen -> Guard.
Playwright-verifiziert: 5 Karten, 75+0(Guard)+75=150, 0 JS-Fehler.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-21 11:25:49 +02:00
Adminator bf2a4cd0d1 Weltkueche Herkunft: kuratierte AT-Zweitlieferanten + Distraktor-Fixes (Thomas-Review)
Neu: additives `correct_for[heimat]` in buildTaskFor — uebersteuert die Gravitations-
Schaetzung NUR bei kuratierten Zutaten (echte Handelsdaten), alles andere unveraendert.
- mehl→AT+Ungarn (Weizenimport 2023: HU 604k >> DE 41k), kartoffel→AT+Schweiz,
  eier→AT+Slowakei (Variation weg vom Dauer-AT+DE), majoran→AT+Deutschland (statt FR),
  safran→Spanien+Iran (statt IT mit 1 t), feta/lamm→Griechenland+Bulgarien (Balkan statt FR).
- Datenfixes gegen „echter Lieferant faelschlich als Distraktor": AT raus aus Mozzarella-
  climate_possible + als Produzent ergaenzt; CH raus aus Kartoffel-climate_possible +
  Produzent; SK als Eier-Produzent; Aegypten-Zwiebel local→global (echter kleiner Lieferant).
- Verifiziert: 7 kuratierte korrekt; keine Regression (DE-Gerichte nutzen weiter Algorithmus).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-20 21:36:48 +02:00
Adminator 4c0183f2e0 Weltkueche Zutaten-Review R2: Apfelstrudel/Sachertorte/Marillenknoedel/Schnitzel exakt nach Rezept
- Apfelstrudel: exakte Liste (Apfel, Zitrone, Butter, Mehl, Oel, Essig, Semmelbroesel,
  Zucker, Zimt, Rosinen, Rum, Staubzucker). Eier + Mandeln + Olivenoel raus.
- Sachertorte: Schokoladenkuvertuere statt Kakao, Kristall- + Staubzucker, Schlagobers
  (mit Hinweis: kommt DANEBEN, nicht in den Teig) statt Milch.
- Marillenknoedel: Topfenteig, Kartoffel raus.
- Wiener Schnitzel: Kalbfleisch, Mehl, Ei, Semmelbroesel, Butterschmalz (+ Zitrone,
  Erdaepfelsalat-Beilage). Pfeffer + Butter raus.
- 8 neue Zutaten: 3 Welt (Schokolade=Kakao-Herkunft, Kristallzucker=EU-Ruebe, Rum=Karibik),
  5 lokal (Semmelbroesel, Oel, Staubzucker, Butterschmalz, Schlagobers).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-20 21:23:56 +02:00
Adminator 0c4064bb58 Weltkueche Zutaten-Review (Thomas): echte kulinarische Fehler bei AT-Gerichten behoben
- Mediterrane Kraeuter RAUS bei Groestl, Kasnudeln, Wurzelfleisch, Kaesespaetzle, Schnitzel (unpassend).
- Olivenoel RAUS bei Wurzelfleisch + Apfelstrudel (untypisch).
- Mozzarella RAUS bei Kaesespaetzle -> echter neuer `bergkaese` (Vorarlberger Bergkaese; Herkunft AT + Schweiz statt faelschlich Italien).
- Hartweizen/Durum RAUS bei Marillenknoedel.
- Wiener Schnitzel Fleisch -> neuer `kalbfleisch` (ausschliesslich Kalb; Herkunft AT + Niederlande = EU-Nr.1 Kalbfleisch).
- Kasnudeln: neuer `minze` (Nudelminze, charakteristisch; Herkunft AT + Deutschland).
- 3 neue Zutaten in production-matrix mit realistischen Produzenten/Markt; Gravitation liefert plausible 2. Lieferanten (verifiziert).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-20 21:08:15 +02:00
Adminator 5d3cd1bdcf Fix: BASE_URL folgt dem echten Host (Glossar-Fetch auf v3) + Weltkueche „Nachbarland"-Wortlaut
- app.php: BASE_URL fuer *.geograsim.at war hart 'https://geograsim.at' -> auf
  v3.geograsim.at lud die Glossar-API cross-origin -> CORS/NetworkError
  ("Glossar konnte nicht geladen werden"). Jetzt BASE_URL='https://'.$host
  (same-origin auf jeder Umgebung; prod-neutral, geograsim.at bleibt gleich).
- weltkueche/game.html: Zweit-Lieferant hiess pauschal „Nachbarland" — Frankreich
  ist aber kein Nachbar Oesterreichs. Jetzt „europaeisches Land in unserer Naehe".

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-20 16:30:59 +02:00
Adminator 5b0505b140 Sonnensystem-Review: Finsternis-Geometrie-Fix + Vergleichsansichten + Anleitung + Photon-Skala
Aufgaben (observations.json):
- Finsternis-Bug behoben: Mond wurde siderisch statt synodisch positioniert -> Konstellation schief. Jetzt exakt Neumond (solar)/Vollmond (lunar) via moonPhaseTimeDays(). Sim-Detektor bestaetigt (Badge) SONNEN-/MONDFINSTERNIS.
- Pol-Aufgaben (Polartag/Polarnacht): Kamera -> neue erdzentrierte Draufsicht earth-top (Sonne geht am Pol nie unter/auf sichtbar).
- Mondphasen: Start bei Neumond (moonPhaseStart) passend zur Reihenfolge Neumond->zunehmend->Vollmond->abnehmend.
- Vergleichsansichten (Strahlen-Steilheit, Tag-Nacht-Gleiche, ohne Achsneigung): neue nahe Seitenansicht earth-side + Sommer/Winter- bzw. Maerz/Sept-Phasen + klare watchHints.
- "Was bewegt sich worum": Antwort praezisiert (Mond um die Erde).
- Apfel-Vergleich: 109 x (Leerzeichen), Erde = Mohnkorn (~1 mm), lange Striche raus, Distraktor Murmel angepasst.
- Photon: schwankende 8:20 erwaehnt, watchHint "mind. 30 s zaehlen + hochrechnen", Speed watchbarer.

game.html:
- Graue/unsichtbare Fact-/Onboarding-Texte: dunkle Lesefarbe gesetzt.
- Kameras earth-top + earth-side; obsApplyState-Fallback fuer button-lose Kameras.
- moonPhaseTimeDays(new|full) (synodisch, Anker Vollmond 3.1.).
- Anleitung-Button (Intro+Aufloesung) + Overlay: erklaert das Bedienfeld Schritt fuer Schritt.
- Photon-Skala unten: 8 Segmente (1/min), fuellt mit Fortschritt; Photon pulsiert die ganze Strecke.

Getestet mit Playwright: 0 JS-Fehler, Finsternis-Badges korrekt, Photon-Skala fuellt, alle DOM-Elemente da.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-20 12:04:53 +02:00
Adminator 5f603cb193 Tourismusregion: Umwelt beißt jetzt + Schüler-Erklärung (Balance-Pass 1)
Diagnose per headless-Sim-Harness (.dontDeploy/tools/tr-balance-harness.mjs):
„alles zubauen" senkte die Umwelt nur 75→50 (über der 45-Schwelle) und der
Exit-Umwelt-Malus war TOTER Flag-Code → man konnte der Umwelt kaum schaden.

- model.js: (1) Exit-Umwelt-Malus wirklich angewandt — env<60 zieht bei
  umweltbewussten Gästen Zufriedenheit ab (je tiefer, desto mehr). (2) Über-
  tourismus-Drift im 10-s-Takt: dichte Bebauung (>6 Bauwerke) + Verkehr zehren
  die Umwelt aus. (3) Einmalige Lern-Warnkarte, wenn Umwelt < 50 kippt.
- data.js: Naturschutzgebiet-Beschreibung klar (rettet die Umwelt +20, Natur-
  Attraktionen +15 %, sperrt Bauplätze — Naturschutz vs. Ausbau abwägen).
- main.js: Willkommenskarte erklärt die Umwelt-Mechanik für Schüler.

Messung nachher: „alles zubauen" → Umwelt 75→37 (unter 45), Umweltziel
verfehlt, Ø-Sterne fallen. Feintuning Sterne-Kurve/Ansprüche-Eskalation
bleibt für Thomas' Playtest (Game-Feeling headless nicht bewertbar).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-19 18:10:42 +02:00
Adminator d9f9f901a1 Logistik-Pause friert die Aktivzeit ein (Lehrer-Cockpit)
Problem: bei Pause lief die „Seit"-Zeit im Lehrer-Cockpit weiter, obwohl das
Spiel steht — live-client.js akkumulierte activeMs unabhängig vom Pause-Zustand.

- live-client.js: opt-in Pause-Unterstützung. window.__GGS_LIVE__.setPaused(bool)
  friert die activeMs-Buchhaltung ein (lastTickAt wird weiter aktualisiert, damit
  beim Fortsetzen nichts nachspringt). __paused zusätzlich im Heartbeat. Default
  aus → alle anderen Sims unberührt.
- logistik game.html: Pause-/Auto-Button ruft setPaused(mode==='pause').

Verifiziert (Playwright): activeMs 0→2000 (läuft) → 2000 (Pause eingefroren)
→ 3999 (Fortsetzen).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-19 15:12:50 +02:00
Adminator e23ebd960e Weltküche: Herkunft per Handels-Gravitation + Punktefix „alle falsch = 0"
- Zweit-Lieferant im Heimat-Zweig jetzt via Handels-Gravitation (Menge ÷
  Entfernung zur Heimat, Haversine über Länder-Koordinaten) statt roher
  Weltproduktion. AT-Eier → Deutschland (468 km) statt Frankreich (916 km),
  obwohl FR mehr Eier erzeugt. Distraktoren bleiben nie echte AT-Lieferanten.
  Verifiziert: Eier/Kartoffel/Milch → [Österreich, Deutschland]; alle 70
  Zutaten bauen fehlerfrei.
- Punktefix: Strafe pro Fehlklick = 100 ÷ Anzahl Distraktoren → „alle Falschen
  zuerst" ergibt IMMER 0 (bei 4 Distraktoren −25, bei 2 −50). Task-Banner
  zeigt die tatsächliche Strafe + „alle falsch zuerst = 0".

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-19 15:09:16 +02:00
Adminator 37f6238d05 Auth Phase 2: Session-Zugriffe kanalisieren (verhaltensneutral)
Vorbereitung für den JWT+Redis-Umschalter: alle verstreuten
$_SESSION['teacher_id'|admin_id']-Zugriffe laufen jetzt durch Session::-Helper,
damit der Backend-Tausch später EINE Datei (Session.php) ist statt 18 Stellen.

- Session.php: neue Admin-Helper adminId()/loginAdmin()/logoutAdmin()/
  requireAdmin() (mirror der Teacher-Helper). teacherId()/adminId() starten
  die Session jetzt lazy (Aufrufer müssen Session::start() nicht mehr).
- 18 Fundstellen kanalisiert (admin.php, admin-accounts, admin-modules,
  licenses, levels, waypoints, foto-upload, admin_gate, save_map).
- Country.php + app.php cockpit_href: über Session:: mit class_exists-Fallback
  (Bootstrap/Lib-Kontext, Session evtl. nicht geladen).

Verhaltensneutral: 14/14 Lint OK, Helper-Round-Trip 6/6 PASS, Live-Smoke
(admin status/modules/accounts/licenses) weist unauth. Requests wie bisher
mit 401/403 ab. AUTH_BACKEND bleibt 'session' — Live unverändert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-18 16:33:14 +02:00
Adminator db4b75c5e6 Tourismusregion Quick-Fixes: Startflow, Auto-Save, Lift-Talstation, iPad-Responsive
- Startbildschirm: Name/Klasscode-Felder entfernt (Kinder sind über die
  Plattform-Session identifiziert). Klick auf eine Wegkarte startet die
  Partie sofort — separater „Partie starten"-Button entfernt.
- Abschluss: „Ergebnis speichern"-Button entfernt; Speichern passiert schon
  automatisch am Partie-Ende (submitAssessment). Hinweis „automatisch
  gespeichert" ergänzt. btnSave-Listener null-sicher gemacht.
- Seilbahn: Talstation (Baukörper + Satteldach + Umlenkrad) ergänzt — der
  Lift-Anfang wirkte vorher „transparent".
- Responsive/iPad: Panels bekommen Höhen-Deckel + internes Scrollen (decken
  nie den ganzen Schirm zu). Neue Media-Query für iPad-Landscape (901–1200px
  / niedrige Höhe): kompaktere Panels, Graphen nach rechts-unten aus dem
  Info-Panel-Bereich. Sehr flache Screens blenden die Graphen aus.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-18 14:15:41 +02:00
Adminator 5655af81bf Lehrer-Observability + Weltküche-Inhalt + Wrapper-Fix + Passstraße
teacher.html: Menü „Live" → „Ergebnisse" mit Unteransichten
Tag·Aktuell·Vergleich·Gesamt (alte Ergebnisse-Ansicht ist jetzt „Gesamt").
Neue Kennzahl Qualität (grafischer richtig/falsch-Balken) in Aktuell +
Vergleich + Weltküche-Zeile, Gerichte-Zähler (Fleiß), Labels entschärft
(„Kritisch" → Stark/Solide/Viele Fehler).

Weltküche: korrekte Artikel (der/die/das) für alle 70 Zutaten in
production-matrix.json; verdrehten Herkunfts-Satz + Heimat-Banner neu und
marktbewusst (Ukraine-Distraktor ehrlich erklärt), „man"-Konstruktionen
für Singular/Plural.

_scripts.php: renderPage() injizierte Favicon per strrpos ins letzte
</head> — das lag in teacher.htmls printBatchTickets-JS-String → SyntaxError
zerschoss das ganze Inline-Script auf /teacher. Fix: strpos (erstes </head>).

tourismusregion: neue Karte passstrasse in maps-custom.json (Route bergauf
136 Punkte, 41 Bauslots) aus Editor-Export.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-18 13:32:24 +02:00
Adminator 4bfb6539cb Weltkueche Fundament: geschaffte Gerichte persistent (localStorage, Schueler-Reload) + Backend-Submit pro Gericht (Lehrer-Historie: score/correctClicks/wrongClicks/completed) + Fehler-Zaehler
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-18 12:38:03 +02:00
Adminator f6df2eb79f Teacher: Triage 'Nachfassen'->'Nicht aktiv'; Weltkueche live-state phase-Bug gefixt (zeigte immer 'forschen', jetzt 'Gericht X · Zutat Y/Z')
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-18 12:21:24 +02:00
Adminator ec102b7c36 Weltkueche Punkte-Regel: richtig +100, jeder Fehlklick -25 (progressiv, statt Flat 100/60); Regel im Task-Banner sichtbar; Heimat-Zweig 2 Korrekte (Heimat + 1 realistische)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-18 12:08:45 +02:00
Adminator 9ec7ad67f1 Weltkueche Heimat-Regel ehrlich: regionale Gerichte haben Heimat + realistische EU-Nachbar-Produzenten als korrekt (immer >=2 Optionen), ferne/klimafremde bleiben Distraktoren
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-18 12:02:22 +02:00
Adminator b9bcbf9198 Backend-Editoren admin-geschuetzt (admin_gate) + Admin-Hub auf Admin-Seite; save_map admin-oder-lehrer; foto-upload admin-bypass (PIN bleibt)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-18 11:54:08 +02:00
Adminator b0fe3fdf86 Tourismusregion: neues Passstrassen-Hintergrundbild (Photoshop, 1536x1024)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-17 19:40:26 +02:00
Adminator ad627331f0 Fix: save_map.php ruft Session::start() vor requireTeacher (Editor-Speichern schrieb nie in Datei, fiel immer auf Copy-Fallback zurueck)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-17 19:16:09 +02:00
Adminator 75511630c8 Tourismusregion: Talschleife-Startpunkt korrigiert (Route beginnt weiter links)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-17 19:14:09 +02:00
Adminator 81ba268ea8 Tourismusregion: Custom-Karte kreuzung ergaenzt (Routen + Bauslots aus Editor)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-17 16:33:45 +02:00
Adminator 1950542ae5 Tourismusregion: Custom-Karten talschleife + seerunde (Routen + Bauslots aus Editor)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-17 15:57:41 +02:00
Adminator 8b1088a070 Balancing: sonnensystem (Erst-Treffer-Bewertung, Loesung nicht aufdecken, Level-Badge) + energiemanager (echter Blackout an Netzfrequenz, Schwierigkeitsrampe)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-15 21:59:32 +02:00
Adminator 2984d93e7e Review-Batch P0: Sicherheit + Schueler-Ergebnisse + Assessments-Aufblaehung
Sicherheit:
- progress.php: IDOR geschlossen (student_id-Zweig verlangt Lehrer-Login + Klassenbesitz)
- licenses.php: ?admin=1 und generate nur noch fuer echten Admin; Collision-Retry mit Cap
- .htaccess: .env/.sh/.sql/.bak Deny (Defense-in-Depth)

Schueler-Ergebnisse (kritisch):
- sim-metrics.js + .ivm-CSS in schueler.html; renderOwnRunCard-Fallback zeigt jetzt
  Sterne + grafische Kennzahlen fuer die 9 bisher leeren Sims
- sim-metrics.js: klima final_budget als "Mio EUR" statt "EUR" (Faktor 10^6)

Skalierung:
- assessment.php: Zwischen-Pings (phase running/started) nicht mehr persistiert
- heli: 30-s-assessmentPing entfernt (Live-Zustand laeuft ueber Heartbeat)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-08-15 16:21:25 +02:00
Adminator 7915512195 Weltküche: DACH/EU-Priorität wiederhergestellt + Beschreibungen
Die Umstellung auf echte Menge hatte die EU-Priorität eingeebnet. Jetzt Stufen-
folge: EU-Nachbar (Hauptweg zu UNSEREM Markt, kurzer Weg) VOR fernem Welt-
Lieferant (nur wo es hier nicht wächst, z.B. Pfeffer→Vietnam+Brasilien) VOR
"Big Player, kommt kaum an" (world-far). Innerhalb einer Stufe zählt die Menge.

- MARKET_TIER {eu:0, global:1, world-far:2}
- explainChoice: EU-Antwort erklärt "aus EU-Binnenmarkt, kurzer Weg, kein Zoll";
  world-far-Fehlklick erklärt "weltweit groß, aber kaum im EU-Handel"
- "in dieser Runde"-Texte entfernt (Auswahl ist jetzt deterministisch)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 16:54:39 +02:00
Adminator e7453d9072 Weltküche: echte Hauptlieferanten statt Zufall + Einheiten-Fix
- Welt-Zutaten: die 2 tatsächlichen Hauptlieferanten nach Menge (Pfeffer →
  Vietnam+Brasilien, Kakao → Elfenbeinküste+Ghana) statt log-gewichtetem Zufall,
  der kleine Produzenten (Sri Lanka, Kambodscha) fast gleich oft zog
- Reihenfolge: „beliefert unseren Markt" (eu/global) vor „selten hier" (world-far)
- fmtTonnes: „220.000 t/Jahr" statt „220 Tsd t" (kindgerecht, kein SI-Kürzel kt),
  Mio mit deutschem Dezimalkomma („1,5 Mio t")

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 16:47:35 +02:00
Adminator 1c5356422c Weltküche: Heimat-Regel – Zutaten folgen dem Gericht statt Zufall
Löst "warum kommt Deutschland nicht vor?": In regionalen Gerichten kommt jede
Zutat, die das Herkunftsland selbst erzeugt, von dort (Tiroler Gröstl → Tiroler
Speck/Kartoffeln aus Österreich). Nur was hier nicht wächst (Pfeffer, Olivenöl)
reist von weit her – die eigentliche Lektion. Datengetrieben: Test "erzeugt das
Heimatland die Zutat?" filtert automatisch, kein Länder-Bias (hängt am Gericht).

- dishes.json: heimat (25 Gerichte) + signature-Labels (5); exotische ohne heimat
- buildTaskFor: Heimat-Regel sticht Zufall aus, wenn Heimatland Produzent ist
- Klick-Feedback beantwortet "warum nicht Deutschland?" direkt (showWrong/explainChoice)
- Auflösung erklärt Heimat-Logik + zeigt Antwort auch wenn kein Top-5-Produzent

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 15:56:55 +02:00
Adminator 305e3a62f8 Glossar-Review: CO2-Eintrag ganze Sätze + Tabelle, Geviertstrich→Gedankenstrich, Weltküche-Onboarding
- Glossar-Renderer: Markdown-Tabellen (|…|) + .gl-table CSS
- co2-fussabdruck-lebensmittel: telegrafische Liste → ganze Sätze + saubere
  Portions-Tabelle, Avocado-Vergleich, Malpunkt statt ×
- Programmweit „—" (Geviertstrich) → „–" (Gedankenstrich): Glossar-DB,
  glossar_examples, module_info, alle 13 Buch-Kapitel
- Weltküche-Onboarding: Blatt 2 umformuliert (zweites Land nacheinander),
  Blatt 3 Lehrplan-Satz entfernt, Blatt 4 fehlendes markt.webp generiert

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-19 15:15:29 +02:00
Adminator e7e0f922c7 Tourismustal: Kosten-Check - Realitaets-Quiz mit Bonus-Budget
Kostenwahrheit als Lernmoment statt Fussnote: Nach dem Erst-Bau von
Lift/Gondel/Hotel/Beschneiung/Bushaltestelle erscheint (Event-Pacing)
je einmalig ein Kosten-Check: Info mit echtem AT-Beispiel + Schaetzfrage
(mehr/weniger). Richtig = +2.000 Euro Bank-Bonus, falsch = nur die
Aufloesung. Verifizierte Zahlen: Leppleskofel-6er 12 Mio. (Dolomiten-
stadt), Patscherkofelbahn 58 geplant -> 83,2 Mio. bezahlt (Stadt Ibk),
WKO-Hotelrichtwerte 220-270k/Zimmer, Schneekanone 27-35k + 1 Mio./
Pistenkm, Ski Arlberg Tageskarte 81,50. Erster Check traegt den
Modell-Hinweis (Preise verkleinert, Verhaeltnisse stimmen).
Antwortrichtungen gemischt (3x mehr, 2x weniger). Quiz-Karten sind
Entscheidungen -> immer modal, auch im Audio-Modus.
Schulbuch Seite 2: Daten-Box 'Was kostet das wirklich?' + Meta-Aufgabe D
(Modellkompetenz) + Quellen 8-12. Modulseite: Vereinfachungs-Hinweis
in long_desc (SQL lokal+prod).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-13 01:14:55 +02:00
Adminator dbfb5be5a0 Schulbuch/Tourismustal: interner Pfad raus + oesterreichische Rechenzeichen
- Schulbuch-Quellenverzeichnis: interner Dateipfad (QUELLEN.md) entfernt -
  gehoert nicht in ein Schuelerdokument.
- Tagesbericht: Malpunkt (Mittelpunkt) statt x als Multiplikationszeichen -
  oesterreichische Schulschreibweise (neue Dauerregel: +, -, Malpunkt,
  : fuer Division in allen schueler-sichtbaren Rechnungen).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 17:40:28 +02:00
Adminator cf0afc5c02 Tourismusregion: Karten-Editor reaktiviert (mit Lehrer-Guard)
editor.html + js/editor.js aus der Quelle uebernommen. save_map.php
schreibt js/maps-custom.json (mit Auto-Backups) - jetzt abgesichert:
nur eingeloggte Lehrpersonen duerfen speichern. Das Spiel laedt die
Overrides beim Start (applyMapOverrides). Thomas fixt damit Routen-
Punkte und Bauplaetze; die Datei wird danach ins Repo uebernommen.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 16:55:36 +02:00
Adminator 6ca643f628 Tourismustal: iPad-Runde 3 - Performance, Touch-Bauvorschau, breite Overlays
- Performance ohne Sichtverlust: Retina-Faktor auf 1.5 gecappt (~45 %
  weniger GPU-Pixel), Framerate auf ~30 fps (Pause ohne Interaktion
  ~10 fps) - Simulation exakt, uebersprungene Zeit wird akkumuliert.
  iPad sollte deutlich kuehler bleiben.
- Touch-Bauvorschau: erster Tipp heftet die volle Vorschau (gruen/rot,
  Pisten-/Strecken-Korridor, Einflusskreise) an die Kachel, zweiter Tipp
  auf DIESELBE Kachel baut. Maus behaelt Hover + Sofortbau.
- Info-Overlays breiter (680px statt 440px) - weniger Scrollen.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 16:55:35 +02:00
Adminator d60bc2caff Tourismusregion: Hintergrundmusik (15 Tracks, 43 MB)
Getrennter Commit wegen Push-Groesse.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 01:14:13 +02:00
Adminator 8047778a5b Tourismusregion: Komplett-Integration (zweite neue Sim, beta)
Wellenbasierte Routen-Sim (DefensegeograSimMac) nach dem Tourismustal-
Playbook integriert: Sim nach App/sims/tourismusregion (game.html,
Sprites 47MB->9.5MB, ohne Eigen-Backend/Editor/Dashboard/Keys),
Plattform-Hooks (GGS_LIVE_STATE mit Welle/Budget/Umwelt/Sterne/Lenkung,
Submit bei Partie-Ende mit fertigem 0-100-Score, GGS_TUTORIAL, Home-
Button, Musik leise). Wrapper + Modul-Detailseite. SQL: module_info
(beta, Karte), Glossar-Kernbegriff Besucherlenkung (+Bild, Leichte
Sprache) + 12 Zuordnungen, Lehrplan-Mapping auf tourismus-
raumentwicklung (primaer) + verkehrserziehung/systemisches-denken.
LEHRPLAN.md mit Schwerpunkt Besucherlenkung & Mobilitaet. Lehrer-
Backend: Benchmark (Sim-Score direkt), Live-Cockpit-Spalten,
needsHelp, Highlights.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 01:14:12 +02:00
Adminator 778634fab6 Tourismustal: Editor-Export final - alle Gebaeude justiert
Letzte Runde: Panoramaweg, Bikepark-Station, Hochseilgarten,
Fahrradverleih (+Mega), Aussichtsplattform, Spielplatz, Mega-Spielplatz
(verkleinert auf 90/20) + 36 Solar-/Muelleimer-Positionen pro Stufe
(inkl. Rodelbahn). Komplette Sprite-Justierung damit fest im Code.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 00:59:19 +02:00
Adminator 41ecb4d5fe Tourismustal: Oeko-Marker Hochseilgarten ebenfalls Muelleimer
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 00:50:32 +02:00
Adminator ecc70a333d Tourismustal: Oeko-Marker Panoramaweg = Muelleimer statt Solarzelle
Ein Weg hat kein Dach - der gepflegte Muelleimer am Wegrand (rechte
Ecke) erzaehlt sanften Tourismus besser. Position weiter ueber den
Editor-Solar-Modus justierbar (gleiches SOLAR_POS-System).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 00:48:31 +02:00
Adminator acde652ee7 Tourismustal: Editor-Export Runde 3 (Badesee)
Badesee 47/22 + Solar-Positionen L1-L4.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 00:31:47 +02:00
Adminator 24ad893dd5 Tourismustal: Editor-Export Runde 2 + Mega-Wachstum vom Zentrum
- Justier-Werte bis Badesee: Personalhaus (47/17), Mega-Personalhaus
  (101/32), Mega-Badesee (84/31) + 12 Solar-Positionen pro Stufe.
- Mega-Stufen-Skalierung waechst jetzt vom MOTIV-ZENTRUM aus statt vom
  Boden-Anker (centerScale in _sprite) - die Mitte bleibt fix.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 00:30:25 +02:00
Adminator cff7c11853 Tourismustal: Editor-Export Runde 1 fest eingebacken
Thomas' Justier-Werte (2026-07-12) in SPRITE_DEFS + SOLAR_POS uebernommen:
Gasthaus/Rettungsstation/Bushaltestelle-Anker korrigiert, Mega-Hotel/
-Gasthaus/-Schneizentrale/-Spielplatz neu gesetzt, 40+ Solar-Positionen
pro Gebaeude UND Ausbaustufe (inkl. Lift/Gondel/Bus). Lift/Gondel-
Sprite-Werte bewusst ausgelassen (Vektor-Zeichnungen, wirkungslos).
Gilt jetzt fuer ALLE Geraete, nicht nur das Justier-iPad.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 00:25:13 +02:00
Adminator 6d00a762bc Tourismustal: Megabauwerke wachsen mit der Ausbaustufe
Mega-Sprites skalieren jetzt je Stufe: I=90%, II=100%, III=112%,
IV=124% (vorher fix 100%). Gilt fuer alle Mega-Typen.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 00:13:38 +02:00
Adminator b90abb31a4 Tourismustal: Mega nur fuer sinnvolle Gebaeude
Panoramaweg aus der Merge-Liste entfernt (Linien-Bauwerk). MERGEABLE
exportiert; Editor sperrt die Mega-Checkbox fuer alle nicht merge-
faehigen Typen (Bahnen, Bus, Bikepark, Rodelbahn, Panoramaweg,
Rettungsstation, Aufforsten, Plattform).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-12 00:11:03 +02:00
Adminator 20974b8b3b Tourismustal: Soziale Verantwortung (Personalhaus) + Editor-Fixes
- Personalhaus-Ausbau = Wohnqualitaet: zufriedenes Personal, freundlicher
  Service, +2/+4/+6 Gaeste-Zufriedenheit je Stufe (nur bei Beschaeftigten).
  Report-Zeile, Wissensbaustein (reale Saisonkraft-Unterkuenfte),
  BUILD_INFO + Audio neu, spezieller Ausbau-Toast. Glossar-Begriff
  soziale-verantwortung mit Bild + Modul-Zuordnung (SQL).
- Editor-Bugfix: _sprite las w/bottom aus der beim Laden eingefrorenen
  Kopie - Justierungen wirkten nicht. Jetzt live aus SPRITE_DEFS.
- Export-Button klargestellt: exportiert ALLE justierten Gebaeude auf einmal.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 23:48:47 +02:00
Adminator 250532f9a8 Tourismustal: Editor v2 (Ziehen statt Slider, Solar pro Stufe) + Bikepark-Vorschau
- Editor: Zieh-Modi direkt auf der Karte (Gebaeude: horizontal=Breite,
  vertikal=Boden-Anker; Solar: frei ziehen) + Pixel-Feinjustage per
  Plus/Minus-Tasten, grosse Live-Wertanzeige, Footprint-Hilfslinien.
- Solar-Position wird PRO AUSBAUSTUFE gespeichert (<key>@L<stufe>,
  Vererbung Stufe -> Sprite -> Default) - Renderer-Lookup erweitert.
- Bikepark zeigt beim Bauen die komplette Strecke talwaerts (5 Felder,
  pro Kachel gruen/rot je nach Belegbarkeit) - wie die Lift-Piste.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 23:43:32 +02:00
Adminator 272c5a7169 Tourismustal: Biker fahren richtig herum (Flip statt Vollrotation)
Bildschirm-Winkel bergab ist ~140 Grad - volle Rotation stellte die
Fahrer auf den Kopf bzw. aufs Vorderrad. Jetzt: Spiegelung nach
Fahrtrichtung + leichte Bergab-Neigung (Faktor 0.3).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 23:38:43 +02:00
Adminator cfdfa4bb28 Tourismustal: Sprite-Editor, Bikepark-Umbau, Animationen, Ambiente, Baumenue-Layout
- Justier-Editor (editor.html): jedes Gebaeude in allen Stufen, 1x1 und
  Mega-2x2, Oeko an/aus - Sprite-Breite, Boden-Anker und Solarpanel-
  Position (dx/dy/s pro Sprite-Key) live auf echten Tiles tunen. Werte
  wirken sofort via localStorage-Override, Export-JSON zum Einbacken.
- Bikepark umgebaut aufs Rodelbahn-Prinzip: 1x1-Station, Flowtrail-
  Strecke 5 Felder talwaerts mit Schwuengen, Platz wird SCHON BEIM BAU
  geprueft und reserviert (tile.bikeTrail blockiert Bebauung), fahrende
  Raeder mit Kurvenneigung (mehr Biker je Ausbaustufe), Ziel-Bogen.
- Animationen: Spielplatz (Schaukel + Rutscher), Hochseilgarten
  (Zipline-Gleiter), Aussichtsplattform (Foto-Blitz), Fahrradverleih
  (drehendes Werkstatt-Rad), Gasthaus (Kamin-Dampf).
- Ambiente: Wolkenschatten ziehen uebers Tal; Schafe auf Almen und
  Kuehe auf Talwiesen (grasen, deterministische Herdenplaetze, nicht
  im Winter).
- Baumenue-Karten: oben Titel+Info links / Preis rechts, darunter
  zweispaltig Icon und Beschreibung.
- Solar-Position pro Gebaeudetyp justierbar (SOLAR_POS).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 23:32:55 +02:00
Adminator d195b085d9 Tourismustal: Naturwert aktiv zurueckgewinnen (Oeko-Umbau + Aufforsten)
Antwort auf die Design-Frage 'Naturwert zurueck ausser weniger bauen':
- Oeko-Umbau pro Gebaeude (Button im Gebaeude-Dialog): einmalig, 40 % des
  Bauwerts, dafuer -20 % Betriebskosten, +2 Naturwert, Gebaeude belastet
  die taegliche Natur-Regeneration nicht mehr. Sichtbar: Solardach-Overlay
  (auch auf Megabauwerken, 1,6x). Didaktik: Investition vs. laufende
  Kosten, nachhaltiges Wirtschaften (GW 4.10).
- Aufforsten als wiederholbare Aktion im Baumenue (1.500 Euro): pflanzt
  Wald auf freie Wiese/Alm/Feld, +3 Naturwert, Werkzeug bleibt aktiv fuer
  Serien-Pflanzung. Wissen: Renaturierung + Schutzwald (1/3 des
  oesterreichischen Walds).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 18:16:40 +02:00
Adminator 328d542fdc Tourismustal: 2x2-Gebaeude korrekt im Painter (vorderste Kachel zeichnet)
Grosse Gebaeude wurden von davorliegenden Kacheln uebermalt (Grasbueschel
ueber dem Hotelfuss). Jetzt zeichnet die VORDERSTE Footprint-Kachel das
Sprite, Terrain-Details entfallen auf bebauten Kacheln, Sprite-Mitte =
Mitte der 4 Kacheln, w/bottom so dass der Fuss die vordere Spitze deckt.
SQL-Migration audio_info MySQL-kompatibel (information_schema-Guard statt
MariaDB IF NOT EXISTS - Prod ist echtes MySQL).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-11 18:10:46 +02:00