{{-- Hub × FluxUI Phase 5 — Portal-Shell im Hub-Design. Erscheinung (Light/Dark) wird über FluxUI Appearance-Switcher gesteuert. Server liest das `flux_appearance`-Cookie (gesetzt vom JS-Bridge in partials/head.blade.php) und rendert class="dark" direkt im , damit es bei wire:navigate kein Theme-Flash gibt. Bei fehlendem Cookie (Erstbesuch) wird Light gerendert und das JS schaltet bei dunkler Präferenz nach Page-Load nach — der einmalige Flash beim allerersten Aufruf ist akzeptiert. --}} request()->cookie('flux_appearance') === 'dark'])> @include('partials.head') {{-- Brand-Block: Wortmarke + Hub-Eyebrow --}}
Publisher · Hub
@php $user = auth()->user(); $impersonation = app(\App\Actions\Admin\UserImpersonation::class); $impersonator = $impersonation->impersonator(); $isImpersonating = $impersonation->isActive(); $canAdmin = ($user?->canAccessAdmin() ?? false) && !$isImpersonating; $canCustomer = $user?->canAccessCustomer() ?? false; $reviewCount = $canAdmin ? app(\App\Services\Admin\AdminPerformanceCache::class)->pressReleaseReviewCount() : 0; $legalOpenCount = $canAdmin ? \App\Models\LegalRequest::query()->open()->count() : 0; $contactOpenCount = $canAdmin ? \App\Models\ContactMessage::query()->open()->count() : 0; @endphp {{-- Dashboard (Admin/Editor) --}} @if ($canAdmin) {{ __('Dashboard') }} @endif {{-- Mein Bereich – sichtbar für alle Panel-User --}} @if ($canCustomer) {{ __('Übersicht') }} {{ __('Pressemitteilungen') }} {{ __('Firmen') }} {{ __('Buchungen & Add-ons') }} {{ __('Rechnungen') }} {{ __('Profil') }} {{ __('Sicherheit') }} {{ __('API & Integrationen') }} {{ __('presseecho') }} {{ __('businessportal24') }} @endif {{-- Content Management (Admin/Editor) --}} @if ($canAdmin) {{ __('Pressemitteilungen') }} {{ __('Firmen') }} {{ __('Kontakte') }} @can('users:manage') {{ __('Benutzer') }} {{ __('Newsletter') }} @endcan {{ __('Bilder') }} @can('compliance:manage') {{ __('Verlauf') }} {{ __('Beweisarchiv') }} {{-- Kontakt: Anliegen aus dem Kontakt-Widget (Widget + Hub-Formular) --}} {{ __('Anliegen') }} {{-- Recht & Compliance --}} {{ __('Anfragen') }} @endcan {{-- Billing --}} @can('billing:manage') {{ __('Legacy Rechnungen') }} {{ __('Zahlungen') }} {{ __('Tarife & Pakete') }} {{ __('Gutscheine') }} {{ __('Newsletter Sync') }} @can('users:manage') {{ __('Mail-Sperrliste') }} @endcan @endcan {{-- Content --}} @can('categories:manage') {{ __('Kategorien') }} @endcan @can('footer-codes:manage') {{ __('Footer-Codes') }} @endcan {{-- Administration --}} {{ __('Voreinstellungen') }} @can('roles:manage') {{ __('Rollen & Rechte') }} @endcan {{-- Reports --}} {{ __('Performance') }} {{ __('Einlieferer-Bericht') }} {{ __('Indexierung & Abrufe') }} @can('settings:manage') {{ __('Betriebsüberwachung') }} @endcan @endif {{-- Portal-Filter für Admin-Benutzer (P2.6) --}} @auth @if ($canAdmin)
@endif @endauth @if ($impersonator) {{-- Testmodus-Block im Hub-Stil (statt Amber-Warnfarbe). Dunkles Hub-Blau-Panel mit Bernstein-Eyebrow, klare CTA „Zurück zum Admin" als helle Pille. --}}
{{ __('Testmodus aktiv') }}

{{ __('Angemeldet als') }} {{ $user?->name }}.
{{ __('Admin:') }} {{ $impersonator->name }}

@csrf
@endif
{{ auth()->user()->initials() }}
{{ auth()->user()->name }} {{ auth()->user()->email }}
{{ __('Profil') }} {{-- Phase 5: Appearance-Switcher direkt im User-Menü. `$flux.appearance` ist FluxUIs Magic-Object, persistent über LocalStorage. Werte: 'light' | 'dark' | 'system'. --}}
{{ __('Erscheinung') }}
@csrf {{ __('Abmelden') }}
{{-- Desktop-Topbar: immer verfügbarer Status (Buchung, freie PMs, Credits) oben rechts. Nur für Panel-User mit Kundenbereich. --}} @if ($canCustomer) @endif @if ($canCustomer) @endif
{{ auth()->user()->initials() }}
{{ auth()->user()->name }} {{ auth()->user()->email }}
{{ __('Profil') }} {{-- Phase 5: Appearance-Switcher (Mobile-Dropdown). --}}
{{ __('Erscheinung') }}
@csrf {{ __('Abmelden') }}
{{ $slot }} {{-- Schwebendes Kontakt-Widget (unten rechts, eingeloggter Bereich) --}} @persist('toast') @endpersist @vite(['resources/js/portal-form-hooks.js', 'resources/js/passkeys.js'], 'build/portal') @fluxScripts