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>
This commit is contained in:
2026-08-18 13:32:24 +02:00
parent 4bfb6539cb
commit 5655af81bf
6 changed files with 7038 additions and 5808 deletions
+8 -2
View File
@@ -103,8 +103,14 @@ HTML;
$html = preg_replace('/<link[^>]*rel=["\']icon["\'][^>]*>\s*/', '', $html);
}
// Favicon vor LETZTEM </head> einfügen (nicht in JS-Strings injizieren)
$headPos = strrpos($html, '</head>');
// Favicon vor dem ERSTEN </head> einfügen (= echter Dokumentkopf).
// WICHTIG: strpos (erstes), NICHT strrpos (letztes). Seiten wie teacher.html
// enthalten in Body-Skripten ein w.document.write('<html><head>…</head>…')
// (z.B. Ticket-Druck-Popup). Dessen </head> ist das LETZTE der Datei — strrpos
// hätte den mehrzeiligen Favicon-Block mitten in den einfach-gequoteten
// JS-String injiziert → „Invalid or unexpected token" → gesamtes Inline-Script
// tot. Das echte Kopf-</head> ist immer das erste.
$headPos = strpos($html, '</head>');
if ($headPos !== false) {
$html = substr($html, 0, $headPos) . $favicon . "\n" . substr($html, $headPos);
}