gerendert, * NICHT als CSS-Hintergrund. Grund: die CSP (default-src 'self', kein style-src) * verwirft jedes style-Attribut, eine Inline-Variable --banner-bg käme also nie an. * Das fiel lokal nie auf, weil `php -S` keine .htaccess und damit keine CSP kennt — * erst auf echtem Apache blieben die Slides schwarz (31.07.2026). Als ist es * ohnehin besser: srcset lädt am Handy die 640er statt der 1600er. Ein String bleibt * als Einzeldatei zulässig (Bestandsschutz, kein srcset). * * "accent" ist ein NAME, keine Farbe ("breadcrumb") — die Farbe steht als Token in * tokens.css, die Klasse ad-banner__slide--accent- in components.css. Ein * beliebiger Hex-Wert aus der JSON käme nur per Inline-Style in die Seite, und den * verwirft die CSP. Neuer Sponsor mit eigener CI = ein Token plus eine Klasse. * Auto-Rotation + Fortschritts-Indikatoren übernimmt der generische Antrieb * assets/js/carousel.js (pausiert bei Hover/Fokus, respektiert prefers-reduced-motion). * Ohne JS: nur der erste Banner ist sichtbar (Graceful Degradation). */ $bannerData = json_load('banners'); $banners = $bannerData['banners'] ?? []; if ($banners === []) { return; } $heading = $bannerData['heading'] ?? null; $subline = $bannerData['subline'] ?? null; $total = count($banners); ?>

Anzeigen unserer Sponsoren & Partner

    $banner): ?> (string) preg_replace('/[^a-z0-9-]+/', '', strtolower($v)); $classes = 'ad-banner__slide'; if ($bg) { $classes .= ' ad-banner__slide--bg'; } if ($accent) { $classes .= ' ad-banner__slide--accent ad-banner__slide--accent-' . $slug((string) $accent); } if ($variant) { $classes .= ' ad-banner__slide--' . $slug((string) $variant); } // Hintergrundbild als Bild-Prop für die img-Komponente. alt="" — der Hintergrund // ist Dekoration, die Aussage der Slide steht als Text daneben. $bgImage = null; if (is_array($bg) && !empty($bg['base'])) { $bgImage = ['base' => $bg['base'], 'widths' => $bg['widths'] ?? [1600], 'alt' => '']; } elseif (is_string($bg) && $bg !== '') { $datei = PUBLIC_PATH . '/assets/' . ltrim($bg, '/'); [$w, $h] = is_file($datei) ? (getimagesize($datei) ?: [0, 0]) : [0, 0]; $bgImage = ['src' => $bg, 'width' => $w, 'height' => $h, 'alt' => '']; } ?> ' . e($cta['label']) . ($internal ? '' : ' (öffnet in neuem Tab)') . ''; }; ?>
  • > $bgImage, 'class' => 'ad-banner__bg', 'sizes' => '(max-width: 1200px) 100vw, 1200px', 'eager' => $i === 0, ]); ?>
    <?= e($banner['company'] ?? $banner['title']) ?> loading="lazy" decoding="async">

1): ?>