Umsetzung von AP0-AP6 aus dev/2026-08-28/entwicklungsplan.md sowie der vorab gefundenen Befunde T1 und B1-B13. Befunde - CmsContentSeeder überschrieb bei jedem Lauf alle redaktionellen Inhalte; jetzt Redaktionsschutz plus gezielter Relaunch-Seeder (B1) - Magazin-CMS war nicht ans Frontend angebunden, Artikel jetzt über Slugs mit 301 von den alten numerischen URLs (B2) - Vier veröffentlichte Display-Playlists zeigten auf b2in.test und wären live nicht ladbar gewesen (B13) - Info-Tablet speicherte geleerte Öffnungszeiten nicht (T1) - /service und /portfolio lieferten seit Februar 500 (B12) Website - Startseite neu strukturiert und umgetextet, eigene Seite /marken mit Detailseite je Kernmarke, /netzwerk und Altrouten leiten dorthin - Galerie je Marke, getrennt nach realisierten Projekten und Visualisierungen; ohne gesetzte Kategorie gilt ein Bild als Entwurf - Seite /referenzen, gespeist aus den Markengalerien - Showroom-Display im 9:16-Rahmen über eine schreibgeschützte Embed-Route ohne Preview-Token - Terminanfrage-Widget auf allen Seiten, Markenauswahl aus dem CMS, WhatsApp per Klick-zum-Chat-Link mit vorbereitetem Text - FAQ, Über-uns, Kontakt und Magazin inhaltlich auf Interior umgestellt Sonstiges - Vorschau-Instanzen liefern noindex und verlinken sich bei unbekanntem Host auf sich selbst statt auf eine fremde Domain - Seeder-Zugangsdaten aus dem Code in die Konfiguration (B8) - Ablauf für die Vorschau: dev/2026-08-28/preview-deployment.md 833 Tests grün (3084 Assertions), Pint sauber. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
59 lines
3.7 KiB
PHP
59 lines
3.7 KiB
PHP
{{-- Übersichtsseite /marken: je Marke Logo, Bild, Claim, Text, drei Merkmale und der Weg
|
|
zur Detailseite. Jede Marke steht in einem eigenen Rahmen, damit klar ist, was zusammengehört.
|
|
Abwechselnde Bildseite, damit die Liste nicht monoton wird. --}}
|
|
<section class="section-padding {{ $bg }}">
|
|
<div class="container-padding space-y-10 lg:space-y-14">
|
|
@foreach ($brands as $index => $brand)
|
|
<article class="card-elevated rounded-3xl p-6 sm:p-8 lg:p-12" wire:key="brand-{{ $brand['slug'] }}">
|
|
<div class="grid lg:grid-cols-2 gap-10 lg:gap-16 items-center">
|
|
<div class="{{ $loop->even ? '' : 'lg:order-2' }}">
|
|
@if (!empty($brand['image']))
|
|
<img src="{{ theme_image_url($brand['image']) }}" alt="{{ $brand['name'] }}"
|
|
class="w-full rounded-2xl object-cover aspect-[4/3]" loading="lazy" />
|
|
@else
|
|
{{-- Platzhalter, solange die Bildmotive fehlen (offene Zulieferung). --}}
|
|
<div class="w-full aspect-[4/3] rounded-2xl bg-muted flex items-center justify-center">
|
|
<span class="text-muted-foreground text-sm">{{ $brand['name'] }}</span>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
|
|
<div class="{{ $loop->even ? '' : 'lg:order-1' }}">
|
|
@if (!empty($brand['logo']))
|
|
<img src="{{ theme_image_url($brand['logo']) }}" alt="{{ $brand['name'] }}"
|
|
class="h-9 w-auto mb-5 object-contain object-left" loading="lazy" />
|
|
@endif
|
|
|
|
<h2 class="text-2xl lg:text-3xl font-medium">{{ $brand['name'] }}</h2>
|
|
<p class="text-large text-secondary font-medium mt-1">{{ $brand['tagline'] }}</p>
|
|
|
|
@foreach (preg_split('/\R{2,}/', trim((string) ($brand['summary'] ?: $brand['teaser']))) as $i => $paragraph)
|
|
<p class="text-muted-foreground leading-relaxed mt-4">{!! nl2br(e($paragraph)) !!}</p>
|
|
@endforeach
|
|
|
|
@if (!empty($brand['highlights']))
|
|
<ul class="mt-6 space-y-2 pt-6 border-t border-border/60">
|
|
@foreach ($brand['highlights'] as $i => $highlight)
|
|
<li class="flex items-start gap-3" wire:key="hl-{{ $brand['slug'] }}-{{ $i }}">
|
|
<svg class="w-5 h-5 text-secondary shrink-0 mt-0.5" fill="none" stroke="currentColor"
|
|
stroke-width="2" viewBox="0 0 24 24" aria-hidden="true">
|
|
<path stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5" />
|
|
</svg>
|
|
<span class="text-muted-foreground">{{ is_array($highlight) ? ($highlight['title'] ?? '') : $highlight }}</span>
|
|
</li>
|
|
@endforeach
|
|
</ul>
|
|
@endif
|
|
|
|
@if (!empty($brand['has_detail_page']))
|
|
<a href="{{ route('marken.show', ['slug' => $brand['slug']]) }}"
|
|
class="btn-primary-accent px-6 py-3 mt-8 inline-block">
|
|
{{ __('ui.more_about', ['name' => $brand['name']]) }}
|
|
</a>
|
|
@endif
|
|
</div>
|
|
</div>
|
|
</article>
|
|
@endforeach
|
|
</div>
|
|
</section>
|