{{-- PWA Manifest --}} {{-- Favicon --}} @php $faviconUrl = null; if(isset($layoutConfigs) && $layoutConfigs->has('logos')) { $logos = $layoutConfigs['logos']->payload ?? []; if(!empty($logos['favicon'])) { $path = is_array($logos['favicon']) ? ($logos['favicon']['path'] ?? '') : $logos['favicon']; if($path) { $faviconUrl = v2_storage_url($path); } } } @endphp @if($faviconUrl) @else @endif {{-- SEO & Metadata --}} @include('v2-portal::metadata', [ 'pageTitle' => $pageTitle ?? null, 'pageDescription' => $pageDescription ?? null, 'coverImage' => $coverImage ?? null, 'gtag' => $gtag ?? [], 'schemas' => $schemas ?? [] ]) {{-- Bootstrap 5.3.3 CSS --}} {{-- Bootstrap Icons 1.11.3 --}} {{-- Nunito Sans — vendorizado localmente (sem dependência externa) --}} {{-- Design System Variables --}} @include('v2-portal::base-struct.colors') @include('v2-portal::base-struct.fonts') @include('v2-portal::base-struct.normalize') {{-- Portal Design System — classes utilitárias e componentes base --}} {{-- Injeção Global do Admin --}} @include('v2-portal::metadata.metaheader') {{-- CSS crítico de módulos e layouts — carregamento blocking no - @section('head-styles') para views filhas - @push('head-styles') para partials (header, footer, módulos) --}} @yield('head-styles') @stack('head-styles') {{-- [SLE] CSS Custom (Head) — injetado após SEO, antes de --}} @if(class_exists('V2\Modules\Support\StructuralLandingEditor\Services\BlockRenderer')) @inject('sleBlockRenderer', 'V2\Modules\Support\StructuralLandingEditor\Services\BlockRenderer') @if($sleBlockRenderer->hasBlocks('css_head')) @foreach($sleBlockRenderer->getBlocks('css_head') as $sleCssBlock) {!! $sleBlockRenderer->renderBlock($sleCssBlock->content) !!} @endforeach @endif {{-- [SLE] JS Custom (Head) — scripts críticos injetados no --}} @if($sleBlockRenderer->hasBlocks('js_head')) @foreach($sleBlockRenderer->getBlocks('js_head') as $sleJsBlock) {!! $sleBlockRenderer->renderBlock($sleJsBlock->content) !!} @endforeach @endif @endif @stack('styles') {{-- Skip links para acessibilidade eMAG --}} @include('v2-portal::base-struct.accessibility-skips') {{-- Ferramenta de Acessibilidade VLibras (exibido somente se ativado nas Features) --}} @if(!empty($portalConfigs['vlibras_enabled'])) @include('v2-portal::base-struct.vlibras') @endif
@yield('layout-content')
{{-- Widget Flutuante de Acessibilidade (independente da barra, controlado por feature flag) --}} @if(!empty($portalConfigs['accessibility_widget_enabled'])) @include('v2-portal::header.accessibility.widget') @endif {{-- Contêiner Shadow Print DOM (APE) --}} @include('v2-portal::print.print-only') {{-- jQuery 3.6 (SEMPRE síncrono: plugins SLE como nice-select, meanmenu, counterup, waypoints, magnific, viewport DEPENDEM de jQuery no momento do parse) --}} {{-- Bootstrap 5 JS Bundle (não requer jQuery, pode carregar com defer) --}} {{-- Portal Init — JavaScript global consolidado (defer) --}} {{-- [SLE] JavaScript Custom (Foot) — injetado antes de --}} @if(class_exists('V2\Modules\Support\StructuralLandingEditor\Services\BlockRenderer')) @if(isset($sleBlockRenderer) && $sleBlockRenderer->hasBlocks('js_foot')) @foreach($sleBlockRenderer->getBlocks('js_foot') as $sleJsBlock) {!! $sleBlockRenderer->renderBlock($sleJsBlock->content) !!} @endforeach @endif {{-- [SLE] CSS Custom (Foot) — injetado após todos os scripts --}} @if($sleBlockRenderer->hasBlocks('css_foot')) @foreach($sleBlockRenderer->getBlocks('css_foot') as $sleCssBlock) {!! $sleBlockRenderer->renderBlock($sleCssBlock->content) !!} @endforeach @endif @endif {{-- Estilos de acessibilidade (JS consolidado em portal-init.js) --}} @if(!empty($portalConfigs['accessibility_bar_enabled']) || !empty($portalConfigs['accessibility_widget_enabled']) || !empty($portalConfigs['vlibras_enabled'])) @include('v2-portal::header.accessibility.styles') @endif {{-- Injeção Global do Admin e Scripts de Fim de Página --}} @include('v2-portal::metadata.metafooter') {{-- Overlay da Guia de Leitura --}} @include('v2-portal::base-struct.accessibility-overlay') {{-- Service Worker Registration --}}