@php /** @var string $title (optional) page title */ $siteName = setting('site_name', 'QuickMunch'); // A per-page search title/description set in Admin -> Settings -> Search & sharing wins // over the page's own heading; otherwise this resolves exactly as it did before. [$pageTitle, $metaDesc] = \App\Services\Seo::documentMeta($title ?? '', $pageMeta ?? null); $favicon = setting('favicon', 'assets/admin/favicon.png'); @endphp @php // Unified map engine (Leaflet/OpenStreetMap). This flag tells qm-map.js whether // external OSM street tiles are enabled. Off by default → every map renders a // self-contained LOCAL base (markers/circles/routes only) with zero external requests. @endphp @php /* One provider for the whole product, so every map flips together. Each provider keeps its OWN key (Mapbox access token vs Google Maps API key); we expose only the selected provider's key, and only when maps are enabled and that key is set — a default (OpenStreetMap) install ships neither. */ $qmMapProvider = setting('maps_provider', 'osm'); $qmMapKey = $qmMapProvider === 'mapbox' ? trim((string) setting('mapbox_token', '')) : ($qmMapProvider === 'google' ? trim((string) setting('google_maps_key', '')) : ''); @endphp @if (setting('maps_enabled', '1') === '1' && $qmMapKey !== '') @endif {{ $pageTitle }} @php // Favicon: emit a typed (png|ico|svg) + an apple-touch-icon for iOS home screens. $favExt = strtolower(pathinfo((string) $favicon, PATHINFO_EXTENSION)); $favType = $favExt === 'svg' ? 'image/svg+xml' : ($favExt === 'ico' ? 'image/x-icon' : 'image/png'); @endphp {!! \App\Services\Seo::headTags($pageTitle, $metaDesc) !!} {!! \App\Services\Seo::schemaTags() !!} @if (is_rtl()) @endif @php // Per-page stylesheets (asset-relative paths). Project sheets are auto-swapped // to their RTL build for right-to-left locales; vendor sheets pass through unchanged. @endphp @foreach (($pageStyles ?? []) as $__css) @endforeach @php $primary = setting('primary_color', ''); @endphp @if ($primary) @endif @php // A page's own head script, for the one job that cannot wait for the footer: a decision that // has to be made BEFORE the browser paints. Only the listing uses it today (it restores the // visitor's grid/list choice). Nothing is emitted for a page that passes none. @endphp @if (($pageHead ?? '') !== '') @endif