var/cache/dev/twig/b3/b3247f265f8be0f59a8a2be3408831e697d97e39afe2a974b6a78124345a1443.php line 50

Open in your IDE?
  1. <?php
  2. use Twig\Environment;
  3. use Twig\Error\LoaderError;
  4. use Twig\Error\RuntimeError;
  5. use Twig\Extension\CoreExtension;
  6. use Twig\Extension\SandboxExtension;
  7. use Twig\Markup;
  8. use Twig\Sandbox\SecurityError;
  9. use Twig\Sandbox\SecurityNotAllowedTagError;
  10. use Twig\Sandbox\SecurityNotAllowedFilterError;
  11. use Twig\Sandbox\SecurityNotAllowedFunctionError;
  12. use Twig\Source;
  13. use Twig\Template;
  14. /* default/devis.html.twig */
  15. class __TwigTemplate_76da37f715a989601351b8707249961648272e4c3def2cd45138b7def6b2758d extends Template
  16. {
  17.     private $source;
  18.     private $macros = [];
  19.     public function __construct(Environment $env)
  20.     {
  21.         parent::__construct($env);
  22.         $this->source $this->getSourceContext();
  23.         $this->blocks = [
  24.             'title' => [$this'block_title'],
  25.             'body' => [$this'block_body'],
  26.         ];
  27.     }
  28.     protected function doGetParent(array $context)
  29.     {
  30.         // line 1
  31.         return "base.html.twig";
  32.     }
  33.     protected function doDisplay(array $context, array $blocks = [])
  34.     {
  35.         $macros $this->macros;
  36.         $__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  37.         $__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e->enter($__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template""default/devis.html.twig"));
  38.         $__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02 $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  39.         $__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02->enter($__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template""default/devis.html.twig"));
  40.         $this->parent $this->loadTemplate("base.html.twig""default/devis.html.twig"1);
  41.         yield from $this->parent->unwrap()->yield($contextarray_merge($this->blocks$blocks));
  42.         
  43.         $__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e->leave($__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e_prof);
  44.         
  45.         $__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02->leave($__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02_prof);
  46.     }
  47.     // line 3
  48.     public function block_title($context, array $blocks = [])
  49.     {
  50.         $macros $this->macros;
  51.         $__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  52.         $__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e->enter($__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""title"));
  53.         $__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02 $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  54.         $__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02->enter($__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""title"));
  55.         yield "Demande de devis — Otropik";
  56.         
  57.         $__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02->leave($__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02_prof);
  58.         
  59.         $__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e->leave($__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e_prof);
  60.         return; yield '';
  61.     }
  62.     // line 5
  63.     public function block_body($context, array $blocks = [])
  64.     {
  65.         $macros $this->macros;
  66.         $__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  67.         $__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e->enter($__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""body"));
  68.         $__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02 $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  69.         $__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02->enter($__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""body"));
  70.         // line 6
  71.         yield "
  72. ";
  73.         // line 8
  74.         yield "<section class=\"position-relative text-white\">
  75.   <div class=\"ratio ratio-21x9\">
  76.     ";
  77.         // line 10
  78.         if (CoreExtension::getAttribute($this->env$this->source, (isset($context["banner"]) || array_key_exists("banner"$context) ? $context["banner"] : (function () { throw new RuntimeError('Variable "banner" does not exist.'10$this->source); })()), "img", [], "any"falsefalsefalse10)) {
  79.             // line 11
  80.             yield "  <img src=\"";
  81.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("img/banner/"), "html"nulltrue);
  82.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source, (isset($context["banner"]) || array_key_exists("banner"$context) ? $context["banner"] : (function () { throw new RuntimeError('Variable "banner" does not exist.'11$this->source); })()), "img", [], "any"falsefalsefalse11), "html"nulltrue);
  83.             yield "\" alt=\"Plage paradisiaque\" class=\"w-100 h-100 object-fit-cover\">
  84.   ";
  85.         } else {
  86.             // line 13
  87.             yield "    <img src=\"";
  88.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("img/summer-holidays.jpg"), "html"nulltrue);
  89.             yield "\" alt=\"Inspiration voyage\" class=\"w-100 h-100 object-fit-cover\">
  90.   ";
  91.         }
  92.         // line 15
  93.         yield "  </div>
  94.   <div class=\"position-absolute top-0 start-0 w-100 h-100 d-flex align-items-center justify-content-center text-center bg-dark bg-opacity-50\">
  95.     <div class=\"p-3\">
  96.       <h1 class=\"display-5 fw-bold mb-2\">Demandez votre devis sur-mesure</h1>
  97.       <p class=\"lead mb-0\">Dites-nous vos envies, on s’occupe de tout ✈️🌴</p>
  98.     </div>
  99.   </div>
  100. </section>
  101. ";
  102.         // line 25
  103.         yield "<section class=\"container py-5\">
  104.   ";
  105.         // line 27
  106.         yield "  ";
  107.         $context['_parent'] = $context;
  108.         $context['_seq'] = CoreExtension::ensureTraversable(CoreExtension::getAttribute($this->env$this->source, (isset($context["app"]) || array_key_exists("app"$context) ? $context["app"] : (function () { throw new RuntimeError('Variable "app" does not exist.'27$this->source); })()), "flashes", [], "any"falsefalsefalse27));
  109.         foreach ($context['_seq'] as $context["label"] => $context["messages"]) {
  110.             // line 28
  111.             yield "    ";
  112.             $context['_parent'] = $context;
  113.             $context['_seq'] = CoreExtension::ensureTraversable($context["messages"]);
  114.             foreach ($context['_seq'] as $context["_key"] => $context["m"]) {
  115.                 // line 29
  116.                 yield "      <div class=\"alert alert-";
  117.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($context["label"], "html"nulltrue);
  118.                 yield " rounded-3\">";
  119.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($context["m"], "html"nulltrue);
  120.                 yield "</div>
  121.     ";
  122.             }
  123.             $_parent $context['_parent'];
  124.             unset($context['_seq'], $context['_iterated'], $context['_key'], $context['m'], $context['_parent'], $context['loop']);
  125.             $context array_intersect_key($context$_parent) + $_parent;
  126.             // line 31
  127.             yield "  ";
  128.         }
  129.         $_parent $context['_parent'];
  130.         unset($context['_seq'], $context['_iterated'], $context['label'], $context['messages'], $context['_parent'], $context['loop']);
  131.         $context array_intersect_key($context$_parent) + $_parent;
  132.         // line 32
  133.         yield "
  134.   <form method=\"post\" action=\"";
  135.         // line 33
  136.         yield "\" class=\"row g-4\" enctype=\"multipart/form-data\">
  137.     <div class=\"col-12 col-lg-8\">
  138.       <div class=\"card border-0 shadow-sm rounded-4\">
  139.         <div class=\"card-body p-4\">
  140.           ";
  141.         // line 39
  142.         yield "          <h2 class=\"h5 fw-bold mb-3\">Votre voyage</h2>
  143.           <div class=\"row g-3 mb-4\">
  144.             <div class=\"col-md-6\">
  145.               <label class=\"form-label\">Type de voyage</label>
  146.               <select name=\"trip_type\" class=\"form-select rounded-pill\" required>
  147.                 <option value=\"\" selected>— Sélectionnez —</option>
  148.                 ";
  149.         // line 45
  150.         $context['_parent'] = $context;
  151.         $context['_seq'] = CoreExtension::ensureTraversable((isset($context["typeSejour"]) || array_key_exists("typeSejour"$context) ? $context["typeSejour"] : (function () { throw new RuntimeError('Variable "typeSejour" does not exist.'45$this->source); })()));
  152.         foreach ($context['_seq'] as $context["_key"] => $context["type"]) {
  153.             // line 46
  154.             yield "                  <option value=\"";
  155.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["type"], "id", [], "any"falsefalsefalse46), "html"nulltrue);
  156.             yield "\">";
  157.             yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["type"], "name", [], "any"falsefalsefalse46), "html"nulltrue);
  158.             yield "</option>
  159.                 ";
  160.         }
  161.         $_parent $context['_parent'];
  162.         unset($context['_seq'], $context['_iterated'], $context['_key'], $context['type'], $context['_parent'], $context['loop']);
  163.         $context array_intersect_key($context$_parent) + $_parent;
  164.         // line 48
  165.         yield "              </select>
  166.             </div>
  167.             <div class=\"col-md-6\">
  168.               <label class=\"form-label\">Destination souhaitée</label>
  169.               <input type=\"text\" name=\"destination\" class=\"form-control rounded-pill\" placeholder=\"Ex : Guadeloupe, Sainte-Lucie, Ouest USA…\" required>
  170.             </div>
  171.             <div class=\"col-md-6\">
  172.               <label class=\"form-label\">Date de départ</label>
  173.               <input type=\"date\" name=\"start_date\" class=\"form-control rounded-pill\">
  174.             </div>
  175.             <div class=\"col-md-6\">
  176.               <label class=\"form-label\">Durée (jours)</label>
  177.               <input type=\"number\" name=\"duration_days\" class=\"form-control rounded-pill\" min=\"1\" placeholder=\"Ex : 10\">
  178.             </div>
  179.           </div>
  180.           ";
  181.         // line 65
  182.         yield "          <h2 class=\"h5 fw-bold mb-3\">Voyageurs</h2>
  183.           <div class=\"row g-3 mb-4\">
  184.             <div class=\"col-6 col-md-3\">
  185.               <label class=\"form-label\">Adultes</label>
  186.               <input type=\"number\" name=\"trav_adults\" class=\"form-control rounded-pill\" min=\"1\" value=\"2\">
  187.             </div>
  188.             <div class=\"col-6 col-md-3\">
  189.               <label class=\"form-label\">Enfants</label>
  190.               <input type=\"number\" name=\"trav_children\" class=\"form-control rounded-pill\" min=\"0\" value=\"0\">
  191.             </div>
  192.             <div class=\"col-12 col-md-6\">
  193.               <label class=\"form-label\">Âges des enfants (si applicable)</label>
  194.               <input type=\"text\" name=\"children_ages\" class=\"form-control rounded-pill\" placeholder=\"Ex : 4, 8\">
  195.             </div>
  196.           </div>
  197.           ";
  198.         // line 82
  199.         yield "          <h2 class=\"h5 fw-bold mb-3\">Budget & préférences</h2>
  200.           <div class=\"row g-3 mb-4\">
  201.             <div class=\"col-md-6\">
  202.               <label class=\"form-label\">Budget global (à partir de)</label>
  203.               <div class=\"input-group\">
  204.                 <span class=\"input-group-text\">€</span>
  205.                 <input type=\"number\" name=\"budget_from\" class=\"form-control rounded-end-pill\" min=\"0\" step=\"100\" placeholder=\"Ex : 2500\">
  206.               </div>
  207.               <div class=\"form-text\">Indiquez une estimation pour nous guider.</div>
  208.             </div>
  209.             <div class=\"col-md-6\">
  210.               <label class=\"form-label\">Style d’hébergement</label>
  211.               <select name=\"board_type\" class=\"form-select rounded-pill\">
  212.                 <option value=\"\">— Indifférent —</option>
  213.                 <option>Room Only</option>
  214.                 <option>Petit-déjeuner</option>
  215.                 <option>Demi-pension</option>
  216.                 <option>Pension complète</option>
  217.                 <option>All Inclusive</option>
  218.               </select>
  219.             </div>
  220.             <div class=\"col-12\">
  221.               <label class=\"form-label\">Activités/ambiance souhaitées</label>
  222.               <input type=\"text\" name=\"interests\" class=\"form-control rounded-pill\" placeholder=\"Plages, randonnée, road trip, croisière, culture, gastronomie…\">
  223.             </div>
  224.           </div>
  225.           ";
  226.         // line 110
  227.         yield "          <h2 class=\"h5 fw-bold mb-3\">Votre message</h2>
  228.           <div class=\"mb-4\">
  229.             <textarea name=\"message\" rows=\"6\" class=\"form-control rounded-4\" placeholder=\"Parlez-nous de votre projet, vos envies, vos impératifs de dates…\"></textarea>
  230.           </div>
  231.           ";
  232.         // line 116
  233.         yield "          <div class=\"mb-4\">
  234.             <label class=\"form-label\">Pièce jointe (facultatif)</label>
  235.             <input type=\"file\" name=\"attachment\" class=\"form-control\">
  236.             <div class=\"form-text\">PDF/JPG/PNG — 10 Mo max (itinéraire, inspiration…)</div>
  237.           </div>
  238.         </div>
  239.       </div>
  240.     </div>
  241.     ";
  242.         // line 127
  243.         yield "    <div class=\"col-12 col-lg-4\">
  244.       <div class=\"card border-0 shadow-sm rounded-4 sticky-lg-top\" style=\"top:1.25rem;\">
  245.         <div class=\"card-body p-4\">
  246.           <h2 class=\"h5 fw-bold mb-3\">Vos coordonnées</h2>
  247.           <div class=\"mb-3\">
  248.             <label class=\"form-label\">Nom & prénom</label>
  249.             <input type=\"text\" name=\"full_name\" class=\"form-control rounded-pill\" required>
  250.           </div>
  251.           <div class=\"mb-3\">
  252.             <label class=\"form-label\">Email</label>
  253.             <input type=\"email\" name=\"email\" class=\"form-control rounded-pill\" required>
  254.           </div>
  255.           <div class=\"mb-3\">
  256.             <label class=\"form-label\">Téléphone</label>
  257.             <input type=\"tel\" name=\"phone\" class=\"form-control rounded-pill\" placeholder=\"+590 …\">
  258.           </div>
  259.           <div class=\"form-check my-3\">
  260.             <input class=\"form-check-input\" type=\"checkbox\" value=\"1\" name=\"newsletter\" id=\"nl\">
  261.             <label class=\"form-check-label\" for=\"nl\">Je souhaite recevoir les inspirations Otropik</label>
  262.           </div>
  263.           <div class=\"form-check mb-4\">
  264.             <input class=\"form-check-input\" type=\"checkbox\" value=\"1\" name=\"rgpd\" id=\"rgpd\" required>
  265.             <label class=\"form-check-label\" for=\"rgpd\">
  266.               J’accepte que mes données soient utilisées pour me recontacter (RGPD).
  267.             </label>
  268.           </div>
  269.           <input type=\"hidden\" name=\"_token\" value=\"";
  270.         // line 156
  271.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->env->getRuntime('Symfony\Component\Form\FormRenderer')->renderCsrfToken("quote_request"), "html"nulltrue);
  272.         yield "\">
  273.           <button type=\"submit\" class=\"btn btn-primary w-100 rounded-pill py-2\">
  274.             <i class=\"bi bi-send me-1\"></i> Envoyer ma demande
  275.           </button>
  276.           <p class=\"small text-muted mt-3 mb-0\">
  277.             Réponse rapide sous 24–48h ouvrées par un spécialiste Otropik.
  278.           </p>
  279.         </div>
  280.       </div>
  281.     </div>
  282.   </form>
  283. </section>
  284. ";
  285.         
  286.         $__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02->leave($__internal_319393461309892924ff6e74d6d6e64287df64b63545b994e100d4ab223aed02_prof);
  287.         
  288.         $__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e->leave($__internal_085b0142806202599c7fe3b329164a92397d8978207a37e79d70b8c52599e33e_prof);
  289.         return; yield '';
  290.     }
  291.     /**
  292.      * @codeCoverageIgnore
  293.      */
  294.     public function getTemplateName()
  295.     {
  296.         return "default/devis.html.twig";
  297.     }
  298.     /**
  299.      * @codeCoverageIgnore
  300.      */
  301.     public function isTraitable()
  302.     {
  303.         return false;
  304.     }
  305.     /**
  306.      * @codeCoverageIgnore
  307.      */
  308.     public function getDebugInfo()
  309.     {
  310.         return array (  301 => 156,  270 => 127,  258 => 116,  251 => 110,  222 => 82,  204 => 65,  186 => 48,  175 => 46,  171 => 45,  163 => 39,  156 => 33,  153 => 32,  147 => 31,  136 => 29,  131 => 28,  126 => 27,  123 => 25,  112 => 15,  106 => 13,  99 => 11,  97 => 10,  93 => 8,  90 => 6,  80 => 5,  60 => 3,  37 => 1,);
  311.     }
  312.     public function getSourceContext()
  313.     {
  314.         return new Source("{% extends 'base.html.twig' %}
  315. {% block title %}Demande de devis — Otropik{% endblock %}
  316. {% block body %}
  317. {# ===== HERO ===== #}
  318. <section class=\"position-relative text-white\">
  319.   <div class=\"ratio ratio-21x9\">
  320.     {% if banner.img %}
  321.   <img src=\"{{ asset('img/banner/')}}{{banner.img}}\" alt=\"Plage paradisiaque\" class=\"w-100 h-100 object-fit-cover\">
  322.   {% else %}
  323.     <img src=\"{{ asset('img/summer-holidays.jpg')}}\" alt=\"Inspiration voyage\" class=\"w-100 h-100 object-fit-cover\">
  324.   {% endif %}
  325.   </div>
  326.   <div class=\"position-absolute top-0 start-0 w-100 h-100 d-flex align-items-center justify-content-center text-center bg-dark bg-opacity-50\">
  327.     <div class=\"p-3\">
  328.       <h1 class=\"display-5 fw-bold mb-2\">Demandez votre devis sur-mesure</h1>
  329.       <p class=\"lead mb-0\">Dites-nous vos envies, on s’occupe de tout ✈️🌴</p>
  330.     </div>
  331.   </div>
  332. </section>
  333. {# ===== FORMULAIRE ===== #}
  334. <section class=\"container py-5\">
  335.   {# Message succès/erreur éventuel #}
  336.   {% for label, messages in app.flashes %}
  337.     {% for m in messages %}
  338.       <div class=\"alert alert-{{ label }} rounded-3\">{{ m }}</div>
  339.     {% endfor %}
  340.   {% endfor %}
  341.   <form method=\"post\" action=\"{#{ path('quote.request.send') }#}\" class=\"row g-4\" enctype=\"multipart/form-data\">
  342.     <div class=\"col-12 col-lg-8\">
  343.       <div class=\"card border-0 shadow-sm rounded-4\">
  344.         <div class=\"card-body p-4\">
  345.           {# ---- Bloc 1 : Votre voyage ---- #}
  346.           <h2 class=\"h5 fw-bold mb-3\">Votre voyage</h2>
  347.           <div class=\"row g-3 mb-4\">
  348.             <div class=\"col-md-6\">
  349.               <label class=\"form-label\">Type de voyage</label>
  350.               <select name=\"trip_type\" class=\"form-select rounded-pill\" required>
  351.                 <option value=\"\" selected>— Sélectionnez —</option>
  352.                 {% for type in typeSejour %}
  353.                   <option value=\"{{type.id}}\">{{type.name}}</option>
  354.                 {% endfor %}
  355.               </select>
  356.             </div>
  357.             <div class=\"col-md-6\">
  358.               <label class=\"form-label\">Destination souhaitée</label>
  359.               <input type=\"text\" name=\"destination\" class=\"form-control rounded-pill\" placeholder=\"Ex : Guadeloupe, Sainte-Lucie, Ouest USA…\" required>
  360.             </div>
  361.             <div class=\"col-md-6\">
  362.               <label class=\"form-label\">Date de départ</label>
  363.               <input type=\"date\" name=\"start_date\" class=\"form-control rounded-pill\">
  364.             </div>
  365.             <div class=\"col-md-6\">
  366.               <label class=\"form-label\">Durée (jours)</label>
  367.               <input type=\"number\" name=\"duration_days\" class=\"form-control rounded-pill\" min=\"1\" placeholder=\"Ex : 10\">
  368.             </div>
  369.           </div>
  370.           {# ---- Bloc 2 : Voyageurs ---- #}
  371.           <h2 class=\"h5 fw-bold mb-3\">Voyageurs</h2>
  372.           <div class=\"row g-3 mb-4\">
  373.             <div class=\"col-6 col-md-3\">
  374.               <label class=\"form-label\">Adultes</label>
  375.               <input type=\"number\" name=\"trav_adults\" class=\"form-control rounded-pill\" min=\"1\" value=\"2\">
  376.             </div>
  377.             <div class=\"col-6 col-md-3\">
  378.               <label class=\"form-label\">Enfants</label>
  379.               <input type=\"number\" name=\"trav_children\" class=\"form-control rounded-pill\" min=\"0\" value=\"0\">
  380.             </div>
  381.             <div class=\"col-12 col-md-6\">
  382.               <label class=\"form-label\">Âges des enfants (si applicable)</label>
  383.               <input type=\"text\" name=\"children_ages\" class=\"form-control rounded-pill\" placeholder=\"Ex : 4, 8\">
  384.             </div>
  385.           </div>
  386.           {# ---- Bloc 3 : Budget & préférences ---- #}
  387.           <h2 class=\"h5 fw-bold mb-3\">Budget & préférences</h2>
  388.           <div class=\"row g-3 mb-4\">
  389.             <div class=\"col-md-6\">
  390.               <label class=\"form-label\">Budget global (à partir de)</label>
  391.               <div class=\"input-group\">
  392.                 <span class=\"input-group-text\">€</span>
  393.                 <input type=\"number\" name=\"budget_from\" class=\"form-control rounded-end-pill\" min=\"0\" step=\"100\" placeholder=\"Ex : 2500\">
  394.               </div>
  395.               <div class=\"form-text\">Indiquez une estimation pour nous guider.</div>
  396.             </div>
  397.             <div class=\"col-md-6\">
  398.               <label class=\"form-label\">Style d’hébergement</label>
  399.               <select name=\"board_type\" class=\"form-select rounded-pill\">
  400.                 <option value=\"\">— Indifférent —</option>
  401.                 <option>Room Only</option>
  402.                 <option>Petit-déjeuner</option>
  403.                 <option>Demi-pension</option>
  404.                 <option>Pension complète</option>
  405.                 <option>All Inclusive</option>
  406.               </select>
  407.             </div>
  408.             <div class=\"col-12\">
  409.               <label class=\"form-label\">Activités/ambiance souhaitées</label>
  410.               <input type=\"text\" name=\"interests\" class=\"form-control rounded-pill\" placeholder=\"Plages, randonnée, road trip, croisière, culture, gastronomie…\">
  411.             </div>
  412.           </div>
  413.           {# ---- Bloc 4 : Message ---- #}
  414.           <h2 class=\"h5 fw-bold mb-3\">Votre message</h2>
  415.           <div class=\"mb-4\">
  416.             <textarea name=\"message\" rows=\"6\" class=\"form-control rounded-4\" placeholder=\"Parlez-nous de votre projet, vos envies, vos impératifs de dates…\"></textarea>
  417.           </div>
  418.           {# ---- Option : pièce jointe ---- #}
  419.           <div class=\"mb-4\">
  420.             <label class=\"form-label\">Pièce jointe (facultatif)</label>
  421.             <input type=\"file\" name=\"attachment\" class=\"form-control\">
  422.             <div class=\"form-text\">PDF/JPG/PNG — 10 Mo max (itinéraire, inspiration…)</div>
  423.           </div>
  424.         </div>
  425.       </div>
  426.     </div>
  427.     {# ---- Colonne latérale : Contact & consentement ---- #}
  428.     <div class=\"col-12 col-lg-4\">
  429.       <div class=\"card border-0 shadow-sm rounded-4 sticky-lg-top\" style=\"top:1.25rem;\">
  430.         <div class=\"card-body p-4\">
  431.           <h2 class=\"h5 fw-bold mb-3\">Vos coordonnées</h2>
  432.           <div class=\"mb-3\">
  433.             <label class=\"form-label\">Nom & prénom</label>
  434.             <input type=\"text\" name=\"full_name\" class=\"form-control rounded-pill\" required>
  435.           </div>
  436.           <div class=\"mb-3\">
  437.             <label class=\"form-label\">Email</label>
  438.             <input type=\"email\" name=\"email\" class=\"form-control rounded-pill\" required>
  439.           </div>
  440.           <div class=\"mb-3\">
  441.             <label class=\"form-label\">Téléphone</label>
  442.             <input type=\"tel\" name=\"phone\" class=\"form-control rounded-pill\" placeholder=\"+590 …\">
  443.           </div>
  444.           <div class=\"form-check my-3\">
  445.             <input class=\"form-check-input\" type=\"checkbox\" value=\"1\" name=\"newsletter\" id=\"nl\">
  446.             <label class=\"form-check-label\" for=\"nl\">Je souhaite recevoir les inspirations Otropik</label>
  447.           </div>
  448.           <div class=\"form-check mb-4\">
  449.             <input class=\"form-check-input\" type=\"checkbox\" value=\"1\" name=\"rgpd\" id=\"rgpd\" required>
  450.             <label class=\"form-check-label\" for=\"rgpd\">
  451.               J’accepte que mes données soient utilisées pour me recontacter (RGPD).
  452.             </label>
  453.           </div>
  454.           <input type=\"hidden\" name=\"_token\" value=\"{{ csrf_token('quote_request') }}\">
  455.           <button type=\"submit\" class=\"btn btn-primary w-100 rounded-pill py-2\">
  456.             <i class=\"bi bi-send me-1\"></i> Envoyer ma demande
  457.           </button>
  458.           <p class=\"small text-muted mt-3 mb-0\">
  459.             Réponse rapide sous 24–48h ouvrées par un spécialiste Otropik.
  460.           </p>
  461.         </div>
  462.       </div>
  463.     </div>
  464.   </form>
  465. </section>
  466. {% endblock %}
  467. ""default/devis.html.twig""/home/ladomitiyc/otropik/templates/default/devis.html.twig");
  468.     }
  469. }