{# # ============================================================================ # ORGANISM: CONTACT FORM # ============================================================================ # Section complète de contact — split layout deux colonnes. # Gauche : grand titre + checklist. # Droite : card formulaire sticky (AJAX via Stimulus landing--contact-form). # # PARAMETRES # | form | FormView | requis | Symfony form view | # | contactEmail | string | requis | Email de contact | # ============================================================================ #}
{# ── Background identique au hero landing ── #}
{# ── Contenu ── #}
{# ── Colonne gauche ── #}
{# Badge contextuel #}
Contactez-nous

Parlons de
votre projet.

Une question, une démo ou une offre sur mesure — décrivez votre besoin, notre équipe vous répondra.

{# Checklist #}
    {% for item in [ 'Découvrir Bubul avec une démo guidée', 'Choisir la formule adaptée à votre équipe', "Être accompagné dans la prise en main", "Explorer une collaboration ou un partenariat" ] %}
  • {{ item }}
  • {% endfor %}
{# ── Colonne droite : formulaire ── #}
{# Barre accent gradient en haut de la card #}
{# ── Contenu formulaire (masqué après envoi réussi) ── #}

Parlez-nous de votre projet

Les champs marqués * sont obligatoires.

{# Erreur globale (rate limit, réseau) #} {{ form_start(form, {'attr': { 'novalidate': 'novalidate', 'class': 'flex flex-col gap-4', 'data-action': 'submit->landing--contact-form#submit' }}) }} {# Honeypot — caché aux humains, visible aux bots #} {# Prénom + Nom côte à côte #}
{{ form_widget(form.firstName, {'attr': {'class': 'w-full border border-[#DDE5EF] rounded-xl px-3.5 py-2.5 text-sm text-[#1A2B3F] bg-white outline-none focus:border-primary focus:ring-2 focus:ring-primary/10 transition-all', 'placeholder': 'Marie'}}) }} {{ form_errors(form.firstName) }}
{{ form_widget(form.lastName, {'attr': {'class': 'w-full border border-[#DDE5EF] rounded-xl px-3.5 py-2.5 text-sm text-[#1A2B3F] bg-white outline-none focus:border-primary focus:ring-2 focus:ring-primary/10 transition-all', 'placeholder': 'Dupont'}}) }} {{ form_errors(form.lastName) }}
{# Email #}
{{ form_widget(form.email, {'attr': {'class': 'w-full border border-[#DDE5EF] rounded-xl px-3.5 py-2.5 text-sm text-[#1A2B3F] bg-white outline-none focus:border-primary focus:ring-2 focus:ring-primary/10 transition-all', 'placeholder': 'marie@ecole.fr'}}) }} {{ form_errors(form.email) }}
{# Organisation #}
{{ form_widget(form.organisation, {'attr': {'class': 'w-full border border-[#DDE5EF] rounded-xl px-3.5 py-2.5 text-sm text-[#1A2B3F] bg-white outline-none focus:border-primary focus:ring-2 focus:ring-primary/10 transition-all', 'placeholder': 'Lycée Victor Hugo'}}) }}
{# Sujet #}
{{ form_widget(form.subject, {'attr': {'class': 'w-full border border-[#DDE5EF] rounded-xl px-3.5 py-2.5 text-sm text-[#5A6B7F] bg-white outline-none focus:border-primary focus:ring-2 focus:ring-primary/10 transition-all cursor-pointer'}}) }} {{ form_errors(form.subject) }}
{# Message #}
{{ form_widget(form.message, {'attr': {'class': 'w-full border border-[#DDE5EF] rounded-xl px-3.5 py-2.5 text-sm text-[#1A2B3F] bg-white outline-none focus:border-primary focus:ring-2 focus:ring-primary/10 transition-all resize-none', 'rows': '4', 'placeholder': 'Décrivez votre besoin…'}}) }} {{ form_errors(form.message) }}
{# Bouton submit — atome button existant #} {% include '_atoms/button/button.html.twig' with { label: 'Envoyer le message', type: 'submit', variant: 'primary', size: 'lg', width: 'full' } only %} {{ form_end(form) }}
{# ── État de succès (affiché après envoi AJAX réussi) ── #}