{{-- Базовый макет публичной части (ТЗ §10, §17, §18.1). Серверный рендеринг без обязательного JavaScript: контент страницы уже в HTML, скрипты только дополняют поведение. --}} @yield('title', config('app.name')) @hasSection('description') @endif @isset($canonical) @endisset @stack('meta') @vite(['resources/css/app.css', 'resources/js/app.js']) @livewireStyles {{-- Колонка на всю высоту экрана: на короткой странице (пустой кабинет, одна бронь, 404) подвал иначе оказывается посреди пустого белого поля. Растягивается содержимое, а не подвал — см. flex-1 у
. --}} Перейти к содержимому @include('partials.header')
@yield('content')
@include('partials.footer') @include('partials.bottom-nav') {{-- Окна шапки: разметка внизу страницы, открытие — через сторы Alpine. --}} @include('partials.city-modal') @include('partials.auth-modal') {{-- Alpine поставляется вместе с Livewire. Директива подключается явно: автовставка срабатывает только на страницах с Livewire-компонентами, а карта и выбор города нужны и на обычных Blade-страницах. --}} @livewireScripts