{{-- /book (PRD §18): meeting types + the scheduling calendar embedded on-page (lazy-loaded), with a fallback (hosted booking page + direct email) if it does not load within a few seconds, when the embed is off, or when JS is disabled. Never a blank space (PRD §18.4). --}} @inject('settings', 'App\Domain\Site\Settings\BookingSettings') @inject('presenter', 'App\Domain\Engagement\Booking\BookingPresenter') @inject('contact', 'App\Domain\Site\Settings\ContactSettings') @inject('cta', 'App\Domain\Site\Settings\CtaSettings') @php $types = $settings->meeting_types; $fallbackEmail = $settings->fallback_email ?: $contact->public_email; $hosted = $settings->fallback_url ?: $settings->booking_url; $embeds = $presenter->embeds(); $defaultSrc = $embeds ? $presenter->embedUrl($types[0]['url'] ?? $settings->booking_url) ?? $presenter->embedUrl($settings->booking_url) : null; @endphp
@if ($types !== [])
    @foreach ($types as $type) @php($typeEmbed = $embeds ? $presenter->embedUrl($type['url'] ?? null) : null)
  • {{ $type['label'] }}

    @if (! empty($type['duration_minutes']))

    {{ __('portfolio.ui.minutes', ['count' => (int) $type['duration_minutes']]) }}

    @endif @if (! empty($type['description']))

    {{ $type['description'] }}

    @endif
    @if ($typeEmbed) {{ $cta->book_call_label }} @else {{ $cta->book_call_label }} @endif
  • @endforeach
@endif @if ($embeds && $defaultSrc) @endif

{{ $settings->fallback_message }}

@if ($hosted){{ $cta->book_call_label }}@endif @if ($fallbackEmail){{ $fallbackEmail }}@endif