{{-- Public Demo Attendance — portal landing. MIRROR OF: web.committee-attendance.portal. Same .cmt-portal-hero, same .cmt-card grid, same per-startup notes composer, same floating sticky attendance bar. Demo-specific additions: - Hero shows the demo's localized title (not "Committee Meeting") - Type + Mode label_option pills next to the date/time row - Optional cover image as the hero background when uploaded --}} @extends('web.signup.layout') @section('title', __('web.demo_attendance.title') . ' — ' . $demo->localizedTitle()) @section('page_title', __('web.demo_attendance.portal.meeting_title')) @section('page_subtitle', '') @section('body_class', 'has-sticky-logo') @php use App\Models\DemoAttendance; $status = $attendance?->status ?? DemoAttendance::STATUS_PENDING; $locale = app()->getLocale(); // Localized type / mode labels — null when the option wasn't set. $typeLabel = $demo->type?->{$locale === 'ar' ? 'name_ar' : 'name_en'}; $modeLabel = $demo->mode?->{$locale === 'ar' ? 'name_ar' : 'name_en'}; @endphp @push('styles') @endpush @section('content')
{!! __('web.demo_attendance.portal.welcome', ['name' => '' . e($investor->display_name) . '']) !!}
@csrf
cover_image_url) style="--demo-cover-url: url('{{ $demo->cover_image_url }}');" @endif>

{{ $demo->localizedTitle() ?: __('web.demo_attendance.portal.meeting_title') }}

{{ optional($demo->meeting_date)->locale($locale)->isoFormat('D MMMM Y') }} {{ $demo->formattedMeetingTime() }} @if ($typeLabel) {{ $typeLabel }} @endif @if ($modeLabel) {{ $modeLabel }} @endif

{{ __('web.demo_attendance.portal.startups_heading') }}

{{ __('web.demo_attendance.portal.startups_count', ['count' => $startups->count()]) }}
@forelse ($startups as $startup) @php $initial = mb_strtoupper(mb_substr(trim($startup->display_name ?? '?'), 0, 1)); // Read off the eager-loaded `files` collection (no per-card query). $logo = $startup->files->where('slot', 'logo')->sortByDesc('id')->first(); $logoUrl = $logo ? $logo->url() : null; // Pitch deck — shown when the file is serveable: either bytes // are on disk, OR it's a Monday asset we can lazy-download on // first click. Served THROUGH the app (symlink-independent). $applicationId = (int) $startup->pivot->startup_investment_round_id; $slot = $demo->slots->firstWhere('startup_investment_round_id', $applicationId); $pitch = $slot?->application?->files?->where('slot', 'pitch_deck')->sortByDesc('id')->first(); $pitchServeable = $pitch && ($pitch->isAvailable() || $pitch->monday_asset_id); $brief = (string) ($startup->startup_brief ?? ''); $sectorLabel = $startup->sector ? ($locale === 'ar' ? ($startup->sector->name_ar ?: $startup->sector->name_en) : ($startup->sector->name_en ?: $startup->sector->name_ar)) : null; @endphp
{{-- 2026-06-17: locale-aware primary + secondary. display_name resolves to the AR name in AR locale, EN name in EN locale (with fallback). The OTHER locale's name surfaces as a small subtitle ONLY when it actually differs from the primary — so a row with only one locale filled doesn't render an empty

. --}} @php $secondaryName = app()->getLocale() === 'ar' ? $startup->name_en : $startup->name; @endphp

{{ $startup->display_name }}

@if ($secondaryName && $secondaryName !== $startup->display_name)

{{ $secondaryName }}

@endif @if ($sectorLabel) {{ $sectorLabel }} @endif

{{ $brief !== '' ? $brief : __('web.demo_attendance.portal.no_description') }}

{{-- Pitch deck — opens the PDF directly from the card when a ready pitch deck exists. Keeps the portal focused on the two presentation materials (logo + pitch deck). --}} @if ($pitchServeable) {{ __('web.demo_attendance.portal.pitch_deck') }} @endif {{ __('web.demo_attendance.portal.view_details') }}
Application #{{ optional($demo->slots->firstWhere('startup_investment_round_id', $startup->pivot->startup_investment_round_id)?->application)->round_number ?? '—' }}
{{-- The per-startup notes composer was removed on 2026-06-11 per ops decision: the demo attendance portal must focus only on startup presentation materials (logo + pitch deck). The `demo-attendance.startups.note` route still exists server-side but no UI element calls it. --}}
@empty
{{ __('web.demo_attendance.portal.empty') }}
@endforelse
@include('web.demo-attendance.partials.sticky-bar', [ 'investor' => $investor, 'demo' => $demo, 'attendance' => $attendance, ]) {{-- The `demoStartupNote` Alpine component was removed on 2026-06-11 — see the inline comment where the composer used to sit. No JS is pushed from this view now. --}} @endsection