@extends('web.signup.layout') @section('title', __('web.signup.startup.page_title')) @section('page_title', __('web.signup.startup.page_title')) @section('page_subtitle', __('web.signup.startup.page_subtitle')) @push('styles') @endpush @push('scripts') @endpush @section('content') @php // Completion tracking — drives the section-state pills only (does // not gate submission). Only LIST fields that are required, so an // optional section like 'round' (every field nullable since // 2026-06-17) has an empty list and instantly reads as "complete". // // 2026-06-17 section refactor (ops spec): // • Contact moved UP — now sits directly under Company so the // founder fills personal/contact info early. // • `applicant_full_name` added to Contact tracking (it's the // first input inside the section per spec). // • Files split out of the old "introduce" block into its OWN // dedicated section (logo / pitch deck / other files only), // to declutter the Founding Team section. // • Founding Team is now a pure team section (the modal-driven // team-block) with no file inputs mixed in. $sections = [ ['id' => 'company', 'fields' => ['name']], ['id' => 'contact', 'fields' => ['applicant_full_name', 'email', 'phone_number']], ['id' => 'files', 'fields' => []], // file inputs are required on the input itself; tracker stays empty ['id' => 'team', 'fields' => []], // member rows tracked client-side ['id' => 'idea', 'fields' => ['company_brief', 'problem', 'solution']], ['id' => 'sector', 'fields' => ['sector_option_id', 'product_stage_option_id', 'traction_option_id', 'revenue_model_option_id']], ['id' => 'round', 'fields' => []], // optional — see Section 5 comment block ['id' => 'extra', 'fields' => ['heard_about_option_id', 'accepted_privacy_policy']], ]; @endphp
@if (session('status'))
{{ session('status') }}
@endif @if ($errors->any()) @endif
@csrf {{-- ════════════════════════════════════════════════════════ --}} {{-- Section 1 — Company info --}} {{-- ════════════════════════════════════════════════════════ --}}
@error('name')

{{ $message }}

@enderror
{{-- 2026-06-17 column rename: form input + label now refer to `name_en` (the company's English-script name). The display label pulls from web.signup.startup.fields.name_en which renders "اسم الشركة بالإنجليزية" in AR and "Company Name (English)" in EN. The validation rule lives on `name_en` in StartupSignupRequest; old('name_en') is repopulated on a 422 redirect. --}}
@error('name_en')

{{ $message }}

@enderror
@error('website')

{{ $message }}

@enderror
@error('linkedin_url')

{{ $message }}

@enderror
@error('country_id')

{{ $message }}

@enderror
{{-- ════════════════════════════════════════════════════════ --}} {{-- Section 2 — Contact info (moved up 2026-06-17 per ops spec) --}} {{-- The Contact section now sits BEFORE the Files + Founding --}} {{-- Team sections so the founder fills identity/contact early. --}} {{-- A new `applicant_full_name` input was added at the top of --}} {{-- this section — it's the SOURCE of the first-name extraction--}} {{-- + Claude transliteration that fills first_name_en / --}} {{-- first_name_ar via the queued LocalizeFirstNameJob. --}} {{-- ════════════════════════════════════════════════════════ --}}
{{-- Applicant Full Name — REQUIRED. First input in this section per spec. The signup controller writes this verbatim to `startups.applicant_full_name`; the FirstNameLocalizationObserver fires after create() and queues a job that extracts the first token and transliterates it into the opposite script via Claude (NameTransliterator). --}}
@error('applicant_full_name')

{{ $message }}

@enderror
@error('email')

{{ $message }}

@enderror
@php // Default to the first DB-seeded country. $defaultCode = $countries[0]['code'] ?? ''; $oldCode = old('country_code', $defaultCode); @endphp
@error('phone_number')

{{ $message }}

@enderror
{{-- ════════════════════════════════════════════════════════ --}} {{-- Section 3 — Files (NEW dedicated section, 2026-06-17) --}} {{-- Logo + Pitch Deck + Other Files were moved here OUT of --}} {{-- the Founding Team section so file management has its own --}} {{-- clean, professional surface and doesn't get visually --}} {{-- entangled with team CRUD operations. --}} {{-- ════════════════════════════════════════════════════════ --}}
@php $bufferedFiles = $bufferedFiles ?? []; @endphp
{{-- When a previous submit buffered a logo, the input becomes optional client-side — the server will re-use the buffered file if the user leaves it blank. --}} {{ __('web.signup.startup.hints.logo') }} @isset($bufferedFiles['logo'])

{{ __('web.signup.startup.hints.buffered_saved') }} {{ $bufferedFiles['logo']['original_name'] }}

{{ __('web.signup.startup.hints.buffered_replace') }}

@endisset @error('logo')

{{ $message }}

@enderror
{{ __('web.signup.startup.hints.pitch_deck') }} @isset($bufferedFiles['pitch_deck'])

{{ __('web.signup.startup.hints.buffered_saved') }} {{ $bufferedFiles['pitch_deck']['original_name'] }}

{{ __('web.signup.startup.hints.buffered_replace') }}

@endisset @error('pitch_deck')

{{ $message }}

@enderror
{{ __('web.signup.startup.hints.other_files') }} @error('other_files.*')

{{ $message }}

@enderror
{{-- ════════════════════════════════════════════════════════ --}} {{-- Section 4 — Founding Team (slimmed 2026-06-17) --}} {{-- File uploads were moved into the new Files section above; --}} {{-- this section now contains ONLY the team-member modal + --}} {{-- chip list. id changed from 'introduce' to 'team' to match --}} {{-- its new single responsibility. --}} {{-- ════════════════════════════════════════════════════════ --}}
{{-- Team members — popup-driven (saves screen space) --}} @php // [code => name] map for the JS layer to render // commitment labels on saved team-cards without // hardcoded translations. $commitmentLabels = collect($commitmentTypes) ->mapWithKeys(fn ($c) => [$c['code'] => $c['name']]) ->all(); // {position_id => name} for the team-card "position" line. $positionLabels = $memberPositions ?? []; @endphp
{{ __('web.signup.startup.fields.team_members') }}

{{ __('web.signup.startup.hints.team') }}

{{-- Empty state --}}
{{ __('web.signup.startup.team.empty') }}
{{-- Member chips list --}}
{{-- Hidden inputs that submit with the form. `position` is now a free-text string (the legacy `position_option_id` hidden input was retired on 2026-06-17). --}} {{-- ───── Modal ───── --}}
{{-- ════════════════════════════════════════════════════════ --}} {{-- Section 5 — Idea / product --}} {{-- (Old Contact block at this position was moved up to --}} {{-- Section 2 on 2026-06-17 per ops spec.) --}} {{-- ════════════════════════════════════════════════════════ --}}
@error('company_brief')

{{ $message }}

@enderror
@error('problem')

{{ $message }}

@enderror
@error('solution')

{{ $message }}

@enderror
@error('compelling_factors')

{{ $message }}

@enderror
{{-- ════════════════════════════════════════════════════════ --}} {{-- Section 4 — Sector & stage --}} {{-- ════════════════════════════════════════════════════════ --}}
{{-- Field order locked 2026-06-14 per ops spec: 1. Sector 2. Product Stage 3. Traction 4. Revenue Model 5. Customer Focus Round Type + Investment Stage live in the next section (Investment Round Details). --}}
@error('sector_option_id')

{{ $message }}

@enderror
{{-- Customer Focus — added 2026-06-14. Optional on the public form; admin can fill it later from the inline section editor. --}}
@error('customer_focus_option_id')

{{ $message }}

@enderror
{{-- ════════════════════════════════════════════════════════ --}} {{-- Section 5 — Round numerics (optional) --}} {{-- ════════════════════════════════════════════════════════ --}}
{{-- Field order locked 2026-06-14 per ops spec: 1. Round Type 2. Investment Stage 3. Asking Fund (SAR) 4. Minimum Ticket (SAR) 5. Offered Equity % 6. Total Raised (SAR) 7. Runway Months 2026-06-17: per ops spec — the whole section is now OPTIONAL. The required asterisks + `required` HTML attributes + backend `required` validation rules were stripped from every field in this section so a founder can submit a complete profile without filling any of these numerics. The deal team fills them during DD. Removed permanently (NOT just from this section): • Current Valuation (SAR) — `valuation_sar` • Number of Previous Rounds — `previous_round_count` Both DB columns are already gone (2026-05-12 drop migration). Post-money valuation is computed server-side on save (see Startup::booted()). `total_raised_sar` is the sole "what was raised" signal kept on the form. --}}
@error('round_type_option_id')

{{ $message }}

@enderror
@error('investment_stage_option_id')

{{ $message }}

@enderror
@error('asking_fund_sar')

{{ $message }}

@enderror
@error('min_ticket_size_sar')

{{ $message }}

@enderror
@error('offered_equity_pct')

{{ $message }}

@enderror
@error('total_raised_sar')

{{ $message }}

@enderror
{{-- ════════════════════════════════════════════════════════ --}} {{-- Section 6 — Extra & consent --}} {{-- ════════════════════════════════════════════════════════ --}}
@error('heard_about_option_id')

{{ $message }}

@enderror
{{-- Privacy-policy consent --}}
@include('web.signup.partials.privacy-consent')
{{-- Submit --}}
{{ __('web.signup.common.secure_data') }}
@endsection