{{-- Global SEO defaults — admin-controlled at /admin/cms → Global SEO
Defaults. Page-level @section('title') / @section('meta_description')
override these per-page when set, so the legal pages or marketing
pages can have their own copy without losing the admin's defaults
for everything else. og:* tags share the same data so social
previews match. --}}
@php
$__seoTitle = \App\Models\SystemSetting::get('seo_default_title', $__sn . ' – AI-Powered Email Automation & CRM SaaS');
$__seoDesc = \App\Models\SystemSetting::get('seo_default_description', $__sn . ' – AI-Powered Email Automation & CRM SaaS. Manage inbox, contacts, campaigns, and workflows.');
$__seoOg = \App\Models\SystemSetting::get('seo_og_image', '');
@endphp
@yield('title', $__seoTitle)
{{-- Open Graph + Twitter card — pulls the same admin-saved values
so LinkedIn / Facebook / Twitter previews match the site title. --}}
@if($__seoOg)
@else
@endif
@if($__fav)
@else
@endif
{{-- PWA (conditional on admin setting) --}}
@php $pwaEnabled = \App\Models\SystemSetting::get('pwa_enabled', 'false') === 'true'; @endphp
@if($pwaEnabled)
@php $pwaIcon = \App\Models\SystemSetting::get('pwa_icon'); @endphp
@if($pwaIcon)
@endif
@endif
{{-- Body font (admin-configurable via Settings → General → Body Font) --}}
{!! \App\Helpers\FontHelper::renderHead() !!}
@vite(['resources/css/app.css', 'resources/css/landing.css', 'resources/js/app.js'])
@livewireStyles
@stack('styles')
{{-- Theme Studio runtime variables (light + dark, all tokens). Loaded
AFTER Vite so these override app.css defaults but BEFORE custom_css
so admins can still override specific properties. --}}
{!! \App\Helpers\ThemeHelper::renderCss() !!}
{{-- Admin-defined custom CSS rendered into every page's . --}}
@php $__customCss = \App\Models\SystemSetting::get('custom_css', ''); @endphp
@if(trim($__customCss) !== '')
@endif
{{-- Admin-defined raw HTML for the (analytics tags, custom meta, etc.) --}}
{!! \App\Models\SystemSetting::get('head_code', '') !!}
{{-- ═══ NAVIGATION BAR (same as landing page) ═══
Hidden on pages that opt out via `@section('hide_chrome', true)`
— Terms / Privacy / Refund use this so they render as bare legal
documents, especially when the customer is sending users there
from the login screen rather than from the public site. --}}
@if(!trim($__env->yieldContent('hide_chrome')))
@endif
{{-- Page Content. When chrome is hidden we drop the nav-spacer top
padding via `pt-0`; pages keep their own internal spacing. --}}
yieldContent('hide_chrome'))) class="pt-0" @endif>
@yield('content')
{{-- ═══ FOOTER (fully dynamic from admin) ═══
Skipped on opt-out pages (see hide_chrome section above). --}}
@if(!trim($__env->yieldContent('hide_chrome')))
@php $__fc = \App\Models\Page::where('type', 'footer')->first()?->content ?? []; @endphp
@endif
{{-- PWA Service Worker Registration & Install Prompt --}}
@if($pwaEnabled ?? false)
@include('partials.pwa-install-prompt')
@endif
{!! \App\Models\SystemSetting::get('footer_code', '') !!}
@stack('scripts')
@livewireScripts