{{-- Entrance animations hide their targets in CSS only when JS is available,
so nothing flashes visible-then-hidden before GSAP takes over. If the
motion bundle never signals ready, the class is removed and content is
revealed (nothing can get stuck hidden). --}}
{{--
SEO head contract for Phase 5 controllers/views:
- Pass a `$seo` array (or an Eloquent model) from the controller/view.
Keys: model, title, description, image, canonical, robots, noindex,
type, keywords, heroImage.
- Push extra per-page JSON-LD with @push('json-ld') ... @endpush.
- Or fully override this block with @section('seo') ... @endsection.
--}}
@php
$seo = $seo ?? [];
if ($seo instanceof \Illuminate\Database\Eloquent\Model) {
$seo = ['model' => $seo];
}
$seoData = is_array($seo) ? $seo : [];
if (blank($seoData['title'] ?? null)) {
$sectionTitle = \Illuminate\Support\Facades\View::getSection('title');
if (filled($sectionTitle)) {
$seoData['title'] = $sectionTitle;
}
}
@endphp
@hasSection('seo')
@yield('seo')
@else