Sportfest-Ausgabe der Stadionzeitung zum Heimspiel gegen ATS Wartenfels
Neue Live-Seiten, geschaltet vom chat-gepflegten Feld `veranstaltung` (Slug aus data/veranstaltungen.json) — Programm und Turnierpläne kommen damit aus derselben Quelle wie die Website, nicht als Kopie ins Heft: - Programm-Seite (programm[], rendert zugleich auf /veranstaltungen/sportfest-2026) - vier Turnierplan-Seiten (turniere[]) mit leerer Ergebnisspalte und leerer Abschlusstabelle zum Eintragen am Platz - Gegnerseite je Mannschaft mit Heimspiel am Fest statt nur der tragenden: stadionzeitung_gegner_fixtures() ist die einzige Stelle, die das entscheidet, Seitenplanung und Snapshot lesen beide dort. `gegner` ist deshalb eine Map je Team-Key; die Vorschau überspringt jedes Spiel mit eigener Gegnerseite - Danke-Seite mit Partner-Logo-Wand aus data/partners.json und QR auf /partner-werden, dazu das Anzeigen-Feld `platzierung` für Motive mit festem Platz auf einer Live-Seite (Emons über der Logo-Wand). Vorher klebte der Dank als leere Fläche unten an einem Anzeigen-Bild - Cover einer Sonderausgabe: das Fest als Titelgeschichte statt einer der drei Begegnungen, dazu das Hauptplakat schräg gelegt an Stelle des Spielerfotos Ausgabe 2026-09-04-ats-wartenfels als ENTWURF angelegt, 48 Seiten (12 Bögen), Tabellen auf gerader Seite, längster Anzeigenblock zwei. Veröffentlicht wird auf dem Server, dort liegt der frische Matchcenter-Stand. Nebenbei behoben: bin/anzeige-add.php räumte beim Anlegen alle Motive weg, deren Slug mit demselben Text beginnt (`emons` löschte `emons-partnerdank` und `emons-stuebinger`). Muster jetzt auf die Breiten-Endung eingeschränkt. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KubsajzuV6N6QsSd3xKNjC
@@ -6097,6 +6097,25 @@ body.is-sz-full .back-to-top {
|
||||
}
|
||||
|
||||
|
||||
/* Titelgeschichte einer Sonderausgabe: das Fest statt der Begegnung. Coolvetica
|
||||
in Versalien wie der Masthead, aber kleiner — es soll die zweite Stimme auf
|
||||
dem Cover sein, nicht mit der Wortmarke konkurrieren. */
|
||||
.stadionzeitung-cover__feature {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
gap: 1.7cqi;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.stadionzeitung-cover__feature-title {
|
||||
font-family: var(--ff-heading);
|
||||
font-size: 13cqi;
|
||||
line-height: 0.88;
|
||||
text-transform: uppercase;
|
||||
text-shadow: 0 2px 10px rgb(0 0 0 / 0.5);
|
||||
}
|
||||
|
||||
/* Vereins-Hero-Bild als Hintergrund (dieselbe Quelle wie die Startseite). */
|
||||
.stadionzeitung-cover__bg {
|
||||
position: absolute;
|
||||
@@ -6135,6 +6154,63 @@ body.is-sz-full .back-to-top {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
/* Hauptplakat einer Sonderausgabe an der Stelle des Spielerfotos: rechts
|
||||
randabfallend, leicht schräg gelegt und an zwei gegenüberliegenden Ecken
|
||||
gerundet (links oben, rechts unten) — wie ein aufs Cover gelegter Aushang,
|
||||
nicht wie ein eingesetztes Bild (Felix, 03.09.2026).
|
||||
|
||||
Warum kleiner als das Spielerfoto (98cqi hoch): ein Freisteller ist schmal,
|
||||
ein Plakat im Hochformat ist bei gleicher Höhe knapp 60cqi breit und läge damit
|
||||
über der Typografie unten links. Bei 66cqi Höhe belegt es die rechte Bildhälfte
|
||||
und lässt Masthead und Fest-Titel frei — die Textspalte wird dafür schmaler
|
||||
(siehe --poster .stadionzeitung-cover__corner).
|
||||
|
||||
Schatten statt Rahmen, damit das Plakat auf dem Foto-Hintergrund abhebt:
|
||||
box-shadow ist unbedenklich, die Druck-Falle im Projekt betrifft text-shadow
|
||||
auf umbrechendem Text (siehe .stadionzeitung-cover__corner). */
|
||||
.stadionzeitung-cover__poster {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
/* VOLLSTÄNDIG im Bild, nicht randabfallend wie das Spielerfoto: ein Plakat
|
||||
trägt Text (Datum, Ort), und angeschnitten fehlte rechts genau der. Die
|
||||
Rotation lässt die Ecken trotzdem über die Passepartout-Linie laufen, das
|
||||
Plakat liegt also sichtbar „auf" der Seite. */
|
||||
/* Unten rechts randabfallend („angeschnitten", Felix 03.09.2026): das Plakat
|
||||
läuft über zwei Kanten hinaus und wirkt dadurch aufgelegt statt eingesetzt.
|
||||
Angeschnitten wird nur die untere rechte Ecke, nicht die Kopfzeile mit den
|
||||
Terminen — die bleibt lesbar. */
|
||||
right: -1.5cqi;
|
||||
/* bottom: 0 statt negativ — die Box endet an der Blattkante, angeschnitten
|
||||
wird nur noch die gedrehte Ecke (4 Grad auf 53cqi Breite = knapp 4cqi
|
||||
Überhang). Das hält den Anschnitt-Look und rückt das Plakat gleichzeitig
|
||||
aus dem unteren Bereich nach oben (Felix, 03.09.2026). */
|
||||
bottom: 0;
|
||||
/* Höhe ist NICHT frei wählbar: das Plakat darf die Textspalte links nicht
|
||||
berühren. Rechnung bei 4 Grad Drehung — belegte Breite = Höhe / 1,414
|
||||
(Hochformat) + sin(4°) × Höhe (Überhang der gedrehten Ecken) ≈ 0,78 × Höhe.
|
||||
Bei 72cqi sind das 56,2cqi; mit 1,5cqi Überhang rechts liegt die linke Kante
|
||||
bei 45,3% und die Textspalte endet bei 44%. Der Überhang ist bewusst winzig:
|
||||
vom Plakat bleiben so 97% sichtbar und seine Schlagzeile „Sportfest" steht
|
||||
ganz im Bild (Felix, 03.09.2026) — bei 9cqi Überhang fehlte rechts ein
|
||||
Siebtel und das Wort lief aus dem Bild. Angeschnitten wirkt es trotzdem,
|
||||
das macht die gedrehte Ecke unten. Höhe und Überhang hängen also
|
||||
zusammen: weiter nach links (kleinerer Überhang) heißt kleiner, größer
|
||||
heißt weiter nach rechts — oder die Textspalte muss schmaler
|
||||
(--poster .stadionzeitung-cover__corner). Nicht nur eine Zahl drehen. */
|
||||
height: 72cqi;
|
||||
width: auto;
|
||||
border-radius: 5cqi 0 5cqi 0;
|
||||
transform: rotate(4deg);
|
||||
box-shadow: 0 3cqi 6cqi rgb(0 0 0 / 0.45);
|
||||
}
|
||||
|
||||
/* Schmaler als das Standard-Cover (56cqi): das Plakat belegt die rechte Hälfte.
|
||||
„Sportfest 2026" bricht dadurch zweizeilig — auf einem Cover trägt das eher,
|
||||
als es schadet. */
|
||||
.stadionzeitung-cover--poster .stadionzeitung-cover__corner {
|
||||
max-width: 38cqi;
|
||||
}
|
||||
|
||||
.stadionzeitung-cover__inner {
|
||||
position: relative;
|
||||
z-index: 2;
|
||||
@@ -7452,6 +7528,225 @@ a.news-feature__link:hover .news-feature__more {
|
||||
color: var(--clr-accent);
|
||||
}
|
||||
|
||||
/* === stadionzeitung-programm (Live-Seite, Sportfest-Ausgabe) === */
|
||||
/* Tagesprogramm aus data/veranstaltungen.json → programm[] (dieselbe Liste wie
|
||||
die Website-Detailseite, hier fürs A5-Blatt gesetzt): je Tag ein Abel-Caps-
|
||||
Tagestitel, darunter Zeit | Titel. Die Zeit trägt links den roten Strich wie
|
||||
.veranstaltung-programm__zeit auf der Website — gleiche Sprache, andere
|
||||
Skala. Maße in cqi (Selbst-Containment, siehe .stadionzeitung-page). */
|
||||
/* Abstände bewusst straff: ein dreitägiges Fest bringt gut zwölf Punkte plus
|
||||
drei Tagestitel auf EIN A5-Blatt (gemessen: mit den üblichen 3.3cqi lief die
|
||||
Seite 59px über die Blattkante). Wer hier lockerer setzt, misst die
|
||||
Seitenhöhe nach. */
|
||||
.stadionzeitung-programm__tag {
|
||||
margin-bottom: 2.2cqi;
|
||||
}
|
||||
|
||||
.stadionzeitung-programm__tag:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.stadionzeitung-programm__tag-titel {
|
||||
margin-bottom: 0.9cqi;
|
||||
padding-bottom: 0.6cqi;
|
||||
border-bottom: 1px solid var(--clr-glass-border);
|
||||
font-family: var(--ff-body);
|
||||
font-weight: var(--fw-bold);
|
||||
font-size: 2.9cqi;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: var(--ls-caps);
|
||||
color: var(--clr-text-muted);
|
||||
}
|
||||
|
||||
.stadionzeitung-programm__liste {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.stadionzeitung-programm__punkt {
|
||||
display: grid;
|
||||
grid-template-columns: 11cqi minmax(0, 1fr);
|
||||
gap: 2.2cqi;
|
||||
align-items: baseline;
|
||||
padding-block: 0.5cqi;
|
||||
}
|
||||
|
||||
.stadionzeitung-programm__zeit {
|
||||
padding-left: 1.4cqi;
|
||||
border-left: 2px solid var(--clr-accent);
|
||||
font-family: var(--ff-body);
|
||||
font-weight: var(--fw-bold);
|
||||
font-size: 3.3cqi;
|
||||
font-variant-numeric: tabular-nums;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.stadionzeitung-programm__titel {
|
||||
display: block;
|
||||
font-size: 3.3cqi;
|
||||
line-height: 1.3;
|
||||
}
|
||||
|
||||
.stadionzeitung-programm__text {
|
||||
display: block;
|
||||
margin-top: 0.3cqi;
|
||||
font-size: 2.7cqi;
|
||||
line-height: 1.3;
|
||||
color: var(--clr-text-muted);
|
||||
}
|
||||
|
||||
/* === stadionzeitung-turnier (Live-Seite, Sportfest-Ausgabe) === */
|
||||
/* Ein Jugendturnier pro Blatt: Spielplan mit LEERER Ergebnisspalte
|
||||
(Schreiblinien) und leere Abschlusstabelle — das Blatt ist zum Eintragen am
|
||||
Platz gedacht, deshalb echte Schreibhöhe in den leeren Zellen. Eigenes Team
|
||||
wie league-table tr.is-own (rote Tönung + Abel-Fett). Tabellenmaße an
|
||||
.stadionzeitung-page .league-table angelehnt (2.7/2.3cqi). Der Modifier
|
||||
--dicht (ab neun Spielen, E-Jugend) rückt die Zeilen enger, sonst läuft die
|
||||
Abschlusstabelle über die Blattkante. */
|
||||
.stadionzeitung-turnier__label {
|
||||
caption-side: top;
|
||||
text-align: left;
|
||||
margin: 3.3cqi 0 1.2cqi;
|
||||
font-family: var(--ff-body);
|
||||
font-weight: var(--fw-bold);
|
||||
font-size: 2.9cqi;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: var(--ls-caps);
|
||||
color: var(--clr-text-muted);
|
||||
}
|
||||
|
||||
p.stadionzeitung-turnier__label:first-of-type {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.stadionzeitung-turnier__teams {
|
||||
font-size: 3.1cqi;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.stadionzeitung-turnier__spiele,
|
||||
.stadionzeitung-turnier__tabelle {
|
||||
width: 100%;
|
||||
border-collapse: collapse;
|
||||
font-size: 2.9cqi;
|
||||
font-variant-numeric: tabular-nums;
|
||||
}
|
||||
|
||||
.stadionzeitung-turnier__spiele thead th,
|
||||
.stadionzeitung-turnier__tabelle thead th {
|
||||
padding: 0.8cqi 0.9cqi;
|
||||
border-bottom: 1px solid var(--clr-glass-border-strong);
|
||||
font-family: var(--ff-body);
|
||||
font-weight: var(--fw-bold);
|
||||
font-size: 2.3cqi;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: var(--ls-caps);
|
||||
color: var(--clr-text-muted);
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.stadionzeitung-turnier__spiele td,
|
||||
.stadionzeitung-turnier__tabelle td {
|
||||
padding: 1cqi 0.9cqi;
|
||||
border-bottom: 1px solid var(--clr-glass-border);
|
||||
vertical-align: middle;
|
||||
line-height: 1.25;
|
||||
}
|
||||
|
||||
/* Dichte Variante ab neun Spielen: die E-Jugend spielt zehn Partien auf zwei
|
||||
Feldern und braucht darunter noch eine Tabelle mit fünf Zeilen. Mit den
|
||||
normalen Abständen lief das Blatt 69px über. Alle vier Stellen unten gehören
|
||||
zusammen — eine allein reicht nicht. */
|
||||
.stadionzeitung-turnier--dicht .stadionzeitung-turnier__spiele td {
|
||||
padding-block: 0.3cqi;
|
||||
}
|
||||
|
||||
/* Die Zeilenhöhe des Spielplans macht NICHT die Schriftgröße, sondern die
|
||||
Schreiblinie: sie ist das höchste Element in der Zeile. Bei zehn Spielen
|
||||
zählt deshalb nur diese Stelle (eine kleinere Schrift brachte gemessen
|
||||
einen einzigen Pixel). 2.8cqi sind auf A5 gut 4mm über der Linie, genug
|
||||
für zwei Ziffern mit dem Stift. */
|
||||
.stadionzeitung-turnier--dicht .stadionzeitung-turnier__blank {
|
||||
height: 2.8cqi;
|
||||
}
|
||||
|
||||
.stadionzeitung-turnier--dicht .stadionzeitung-turnier__tabelle td {
|
||||
padding-block: 0.6cqi;
|
||||
}
|
||||
|
||||
/* 4cqi Zellhöhe sind auf A5 knapp 6mm plus Innenabstand — genug, um Tore und
|
||||
Punkte mit dem Stift einzutragen, und es passt neben zehn Spielzeilen. */
|
||||
.stadionzeitung-turnier--dicht .stadionzeitung-turnier__tabelle td:empty {
|
||||
height: 4cqi;
|
||||
}
|
||||
|
||||
.stadionzeitung-turnier--dicht .stadionzeitung-turnier__label {
|
||||
margin: 1.8cqi 0 0.7cqi;
|
||||
}
|
||||
|
||||
.stadionzeitung-turnier--dicht .stadionzeitung-turnier__teams {
|
||||
font-size: 2.9cqi;
|
||||
line-height: 1.35;
|
||||
}
|
||||
|
||||
.stadionzeitung-turnier__nr {
|
||||
width: 6cqi;
|
||||
color: var(--clr-text-muted);
|
||||
}
|
||||
|
||||
.stadionzeitung-turnier__zeit {
|
||||
width: 9cqi;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.stadionzeitung-turnier__paarung {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.stadionzeitung-turnier__vs {
|
||||
color: var(--clr-text-muted);
|
||||
}
|
||||
|
||||
.stadionzeitung-turnier__team.is-own {
|
||||
padding-inline: 0.6cqi;
|
||||
border-radius: 0.6cqi;
|
||||
background: rgb(var(--clr-accent-rgb) / 0.16);
|
||||
font-weight: var(--fw-bold);
|
||||
}
|
||||
|
||||
/* Leere Ergebnisspalte: zwei Schreiblinien um den Doppelpunkt, unten
|
||||
ausgerichtet wie eine Zeile zum Ausfüllen. */
|
||||
.stadionzeitung-turnier__ergebnis {
|
||||
white-space: nowrap;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.stadionzeitung-turnier__blank {
|
||||
display: inline-block;
|
||||
width: 6cqi;
|
||||
height: 3.4cqi;
|
||||
border-bottom: 1px solid var(--clr-text-faint);
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
.stadionzeitung-turnier__colon {
|
||||
display: inline-block;
|
||||
padding-inline: 0.8cqi;
|
||||
font-weight: var(--fw-bold);
|
||||
}
|
||||
|
||||
/* Schreibhöhe der leeren Tabellenzellen (Platzierung wird von Hand eingetragen). */
|
||||
.stadionzeitung-turnier__tabelle td:empty {
|
||||
height: 5.6cqi;
|
||||
}
|
||||
|
||||
.stadionzeitung-turnier__tabelle th:nth-child(n + 3),
|
||||
.stadionzeitung-turnier__tabelle td:nth-child(n + 3) {
|
||||
width: 9cqi;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* === stadionzeitung-news (Live-Seite) === */
|
||||
/* Eigene Liste statt des geteilten news-feed von /news: feste Medienspalte
|
||||
(Wappen/Foto/Icon-Badge in EINER Größe), damit alle Titel bündig stehen —
|
||||
@@ -7864,6 +8159,57 @@ a.news-feature__link:hover .news-feature__more {
|
||||
color: var(--clr-text);
|
||||
}
|
||||
|
||||
/* === stadionzeitung-danke (Live-Seite) === */
|
||||
/* Dank an die Partner: oben die platzierte Anzeige (Motiv aus dem Seiteneintrag,
|
||||
siehe stadionzeitung-danke.php), darunter Kopf, Logo-Wand und der QR auf
|
||||
/partner-werden. Vier Logos pro Reihe in EINER festen Zellhöhe, damit
|
||||
unterschiedlich hohe Logos auf einer Linie sitzen — dieselbe Idee wie die
|
||||
feste Medienspalte auf der News-Seite. Maße in cqi (Selbst-Containment). */
|
||||
.stadionzeitung-danke {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 100%;
|
||||
}
|
||||
|
||||
.stadionzeitung-danke__anzeige {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
margin-bottom: 5cqi;
|
||||
border: 1px solid var(--clr-glass-border);
|
||||
}
|
||||
|
||||
.stadionzeitung-danke__head {
|
||||
margin-bottom: 3.3cqi;
|
||||
}
|
||||
|
||||
.stadionzeitung-danke__logos {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, minmax(0, 1fr));
|
||||
gap: 3.3cqi 2.5cqi;
|
||||
margin: 0 0 auto;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.stadionzeitung-danke__logo {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
/* Feste Zellhöhe: Logos sind teils quer, teils hoch — ohne sie tanzt die Reihe. */
|
||||
height: 11cqi;
|
||||
}
|
||||
|
||||
/* Logos liegen hier auf Weiß statt auf dem dunklen Website-Grund: contain statt
|
||||
cover, damit nichts beschnitten wird, und keine Tönung — ein Sponsorenlogo
|
||||
wird nicht umgefärbt. */
|
||||
.stadionzeitung-danke__logo img {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
width: auto;
|
||||
height: auto;
|
||||
object-fit: contain;
|
||||
}
|
||||
|
||||
/* === stadionzeitung-momente (Live-Seite, Heft-Abschluss) === */
|
||||
/* 2×2-Galerie der neuesten Instagram-Fotos + Folge-uns-Ticket — quadratische
|
||||
Kacheln wie im Instagram-Raster, bewusst ohne Bildunterschriften: die
|
||||
|
||||
BIN
public/assets/img/anzeigen/emons-1141.jpg
Normal file
|
After Width: | Height: | Size: 137 KiB |
BIN
public/assets/img/anzeigen/emons-480.jpg
Normal file
|
After Width: | Height: | Size: 36 KiB |
BIN
public/assets/img/anzeigen/emons-960.jpg
Normal file
|
After Width: | Height: | Size: 103 KiB |
|
Before Width: | Height: | Size: 207 KiB |
|
Before Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 108 KiB |
|
After Width: | Height: | Size: 579 B |
|
After Width: | Height: | Size: 398 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 222 KiB |
|
After Width: | Height: | Size: 1.9 MiB |
|
After Width: | Height: | Size: 224 KiB |
|
After Width: | Height: | Size: 804 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 6.7 KiB |
|
Before Width: | Height: | Size: 425 B After Width: | Height: | Size: 440 B |
|
Before Width: | Height: | Size: 430 B After Width: | Height: | Size: 431 B |
|
Before Width: | Height: | Size: 421 B After Width: | Height: | Size: 424 B |
|
Before Width: | Height: | Size: 427 B After Width: | Height: | Size: 421 B |
|
Before Width: | Height: | Size: 503 B After Width: | Height: | Size: 497 B |
|
Before Width: | Height: | Size: 505 B After Width: | Height: | Size: 496 B |
|
Before Width: | Height: | Size: 426 B After Width: | Height: | Size: 426 B |