@php
$siteName = $domainName ?? config('app.name', 'Laravel');
// Inline-@section('title', …)-Werte kommen von Blade bereits escaped an —
// einmal dekodieren, damit {{ }} unten nicht doppelt escapt („&").
$pageTitle = html_entity_decode(trim($__env->yieldContent('title')), ENT_QUOTES, 'UTF-8') ?: $siteName;
$pageDescription = html_entity_decode(trim($__env->yieldContent('meta_description')), ENT_QUOTES, 'UTF-8') ?: $siteName;
// Self-Canonical als Default aus der Portal-URL + Request-Pfad (ohne Query):
// pro Portal/Domain getrennt und unabhängig von URL::forceRootUrl – verhindert Cross-Portal-Duplicate.
$portalBase = \App\Support\StaticPageCanonical::selfBase($domainUrl ?? null, ($webPortalContextApplied ?? false) === true);
// Statische Seiten liegen auf Hub UND beiden Portalen mit identischem
// Text (Anhang 2, E10): dort führt ein Host, die anderen verweisen
// dorthin. Rechtstexte sind ausgenommen — siehe config/canonical.php.
$canonicalUrl = trim($__env->yieldContent('canonical'))
?: (\App\Support\StaticPageCanonical::urlFor(request()->route()?->getName(), request()->getPathInfo())
?: $portalBase.request()->getPathInfo());
$ogType = trim($__env->yieldContent('og_type')) ?: 'website';
$ogImage = trim($__env->yieldContent('og_image'));
@endphp
{{ $pageTitle }}
@php
$robotsDirective = trim($__env->yieldContent('robots'));
@endphp
{{-- Robots-Anweisung (z. B. noindex für private Vorschauen) --}}
@if ($robotsDirective !== '')
@endif
{{-- Kanonische URL (entfällt bei noindex — es gibt keine öffentliche URL) --}}
@if (! str_contains($robotsDirective, 'noindex'))
@endif
{{-- Sprach-Alternates (de/en) – pro Seite optional gesetzt --}}
@hasSection('hreflang')
@yield('hreflang')
@endif
{{-- RSS-Autodiscovery (Roadmap 3.1) – Portal-Feed und, auf Branchenseiten, der Feed der Branche --}}
@yield('feed_links')
{{-- OpenGraph / Social --}}
@if ($ogImage)
@endif
@if ($ogImage)
@endif
{{-- Seitenspezifische Zusatz-Metas (z. B. article:* auf PM-Detailseiten) --}}
@yield('meta_extra')
{{-- Strukturierte Daten (JSON-LD) – pro Seite optional gesetzt --}}
@yield('structured_data')
@include('partials.local-fonts')
@php
$font = \App\Helpers\ThemeHelper::getFont();
$theme = config('app.theme', 'businessportal24');
@endphp
{{-- app.js bündelt Livewire + Alpine (livewire.esm) — @livewireScriptConfig
unten verhindert, dass Livewire zusätzlich sein eigenes Script injiziert
(sonst zwei Alpine-Instanzen und kaputte wire:model-Bindings). --}}
@livewireStyles
@vite([\App\Helpers\ThemeHelper::getThemeCssPath(), 'resources/js/app.js'], $domainConfig['assets_dir'] ?? 'build/web')
@stack('styles')
@yield('content')
{{-- Schwebendes Kontakt-Widget (unten rechts, alle Web-Domains) --}}
@stack('scripts')
@livewireScriptConfig