Stadionzeitung, Veranstaltungen, News-Artikel, Lightbox und Anzeigen-Verteilung

Stadionzeitung: Live-Seiten (Tabellen, Ergebnisse, Vorschau, Termine, News,
Kontakt, Historie, Sportheim, Partner, Momente, Impressum), automatisches Cover,
Swipe-Viewer mit Vollbildmodus und die Druckfassung als Falt-Heft. Anzeigen
kommen jetzt aus dem Bestand und werden gleichmäßig verteilt, nie mehr als zwei
hintereinander (vorher vier Blöcke à fünf). Die Doppelseiten-Regel rechnet das
Skript selbst, statt sie von Hand zu prüfen.

Veranstaltungen: Bereich /veranstaltungen mit Detailseite pro Fest, Lebenszyklus
über das Datum (Ankündigung vor dem Fest, Rückblick danach), Galerie mit
Lightbox. veranstaltungen.json ist dritte Termin-Quelle, damit ein Fest nie
doppelt gepflegt wird.

News-Artikel als dritte dynamische Prefix-Route, gemeinsamer detail-head.

Behobene Fehler:
- Wappen-Kontexte setzten Zeilen-Layout auf .crest statt auf die Zeile; das
  Wappen wurde zum Grid, Vereinsname und Tore rutschten darunter zusammen
  (Ergebnis-Rückblick, Vorschau, Cover).
- --header-h (60px) unterschätzt die Kopfleiste um 32px (Logo 72px + 20px
  Versatz): neues abgeleitetes --header-space, sonst klebten Zurück-Links
  unter dem Logo.
- base_url in der Produktions-Config ohne www, während .htaccess auf www
  umleitet; preflight prüft das jetzt.
- .lightbox brauchte display:none mit (0,2,0), sonst lag das Overlay offen.

Neue Werkzeuge: bin/anzeige-add.php (Anzeigen-Bestand), bin/veranstaltung-bilder.php
(Plakate und Galerien, Alt-Texte folgen der Quelldatei), bin/qr.php (Druck-QR mit
Warnung, wenn base_url nicht auf die echte Domain zeigt).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NzeVVgMCrzCDJAKeLEdKr7
This commit is contained in:
2026-07-31 14:55:27 +02:00
parent 3fb480dd78
commit a101b0c3ec
861 changed files with 75244 additions and 487 deletions

View File

@@ -0,0 +1,26 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="flag-icons-tj" viewBox="0 0 512 512">
<path fill="#060" d="M0 0h512v512H0z"/>
<path fill="#fff" d="M0 0h512v365.7H0z"/>
<path fill="#c00" d="M0 0h512v146.3H0z"/>
<g fill="#f8c300" transform="translate(-256) scale(.73143)">
<path d="M672 340.7a12.5 12.5 0 0 1 23.3 5.9v50h9.4v-50a12.5 12.5 0 0 1 23.3-5.9 29.5 29.5 0 1 0-56 0"/>
<path fill="#fff" d="M678.7 327.6a20 20 0 0 1 21.3 9.6 20 20 0 0 1 21.3-9.6 21.5 21.5 0 0 0-42.6 0"/>
<path id="a" d="M695.3 376.6a38 38 0 0 1-63.8 24.3 39.5 39.5 0 0 1-59.8 17.5c3.7 36.4 58.3 29 62.3-6.4 17.2 30.1 55 21.5 66-15.4z"/>
<use xlink:href="#a" width="100%" height="100%" transform="matrix(-1 0 0 1 1400 0)"/>
<path id="b" d="M658.8 441.3c-7.6 16.5-22.8 19.3-36.1 6 0 0 5.3-3.8 11-4.8a18 18 0 0 1 4.3-14.3 22 22 0 0 1 9 11.8c8-1 11.8 1.3 11.8 1.3z"/>
<use xlink:href="#b" width="100%" height="100%" transform="rotate(9.4 700 804)"/>
<use xlink:href="#b" width="100%" height="100%" transform="rotate(18.7 700 804)"/>
<path fill="none" stroke="#f8c300" stroke-width="16" d="M603 478a340 340 0 0 1 194 0"/>
<g transform="translate(700 380)">
<g transform="translate(0 -140)">
<path id="c" d="m488533-158734-790463 574305L0-513674l301930 929245-790463-574305z" transform="scale(.00005)"/>
</g>
<g id="d">
<use xlink:href="#c" width="100%" height="100%" transform="translate(-70 -121.2)"/>
<use xlink:href="#c" width="100%" height="100%" transform="translate(-121.2 -70)"/>
<use xlink:href="#c" width="100%" height="100%" transform="translate(-140)"/>
</g>
<use xlink:href="#d" width="100%" height="100%" transform="scale(-1 1)"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB