Feinschliff: Navigation, Hero-Center, Personen-Karten & Tokens

Querschnitt-Verbesserungen ohne eigenes Feature:
- Navigation: Untermenü-Trenner (separator) + Mitmachen-Link, rote Akzent-Leiste
- Startseiten-Hero zentriert (align center, ohne Hero-CTAs); .hero--center-Styles
- person-card/person-grid: Kontakt-Layout, 3-Spalten-Raster (Startseite)
- jsonld: geo aus club.json; cta unterstützt #hash-Anker
- verein: hartcodierten Maps-Link/Inline-CTA entfernt, .facility zentriert
- tokens: Sepia-Farben für Timeline; base: globale p-max-width entfernt
- historie: Timeline um 2024/2025 ergänzt
- Icons link-45deg (Footer) und robot (meta) nachgereicht

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HGzc6GhWhmLJt1jC2q1SRZ
This commit is contained in:
2026-06-20 20:49:46 +02:00
parent a3d64e7d91
commit adf142b18e
18 changed files with 190 additions and 82 deletions

View File

@@ -3,16 +3,11 @@
declare(strict_types=1);
/**
* Vereins-Übersichtsseite (Hub). Inhalt: data/verein.json + data/club.json.
* Struktur: Hero → Eckdaten (key-facts) → Leitbild (split) → Abteilungs-Kacheln →
* Gelände/Drohnenbild → CTA → FAQ.
* Vereins-Übersichtsseite (Hub). Inhalt: data/verein.json.
* Struktur: Hero → Abteilungs-Kacheln → Gelände → Leitbild → Historien-Teaser → FAQ.
*/
$page = json_load('verein');
$club = json_load('club');
$addr = $club['address'] ?? [];
$mapsQuery = rawurlencode(trim(($addr['venue'] ?? '') . ', ' . ($addr['street'] ?? '') . ', ' . ($addr['zip'] ?? '') . ' ' . ($addr['city'] ?? ''), ', '));
// Zwei Abteilungs-Kacheln. Turnen verlinkt bereits auf /turnen (Seite folgt).
$cards = [
[
@@ -44,19 +39,16 @@ $meta = [
component('hero', ['hero' => $page['hero']]);
component('key-facts', ['facts' => $page['facts'] ?? [], 'anchor' => 'eckdaten']);
component('section', ['section' => $page['about']]);
component('team-cards', [
'teams' => $cards,
'title' => 'Unsere Abteilungen',
'title_hidden' => true,
'intro' => $page['abteilungen_intro'] ?? '',
'intro_below' => true,
'anchor' => 'abteilungen',
]);
?>
<section class="section facility" id="gelaende">
<section class="section section--tinted facility" id="gelaende">
<div class="container">
<h2><?= e($page['gelaende']['title']) ?></h2>
<p class="facility__lead"><?= e($page['gelaende']['text']) ?></p>
@@ -66,19 +58,12 @@ component('team-cards', [
<figcaption class="facility__caption"><?= e($page['gelaende']['caption']) ?></figcaption>
<?php endif; ?>
</figure>
<p class="facility__actions">
<a class="btn btn--outline" href="https://www.google.com/maps/search/?api=1&amp;query=<?= e($mapsQuery) ?>" target="_blank" rel="noopener">Route planen<span class="visually-hidden"> (öffnet Google Maps in neuem Tab)</span></a>
</p>
</div>
</section>
<?php
component('cta-band', ['band' => [
'title' => 'Werde Teil des TSV 08',
'text' => 'Ob Fußball oder Turnen komm unverbindlich vorbei oder schreib uns. Wir finden gemeinsam die passende Gruppe für dich.',
'ctas' => [
['label' => 'Mitglied werden', 'slug' => 'mitglied-werden', 'style' => 'primary'],
['label' => 'Kontakt aufnehmen', 'slug' => '#kontakt', 'style' => 'outline'],
],
]]);
component('section', ['section' => $page['about']]);
component('section', ['section' => $page['historie_teaser']]);
component('faq', ['faq' => $page['faq'] ?? []]);