@php $__sn = \App\Models\SystemSetting::get('site_name', config('app.name')); $__fav = \App\Models\SystemSetting::get('favicon'); $__logoL = \App\Models\SystemSetting::get('logo_light'); $__logoD = \App\Models\SystemSetting::get('logo_dark'); @endphp {{-- 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