{{-- /estimate (item 4) — página real del form de presupuesto. LAYOUT copiado TAL CUAL de Apex (X:\Work\Apex\landing/resources/views/estimate.blade.php): grid de 4 columnas con las DOS secciones de video full-bleed apiladas (cada una su fila de ~800px, con su título overlay gigante) y el FORM como card SUPERPUESTA flotando sobre ellas (col-start-3 + md:-top-50). Lo único que cambia respecto de Apex es el BRANDING: tokens del tema OSCURO del sitio (no el blanco/azul de Apex) y el contenido del form (backend propio Estimate*, pool sin New Construction). El estado reactivo (type→scope→features→budget) es Alpine SIN GSAP; opciones desde EstimateOptions (fuente única). Los dos video-placeholder usan la flag apagada (solo poster). JS en resources/js/estimate-form.js. --}} @extends('layouts.landing') @php $estimateOptions = \App\Support\EstimateOptions::forAlpine(); $timeframes = \App\Support\EstimateOptions::timeframes(); @endphp @section('hero') @endsection @section('content') {{-- Grid de Apex: [auto | 700 | 700 | auto], filas de 800px en md+. Las dos secciones de video ocupan las 4 columnas (una por fila); el form flota en la tercera columna, superpuesto (z-40) sobre los videos. --}}
{{-- Espacios laterales (solo estructura del grid). --}} {{-- Form: en mobile full-width con fondo degradé (cae primero, sobre los posters ocultos); en md+ pasa a la 3ª columna, centrado, y la card flota hacia arriba (md:-top-50) sobre las secciones de video. --}}

Book a Free Consultation

Take a moment to fill out our form and we'll get in touch with you as soon as we're available.

{{-- x-data en el
(como Apex): monta el estado reactivo con las opciones inyectadas desde el backend. El submit lo maneja el JS (estimate-form.js) con preventDefault; el lead se enviará DIRECTO a Espo desde el navegador (pendiente de cablear), no a un endpoint del backend — por eso ya no hay action/method/@csrf. --}} {{-- Section: About you --}}
About you
{{-- Section: Your Property --}}
Your Property
{{-- Section: About Your Project (reactivo) --}}
About Your Project {{-- Project type (Pool/Pavers) — radios sr-only estilizados como botones. --}}
{{-- Project scope — botones dependientes del tipo (pool SIN New Construction). Aparece al elegir el tipo. --}}
{{-- Desired project features — checkboxes dependientes del tipo. --}}
{{-- Project budget — select dependiente de type+scope. --}}
{{-- How soon are you looking to start (estático). --}}
{{-- Description (opcional). --}}
{{-- Foto opcional — dropzone VISUAL (recuadro punteado) con input file nativo detrás (sin la lib Dropzone) + drag&drop nativo (JS). --}}
{{-- Section: Best time to contact you — pickers Preact (isla, mismo patrón que la galería). El div target lo hidrata estimate/index.jsx: calcula fecha sugerida, bloquea días cerrados y genera los slots de hora (todo en la TZ del negocio, config('company.schedule')). Los dos hidden inputs son los que el submit (estimate-form.js) y el server leen por name; los pickers los rellenan. --}}
Best time to contact you
{{-- Valores reales del submit (rellenados por los pickers). --}}
{{-- Disclaimer TCPA. --}} {{--

By submitting this form you agree to be contacted by {{ config('company.legal_name') }} about your project by phone, text or email at the number and address provided, including by automated means. Consent is not a condition of purchase. Message and data rates may apply.

--}} {{-- Opt-in de SMS: OBLIGATORIO para enviar. La validación vive en estimate-form.js (REQUIRED_SELECTIONS), no en el markup — el form es `novalidate` y el submit se intercepta por JS. --}}
{{-- Detalle del programa de SMS: se SUMA al disclaimer TCPA de arriba (no lo reemplaza). El "checking the box above" se refiere al checkbox anterior, así que este bloque va después. --}} {{-- Las etiquetas en negrita NO usan text-fg (cream, se despegaba del párrafo): mismo bloque de color que el resto, un punto más oscuro — text-surface es el bg de los .field-input. --}}

Message Frequency: You will receive up to 5 messages per month.

Standard Rates: Message and data rates may apply depending on your mobile phone service plan.

Help & Stop: Reply HELP for help or STOP to cancel any time. By providing your phone number and checking the box above, you agree to receive text messages from {{ config('company.legal_name') }}. Consent is not required to make a purchase.

Privacy Policy

{{-- Estado del envío: verde (éxito) / rojo (error). Lo pinta el JS. --}}
{{-- Sección de video 1 (pool) — full-bleed, fila 1, oculta en mobile. --}} {{-- Sección de video 2 (pavers) — full-bleed, fila 2, oculta en mobile. --}}
{{-- Secciones que "viajan" al content en estimate: social-proof → how-it-works. NO va Service Areas ni Quote (Quote excluido por el @unless del layout); Reviews sí aparece (global). Orden final: form → proof → process → Reviews. --}} @endsection