diff --git a/app/components/img.php b/app/components/img.php index 180477d..eec900a 100644 --- a/app/components/img.php +++ b/app/components/img.php @@ -4,7 +4,9 @@ declare(strict_types=1); /** * Responsives Bild aus Varianten-Set ODER Einzeldatei. Props: - * $image array{base: string, widths: int[], alt: string} — Varianten -.jpg + * $image array{base: string, widths: int[], alt: string, ext?: string} — Varianten + * -., Default-Endung jpg. ext: 'png' für freigestellte Motive, + * deren Transparenz JPG zerstören würde (Spielerfoto auf dem Cover). * ODER array{src: string, width: int, height: int, alt: string} — Originaldatei 1:1 * $sizes string (optional, default '100vw') * $eager bool (optional) — above the fold: eager + fetchpriority high @@ -24,15 +26,16 @@ if (!empty($image['src'])): ?> $widths = $image['widths']; $largest = max($widths); +$ext = strtolower((string) ($image['ext'] ?? 'jpg')); $srcset = implode(', ', array_map( - static fn (int $w): string => asset("{$image['base']}-{$w}.jpg") . " {$w}w", + static fn (int $w): string => asset("{$image['base']}-{$w}.{$ext}") . " {$w}w", $widths )); // Maße der größten Variante für width/height (CLS-Vermeidung). -[$w, $h] = (function () use ($image, $largest): array { +[$w, $h] = (function () use ($image, $largest, $ext): array { static $dims = []; - $file = PUBLIC_PATH . "/assets/{$image['base']}-{$largest}.jpg"; + $file = PUBLIC_PATH . "/assets/{$image['base']}-{$largest}.{$ext}"; $key = $file; if (!isset($dims[$key])) { $size = is_file($file) ? (getimagesize($file) ?: [0, 0]) : [0, 0]; @@ -42,7 +45,7 @@ $srcset = implode(', ', array_map( })(); ?> - src="" + src="" srcset="" sizes="" alt="" diff --git a/app/components/stadionzeitung-cover.php b/app/components/stadionzeitung-cover.php index 500c744..e750af6 100644 --- a/app/components/stadionzeitung-cover.php +++ b/app/components/stadionzeitung-cover.php @@ -81,7 +81,24 @@ $teaser = trim((string) ($issue['interview']['teaser'] ?? '')); $heroImage, 'sizes' => '480px', 'class' => 'stadionzeitung-cover__bg']); ?> - + $playerImage, 'width' => 0, 'height' => 0, 'alt' => '']; +?> + $playerBild, + 'class' => 'stadionzeitung-cover__player', + 'sizes' => '(max-width: 600px) 50vw, 240px', + ]); ?>
diff --git a/app/helpers.php b/app/helpers.php index ca68cc7..c41167e 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -208,8 +208,15 @@ function img_intrinsic_attrs(string $rel): string * Kernlogik von bin/img-resize.php (CLI-Wrapper) und bin/stadionzeitung-add.php * (ruft das direkt im Loop auf, ohne 22× einen Subprozess zu starten). * Rückgabe: [['width' => int, 'height' => int, 'file' => string, 'bytes' => int], …]. + * + * $alpha = true schreibt stattdessen -.png und erhält die + * Transparenz — nötig für freigestellte Motive (Spielerfoto auf dem + * Stadionzeitungs-Cover), bei denen JPG die Freistellung gegen Schwarz wegrechnen + * würde. $quality gilt dann nicht (PNG ist verlustfrei). Der Default bleibt JPG, + * weil bestehende Aufrufer PNG-Quellen absichtlich zu JPG verkleinern und deren + * Pfade in den data/*.json auf .jpg zeigen. */ -function resize_image_variants(string $src, string $destBase, array $widths, int $quality = 78): array +function resize_image_variants(string $src, string $destBase, array $widths, int $quality = 78, bool $alpha = false): array { $image = match (strtolower(pathinfo($src, PATHINFO_EXTENSION))) { 'jpg', 'jpeg' => imagecreatefromjpeg($src), @@ -229,9 +236,25 @@ function resize_image_variants(string $src, string $destBase, array $widths, int $w = min((int) $width, $srcW); // nie hochskalieren $h = (int) round($srcH * $w / $srcW); $frame = imagecreatetruecolor($w, $h); + + if ($alpha) { + // Transparenz retten: ohne Blending kopieren (sonst rechnet GD den + // Alphakanal gegen Schwarz weg) und die Fläche vorher transparent füllen. + imagealphablending($frame, false); + imagesavealpha($frame, true); + $leer = (int) imagecolorallocatealpha($frame, 0, 0, 0, 127); + imagefilledrectangle($frame, 0, 0, $w, $h, $leer); + } + imagecopyresampled($frame, $image, 0, 0, 0, 0, $w, $h, $srcW, $srcH); - $file = "{$destBase}-{$w}.jpg"; - imagejpeg($frame, $file, $quality); + + if ($alpha) { + $file = "{$destBase}-{$w}.png"; + imagepng($frame, $file, 9); + } else { + $file = "{$destBase}-{$w}.jpg"; + imagejpeg($frame, $file, $quality); + } $out[] = ['width' => $w, 'height' => $h, 'file' => $file, 'bytes' => (int) filesize($file)]; } diff --git a/bin/stadionzeitung-add.php b/bin/stadionzeitung-add.php index 9311efb..6a39e9c 100644 --- a/bin/stadionzeitung-add.php +++ b/bin/stadionzeitung-add.php @@ -481,23 +481,49 @@ if ($total % 4 !== 0) { $log("Seitenzahl {$total} ist kein Vielfaches von 4 — die Druckfassung füllt mit " . (4 - $total % 4) . ' weißen Seiten auf. Besser gemeinsam lösen (z. B. eine Anzeige mehr).', 'WARN'); } -// --- Spielerfoto fürs Cover: unverändert kopieren (kein resize_image_variants(), -// das würde über imagejpeg() die Transparenz zerstören — Felix liefert bereits -// ein web-taugliches Foto). Optional, kein Fehlschlag bei Fehlen. --- +// --- Spielerfoto fürs Cover: zuschneiden UND verkleinern. --- +// Hier stand früher „unverändert kopieren, Felix liefert bereits ein web-taugliches +// Foto" — die Annahme stimmte nicht. Das Hutschdorf-Foto hatte 2584x5093 Pixel und +// 12 MB; iOS Safari verwirft Bilder, deren dekodierte Größe sein Budget übersteigt +// (hier gut 53 MB), und auf einer Ausgabe liegen rund 86 Bilder. Ergebnis: das Cover +// blieb am iPhone leer, während Chrome am Desktop es zeigte (31.07.2026). +// Dargestellt wird das Foto mit 98cqi Höhe, bei 480px Seitenbreite also etwa +// 238x470 CSS-Pixel — die 1000er Variante deckt Druck und dreifache Pixeldichte ab. +// resize_image_variants() erhält bei $alpha = true die Freistellung (PNG statt JPG). +// Optional, kein Fehlschlag bei Fehlen. $playerImage = null; if ($spieler !== null) { $ext = strtolower(pathinfo($spieler, PATHINFO_EXTENSION)); - $playerDest = "{$destDir}/spieler.{$ext}"; - // PNG: auf den Inhalt zuschneiden (Freistellungen kommen oft mit viel - // leerem Rand aus dem Export-Tool). Andere Formate (kein Alpha) unverändert. - $copied = $ext === 'png' - ? crop_transparent_png_to_content($spieler, $playerDest) - : copy($spieler, $playerDest); - if ($copied) { - $playerImage = "img/stadionzeitung/{$slug}/spieler.{$ext}"; - $log('Spielerfoto übernommen' . ($ext === 'png' ? ' (auf Inhalt zugeschnitten).' : ' (unverändert kopiert).')); - } else { - $log("Spielerfoto konnte nicht kopiert werden: {$spieler}", 'WARN'); + $istPng = $ext === 'png'; + // PNG: erst auf den Inhalt zuschneiden (Freistellungen kommen oft mit viel + // leerem Rand aus dem Export-Tool), dann verkleinern. Der Zuschnitt geht in eine + // Zwischendatei, damit das riesige Original nicht im Ausgaben-Ordner landet. + $quelle = $spieler; + $tmpCrop = "{$destDir}/spieler-zuschnitt.png"; + if ($istPng && crop_transparent_png_to_content($spieler, $tmpCrop)) { + $quelle = $tmpCrop; + } + try { + $varianten = resize_image_variants($quelle, "{$destDir}/spieler", [320, 640, 1000], 82, $istPng); + $playerImage = [ + 'base' => "img/stadionzeitung/{$slug}/spieler", + 'widths' => array_map(static fn (array $v): int => $v['width'], $varianten), + 'ext' => $istPng ? 'png' : 'jpg', + 'alt' => '', + ]; + $groesse = array_sum(array_map(static fn (array $v): int => $v['bytes'], $varianten)); + $log(sprintf( + 'Spielerfoto übernommen: %d Varianten%s, zusammen %.1f MB (Original %.1f MB).', + count($varianten), + $istPng ? ' mit Transparenz, auf Inhalt zugeschnitten' : '', + $groesse / 1048576, + filesize($spieler) / 1048576 + )); + } catch (Throwable $e) { + $log("Spielerfoto konnte nicht verarbeitet werden: {$spieler}", 'WARN'); + } + if (is_file($tmpCrop)) { + unlink($tmpCrop); } } diff --git a/data/stadionzeitung.json b/data/stadionzeitung.json index 49b334e..7723d26 100644 --- a/data/stadionzeitung.json +++ b/data/stadionzeitung.json @@ -1,1140 +1,1149 @@ { - "issues": [ + "issues": [ + { + "slug": "2026-08-01-sv-hutschdorf", + "opponent": "SV Hutschdorf", + "date": "2026-08-01", + "team_key": "erste-mannschaft", + "status": "veroeffentlicht", + "pages": 40, + "player_image": { + "base": "img/stadionzeitung/2026-08-01-sv-hutschdorf/spieler", + "widths": [ + 320, + 640, + 1000 + ], + "ext": "png", + "alt": "" + }, + "qr_image": "img/stadionzeitung/2026-08-01-sv-hutschdorf/qr.png", + "vorwort": { + "heading": "Herzlich willkommen im Katzbachtal!", + "paragraphs": [ + "Liebe Fußballfreunde,", + "herzlich willkommen im Katzbachtal! Ein besonderer Gruß gilt dem Schiedsrichtergespann und unseren Gästen vom SV Hutschdorf.", + "Nach der Vorbereitung und dem furiosen 4:0-Auswärtssieg zum Auftakt in der Kreisklasse wollen wir nun auch unser erstes Heimspiel erfolgreich gestalten. Ein Heimsieg vor eigenem Publikum wäre die perfekte Fortsetzung!", + "Leidenschaft, Wille, Heimsieg: los geht's!" + ], + "closing": "Rot-schwarze Grüße", + "signee_name": "Benedikt Höfner", + "signee_role": "Sportlicher Leiter" + }, + "interview": { + "teaser": "Unser Trainer Ali Kilic über die Neuzugänge der Saison", + "heading": "Drei Fragen an Ali Kilic", + "person_name": "Ali Kilic", + "person_role": "Trainer 1. Mannschaft", + "intro": null, + "fragen": [ + { + "frage": "Ali, wie bewertest du unsere Neuzugänge für die neue Saison?", + "antwort": "Sehr positiv. Philipp bringt uns im zentralen Mittelfeld saubere Technik, gutes Passspiel und einen starken rechten Fuß. Nur bei Dynamik und Sprints fügt er sich nahtlos in unseren Mannschaftsdurchschnitt ein. Michael muss man hier keinem vorstellen: offensiv, ehrgeizig, leidenschaftlich. Mit 43 hat er mehr Feuer als mancher mit 20. Und Basti Groß hatte die Fußballschuhe eigentlich schon an den Nagel gehängt. Jetzt holt er sie wieder runter und greift in der Offensive mit an." + }, + { + "frage": "Was erwartet uns heute gegen den SV Hutschdorf?", + "antwort": "Ein richtig unangenehmer Gegner. Hutschdorf ist letzte Saison nur knapp am Aufstieg vorbeigeschrammt, und wir rechnen damit, dass sie wieder oben mitspielen. Verstecken müssen wir uns aber nicht. Wichtig ist, dass wir auf uns schauen, an unserer Fitness arbeiten und die vollen 90 Minuten sauber durchziehen. Dann ist heute einiges möglich." + }, + { + "frage": "Dein Wunsch für die Saison?", + "antwort": "Eine sorgenfreie Saison, in der alle gesund bleiben. Und dass wir unsere Spielidee durchziehen: das Spiel aktiv gestalten, mit Ballbesitz und mutigem Pressing. Wenn wir das Katzbachtal dann noch zur Festung machen, bin ich sehr zufrieden." + } + ], + "photo": "img/persons/ali-kilic.jpg" + }, + "verfasser_photo": { + "base": "img/stadionzeitung/2026-08-01-sv-hutschdorf/verfasser", + "widths": [ + 120, + 222 + ], + "alt": "" + }, + "termine_snapshot": [ { - "slug": "2026-08-01-sv-hutschdorf", - "opponent": "SV Hutschdorf", - "date": "2026-08-01", + "date": "2026-08-02", + "date_end": null, + "title": "Frühschoppen zur Kulmbacher Bierwoche", + "department": "verein", + "type": "event", + "meta": "09:30 Uhr · Kulmbacher Ecke, Kulmbacher Bierwoche", + "href": null, + "time": "09:30", + "location": "Kulmbacher Ecke, Kulmbacher Bierwoche", + "raw": { + "slug": "bierfest-fruehschoppen-2026", + "title": "Frühschoppen zur Kulmbacher Bierwoche", + "date_start": "2026-08-02", + "date_end": null, + "time": "09:30", + "department": "verein", + "text": "Unser traditioneller Frühschoppen im Rahmen der Kulmbacher Bierwoche.", + "location": "Kulmbacher Ecke, Kulmbacher Bierwoche" + } + }, + { + "date": "2026-08-07", + "date_end": null, + "title": "(SG1) TSV Melkendorf III/ TSV 08 Kulmbach II – SV Lanzendorf II flex", + "department": "fussball", + "type": "spiel", + "meta": "Heimspiel · Reserve BK 5 BT-KU", + "href": "/matchcenter", + "kickoff": "2026-08-07T18:30", + "team_name": "2. Mannschaft", + "league": "Reserve BK 5 BT-KU", + "raw": { + "kickoff": "2026-08-07T18:30", + "date_display": "Fr, 07.08.", + "time_display": "18:30 Uhr", + "competition": "Liga", + "home": "(SG1) TSV Melkendorf III/ TSV 08 Kulmbach II", + "away": "SV Lanzendorf II flex", + "home_crest": "img/crests/00ES8GNK4O000002VV0AG08LVUPGND5I.png", + "away_crest": "img/crests/00ES8GNK3G000017VV0AG08LVUPGND5I.png", + "is_home": true, + "team_key": "zweite-mannschaft", + "team_name": "2. Mannschaft" + } + }, + { + "date": "2026-08-08", + "date_end": null, + "title": "SpVgg Wonsees – TSV 08 Kulmbach", + "department": "fussball", + "type": "spiel", + "meta": "Auswärtsspiel · Kreisklasse", + "href": "/matchcenter", + "kickoff": "2026-08-08T18:00", + "team_name": "1. Mannschaft", + "league": "Kreisklasse", + "raw": { + "kickoff": "2026-08-08T18:00", + "date_display": "Sa, 08.08.", + "time_display": "18:00 Uhr", + "competition": "Liga", + "home": "SpVgg Wonsees", + "away": "TSV 08 Kulmbach", + "home_crest": "img/crests/00ES8GNK4O000016VV0AG08LVUPGND5I.png", + "away_crest": "img/crests/00ES8GNK3G000012VV0AG08LVUPGND5I.png", + "is_home": false, "team_key": "erste-mannschaft", - "status": "veroeffentlicht", - "pages": 40, - "player_image": "img/stadionzeitung/2026-08-01-sv-hutschdorf/spieler.png", - "qr_image": "img/stadionzeitung/2026-08-01-sv-hutschdorf/qr.png", - "vorwort": { - "heading": "Herzlich willkommen im Katzbachtal!", - "paragraphs": [ - "Liebe Fußballfreunde,", - "herzlich willkommen im Katzbachtal! Ein besonderer Gruß gilt dem Schiedsrichtergespann und unseren Gästen vom SV Hutschdorf.", - "Nach der Vorbereitung und dem furiosen 4:0-Auswärtssieg zum Auftakt in der Kreisklasse wollen wir nun auch unser erstes Heimspiel erfolgreich gestalten. Ein Heimsieg vor eigenem Publikum wäre die perfekte Fortsetzung!", - "Leidenschaft, Wille, Heimsieg: los geht's!" - ], - "closing": "Rot-schwarze Grüße", - "signee_name": "Benedikt Höfner", - "signee_role": "Sportlicher Leiter" - }, - "interview": { - "teaser": "Unser Trainer Ali Kilic über die Neuzugänge der Saison", - "heading": "Drei Fragen an Ali Kilic", - "person_name": "Ali Kilic", - "person_role": "Trainer 1. Mannschaft", - "intro": null, - "fragen": [ - { - "frage": "Ali, wie bewertest du unsere Neuzugänge für die neue Saison?", - "antwort": "Sehr positiv. Philipp bringt uns im zentralen Mittelfeld saubere Technik, gutes Passspiel und einen starken rechten Fuß. Nur bei Dynamik und Sprints fügt er sich nahtlos in unseren Mannschaftsdurchschnitt ein. Michael muss man hier keinem vorstellen: offensiv, ehrgeizig, leidenschaftlich. Mit 43 hat er mehr Feuer als mancher mit 20. Und Basti Groß hatte die Fußballschuhe eigentlich schon an den Nagel gehängt. Jetzt holt er sie wieder runter und greift in der Offensive mit an." - }, - { - "frage": "Was erwartet uns heute gegen den SV Hutschdorf?", - "antwort": "Ein richtig unangenehmer Gegner. Hutschdorf ist letzte Saison nur knapp am Aufstieg vorbeigeschrammt, und wir rechnen damit, dass sie wieder oben mitspielen. Verstecken müssen wir uns aber nicht. Wichtig ist, dass wir auf uns schauen, an unserer Fitness arbeiten und die vollen 90 Minuten sauber durchziehen. Dann ist heute einiges möglich." - }, - { - "frage": "Dein Wunsch für die Saison?", - "antwort": "Eine sorgenfreie Saison, in der alle gesund bleiben. Und dass wir unsere Spielidee durchziehen: das Spiel aktiv gestalten, mit Ballbesitz und mutigem Pressing. Wenn wir das Katzbachtal dann noch zur Festung machen, bin ich sehr zufrieden." - } - ], - "photo": "img/persons/ali-kilic.jpg" - }, - "verfasser_photo": { - "base": "img/stadionzeitung/2026-08-01-sv-hutschdorf/verfasser", - "widths": [ - 120, - 222 - ], - "alt": "" - }, - "termine_snapshot": [ - { - "date": "2026-08-02", - "date_end": null, - "title": "Frühschoppen zur Kulmbacher Bierwoche", - "department": "verein", - "type": "event", - "meta": "09:30 Uhr · Kulmbacher Ecke, Kulmbacher Bierwoche", - "href": null, - "time": "09:30", - "location": "Kulmbacher Ecke, Kulmbacher Bierwoche", - "raw": { - "slug": "bierfest-fruehschoppen-2026", - "title": "Frühschoppen zur Kulmbacher Bierwoche", - "date_start": "2026-08-02", - "date_end": null, - "time": "09:30", - "department": "verein", - "text": "Unser traditioneller Frühschoppen im Rahmen der Kulmbacher Bierwoche.", - "location": "Kulmbacher Ecke, Kulmbacher Bierwoche" - } - }, - { - "date": "2026-08-07", - "date_end": null, - "title": "(SG1) TSV Melkendorf III/ TSV 08 Kulmbach II – SV Lanzendorf II flex", - "department": "fussball", - "type": "spiel", - "meta": "Heimspiel · Reserve BK 5 BT-KU", - "href": "/matchcenter", - "kickoff": "2026-08-07T18:30", - "team_name": "2. Mannschaft", - "league": "Reserve BK 5 BT-KU", - "raw": { - "kickoff": "2026-08-07T18:30", - "date_display": "Fr, 07.08.", - "time_display": "18:30 Uhr", - "competition": "Liga", - "home": "(SG1) TSV Melkendorf III/ TSV 08 Kulmbach II", - "away": "SV Lanzendorf II flex", - "home_crest": "img/crests/00ES8GNK4O000002VV0AG08LVUPGND5I.png", - "away_crest": "img/crests/00ES8GNK3G000017VV0AG08LVUPGND5I.png", - "is_home": true, - "team_key": "zweite-mannschaft", - "team_name": "2. Mannschaft" - } - }, - { - "date": "2026-08-08", - "date_end": null, - "title": "SpVgg Wonsees – TSV 08 Kulmbach", - "department": "fussball", - "type": "spiel", - "meta": "Auswärtsspiel · Kreisklasse", - "href": "/matchcenter", - "kickoff": "2026-08-08T18:00", - "team_name": "1. Mannschaft", - "league": "Kreisklasse", - "raw": { - "kickoff": "2026-08-08T18:00", - "date_display": "Sa, 08.08.", - "time_display": "18:00 Uhr", - "competition": "Liga", - "home": "SpVgg Wonsees", - "away": "TSV 08 Kulmbach", - "home_crest": "img/crests/00ES8GNK4O000016VV0AG08LVUPGND5I.png", - "away_crest": "img/crests/00ES8GNK3G000012VV0AG08LVUPGND5I.png", - "is_home": false, - "team_key": "erste-mannschaft", - "team_name": "1. Mannschaft" - } - }, - { - "date": "2026-08-09", - "date_end": null, - "title": "TSV Engelmannsreuth – TSV 08 Kulmbach", - "department": "fussball", - "type": "spiel", - "meta": "Auswärtsspiel · Freundschaftsspiel", - "href": "/matchcenter", - "kickoff": "2026-08-09T11:00", - "team_name": "Frauenmannschaft", - "league": "Frauen KL Ost", - "raw": { - "kickoff": "2026-08-09T11:00", - "date_display": "So, 09.08.", - "time_display": "11:00 Uhr", - "competition": "Freundschaft", - "home": "TSV Engelmannsreuth", - "away": "TSV 08 Kulmbach", - "home_crest": "img/crests/00ES8GNK3G000009VV0AG08LVUPGND5I.png", - "away_crest": "img/crests/00ES8GNK3G000012VV0AG08LVUPGND5I.png", - "is_home": false, - "team_key": "damen", - "team_name": "Frauenmannschaft" - } - }, - { - "date": "2026-08-15", - "date_end": null, - "title": "TSV 08 Kulmbach – TSV Ködnitz", - "department": "fussball", - "type": "spiel", - "meta": "Heimspiel · Kreisklasse", - "href": "/matchcenter", - "kickoff": "2026-08-15T14:00", - "team_name": "1. Mannschaft", - "league": "Kreisklasse", - "raw": { - "kickoff": "2026-08-15T14:00", - "date_display": "Sa, 15.08.", - "time_display": "14:00 Uhr", - "competition": "Liga", - "home": "TSV 08 Kulmbach", - "away": "TSV Ködnitz", - "home_crest": "img/crests/00ES8GNK3G000012VV0AG08LVUPGND5I.png", - "away_crest": "img/crests/00ES8GNK3G00000SVV0AG08LVUPGND5I.png", - "is_home": true, - "team_key": "erste-mannschaft", - "team_name": "1. Mannschaft" - } - } - ], - "images": [ - { - "type": "live", - "page": "cover" - }, - { - "type": "live", - "page": "vorwort" - }, - { - "type": "live", - "page": "interview" - }, - { - "type": "image", - "base": "img/anzeigen/eldorado", - "widths": [ - 480, - 960, - 1440 - ], - "alt": "Anzeige: eldorado Radsporttechnik Kulmbach" - }, - { - "type": "live", - "page": "ergebnisse" - }, - { - "type": "image", - "base": "img/anzeigen/egu", - "widths": [ - 480, - 960, - 1440 - ], - "alt": "Anzeige: Erfrischungsgetränke-Union Kulmbacher Gruppe GmbH" - }, - { - "type": "image", - "base": "img/anzeigen/hofmann-graef", - "widths": [ - 480, - 960, - 1440 - ], - "alt": "Anzeige: Buchhandlung Hofmann, Kulmbach, und Automobilwerkstatt Gräf, Thurnau" - }, - { - "type": "live", - "page": "tabelle", - "team": "erste-mannschaft" - }, - { - "type": "live", - "page": "tabelle", - "team": "zweite-mannschaft" - }, - { - "type": "live", - "page": "tabelle", - "team": "damen" - }, - { - "type": "image", - "base": "img/anzeigen/muench-richterstegner", - "widths": [ - 480, - 960, - 1440 - ], - "alt": "Anzeige: Planungsbüro Münch und Richter & Stegner Steuerungstechnik" - }, - { - "type": "image", - "base": "img/anzeigen/malteser-herrmann", - "widths": [ - 480, - 960, - 1440 - ], - "alt": "Anzeige: Malteser-Hilfsdienst und Schlosserei Herrmann, Kulmbach" - }, - { - "type": "live", - "page": "vorschau" - }, - { - "type": "image", - "base": "img/anzeigen/apotheken-wenkel", - "widths": [ - 480, - 960, - 1440 - ], - "alt": "Anzeige: Apotheke im Fritz, Stadtpark Apotheke und Schlüsseldienst Wenkel, Kulmbach" - }, - { - "type": "image", - "base": "img/anzeigen/karl-geyer", - "widths": [ - 480, - 960, - 1440 - ], - "alt": "Anzeige: Geyer Farbe + Raum, Kulmbach, Starthilfe Boden" - }, - { - "type": "live", - "page": "termine" - }, - { - "type": "image", - "base": "img/anzeigen/gsb", - "widths": [ - 480, - 960, - 1440 - ], - "alt": "Anzeige: GSB Security und GSB Gebäude Service, Bindlach" - }, - { - "type": "image", - "base": "img/anzeigen/physiofit-wohlfart", - "widths": [ - 480, - 960, - 1440 - ], - "alt": "Anzeige: Physio Fit Neudrossenfeld und Textilpflege Wohlfart, Kulmbach" - }, - { - "type": "live", - "page": "news" - }, - { - "type": "image", - "base": "img/anzeigen/sport2000-pizza", - "widths": [ - 480, - 960, - 1440 - ], - "alt": "Anzeige: Sport 2000 Downstairs und Kulmbacher Pizza-Service" - }, - { - "type": "image", - "base": "img/anzeigen/schulz-csu", - "widths": [ - 480, - 960, - 1440 - ], - "alt": "Anzeige: Schreinerei Schulz, Mainleus, und CSU Stadtverband Kulmbach" - }, - { - "type": "live", - "page": "kontakt" - }, - { - "type": "image", - "base": "img/anzeigen/emons-stuebinger", - "widths": [ - 480, - 960, - 1440 - ], - "alt": "Anzeige: Emons Spedition und AST Stübinger Hoch-, Tief- und Straßenbau, Kulmbach" - }, - { - "type": "live", - "page": "mitglied" - }, - { - "type": "image", - "base": "img/anzeigen/mattis-ka2", - "widths": [ - 480, - 960, - 1440 - ], - "alt": "Anzeige: Karl Mattis Flaschnerei und KA2 Fitness, Kulmbach" - }, - { - "type": "image", - "base": "img/anzeigen/motor-nuetzel", - "widths": [ - 480, - 960, - 1440 - ], - "alt": "Anzeige: Motor-Nützel Vertriebs-GmbH, Bayreuth" - }, - { - "type": "live", - "page": "historie" - }, - { - "type": "image", - "base": "img/anzeigen/vereinskarte-edeka", - "widths": [ - 480, - 960, - 1410 - ], - "alt": "Eigenanzeige: So funktioniert die Vereinskarte beim E center Seidl Kulmbach" - }, - { - "type": "image", - "base": "img/anzeigen/trapper-verkehrsakademie", - "widths": [ - 480, - 960, - 1440 - ], - "alt": "Anzeige: Trapper GmbH Entsorgungsfachbetrieb und Verkehrsakademie, Kulmbach" - }, - { - "type": "live", - "page": "sportheim" - }, - { - "type": "image", - "base": "img/anzeigen/ohnemueller-dippold", - "widths": [ - 480, - 960, - 1440 - ], - "alt": "Anzeige: Gaststätte und Metzgerei Ohne-Müller, Kulmbach-Weiher, und Bäckerei Dippold, Melkendorf" - }, - { - "type": "image", - "base": "img/anzeigen/hanft", - "widths": [ - 480, - 960, - 1440 - ], - "alt": "Anzeige: Hanft Bürotechnik GmbH, Kulmbach" - }, - { - "type": "live", - "page": "partner" - }, - { - "type": "image", - "base": "img/anzeigen/elma-kleinheinz", - "widths": [ - 480, - 960, - 1440 - ], - "alt": "Anzeige: elma GmbH Bayreuth und Metzgerei Kleinheinz, Kulmbach" - }, - { - "type": "image", - "base": "img/anzeigen/stadionzeitung-digital", - "widths": [ - 480, - 960, - 1440 - ], - "alt": "Eigenanzeige: Unsere Stadionzeitung gibt es jetzt auch online, mit QR-Code zum Scannen" - }, - { - "type": "live", - "page": "momente" - }, - { - "type": "image", - "base": "img/anzeigen/sportfest-2026-plakat", - "widths": [ - 480, - 960, - 1440 - ], - "alt": "Eigenanzeige: Sportfest 2026 vom 4. bis 6. September auf unserer Sportanlage" - }, - { - "type": "image", - "base": "img/anzeigen/sportfest-2026-programm", - "widths": [ - 480, - 960, - 1440 - ], - "alt": "Eigenanzeige: Programm des Sportfests 2026 mit allen Spielen, Turnieren und der Kinderolympiade" - }, - { - "type": "live", - "page": "impressum" - }, - { - "type": "image", - "base": "img/stadionzeitung/2026-08-01-sv-hutschdorf/rueckseite", - "widths": [ - 480, - 960, - 1410 - ], - "alt": "Rückseite der Stadionzeitung gegen SV Hutschdorf" - } - ], - "snapshot": { - "tabellen": { - "erste-mannschaft": { - "name": "1. Mannschaft", - "league": "Kreisklasse", - "season": "Saison 2026/27", - "table": [ - { - "rank": 1, - "club": "TSV 08 Kulmbach", - "crest": "img/crests/00ES8GNK3G000012VV0AG08LVUPGND5I.png", - "played": 1, - "won": 1, - "drawn": 0, - "lost": 0, - "goal_diff": 4, - "points": 3, - "zone": "promotion", - "is_own_club": true - }, - { - "rank": 2, - "club": "ASV Marktschorgast", - "crest": "img/crests/00ES8GNK4O000001VV0AG08LVUPGND5I.png", - "played": 1, - "won": 1, - "drawn": 0, - "lost": 0, - "goal_diff": 3, - "points": 3, - "zone": "promotion-playoff", - "is_own_club": false - }, - { - "rank": 3, - "club": "SV Fortuna Untersteinach", - "crest": "img/crests/00ES8GNK4O00000VVV0AG08LVUPGND5I.png", - "played": 1, - "won": 1, - "drawn": 0, - "lost": 0, - "goal_diff": 2, - "points": 3, - "zone": null, - "is_own_club": false - }, - { - "rank": 3, - "club": "TSV Trebgast", - "crest": "img/crests/00ES8GNK4O00000TVV0AG08LVUPGND5I.png", - "played": 1, - "won": 1, - "drawn": 0, - "lost": 0, - "goal_diff": 2, - "points": 3, - "zone": null, - "is_own_club": false - }, - { - "rank": 5, - "club": "(SG1) TSV Wirsberg I/ FC Kupferberg I", - "crest": "img/crests/00ES8GNK4O000015VV0AG08LVUPGND5I.png", - "played": 1, - "won": 1, - "drawn": 0, - "lost": 0, - "goal_diff": 1, - "points": 3, - "zone": null, - "is_own_club": false - }, - { - "rank": 6, - "club": "SV Hutschdorf", - "crest": "img/crests/00ES8GNK3G00000LVV0AG08LVUPGND5I.png", - "played": 1, - "won": 1, - "drawn": 0, - "lost": 0, - "goal_diff": 1, - "points": 3, - "zone": null, - "is_own_club": false - }, - { - "rank": 7, - "club": "SpVgg Wonsees", - "crest": "img/crests/00ES8GNK4O000016VV0AG08LVUPGND5I.png", - "played": 1, - "won": 0, - "drawn": 1, - "lost": 0, - "goal_diff": 0, - "points": 1, - "zone": null, - "is_own_club": false - }, - { - "rank": 7, - "club": "TSV Ködnitz", - "crest": "img/crests/00ES8GNK3G00000SVV0AG08LVUPGND5I.png", - "played": 1, - "won": 0, - "drawn": 1, - "lost": 0, - "goal_diff": 0, - "points": 1, - "zone": null, - "is_own_club": false - }, - { - "rank": 9, - "club": "VfB Kulmbach", - "crest": "img/crests/00ES8GNK3G000013VV0AG08LVUPGND5I.png", - "played": 1, - "won": 0, - "drawn": 0, - "lost": 1, - "goal_diff": -1, - "points": 0, - "zone": null, - "is_own_club": false - }, - { - "rank": 10, - "club": "SG Rugendorf/Losau", - "crest": "img/crests/0162J1M4KO000000VV0AG811VU8GH4L8.png", - "played": 1, - "won": 0, - "drawn": 0, - "lost": 1, - "goal_diff": -1, - "points": 0, - "zone": null, - "is_own_club": false - }, - { - "rank": 11, - "club": "(SG1) TSV Bischofsgrün I/FC Gefrees II", - "crest": "img/crests/00ES8GNK3G000002VV0AG08LVUPGND5I.png", - "played": 1, - "won": 0, - "drawn": 0, - "lost": 1, - "goal_diff": -2, - "points": 0, - "zone": null, - "is_own_club": false - }, - { - "rank": 11, - "club": "ATS Wartenfels", - "crest": "img/crests/00ES8GNK4O000012VV0AG08LVUPGND5I.png", - "played": 1, - "won": 0, - "drawn": 0, - "lost": 1, - "goal_diff": -2, - "points": 0, - "zone": null, - "is_own_club": false - }, - { - "rank": 13, - "club": "1. FC Kirchleus", - "crest": "img/crests/00ES8GNK3G00000RVV0AG08LVUPGND5I.png", - "played": 1, - "won": 0, - "drawn": 0, - "lost": 1, - "goal_diff": -3, - "points": 0, - "zone": "relegation-playoff", - "is_own_club": false - }, - { - "rank": 14, - "club": "TDC Lindau 2", - "crest": "img/crests/00ES8GNK3G000019VV0AG08LVUPGND5I.png", - "played": 1, - "won": 0, - "drawn": 0, - "lost": 1, - "goal_diff": -4, - "points": 0, - "zone": "relegation", - "is_own_club": false - } - ] - }, - "zweite-mannschaft": { - "name": "2. Mannschaft", - "league": "Reserve BK 5 BT-KU", - "season": "Saison 2026/27", - "table": [ - { - "rank": 1, - "club": "(SG 2) SV Weidenberg III/SSV Warmensteinach II (flex)", - "crest": "img/crests/00ES8GNK4O000013VV0AG08LVUPGND5I.png", - "played": 1, - "won": 1, - "drawn": 0, - "lost": 0, - "goal_diff": 8, - "points": 3, - "zone": null, - "is_own_club": false - }, - { - "rank": 2, - "club": "TSV 1902 Thurnau II", - "crest": "img/crests/00ES8GNK4O00000SVV0AG08LVUPGND5I.png", - "played": 1, - "won": 1, - "drawn": 0, - "lost": 0, - "goal_diff": 5, - "points": 3, - "zone": null, - "is_own_club": false - }, - { - "rank": 3, - "club": "(SG1) TSV Melkendorf III/ TSV 08 Kulmbach II", - "crest": "img/crests/00ES8GNK4O000002VV0AG08LVUPGND5I.png", - "played": 0, - "won": 0, - "drawn": 0, - "lost": 0, - "goal_diff": 0, - "points": 0, - "zone": null, - "is_own_club": true - }, - { - "rank": 3, - "club": "Blaicher SC Kulmbach II flex", - "crest": "img/crests/00ES8GNK3G000010VV0AG08LVUPGND5I.png", - "played": 0, - "won": 0, - "drawn": 0, - "lost": 0, - "goal_diff": 0, - "points": 0, - "zone": null, - "is_own_club": false - }, - { - "rank": 3, - "club": "SV Lanzendorf II flex", - "crest": "img/crests/00ES8GNK3G000017VV0AG08LVUPGND5I.png", - "played": 0, - "won": 0, - "drawn": 0, - "lost": 0, - "goal_diff": 0, - "points": 0, - "zone": null, - "is_own_club": false - }, - { - "rank": 3, - "club": "SV Lindenhardt II flex", - "crest": "img/crests/00ES8GNK3G00001AVV0AG08LVUPGND5I.png", - "played": 0, - "won": 0, - "drawn": 0, - "lost": 0, - "goal_diff": 0, - "points": 0, - "zone": null, - "is_own_club": false - }, - { - "rank": 3, - "club": "VfR Katschenreuth III", - "crest": "img/crests/00ES8GNK3G00000NVV0AG08LVUPGND5I.png", - "played": 0, - "won": 0, - "drawn": 0, - "lost": 0, - "goal_diff": 0, - "points": 0, - "zone": null, - "is_own_club": false - }, - { - "rank": 8, - "club": "BC Leuchau II (Flex)", - "crest": "img/crests/00ES8GNK3G000018VV0AG08LVUPGND5I.png", - "played": 1, - "won": 0, - "drawn": 0, - "lost": 1, - "goal_diff": -5, - "points": 0, - "zone": null, - "is_own_club": false - }, - { - "rank": 9, - "club": "TSV Harsdorf (flex)", - "crest": "img/crests/00ES8GNK3G00000GVV0AG08LVUPGND5I.png", - "played": 1, - "won": 0, - "drawn": 0, - "lost": 1, - "goal_diff": -8, - "points": 0, - "zone": null, - "is_own_club": false - } - ] - }, - "damen": { - "name": "Frauenmannschaft", - "league": "Frauen KL Ost", - "season": "Saison 2026/27", - "table": [ - { - "rank": 1, - "club": "(SG) SV Weidenberg/TSV Bayreuth-St. Johannis 2", - "crest": "img/crests/00ES8GNK4O000013VV0AG08LVUPGND5I.png", - "played": 0, - "won": 0, - "drawn": 0, - "lost": 0, - "goal_diff": 0, - "points": 0, - "zone": "promotion", - "is_own_club": false - }, - { - "rank": 1, - "club": "(SG) SpVgg Döbra/FC Konradsreuth/ATS Selbitz", - "crest": "img/crests/00ES8GNK8G00000IVV0AG08LVUPGND5I.png", - "played": 0, - "won": 0, - "drawn": 0, - "lost": 0, - "goal_diff": 0, - "points": 0, - "zone": "promotion", - "is_own_club": false - }, - { - "rank": 1, - "club": "1. FC 1928 Schwarzenbach/Saale", - "crest": "img/crests/00ES8GNK9O00000QVV0AG08LVUPGND5I.png", - "played": 0, - "won": 0, - "drawn": 0, - "lost": 0, - "goal_diff": 0, - "points": 0, - "zone": "promotion", - "is_own_club": false - }, - { - "rank": 1, - "club": "1. FC Trogen", - "crest": "img/crests/00ES8GNK9O00001CVV0AG08LVUPGND5I.png", - "played": 0, - "won": 0, - "drawn": 0, - "lost": 0, - "goal_diff": 0, - "points": 0, - "zone": "promotion", - "is_own_club": false - }, - { - "rank": 1, - "club": "ATG Tröstau", - "crest": "img/crests/00ES8GNKDG00000OVV0AG08LVUPGND5I.png", - "played": 0, - "won": 0, - "drawn": 0, - "lost": 0, - "goal_diff": 0, - "points": 0, - "zone": "promotion", - "is_own_club": false - }, - { - "rank": 1, - "club": "SSV Schwarzenbach a.Wald", - "crest": "img/crests/00ES8GNK9O00000PVV0AG08LVUPGND5I.png", - "played": 0, - "won": 0, - "drawn": 0, - "lost": 0, - "goal_diff": 0, - "points": 0, - "zone": "promotion", - "is_own_club": false - }, - { - "rank": 1, - "club": "TSV 08 Kulmbach", - "crest": "img/crests/00ES8GNK3G000012VV0AG08LVUPGND5I.png", - "played": 0, - "won": 0, - "drawn": 0, - "lost": 0, - "goal_diff": 0, - "points": 0, - "zone": "promotion", - "is_own_club": true - }, - { - "rank": 1, - "club": "TSV Engelmannsreuth", - "crest": "img/crests/00ES8GNK3G000009VV0AG08LVUPGND5I.png", - "played": 0, - "won": 0, - "drawn": 0, - "lost": 0, - "goal_diff": 0, - "points": 0, - "zone": "promotion", - "is_own_club": false - }, - { - "rank": 1, - "club": "TSV Waldershof", - "crest": "img/crests/00ES8GNKDG00000PVV0AG08LVUPGND5I.png", - "played": 0, - "won": 0, - "drawn": 0, - "lost": 0, - "goal_diff": 0, - "points": 0, - "zone": "promotion", - "is_own_club": false - }, - { - "rank": 1, - "club": "VfB Moschendorf", - "crest": "img/crests/00ES8GNK8G000019VV0AG08LVUPGND5I.png", - "played": 0, - "won": 0, - "drawn": 0, - "lost": 0, - "goal_diff": 0, - "points": 0, - "zone": "promotion", - "is_own_club": false - } - ] - } - }, - "ergebnisse": [ - { - "team_key": "erste-mannschaft", - "team_name": "1. Mannschaft", - "league": "Kreisklasse", - "matches": [ - { - "kickoff": "2026-07-26T15:00", - "date_display": "So, 26.07.", - "time_display": "15:00 Uhr", - "competition": "Liga", - "home": "TDC Lindau 2", - "away": "TSV 08 Kulmbach", - "home_crest": "img/crests/00ES8GNK3G000019VV0AG08LVUPGND5I.png", - "away_crest": "img/crests/00ES8GNK3G000012VV0AG08LVUPGND5I.png", - "is_home": false, - "goals_home": 0, - "goals_away": 4, - "result": "0:4", - "outcome": "win" - } - ] - }, - { - "team_key": "zweite-mannschaft", - "team_name": "2. Mannschaft", - "league": "Reserve BK 5 BT-KU", - "matches": [ - { - "kickoff": "2026-07-03T18:00", - "date_display": "Fr, 03.07.", - "time_display": "18:00 Uhr", - "competition": "Freundschaft", - "home": "SV Lanzendorf", - "away": "(SG1) TSV Melkendorf III/ TSV 08 Kulmbach II", - "home_crest": "img/crests/00ES8GNK3G000017VV0AG08LVUPGND5I.png", - "away_crest": "img/crests/00ES8GNK4O000002VV0AG08LVUPGND5I.png", - "is_home": false, - "goals_home": 4, - "goals_away": 4, - "result": "4:4", - "outcome": "draw" - } - ] - }, - { - "team_key": "damen", - "team_name": "Frauenmannschaft", - "league": "Frauen KL Ost", - "matches": [ - { - "kickoff": "2026-07-26T17:00", - "date_display": "So, 26.07.", - "time_display": "17:00 Uhr", - "competition": "Freundschaft", - "home": "TSV 08 Kulmbach", - "away": "(SG) 1.FC Michelau / 1.FC Fortuna Roth", - "home_crest": "img/crests/00ES8GNK3G000012VV0AG08LVUPGND5I.png", - "away_crest": "img/crests/00ES8GNK78000005VV0AG08LVUPGND5I.png", - "is_home": true, - "goals_home": 2, - "goals_away": 5, - "result": "2:5", - "outcome": "loss" - } - ] - } - ], - "vorschau": [ - { - "team_key": "erste-mannschaft", - "team_name": "1. Mannschaft", - "league": "Kreisklasse", - "match": { - "kickoff": "2026-08-08T18:00", - "date_display": "Sa, 08.08.", - "time_display": "18:00 Uhr", - "competition": "Liga", - "home": "SpVgg Wonsees", - "away": "TSV 08 Kulmbach", - "home_crest": "img/crests/00ES8GNK4O000016VV0AG08LVUPGND5I.png", - "away_crest": "img/crests/00ES8GNK3G000012VV0AG08LVUPGND5I.png", - "is_home": false - } - }, - { - "team_key": "zweite-mannschaft", - "team_name": "2. Mannschaft", - "league": "Reserve BK 5 BT-KU", - "match": { - "kickoff": "2026-08-07T18:30", - "date_display": "Fr, 07.08.", - "time_display": "18:30 Uhr", - "competition": "Liga", - "home": "(SG1) TSV Melkendorf III/ TSV 08 Kulmbach II", - "away": "SV Lanzendorf II flex", - "home_crest": "img/crests/00ES8GNK4O000002VV0AG08LVUPGND5I.png", - "away_crest": "img/crests/00ES8GNK3G000017VV0AG08LVUPGND5I.png", - "is_home": true - } - }, - { - "team_key": "damen", - "team_name": "Frauenmannschaft", - "league": "Frauen KL Ost", - "match": { - "kickoff": "2026-08-09T11:00", - "date_display": "So, 09.08.", - "time_display": "11:00 Uhr", - "competition": "Freundschaft", - "home": "TSV Engelmannsreuth", - "away": "TSV 08 Kulmbach", - "home_crest": "img/crests/00ES8GNK3G000009VV0AG08LVUPGND5I.png", - "away_crest": "img/crests/00ES8GNK3G000012VV0AG08LVUPGND5I.png", - "is_home": false - } - } - ], - "news": [ - { - "date": "2026-07-28", - "title": "Website Update 2026", - "text": "Unsere Website ist neu gebaut. Hier steht, was es jetzt gibt und wo du was findest.", - "image": { - "base": "img/news/neue-website", - "widths": [ - 640, - 1000 - ], - "alt": "Startseite unserer neuen Website mit Hero-Video und Termin-Karte" - }, - "href": "/news/website-update-2026", - "link_text": "Artikel lesen", - "source": "news" - }, - { - "date": "2026-07-26", - "title": "Sieg gegen TDC Lindau 2", - "text": "1. Mannschaft · Endstand 0:4", - "image": null, - "crest": { - "src": "img/crests/00ES8GNK3G000019VV0AG08LVUPGND5I.png", - "name": "TDC Lindau 2" - }, - "href": "/matchcenter", - "source": "ergebnis" - }, - { - "date": "2026-07-26", - "title": "Niederlage gegen (SG) 1.FC Michelau / 1.FC Fortuna Roth", - "text": "Frauenmannschaft · Endstand 2:5", - "image": null, - "crest": { - "src": "img/crests/00ES8GNK78000005VV0AG08LVUPGND5I.png", - "name": "(SG) 1.FC Michelau / 1.FC Fortuna Roth" - }, - "href": "/matchcenter", - "source": "ergebnis" - }, - { - "date": "2026-07-24", - "title": "Es geht wieder los! 🔥", - "text": "🔴⚫️", - "image": { - "src": "img/instagram/DbK7VV-s4P4.jpg", - "width": 640, - "height": 800, - "alt": "Es geht wieder los! 🔥" - }, - "href": "https://www.instagram.com/p/DbK7VV-s4P4/", - "source": "instagram" - }, - { - "date": "2026-07-19", - "title": "Niederlage gegen 1. FC Baiersdorf", - "text": "1. Mannschaft · Endstand 6:2", - "image": null, - "crest": { - "src": "img/crests/00ES8GNK4O00001DVV0AG08LVUPGND5I.png", - "name": "1. FC Baiersdorf" - }, - "href": "/matchcenter", - "source": "ergebnis" - } - ], - "momente": [ - { - "image": "img/instagram/DbK7VV-s4P4.jpg", - "alt": "Es geht wieder los! 🔥" - }, - { - "image": "img/instagram/DZw3JOPDKZq.jpg", - "alt": "Unsere Herren sind am Dienstag in die Vorbereitung gestartet. Die ersten intensiven Einheiten sind absolviert 🔥" - }, - { - "image": "img/instagram/DYgh-hwDHvg.jpg", - "alt": "Ergebnisse 🔴⚫️" - }, - { - "image": "img/instagram/DYSqpPiDP4d.jpg", - "alt": "Letzter Spieltag in der Saison 25/26 für unsere beiden Herrenmannschaften 🔴⚫️" - } - ] - }, - "published_at": "2026-07-31T13:34:54+00:00" + "team_name": "1. Mannschaft" + } + }, + { + "date": "2026-08-09", + "date_end": null, + "title": "TSV Engelmannsreuth – TSV 08 Kulmbach", + "department": "fussball", + "type": "spiel", + "meta": "Auswärtsspiel · Freundschaftsspiel", + "href": "/matchcenter", + "kickoff": "2026-08-09T11:00", + "team_name": "Frauenmannschaft", + "league": "Frauen KL Ost", + "raw": { + "kickoff": "2026-08-09T11:00", + "date_display": "So, 09.08.", + "time_display": "11:00 Uhr", + "competition": "Freundschaft", + "home": "TSV Engelmannsreuth", + "away": "TSV 08 Kulmbach", + "home_crest": "img/crests/00ES8GNK3G000009VV0AG08LVUPGND5I.png", + "away_crest": "img/crests/00ES8GNK3G000012VV0AG08LVUPGND5I.png", + "is_home": false, + "team_key": "damen", + "team_name": "Frauenmannschaft" + } + }, + { + "date": "2026-08-15", + "date_end": null, + "title": "TSV 08 Kulmbach – TSV Ködnitz", + "department": "fussball", + "type": "spiel", + "meta": "Heimspiel · Kreisklasse", + "href": "/matchcenter", + "kickoff": "2026-08-15T14:00", + "team_name": "1. Mannschaft", + "league": "Kreisklasse", + "raw": { + "kickoff": "2026-08-15T14:00", + "date_display": "Sa, 15.08.", + "time_display": "14:00 Uhr", + "competition": "Liga", + "home": "TSV 08 Kulmbach", + "away": "TSV Ködnitz", + "home_crest": "img/crests/00ES8GNK3G000012VV0AG08LVUPGND5I.png", + "away_crest": "img/crests/00ES8GNK3G00000SVV0AG08LVUPGND5I.png", + "is_home": true, + "team_key": "erste-mannschaft", + "team_name": "1. Mannschaft" + } } - ] -} \ No newline at end of file + ], + "images": [ + { + "type": "live", + "page": "cover" + }, + { + "type": "live", + "page": "vorwort" + }, + { + "type": "live", + "page": "interview" + }, + { + "type": "image", + "base": "img/anzeigen/eldorado", + "widths": [ + 480, + 960, + 1440 + ], + "alt": "Anzeige: eldorado Radsporttechnik Kulmbach" + }, + { + "type": "live", + "page": "ergebnisse" + }, + { + "type": "image", + "base": "img/anzeigen/egu", + "widths": [ + 480, + 960, + 1440 + ], + "alt": "Anzeige: Erfrischungsgetränke-Union Kulmbacher Gruppe GmbH" + }, + { + "type": "image", + "base": "img/anzeigen/hofmann-graef", + "widths": [ + 480, + 960, + 1440 + ], + "alt": "Anzeige: Buchhandlung Hofmann, Kulmbach, und Automobilwerkstatt Gräf, Thurnau" + }, + { + "type": "live", + "page": "tabelle", + "team": "erste-mannschaft" + }, + { + "type": "live", + "page": "tabelle", + "team": "zweite-mannschaft" + }, + { + "type": "live", + "page": "tabelle", + "team": "damen" + }, + { + "type": "image", + "base": "img/anzeigen/muench-richterstegner", + "widths": [ + 480, + 960, + 1440 + ], + "alt": "Anzeige: Planungsbüro Münch und Richter & Stegner Steuerungstechnik" + }, + { + "type": "image", + "base": "img/anzeigen/malteser-herrmann", + "widths": [ + 480, + 960, + 1440 + ], + "alt": "Anzeige: Malteser-Hilfsdienst und Schlosserei Herrmann, Kulmbach" + }, + { + "type": "live", + "page": "vorschau" + }, + { + "type": "image", + "base": "img/anzeigen/apotheken-wenkel", + "widths": [ + 480, + 960, + 1440 + ], + "alt": "Anzeige: Apotheke im Fritz, Stadtpark Apotheke und Schlüsseldienst Wenkel, Kulmbach" + }, + { + "type": "image", + "base": "img/anzeigen/karl-geyer", + "widths": [ + 480, + 960, + 1440 + ], + "alt": "Anzeige: Geyer Farbe + Raum, Kulmbach, Starthilfe Boden" + }, + { + "type": "live", + "page": "termine" + }, + { + "type": "image", + "base": "img/anzeigen/gsb", + "widths": [ + 480, + 960, + 1440 + ], + "alt": "Anzeige: GSB Security und GSB Gebäude Service, Bindlach" + }, + { + "type": "image", + "base": "img/anzeigen/physiofit-wohlfart", + "widths": [ + 480, + 960, + 1440 + ], + "alt": "Anzeige: Physio Fit Neudrossenfeld und Textilpflege Wohlfart, Kulmbach" + }, + { + "type": "live", + "page": "news" + }, + { + "type": "image", + "base": "img/anzeigen/sport2000-pizza", + "widths": [ + 480, + 960, + 1440 + ], + "alt": "Anzeige: Sport 2000 Downstairs und Kulmbacher Pizza-Service" + }, + { + "type": "image", + "base": "img/anzeigen/schulz-csu", + "widths": [ + 480, + 960, + 1440 + ], + "alt": "Anzeige: Schreinerei Schulz, Mainleus, und CSU Stadtverband Kulmbach" + }, + { + "type": "live", + "page": "kontakt" + }, + { + "type": "image", + "base": "img/anzeigen/emons-stuebinger", + "widths": [ + 480, + 960, + 1440 + ], + "alt": "Anzeige: Emons Spedition und AST Stübinger Hoch-, Tief- und Straßenbau, Kulmbach" + }, + { + "type": "live", + "page": "mitglied" + }, + { + "type": "image", + "base": "img/anzeigen/mattis-ka2", + "widths": [ + 480, + 960, + 1440 + ], + "alt": "Anzeige: Karl Mattis Flaschnerei und KA2 Fitness, Kulmbach" + }, + { + "type": "image", + "base": "img/anzeigen/motor-nuetzel", + "widths": [ + 480, + 960, + 1440 + ], + "alt": "Anzeige: Motor-Nützel Vertriebs-GmbH, Bayreuth" + }, + { + "type": "live", + "page": "historie" + }, + { + "type": "image", + "base": "img/anzeigen/vereinskarte-edeka", + "widths": [ + 480, + 960, + 1410 + ], + "alt": "Eigenanzeige: So funktioniert die Vereinskarte beim E center Seidl Kulmbach" + }, + { + "type": "image", + "base": "img/anzeigen/trapper-verkehrsakademie", + "widths": [ + 480, + 960, + 1440 + ], + "alt": "Anzeige: Trapper GmbH Entsorgungsfachbetrieb und Verkehrsakademie, Kulmbach" + }, + { + "type": "live", + "page": "sportheim" + }, + { + "type": "image", + "base": "img/anzeigen/ohnemueller-dippold", + "widths": [ + 480, + 960, + 1440 + ], + "alt": "Anzeige: Gaststätte und Metzgerei Ohne-Müller, Kulmbach-Weiher, und Bäckerei Dippold, Melkendorf" + }, + { + "type": "image", + "base": "img/anzeigen/hanft", + "widths": [ + 480, + 960, + 1440 + ], + "alt": "Anzeige: Hanft Bürotechnik GmbH, Kulmbach" + }, + { + "type": "live", + "page": "partner" + }, + { + "type": "image", + "base": "img/anzeigen/elma-kleinheinz", + "widths": [ + 480, + 960, + 1440 + ], + "alt": "Anzeige: elma GmbH Bayreuth und Metzgerei Kleinheinz, Kulmbach" + }, + { + "type": "image", + "base": "img/anzeigen/stadionzeitung-digital", + "widths": [ + 480, + 960, + 1440 + ], + "alt": "Eigenanzeige: Unsere Stadionzeitung gibt es jetzt auch online, mit QR-Code zum Scannen" + }, + { + "type": "live", + "page": "momente" + }, + { + "type": "image", + "base": "img/anzeigen/sportfest-2026-plakat", + "widths": [ + 480, + 960, + 1440 + ], + "alt": "Eigenanzeige: Sportfest 2026 vom 4. bis 6. September auf unserer Sportanlage" + }, + { + "type": "image", + "base": "img/anzeigen/sportfest-2026-programm", + "widths": [ + 480, + 960, + 1440 + ], + "alt": "Eigenanzeige: Programm des Sportfests 2026 mit allen Spielen, Turnieren und der Kinderolympiade" + }, + { + "type": "live", + "page": "impressum" + }, + { + "type": "image", + "base": "img/stadionzeitung/2026-08-01-sv-hutschdorf/rueckseite", + "widths": [ + 480, + 960, + 1410 + ], + "alt": "Rückseite der Stadionzeitung gegen SV Hutschdorf" + } + ], + "snapshot": { + "tabellen": { + "erste-mannschaft": { + "name": "1. Mannschaft", + "league": "Kreisklasse", + "season": "Saison 2026/27", + "table": [ + { + "rank": 1, + "club": "TSV 08 Kulmbach", + "crest": "img/crests/00ES8GNK3G000012VV0AG08LVUPGND5I.png", + "played": 1, + "won": 1, + "drawn": 0, + "lost": 0, + "goal_diff": 4, + "points": 3, + "zone": "promotion", + "is_own_club": true + }, + { + "rank": 2, + "club": "ASV Marktschorgast", + "crest": "img/crests/00ES8GNK4O000001VV0AG08LVUPGND5I.png", + "played": 1, + "won": 1, + "drawn": 0, + "lost": 0, + "goal_diff": 3, + "points": 3, + "zone": "promotion-playoff", + "is_own_club": false + }, + { + "rank": 3, + "club": "SV Fortuna Untersteinach", + "crest": "img/crests/00ES8GNK4O00000VVV0AG08LVUPGND5I.png", + "played": 1, + "won": 1, + "drawn": 0, + "lost": 0, + "goal_diff": 2, + "points": 3, + "zone": null, + "is_own_club": false + }, + { + "rank": 3, + "club": "TSV Trebgast", + "crest": "img/crests/00ES8GNK4O00000TVV0AG08LVUPGND5I.png", + "played": 1, + "won": 1, + "drawn": 0, + "lost": 0, + "goal_diff": 2, + "points": 3, + "zone": null, + "is_own_club": false + }, + { + "rank": 5, + "club": "(SG1) TSV Wirsberg I/ FC Kupferberg I", + "crest": "img/crests/00ES8GNK4O000015VV0AG08LVUPGND5I.png", + "played": 1, + "won": 1, + "drawn": 0, + "lost": 0, + "goal_diff": 1, + "points": 3, + "zone": null, + "is_own_club": false + }, + { + "rank": 6, + "club": "SV Hutschdorf", + "crest": "img/crests/00ES8GNK3G00000LVV0AG08LVUPGND5I.png", + "played": 1, + "won": 1, + "drawn": 0, + "lost": 0, + "goal_diff": 1, + "points": 3, + "zone": null, + "is_own_club": false + }, + { + "rank": 7, + "club": "SpVgg Wonsees", + "crest": "img/crests/00ES8GNK4O000016VV0AG08LVUPGND5I.png", + "played": 1, + "won": 0, + "drawn": 1, + "lost": 0, + "goal_diff": 0, + "points": 1, + "zone": null, + "is_own_club": false + }, + { + "rank": 7, + "club": "TSV Ködnitz", + "crest": "img/crests/00ES8GNK3G00000SVV0AG08LVUPGND5I.png", + "played": 1, + "won": 0, + "drawn": 1, + "lost": 0, + "goal_diff": 0, + "points": 1, + "zone": null, + "is_own_club": false + }, + { + "rank": 9, + "club": "VfB Kulmbach", + "crest": "img/crests/00ES8GNK3G000013VV0AG08LVUPGND5I.png", + "played": 1, + "won": 0, + "drawn": 0, + "lost": 1, + "goal_diff": -1, + "points": 0, + "zone": null, + "is_own_club": false + }, + { + "rank": 10, + "club": "SG Rugendorf/Losau", + "crest": "img/crests/0162J1M4KO000000VV0AG811VU8GH4L8.png", + "played": 1, + "won": 0, + "drawn": 0, + "lost": 1, + "goal_diff": -1, + "points": 0, + "zone": null, + "is_own_club": false + }, + { + "rank": 11, + "club": "(SG1) TSV Bischofsgrün I/FC Gefrees II", + "crest": "img/crests/00ES8GNK3G000002VV0AG08LVUPGND5I.png", + "played": 1, + "won": 0, + "drawn": 0, + "lost": 1, + "goal_diff": -2, + "points": 0, + "zone": null, + "is_own_club": false + }, + { + "rank": 11, + "club": "ATS Wartenfels", + "crest": "img/crests/00ES8GNK4O000012VV0AG08LVUPGND5I.png", + "played": 1, + "won": 0, + "drawn": 0, + "lost": 1, + "goal_diff": -2, + "points": 0, + "zone": null, + "is_own_club": false + }, + { + "rank": 13, + "club": "1. FC Kirchleus", + "crest": "img/crests/00ES8GNK3G00000RVV0AG08LVUPGND5I.png", + "played": 1, + "won": 0, + "drawn": 0, + "lost": 1, + "goal_diff": -3, + "points": 0, + "zone": "relegation-playoff", + "is_own_club": false + }, + { + "rank": 14, + "club": "TDC Lindau 2", + "crest": "img/crests/00ES8GNK3G000019VV0AG08LVUPGND5I.png", + "played": 1, + "won": 0, + "drawn": 0, + "lost": 1, + "goal_diff": -4, + "points": 0, + "zone": "relegation", + "is_own_club": false + } + ] + }, + "zweite-mannschaft": { + "name": "2. Mannschaft", + "league": "Reserve BK 5 BT-KU", + "season": "Saison 2026/27", + "table": [ + { + "rank": 1, + "club": "(SG 2) SV Weidenberg III/SSV Warmensteinach II (flex)", + "crest": "img/crests/00ES8GNK4O000013VV0AG08LVUPGND5I.png", + "played": 1, + "won": 1, + "drawn": 0, + "lost": 0, + "goal_diff": 8, + "points": 3, + "zone": null, + "is_own_club": false + }, + { + "rank": 2, + "club": "TSV 1902 Thurnau II", + "crest": "img/crests/00ES8GNK4O00000SVV0AG08LVUPGND5I.png", + "played": 1, + "won": 1, + "drawn": 0, + "lost": 0, + "goal_diff": 5, + "points": 3, + "zone": null, + "is_own_club": false + }, + { + "rank": 3, + "club": "(SG1) TSV Melkendorf III/ TSV 08 Kulmbach II", + "crest": "img/crests/00ES8GNK4O000002VV0AG08LVUPGND5I.png", + "played": 0, + "won": 0, + "drawn": 0, + "lost": 0, + "goal_diff": 0, + "points": 0, + "zone": null, + "is_own_club": true + }, + { + "rank": 3, + "club": "Blaicher SC Kulmbach II flex", + "crest": "img/crests/00ES8GNK3G000010VV0AG08LVUPGND5I.png", + "played": 0, + "won": 0, + "drawn": 0, + "lost": 0, + "goal_diff": 0, + "points": 0, + "zone": null, + "is_own_club": false + }, + { + "rank": 3, + "club": "SV Lanzendorf II flex", + "crest": "img/crests/00ES8GNK3G000017VV0AG08LVUPGND5I.png", + "played": 0, + "won": 0, + "drawn": 0, + "lost": 0, + "goal_diff": 0, + "points": 0, + "zone": null, + "is_own_club": false + }, + { + "rank": 3, + "club": "SV Lindenhardt II flex", + "crest": "img/crests/00ES8GNK3G00001AVV0AG08LVUPGND5I.png", + "played": 0, + "won": 0, + "drawn": 0, + "lost": 0, + "goal_diff": 0, + "points": 0, + "zone": null, + "is_own_club": false + }, + { + "rank": 3, + "club": "VfR Katschenreuth III", + "crest": "img/crests/00ES8GNK3G00000NVV0AG08LVUPGND5I.png", + "played": 0, + "won": 0, + "drawn": 0, + "lost": 0, + "goal_diff": 0, + "points": 0, + "zone": null, + "is_own_club": false + }, + { + "rank": 8, + "club": "BC Leuchau II (Flex)", + "crest": "img/crests/00ES8GNK3G000018VV0AG08LVUPGND5I.png", + "played": 1, + "won": 0, + "drawn": 0, + "lost": 1, + "goal_diff": -5, + "points": 0, + "zone": null, + "is_own_club": false + }, + { + "rank": 9, + "club": "TSV Harsdorf (flex)", + "crest": "img/crests/00ES8GNK3G00000GVV0AG08LVUPGND5I.png", + "played": 1, + "won": 0, + "drawn": 0, + "lost": 1, + "goal_diff": -8, + "points": 0, + "zone": null, + "is_own_club": false + } + ] + }, + "damen": { + "name": "Frauenmannschaft", + "league": "Frauen KL Ost", + "season": "Saison 2026/27", + "table": [ + { + "rank": 1, + "club": "(SG) SV Weidenberg/TSV Bayreuth-St. Johannis 2", + "crest": "img/crests/00ES8GNK4O000013VV0AG08LVUPGND5I.png", + "played": 0, + "won": 0, + "drawn": 0, + "lost": 0, + "goal_diff": 0, + "points": 0, + "zone": "promotion", + "is_own_club": false + }, + { + "rank": 1, + "club": "(SG) SpVgg Döbra/FC Konradsreuth/ATS Selbitz", + "crest": "img/crests/00ES8GNK8G00000IVV0AG08LVUPGND5I.png", + "played": 0, + "won": 0, + "drawn": 0, + "lost": 0, + "goal_diff": 0, + "points": 0, + "zone": "promotion", + "is_own_club": false + }, + { + "rank": 1, + "club": "1. FC 1928 Schwarzenbach/Saale", + "crest": "img/crests/00ES8GNK9O00000QVV0AG08LVUPGND5I.png", + "played": 0, + "won": 0, + "drawn": 0, + "lost": 0, + "goal_diff": 0, + "points": 0, + "zone": "promotion", + "is_own_club": false + }, + { + "rank": 1, + "club": "1. FC Trogen", + "crest": "img/crests/00ES8GNK9O00001CVV0AG08LVUPGND5I.png", + "played": 0, + "won": 0, + "drawn": 0, + "lost": 0, + "goal_diff": 0, + "points": 0, + "zone": "promotion", + "is_own_club": false + }, + { + "rank": 1, + "club": "ATG Tröstau", + "crest": "img/crests/00ES8GNKDG00000OVV0AG08LVUPGND5I.png", + "played": 0, + "won": 0, + "drawn": 0, + "lost": 0, + "goal_diff": 0, + "points": 0, + "zone": "promotion", + "is_own_club": false + }, + { + "rank": 1, + "club": "SSV Schwarzenbach a.Wald", + "crest": "img/crests/00ES8GNK9O00000PVV0AG08LVUPGND5I.png", + "played": 0, + "won": 0, + "drawn": 0, + "lost": 0, + "goal_diff": 0, + "points": 0, + "zone": "promotion", + "is_own_club": false + }, + { + "rank": 1, + "club": "TSV 08 Kulmbach", + "crest": "img/crests/00ES8GNK3G000012VV0AG08LVUPGND5I.png", + "played": 0, + "won": 0, + "drawn": 0, + "lost": 0, + "goal_diff": 0, + "points": 0, + "zone": "promotion", + "is_own_club": true + }, + { + "rank": 1, + "club": "TSV Engelmannsreuth", + "crest": "img/crests/00ES8GNK3G000009VV0AG08LVUPGND5I.png", + "played": 0, + "won": 0, + "drawn": 0, + "lost": 0, + "goal_diff": 0, + "points": 0, + "zone": "promotion", + "is_own_club": false + }, + { + "rank": 1, + "club": "TSV Waldershof", + "crest": "img/crests/00ES8GNKDG00000PVV0AG08LVUPGND5I.png", + "played": 0, + "won": 0, + "drawn": 0, + "lost": 0, + "goal_diff": 0, + "points": 0, + "zone": "promotion", + "is_own_club": false + }, + { + "rank": 1, + "club": "VfB Moschendorf", + "crest": "img/crests/00ES8GNK8G000019VV0AG08LVUPGND5I.png", + "played": 0, + "won": 0, + "drawn": 0, + "lost": 0, + "goal_diff": 0, + "points": 0, + "zone": "promotion", + "is_own_club": false + } + ] + } + }, + "ergebnisse": [ + { + "team_key": "erste-mannschaft", + "team_name": "1. Mannschaft", + "league": "Kreisklasse", + "matches": [ + { + "kickoff": "2026-07-26T15:00", + "date_display": "So, 26.07.", + "time_display": "15:00 Uhr", + "competition": "Liga", + "home": "TDC Lindau 2", + "away": "TSV 08 Kulmbach", + "home_crest": "img/crests/00ES8GNK3G000019VV0AG08LVUPGND5I.png", + "away_crest": "img/crests/00ES8GNK3G000012VV0AG08LVUPGND5I.png", + "is_home": false, + "goals_home": 0, + "goals_away": 4, + "result": "0:4", + "outcome": "win" + } + ] + }, + { + "team_key": "zweite-mannschaft", + "team_name": "2. Mannschaft", + "league": "Reserve BK 5 BT-KU", + "matches": [ + { + "kickoff": "2026-07-03T18:00", + "date_display": "Fr, 03.07.", + "time_display": "18:00 Uhr", + "competition": "Freundschaft", + "home": "SV Lanzendorf", + "away": "(SG1) TSV Melkendorf III/ TSV 08 Kulmbach II", + "home_crest": "img/crests/00ES8GNK3G000017VV0AG08LVUPGND5I.png", + "away_crest": "img/crests/00ES8GNK4O000002VV0AG08LVUPGND5I.png", + "is_home": false, + "goals_home": 4, + "goals_away": 4, + "result": "4:4", + "outcome": "draw" + } + ] + }, + { + "team_key": "damen", + "team_name": "Frauenmannschaft", + "league": "Frauen KL Ost", + "matches": [ + { + "kickoff": "2026-07-26T17:00", + "date_display": "So, 26.07.", + "time_display": "17:00 Uhr", + "competition": "Freundschaft", + "home": "TSV 08 Kulmbach", + "away": "(SG) 1.FC Michelau / 1.FC Fortuna Roth", + "home_crest": "img/crests/00ES8GNK3G000012VV0AG08LVUPGND5I.png", + "away_crest": "img/crests/00ES8GNK78000005VV0AG08LVUPGND5I.png", + "is_home": true, + "goals_home": 2, + "goals_away": 5, + "result": "2:5", + "outcome": "loss" + } + ] + } + ], + "vorschau": [ + { + "team_key": "erste-mannschaft", + "team_name": "1. Mannschaft", + "league": "Kreisklasse", + "match": { + "kickoff": "2026-08-08T18:00", + "date_display": "Sa, 08.08.", + "time_display": "18:00 Uhr", + "competition": "Liga", + "home": "SpVgg Wonsees", + "away": "TSV 08 Kulmbach", + "home_crest": "img/crests/00ES8GNK4O000016VV0AG08LVUPGND5I.png", + "away_crest": "img/crests/00ES8GNK3G000012VV0AG08LVUPGND5I.png", + "is_home": false + } + }, + { + "team_key": "zweite-mannschaft", + "team_name": "2. Mannschaft", + "league": "Reserve BK 5 BT-KU", + "match": { + "kickoff": "2026-08-07T18:30", + "date_display": "Fr, 07.08.", + "time_display": "18:30 Uhr", + "competition": "Liga", + "home": "(SG1) TSV Melkendorf III/ TSV 08 Kulmbach II", + "away": "SV Lanzendorf II flex", + "home_crest": "img/crests/00ES8GNK4O000002VV0AG08LVUPGND5I.png", + "away_crest": "img/crests/00ES8GNK3G000017VV0AG08LVUPGND5I.png", + "is_home": true + } + }, + { + "team_key": "damen", + "team_name": "Frauenmannschaft", + "league": "Frauen KL Ost", + "match": { + "kickoff": "2026-08-09T11:00", + "date_display": "So, 09.08.", + "time_display": "11:00 Uhr", + "competition": "Freundschaft", + "home": "TSV Engelmannsreuth", + "away": "TSV 08 Kulmbach", + "home_crest": "img/crests/00ES8GNK3G000009VV0AG08LVUPGND5I.png", + "away_crest": "img/crests/00ES8GNK3G000012VV0AG08LVUPGND5I.png", + "is_home": false + } + } + ], + "news": [ + { + "date": "2026-07-28", + "title": "Website Update 2026", + "text": "Unsere Website ist neu gebaut. Hier steht, was es jetzt gibt und wo du was findest.", + "image": { + "base": "img/news/neue-website", + "widths": [ + 640, + 1000 + ], + "alt": "Startseite unserer neuen Website mit Hero-Video und Termin-Karte" + }, + "href": "/news/website-update-2026", + "link_text": "Artikel lesen", + "source": "news" + }, + { + "date": "2026-07-26", + "title": "Sieg gegen TDC Lindau 2", + "text": "1. Mannschaft · Endstand 0:4", + "image": null, + "crest": { + "src": "img/crests/00ES8GNK3G000019VV0AG08LVUPGND5I.png", + "name": "TDC Lindau 2" + }, + "href": "/matchcenter", + "source": "ergebnis" + }, + { + "date": "2026-07-26", + "title": "Niederlage gegen (SG) 1.FC Michelau / 1.FC Fortuna Roth", + "text": "Frauenmannschaft · Endstand 2:5", + "image": null, + "crest": { + "src": "img/crests/00ES8GNK78000005VV0AG08LVUPGND5I.png", + "name": "(SG) 1.FC Michelau / 1.FC Fortuna Roth" + }, + "href": "/matchcenter", + "source": "ergebnis" + }, + { + "date": "2026-07-24", + "title": "Es geht wieder los! 🔥", + "text": "🔴⚫️", + "image": { + "src": "img/instagram/DbK7VV-s4P4.jpg", + "width": 640, + "height": 800, + "alt": "Es geht wieder los! 🔥" + }, + "href": "https://www.instagram.com/p/DbK7VV-s4P4/", + "source": "instagram" + }, + { + "date": "2026-07-19", + "title": "Niederlage gegen 1. FC Baiersdorf", + "text": "1. Mannschaft · Endstand 6:2", + "image": null, + "crest": { + "src": "img/crests/00ES8GNK4O00001DVV0AG08LVUPGND5I.png", + "name": "1. FC Baiersdorf" + }, + "href": "/matchcenter", + "source": "ergebnis" + } + ], + "momente": [ + { + "image": "img/instagram/DbK7VV-s4P4.jpg", + "alt": "Es geht wieder los! 🔥" + }, + { + "image": "img/instagram/DZw3JOPDKZq.jpg", + "alt": "Unsere Herren sind am Dienstag in die Vorbereitung gestartet. Die ersten intensiven Einheiten sind absolviert 🔥" + }, + { + "image": "img/instagram/DYgh-hwDHvg.jpg", + "alt": "Ergebnisse 🔴⚫️" + }, + { + "image": "img/instagram/DYSqpPiDP4d.jpg", + "alt": "Letzter Spieltag in der Saison 25/26 für unsere beiden Herrenmannschaften 🔴⚫️" + } + ] + }, + "published_at": "2026-07-31T13:34:54+00:00" + } + ] +} diff --git a/public/assets/img/stadionzeitung/2026-08-01-sv-hutschdorf/spieler-1000.png b/public/assets/img/stadionzeitung/2026-08-01-sv-hutschdorf/spieler-1000.png new file mode 100644 index 0000000..660e907 Binary files /dev/null and b/public/assets/img/stadionzeitung/2026-08-01-sv-hutschdorf/spieler-1000.png differ diff --git a/public/assets/img/stadionzeitung/2026-08-01-sv-hutschdorf/spieler-320.png b/public/assets/img/stadionzeitung/2026-08-01-sv-hutschdorf/spieler-320.png new file mode 100644 index 0000000..99db3b6 Binary files /dev/null and b/public/assets/img/stadionzeitung/2026-08-01-sv-hutschdorf/spieler-320.png differ diff --git a/public/assets/img/stadionzeitung/2026-08-01-sv-hutschdorf/spieler-640.png b/public/assets/img/stadionzeitung/2026-08-01-sv-hutschdorf/spieler-640.png new file mode 100644 index 0000000..047b15e Binary files /dev/null and b/public/assets/img/stadionzeitung/2026-08-01-sv-hutschdorf/spieler-640.png differ diff --git a/public/assets/img/stadionzeitung/2026-08-01-sv-hutschdorf/spieler.png b/public/assets/img/stadionzeitung/2026-08-01-sv-hutschdorf/spieler.png deleted file mode 100644 index bf3b732..0000000 Binary files a/public/assets/img/stadionzeitung/2026-08-01-sv-hutschdorf/spieler.png and /dev/null differ