b2in/resources/views/livewire/web/components/ui/header.blade.php
Kevin Adametz 7953a8c9a1 Interior-Farbwelt, Welten-Trennung, Tischlerei und Herkunfts-Sektion
Arbeitsplan 14.09.2026, Punkte 1.1 bis 1.4 (Nachträge 6 bis 10 im Entwicklungsplan):

- Farbwelt Interior (Tanne, Creme, Sand, Ocker, Clay) als Standard, Immobilien-Welt
  behält das bisherige Blau über body.world-immobilien; Logo je Welt, Favicons neu,
  Welten-Wechsler in Kopf- und Fußzeile.
- Saubere Trennung der Welten: eigene Navigation, Ankündigungsleiste, Magazinliste,
  Über-uns-Seite, FAQ, Kontaktseite und Abschluss-CTA für Immobilien; Beiträge tragen
  eine Welt (Migration + Admin-Feld). Abschluss-CTA Ton in Ton statt Grün-zu-Ocker.
- Kontakt: Betreffe in Gruppen Interior / Immobilien / B2in, Marken darin.
  Terminanfrage-Buttons öffnen das Widget mit vorgewähltem Anliegen; Select-Felder
  einheitlich gestaltet.
- Tischlerei als vierte Kernmarke (Platzhalter), Kachelraster 2×2.
- Herkunfts-Sektion „Aus der Region gefertigt“ mit schematischer Standortkarte und
  Ablauf CABINET (Beratung Bielefeld, Fertigung Köln, Aufbau mit Tischlerei).

Deployment: migrate, WorldSplitCmsSeeder, CmsBrandSeeder, OriginSectionCmsSeeder
(Abschnitt 8 im Entwicklungsplan).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-15 12:46:41 +00:00

137 lines
8.3 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<header class="header-normal" id="header">
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div class="flex items-center justify-between h-16">
{{-- Logo je Welt: Interior mit Zusatz und Ocker-Bogen, Immobilien ohne Zusatz
mit blauem Bogen. Der Pfad wird in mount() festgehalten. --}}
<a href="{{ $domainUrl }}" class="flex items-center">
<img src="{{ asset($logoPath) }}"
alt="{{ $domainName ?? 'B2in Interior' }} Logo" class="h-12 w-auto" />
</a>
<nav class="hidden md:flex items-center space-x-8" aria-label="{{ __('ui.main_navigation') }}">
@if(isset($content['navigation']) && is_array($content['navigation']))
@foreach ($content['navigation'] as $navItem)
<a href="{{ $navItem['url'] }}"
class="text-sm font-medium transition-colors relative
@if ($this->isActiveRoute($navItem['url'])) text-secondary after:absolute after:bottom-[-4px] after:left-0 after:w-full after:h-0.5 after:bg-secondary after:rounded-full
@else
text-primary hover:text-secondary @endif">
{{ $navItem['label'] }}
</a>
@endforeach
@endif
</nav>
<div class="flex items-center space-x-4">
{{-- Welten-Wechsler: Interior / Immobilien. Die aktive Welt ist gefuellt,
die andere nur Text – ein Umschalter, keine zweite Navigation. --}}
<nav class="hidden md:flex items-center rounded-full border border-border p-0.5 text-xs font-medium"
aria-label="{{ __('ui.worlds_label') }}" data-world-switch>
@foreach ($worlds as $key => $world)
<a href="{{ $world['url'] }}"
class="px-3 py-1 rounded-full transition-colors duration-200 {{ $world['active'] ? 'bg-primary text-primary-foreground' : 'text-muted-foreground hover:text-foreground' }}"
@if ($world['active']) aria-current="page" @endif
wire:key="world-switch-{{ $key }}">
{{ $world['label'] }}
</a>
@endforeach
</nav>
{{-- Language Switcher --}}
<div class="hidden md:flex items-center space-x-1 text-sm" role="group" aria-label="Language">
@foreach ($availableLocales as $locale => $label)
<button wire:click="switchLanguage('{{ $locale }}')"
class="px-2 py-1 rounded transition-colors duration-200
{{ $currentLocale === $locale
? 'text-secondary font-semibold'
: 'text-muted-foreground hover:text-foreground' }}"
@if($currentLocale === $locale) aria-current="true" @endif>
{{ $label }}
</button>
@if (!$loop->last)
<span class="text-border">|</span>
@endif
@endforeach
</div>
{{-- Hauptton statt Akzent: Ocker (Interior) traegt keinen Text mit
ausreichendem Kontrast, Tanne bzw. Anthrazit schon. --}}
<a href="{{ $contactUrl }}"
class="hidden md:block rounded-md px-5 py-2.5 text-sm font-medium bg-primary text-primary-foreground hover-bg-primary-light transition-all duration-200">
{{ __('ui.contact') }}
</a>
<button wire:click="toggleMobileMenu"
class="md:hidden w-5 h-5 text-muted-foreground hover:text-foreground transition-colors"
aria-label="{{ $this->isMobileMenuOpen ? __('ui.menu_close') : __('ui.menu_open') }}"
aria-expanded="{{ $this->isMobileMenuOpen ? 'true' : 'false' }}">
@if ($this->isMobileMenuOpen)
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M6 18L18 6M6 6l12 12"></path>
</svg>
@else
<svg class="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24" aria-hidden="true">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2"
d="M4 6h16M4 12h16M4 18h16"></path>
</svg>
@endif
</button>
</div>
</div>
{{-- Mobile Menu --}}
@if ($this->isMobileMenuOpen)
<div class="md:hidden border-t border-border bg-background/95 backdrop-blur-sm">
<nav class="px-4 py-6 space-y-4" aria-label="{{ __('ui.mobile_navigation') }}">
<div class="flex items-center gap-2 px-3 pb-2 text-xs font-medium" role="group"
aria-label="{{ __('ui.worlds_label') }}" data-world-switch>
@foreach ($worlds as $key => $world)
<a href="{{ $world['url'] }}"
class="px-3 py-1.5 rounded-full border transition-colors duration-200 {{ $world['active'] ? 'bg-primary text-primary-foreground border-primary' : 'border-border text-muted-foreground hover:text-foreground' }}"
@if ($world['active']) aria-current="page" @endif
wire:key="world-switch-mobile-{{ $key }}">
{{ $world['label'] }}
</a>
@endforeach
</div>
@if(isset($content['navigation']) && is_array($content['navigation']))
@foreach ($content['navigation'] as $navItem)
<a href="{{ $navItem['url'] }}"
class="block text-sm font-medium transition-colors py-2 px-3 rounded-md
@if ($this->isActiveRoute($navItem['url'])) text-secondary bg-secondary/10 border-l-2 border-secondary
@else
text-foreground hover:text-secondary hover:bg-muted/50 @endif"
wire:click="closeMobileMenu">
{{ $navItem['label'] }}
</a>
@endforeach
@endif
<div class="pt-4 border-t border-border space-y-3">
{{-- Mobile Language Switcher --}}
<div class="flex items-center space-x-1 text-sm px-3" role="group" aria-label="Language">
@foreach ($availableLocales as $locale => $label)
<button wire:click="switchLanguage('{{ $locale }}')"
class="px-3 py-1.5 rounded transition-colors duration-200
{{ $currentLocale === $locale
? 'text-secondary font-semibold bg-secondary/10'
: 'text-muted-foreground hover:text-foreground' }}"
@if($currentLocale === $locale) aria-current="true" @endif>
{{ $label }}
</button>
@if (!$loop->last)
<span class="text-border">|</span>
@endif
@endforeach
</div>
<a href="{{ $contactUrl }}"
class="block rounded-md px-5 py-2.5 text-sm font-medium bg-primary text-primary-foreground hover-bg-primary-light transition-all duration-200 text-center">
{{ __('ui.contact') }}
</a>
</div>
</nav>
</div>
@endif
</div>
</header>