{{-- Public layout for client-facing content pages (services catalogue, blog, FAQ, terms, /p/{slug}) that must render with or without a session. Lean header + theme toggle + the landing's footer; the panel brand seed themes it per reseller like the rest of the product. THE FOOTER IS THE LANDING'S. These pages used to end mid-air — content card, then nothing — while the landing closed with brand, social links and legal pages. They now share one partial (frontend.partials.footer), so a visitor who arrives on /p/privacy from a search result gets the same way out as one who arrived at "/". That footer is styled by the landing stylesheet, which is why it is pulled in below. --}} {{ \App\Support\Seo::title($title ?? null) }} @php $rfFavicon = panel_favicon_url(); @endphp @if ($rfFavicon) @else @endif {{-- Settings → SEO drives the tags these public pages shipped without. The landing has its own SEO editor and is not rendered from this layout. --}} @php $seoDesc = \App\Support\Seo::description($metaDescription ?? null); @endphp @if ($seoDesc !== '')@endif @if ($seoDesc !== '')@endif @if (\App\Support\Seo::image() !== '')@endif @include('partials.analytics') {{-- Brand seed. The --lp-* half is the landing's palette, resolved through the panel's own skin, so the shared footer is the exact colour it is on the landing instead of falling back to an unstyled strip. --}} @php $lpVars = (array) (landing_template_meta(landing_template())['vars'] ?? []); // Sanitise the skin variables ONCE so the @vite(['resources/css/app.css', 'resources/js/app.js']) {{-- The landing stylesheet, for the shared footer. Everything in it is scoped to .lp / .lp-* (this body carries no .lp class), so nothing here restyles a content page — it only makes the footer look like itself. Included whole rather than forked so the two can never drift apart. --}} @include('frontend.partials.styles') @livewireStyles @stack('head')
@php $rfLogoPublic = panel_logo_url(); @endphp @if ($rfLogoPublic) {{ \App\Support\Brand::name() }} @else {{ mb_strtoupper(mb_substr(\App\Support\Brand::name(), 0, 1)) }} {{ \App\Support\Brand::name() }} @endif
@auth {{ __('Dashboard') }} @else {{ __('Login') }} @endauth
{{-- 1200px, matching the header rail above. The services catalogue is a table-shaped accordion and 900px squeezed it; the text pages read fine wider too, so one width serves them all rather than a per-page override. The cap is a max, so mobile is untouched. --}}
{{ $slot }}
@include('frontend.partials.footer') @livewireScripts