var/cache/dev/twig/35/3524e38f2c3785bb776537ba87cea854.php line 3559

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. use Twig\TemplateWrapper;
  15. /* Accueil/PageAccueil.html.twig */
  16. class __TwigTemplate_4df90662ceeaa9bae8bb3eefaa2fd99b extends Template
  17. {
  18.     private Source $source;
  19.     /**
  20.      * @var array<string, Template>
  21.      */
  22.     private array $macros = [];
  23.     public function __construct(Environment $env)
  24.     {
  25.         parent::__construct($env);
  26.         $this->source $this->getSourceContext();
  27.         $this->parent false;
  28.         $this->blocks = [
  29.             'Footer' => [$this'block_Footer'],
  30.         ];
  31.     }
  32.     protected function doDisplay(array $context, array $blocks = []): iterable
  33.     {
  34.         $macros $this->macros;
  35.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  36.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template""Accueil/PageAccueil.html.twig"));
  37.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  38.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template""Accueil/PageAccueil.html.twig"));
  39.         // line 1
  40.         yield "<!DOCTYPE html>
  41. <!--
  42. Template name: Nova
  43. Template author: FreeBootstrap.net
  44. Author website: https://freebootstrap.net/
  45. License: https://freebootstrap.net/license
  46. -->
  47. <html lang=\"fr\">
  48.   <head>
  49.     <meta charset=\"utf-8\">
  50.     <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">
  51. <title>5sur5Séjour — Créer un séjour scolaire en ligne (données hébergées en France)</title>
  52. <meta name=\"description\" content=\"Partagez photos, vidéos et messages vocaux avec les familles. Gratuit pour les écoles publiques (hors option voix). Démo 15–30 min pour partenaires.\">
  53. <!-- Open Graph / Twitter -->
  54. <meta property=\"og:title\" content=\"Créer un séjour scolaire en ligne — 5sur5Séjour\">
  55. <meta property=\"og:description\" content=\"Plateforme familles & écoles. Données en France. Démo 15–30 min.\">
  56. <meta property=\"og:type\" content=\"website\">
  57. <meta property=\"og:url\" content=\"https://5sur5sejour.fr/\">
  58. <meta property=\"og:image\" content=\"https://5sur5sejour.fr/static/og/landing.jpg\">
  59. <meta name=\"twitter:card\" content=\"summary_large_image\">
  60. <!-- Robots -->
  61. <meta name=\"robots\" content=\"index,follow,max-image-preview:large\">
  62. <!-- Preload police/logo (si utilisés) -->
  63. <link rel=\"preload\" href=\"/assets/fonts/inter-var.woff2\" as=\"font\" type=\"font/woff2\" crossorigin>
  64. <link rel=\"preload\" href=\"/static/og/creer-sejour.jpg\" as=\"image\">    <title>5sur5séjour - Plateforme de partage de photos, vidéos et messages vocaux</title>
  65.      
  66.     <!-- ======= Favicon =======-->
  67.     <link rel=\"icon\" type=\"image/png\" href=\"";
  68.         // line 33
  69.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("favicon.png"), "html"nulltrue);
  70.         yield "\">
  71.     <link rel=\"apple-touch-icon\" href=\"";
  72.         // line 34
  73.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("favicon.png"), "html"nulltrue);
  74.         yield "\">
  75.     <!-- End Favicon-->
  76.      
  77.     <!-- ======= Google Font =======-->
  78.     <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">
  79.     <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>
  80.     <link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\" rel=\"stylesheet\">
  81.     <!-- End Google Font-->
  82.     
  83.     <!-- ======= Styles =======-->
  84.     <link href=\"";
  85.         // line 44
  86.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/vendors/bootstrap/bootstrap.min.css"), "html"nulltrue);
  87.         yield "\" rel=\"stylesheet\">
  88.     <link href=\"";
  89.         // line 45
  90.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/vendors/bootstrap-icons/font/bootstrap-icons.min.css"), "html"nulltrue);
  91.         yield "\" rel=\"stylesheet\">
  92.     <link href=\"";
  93.         // line 46
  94.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/vendors/glightbox/glightbox.min.css"), "html"nulltrue);
  95.         yield "\" rel=\"stylesheet\">
  96.     <link href=\"";
  97.         // line 47
  98.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/vendors/swiper/swiper-bundle.min.css"), "html"nulltrue);
  99.         yield "\" rel=\"stylesheet\">
  100.     <link href=\"";
  101.         // line 48
  102.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/vendors/aos/aos.css"), "html"nulltrue);
  103.         yield "\" rel=\"stylesheet\">
  104.     <!-- End Styles-->
  105.     
  106.     <!-- ======= Theme Style =======-->
  107.     <link href=\"";
  108.         // line 52
  109.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/css/style_nova.css"), "html"nulltrue);
  110.         yield "?v=";
  111.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Twig\Extension\CoreExtension']->formatDate("now""Y-m-d-H-i-s"), "html"nulltrue);
  112.         yield "\" rel=\"stylesheet\">
  113.     <!-- End Theme Style-->
  114.     <style>
  115.     /* Section padding */
  116. .py-6 { padding: 4rem 0; }
  117. /* Card style premium */
  118. .pricing-card {
  119.     background: #ffffff;
  120.     border-radius: 20px;
  121.     border: 1px solid #eef2f4;
  122.     transition: 0.25s;
  123. }
  124. .pricing-card:hover {
  125.     transform: translateY(-6px);
  126.     box-shadow: 0 20px 40px rgba(0,0,0,0.06);
  127. }
  128. /* Highlight card */
  129. .pricing-card.highlight {
  130.     border: 2px solid #52c0b4;
  131.     background: #f4fdfb;
  132. }
  133. .highlight-text {
  134.     color: #1ea594;
  135.     font-weight: 800;
  136. }
  137. /* Prices */
  138. .amount {
  139.     font-size: 2.4rem;
  140.     font-weight: 700;
  141.     color: #1d2d35;
  142. }
  143. .subtitle {
  144.     font-size: 0.9rem;
  145. }
  146. /* Badges */
  147. .badge-5sur5 {
  148.     position: absolute;
  149.     top: -12px;
  150.     left: 50%;
  151.     transform: translateX(-50%);
  152.     background: #1ea594;
  153.     padding: 6px 14px;
  154.     border-radius: 30px;
  155.     color: #fff;
  156.     font-size: 0.75rem;
  157.     font-weight: 600;
  158. }
  159. /* Buttons - Styles personnalisés conservés pour les cartes de pricing */
  160. .btn-5sur5 {
  161.     background: #1ea594;
  162.     color: #fff;
  163.     border-radius: 30px;
  164.     padding: 12px 22px;
  165.     font-weight: 600;
  166. }
  167. .btn-5sur5:hover {
  168.     background: #178a7d;
  169.     color: #fff;
  170. }
  171. .btn-5sur5-highlight {
  172.     background: #169e8f;
  173.     color: #fff;
  174.     border-radius: 30px;
  175.     padding: 12px 22px;
  176.     font-weight: 600;
  177. }
  178. .btn-5sur5-highlight:hover {
  179.     background: #127d72;
  180.     color: #fff;
  181. }
  182. .btn-outline-5sur5 {
  183.     border: 2px solid #1ea594;
  184.     color: #1ea594;
  185.     border-radius: 30px;
  186.     padding: 12px 22px;
  187.     font-weight: 600;
  188. }
  189. .btn-outline-5sur5:hover {
  190.     background: #1ea594;
  191.     color: #fff;
  192. }
  193. /* Styles différenciés pour les boutons CTA */
  194. .cta-section .btn-outline-primary {
  195.     border: 2px solid #41a2aa;
  196.     color: #41a2aa;
  197.     background: transparent;
  198.     font-weight: 600;
  199.     transition: all 0.3s ease;
  200. }
  201. .cta-section .btn-outline-primary:hover {
  202.     background: #41a2aa;
  203.     color: #fff;
  204.     border-color: #41a2aa;
  205.     transform: translateY(-2px);
  206.     box-shadow: 0 4px 12px rgba(65, 162, 170, 0.3);
  207. }
  208. .cta-section .btn-secondary {
  209.     font-weight: 600;
  210.     transition: all 0.3s ease;
  211. }
  212. .cta-section .btn-secondary:hover {
  213.     background-color: #e67e4a !important;
  214.     border-color: #e67e4a !important;
  215.     transform: translateY(-2px);
  216.     box-shadow: 0 4px 12px rgba(240, 158, 122, 0.3);
  217. }
  218. .cta-section .btn-primary {
  219.     font-weight: 600;
  220.     transition: all 0.3s ease;
  221.     background-color: #41a2aa;
  222.     border-color: #41a2aa;
  223. }
  224. .cta-section .btn-primary:hover {
  225.     background-color: #358a92;
  226.     border-color: #358a92;
  227.     transform: translateY(-2px);
  228.     box-shadow: 0 4px 12px rgba(65, 162, 170, 0.3);
  229. }
  230.     
  231.     </style>
  232.     
  233.     <!-- ======= Apply theme =======-->
  234.     <script>
  235.       // Apply the theme as early as possible to avoid flicker
  236.       (function() {
  237.         const storedTheme = localStorage.getItem('theme') || 'light';
  238.         document.documentElement.setAttribute('data-bs-theme', storedTheme);
  239.       })();
  240.     </script>
  241.   </head>
  242.   <body>
  243.     
  244. <!-- MODALE -->
  245. <div class=\"modal fade\" id=\"demoModal\" tabindex=\"-1\" aria-hidden=\"true\">
  246.   <div class=\"modal-dialog modal-lg modal-dialog-centered\">
  247.     <div class=\"modal-content\">
  248.       <div class=\"modal-header\">
  249.         <h5 id=\"demoTitle\" class=\"modal-title\">Demander une démo guidée</h5>
  250.         <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Fermer\"></button>
  251.       </div>
  252.       <div class=\"modal-body\">
  253.         <ul class=\"nav nav-tabs\" id=\"demoTabs\" role=\"tablist\">
  254.           <li class=\"nav-item\" role=\"presentation\">
  255.             <button class=\"nav-link active\" id=\"tab-calendar\" data-bs-toggle=\"tab\" data-bs-target=\"#pane-calendar\" type=\"button\" role=\"tab\">
  256.               Réserver un créneau
  257.             </button>
  258.           </li>
  259.           <li class=\"nav-item\" role=\"presentation\">
  260.             <button class=\"nav-link\" id=\"tab-callback\" data-bs-toggle=\"tab\" data-bs-target=\"#pane-callback\" type=\"button\" role=\"tab\">
  261.               Être rappelé
  262.             </button>
  263.           </li>
  264.         </ul>
  265.         <div class=\"tab-content pt-3\">
  266.           <!-- Calendrier -->
  267.           <div class=\"tab-pane fade show active\" id=\"pane-calendar\" role=\"tabpanel\">
  268.             <div class=\"text-center mb-3\">
  269.               <h6 class=\"mb-2\">Réservez votre créneau de démonstration</h6>
  270.               <p class=\"text-muted small\">Choisissez un créneau qui vous convient pour une démo personnalisée</p>
  271.             </div>
  272.             <div class=\"ratio ratio-16x9 border rounded\">
  273.               <iframe src=\"https://calendly.com/5sur5sejour/demo\" title=\"Calendrier de réservation\" loading=\"lazy\" frameborder=\"0\"></iframe>
  274.             </div>
  275.             <p class=\"small text-muted mt-2 mb-0\">
  276.               <i class=\"bi bi-clock me-1\"></i> Créneau visio 15–30 min · 
  277.               <i class=\"bi bi-check-circle me-1\"></i> Confirmation instantanée ·
  278.               <i class=\"bi bi-shield-check me-1\"></i> 100% gratuit
  279.             </p>
  280.           </div>
  281.           <!-- Formulaire callback -->
  282.           <div class=\"tab-pane fade\" id=\"pane-callback\" role=\"tabpanel\">
  283.             <div class=\"text-center mb-3\">
  284.               <h6 class=\"mb-2\">Être rappelé par un expert</h6>
  285.               <p class=\"text-muted small\">Laissez-nous vos coordonnées et nous vous rappelons sous 24h</p>
  286.             </div>
  287.             <form id=\"contactForm\" class=\"needs-validation\" method=\"post\" action=\"";
  288.         // line 251
  289.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("app_contact");
  290.         yield "\" novalidate>
  291.               <input type=\"hidden\" name=\"topic\" id=\"topic\" value=\"demo\">
  292.               <input type=\"hidden\" name=\"pack\"  id=\"pack\"  value=\"\">
  293.               <input type=\"hidden\" name=\"objet\" id=\"objet\" value=\"demo\">
  294.               <input type=\"text\" name=\"website\" class=\"visually-hidden\" tabindex=\"-1\" autocomplete=\"off\">
  295.               <div class=\"row g-3\">
  296.                 <div class=\"col-md-6\">
  297.                   <label class=\"form-label\">Nom & prénom</label>
  298.                   <input type=\"text\" class=\"form-control\" name=\"name\" required 
  299.                          placeholder=\"Votre nom complet\">
  300.                   <div class=\"invalid-feedback\">Veuillez saisir votre nom et prénom.</div>
  301.                 </div>
  302.                 <div class=\"col-md-6\">
  303.                   <label class=\"form-label\">Établissement</label>
  304.                   <input type=\"text\" class=\"form-control\" name=\"organization\" required 
  305.                          placeholder=\"Nom de votre établissement\">
  306.                   <div class=\"invalid-feedback\">Veuillez saisir le nom de votre établissement.</div>
  307.                 </div>
  308.                 <div class=\"col-md-6\">
  309.                   <label class=\"form-label\">Email pro</label>
  310.                   <input type=\"email\" class=\"form-control\" name=\"email\" required 
  311.                          placeholder=\"votre.email@etablissement.fr\">
  312.                   <div class=\"invalid-feedback\">Veuillez saisir une adresse email valide.</div>
  313.                 </div>
  314.                 <div class=\"col-md-6\">
  315.                   <label class=\"form-label\">Téléphone</label>
  316.                   <input type=\"tel\" class=\"form-control\" name=\"telephone\" required 
  317.                          placeholder=\"06 12 34 56 78\" pattern=\"[0-9\\s\\+\\-\\(\\)]{10,}\">
  318.                   <div class=\"invalid-feedback\">Veuillez saisir un numéro de téléphone valide.</div>
  319.                 </div>
  320.                 <div class=\"col-md-6\">
  321.                   <label class=\"form-label\">Nb. de séjours / an</label>
  322.                   <select class=\"form-select\" name=\"sejours_count\" required>
  323.                     <option value=\"\" selected>Choisir…</option>
  324.                     <option value=\"1-3\">1–3</option>
  325.                     <option value=\"4-10\">4–10</option>
  326.                     <option value=\"11-30\">11–30</option>
  327.                     <option value=\"30+\">30+</option>
  328.                   </select>
  329.                   <div class=\"invalid-feedback\">Veuillez sélectionner le nombre de séjours.</div>
  330.                 </div>
  331.                 <div class=\"col-12\">
  332.                   <label class=\"form-label\">Message (optionnel)</label>
  333.                   <textarea class=\"form-control\" name=\"message\" rows=\"3\"
  334.                     placeholder=\"Décrivez brièvement vos besoins : type de séjours, nombre d'enfants, questions spécifiques...\"></textarea>
  335.                 </div>
  336.                 <div class=\"col-12\">
  337.                   <div class=\"form-check\">
  338.                     <input class=\"form-check-input\" type=\"checkbox\" value=\"1\" id=\"consent\" name=\"consent\" required>
  339.                     <label class=\"form-check-label\" for=\"consent\">J'accepte d'être contacté (RGPD).</label>
  340.                     <div class=\"invalid-feedback\">Vous devez accepter d'être contacté pour continuer.</div>
  341.                   </div>
  342.                 </div>
  343.                 <div class=\"col-12 d-grid d-sm-flex gap-2\">
  344.                   <button id=\"submitBtn\" class=\"btn btn-primary px-4\" type=\"submit\">
  345.                     <i class=\"bi bi-telephone me-2\"></i>Être rappelé sous 24h
  346.                   </button>
  347.                   <a class=\"btn btn-outline-secondary px-4\" href=\"mailto:contact@5sur5sejour.fr\">
  348.                     <i class=\"bi bi-envelope me-2\"></i>Nous écrire
  349.                   </a>
  350.                 </div>
  351.               </div>
  352.               <p class=\"small text-muted mt-2 mb-0\">
  353.                 Si la structure ne prend pas en charge <strong>Parent Premium</strong>, les familles peuvent l'activer (2,90 € / parent / séjour) pour l'accès complet, boîte vocale illimitée incluse. <span class=\"text-primary-emphasis\">Recommandé : prise en charge par la structure.</span>
  354.               </p>
  355.             </form>
  356.           </div>
  357.         </div>
  358.       </div>
  359.       <div class=\"modal-footer\">
  360.         <p class=\"small text-muted mb-0\">Sans engagement · Données hébergées en France</p>
  361.       </div>
  362.     </div>
  363.   </div>
  364. </div>
  365. <!-- MODALE CRÉER MON SÉJOUR -->
  366. <div class=\"modal fade\" id=\"createSejourModal\" tabindex=\"-1\" aria-labelledby=\"createSejourTitle\" aria-hidden=\"true\">
  367.   <div class=\"modal-dialog modal-xl modal-dialog-centered modal-dialog-scrollable\">
  368.     <div class=\"modal-content\">
  369.       <div class=\"modal-header border-bottom-0\">
  370.         <div class=\"w-100\">
  371.           <h5 id=\"createSejourTitle\" class=\"modal-title mb-2\">Créer mon espace séjour</h5>
  372.           <div class=\"d-flex align-items-center gap-2\">
  373.             <span id=\"stepLabel\" class=\"badge bg-primary\">Étape 1/2</span>
  374.             <small class=\"text-muted\" id=\"stepDescription\">Choisissez votre profil</small>
  375.           </div>
  376.         </div>
  377.         <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Fermer\"></button>
  378.       </div>
  379.       <div class=\"modal-body px-4\">
  380.         <!-- ÉTAPE 1 : Choix du profil -->
  381.         <div id=\"step1\" class=\"step-content\">
  382.           <p class=\"lead text-center mb-4\">Sélectionnez l'option qui correspond à votre situation :</p>
  383.           
  384.           <div class=\"row g-3 mb-3\">
  385.             <!-- Création simple -->
  386.             <div class=\"col-md-4\">
  387.               <a class=\"card h-100 border-2 hover-shadow text-decoration-none\" href=\"";
  388.         // line 353
  389.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("app_creation_simple_creer");
  390.         yield "\">
  391.                 <div class=\"card-body text-center p-4\">
  392.                   <div class=\"fs-1 mb-3\">✨</div>
  393.                   <h6 class=\"card-title fw-bold mb-2\">Créer un  espace séjour</h6>
  394.                   <p class=\"card-text small text-muted mb-3\">
  395.                     Créez un séjour unique. Paiement flexible : par les parents ou par la structure. Prix unique de 39€ par séjour.
  396.                   </p>
  397.                   <span class=\"badge bg-primary\">🎯 Flexible</span>
  398.                 </div>
  399.               </a>
  400.             </div>
  401.             <!-- Pack Annuel - 25 séjours -->
  402.  <div class=\"col-md-4\">
  403.               <a class=\"card h-100 border-2 hover-shadow text-decoration-none\" href=\"";
  404.         // line 367
  405.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("pack_annuel_partenaires");
  406.         yield "\">
  407.                 <div class=\"card-body text-center p-4\">
  408.                   <div class=\"fs-1 mb-3\">📅</div>
  409.                   <h6 class=\"card-title fw-bold mb-2\">En moyenne 25 séjours par an</h6>
  410.                   <p class=\"card-text small text-muted mb-3\">
  411.                     Pack Annuel idéal pour les structures organisant plusieurs séjours. Jusqu'à 25 séjours inclus, accompagnateurs illimités, support premium.
  412.                   </p>
  413.                   <span class=\"badge bg-info\">💼 Pack Annuel</span>
  414.                 </div>
  415.               </a>
  416.             </div>
  417.             <!-- Plus de 25 séjours - Partenaire -->
  418.             <div class=\"col-md-4\">
  419.               <a class=\"card h-100 border-2 hover-shadow text-decoration-none\" href=\"";
  420.         // line 381
  421.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("nosPartenaires");
  422.         yield "\">
  423.                 <div class=\"card-body text-center p-4\">
  424.                   <div class=\"fs-1 mb-3\">🚀</div>
  425.                   <h6 class=\"card-title fw-bold mb-2\">Plus de 25 séjours par an</h6>
  426.                   <p class=\"card-text small text-muted mb-3\">
  427.                     Devenez partenaire 5sur5 Séjour et bénéficiez d'une offre sur mesure avec tarif dégressif, accompagnement dédié et avantages exclusifs.
  428.                   </p>
  429.                   <span class=\"badge bg-purple\">🤝 Partenariat</span>
  430.                 </div>
  431.               </a>
  432.             </div>
  433.           </div>
  434.           <!-- École publique - Plus discret -->
  435.           <div class=\"text-center mt-4 pt-3 border-top\">
  436.             <p class=\"small text-muted mb-2\">Vous êtes une école publique ?</p>
  437.             <p class=\"small text-muted mb-2\">5sur5séjour offre son accès aux écoles publiques en France</p>
  438.             <a href=\"";
  439.         // line 398
  440.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("app_ecoles_publiques_creer");
  441.         yield "\" class=\"text-decoration-none d-inline-flex align-items-center gap-2 small fw-semibold text-primary\">
  442.               <span>Accès gratuit à la plateforme</span>
  443.               <span class=\"badge bg-success\">✅ Gratuit</span>
  444.               <i class=\"bi bi-arrow-right\"></i>
  445.             </a>
  446.           </div>
  447.         </div>
  448.         <!-- ÉTAPE 2 : Formulaires selon le profil -->
  449.         <div id=\"step2\" class=\"step-content d-none\">
  450.           <!-- Panneau Partenaire -->
  451.           <div id=\"pane-partenaire\" class=\"role-pane d-none\">
  452.             <div class=\"alert alert-info mb-4\">
  453.               <strong>🤝 Partenaire / Organisme</strong><br>
  454.               <small>Démo 15–30 min · Accompagnement contrat & onboarding.</small>
  455.             </div>
  456.             <ul class=\"nav nav-tabs mb-3\" id=\"partenaireTabsNav\" role=\"tablist\">
  457.               <li class=\"nav-item\" role=\"presentation\">
  458.                 <button class=\"nav-link active\" id=\"tab-partenaire-demo\" data-bs-toggle=\"tab\" data-bs-target=\"#pane-partenaire-demo\" type=\"button\" role=\"tab\">
  459.                   Réserver une démo
  460.                 </button>
  461.               </li>
  462.               <li class=\"nav-item\" role=\"presentation\">
  463.                 <button class=\"nav-link\" id=\"tab-partenaire-callback\" data-bs-toggle=\"tab\" data-bs-target=\"#pane-partenaire-callback\" type=\"button\" role=\"tab\">
  464.                   Être rappelé
  465.                 </button>
  466.               </li>
  467.             </ul>
  468.             <div class=\"tab-content\">
  469.               <!-- Calendly pour démo partenaire -->
  470.               <div class=\"tab-pane fade show active\" id=\"pane-partenaire-demo\" role=\"tabpanel\">
  471.                 <div class=\"text-center mb-3\">
  472.                   <p class=\"text-muted small mb-2\">Choisissez un créneau pour une démo personnalisée</p>
  473.                 </div>
  474.                 <div class=\"ratio ratio-16x9 border rounded\">
  475.                   <iframe data-src=\"https://calendly.com/5sur5sejour/demo\" title=\"Calendrier de réservation partenaire\" loading=\"lazy\" frameborder=\"0\"></iframe>
  476.                 </div>
  477.                 <p class=\"small text-muted mt-2 mb-0\">
  478.                   <i class=\"bi bi-clock me-1\"></i> Créneau visio 15–30 min · 
  479.                   <i class=\"bi bi-check-circle me-1\"></i> Accompagnement contrat ·
  480.                   <i class=\"bi bi-shield-check me-1\"></i> 100% gratuit
  481.                 </p>
  482.               </div>
  483.               <!-- Formulaire rappel partenaire -->
  484.               <div class=\"tab-pane fade\" id=\"pane-partenaire-callback\" role=\"tabpanel\">
  485.                 <form id=\"formPartenaire\" method=\"post\" action=\"/contact/partenaire\" class=\"needs-validation\" novalidate>
  486.                   <input type=\"text\" name=\"website\" class=\"visually-hidden\" tabindex=\"-1\" autocomplete=\"off\">
  487.                   
  488.                   <div class=\"row g-3\">
  489.                     <div class=\"col-md-6\">
  490.                       <label class=\"form-label\">Nom & prénom <span class=\"text-danger\">*</span></label>
  491.                       <input type=\"text\" class=\"form-control\" name=\"name\" required 
  492.                              placeholder=\"Votre nom complet\">
  493.                       <div class=\"invalid-feedback\">Veuillez saisir votre nom et prénom.</div>
  494.                     </div>
  495.                     <div class=\"col-md-6\">
  496.                       <label class=\"form-label\">Structure <span class=\"text-danger\">*</span></label>
  497.                       <input type=\"text\" class=\"form-control\" name=\"organization\" required 
  498.                              placeholder=\"Nom de votre structure\">
  499.                       <div class=\"invalid-feedback\">Veuillez saisir le nom de votre structure.</div>
  500.                     </div>
  501.                     <div class=\"col-md-6\">
  502.                       <label class=\"form-label\">Email pro <span class=\"text-danger\">*</span></label>
  503.                       <input type=\"email\" class=\"form-control\" name=\"email\" required 
  504.                              placeholder=\"votre.email@structure.fr\">
  505.                       <div class=\"invalid-feedback\">Veuillez saisir une adresse email valide.</div>
  506.                     </div>
  507.                     <div class=\"col-md-6\">
  508.                       <label class=\"form-label\">Téléphone (optionnel)</label>
  509.                       <input type=\"tel\" class=\"form-control\" name=\"telephone\" 
  510.                              placeholder=\"06 12 34 56 78\">
  511.                     </div>
  512.                     <div class=\"col-12\">
  513.                       <label class=\"form-label\">Message (optionnel)</label>
  514.                       <textarea class=\"form-control\" name=\"message\" rows=\"3\"
  515.                         placeholder=\"Décrivez brièvement vos besoins...\"></textarea>
  516.                     </div>
  517.                     <div class=\"col-12\">
  518.                       <div class=\"form-check\">
  519.                         <input class=\"form-check-input\" type=\"checkbox\" value=\"1\" id=\"consent_partenaire\" name=\"consent\" required>
  520.                         <label class=\"form-check-label\" for=\"consent_partenaire\">
  521.                           J'accepte d'être contacté (RGPD) <span class=\"text-danger\">*</span>
  522.                         </label>
  523.                         <div class=\"invalid-feedback\">Vous devez accepter d'être contacté.</div>
  524.                       </div>
  525.                     </div>
  526.                     <div class=\"col-12 d-flex gap-2\">
  527.                       <button type=\"submit\" class=\"btn btn-primary px-4\">
  528.                         <i class=\"bi bi-telephone me-2\"></i>Être rappelé sous 24 h
  529.                       </button>
  530.                       <a class=\"btn btn-outline-secondary px-4\" href=\"mailto:contact@5sur5sejour.fr\">
  531.                         Nous écrire
  532.                       </a>
  533.                     </div>
  534.                   </div>
  535.                 </form>
  536.               </div>
  537.             </div>
  538.           </div>
  539.           <!-- Panneau Création simple -->
  540.           <div id=\"pane-autre\" class=\"role-pane d-none\">
  541.             <div class=\"alert alert-primary mb-4\">
  542.               <strong>✨ Créer un espace séjour</strong><br>
  543.               <small>Type PP (Partenaire Payant) - Les familles peuvent activer Parent Premium (2,90 € / parent / séjour).</small>
  544.             </div>
  545.             <form id=\"formAutre\" method=\"post\" action=\"/Accompagnateur/register\" class=\"needs-validation\" novalidate>
  546.               <input type=\"text\" name=\"website\" class=\"visually-hidden\" tabindex=\"-1\" autocomplete=\"off\">
  547.               <input type=\"hidden\" name=\"type_user\" value=\"PP\">
  548.               <input type=\"hidden\" name=\"connpay\" value=\"1\">
  549.               
  550.               <div class=\"row g-3\">
  551.                 <div class=\"col-md-6\">
  552.                   <label class=\"form-label\">Nom <span class=\"text-danger\">*</span></label>
  553.                   <input type=\"text\" class=\"form-control\" name=\"nom_acc\" required 
  554.                          placeholder=\"Votre nom\">
  555.                   <div class=\"invalid-feedback\">Veuillez saisir votre nom.</div>
  556.                 </div>
  557.                 <div class=\"col-md-6\">
  558.                   <label class=\"form-label\">Prénom <span class=\"text-danger\">*</span></label>
  559.                   <input type=\"text\" class=\"form-control\" name=\"prenom_acc\" required 
  560.                          placeholder=\"Votre prénom\">
  561.                   <div class=\"invalid-feedback\">Veuillez saisir votre prénom.</div>
  562.                 </div>
  563.                 <div class=\"col-md-12\">
  564.                   <label class=\"form-label\">Fonction <span class=\"text-danger\">*</span></label>
  565.                   <select class=\"form-select\" name=\"fonction\" required>
  566.                     <option value=\"\">Choisir votre fonction</option>
  567.                     <option value=\"1\">Enseignant(e)</option>
  568.                     <option value=\"2\">Principal(e)</option>
  569.                     <option value=\"3\">Professeur(e)</option>
  570.                     <option value=\"4\">CPE</option>
  571.                     <option value=\"5\">Directeur(trice) d'école</option>
  572.                     <option value=\"6\">Animateur(trice)</option>
  573.                     <option value=\"7\">Directeur(trice) séjour</option>
  574.                     <option value=\"8\">Directeur(trice) centre de loisirs / ALSH</option>
  575.                     <option value=\"9\">Coordinateur(trice) enfance jeunesse</option>
  576.                     <option value=\"10\">Educateur(trice)</option>
  577.                     <option value=\"11\">Président(e)</option>
  578.                     <option value=\"12\">Autre</option>
  579.                   </select>
  580.                   <div class=\"invalid-feedback\">Veuillez sélectionner votre fonction.</div>
  581.                 </div>
  582.                 <div class=\"col-md-12\">
  583.                   <label class=\"form-label\">Structure / Organisme <span class=\"text-danger\">*</span></label>
  584.                   <input type=\"text\" class=\"form-control\" name=\"etablisment\" required 
  585.                          placeholder=\"Nom de votre structure ou organisation\">
  586.                   <div class=\"invalid-feedback\">Veuillez saisir le nom de votre structure.</div>
  587.                 </div>
  588.                 <div class=\"col-md-12\">
  589.                   <label class=\"form-label\">Adresse structure</label>
  590.                   <input type=\"text\" class=\"form-control\" name=\"adressetablisment\" 
  591.                          placeholder=\"Adresse de votre structure\">
  592.                 </div>
  593.                 <div class=\"col-md-6\">
  594.                   <label class=\"form-label\">Code postal</label>
  595.                   <input type=\"text\" class=\"form-control\" name=\"CODEpOSTALetablisment\" 
  596.                          placeholder=\"Code postal\" maxlength=\"5\">
  597.                 </div>
  598.                 <div class=\"col-md-6\">
  599.                   <label class=\"form-label\">Ville</label>
  600.                   <input type=\"text\" class=\"form-control\" name=\"villeetablisment\" 
  601.                          placeholder=\"Ville de votre structure\">
  602.                 </div>
  603.                 <div class=\"col-md-6\">
  604.                   <label class=\"form-label\">N° de Téléphone mobile <span class=\"text-danger\">*</span></label>
  605.                   <input type=\"tel\" class=\"form-control\" name=\"phone_acc\" required 
  606.                          placeholder=\"06 12 34 56 78\" pattern=\"[0-9\\s\\+\\-\\(\\)]{10,}\">
  607.                   <div class=\"invalid-feedback\">Veuillez saisir un numéro de téléphone valide.</div>
  608.                 </div>
  609.                 <div class=\"col-md-6\">
  610.                   <label class=\"form-label\">Email <span class=\"text-danger\">*</span></label>
  611.                   <input type=\"email\" class=\"form-control\" name=\"email\" required 
  612.                          placeholder=\"votre.email@structure.fr\">
  613.                   <div class=\"invalid-feedback\">Veuillez saisir une adresse email valide.</div>
  614.                 </div>
  615.                 <!-- Informations du séjour -->
  616.                 <div class=\"col-12 mt-4\">
  617.                   <h6 class=\"text-primary\">📍 Informations du séjour</h6>
  618.                   <hr>
  619.                 </div>
  620.                 <div class=\"col-md-12\">
  621.                   <label class=\"form-label\">Thème du séjour <span class=\"text-danger\">*</span></label>
  622.                   <input type=\"text\" class=\"form-control\" name=\"theme_sejour\" required 
  623.                          placeholder=\"Ex: Séjour ski, Camp d'été...\">
  624.                   <div class=\"invalid-feedback\">Veuillez saisir le thème du séjour.</div>
  625.                 </div>
  626.                 <div class=\"col-md-12\">
  627.                   <label class=\"form-label\">Adresse du séjour</label>
  628.                   <input type=\"text\" class=\"form-control\" name=\"adress_sejour\" 
  629.                          placeholder=\"Adresse du lieu de séjour\">
  630.                 </div>
  631.                 <div class=\"col-md-6\">
  632.                   <label class=\"form-label\">Code postal</label>
  633.                   <input type=\"text\" class=\"form-control\" name=\"codePostal\" 
  634.                          placeholder=\"Code postal\" maxlength=\"5\">
  635.                 </div>
  636.                 <div class=\"col-md-6\">
  637.                   <label class=\"form-label\">Pays <span class=\"text-danger\">*</span></label>
  638.                   <select class=\"form-select\" name=\"pays\" required>
  639.                     <option value=\"\">Choisir un pays</option>
  640.                     <option value=\"France\" selected>France</option>
  641.                     <option value=\"Belgique\">Belgique</option>
  642.                     <option value=\"Suisse\">Suisse</option>
  643.                     <option value=\"Espagne\">Espagne</option>
  644.                     <option value=\"Italie\">Italie</option>
  645.                     <option value=\"Allemagne\">Allemagne</option>
  646.                     <option value=\"Royaume-Uni\">Royaume-Uni</option>
  647.                     <option value=\"Autre\">Autre</option>
  648.                   </select>
  649.                   <div class=\"invalid-feedback\">Veuillez sélectionner un pays.</div>
  650.                 </div>
  651.                 <div class=\"col-md-6\">
  652.                   <label class=\"form-label\">Ville du séjour</label>
  653.                   <input type=\"text\" class=\"form-control\" name=\"ville\" 
  654.                          placeholder=\"Ville du séjour\">
  655.                 </div>
  656.                 <div class=\"col-md-6\">
  657.                   <label class=\"form-label\">Nombre de participants</label>
  658.                   <input type=\"number\" class=\"form-control\" name=\"NbEnfant\" min=\"1\" 
  659.                          placeholder=\"Nombre d'enfants\">
  660.                 </div>
  661.                 <div class=\"col-md-6\">
  662.                   <label class=\"form-label\">Date début séjour <span class=\"text-danger\">*</span></label>
  663.                   <input type=\"date\" class=\"form-control\" name=\"date_debut_sejour\" required>
  664.                   <div class=\"invalid-feedback\">Veuillez saisir la date de début.</div>
  665.                 </div>
  666.                 <div class=\"col-md-6\">
  667.                   <label class=\"form-label\">Date fin séjour <span class=\"text-danger\">*</span></label>
  668.                   <input type=\"date\" class=\"form-control\" name=\"date_fin_sejour\" required>
  669.                   <div class=\"invalid-feedback\">Veuillez saisir la date de fin.</div>
  670.                 </div>
  671.                 <div class=\"col-12 d-flex gap-2 mt-4\">
  672.                   <button type=\"submit\" class=\"btn btn-primary px-4\">
  673.                     <i class=\"bi bi-rocket me-2\"></i>Créer mon espace séjour (Type PP)
  674.                   </button>
  675.                   <a href=\"#\" class=\"btn btn-outline-secondary\" data-action=\"cta_demo\">
  676.                     Besoin d'aide ? Démo
  677.                   </a>
  678.                 </div>
  679.               </div>
  680.             </form>
  681.           </div>
  682.           <button type=\"button\" id=\"backToStep1\" class=\"btn btn-link mt-3\">
  683.             <i class=\"bi bi-arrow-left me-1\"></i> Retour au choix du profil
  684.           </button>
  685.         </div>
  686.       </div>
  687.       <div class=\"modal-footer border-top-0\">
  688.         <p class=\"small text-muted mb-0\">Sans engagement · Données hébergées en France 🇫🇷</p>
  689.       </div>
  690.     </div>
  691.   </div>
  692. </div>
  693. <style>
  694. .select-role {
  695.   cursor: pointer;
  696.   transition: all 0.3s ease;
  697. }
  698. .select-role:hover,
  699. .select-role:focus {
  700.   transform: translateY(-5px);
  701.   box-shadow: 0 4px 12px rgba(0,0,0,0.15);
  702.   border-color: var(--bs-primary) !important;
  703. }
  704. .select-role:active {
  705.   transform: translateY(-2px);
  706. }
  707. .hover-shadow {
  708.   transition: box-shadow 0.3s ease;
  709. }
  710. .bg-purple {
  711.   background-color: #6f42c1 !important;
  712. }
  713. </style>
  714. <script>
  715.   // Protection contre les erreurs de la toolbar Symfony
  716.   (function() {
  717.     // Désactiver complètement Sfjs
  718.     window.Sfjs = {
  719.       loadToolbar: function() { console.log('Sfjs.loadToolbar désactivé'); },
  720.       showToolbar: function() { console.log('Sfjs.showToolbar désactivé'); },
  721.       hideToolbar: function() { console.log('Sfjs.hideToolbar désactivé'); },
  722.       initToolbar: function() { console.log('Sfjs.initToolbar désactivé'); }
  723.     };
  724.     
  725.     // Désactiver les requêtes vers _wdt si elles échouent
  726.     const originalFetch = window.fetch;
  727.     window.fetch = function(...args) {
  728.       const url = args[0];
  729.       if (typeof url === 'string' && url.includes('/_wdt/')) {
  730.         console.warn('Requête vers _wdt bloquée:', url);
  731.         return Promise.reject(new Error('Toolbar Symfony désactivée'));
  732.       }
  733.       return originalFetch.apply(this, args);
  734.     };
  735.     
  736.     // Désactiver XMLHttpRequest vers _wdt
  737.     const originalXHROpen = XMLHttpRequest.prototype.open;
  738.     const originalXHRSend = XMLHttpRequest.prototype.send;
  739.     
  740.     XMLHttpRequest.prototype.open = function(method, url, ...args) {
  741.       this._url = url; // Stocker l'URL pour vérification dans send
  742.       if (typeof url === 'string' && url.includes('/_wdt/')) {
  743.         console.warn('Requête XHR vers _wdt bloquée:', url);
  744.         this._blocked = true;
  745.         return;
  746.       }
  747.       this._blocked = false;
  748.       return originalXHROpen.apply(this, [method, url, ...args]);
  749.     };
  750.     
  751.     XMLHttpRequest.prototype.send = function(payload) {
  752.       if (this._blocked) {
  753.         console.warn('Envoi XHR bloqué pour:', this._url);
  754.         return; // Ne pas envoyer si bloqué
  755.       }
  756.       return originalXHRSend.apply(this, arguments);
  757.     };
  758.   })();
  759.   // Supprimer complètement la toolbar Symfony du DOM
  760.   function removeSymfonyToolbar() {
  761.     const toolbar = document.querySelector('.sf-toolbar');
  762.     if (toolbar) {
  763.       toolbar.remove();
  764.       console.log('Toolbar Symfony supprimée du DOM');
  765.     }
  766.     
  767.     const clearer = document.querySelector('.sf-toolbar-clearer');
  768.     if (clearer) {
  769.       clearer.remove();
  770.     }
  771.     
  772.     const minitoolbar = document.querySelector('.sf-minitoolbar');
  773.     if (minitoolbar) {
  774.       minitoolbar.remove();
  775.     }
  776.   }
  777.   
  778.   // Supprimer immédiatement
  779.   removeSymfonyToolbar();
  780.   
  781.   // Observer pour supprimer la toolbar dès qu'elle apparaît
  782.   const observer = new MutationObserver(function(mutations) {
  783.     mutations.forEach(function(mutation) {
  784.       if (mutation.type === 'childList') {
  785.         mutation.addedNodes.forEach(function(node) {
  786.           if (node.nodeType === 1) { // Element node
  787.             if (node.classList && (node.classList.contains('sf-toolbar') || node.classList.contains('sf-minitoolbar'))) {
  788.               node.remove();
  789.               console.log('Toolbar Symfony supprimée par l\\'observer');
  790.             }
  791.             // Vérifier aussi les enfants
  792.             const toolbars = node.querySelectorAll && node.querySelectorAll('.sf-toolbar, .sf-minitoolbar, .sf-toolbar-clearer');
  793.             if (toolbars) {
  794.               toolbars.forEach(tb => tb.remove());
  795.             }
  796.           }
  797.         });
  798.       }
  799.     });
  800.   });
  801.   
  802.   observer.observe(document.body, {
  803.     childList: true,
  804.     subtree: true
  805.   });
  806.   
  807.   // Ajouter du CSS pour masquer la toolbar Symfony
  808.   const style = document.createElement('style');
  809.   style.textContent = `
  810.     .sf-toolbar, .sf-toolbar-clearer, .sf-minitoolbar { 
  811.       display: none !important; 
  812.       visibility: hidden !important;
  813.       opacity: 0 !important;
  814.       height: 0 !important;
  815.       width: 0 !important;
  816.       overflow: hidden !important;
  817.     }
  818.   `;
  819.   document.head.appendChild(style);
  820.   // Masquer la toolbar Symfony si elle cause des problèmes
  821.   document.addEventListener('DOMContentLoaded', function() {
  822.     // Masquer la toolbar Symfony après 2 secondes si elle n'est pas chargée
  823.     setTimeout(() => {
  824.       const toolbar = document.querySelector('.sf-toolbar');
  825.       if (toolbar && toolbar.classList.contains('sf-display-none')) {
  826.         toolbar.style.display = 'none';
  827.         console.log('Toolbar Symfony masquée pour éviter les erreurs 404');
  828.       }
  829.     }, 2000);
  830.     // Ouvre la modale avec l'onglet adapté + pré-remplissage
  831.     document.addEventListener('click', (e) => {
  832.     // Éviter les conflits avec la toolbar Symfony
  833.     if (e.target.closest('.sf-toolbar') || e.target.closest('[id^=\"sf\"]')) {
  834.       return;
  835.     }
  836.     
  837.     const a = e.target.closest('a[data-action=\"cta_demo\"], a[data-action=\"cta_expert\"]');
  838.     if (!a) return;
  839.     e.preventDefault();
  840.     const isExpert = a.dataset.action === 'cta_expert';
  841.     const pack = a.dataset.pack || '';
  842.     document.getElementById('demoTitle').textContent = isExpert ? 'Parler à un expert' : 'Demander une démo guidée';
  843.     document.getElementById('objet').value = isExpert ? 'expert' : 'demo';
  844.     document.getElementById('topic').value = isExpert ? 'expert' : 'demo';
  845.     document.getElementById('pack').value  = pack;
  846.     // Onglet par défaut : expert => rappel / demo => calendrier
  847.     const triggerId = isExpert ? 'tab-callback' : 'tab-calendar';
  848.     const tabElement = document.getElementById(triggerId);
  849.     
  850.     if (tabElement) {
  851.       // Désactiver tous les onglets
  852.       document.querySelectorAll('#demoTabs .nav-link').forEach(tab => {
  853.         tab.classList.remove('active');
  854.         tab.setAttribute('aria-selected', 'false');
  855.       });
  856.       
  857.       // Désactiver tous les panneaux
  858.       document.querySelectorAll('.tab-pane').forEach(pane => {
  859.         pane.classList.remove('show', 'active');
  860.       });
  861.       
  862.       // Activer l'onglet sélectionné
  863.       tabElement.classList.add('active');
  864.       tabElement.setAttribute('aria-selected', 'true');
  865.       
  866.       // Activer le panneau correspondant
  867.       const targetPane = document.querySelector(tabElement.getAttribute('data-bs-target'));
  868.       if (targetPane) {
  869.         targetPane.classList.add('show', 'active');
  870.       }
  871.     }
  872.     const modal = bootstrap.Modal.getOrCreateInstance(document.getElementById('demoModal'));
  873.     modal.show();
  874.   });
  875.   // Validation form + anti double-submit pour le formulaire de démo
  876.   (function () {
  877.     const form = document.getElementById('contactForm');
  878.     const btn  = document.getElementById('submitBtn');
  879.     if (!form || !btn) return;
  880.     // Protection contre les soumissions multiples
  881.     let isSubmitting = false;
  882.     
  883.     // Nettoyer les classes d'erreur quand l'utilisateur tape
  884.     form.addEventListener('input', function(e) {
  885.       if (e.target.classList.contains('is-invalid')) {
  886.         e.target.classList.remove('is-invalid');
  887.       }
  888.     });
  889.     
  890.     form.addEventListener('submit', function(e){
  891.       e.preventDefault(); // Toujours empêcher la soumission normale
  892.       
  893.       // Éviter les soumissions multiples
  894.       if (isSubmitting) return;
  895.       isSubmitting = true;
  896.       
  897.       // Nettoyer les messages précédents
  898.       const existingAlerts = form.parentNode.querySelectorAll('.alert');
  899.       existingAlerts.forEach(alert => alert.remove());
  900.       
  901.       if (!form.checkValidity()) {
  902.         e.stopPropagation();
  903.         form.classList.add('was-validated');
  904.         
  905.         // Afficher les messages d'erreur pour chaque champ invalide
  906.         const invalidFields = form.querySelectorAll(':invalid');
  907.         invalidFields.forEach(field => {
  908.           field.classList.add('is-invalid');
  909.         });
  910.         
  911.         // Afficher un message d'erreur général
  912.         const errorAlert = document.createElement('div');
  913.         errorAlert.className = 'alert alert-warning mt-3';
  914.         errorAlert.innerHTML = `
  915.           <div class=\"d-flex align-items-center\">
  916.             <i class=\"bi bi-exclamation-triangle-fill me-2\"></i>
  917.             <div>
  918.               <strong>Veuillez corriger les erreurs :</strong><br>
  919.               Tous les champs marqués d'un astérisque (*) sont obligatoires.
  920.             </div>
  921.           </div>
  922.         `;
  923.         form.parentNode.insertBefore(errorAlert, form.nextSibling);
  924.         
  925.         // Supprimer le message après 5 secondes
  926.         setTimeout(() => {
  927.           if (errorAlert.parentNode) {
  928.             errorAlert.parentNode.removeChild(errorAlert);
  929.           }
  930.         }, 5000);
  931.         
  932.         isSubmitting = false;
  933.         return;
  934.       } 
  935.       // Désactiver le bouton pendant l'envoi
  936.       btn.disabled = true; 
  937.       const originalText = btn.textContent;
  938.       btn.textContent = 'Envoi en cours…';
  939.       // Récupérer les données du formulaire
  940.       const formData = new FormData(form);
  941.       
  942.       // Debug : afficher les données envoyées
  943.       console.log('=== DEBUG FORMULAIRE ===');
  944.       console.log('Données du formulaire :');
  945.       const formDataObj = {};
  946.       for (let [key, value] of formData.entries()) {
  947.         console.log(key + ': \"' + value + '\"');
  948.         formDataObj[key] = value;
  949.       }
  950.       console.log('Objet complet:', formDataObj);
  951.       
  952.       // Vérifier les champs obligatoires
  953.       const requiredFields = ['name', 'organization', 'email', 'telephone', 'sejours_count', 'consent'];
  954.       const missingFields = [];
  955.       requiredFields.forEach(field => {
  956.         if (!formDataObj[field] || formDataObj[field].trim() === '') {
  957.           missingFields.push(field);
  958.         }
  959.       });
  960.       
  961.       if (missingFields.length > 0) {
  962.         console.error('Champs manquants:', missingFields);
  963.         alert('Champs manquants: ' + missingFields.join(', '));
  964.         isSubmitting = false;
  965.         return;
  966.       }
  967.       
  968.       console.log('Tous les champs obligatoires sont remplis ✅');
  969.       // Envoyer la requête AJAX
  970.       fetch(form.action, {
  971.         method: 'POST',
  972.         body: formData,
  973.         headers: {
  974.           'X-Requested-With': 'XMLHttpRequest'
  975.         }
  976.       })
  977.       .then(response => response.json())
  978.       .then(data => {
  979.         if (data.success) {
  980.           // Afficher le message de succès
  981.           const successAlert = document.createElement('div');
  982.           successAlert.className = 'alert alert-success mt-3';
  983.           successAlert.innerHTML = `
  984.             <div class=\"d-flex align-items-center\">
  985.               <i class=\"bi bi-check-circle-fill me-2\"></i>
  986.               <div>
  987.                 <strong>Demande envoyée !</strong><br>
  988.                 \${data.message}
  989.               </div>
  990.             </div>
  991.           `;
  992.           form.parentNode.insertBefore(successAlert, form.nextSibling);
  993.           
  994.           // Réinitialiser le formulaire
  995.           form.reset();
  996.           form.classList.remove('was-validated');
  997.           
  998.           // Fermer le modal après 3 secondes
  999.           setTimeout(() => {
  1000.             const modal = bootstrap.Modal.getInstance(document.getElementById('demoModal'));
  1001.             if (modal) modal.hide();
  1002.           }, 3000);
  1003.         } else {
  1004.           // Afficher le message d'erreur
  1005.           const errorAlert = document.createElement('div');
  1006.           errorAlert.className = 'alert alert-danger mt-3';
  1007.           errorAlert.innerHTML = `
  1008.             <div class=\"d-flex align-items-center\">
  1009.               <i class=\"bi bi-exclamation-triangle-fill me-2\"></i>
  1010.               <div>
  1011.                 <strong>Erreur :</strong><br>
  1012.                 \${data.message}
  1013.               </div>
  1014.             </div>
  1015.           `;
  1016.           form.parentNode.insertBefore(errorAlert, form.nextSibling);
  1017.           
  1018.           // Supprimer le message d'erreur après 8 secondes
  1019.           setTimeout(() => {
  1020.             if (errorAlert.parentNode) {
  1021.               errorAlert.parentNode.removeChild(errorAlert);
  1022.             }
  1023.           }, 8000);
  1024.         }
  1025.       })
  1026.       .catch(error => {
  1027.         console.error('Erreur:', error);
  1028.         const errorAlert = document.createElement('div');
  1029.         errorAlert.className = 'alert alert-danger mt-3';
  1030.         errorAlert.innerHTML = `
  1031.           <div class=\"d-flex align-items-center\">
  1032.             <i class=\"bi bi-exclamation-triangle-fill me-2\"></i>
  1033.             <div>
  1034.               <strong>Erreur technique :</strong><br>
  1035.               Une erreur est survenue lors de l'envoi. Veuillez réessayer plus tard.
  1036.             </div>
  1037.           </div>
  1038.         `;
  1039.         form.parentNode.insertBefore(errorAlert, form.nextSibling);
  1040.         
  1041.         // Supprimer le message d'erreur après 10 secondes
  1042.         setTimeout(() => {
  1043.           if (errorAlert.parentNode) {
  1044.             errorAlert.parentNode.removeChild(errorAlert);
  1045.           }
  1046.         }, 10000);
  1047.       })
  1048.       .finally(() => {
  1049.         // Réactiver le bouton et le flag de soumission
  1050.         btn.disabled = false;
  1051.         btn.textContent = originalText;
  1052.         isSubmitting = false;
  1053.         
  1054.         // Supprimer les anciennes alertes après 5 secondes
  1055.         setTimeout(() => {
  1056.           const alerts = form.parentNode.querySelectorAll('.alert');
  1057.           alerts.forEach(alert => alert.remove());
  1058.         }, 5000);
  1059.       });
  1060.     });
  1061.   })();
  1062.   // ===== GESTION MODALE \"CRÉER MON SÉJOUR\" =====
  1063.   const createSejourModal = document.getElementById('createSejourModal');
  1064.   const step1 = document.getElementById('step1');
  1065.   const step2 = document.getElementById('step2');
  1066.   const stepLabel = document.getElementById('stepLabel');
  1067.   const stepDescription = document.getElementById('stepDescription');
  1068.   const backToStep1Btn = document.getElementById('backToStep1');
  1069.   
  1070.   let currentRole = null;
  1071.   let isSubmittingCreate = false;
  1072.   // Fonction helper pour le tracking GA4
  1073.   function trackEvent(eventName, params = {}) {
  1074.     if (typeof gtag === 'function') {
  1075.       gtag('event', eventName, params);
  1076.       console.log('📊 GA4 Event:', eventName, params);
  1077.     }
  1078.   }
  1079.   // Reset de la modale à l'ouverture
  1080.   createSejourModal.addEventListener('show.bs.modal', function () {
  1081.     // Reset aux valeurs initiales
  1082.     step1.classList.remove('d-none');
  1083.     step2.classList.add('d-none');
  1084.     stepLabel.textContent = 'Étape 1/2';
  1085.     stepDescription.textContent = 'Choisissez votre profil';
  1086.     currentRole = null;
  1087.     
  1088.     // Masquer tous les panneaux de formulaire
  1089.     document.querySelectorAll('.role-pane').forEach(pane => pane.classList.add('d-none'));
  1090.     
  1091.     // Reset de tous les formulaires
  1092.     ['formEcole', 'formPartenaire', 'formAutre'].forEach(formId => {
  1093.       const form = document.getElementById(formId);
  1094.       if (form) {
  1095.         form.reset();
  1096.         form.classList.remove('was-validated');
  1097.       }
  1098.     });
  1099.     // Focus sur le titre de la modale
  1100.     setTimeout(() => {
  1101.       document.getElementById('createSejourTitle').focus();
  1102.     }, 300);
  1103.   });
  1104.   // Gestion du clic sur les cartes de sélection de rôle
  1105.   document.querySelectorAll('.select-role').forEach(card => {
  1106.     card.addEventListener('click', function() {
  1107.       const role = this.dataset.role;
  1108.       selectRole(role);
  1109.     });
  1110.     
  1111.     // Support du clavier
  1112.     card.addEventListener('keypress', function(e) {
  1113.       if (e.key === 'Enter' || e.key === ' ') {
  1114.         e.preventDefault();
  1115.         const role = this.dataset.role;
  1116.         selectRole(role);
  1117.       }
  1118.     });
  1119.   });
  1120.   function selectRole(role) {
  1121.     currentRole = role;
  1122.     
  1123.     // Track event GA4
  1124.     trackEvent('step_select_role', { role: role });
  1125.     
  1126.     // Si école publique → Redirection directe vers /Accompagnateur/login avec type EF
  1127.     if (role === 'ecole_publique') {
  1128.       // Fermer la modale
  1129.       bootstrap.Modal.getInstance(createSejourModal)?.hide();
  1130.       
  1131.       // Rediriger vers la page de login avec le paramètre type EF et source
  1132.       window.location.href = '/Accompagnateur/login?type=EF&from=modal';
  1133.       return;
  1134.     }
  1135.     
  1136.     // Passage à l'étape 2 pour les autres profils
  1137.     step1.classList.add('d-none');
  1138.     step2.classList.remove('d-none');
  1139.     stepLabel.textContent = 'Étape 2/2';
  1140.     
  1141.     // Afficher le panneau correspondant
  1142.     document.querySelectorAll('.role-pane').forEach(pane => pane.classList.add('d-none'));
  1143.     
  1144.     let roleLabel = '';
  1145.     if (role === 'partenaire') {
  1146.       document.getElementById('pane-partenaire').classList.remove('d-none');
  1147.       roleLabel = 'Partenaire / Organisme';
  1148.       // Lazy load Calendly pour le partenaire
  1149.       lazyLoadCalendlyIfNeeded('#pane-partenaire-demo iframe');
  1150.     } else if (role === 'autre') {
  1151.       document.getElementById('pane-autre').classList.remove('d-none');
  1152.       roleLabel = 'Création simple';
  1153.       setTimeout(() => document.querySelector('#pane-autre input')?.focus(), 300);
  1154.     }
  1155.     
  1156.     stepDescription.textContent = roleLabel;
  1157.   }
  1158.   // Retour à l'étape 1
  1159.   backToStep1Btn.addEventListener('click', function() {
  1160.     step1.classList.remove('d-none');
  1161.     step2.classList.add('d-none');
  1162.     stepLabel.textContent = 'Étape 1/2';
  1163.     stepDescription.textContent = 'Choisissez votre profil';
  1164.     currentRole = null;
  1165.   });
  1166.   // Lazy load Calendly
  1167.   function lazyLoadCalendlyIfNeeded(selector) {
  1168.     const iframe = document.querySelector(selector);
  1169.     if (iframe && iframe.hasAttribute('data-src') && !iframe.src) {
  1170.       iframe.src = iframe.getAttribute('data-src');
  1171.       console.log('📅 Calendly chargé:', iframe.src);
  1172.     }
  1173.   }
  1174.   // Lazy load Calendly pour modale démo (onglet calendrier)
  1175.   const tabCalendar = document.getElementById('tab-calendar');
  1176.   if (tabCalendar) {
  1177.     tabCalendar.addEventListener('shown.bs.tab', function() {
  1178.       lazyLoadCalendlyIfNeeded('#pane-calendar iframe');
  1179.     });
  1180.   }
  1181.   // Lazy load Calendly pour modale créer séjour (onglet demo partenaire)
  1182.   const tabPartenaireDemo = document.getElementById('tab-partenaire-demo');
  1183.   if (tabPartenaireDemo) {
  1184.     tabPartenaireDemo.addEventListener('shown.bs.tab', function() {
  1185.       lazyLoadCalendlyIfNeeded('#pane-partenaire-demo iframe');
  1186.     });
  1187.   }
  1188.   // Gestion des radios \"qui paie\" avec tracking
  1189.   document.querySelectorAll('input[name=\"payer\"]').forEach(radio => {
  1190.     radio.addEventListener('change', function() {
  1191.       trackEvent('toggle_payer', { who_pays: this.value });
  1192.     });
  1193.   });
  1194.   // Fonction générique de soumission de formulaire avec AJAX
  1195.   function setupFormSubmission(formId, onSuccess) {
  1196.     const form = document.getElementById(formId);
  1197.     if (!form) return;
  1198.     form.addEventListener('submit', function(e) {
  1199.       e.preventDefault();
  1200.       // Éviter les doubles soumissions
  1201.       if (isSubmittingCreate) {
  1202.         return;
  1203.       }
  1204.       // Valider le formulaire
  1205.       if (!form.checkValidity()) {
  1206.         form.classList.add('was-validated');
  1207.         
  1208.         // Afficher un message d'avertissement
  1209.         const warningAlert = document.createElement('div');
  1210.         warningAlert.className = 'alert alert-warning mt-3';
  1211.         warningAlert.innerHTML = `
  1212.           <div class=\"d-flex align-items-center\">
  1213.             <i class=\"bi bi-exclamation-triangle-fill me-2\"></i>
  1214.             <div>
  1215.               <strong>Veuillez corriger les erreurs :</strong><br>
  1216.               Tous les champs marqués d'un astérisque (*) sont obligatoires.
  1217.             </div>
  1218.           </div>
  1219.         `;
  1220.         form.parentNode.insertBefore(warningAlert, form.nextSibling);
  1221.         setTimeout(() => warningAlert.remove(), 5000);
  1222.         return;
  1223.       }
  1224.       isSubmittingCreate = true;
  1225.       // Track event GA4
  1226.       trackEvent('form_submit', { form_id: formId });
  1227.       // Désactiver le bouton
  1228.       const btn = form.querySelector('button[type=\"submit\"]');
  1229.       btn.disabled = true;
  1230.       const originalText = btn.textContent;
  1231.       btn.innerHTML = '<span class=\"spinner-border spinner-border-sm me-2\"></span>Envoi en cours…';
  1232.       // Soumettre via fetch
  1233.       const formData = new FormData(form);
  1234.       fetch(form.action, {
  1235.         method: 'POST',
  1236.         body: formData,
  1237.         headers: {
  1238.           'X-Requested-With': 'XMLHttpRequest'
  1239.         }
  1240.       })
  1241.       .then(response => response.json())
  1242.       .then(data => {
  1243.         if (data.idSejour) {
  1244.           // Succès ! Le séjour a été créé
  1245.           
  1246.           // Track event GA4 de succès
  1247.           trackEvent('create_sejour_success', {
  1248.             role: currentRole,
  1249.             sejour_id: data.idSejour,
  1250.             code_sejour: data.codeSejour || 'N/A'
  1251.           });
  1252.           // Afficher le message de succès
  1253.           const successAlert = document.createElement('div');
  1254.           successAlert.className = 'alert alert-success mt-3';
  1255.           successAlert.innerHTML = `
  1256.             <div class=\"d-flex align-items-center\">
  1257.               <i class=\"bi bi-check-circle-fill me-2\"></i>
  1258.               <div>
  1259.                 <strong>✅ Séjour créé avec succès !</strong><br>
  1260.                 \${data.codeSejour ? 'Code séjour : <strong>' + data.codeSejour + '</strong><br>' : ''}
  1261.                 Vous allez être redirigé vers votre espace...
  1262.               </div>
  1263.             </div>
  1264.           `;
  1265.           form.parentNode.insertBefore(successAlert, form.nextSibling);
  1266.           // Reset le formulaire
  1267.           form.reset();
  1268.           form.classList.remove('was-validated');
  1269.           // Rediriger après 2 secondes vers l'espace accompagnateur
  1270.           setTimeout(() => {
  1271.        
  1272.           }, 2000);
  1273.           // Callback optionnel
  1274.           if (onSuccess) onSuccess(data);
  1275.         } else if (data.success === false) {
  1276.           // Erreur métier
  1277.           const errorAlert = document.createElement('div');
  1278.           errorAlert.className = 'alert alert-danger mt-3';
  1279.           errorAlert.innerHTML = `
  1280.             <div class=\"d-flex align-items-center\">
  1281.               <i class=\"bi bi-x-circle-fill me-2\"></i>
  1282.               <div>
  1283.                 <strong>Erreur :</strong><br>
  1284.                 \${data.message || 'Une erreur est survenue lors de la création du séjour.'}
  1285.               </div>
  1286.             </div>
  1287.           `;
  1288.           form.parentNode.insertBefore(errorAlert, form.nextSibling);
  1289.           setTimeout(() => errorAlert.remove(), 7000);
  1290.         } else {
  1291.           // Réponse inattendue
  1292.           console.warn('Réponse inattendue:', data);
  1293.           const warningAlert = document.createElement('div');
  1294.           warningAlert.className = 'alert alert-warning mt-3';
  1295.           warningAlert.innerHTML = `
  1296.             <div class=\"d-flex align-items-center\">
  1297.               <i class=\"bi bi-exclamation-triangle-fill me-2\"></i>
  1298.               <div>
  1299.                 <strong>Attention :</strong><br>
  1300.                 La création du séjour a peut-être réussi. Vérifiez votre espace.
  1301.               </div>
  1302.             </div>
  1303.           `;
  1304.           form.parentNode.insertBefore(warningAlert, form.nextSibling);
  1305.           setTimeout(() => {
  1306.             window.location.href = '/Accompagnateur/login';
  1307.           }, 3000);
  1308.         }
  1309.       })
  1310.       .catch(error => {
  1311.         console.error('Erreur:', error);
  1312.         const errorAlert = document.createElement('div');
  1313.         errorAlert.className = 'alert alert-danger mt-3';
  1314.         errorAlert.innerHTML = `
  1315.           <div class=\"d-flex align-items-center\">
  1316.             <i class=\"bi bi-x-circle-fill me-2\"></i>
  1317.             <div>
  1318.               <strong>Erreur technique :</strong><br>
  1319.               Une erreur réseau est survenue. Veuillez réessayer plus tard.
  1320.             </div>
  1321.           </div>
  1322.         `;
  1323.         form.parentNode.insertBefore(errorAlert, form.nextSibling);
  1324.         setTimeout(() => errorAlert.remove(), 7000);
  1325.       })
  1326.       .finally(() => {
  1327.         btn.disabled = false;
  1328.         btn.innerHTML = originalText;
  1329.         isSubmittingCreate = false;
  1330.       });
  1331.     });
  1332.   }
  1333.   // Setup tous les formulaires de la modale \"Créer mon séjour\"
  1334.   // formEcole supprimé car redirection directe vers /Accompagnateur/login
  1335.   setupFormSubmission('formPartenaire');
  1336.   setupFormSubmission('formAutre');
  1337.   // Délégation d'événements pour tous les CTA avec data-action
  1338.   document.addEventListener('click', function(e) {
  1339.     // Éviter les conflits avec la toolbar Symfony
  1340.     if (e.target.closest('.sf-toolbar') || e.target.closest('[id^=\"sf\"]')) {
  1341.       return;
  1342.     }
  1343.     const target = e.target.closest('[data-action]');
  1344.     if (!target) return;
  1345.     const action = target.dataset.action;
  1346.     const pack = target.dataset.pack || '';
  1347.     // Track event GA4
  1348.     trackEvent('cta_open_modal', { action: action, pack: pack });
  1349.     if (action === 'cta_create') {
  1350.       // Ouvrir la modale \"Créer mon séjour\"
  1351.       e.preventDefault();
  1352.       const modal = new bootstrap.Modal(createSejourModal);
  1353.       modal.show();
  1354.     } else if (action === 'cta_demo' || action === 'cta_expert') {
  1355.       // Ouvrir la modale demo/expert existante
  1356.       e.preventDefault();
  1357.       const demoModal = document.getElementById('demoModal');
  1358.       const modal = new bootstrap.Modal(demoModal);
  1359.       
  1360.       const isExpert = action === 'cta_expert';
  1361.       
  1362.       // Changer le titre
  1363.       document.getElementById('demoTitle').textContent = isExpert ? 'Parler à un expert' : 'Demander une démo guidée';
  1364.       
  1365.       // Pré-remplir les champs cachés
  1366.       document.getElementById('objet').value = isExpert ? 'expert' : 'demo';
  1367.       document.getElementById('topic').value = isExpert ? 'expert' : 'demo';
  1368.       document.getElementById('pack').value = pack;
  1369.       
  1370.       // Activer le bon onglet
  1371.       const tabCalendar = document.getElementById('tab-calendar');
  1372.       const tabCallback = document.getElementById('tab-callback');
  1373.       const paneCalendar = document.getElementById('pane-calendar');
  1374.       const paneCallback = document.getElementById('pane-callback');
  1375.       
  1376.       if (isExpert) {
  1377.         // Expert → Onglet \"Être rappelé\"
  1378.         tabCalendar.classList.remove('active');
  1379.         tabCallback.classList.add('active');
  1380.         paneCalendar.classList.remove('show', 'active');
  1381.         paneCallback.classList.add('show', 'active');
  1382.       } else {
  1383.         // Démo → Onglet \"Réserver un créneau\"
  1384.         tabCallback.classList.remove('active');
  1385.         tabCalendar.classList.add('active');
  1386.         paneCallback.classList.remove('show', 'active');
  1387.         paneCalendar.classList.add('show', 'active');
  1388.         
  1389.         // Lazy load Calendly
  1390.         lazyLoadCalendlyIfNeeded('#pane-calendar iframe');
  1391.       }
  1392.       
  1393.       modal.show();
  1394.     }
  1395.   });
  1396.   }); // Fin du DOMContentLoaded
  1397. </script>
  1398.     <!-- ======= Site Wrap =======-->
  1399.     <div class=\"site-wrap\">
  1400.       
  1401.       <!-- ======= Header =======-->
  1402.       <header class=\"fbs__net-navbar navbar navbar-expand-lg dark\" aria-label=\"freebootstrap.net navbar\">
  1403.         <div class=\"container d-flex align-items-center justify-content-between\">
  1404.           
  1405.           <!-- Start Logo-->
  1406.           <a class=\"navbar-brand w-auto\" href=\"#\">
  1407.             <img class=\"logo dark img-fluid\" src=\"";
  1408.         // line 1420
  1409.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/imagesAccueil/logoHeader.png"), "html"nulltrue);
  1410.         yield "\" alt=\"5sur5séjour logo\" style=\"height: 65px;\">
  1411.           </a>
  1412.           <!-- End Logo-->
  1413.           
  1414.           <!-- Start offcanvas-->
  1415.           <div class=\"offcanvas offcanvas-start w-75\" id=\"fbs__net-navbars\" tabindex=\"-1\" aria-labelledby=\"fbs__net-navbarsLabel\">
  1416.             
  1417.             <div class=\"offcanvas-header\">
  1418.               <div class=\"offcanvas-header-logo\">
  1419.                 <a class=\"logo-link\" id=\"fbs__net-navbarsLabel\" href=\"#\">
  1420.                   <img class=\"logo light img-fluid\" src=\"";
  1421.         // line 1430
  1422.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/imagesAccueil/logoHeader.png"), "html"nulltrue);
  1423.         yield "\" alt=\"5sur5séjour logo\" style=\"height: 60px;\">
  1424.                 </a>
  1425.               </div>
  1426.               <button class=\"btn-close btn-close-black\" type=\"button\" data-bs-dismiss=\"offcanvas\" aria-label=\"Close\"></button>
  1427.             </div>
  1428.             
  1429.             <div class=\"offcanvas-body align-items-lg-center\">
  1430.               
  1431.               <ul class=\"navbar-nav nav me-auto ps-lg-5 mb-2 mb-lg-0\">
  1432.                 <li class=\"nav-item\"><a class=\"nav-link scroll-link\" href=\"#about\">A propos</a></li>
  1433.                 <li class=\"nav-item\"><a class=\"nav-link scroll-link\" href=\"#how-it-works\">Comment ça marche</a></li>
  1434.                 <li class=\"nav-item\"><a class=\"nav-link scroll-link\" href=\"#pricing\">Nos offres</a></li>
  1435.                 <li class=\"nav-item\"><a class=\"nav-link scroll-link\" href=\"#contact\">Contact</a></li>
  1436.                 <li class=\"nav-item dropdown\">
  1437.                   <a class=\"nav-link dropdown-toggle\" href=\"#\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">Nos produits <i class=\"bi bi-chevron-down\"></i></a>
  1438.                   <ul class=\"dropdown-menu\">
  1439.                     <li class=\"nav-item\"><a class=\"nav-link\" href=\"";
  1440.         // line 1446
  1441.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("pack_annuel_partenaires");
  1442.         yield "\">Pack Annuel Partenaires</a></li>
  1443.                     <li><hr class=\"dropdown-divider\"></li>
  1444.                                                 ";
  1445.         // line 1448
  1446.         $context['_parent'] = $context;
  1447.         $context['_seq'] = CoreExtension::ensureTraversable($context["produit"]);
  1448.         foreach ($context['_seq'] as $context["_key"] => $context["produit"]) {
  1449.             // line 1449
  1450.             yield "                                                    ";
  1451.             if ((CoreExtension::getAttribute($this->env$this->source$context["produit"], "labeleType", [], "any"falsefalsefalse1449) != "Connexion")) {
  1452.                 // line 1450
  1453.                 yield "
  1454.                                        <li class=\"nav-item\"><a class=\"nav-link scroll-link\" href=\"";
  1455.                 // line 1452
  1456.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("album", ["id" => CoreExtension::getAttribute($this->env$this->source$context["produit"], "labeleType", [], "any"falsefalsefalse1452)]), "html"nulltrue);
  1457.                 yield "\"> ";
  1458.                 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape(CoreExtension::getAttribute($this->env$this->source$context["produit"], "labeleType", [], "any"falsefalsefalse1452), "html"nulltrue);
  1459.                 yield "</a></li>
  1460.                                                     ";
  1461.             }
  1462.             // line 1456
  1463.             yield "                                                ";
  1464.         }
  1465.         $_parent $context['_parent'];
  1466.         unset($context['_seq'], $context['_key'], $context['produit'], $context['_parent']);
  1467.         $context array_intersect_key($context$_parent) + $_parent;
  1468.         // line 1457
  1469.         yield "                   
  1470.                   </ul>
  1471.                 </li>
  1472.               </ul>
  1473.               
  1474.             </div>
  1475.           </div>
  1476.           <!-- End offcanvas-->
  1477.           
  1478.           <div class=\"ms-auto w-auto\">
  1479.             
  1480.             <div class=\"header-social d-flex align-items-center gap-1\">
  1481.               <a class=\"btn btn-primary py-2\" href=\"#jemeconnecte\">Je me connecte</a>
  1482.               
  1483.               <button class=\"fbs__net-navbar-toggler justify-content-center align-items-center ms-auto\" data-bs-toggle=\"offcanvas\" data-bs-target=\"#fbs__net-navbars\" aria-controls=\"fbs__net-navbars\" aria-label=\"Toggle navigation\" aria-expanded=\"false\">
  1484.                 <svg class=\"fbs__net-icon-menu\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">
  1485.                   <line x1=\"21\" x2=\"3\" y1=\"6\" y2=\"6\"></line>
  1486.                   <line x1=\"15\" x2=\"3\" y1=\"12\" y2=\"12\"></line>
  1487.                   <line x1=\"17\" x2=\"3\" y1=\"18\" y2=\"18\"></line>
  1488.                 </svg>
  1489.                 <svg class=\"fbs__net-icon-close\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">
  1490.                   <path d=\"M18 6 6 18\"></path>
  1491.                   <path d=\"m6 6 12 12\"></path>
  1492.                 </svg>
  1493.               </button>
  1494.               
  1495.             </div>
  1496.             
  1497.           </div>
  1498.         </div>
  1499.       </header>
  1500.       <!-- End Header-->
  1501.       
  1502.       <!-- ======= Main =======-->
  1503.       <main>
  1504.        
  1505.            <!-- ======= Hero =======-->
  1506.         <section class=\"hero__v6 section\" id=\"home\">
  1507.           <div class=\"container\">
  1508.             <div class=\"row\">
  1509.               <div class=\"col-lg-6 mb-4 mb-lg-0\">
  1510.                 <div class=\"row\">
  1511.                   <div class=\"col-lg-11\">
  1512.                     <span class=\"hero-subtitle text-uppercase\" data-aos=\"fade-up\" data-aos-delay=\"0\">La solution sécurisée qui rassure les familles et libère vos équipes</span>
  1513.                     <h1 class=\"hero-title mb-3\" data-aos=\"fade-up\" data-aos-delay=\"100\"> Avec 5sur5Séjour, transformez chaque séjour en une expérience sereine et valorisante.</h1>
  1514.                     <p class=\"hero-description mb-4 mb-lg-5\" data-aos=\"fade-up\" data-aos-delay=\"200\">🤝 Un accompagnement humain dédié| 📞 Des appels vocaux automatiques aux familles | 🔒 100% conforme RGPD & hébergé en France</p>
  1515.                     <a  class=\"btn btn-lg btn-primary px-4 w-100 w-sm-auto\" style=\"background:color-mix(in srgb, var(--bs-secondary), transparent 70%);color:#41a2aa\"
  1516.               href=\"";
  1517.         // line 1504
  1518.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("pack_annuel_partenaires");
  1519.         yield "\">
  1520.            Devenir partenaire
  1521.             <svg class=\"ms-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">
  1522.               <path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path>
  1523.             </svg>
  1524.           </a>
  1525.                   </div>
  1526.                 </div>
  1527.               </div>
  1528.               <div class=\"col-lg-6\">
  1529.                 <div class=\"hero-img\">
  1530.                   <img class=\"img-card img-fluid\" style=\"background: radial-gradient(gray, transparent);border-radius: 30px;\" src=\"";
  1531.         // line 1515
  1532.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/imagesAccueil/demo3.png"), "html"nulltrue);
  1533.         yield "\" alt=\"Image card\" data-aos=\"fade-down\" data-aos-delay=\"600\">
  1534.                   <img class=\"img-main img-fluid rounded-4\" src=\"";
  1535.         // line 1516
  1536.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("images/smiling_5sur5.svg"), "html"nulltrue);
  1537.         yield "\" alt=\"Hero Image\" data-aos=\"fade-in\" data-aos-delay=\"500\">
  1538.                 </div>
  1539.                   <!-- Bouton CTA -->
  1540.                     <!-- CTAs -->
  1541.         <div class=\"d-flex flex-wrap gap-3 align-items-center mb-2\" data-aos=\"fade-up\" data-aos-delay=\"250\"  style=\"margin-top:15%\">
  1542.           <a class=\"btn btn-lg btn-primary px-4 w-100 w-sm-auto\" href=\"#\" data-action=\"cta_create\" data-pack=\"creation\">
  1543.             Créer mon espace séjour 
  1544.             <svg class=\"ms-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">
  1545.               <path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path>
  1546.             </svg>
  1547.           </a>
  1548.         
  1549.         </div>
  1550.     
  1551.         <!-- Preuve sociale courte -->
  1552.         <div class=\"logos mt-4\" data-aos=\"fade-up\" data-aos-delay=\"350\">
  1553.         <p class=\"text-primary-emphasis text-uppercase small mt-4 mb-0\">
  1554.   Déjà adopté par <strong>1 500+</strong> écoles, centres de loisirs et associations en France
  1555. </p>
  1556.         </div>
  1557.               </div>
  1558.     
  1559.             </div>
  1560.           </div>
  1561.           <!-- End Hero-->
  1562.         </section>
  1563.         <!-- End Hero-->
  1564.         
  1565.         <!-- ======= Vignettes Section =======-->
  1566.         <section class=\"about_wrap_area aboutWrapper mb-5\">
  1567.           <div class=\"container\" id=\"jemeconnecte\">
  1568.             <div class=\"row\">
  1569.               <div class=\"col-xl-4 col-md-4 col-lg-4\">
  1570.                 <div class=\"single_service_wrap text-center vignetteContent\" data-aos=\"fade-up\" data-aos-delay=\"0\">
  1571.                   <img class=\"imageParent\" src=\"";
  1572.         // line 1553
  1573.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/imagesAccueil/son_sejour.svg"), "html"nulltrue);
  1574.         yield "\" alt=\"Parent\">
  1575.                   <h3 class=\"titreVignette\">Vous êtes parent</h3>
  1576.                   <p class=\"txtVignette\">Consultez les photos et vidéos à tout moment, <b>et soyez appelé dès qu'un nouveau message vocal est déposé — restez connectés au séjour, où que vous soyez.</b> </p>
  1577.                   <a href=\"";
  1578.         // line 1556
  1579.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("app_back_Parent");
  1580.         yield "\" class=\"btn btn-primary py-2\">Je me connecte</a>
  1581.                 </div>
  1582.               </div>
  1583.               <div class=\"col-xl-4 col-md-4 col-lg-4\">
  1584.                 <div class=\"single_service_wrap text-center vignetteContent\" data-aos=\"fade-up\" data-aos-delay=\"200\">
  1585.                   <img class=\"imageAcc\" src=\"";
  1586.         // line 1561
  1587.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/imagesAccueil/espceAcc.svg"), "html"nulltrue);
  1588.         yield "\" alt=\"Accompagnateur\">
  1589.                   <h3 class=\"titreVignette titreAcc\">Vous êtes accompagnateur</h3>
  1590.                   <p class=\"txtVignette txtAcc\">Partagez facilement photos et messages pour rassurer les familles — créez et gérez vos séjours en toute simplicité. </p>
  1591.                   <a  data-bs-toggle=\"modal\" data-bs-target=\"#loginModal\"  class=\"btn btn-primary py-2\">Je me connecte</a>
  1592.                 </div>
  1593.               </div>
  1594.               <div class=\"col-xl-4 col-md-4 col-lg-4\">
  1595.                 <div class=\"single_service_wrap text-center vignetteContent\" data-aos=\"fade-up\" data-aos-delay=\"400\">
  1596.                   <img class=\"imagePartenaire\" src=\"";
  1597.         // line 1569
  1598.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/imagesAccueil/espcPart.svg"), "html"nulltrue);
  1599.         yield "\" alt=\"Partenaire\">
  1600.                   <h3 class=\"titreVignette titrePartenaire\">Vous êtes partenaire</br></h3>
  1601.                   <p class=\"txtVignette txtPartenaire\">
  1602.                     <br/>Créez et gérez tous vos séjours depuis un espace dédié, avec un service client sur mesure et des outils pensés pour vous.</p>
  1603.                   <a data-bs-toggle=\"modal\" data-bs-target=\"#partnerLoginModal\" class=\"btn btn-primary py-2\">Je me connecte</a>
  1604.                 </div>
  1605.               </div>
  1606.             </div>
  1607.           </div>
  1608.         </section>
  1609.         <!-- End Vignettes -->
  1610.         
  1611.     
  1612.         <!-- ======= Pourquoi nous choisir =======-->
  1613.         <section class=\"section features__v2\" id=\"about\">
  1614.           <div class=\"container\">
  1615.             <div class=\"row\">
  1616.               <div class=\"col-12\">
  1617.                 <div class=\"d-lg-flex p-5 rounded-4 content\" data-aos=\"fade-in\" data-aos-delay=\"0\">
  1618.                   <div class=\"row\">
  1619.                     <div class=\"col-lg-5 mb-5 mb-lg-0\" data-aos=\"fade-up\" data-aos-delay=\"0\">
  1620.                       <div class=\"row\"> 
  1621.                         <div class=\"col-lg-11\">
  1622.                           <div class=\"h-100 flex-column justify-content-between d-flex\">
  1623.                             <div>
  1624.                               <h2 class=\"mb-4\">Pourquoi nous choisir pour vos séjours</h2>
  1625.                               <p class=\"mb-5\">5sur5séjour n'est pas qu'un outil pour les animateurs.
  1626. C'est une solution complète pour les professionnels qui veulent gagner du temps, rassurer les familles, et moderniser leur image.</p>
  1627.                             </div>
  1628.                             <div class=\"align-self-start\">
  1629.                                  <a  class=\"btn btn-lg btn-primary px-4 w-100 w-sm-auto\" style=\"background:color-mix(in srgb, var(--bs-secondary), transparent 70%);color:#41a2aa\"
  1630.               href=\"";
  1631.         // line 1600
  1632.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("pack_annuel_partenaires");
  1633.         yield "\">
  1634.             Devenir partenaire
  1635.             <svg class=\"ms-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">
  1636.               <path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path>
  1637.             </svg>
  1638.           </a>
  1639.                             </div>
  1640.                           </div>
  1641.                         </div>
  1642.                       </div>
  1643.                     </div>
  1644.                     <div class=\"col-lg-7\">
  1645.                       <div class=\"row justify-content-end\">
  1646.                         <div class=\"col-lg-11\">
  1647.                           <div class=\"row\">
  1648.                             <div class=\"col-sm-6\" data-aos=\"fade-up\" data-aos-delay=\"0\">
  1649.                               <div class=\"icon text-center mb-4\"><i class=\"bi bi-shield-lock fs-4\"></i></div>
  1650.                               <h3 class=\"fs-6 fw-bold mb-3\">Partage sécurisé</h3>
  1651.                               <p>Galerie privée photos/vidéos, droits par groupes/classes, consentements intégrés.</p>
  1652.                             </div>
  1653.                             <div class=\"col-sm-6\" data-aos=\"fade-up\" data-aos-delay=\"100\">
  1654.                               <div class=\"icon text-center mb-4\"><i class=\"bi bi-telephone-outbound fs-4\"></i></div>
  1655.                               <h3 class=\"fs-6 fw-bold mb-3\">Boîte vocale 5sur5   </h3>
  1656.                               <p>Un service historique, revient modernisé pour renforcer encore votre lien avec les familles.</p>
  1657.                             </div>
  1658.                             <div class=\"col-sm-6\" data-aos=\"fade-up\" data-aos-delay=\"200\">
  1659.                               <div class=\"icon text-center mb-4\"><i class=\"bi bi-clock fs-4\"></i></div>
  1660.                               <h3 class=\"fs-6 fw-bold mb-3\">Temps gagné</h3>
  1661.                               <p>Publication partagées automatiquement en 2 clics. Aucune intervention de votre part : votre équipe reste tranquille.</p>
  1662.                             </div>
  1663.                             <div class=\"col-sm-6\" data-aos=\"fade-up\" data-aos-delay=\"300\">
  1664.                               <div class=\"icon text-center mb-4\"><i class=\"bi bi-headset fs-4\"></i></div>
  1665.                               <h3 class=\"fs-6 fw-bold mb-3\">Support humain</h3>
  1666.                               <p>Accompagnement à la mise en place et support dédié pendant vos séjours.</p>
  1667.                             </div>
  1668.                           </div>
  1669.                         </div>
  1670.                       </div>
  1671.                     </div>
  1672.                   </div>
  1673.                 </div>
  1674.               </div>
  1675.             </div>
  1676.           </div>
  1677.         </section>
  1678.         <!-- End Features-->
  1679.         <section class=\"section py-6 pro-offers\" id=\"pricing\">
  1680.           <div class=\"container position-relative\">
  1681.             <div class=\"text-center mb-5\">
  1682.               <span class=\"subtitle text-uppercase mb-2 tagSection d-inline-flex align-items-center gap-2\" data-aos=\"fade-up\">
  1683.                 <i class=\"bi bi-stars text-warning\"></i> Offres PRO 5sur5
  1684.               </span>
  1685.               <h2 class=\"mb-3\" data-aos=\"fade-up\" data-aos-delay=\"50\">
  1686.                 Une tarification claire pour chaque structure
  1687.               </h2>
  1688.               <p class=\"text-muted mb-0\" data-aos=\"fade-up\" data-aos-delay=\"100\">
  1689.                 Plateforme photo & audio sécurisée, boîte vocale web intégrée, support humain basé en France.
  1690.               </p>
  1691.             </div>
  1692.             <div class=\"row g-4 align-items-stretch\">
  1693.               <!-- Séjour unique -->
  1694.               <div class=\"col-lg-4\" data-aos=\"fade-up\" data-aos-delay=\"0\">
  1695.                 <div class=\"pro-card h-100\">
  1696.                   <div class=\"pro-card__badge text-secondary\"><i class=\"bi bi-calendar4-week me-2\"></i>Séjour ponctuel</div>
  1697.                   <h3>Séjour Unique</h3>
  1698.                   <p class=\"pro-card__subtitle\">Idéal pour tester la plateforme</p>
  1699.                   <div class=\"pro-card__price\">
  1700.                     <span>39€</span>
  1701.                     <small>/ séjour</small>
  1702.                   </div>
  1703.                   <ul>
  1704.                     <li><i class=\"bi bi-check-circle-fill\"></i>Galerie photo + messages vocaux</li>
  1705.                     <li><i class=\"bi bi-check-circle-fill\"></i>Espace sécurisé pendant 60 jours</li>
  1706.                     <li><i class=\"bi bi-check-circle-fill\"></i>Aucun engagement, aucune surprise</li>
  1707.                     <li><i class=\"bi bi-check-circle-fill\"></i>Support pour l'accompagnateur</li>
  1708.                   </ul>
  1709.                   <a href=\"";
  1710.         // line 1677
  1711.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("app_creation_simple_creer");
  1712.         yield "\" class=\"btn btn-outline-primary w-100\">
  1713.                     <i class=\"bi bi-plus-circle me-2\"></i>Créer mon séjour
  1714.                   </a>
  1715.                 </div>
  1716.               </div>
  1717.               <!-- Pack annuel -->
  1718.               <div class=\"col-lg-4\" data-aos=\"fade-up\" data-aos-delay=\"150\">
  1719.                 <div class=\"pro-card pro-card--featured h-100 position-relative overflow-hidden\">
  1720.                   <span class=\"pro-card__badge pro-card__badge--featured\"><i class=\"bi bi-fire me-2\"></i>Le plus choisi</span>
  1721.                   <h3>Pack Annuel – 25 séjours</h3>
  1722.                   <p class=\"pro-card__subtitle\">Pour les structures qui partent toute l’année</p>
  1723.                   <div class=\"pro-card__price\">
  1724.                     <span>490€</span>
  1725.                     <small>/ an</small>
  1726.                   </div>
  1727.                   <ul>
  1728.                     <li><i class=\"bi bi-check-circle-fill\"></i>Jusqu’à 25 séjours inclus</li>
  1729.                     <li><i class=\"bi bi-check-circle-fill\"></i>Accompagnateurs & parents illimités</li>
  1730.                     <li><i class=\"bi bi-check-circle-fill\"></i>Mise en place en 24h + onboarding</li>
  1731.                     <li><i class=\"bi bi-check-circle-fill\"></i>Boîte vocale web intégrée</li>
  1732.                   </ul>
  1733.                   <a href=\"";
  1734.         // line 1699
  1735.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("pack_annuel_partenaires");
  1736.         yield "\" class=\"btn btn-primary w-100\">
  1737.                     <i class=\"bi bi-rocket-takeoff me-2\"></i>Prendre le pack annuel
  1738.                   </a>
  1739.                 </div>
  1740.               </div>
  1741.               <!-- Offres sur mesure -->
  1742.               <div class=\"col-lg-4\" data-aos=\"fade-up\" data-aos-delay=\"300\">
  1743.                 <div class=\"pro-card h-100\">
  1744.                   <div class=\"pro-card__badge text-secondary\"><i class=\"bi bi-building-up me-2\"></i>Grandes structures</div>
  1745.                   <h3>+25 séjours / an</h3>
  1746.                   <p class=\"pro-card__subtitle\">Partenariat sur mesure & tarifs dégressifs</p>
  1747.                   <div class=\"pro-card__price pro-card__price--quote\">
  1748.                     <span>Sur devis</span>
  1749.                  
  1750.                   </div>
  1751.                   <ul>
  1752.                     <li><i class=\"bi bi-check-circle-fill\"></i>Déploiement multi-sites & multi-équipes</li>
  1753.                     <li><i class=\"bi bi-check-circle-fill\"></i>Tableau de bord groupe</li>
  1754.                     <li><i class=\"bi bi-check-circle-fill\"></i>Contrat cadre + facturation centralisée</li>
  1755.                     <li><i class=\"bi bi-check-circle-fill\"></i>Support prioritaire 7j/7</li>
  1756.                   </ul>
  1757.                   <button type=\"button\" class=\"btn btn-outline-primary w-100\" data-bs-toggle=\"modal\" data-bs-target=\"#grandVolumeModal\">
  1758.                     <i class=\"bi bi-envelope-open me-2\"></i>Parler à un expert
  1759.                   </button>
  1760.                 </div>
  1761.               </div>
  1762.             </div>
  1763.             <div class=\"pro-offers__foot text-center mt-5\" data-aos=\"fade-up\">
  1764.               🎓 <strong>Écoles publiques :</strong> accès à la plateforme sans abonnement &nbsp;•&nbsp; Données hébergées en France &nbsp;•&nbsp; Activation en 24h
  1765.             </div>
  1766.           </div>
  1767.         </section>
  1768.         <style>
  1769.           .pro-offers {
  1770.             background: linear-gradient(135deg, #f5fbff 0%, #f0f5ff 100%);
  1771.             border-top: 1px solid rgba(65,162,170,0.1);
  1772.             border-bottom: 1px solid rgba(65,162,170,0.1);
  1773.           }
  1774.           .pro-card {
  1775.             background: #fff;
  1776.             border-radius: 24px;
  1777.             padding: 32px;
  1778.             box-shadow: 0 25px 60px rgba(15, 40, 77, 0.08);
  1779.             transition: transform 0.3s ease, box-shadow 0.3s ease;
  1780.             height: 100%;
  1781.           }
  1782.           .pro-card:hover {
  1783.             transform: translateY(-6px);
  1784.             box-shadow: 0 30px 70px rgba(15, 40, 77, 0.16);
  1785.           }
  1786.           .pro-card h3 {
  1787.             font-weight: 700;
  1788.             color: #1f2b3a;
  1789.           }
  1790.           .pro-card__subtitle {
  1791.             color: #6b7b8d;
  1792.             margin-bottom: 1rem;
  1793.           }
  1794.           .pro-card__price {
  1795.             display: flex;
  1796.             align-items: baseline;
  1797.             gap: 8px;
  1798.             font-weight: 700;
  1799.             color: #1f2b3a;
  1800.             margin-bottom: 1.25rem;
  1801.           }
  1802.           .pro-card__price span {
  1803.             font-size: 2.4rem;
  1804.             color: #41a2aa;
  1805.           }
  1806.           .pro-card__price--quote span {
  1807.             font-size: 1.8rem;
  1808.           }
  1809.           .pro-card ul {
  1810.             list-style: none;
  1811.             padding: 0;
  1812.             margin: 0 0 1.5rem 0;
  1813.             color: #4b596b;
  1814.             font-size: 0.95rem;
  1815.           }
  1816.           .pro-card ul li {
  1817.             display: flex;
  1818.             gap: 10px;
  1819.             align-items: center;
  1820.             margin-bottom: 0.6rem;
  1821.           }
  1822.           .pro-card ul li i {
  1823.             color: #41a2aa;
  1824.           }
  1825.           .pro-card__badge {
  1826.             font-size: 0.75rem;
  1827.             text-transform: uppercase;
  1828.             letter-spacing: 0.08em;
  1829.             font-weight: 700;
  1830.             margin-bottom: 1rem;
  1831.             display: inline-flex;
  1832.             align-items: center;
  1833.             gap: 4px;
  1834.           }
  1835.           .pro-card--featured {
  1836.             border: 2px solid rgba(65,162,170,0.2);
  1837.             background: linear-gradient(135deg, #ffffff 0%, #f8fbff 100%);
  1838.           }
  1839.           .pro-card__badge--featured {
  1840.             background: #fde2d6;
  1841.             color: #c15f29;
  1842.             padding: 0.35rem 0.9rem;
  1843.             border-radius: 999px;
  1844.           }
  1845.           .pro-offers__foot {
  1846.             font-size: 0.95rem;
  1847.             color: #4b596b;
  1848.             font-weight: 500;
  1849.           }
  1850.         </style>
  1851.           <!-- ======= About =======-->
  1852.         <section class=\"about__v4 section\" id=\"about\" style=\"padding: 100px 0;
  1853.     scroll-margin-top: 100px;\">
  1854.         <div class=\"container\">
  1855.     <div class=\"text-center mb-4\">
  1856.       <span class=\"subtitle text-uppercase mb-3 text-center tagSection\" data-aos=\"fade-up\" data-aos-delay=\"0\">
  1857. Et si vous retrouviez l’un des services historiques de 5sur5, repensé pour 2025 ?    </span>
  1858.       <h2 class=\"mb-2\" data-aos=\"fade-up\" data-aos-delay=\"50\">
  1859.  La Boîte Vocale revient, plus simple, plus puissante, et entièrement intégrée à vos séjours    </h2>
  1860.       <p class=\"text-muted mb-3\" data-aos=\"fade-up\" data-aos-delay=\"100\">
  1861. Permettez aux familles de rester connectées au quotidien, grâce à une boîte vocale pensée pour rassurer sans solliciter. Simple, rapide et fluide.
  1862.    <br>  </p>
  1863.       
  1864.           <div class=\"container my-5\">
  1865.             <div class=\"row\">
  1866.             
  1867.               <div class=\"col-md-6 order-md-2\">
  1868.                   <span class=\"subtitle text-uppercase mb-3\" data-aos=\"fade-up\" data-aos-delay=\"0\">Service unique en France</span>
  1869.                     <h2 class=\"mb-4\" data-aos=\"fade-up\" data-aos-delay=\"100\">La boîte vocale 5sur5 : vos messages, écoutés tout de suite</h2>
  1870.        
  1871.                 <div class=\"row justify-content-end\">
  1872.                   <div class=\"col-md-11 mb-4 mb-md-0\">
  1873.                              <div data-aos=\"fade-up\" data-aos-delay=\"200\">
  1874.                       <p>
  1875.                       
  1876.                      La Boîte Vocale 5sur5 fonctionne immédiatement : nous prenons en charge toute l’installation, la configuration et le support. 
  1877. Chaque message vocal déclenche automatiquement un appel aux parents créant un lien direct  sans perturbation .
  1878.  Aucune action ni intervention n’est requise de votre part.  </p>
  1879.                     </div>
  1880.                     <h4 class=\"small fw-bold mt-4 mb-3\" data-aos=\"fade-up\" data-aos-delay=\"300\">La voix est bien plus consultée qu'un SMS/mail.</h4>
  1881.                     <ul class=\"d-flex flex-row flex-wrap list-unstyled gap-3 features\" data-aos=\"fade-up\" data-aos-delay=\"400\">
  1882.                       <li class=\"d-flex align-items-center gap-2\"><span class=\"icon rounded-circle text-center\"><i class=\"bi bi-check\"></i></span><span class=\"text\">–70% d’appels entrants</span></li>
  1883.                       <li class=\"d-flex align-items-center gap-2\"><span class=\"icon rounded-circle text-center\"><i class=\"bi bi-check\"></i></span><span class=\"text\">moins de charges pour les animateurs</span></li>
  1884.                       <li class=\"d-flex align-items-center gap-2\"><span class=\"icon rounded-circle text-center\"><i class=\"bi bi-check\"></i></span><span class=\"text\">parents rassurés sans effort</span></li>
  1885.                       <li class=\"d-flex align-items-center gap-2\"><span class=\"icon rounded-circle text-center\"><i class=\"bi bi-check\"></i></span><span class=\"text\">illimitée</span></li>
  1886.                     </ul>
  1887.                         <a  class=\"btn btn-lg btn-primary px-4 w-100 w-sm-auto\" style=\"background:color-mix(in srgb, var(--bs-secondary), transparent 70%);color:#41a2aa\"
  1888.                href=\"";
  1889.         // line 1857
  1890.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("boite_vocale");
  1891.         yield "\">
  1892.             Commander une boite vocale
  1893.             <svg class=\"ms-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">
  1894.               <path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path>
  1895.             </svg>
  1896.           </a>
  1897.                   </div>
  1898.                 </div>
  1899.               </div>
  1900.               <div class=\"col-md-6\"> 
  1901.                 <div class=\"img-wrap position-relative\">
  1902.                   <img class=\"img-fluid rounded-4\" src=\"";
  1903.         // line 1868
  1904.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/imagesAccueil/feature.png"), "html"nulltrue);
  1905.         yield "\" alt=\"Sécurité 5sur5séjour\" data-aos=\"fade-up\" data-aos-delay=\"0\" style=\"width: 100%; height: 300px; object-fit: cover;\">
  1906.                   <div class=\"mission-statement p-4 rounded-4 d-flex gap-4\" data-aos=\"fade-up\" data-aos-delay=\"100\">
  1907.                     <div class=\"mission-icon text-center rounded-circle\"><i class=\"bi bi-lightbulb fs-4\"></i></div>
  1908.                     <div>
  1909.                       <h3 class=\"text-uppercase fw-bold\">Notre mission</h3>
  1910.                       <p class=\"fs-5 mb-0\">Notre mission est de fournir aux structures une communication simple, fiable et professionnelle pour rassurer toutes les familles..</p>
  1911.                     </div>
  1912.                   </div>
  1913.                 </div>
  1914.               </div>
  1915.             </div>
  1916.           </div>
  1917.         </section>
  1918.         <!-- End About-->
  1919.         <!-- ======= How it works =======-->
  1920.         <section class=\"section howitworks__v1\" id=\"how-it-works\">
  1921.           <div class=\"container\">
  1922.             <div class=\"row mb-5\">
  1923.               <div class=\"col-md-6 text-center mx-auto\">
  1924.                 <span class=\"subtitle text-uppercase mb-3\" data-aos=\"fade-up\" data-aos-delay=\"0\">Comment ça marche</span>
  1925.                 <h2 data-aos=\"fade-up\" data-aos-delay=\"100\">Simple pour vous, magique pour les familles</h2>
  1926.                 <p data-aos=\"fade-up\" data-aos-delay=\"200\">Une plateforme complète qui centralise contenus et communications, pour partager le séjour avec les familles en toute simplicité, sans surcharge pour les équipes.</p>
  1927.               </div>
  1928.             </div>
  1929.             <div class=\"row g-md-5\">
  1930.               <div class=\"col-md-6 col-lg-3\">
  1931.                 <div class=\"step-card text-center h-100 d-flex flex-column justify-content-start position-relative\" data-aos=\"fade-up\" data-aos-delay=\"0\">
  1932.                   <div data-aos=\"fade-right\" data-aos-delay=\"500\">
  1933.                     <img class=\"arch-line\" src=\"";
  1934.         // line 1897
  1935.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/imagesAccueil/arch-line.png"), "html"nulltrue);
  1936.         yield "\" alt=\"Flèche animation\">
  1937.                   </div>
  1938.                   <span class=\"step-number rounded-circle text-center fw-bold mb-5 mx-auto\">1</span>
  1939.                   <div>
  1940.                     <h3 class=\"fs-5 mb-4\">Créez l'espace séjour</h3>
  1941.                     <p>Créez votre séjour en quelques clics… ou confiez-nous l'import de plusieurs séjours,<strong> on s'occupe de tout.</strong></p>
  1942.                   </div>
  1943.                 </div>
  1944.               </div>
  1945.               <div class=\"col-md-6 col-lg-3\" data-aos=\"fade-up\" data-aos-delay=\"600\">
  1946.                 <div class=\"step-card reverse text-center h-100 d-flex flex-column justify-content-start position-relative\">
  1947.                   <div data-aos=\"fade-right\" data-aos-delay=\"1100\">
  1948.                     <img class=\"arch-line reverse\" src=\"";
  1949.         // line 1909
  1950.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/imagesAccueil/arch-line-reverse.png"), "html"nulltrue);
  1951.         yield "\" alt=\"Flèche animation\">
  1952.                   </div>
  1953.                   <span class=\"step-number rounded-circle text-center fw-bold mb-5 mx-auto\">2</span>
  1954.                   <h3 class=\"fs-5 mb-4\">Invitez les familles</h3>
  1955.                   <p>Envoyez le code de séjour aux familles pour qu'ils rejoignent l'espace séjour. </p>
  1956.                 </div>
  1957.               </div>
  1958.               <div class=\"col-md-6 col-lg-3\" data-aos=\"fade-up\" data-aos-delay=\"1200\">
  1959.                 <div class=\"step-card text-center h-100 d-flex flex-column justify-content-start position-relative\">
  1960.                   <div data-aos=\"fade-right\" data-aos-delay=\"1700\">
  1961.                     <img class=\"arch-line\" src=\"";
  1962.         // line 1919
  1963.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/imagesAccueil/arch-line.png"), "html"nulltrue);
  1964.         yield "\" alt=\"Flèche animation\">
  1965.                   </div>
  1966.                   <span class=\"step-number rounded-circle text-center fw-bold mb-5 mx-auto\">3</span>
  1967.                   <h3 class=\"fs-5 mb-4\">Publiez en 2 clics</h3>
  1968.                   <p>Diffusez vos photos, vidéos et messages vocaux <strong>en toute simplicité.</strong></p>
  1969.                 </div>
  1970.               </div>
  1971.               <div class=\"col-md-6 col-lg-3\" data-aos=\"fade-up\" data-aos-delay=\"1800\">
  1972.                 <div class=\"step-card last text-center h-100 d-flex flex-column justify-content-start position-relative\">
  1973.                   <span class=\"step-number rounded-circle text-center fw-bold mb-5 mx-auto\">4</span>
  1974.                   <div>
  1975.                     <h3 class=\"fs-5 mb-4\">Bilan & archive</h3>
  1976.                     <p>À la fin du séjour, accédez à un bilan complet avec statistiques, et proposez aux familles des produits souvenir personnalisés.</p>
  1977.                   </div>
  1978.                 </div>
  1979.               </div>
  1980.             </div>
  1981.           </div>
  1982.         </section>
  1983.         <!-- End How it works-->
  1984.         
  1985.         <!-- ======= Pricing =======-->
  1986.      
  1987. <section class=\"py-5 bg-light d-none\" data-aos=\"fade-up\" data-aos-delay=\"50\">
  1988.   <div class=\"container text-center\" style=\"display:none\">
  1989.     <span class=\"subtitle text-uppercase mb-2 text-center tagSection\">Séjour ponctuel</span>
  1990.     <h2 class=\"mb-3\">Un séjour simple, tout compris</h2>
  1991.     <p class=\"text-muted mb-4 mx-auto\" style=\"max-width: 700px;\">
  1992.       Vous organisez un seul séjour dans l’année ?  
  1993.       5sur5Séjour vous permet de partager photos, vidéos et messages vocaux avec les familles  
  1994.       sans abonnement ni engagement.
  1995.     </p>
  1996.     <div class=\"p-5 bg-white shadow-sm rounded-4 mx-auto\" style=\"max-width: 600px;\">
  1997.       <div class=\"display-6 fw-semibold mb-1\" style=\"color: #41a2aa;\">
  1998.         <i class=\"bi bi-building-check\"></i> Prise en charge par la structure
  1999.       </div>
  2000.       <div class=\"text-muted mb-3 small\">
  2001.         Boîte vocale incluse · Tarif préférentiel partenaire
  2002.       </div>
  2003.       <ul class=\"list-unstyled text-start d-inline-block mb-4\">
  2004.         <li>✅ Accès complet à la plateforme pendant 60 jours</li>
  2005.         <li>✅ Galerie <strong>photos & vidéos</strong> sécurisée</li>
  2006.        
  2007.         <li>✅ Consentements <strong>RGPD</strong> hébergés en France</li>
  2008.         <li>➡️ Ajouter la Boîte Vocale pour appeler automatiquement les parents après chaque message <li>
  2009.       </ul>
  2010.       <a href=\"";
  2011.         // line 1966
  2012.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("app_creation_simple_creer");
  2013.         yield "\" class=\"btn btn-primary px-4 py-2\">
  2014.         <i class=\"bi bi-calculator\"></i> Obtenir un devis
  2015.       </a>
  2016.       <p class=\"text-muted small mt-3\">Idéal pour un premier usage ou un séjour unique.</p>
  2017.     </div>
  2018.   </div>
  2019. </section>
  2020.   
  2021. <!-- BANDEAU CTA FINAL -->
  2022. <section class=\"py-5\">
  2023.   <div class=\"container\">
  2024.     <div class=\"cta-section p-4 p-md-5 text-center\" data-aos=\"fade-up\">
  2025.       <h3 class=\"fw-bold mb-2\">Prêt à gagner du temps et rassurer 100&nbsp;% des familles&nbsp;?</h3>
  2026.       <p class=\"text-muted mb-4\">Choisissez votre pack — on vous met en place en 24&nbsp;h, et on vous accompagne pas à pas.</p>
  2027.       <div class=\"d-flex flex-wrap justify-content-center gap-3\">
  2028.         <a href=\"";
  2029.         // line 1985
  2030.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("app_creation_simple_creer");
  2031.         yield "\"
  2032.            class=\"btn btn-outline-primary btn-lg px-4\">
  2033.           <i class=\"bi bi-plus-circle me-2\"></i>Créer un séjour simple
  2034.         </a>
  2035.         <a href=\"";
  2036.         // line 1990
  2037.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("boite_vocale");
  2038.         yield "\"
  2039.            class=\"btn btn-secondary btn-lg px-4\" >
  2040.           <i class=\"bi bi-telephone me-2\"></i>Commander boîte vocale
  2041.         </a>
  2042.         <a href=\"";
  2043.         // line 1995
  2044.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("pack_annuel_partenaires");
  2045.         yield "\" style=\"background-color: #F09E7A; border-color: #F09E7A; color: #fff;\"
  2046.            class=\"btn btn-primary btn-lg px-4\">
  2047.           <i class=\"bi bi-rocket-takeoff me-2\"></i>Prendre le pack annuel
  2048.         </a>
  2049.       </div>
  2050.       <div class=\"mt-3 small \">
  2051.         <i class=\"bi bi-shield-lock me-1\"></i>Paiement sécurisé • <i class=\"bi bi-check2-circle ms-1 me-1\"></i>Mise en place totale par l'équipe 5sur5
  2052.       </div>
  2053.     </div>
  2054.   </div>
  2055. </section>
  2056.     
  2057.         <!-- ======= Stats =======-->
  2058.         <section class=\"stats__v3 section\">
  2059.           <div class=\"container\">
  2060.             <div class=\"row\">
  2061.               <div class=\"col-12\">
  2062.                 <div class=\"d-flex flex-wrap content rounded-4\" data-aos=\"fade-up\" data-aos-delay=\"0\">
  2063.                   <div class=\"rounded-borders\">
  2064.                     <div class=\"rounded-border-1\"></div>
  2065.                     <div class=\"rounded-border-2\"></div>
  2066.                     <div class=\"rounded-border-3\"></div>
  2067.                   </div>
  2068.                   <div class=\"col-12 col-sm-6 col-md-4 mb-4 mb-md-0 text-center\" data-aos=\"fade-up\" data-aos-delay=\"80\">
  2069.                     <div class=\"stat-item\">
  2070.                       <h3 class=\"fs-1 fw-bold\">+<span class=\"purecounter\" data-purecounter-start=\"0\" data-purecounter-end=\"90\" data-purecounter-duration=\"2\">0</span><span>%</span></h3>
  2071.                       <p class=\"mb-0\">des familles connectées dès J1
  2072. Invitation simple, lien sécurisé</p>
  2073.                     </div>
  2074.                   </div>
  2075.                   <div class=\"col-12 col-sm-6 col-md-4 mb-4 mb-md-0 text-center\" data-aos=\"fade-up\" data-aos-delay=\"200\">
  2076.                     <div class=\"stat-item\">
  2077.                       <h3 class=\"fs-1 fw-bold\"> > <span class=\"purecounter\" data-purecounter-start=\"0\" data-purecounter-end=\"370\" data-purecounter-duration=\"2\">0</span><span>k+</span></h3>
  2078.                       <p class=\"mb-0\">enfants suivis
  2079. Confiance des établissements & associations</p>
  2080.                     </div>
  2081.                   </div>
  2082.                   <div class=\"col-12 col-sm-6 col-md-4 mb-4 mb-md-0 text-center\" data-aos=\"fade-up\" data-aos-delay=\"300\">
  2083.                     <div class=\"stat-item\">
  2084.                       <h3 class=\"fs-1 fw-bold\"><span class=\"purecounter\" data-purecounter-start=\"0\" data-purecounter-end=\"20\" data-purecounter-duration=\"2\">0</span><span>K+</span></h3>
  2085.                       <p class=\"mb-0\">séjours accompagnés
  2086. Partout en France et à l'étranger</p>
  2087.                     </div>
  2088.                   </div>
  2089.                 </div>
  2090.               </div>
  2091.             </div>
  2092.           </div>
  2093.         </section>
  2094.         <!-- End Stats-->
  2095.         
  2096.         <!-- ======= Services =======-->
  2097.        <section class=\"section services__v3\" id=\"souvenirs\">
  2098.           <div class=\"container\">
  2099.             <div class=\"row mb-5\">
  2100.               <div class=\"col-md-8 mx-auto text-center\">
  2101.         <span class=\"subtitle text-uppercase mb-2\" data-aos=\"fade-up\" data-aos-delay=\"0\">Produits 5sur5</span>
  2102.         <h2 class=\"mb-2\" data-aos=\"fade-up\" data-aos-delay=\"100\">
  2103.           Souvenirs premium, <span class=\"whitespace-nowrap\">fabriqués en France</span> 
  2104.         </h2>
  2105.         <p class=\"text-muted\" data-aos=\"fade-up\" data-aos-delay=\"150\">
  2106.           Offrez aux familles un souvenir durable du séjour. Qualité premium, expédition rapide, et
  2107.           possibilité d'<strong>achat groupé –20%</strong> pour les établissements.
  2108.         </p>
  2109.               </div>
  2110.             </div>
  2111.             <div class=\"row g-4\">
  2112.       <!-- Carte 1 : Albums -->
  2113.               <div class=\"col-md-6 col-lg-4\" data-aos=\"fade-up\" data-aos-delay=\"0\">
  2114.                 <div class=\"service-card p-4 rounded-4 h-100 d-flex flex-column justify-content-between gap-5\">
  2115.                   <div>
  2116.             <figure class=\"product-visual\" style=\"\"  width: 100%;
  2117.   height: 200px;                /* hauteur demandée */
  2118.   display: flex;
  2119.   align-items: center;
  2120.   justify-content: center;      /* image centrée */
  2121.   background: rgba(47,167,163,.06);
  2122.   border-radius: 16px;
  2123.   overflow: hidden;
  2124.   margin-bottom: 16px;>
  2125.         <img style=\" max-width: 100%;
  2126.   max-height: 100%;
  2127.   object-fit: contain;          /* garde le ratio, pas de crop */
  2128.   display: block;\"
  2129.           src=\"https://5sur5sejour.com/images/produit/LivreSouvenir5sur5-1.jpg\"
  2130.           alt=\"Album photo premium 5sur5\"
  2131.           width=\"400\" height=\"300\" loading=\"lazy\" decoding=\"async\"
  2132.           sizes=\"(min-width:992px) 330px, 90vw\">
  2133.       </figure>
  2134.             
  2135.             <h3 class=\"fs-5 mb-3\">Album photo premium</h3>
  2136.             <p class=\"mb-4\">
  2137.               Le souvenir incontournable du séjour. Qualité soignée, fabrication locale en France et
  2138.               <strong>livraison gratuite</strong> pour les familles.
  2139.             </p>
  2140.                   </div>
  2141.           <a class=\"special-link d-inline-flex gap-2 align-items-center text-decoration-none\" href=\"https://futur.5sur5sejour.fr/Accueil5sur5/album/Album%20photos\" target=\"_blank\">
  2142.                     <span class=\"icons\"><i class=\"icon-1 bi bi-arrow-right-short\"></i><i class=\"icon-2 bi bi-arrow-right-short\"></i></span>
  2143.             <span>Voir les modèles d'albums</span>
  2144.                   </a>
  2145.                 </div>
  2146.               </div>
  2147.       <!-- Carte 2 : Tirages & souvenirs -->
  2148.               <div class=\"col-md-6 col-lg-4\" data-aos=\"fade-up\" data-aos-delay=\"200\">
  2149.                 <div class=\"service-card p-4 rounded-4 h-100 d-flex flex-column justify-content-between gap-5\">
  2150.                   <div>
  2151.            <figure class=\"product-visual\" style=\"\"  width: 100%;
  2152.   height: 200px;                /* hauteur demandée */
  2153.   display: flex;
  2154.   align-items: center;
  2155.   justify-content: center;      /* image centrée */
  2156.   background: rgba(47,167,163,.06);
  2157.   border-radius: 16px;
  2158.   overflow: hidden;
  2159.   margin-bottom: 16px;>
  2160.         <img style=\" max-width: 100%;
  2161.   max-height: 100%;
  2162.   object-fit: contain;          /* garde le ratio, pas de crop */
  2163.   display: block;\"
  2164.           src=\"https://5sur5sejour.com/images/produit/PochettePhoto5sur5-2.jpg\"
  2165.           alt=\"Album photo premium 5sur5\"
  2166.           width=\"400\" height=\"300\" loading=\"lazy\" decoding=\"async\"
  2167.           sizes=\"(min-width:992px) 330px, 90vw\">
  2168.       </figure>
  2169.             
  2170.            
  2171.             <h3 class=\"fs-5 mb-3\">Tirages & produits souvenirs</h3>
  2172.             <p class=\"mb-4\">
  2173.               Tirages photo et articles souvenirs 5sur5 pour prolonger l'expérience du séjour.
  2174.               Qualité premium, <strong>fabriqués en France</strong>.
  2175.             </p>
  2176.                   </div>
  2177.           <a class=\"special-link d-inline-flex gap-2 align-items-center text-decoration-none\" href=\"";
  2178.         // line 2130
  2179.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("boutique5sur5_Souvenir");
  2180.         yield "\">
  2181.                     <span class=\"icons\"><i class=\"icon-1 bi bi-arrow-right-short\"></i><i class=\"icon-2 bi bi-arrow-right-short\"></i></span>
  2182.             <span>Découvrir les souvenirs</span>
  2183.                   </a>
  2184.                 </div>
  2185.               </div>
  2186.       <!-- Carte 3 : Achat groupé -20% -->
  2187.               <div class=\"col-md-6 col-lg-4\" data-aos=\"fade-up\" data-aos-delay=\"300\">
  2188.                 <div class=\"service-card p-4 rounded-4 h-100 d-flex flex-column justify-content-between gap-5\">
  2189.                   <div>
  2190.                <figure class=\"product-visual\" style=\"\"  width: 100%;
  2191.   height: 200px;                /* hauteur demandée */
  2192.   display: flex;
  2193.   align-items: center;
  2194.   justify-content: center;      /* image centrée */
  2195.   background: rgba(47,167,163,.06);
  2196.   border-radius: 16px;
  2197.   overflow: hidden;
  2198.   margin-bottom: 16px;>
  2199.         <img style=\" max-width: 100%;
  2200.   max-height: 100%;
  2201.   object-fit: contain;          /* garde le ratio, pas de crop */
  2202.   display: block;\"
  2203.           src=\"https://5sur5sejour.com/images/produit/Album5sur5-3.jpg\"
  2204.           alt=\"Album photo premium 5sur5\"
  2205.           width=\"400\" height=\"300\" loading=\"lazy\" decoding=\"async\"
  2206.           sizes=\"(min-width:992px) 330px, 90vw\">
  2207.       </figure>
  2208.            
  2209.             <h3 class=\"fs-5 mb-3\">Achat groupé établissement –20%</h3>
  2210.             <p class=\"mb-4\">
  2211.               Activez l'option \"achat groupé\" pour la classe/le séjour et bénéficiez de
  2212.               <strong>–20% de réduction</strong> avec <strong>livraison gratuite</strong>. Simple à organiser, apprécié des familles.
  2213.             </p>
  2214.                   </div>
  2215.           <a  data-bs-toggle=\"modal\"
  2216.    data-bs-target=\"#groupBuyLite\"
  2217.    data-action=\"group_buy_open\" class=\"special-link d-inline-flex gap-2 align-items-center text-decoration-none\" href=\"#achat-groupe\">
  2218.                     <span class=\"icons\"><i class=\"icon-1 bi bi-arrow-right-short\"></i><i class=\"icon-2 bi bi-arrow-right-short\"></i></span>
  2219.             <span>Activer l'achat groupé</span>
  2220.                   </a>
  2221.                 </div>
  2222.               </div>
  2223.             </div>
  2224.     <!-- Micro-barre de réassurance (discrète) -->
  2225.     <div class=\"text-center text-muted small mt-4\">
  2226.       Fabriqué en France · Livraison gratuite · Qualité premium 5sur5 · Possibilité de <strong>partage des bénéfices</strong> pour les partenaires
  2227.     </div>
  2228.   </div>
  2229. </section>
  2230.       
  2231.         <!-- ======= Contact =======-->
  2232.         <section class=\"section contact__v2\" id=\"contact\">
  2233.           <div class=\"container\">
  2234.             <div class=\"row mb-5\">
  2235.               <div class=\"col-md-6 col-lg-7 mx-auto text-center\">
  2236.                 <span class=\"subtitle text-uppercase mb-3\" data-aos=\"fade-up\" data-aos-delay=\"0\">Contact</span>
  2237.                 <h2 class=\"h2 fw-bold mb-3\" data-aos=\"fade-up\" data-aos-delay=\"0\">Nous contacter</h2>
  2238.                 <p data-aos=\"fade-up\" data-aos-delay=\"100\">Nous sommes à votre écoute pour répondre à vos questions et vous aider à mieux comprendre nos services.</p>
  2239.               </div>
  2240.             </div>
  2241.             <div class=\"row\">
  2242.               <div class=\"col-md-6\">
  2243.                 <div class=\"d-flex gap-5 flex-column\">
  2244.                   <div class=\"d-flex align-items-start gap-3\" data-aos=\"fade-up\" data-aos-delay=\"0\">
  2245.                     <div class=\"icon d-block\"><i class=\"bi bi-telephone\"></i></div>
  2246.                     <span>
  2247.                       <span class=\"d-block\">Téléphone</span>
  2248.                       <strong>05 36 28 29 30</strong>
  2249.                     </span>
  2250.                   </div>
  2251.                   <div class=\"d-flex align-items-start gap-3\" data-aos=\"fade-up\" data-aos-delay=\"100\">
  2252.                     <div class=\"icon d-block\"><i class=\"bi bi-send\"></i></div>
  2253.                     <span>
  2254.                       <span class=\"d-block\">Email</span>
  2255.                       <strong>contact@5sur5sejour.com</strong>
  2256.                     </span>
  2257.                   </div>
  2258.                   <div class=\"d-flex align-items-start gap-3\" data-aos=\"fade-up\" data-aos-delay=\"200\">
  2259.                     <div class=\"icon d-block\"><i class=\"bi bi-geo-alt\"></i></div>
  2260.                     <span>
  2261.                       <span class=\"d-block\">Adresse</span>
  2262.                       <address class=\"fw-bold\">5sur5séjour<br>France</address>
  2263.                     </span>
  2264.                   </div>
  2265.                 </div>
  2266.               </div>
  2267.               <div class=\"col-md-6\">
  2268.                 <div class=\"form-wrapper\" data-aos=\"fade-up\" data-aos-delay=\"300\">
  2269.                   <div class=\"text-center mb-4\">
  2270.                     <a href=\"#\" class=\"btn btn-primary btn-lg\" data-action=\"cta_expert\" data-pack=\"contact\">
  2271.                       Parler à un expert maintenant
  2272.                     </a>
  2273.                     <p class=\"text-muted mt-3 mb-0\">Ou utilisez le formulaire ci-dessous pour nous laisser un message</p>
  2274.                   </div>
  2275.                   <form id=\"contactFormSection\" action=\"";
  2276.         // line 2229
  2277.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("app_contact");
  2278.         yield "\" method=\"POST\">
  2279.                     <div class=\"row gap-3 mb-3\">
  2280.                       <div class=\"col-md-12\">
  2281.                         <label class=\"mb-2\" for=\"name\">Nom</label>
  2282.                         <input class=\"form-control\" id=\"name\" type=\"text\" name=\"name\" required=\"\">
  2283.                       </div>
  2284.                       <div class=\"col-md-12\">
  2285.                         <label class=\"mb-2\" for=\"email\">Email</label>
  2286.                         <input class=\"form-control\" id=\"email\" type=\"email\" name=\"email\" required=\"\">
  2287.                       </div>
  2288.                     </div>
  2289.                     <div class=\"row gap-3 mb-3\">
  2290.                       <div class=\"col-md-12\">
  2291.                         <label class=\"mb-2\" for=\"subject\">Sujet</label>
  2292.                         <input class=\"form-control\" id=\"subject\" type=\"text\" name=\"subject\">
  2293.                       </div>
  2294.                     </div>
  2295.                     <div class=\"row gap-3 gap-md-0 mb-3\">
  2296.                       <div class=\"col-md-12\">
  2297.                         <label class=\"mb-2\" for=\"message\">Message</label>
  2298.                         <textarea class=\"form-control\" id=\"message\" name=\"message\" rows=\"5\" required=\"\"></textarea>
  2299.                       </div>
  2300.                     </div>
  2301.                     <button class=\"btn btn-primary fw-semibold\" type=\"submit\">Envoyer le message</button>
  2302.                   </form>
  2303.                   <div class=\"mt-3 d-none alert alert-success\" id=\"successMessageSection\">Message envoyé avec succès !</div>
  2304.                   <div class=\"mt-3 d-none alert alert-danger\" id=\"errorMessageSection\">Échec de l'envoi du message. Veuillez réessayer plus tard.</div>
  2305.                 </div>
  2306.               </div>
  2307.             </div>
  2308.           </div>
  2309.         </section>
  2310.         <!-- End Contact-->
  2311.         
  2312.         <!-- ======= Footer =======-->
  2313.     
  2314.         ";
  2315.         // line 2265
  2316.         yield from $this->unwrap()->yieldBlock('Footer'$context$blocks);
  2317.         // line 2268
  2318.         yield "
  2319.         <!-- End Footer-->
  2320.         
  2321.       </main>
  2322.     </div>
  2323.     
  2324.     <!-- ======= Back to Top =======-->
  2325.     <button id=\"back-to-top\"><i class=\"bi bi-arrow-up-short\"></i></button>
  2326.     <!-- End Back to top-->
  2327.     
  2328.     <!-- ======= Javascripts =======-->
  2329.     <script src=\"";
  2330.         // line 2279
  2331.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/vendors/bootstrap/bootstrap.bundle.min.js"), "html"nulltrue);
  2332.         yield "\"></script>
  2333.     <script src=\"";
  2334.         // line 2280
  2335.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/vendors/gsap/gsap.min.js"), "html"nulltrue);
  2336.         yield "\"></script>
  2337.     <script src=\"";
  2338.         // line 2281
  2339.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/vendors/imagesloaded/imagesloaded.pkgd.min.js"), "html"nulltrue);
  2340.         yield "\"></script>
  2341.     <script src=\"";
  2342.         // line 2282
  2343.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/vendors/isotope/isotope.pkgd.min.js"), "html"nulltrue);
  2344.         yield "\"></script>
  2345.     <script src=\"";
  2346.         // line 2283
  2347.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/vendors/glightbox/glightbox.min.js"), "html"nulltrue);
  2348.         yield "\"></script>
  2349.     <script src=\"";
  2350.         // line 2284
  2351.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/vendors/swiper/swiper-bundle.min.js"), "html"nulltrue);
  2352.         yield "\"></script>
  2353.     <script src=\"";
  2354.         // line 2285
  2355.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/vendors/aos/aos.js"), "html"nulltrue);
  2356.         yield "\"></script>
  2357.     <script src=\"";
  2358.         // line 2286
  2359.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/vendors/purecounter/purecounter.js"), "html"nulltrue);
  2360.         yield "\"></script>
  2361.     <script src=\"";
  2362.         // line 2287
  2363.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/js/js_nova.js"), "html"nulltrue);
  2364.         yield "\"></script>
  2365.     <script src=\"";
  2366.         // line 2288
  2367.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/js/test-animations.js"), "html"nulltrue);
  2368.         yield "\"></script>
  2369.     
  2370.     <!-- Initialize AOS -->
  2371.     <script>
  2372.       document.addEventListener('DOMContentLoaded', function() {
  2373.         console.log('DOM loaded, initializing AOS...');
  2374.         
  2375.         // Initialize AOS
  2376.         AOS.init({
  2377.           duration: 1000,
  2378.           easing: 'ease-in-out',
  2379.           once: true,
  2380.           mirror: false
  2381.         });
  2382.         
  2383.         console.log('AOS initialized');
  2384.         
  2385.         // Initialize PureCounter
  2386.         new PureCounter();
  2387.         
  2388.         // Initialize GLightbox
  2389.         const lightbox = GLightbox({
  2390.           selector: '.glightbox'
  2391.         });
  2392.         
  2393.         // Debug: Check if arch-line images are loaded
  2394.         const archLines = document.querySelectorAll('.arch-line');
  2395.         console.log('Found arch-line elements:', archLines.length);
  2396.         archLines.forEach((line, index) => {
  2397.           console.log(`Arch-line \${index + 1}:`, line.src, line.complete ? 'loaded' : 'loading...');
  2398.         });
  2399.         
  2400.         // Smooth scrolling for anchor links
  2401.         document.querySelectorAll('a[href^=\"#\"]').forEach(anchor => {
  2402.           anchor.addEventListener('click', function (e) {
  2403.             e.preventDefault();
  2404.             const target = document.querySelector(this.getAttribute('href'));
  2405.             if (target) {
  2406.               target.scrollIntoView({
  2407.                 behavior: 'smooth',
  2408.                 block: 'start'
  2409.               });
  2410.             }
  2411.           });
  2412.         });
  2413.         
  2414.         // Back to top button
  2415.         const backToTop = document.getElementById('back-to-top');
  2416.         if (backToTop) {
  2417.           window.addEventListener('scroll', function() {
  2418.             if (window.pageYOffset > 100) {
  2419.               backToTop.style.display = 'block';
  2420.             } else {
  2421.               backToTop.style.display = 'none';
  2422.             }
  2423.           });
  2424.           
  2425.           backToTop.addEventListener('click', function() {
  2426.             window.scrollTo({
  2427.               top: 0,
  2428.               behavior: 'smooth'
  2429.             });
  2430.           });
  2431.         }
  2432.         
  2433.         // Animation des flèches pour l'ancienne section
  2434.         function startArrowAnimation() {
  2435.           const arrowImg = document.querySelector('.MyImgFirstPosition');
  2436.           const lineImg = document.querySelector('.MyLineFirstPosition');
  2437.           
  2438.           if (arrowImg && lineImg) {
  2439.             // Démarrer l'animation après 1 seconde
  2440.             setTimeout(() => {
  2441.               arrowImg.classList.add('Myimg');
  2442.               lineImg.classList.add('MyLine');
  2443.             }, 1000);
  2444.           }
  2445.         }
  2446.         
  2447.         // Démarrer l'animation des flèches
  2448.         startArrowAnimation();
  2449.         
  2450.         // Slider simple (sans Owl Carousel pour l'instant)
  2451.         let currentSlide = 0;
  2452.         const slides = document.querySelectorAll('.single_slider');
  2453.         
  2454.         function showSlide(index) {
  2455.           slides.forEach((slide, i) => {
  2456.             slide.style.display = i === index ? 'flex' : 'none';
  2457.           });
  2458.         }
  2459.         
  2460.         function nextSlide() {
  2461.           currentSlide = (currentSlide + 1) % slides.length;
  2462.           showSlide(currentSlide);
  2463.         }
  2464.         
  2465.         // Initialiser le slider
  2466.         if (slides.length > 0) {
  2467.           showSlide(0);
  2468.           // Changer de slide toutes les 5 secondes
  2469.           setInterval(nextSlide, 5000);
  2470.         }
  2471.         
  2472.         // Nouveau slider functionality
  2473.         let currentHeroSlide = 0;
  2474.         const heroSlides = [
  2475.           {
  2476.             title: \"Révolutionnez la Communication\",
  2477.             description: \"Partagez vos aventures avec les familles en toute sécurité grâce à notre plateforme, agrémentée de photos, de vidéos et messages.\",
  2478.             image: \"";
  2479.         // line 2398
  2480.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/imagesAccueil/slider/child-laughing.jpg"), "html"nulltrue);
  2481.         yield "\"
  2482.           },
  2483.           {
  2484.             title: \"La plateforme qui rassure les familles\",
  2485.             description: \"Partagez vos souvenirs en toute sécurité avec des photos, vidéos et messages vocaux.\",
  2486.             image: \"";
  2487.         // line 2403
  2488.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/imagesAccueil/secure.jpg"), "html"nulltrue);
  2489.         yield "\"
  2490.           },
  2491.           {
  2492.             title: \"Messages vocaux et photos\",
  2493.             description: \"Restez connecté avec votre enfant tout au long du séjour grâce à notre technologie sécurisée.\",
  2494.             image: \"";
  2495.         // line 2408
  2496.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/imagesAccueil/slider/bg-slider.svg"), "html"nulltrue);
  2497.         yield "\"
  2498.           }
  2499.         ];
  2500.         
  2501.         function changeSlide(direction) {
  2502.           currentHeroSlide = (currentHeroSlide + direction + heroSlides.length) % heroSlides.length;
  2503.           updateHeroSlider();
  2504.         }
  2505.         
  2506.         function updateHeroSlider() {
  2507.           const titleElement = document.querySelector('.hero-slider-title');
  2508.           const descriptionElement = document.querySelector('.hero-slider-description');
  2509.           const imageElement = document.querySelector('.hero-slider-image img');
  2510.           
  2511.           if (titleElement && descriptionElement && imageElement) {
  2512.             // Animation de transition
  2513.             titleElement.style.opacity = '0';
  2514.             descriptionElement.style.opacity = '0';
  2515.             
  2516.             setTimeout(() => {
  2517.               titleElement.textContent = heroSlides[currentHeroSlide].title;
  2518.               descriptionElement.textContent = heroSlides[currentHeroSlide].description;
  2519.               imageElement.src = heroSlides[currentHeroSlide].image;
  2520.               
  2521.               titleElement.style.opacity = '1';
  2522.               descriptionElement.style.opacity = '1';
  2523.             }, 300);
  2524.           }
  2525.         }
  2526.         
  2527.         // Auto-play pour le nouveau slider
  2528.         setInterval(() => {
  2529.           changeSlide(1);
  2530.         }, 6000);
  2531.         
  2532.         // Gestion du formulaire de contact de la section contact
  2533.         const contactFormSection = document.getElementById('contactFormSection');
  2534.         const successMessageSection = document.getElementById('successMessageSection');
  2535.         const errorMessageSection = document.getElementById('errorMessageSection');
  2536.         
  2537.         if (contactFormSection) {
  2538.           contactFormSection.addEventListener('submit', function(e) {
  2539.             e.preventDefault();
  2540.             
  2541.             // Masquer les messages précédents
  2542.             successMessageSection.classList.add('d-none');
  2543.             errorMessageSection.classList.add('d-none');
  2544.             
  2545.             // Désactiver le bouton pendant l'envoi
  2546.             const submitButton = contactFormSection.querySelector('button[type=\"submit\"]');
  2547.             const originalText = submitButton.textContent;
  2548.             submitButton.textContent = 'Envoi en cours...';
  2549.             submitButton.disabled = true;
  2550.             
  2551.             // Récupérer les données du formulaire
  2552.             const formData = new FormData(contactFormSection);
  2553.             
  2554.             // Envoyer la requête AJAX
  2555.             fetch(contactFormSection.action, {
  2556.               method: 'POST',
  2557.               body: formData,
  2558.               headers: {
  2559.                 'X-Requested-With': 'XMLHttpRequest'
  2560.               }
  2561.             })
  2562.             .then(response => response.json())
  2563.             .then(data => {
  2564.               if (data.success) {
  2565.                 // Afficher le message de succès
  2566.                 successMessageSection.textContent = data.message;
  2567.                 successMessageSection.classList.remove('d-none');
  2568.                 
  2569.                 // Réinitialiser le formulaire
  2570.                 contactFormSection.reset();
  2571.               } else {
  2572.                 // Afficher le message d'erreur
  2573.                 errorMessageSection.textContent = data.message;
  2574.                 errorMessageSection.classList.remove('d-none');
  2575.               }
  2576.             })
  2577.             .catch(error => {
  2578.               console.error('Erreur:', error);
  2579.               errorMessageSection.textContent = 'Une erreur est survenue lors de l\\'envoi du message. Veuillez réessayer plus tard.';
  2580.               errorMessageSection.classList.remove('d-none');
  2581.             })
  2582.             .finally(() => {
  2583.               // Réactiver le bouton
  2584.               submitButton.textContent = originalText;
  2585.               submitButton.disabled = false;
  2586.             });
  2587.           });
  2588.         }
  2589.         
  2590.       });
  2591.     </script>
  2592.     <!-- End JavaScripts-->
  2593. <!-- MODAL CONNEXION -->
  2594. <div class=\"modal fade\" id=\"loginModal\" tabindex=\"-1\" aria-hidden=\"true\">
  2595.   <div class=\"modal-dialog modal-dialog-centered modal-lg\">
  2596.     <div class=\"modal-content rounded-4\">
  2597.       <div class=\"modal-header border-0\">
  2598.         <h5 class=\"modal-title fw-bold\">Accéder à mon espace de séjour </h5>
  2599.         <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Fermer\"></button>
  2600.       </div>
  2601.       <div class=\"modal-body p-4\">
  2602.         <div class=\"row g-4 align-items-center\">
  2603.           <div class=\"col-lg-5 text-center border-end\">
  2604.             <img src=\"/images/Accompagnateur/LogoEspaceAccom.svg\" alt=\"Espace accompagnateur\" class=\"img-fluid mb-3\" style=\"max-height: 120px;\">
  2605.             <p class=\"small text-muted mb-0\">
  2606.               Retrouvez votre séjour, publiez vos contenus et rassurez les familles en temps réel.
  2607.             </p>
  2608.           </div>
  2609.           <div class=\"col-lg-7\">
  2610.             <div class=\"titleAutre mb-3\">Vous êtes accompagnateur et disposez déjà d'un identifiant et d'un mot de passe.</div>
  2611.             <form method=\"post\" class=\"fomru\" action=\"";
  2612.         // line 2523
  2613.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("app_back_Acommpa");
  2614.         yield "\">
  2615.               <div class=\"form-group d-grid gap-3\">
  2616.                 <input type=\"text\" value=\"\" name=\"email\" id=\"modalInputEmail\" class=\"form-control\" placeholder=\" Code séjour de l'accompagnateur * \">
  2617.                 <input type=\"password\" name=\"password\" id=\"modalInputPassword\" class=\"form-control\" placeholder=\"mot de passe fourni à l'organisme * \">
  2618.                 <input type=\"hidden\" name=\"_csrf_token\" value=\"";
  2619.         // line 2527
  2620.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->env->getRuntime('Symfony\Component\Form\FormRenderer')->renderCsrfToken("authenticate"), "html"nulltrue);
  2621.         yield "\">
  2622.                 <div class=\"description\"><a href=\"#\" data-bs-toggle=\"modal\" data-bs-target=\"#mdpoblier\" style=\"color:#f09e7a;\">Vous avez oublié votre mot de passe</a></div>
  2623.               </div>
  2624.               <div class=\"d-grid mt-4\">
  2625.                 <button class=\"btn btn-primary rounded-3\" type=\"submit\">Je me connecte</button>
  2626.               </div>
  2627.             </form>
  2628.           </div>
  2629.         </div>
  2630.       </div>
  2631.     </div>
  2632.   </div>
  2633. </div>
  2634. <!-- MODAL MOT DE PASSE OUBLIÉ -->
  2635. <div class=\"modal fade\" id=\"mdpoblier\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"exampleModalLabel\" aria-hidden=\"true\">
  2636.   <div class=\"modal-dialog\" role=\"document\">
  2637.     <div class=\"modal-content\" style=\"border-radius: 0px;top: 50px;width: 55%;margin: auto;min-width: 270px;\">
  2638.       <div class=\"modal-header\">
  2639.         <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">
  2640.           <img src=\"";
  2641.         // line 2547
  2642.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("images/Groupe_526.svg"), "html"nulltrue);
  2643.         yield "\">
  2644.         </button>
  2645.       </div>
  2646.       <div class=\"modal-body\" style=\"text-align:center\">
  2647.         <h5 class=\"modal-title\" id=\"exampleModalLabel\" style=\"margin-left:15px; margin-bottom: 15px\">
  2648.           <img class=\"imageLogo2\" style=\"width: 58% !important;\" src=\"";
  2649.         // line 2552
  2650.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/imagesAccueil/logoHeader.svg"), "html"nulltrue);
  2651.         yield "\">
  2652.         </h5>
  2653.         <div class=\"row no-margin\" style=\"padding-bottom: 40px;\">
  2654.           <div class=\"col-md-12 col-sm-12 col-xs-12 descTitre\">
  2655.             <strong>Vous avez oublié votre mot de passe ? Contactez notre équipe 5sur5sejour au 05 36 28 29 30.</strong>
  2656.           </div>
  2657.         </div>
  2658.       </div>
  2659.     </div>
  2660.   </div>
  2661. </div>
  2662. <!-- MODAL CONNEXION PARTENAIRE -->
  2663. <div class=\"modal fade\" id=\"partnerLoginModal\" tabindex=\"-1\" aria-hidden=\"true\">
  2664.   <div class=\"modal-dialog modal-dialog-centered modal-lg\">
  2665.     <div class=\"modal-content rounded-4\">
  2666.       <div class=\"modal-header border-0\">
  2667.         <h5 class=\"modal-title fw-bold\">Espace Partenaire - Connexion</h5>
  2668.         <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Fermer\"></button>
  2669.       </div>
  2670.       <div class=\"modal-body p-4\">
  2671.         <div class=\"row g-4 align-items-center\">
  2672.           <div class=\"col-lg-5 text-center border-end\">
  2673.             <img src=\"";
  2674.         // line 2575
  2675.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['Symfony\Bridge\Twig\Extension\AssetExtension']->getAssetUrl("Accueil/imagesAccueil/espcPart.svg"), "html"nulltrue);
  2676.         yield "\" alt=\"Espace partenaire\" class=\"img-fluid mb-3\" style=\"max-height: 120px;\">
  2677.             <p class=\"small text-muted mb-0\">
  2678.               Créez et gérez tous vos séjours depuis un espace dédié, avec un service client sur mesure et des outils pensés pour vous.
  2679.             </p>
  2680.           </div>
  2681.           <div class=\"col-lg-7\">
  2682.             <div class=\"titleAutre mb-3\">Vous êtes partenaire</div>
  2683.             <div class=\"sous-titrecnx mb-3\">Bienvenue dans votre espace 5 sur 5 séjour</div>
  2684.             <div class=\"descriptioncnx mb-4\">Entrez votre identifiant et votre mot de passe afin d'entrer dans votre plateforme d'administration</div>
  2685.             
  2686.             <form method=\"post\" action=\"";
  2687.         // line 2585
  2688.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("app_login_back_Partenaire");
  2689.         yield "\">
  2690.               <div class=\"form-group d-grid gap-3\">
  2691.                 <input type=\"text\" name=\"email\" id=\"partnerInputEmail\" class=\"form-control\" placeholder=\"Mail partenaire\" value=\"\">
  2692.                 <input type=\"password\" name=\"password\" id=\"partnerInputPassword\" class=\"form-control\" placeholder=\"Mot de passe\">
  2693.                 <input type=\"hidden\" name=\"_csrf_token\" value=\"";
  2694.         // line 2589
  2695.         yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->env->getRuntime('Symfony\Component\Form\FormRenderer')->renderCsrfToken("authenticate"), "html"nulltrue);
  2696.         yield "\">
  2697.                 <div class=\"description\">
  2698.                   <a href=\"/forgotPasspatenaire\" style=\"color:#f09e7a;\">Vous avez oublié votre mot de passe</a>
  2699.                 </div>
  2700.               </div>
  2701.               <div class=\"d-grid mt-4\">
  2702.                 <button class=\"btn btn-primary rounded-3\" type=\"submit\">Je me connecte</button>
  2703.               </div>
  2704.             </form>
  2705.           </div>
  2706.         </div>
  2707.       </div>
  2708.     </div>
  2709.   </div>
  2710. </div>
  2711. <!-- Modale ultra-légère -->
  2712. <div class=\"modal fade\" id=\"groupBuyLite\" tabindex=\"-1\" aria-hidden=\"true\">
  2713.   <div class=\"modal-dialog modal-dialog-centered\">
  2714.     <div class=\"modal-content rounded-4\">
  2715.       <div class=\"modal-header\">
  2716.         <h5 class=\"modal-title\">Achat groupé — jusqu’à −20%</h5>
  2717.         <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Fermer\"></button>
  2718.       </div>
  2719.       <div class=\"modal-body\">
  2720.         <ul class=\"small text-muted ps-3\">
  2721.           <li>Remise automatique selon le volume (ex. −10% dès 5, −15% dès 10, −20% dès 20).</li>
  2722.           <li>Applicable sur albums, tirages et packs.</li>
  2723.           <li>La structure peut prendre en charge Parent Premium (tarif préférentiel, voix illimitée incluse).</li>
  2724.         </ul>
  2725.         <div class=\"alert alert-info small mb-0\">
  2726.           <i class=\"bi bi-info-circle me-1\"></i>
  2727.           La remise sera affichée sur la boutique. Munissez-vous du <strong>code séjour</strong> si demandé.
  2728.         </div>
  2729.       </div>
  2730.       <div class=\"modal-footer d-block\">
  2731.         <div class=\"d-grid d-sm-flex gap-2\">
  2732.           <!-- Redirection directe (aucun champ) -->
  2733.           <a class=\"btn btn-primary\"
  2734.              href=\"/boutique?groupbuy=1&utm_source=site&utm_medium=modal&utm_campaign=group_buy\"
  2735.              data-action=\"group_buy_continue\">
  2736.             Aller à la boutique
  2737.           </a>
  2738.           <button class=\"btn btn-outline-secondary\" data-bs-dismiss=\"modal\">Plus tard</button>
  2739.         </div>
  2740.         <p class=\"small text-muted mt-2 mb-0\">
  2741.           Besoin d’aide ? <a href=\"#\" data-action=\"cta_expert\">Parler à un expert</a>
  2742.         </p>
  2743.       </div>
  2744.     </div>
  2745.   </div>
  2746. </div>
  2747. <!-- MODALE CHOIX DE PAIEMENT -->
  2748. <div class=\"modal fade\" id=\"checkoutChoiceModal\" tabindex=\"-1\" aria-labelledby=\"checkoutChoiceModalLabel\" aria-hidden=\"true\" data-bs-backdrop=\"static\" data-bs-keyboard=\"false\">
  2749.     <div class=\"modal-dialog modal-lg modal-dialog-centered\">
  2750.         <div class=\"modal-content\">
  2751.             <div class=\"modal-header border-0 pb-0\">
  2752.                 <h5 class=\"modal-title w-100 text-center\" id=\"checkoutChoiceModalLabel\">
  2753.                     <i class=\"bi bi-credit-card-2-front me-2\"></i>
  2754.                     Comment souhaitez-vous procéder ?
  2755.                 </h5>
  2756.                 <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>
  2757.             </div>
  2758.             <div class=\"modal-body px-5 py-4\">
  2759.                 <!-- Récapitulatif du pack sélectionné -->
  2760.                 <div class=\"alert alert-primary border-primary mb-4 d-flex align-items-center justify-content-between\" role=\"alert\" id=\"packSummary\" style=\"display: none !important;\">
  2761.                     <div class=\"d-flex align-items-center gap-3\">
  2762.                         <i class=\"bi bi-box-seam fs-3\"></i>
  2763.                         <div>
  2764.                             <div class=\"fw-bold mb-1\">Pack sélectionné</div>
  2765.                             <div class=\"h5 mb-0\" id=\"packName\">—</div>
  2766.                         </div>
  2767.                     </div>
  2768.                     <div class=\"text-end\">
  2769.                         <div class=\"text-muted small\">Montant annuel</div>
  2770.                         <div class=\"h4 mb-0 fw-bold\" id=\"packPrice\">—</div>
  2771.                     </div>
  2772.                 </div>
  2773.                 
  2774.                 <p class=\"text-center text-muted mb-4\">Choisissez le mode de souscription adapté à votre structure</p>
  2775.                 
  2776.                 <div class=\"row g-4\">
  2777.                     <!-- Card 1 — Souscription en ligne -->
  2778.                     <div class=\"col-lg-4 col-md-6\">
  2779.                         <div class=\"card h-100 border-2 checkout-choice-card\" data-choice=\"online\" tabindex=\"0\" role=\"button\">
  2780.                             <div class=\"card-body d-flex flex-column\">
  2781.                                 <div class=\"mb-3\">
  2782.                                     <span class=\"badge bg-success text-white mb-2\">Recommandé</span>
  2783.                                     <h4 class=\"card-title mb-2\">Souscrire en ligne</h4>
  2784.                                     <p class=\"text-muted small\">CB / SEPA — activation en 24 h. Facturation annuelle.</p>
  2785.                                 </div>
  2786.                                 <ul class=\"list-unstyled mb-4 flex-grow-1\">
  2787.                                     <li class=\"mb-2\"><i class=\"bi bi-check-circle-fill text-success me-2\"></i>Stripe Checkout sécurisé</li>
  2788.                                     <li class=\"mb-2\"><i class=\"bi bi-check-circle-fill text-success me-2\"></i>Facture et mandat SEPA automatiques</li>
  2789.                                     <li class=\"mb-2\"><i class=\"bi bi-check-circle-fill text-success me-2\"></i>Planifier l'onboarding (30 min)</li>
  2790.                                 </ul>
  2791.                                 <button class=\"btn btn-primary w-100\" data-cta=\"checkout_online\" data-loc=\"modal\">
  2792.                                     <i class=\"bi bi-credit-card me-2\"></i>Payer & activer
  2793.                                 </button>
  2794.                             </div>
  2795.                         </div>
  2796.                     </div>
  2797.                     <!-- Card 2 — Virement bancaire -->
  2798.                     <div class=\"col-lg-4 col-md-6\">
  2799.                         <div class=\"card h-100 border-2 checkout-choice-card\" data-choice=\"bank_transfer\" tabindex=\"0\" role=\"button\">
  2800.                             <div class=\"card-body d-flex flex-column\">
  2801.                                 <div class=\"mb-3\">
  2802.                                     <span class=\"badge bg-info text-white mb-2\">Économique</span>
  2803.                                     <h4 class=\"card-title mb-2\">Virement bancaire</h4>
  2804.                                     <p class=\"text-muted small\">Paiement par virement — activation sous 48h après réception.</p>
  2805.                                 </div>
  2806.                                 <ul class=\"list-unstyled mb-4 flex-grow-1\">
  2807.                                     <li class=\"mb-2\"><i class=\"bi bi-check-circle-fill text-info me-2\"></i>RIB fourni automatiquement</li>
  2808.                                     <li class=\"mb-2\"><i class=\"bi bi-check-circle-fill text-info me-2\"></i>Facture proforma envoyée</li>
  2809.                                     <li class=\"mb-2\"><i class=\"bi bi-check-circle-fill text-info me-2\"></i>Activation après réception</li>
  2810.                                 </ul>
  2811.                                 <button type=\"button\" class=\"btn btn-outline-info w-100\" data-bs-toggle=\"modal\" data-bs-target=\"#bankTransferModal\" data-bs-dismiss=\"modal\">
  2812.                                     <i class=\"bi bi-bank me-2\"></i>Demander le RIB
  2813.                                 </button>
  2814.                             </div>
  2815.                         </div>
  2816.                     </div>
  2817.                     <!-- Card 3 — Devis / Bon de commande -->
  2818.                     <div class=\"col-lg-4 col-md-6\">
  2819.                         <div class=\"card h-100 border-2 checkout-choice-card\" data-choice=\"quote\" tabindex=\"0\" role=\"button\">
  2820.                             <div class=\"card-body d-flex flex-column\">
  2821.                                 <div class=\"mb-3\">
  2822.                                     <h4 class=\"card-title mb-2 mt-4\">Demander un devis / BC</h4>
  2823.                                     <p class=\"text-muted small\">Adapté écoles publiques, collectivités, associations.</p>
  2824.                                 </div>
  2825.                                 <ul class=\"list-unstyled mb-4 flex-grow-1\">
  2826.                                     <li class=\"mb-2\"><i class=\"bi bi-check-circle-fill text-primary me-2\"></i>Devis PDF instantané</li>
  2827.                                     <li class=\"mb-2\"><i class=\"bi bi-check-circle-fill text-primary me-2\"></i>DPA/RGPD, RIB, CGV joints</li>
  2828.                                     <li class=\"mb-2\"><i class=\"bi bi-check-circle-fill text-primary me-2\"></i>E‑signature & upload du BC</li>
  2829.                                 </ul>
  2830.                                 <button class=\"btn btn-outline-primary w-100\" data-cta=\"checkout_quote\" data-loc=\"modal\">
  2831.                                     <i class=\"bi bi-file-earmark-text me-2\"></i>Recevoir le devis
  2832.                                 </button>
  2833.                             </div>
  2834.                         </div>
  2835.                     </div>
  2836.                 </div>
  2837.             </div>
  2838.             <div class=\"modal-footer border-0 pt-0\">
  2839.                 <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Retour</button>
  2840.             </div>
  2841.         </div>
  2842.     </div>
  2843. </div>
  2844. <!-- MODALE VIREMENT BANCAIRE (RIB) -->
  2845. <div class=\"modal fade\" id=\"bankTransferModal\" tabindex=\"-1\" aria-labelledby=\"bankTransferModalLabel\" aria-hidden=\"true\" data-bs-backdrop=\"static\" data-bs-keyboard=\"false\">
  2846.     <div class=\"modal-dialog modal-xl modal-dialog-centered\">
  2847.         <div class=\"modal-content\">
  2848.             <div class=\"modal-header border-0 pb-2\">
  2849.                 <h5 class=\"modal-title w-100 text-center\" id=\"bankTransferModalLabel\">
  2850.                     <i class=\"bi bi-bank2 me-2 text-info\"></i>
  2851.                     Virement bancaire — RIB instantané
  2852.                 </h5>
  2853.                 <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>
  2854.             </div>
  2855.             <div class=\"modal-body p-4\">
  2856.                 <div class=\"row\">
  2857.                     <!-- Colonne formulaire -->
  2858.                     <div class=\"col-lg-5\">
  2859.                         <div class=\"card border-0 bg-light h-100\">
  2860.                             <div class=\"card-body p-4\">
  2861.                                 <h6 class=\"text-info mb-3\">
  2862.                                     <i class=\"bi bi-person-circle me-2\"></i>Vos informations
  2863.                                 </h6>
  2864.                                 <p class=\"text-muted small mb-4\">Nous vous enverrons le RIB et la facture proforma par email</p>
  2865.                                 
  2866.                                 <form id=\"rib-form\" method=\"post\" action=\"";
  2867.         // line 2764
  2868.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("bank_transfer_request");
  2869.         yield "\" data-event=\"rib_request_submit\">
  2870.                                     <div class=\"mb-4\">
  2871.                                         <label for=\"rib_fullname\" class=\"form-label fw-semibold\">
  2872.                                             <i class=\"bi bi-person me-1\"></i>Nom & prénom *
  2873.                                         </label>
  2874.                                         <input id=\"rib_fullname\" name=\"full_name\" class=\"form-control form-control-lg\" required 
  2875.                                                placeholder=\"Ex: Marie Dupont\" autocomplete=\"name\">
  2876.                                     </div>
  2877.                                     
  2878.                                     <div class=\"mb-4\">
  2879.                                         <label for=\"rib_email\" class=\"form-label fw-semibold\">
  2880.                                             <i class=\"bi bi-envelope me-1\"></i>Email de facturation *
  2881.                                         </label>
  2882.                                         <input id=\"rib_email\" name=\"billing_email\" type=\"email\" class=\"form-control form-control-lg\" required 
  2883.                                                placeholder=\"Ex: comptabilite@ecole.fr\" autocomplete=\"email\">
  2884.                                     </div>
  2885.                                     <div class=\"mb-4\">
  2886.                                         <label for=\"rib_company\" class=\"form-label fw-semibold\">
  2887.                                             <i class=\"bi bi-building me-1\"></i>Nom de la structure
  2888.                                         </label>
  2889.                                         <input id=\"rib_company\" name=\"company\" class=\"form-control form-control-lg\" 
  2890.                                                placeholder=\"Ex: École Primaire Jean Moulin\" autocomplete=\"organization\">
  2891.                                     </div>
  2892.                                     <!-- Contexte pack (sera rempli dynamiquement) -->
  2893.                                     <input type=\"hidden\" name=\"pack_id\" id=\"rib_pack_id\" value=\"\">
  2894.                                     <div class=\"d-grid\">
  2895.                                         <button class=\"btn btn-info btn-lg py-3\" id=\"rib-submit\" type=\"submit\" data-cta=\"rib_request\" data-loc=\"wire\">
  2896.                                             <i class=\"bi bi-bank me-2\"></i>Obtenir le RIB instantanément
  2897.                                         </button>
  2898.                                     </div>
  2899.                                     
  2900.                                     <p class=\"text-muted text-center small mt-3 mb-0\">
  2901.                                         <i class=\"bi bi-shield-check me-1\"></i>
  2902.                                         Sécurisé • Données hébergées en France • Conforme RGPD
  2903.                                     </p>
  2904.                                 </form>
  2905.                             </div>
  2906.                         </div>
  2907.                     </div>
  2908.                     <!-- Colonne RIB -->
  2909.                     <div class=\"col-lg-7\">
  2910.                         <div id=\"rib-panel\" class=\"card border-info\" style=\"display: none;\">
  2911.                             <div class=\"card-header bg-info text-white\">
  2912.                                 <h6 class=\"mb-0\">
  2913.                                     <i class=\"bi bi-bank me-2\"></i>Coordonnées bancaires 5sur5séjour
  2914.                                 </h6>
  2915.                             </div>
  2916.                             <div class=\"card-body p-4\">
  2917.                                 <div class=\"row g-4\">
  2918.                                     <div class=\"col-md-6\">
  2919.                                         <div class=\"border-bottom pb-2 mb-2\">
  2920.                                             <div class=\"text-muted small text-uppercase fw-bold\">Titulaire du compte</div>
  2921.                                             <div class=\"h6 mb-0\">S.A.S. TRUST CONSEILS</div>
  2922.                                         </div>
  2923.                                     </div>
  2924.                                     <div class=\"col-md-6\">
  2925.                                         <div class=\"border-bottom pb-2 mb-2\">
  2926.                                             <div class=\"text-muted small text-uppercase fw-bold\">Banque</div>
  2927.                                             <div class=\"h6 mb-0\">CR CENTRE EST</div>
  2928.                                         </div>
  2929.                                     </div>
  2930.                                     <div class=\"col-12\">
  2931.                                         <div class=\"border-bottom pb-2 mb-2\">
  2932.                                             <div class=\"text-muted small text-uppercase fw-bold\">IBAN</div>
  2933.                                             <div class=\"d-flex align-items-center gap-3\">
  2934.                                                 <code id=\"iban-text\" class=\"user-select-all h6 mb-0 text-primary\">FR76 1780 6009 6304 1603 4748 776</code>
  2935.                                                 <button type=\"button\" class=\"btn btn-outline-primary\" data-cta=\"copy_iban\" aria-label=\"Copier l'IBAN\" onclick=\"copyToClipboard('iban-text', this)\">
  2936.                                                     <i class=\"bi bi-clipboard me-1\"></i>Copier
  2937.                                                 </button>
  2938.                                             </div>
  2939.                                         </div>
  2940.                                     </div>
  2941.                                     <div class=\"col-md-6\">
  2942.                                         <div class=\"border-bottom pb-2 mb-2\">
  2943.                                             <div class=\"text-muted small text-uppercase fw-bold\">Code BIC</div>
  2944.                                             <div class=\"d-flex align-items-center gap-3\">
  2945.                                                 <code id=\"bic-text\" class=\"user-select-all h6 mb-0 text-primary\">AGRIFRPP878</code>
  2946.                                                 <button type=\"button\" class=\"btn btn-outline-primary btn-sm\" data-cta=\"copy_bic\" aria-label=\"Copier le BIC\" onclick=\"copyToClipboard('bic-text', this)\">
  2947.                                                     <i class=\"bi bi-clipboard\"></i>
  2948.                                                 </button>
  2949.                                             </div>
  2950.                                         </div>
  2951.                                     </div>
  2952.                                     <div class=\"col-md-6\">
  2953.                                         <div class=\"border-bottom pb-2 mb-2\">
  2954.                                             <div class=\"text-muted small text-uppercase fw-bold\">Référence à indiquer</div>
  2955.                                             <div class=\"h6 mb-0 text-success\">PACK-PRO-<span id=\"rib-ref-date\"></span></div>
  2956.                                         </div>
  2957.                                     </div>
  2958.                                 </div>
  2959.                                 <div class=\"alert alert-success mt-4\" role=\"alert\">
  2960.                                     <i class=\"bi bi-check-circle me-2\"></i>
  2961.                                     <strong>Email envoyé !</strong> Vous recevrez le RIB et la facture proforma à <span id=\"rib-email-echo\" class=\"fw-bold\">votre adresse</span>.
  2962.                                 </div>
  2963.                                 <div class=\"d-flex flex-wrap gap-3 mt-4\">
  2964.                                     <a class=\"btn btn-primary\" href=\"#\" id=\"proforma-download-link\" data-cta=\"download_proforma\">
  2965.                                         <i class=\"bi bi-download me-2\"></i>Télécharger la facture proforma
  2966.                                     </a>
  2967.                                     <a class=\"btn btn-outline-secondary\" href=\"https://calendly.com/5sur5sejour/demo\" target=\"_blank\" data-cta=\"book_call\">
  2968.                                         <i class=\"bi bi-telephone me-2\"></i>Planifier un appel
  2969.                                     </a>
  2970.                                 </div>
  2971.                                 <div class=\"text-muted small mt-3\">
  2972.                                     <i class=\"bi bi-info-circle me-1\"></i>
  2973.                                     Activation de votre compte sous 48h après réception du virement.
  2974.                                 </div>
  2975.                             </div>
  2976.                         </div>
  2977.                         <!-- Message d'attente -->
  2978.                         <div id=\"rib-waiting\" class=\"text-center p-5\">
  2979.                             <i class=\"bi bi-bank2 text-muted\" style=\"font-size: 4rem;\"></i>
  2980.                             <h5 class=\"text-muted mt-3\">Remplissez le formulaire pour obtenir le RIB</h5>
  2981.                             <p class=\"text-muted\">Vos coordonnées bancaires apparaîtront ici instantanément</p>
  2982.                         </div>
  2983.                     </div>
  2984.                 </div>
  2985.             </div>
  2986.         </div>
  2987.     </div>
  2988. </div>
  2989. <script>
  2990. document.addEventListener('DOMContentLoaded', function() {
  2991.     console.log('✅ Page Accueil - Modale checkout initialisée');
  2992.     
  2993.     // Mapping des packs
  2994.     const packLabels = {
  2995.         'access': 'Pack Accès',
  2996.         'serenite': 'Pack Sérénité',
  2997.         'pro_illimite': 'Partenariat à la performance ✨'
  2998.     };
  2999.     
  3000.     // Récupérer le pack sélectionné lors de l'ouverture de la modale
  3001.     const checkoutModal = document.getElementById('checkoutChoiceModal');
  3002.     const bankTransferModal = document.getElementById('bankTransferModal');
  3003.     let selectedPack = null;
  3004.     let selectedPackPrice = null;
  3005.     
  3006.     if (checkoutModal) {
  3007.         checkoutModal.addEventListener('show.bs.modal', function(event) {
  3008.             const button = event.relatedTarget;
  3009.             selectedPack = button.getAttribute('data-pack');
  3010.             selectedPackPrice = button.getAttribute('data-pack-price');
  3011.             console.log('📦 Pack sélectionné:', selectedPack, '- Prix:', selectedPackPrice + '€');
  3012.             
  3013.             // Afficher le récapitulatif du pack
  3014.             const packSummary = document.getElementById('packSummary');
  3015.             const packName = document.getElementById('packName');
  3016.             const packPrice = document.getElementById('packPrice');
  3017.             
  3018.             if (packSummary && packName && packPrice) {
  3019.                 packName.textContent = packLabels[selectedPack] || selectedPack;
  3020.                 packPrice.textContent = selectedPackPrice + ' € / an';
  3021.                 packSummary.style.display = 'flex';
  3022.             }
  3023.         });
  3024.     }
  3025.     
  3026.     // Transférer le pack sélectionné au modal RIB
  3027.     if (bankTransferModal) {
  3028.         bankTransferModal.addEventListener('show.bs.modal', function(event) {
  3029.             console.log('📦 Ouverture modal RIB avec pack:', selectedPack);
  3030.             // Remplir le champ caché avec le pack sélectionné
  3031.             const ribPackIdField = document.getElementById('rib_pack_id');
  3032.             if (ribPackIdField) {
  3033.                 ribPackIdField.value = selectedPack || '';
  3034.                 console.log('✅ Pack ID défini dans le formulaire:', ribPackIdField.value);
  3035.                 
  3036.                 // ALERTE SI PAS DE PACK SÉLECTIONNÉ
  3037.                 if (!selectedPack) {
  3038.                     console.warn('⚠️ ATTENTION: Aucun pack sélectionné ! La commande ne sera pas créée.');
  3039.                     alert('⚠️ DEBUG: Aucun pack sélectionné. Cliquez d\\'abord sur un bouton de pack (Sérénité ou Découverte) avant de demander le RIB.');
  3040.                 }
  3041.             }
  3042.         });
  3043.     }
  3044.     
  3045.     // =========================
  3046.     // GESTION DU FORMULAIRE RIB
  3047.     // =========================
  3048.     const ribForm = document.getElementById('rib-form');
  3049.     const ribSubmit = document.getElementById('rib-submit');
  3050.     const ribPanel = document.getElementById('rib-panel');
  3051.     const ribWaiting = document.getElementById('rib-waiting');
  3052.     const ribEmailEcho = document.getElementById('rib-email-echo');
  3053.     const ribRefDate = document.getElementById('rib-ref-date');
  3054.     const proformaDownloadLink = document.getElementById('proforma-download-link');
  3055.     
  3056.     if (ribForm && ribSubmit) {
  3057.         // Set current date for reference
  3058.         if (ribRefDate) {
  3059.             const now = new Date();
  3060.             const dateStr = now.getFullYear().toString().slice(-2) + 
  3061.                            (now.getMonth() + 1).toString().padStart(2, '0') + 
  3062.                            now.getDate().toString().padStart(2, '0');
  3063.             ribRefDate.textContent = dateStr;
  3064.         }
  3065.         
  3066.         ribForm.addEventListener('submit', function(e) {
  3067.             e.preventDefault();
  3068.             
  3069.             // Get form data
  3070.             const formData = new FormData(ribForm);
  3071.             const fullName = formData.get('full_name');
  3072.             const billingEmail = formData.get('billing_email');
  3073.             const company = formData.get('company');
  3074.             const packId = formData.get('pack_id');
  3075.             
  3076.             // Validation
  3077.             if (!fullName || fullName.trim().length < 2) {
  3078.                 showFieldError('rib_fullname', 'Veuillez saisir votre nom complet');
  3079.                 return;
  3080.             }
  3081.             
  3082.             if (!billingEmail || !isValidEmail(billingEmail)) {
  3083.                 showFieldError('rib_email', 'Veuillez saisir une adresse email valide');
  3084.                 return;
  3085.             }
  3086.             
  3087.             // Clear any previous errors
  3088.             clearFieldErrors();
  3089.             
  3090.             // Show loading state
  3091.             ribSubmit.disabled = true;
  3092.             ribSubmit.innerHTML = '<i class=\"bi bi-hourglass-split me-2\"></i>Envoi en cours...';
  3093.             
  3094.             // Send to backend
  3095.             fetch('";
  3096.         // line 2999
  3097.         yield $this->extensions['Symfony\Bridge\Twig\Extension\RoutingExtension']->getPath("bank_transfer_request");
  3098.         yield "', {
  3099.                 method: 'POST',
  3100.                 body: formData
  3101.             })
  3102.             .then(res => res.json())
  3103.             .then(data => {
  3104.                 if (data.success) {
  3105.                     showRibSuccess(billingEmail, fullName, company, data.requestNumber);
  3106.                 } else {
  3107.                     throw new Error(data.message || 'Erreur lors de l\\'envoi');
  3108.                 }
  3109.             })
  3110.             .catch(err => {
  3111.                 alert('❌ Erreur : ' + err.message);
  3112.                 ribSubmit.disabled = false;
  3113.                 ribSubmit.innerHTML = '<i class=\"bi bi-bank me-2\"></i>Obtenir le RIB instantanément';
  3114.             });
  3115.         });
  3116.     }
  3117.     
  3118.     function showFieldError(fieldId, message) {
  3119.         const field = document.getElementById(fieldId);
  3120.         if (field) {
  3121.             field.classList.add('is-invalid');
  3122.             
  3123.             // Remove existing error message
  3124.             const existingError = field.parentNode.querySelector('.invalid-feedback');
  3125.             if (existingError) {
  3126.                 existingError.remove();
  3127.             }
  3128.             
  3129.             // Add new error message
  3130.             const errorDiv = document.createElement('div');
  3131.             errorDiv.className = 'invalid-feedback';
  3132.             errorDiv.textContent = message;
  3133.             field.parentNode.appendChild(errorDiv);
  3134.         }
  3135.     }
  3136.     
  3137.     function clearFieldErrors() {
  3138.         const invalidFields = document.querySelectorAll('.is-invalid');
  3139.         invalidFields.forEach(field => {
  3140.             field.classList.remove('is-invalid');
  3141.         });
  3142.         
  3143.         const errorMessages = document.querySelectorAll('.invalid-feedback');
  3144.         errorMessages.forEach(error => {
  3145.             error.remove();
  3146.         });
  3147.     }
  3148.     
  3149.     function showRibSuccess(email, name, company, requestNumber) {
  3150.         // Hide waiting message
  3151.         if (ribWaiting) {
  3152.             ribWaiting.style.display = 'none';
  3153.         }
  3154.         
  3155.         // Show RIB panel
  3156.         if (ribPanel) {
  3157.             ribPanel.style.display = 'block';
  3158.         }
  3159.         
  3160.         // Update email echo
  3161.         if (ribEmailEcho) {
  3162.             ribEmailEcho.textContent = email;
  3163.         }
  3164.         
  3165.         // Generate proforma download link
  3166.         if (proformaDownloadLink && requestNumber) {
  3167.             proformaDownloadLink.href = '/proforma-download/' + requestNumber;
  3168.         }
  3169.         
  3170.         // Scroll to RIB panel
  3171.         if (ribPanel) {
  3172.             ribPanel.scrollIntoView({ behavior: 'smooth', block: 'start' });
  3173.         }
  3174.         
  3175.         // Reset button
  3176.         if (ribSubmit) {
  3177.             ribSubmit.disabled = false;
  3178.             ribSubmit.innerHTML = '<i class=\"bi bi-bank me-2\"></i>Obtenir le RIB instantanément';
  3179.         }
  3180.         
  3181.         console.log('✅ RIB request submitted:', { name, email, company });
  3182.     }
  3183.     
  3184.     function isValidEmail(email) {
  3185.         const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+\$/;
  3186.         return emailRegex.test(email);
  3187.     }
  3188.     
  3189.     // Gérer le clic sur \"Payer & activer\" (Stripe)
  3190.     document.querySelector('[data-cta=\"checkout_online\"]')?.addEventListener('click', function() {
  3191.         alert('Paiement Stripe en cours de développement\\n\\nPack : ' + selectedPack + '\\nPrix : ' + selectedPackPrice + '€');
  3192.     });
  3193.     
  3194.     // Gérer le clic sur \"Recevoir le devis\"
  3195.     document.querySelector('[data-cta=\"checkout_quote\"]')?.addEventListener('click', function() {
  3196.         alert('Génération de devis en cours de développement\\n\\nPack : ' + selectedPack + '\\nPrix : ' + selectedPackPrice + '€');
  3197.     });
  3198. });
  3199. // Copy to clipboard function
  3200. function copyToClipboard(elementId, button) {
  3201.     const element = document.getElementById(elementId);
  3202.     if (element) {
  3203.         const text = element.textContent;
  3204.         navigator.clipboard.writeText(text).then(() => {
  3205.             // Show success feedback
  3206.             const originalText = button.innerHTML;
  3207.             button.innerHTML = '<i class=\"bi bi-check\"></i> Copié !';
  3208.             button.classList.remove('btn-outline-primary');
  3209.             button.classList.add('btn-success');
  3210.             
  3211.             setTimeout(() => {
  3212.                 button.innerHTML = originalText;
  3213.                 button.classList.remove('btn-success');
  3214.                 button.classList.add('btn-outline-primary');
  3215.             }, 2000);
  3216.         }).catch(err => {
  3217.             console.error('Erreur copie:', err);
  3218.             alert('Impossible de copier. Copiez manuellement : ' + text);
  3219.         });
  3220.     }
  3221. }
  3222. // Gestion du formulaire grand volume
  3223. const grandVolumeForm = document.getElementById('grandVolumeForm');
  3224. const formMessage = document.getElementById('formMessage');
  3225. if (grandVolumeForm) {
  3226.   grandVolumeForm.addEventListener('submit', function(e) {
  3227.     e.preventDefault();
  3228.     
  3229.     // Désactiver le bouton pendant l'envoi
  3230.     const submitBtn = grandVolumeForm.querySelector('button[type=\"submit\"]');
  3231.     const originalText = submitBtn.innerHTML;
  3232.     submitBtn.disabled = true;
  3233.     submitBtn.innerHTML = '<span class=\"spinner-border spinner-border-sm me-2\"></span>Envoi en cours...';
  3234.     
  3235.     // Masquer les messages précédents
  3236.     formMessage.innerHTML = '';
  3237.     formMessage.className = 'mt-3';
  3238.     
  3239.     // Récupérer les données du formulaire
  3240.     const formData = new FormData(grandVolumeForm);
  3241.     
  3242.     // Envoyer la requête
  3243.     fetch('/contact/grand-volume', {
  3244.       method: 'POST',
  3245.       body: formData,
  3246.       headers: {
  3247.         'X-Requested-With': 'XMLHttpRequest'
  3248.       }
  3249.     })
  3250.     .then(response => response.json())
  3251.     .then(data => {
  3252.       if (data.success) {
  3253.         // Fermer le modal du formulaire
  3254.         const formModal = bootstrap.Modal.getInstance(document.getElementById('grandVolumeModal'));
  3255.         if (formModal) formModal.hide();
  3256.         
  3257.         // Réinitialiser le formulaire
  3258.         grandVolumeForm.reset();
  3259.         
  3260.         // Afficher le modal de succès
  3261.         const successModal = new bootstrap.Modal(document.getElementById('grandVolumeSuccessModal'));
  3262.         successModal.show();
  3263.       } else {
  3264.         formMessage.className = 'mt-3 alert alert-danger';
  3265.         formMessage.innerHTML = `
  3266.           <div class=\"d-flex align-items-center\">
  3267.             <i class=\"bi bi-exclamation-triangle-fill me-2 fs-5\"></i>
  3268.             <div>
  3269.               <strong>Erreur :</strong><br>
  3270.               \${data.message || 'Une erreur est survenue. Veuillez réessayer.'}
  3271.             </div>
  3272.           </div>
  3273.         `;
  3274.       }
  3275.     })
  3276.     .catch(error => {
  3277.       console.error('Erreur:', error);
  3278.       formMessage.className = 'mt-3 alert alert-danger';
  3279.       formMessage.innerHTML = `
  3280.         <div class=\"d-flex align-items-center\">
  3281.           <i class=\"bi bi-exclamation-triangle-fill me-2 fs-5\"></i>
  3282.           <div>
  3283.             <strong>Erreur :</strong><br>
  3284.             Une erreur est survenue lors de l'envoi. Veuillez réessayer plus tard.
  3285.           </div>
  3286.         </div>
  3287.       `;
  3288.     })
  3289.     .finally(() => {
  3290.       submitBtn.disabled = false;
  3291.       submitBtn.innerHTML = originalText;
  3292.     });
  3293.   });
  3294. }
  3295. </script>
  3296. <!-- MODAL FORMULAIRE GRAND VOLUME -->
  3297.   <!-- MODAL FORMULAIRE GRAND VOLUME -->
  3298.   <div class=\"modal fade\" id=\"grandVolumeModal\" tabindex=\"-1\" aria-labelledby=\"grandVolumeModalLabel\" aria-hidden=\"true\">
  3299.     <div class=\"modal-dialog modal-dialog-centered modal-lg\">
  3300.       <div class=\"modal-content\">
  3301.         <div class=\"modal-header border-0 pb-0\">
  3302.           <h5 class=\"modal-title w-100 text-center\" id=\"grandVolumeModalLabel\">
  3303.             <i class=\"bi bi-envelope me-2\"></i>Demande de devis - Grand volume (+25 séjours/an)
  3304.           </h5>
  3305.           <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Fermer\"></button>
  3306.         </div>
  3307.         <div class=\"modal-body px-4 py-4\">
  3308.           <p class=\"text-center text-muted mb-4\">Remplissez ce formulaire et notre équipe vous contactera rapidement pour vous proposer une offre personnalisée.</p>
  3309.           
  3310.           <form id=\"grandVolumeForm\" method=\"post\" action=\"/contact/grand-volume\">
  3311.             <div class=\"row g-3\">
  3312.               <div class=\"col-md-6\">
  3313.                 <label for=\"nom_structure\" class=\"form-label\">Nom de la structure <span class=\"text-danger\">*</span></label>
  3314.                 <input type=\"text\" class=\"form-control\" id=\"nom_structure\" name=\"nom_structure\" required>
  3315.               </div>
  3316.               <div class=\"col-md-6\">
  3317.                 <label for=\"type_structure\" class=\"form-label\">Type de structure <span class=\"text-danger\">*</span></label>
  3318.                 <select class=\"form-select\" id=\"type_structure\" name=\"type_structure\" required>
  3319.                   <option value=\"\">Sélectionnez...</option>
  3320.                   <option value=\"ecole\">École</option>
  3321.                   <option value=\"centre_loisirs\">Centre de loisirs</option>
  3322.                   <option value=\"association\">Association</option>
  3323.                   <option value=\"voyagiste\">Voyagiste</option>
  3324.                   <option value=\"autre\">Autre</option>
  3325.                 </select>
  3326.               </div>
  3327.               <div class=\"col-md-6\">
  3328.                 <label for=\"nombre_sejours\" class=\"form-label\">Nombre de séjours par an <span class=\"text-danger\">*</span></label>
  3329.                 <input type=\"number\" class=\"form-control\" id=\"nombre_sejours\" name=\"nombre_sejours\" min=\"26\" required placeholder=\"Ex: 30, 50, 100...\">
  3330.                 <div class=\"form-text\">Minimum 26 séjours par an</div>
  3331.               </div>
  3332.               <div class=\"col-md-6\">
  3333.                 <label for=\"contact_email\" class=\"form-label\">Email <span class=\"text-danger\">*</span></label>
  3334.                 <input type=\"email\" class=\"form-control\" id=\"contact_email\" name=\"contact_email\" required>
  3335.               </div>
  3336.               <div class=\"col-md-6\">
  3337.                 <label for=\"contact_telephone\" class=\"form-label\">Téléphone <span class=\"text-danger\">*</span></label>
  3338.                 <input type=\"tel\" class=\"form-control\" id=\"contact_telephone\" name=\"contact_telephone\" required>
  3339.               </div>
  3340.               <div class=\"col-12\">
  3341.                 <label for=\"message\" class=\"form-label\">Message (optionnel)</label>
  3342.                 <textarea class=\"form-control\" id=\"message\" name=\"message\" rows=\"4\" placeholder=\"Décrivez vos besoins spécifiques, vos contraintes, vos questions...\"></textarea>
  3343.               </div>
  3344.               <div class=\"col-12\">
  3345.                 <div class=\"form-check\">
  3346.                   <input class=\"form-check-input\" type=\"checkbox\" id=\"accept_rgpd\" name=\"accept_rgpd\" required>
  3347.                   <label class=\"form-check-label\" for=\"accept_rgpd\">
  3348.                     J'accepte que mes données soient utilisées pour me recontacter concernant cette demande de devis. <span class=\"text-danger\">*</span>
  3349.                   </label>
  3350.                 </div>
  3351.               </div>
  3352.             </div>
  3353.             <div id=\"formMessage\" class=\"mt-3\"></div>
  3354.             <div class=\"d-grid gap-2 mt-4\">
  3355.               <button type=\"submit\" class=\"btn btn-primary btn-lg\">
  3356.                 <i class=\"bi bi-send me-2\"></i>Envoyer la demande
  3357.               </button>
  3358.               <button type=\"button\" class=\"btn btn-outline-secondary\" data-bs-dismiss=\"modal\">Annuler</button>
  3359.             </div>
  3360.           </form>
  3361.         </div>
  3362.       </div>
  3363.     </div>
  3364.   </div>
  3365.   </body>
  3366. </html>
  3367.     </div>
  3368.   </div>
  3369.   </body>
  3370. </html>
  3371.     </div>
  3372.   </div>
  3373.   </body>
  3374. </html>
  3375.     </div>
  3376.   </div>
  3377.   </body>
  3378. </html>";
  3379.         
  3380.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  3381.         
  3382.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  3383.         yield from [];
  3384.     }
  3385.     // line 2265
  3386.     /**
  3387.      * @return iterable<null|scalar|\Stringable>
  3388.      */
  3389.     public function block_Footer(array $context, array $blocks = []): iterable
  3390.     {
  3391.         $macros $this->macros;
  3392.         $__internal_5a27a8ba21ca79b61932376b2fa922d2 $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  3393.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""Footer"));
  3394.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  3395.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block""Footer"));
  3396.         // line 2266
  3397.         yield "            ";
  3398.         yield from $this->load("Accueil/_footer_premium.html.twig"2266)->unwrap()->yield($context);
  3399.         // line 2267
  3400.         yield "        ";
  3401.         
  3402.         $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  3403.         
  3404.         $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  3405.         yield from [];
  3406.     }
  3407.     /**
  3408.      * @codeCoverageIgnore
  3409.      */
  3410.     public function getTemplateName(): string
  3411.     {
  3412.         return "Accueil/PageAccueil.html.twig";
  3413.     }
  3414.     /**
  3415.      * @codeCoverageIgnore
  3416.      */
  3417.     public function isTraitable(): bool
  3418.     {
  3419.         return false;
  3420.     }
  3421.     /**
  3422.      * @codeCoverageIgnore
  3423.      */
  3424.     public function getDebugInfo(): array
  3425.     {
  3426.         return array (  3561 => 2267,  3558 => 2266,  3545 => 2265,  3245 => 2999,  3007 => 2764,  2829 => 2589,  2822 => 2585,  2809 => 2575,  2783 => 2552,  2775 => 2547,  2752 => 2527,  2745 => 2523,  2627 => 2408,  2619 => 2403,  2611 => 2398,  2498 => 2288,  2494 => 2287,  2490 => 2286,  2486 => 2285,  2482 => 2284,  2478 => 2283,  2474 => 2282,  2470 => 2281,  2466 => 2280,  2462 => 2279,  2449 => 2268,  2447 => 2265,  2408 => 2229,  2306 => 2130,  2168 => 1995,  2160 => 1990,  2152 => 1985,  2130 => 1966,  2080 => 1919,  2067 => 1909,  2052 => 1897,  2020 => 1868,  2006 => 1857,  1845 => 1699,  1820 => 1677,  1740 => 1600,  1706 => 1569,  1695 => 1561,  1687 => 1556,  1681 => 1553,  1641 => 1516,  1637 => 1515,  1623 => 1504,  1574 => 1457,  1568 => 1456,  1559 => 1452,  1555 => 1450,  1552 => 1449,  1548 => 1448,  1543 => 1446,  1524 => 1430,  1511 => 1420,  486 => 398,  466 => 381,  449 => 367,  432 => 353,  327 => 251,  123 => 52,  116 => 48,  112 => 47,  108 => 46,  104 => 45,  100 => 44,  87 => 34,  83 => 33,  49 => 1,);
  3427.     }
  3428.     public function getSourceContext(): Source
  3429.     {
  3430.         return new Source("<!DOCTYPE html>
  3431. <!--
  3432. Template name: Nova
  3433. Template author: FreeBootstrap.net
  3434. Author website: https://freebootstrap.net/
  3435. License: https://freebootstrap.net/license
  3436. -->
  3437. <html lang=\"fr\">
  3438.   <head>
  3439.     <meta charset=\"utf-8\">
  3440.     <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">
  3441. <title>5sur5Séjour — Créer un séjour scolaire en ligne (données hébergées en France)</title>
  3442. <meta name=\"description\" content=\"Partagez photos, vidéos et messages vocaux avec les familles. Gratuit pour les écoles publiques (hors option voix). Démo 15–30 min pour partenaires.\">
  3443. <!-- Open Graph / Twitter -->
  3444. <meta property=\"og:title\" content=\"Créer un séjour scolaire en ligne — 5sur5Séjour\">
  3445. <meta property=\"og:description\" content=\"Plateforme familles & écoles. Données en France. Démo 15–30 min.\">
  3446. <meta property=\"og:type\" content=\"website\">
  3447. <meta property=\"og:url\" content=\"https://5sur5sejour.fr/\">
  3448. <meta property=\"og:image\" content=\"https://5sur5sejour.fr/static/og/landing.jpg\">
  3449. <meta name=\"twitter:card\" content=\"summary_large_image\">
  3450. <!-- Robots -->
  3451. <meta name=\"robots\" content=\"index,follow,max-image-preview:large\">
  3452. <!-- Preload police/logo (si utilisés) -->
  3453. <link rel=\"preload\" href=\"/assets/fonts/inter-var.woff2\" as=\"font\" type=\"font/woff2\" crossorigin>
  3454. <link rel=\"preload\" href=\"/static/og/creer-sejour.jpg\" as=\"image\">    <title>5sur5séjour - Plateforme de partage de photos, vidéos et messages vocaux</title>
  3455.      
  3456.     <!-- ======= Favicon =======-->
  3457.     <link rel=\"icon\" type=\"image/png\" href=\"{{ asset('favicon.png') }}\">
  3458.     <link rel=\"apple-touch-icon\" href=\"{{ asset('favicon.png') }}\">
  3459.     <!-- End Favicon-->
  3460.      
  3461.     <!-- ======= Google Font =======-->
  3462.     <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\">
  3463.     <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin>
  3464.     <link href=\"https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap\" rel=\"stylesheet\">
  3465.     <!-- End Google Font-->
  3466.     
  3467.     <!-- ======= Styles =======-->
  3468.     <link href=\"{{ asset('Accueil/vendors/bootstrap/bootstrap.min.css') }}\" rel=\"stylesheet\">
  3469.     <link href=\"{{ asset('Accueil/vendors/bootstrap-icons/font/bootstrap-icons.min.css') }}\" rel=\"stylesheet\">
  3470.     <link href=\"{{ asset('Accueil/vendors/glightbox/glightbox.min.css') }}\" rel=\"stylesheet\">
  3471.     <link href=\"{{ asset('Accueil/vendors/swiper/swiper-bundle.min.css') }}\" rel=\"stylesheet\">
  3472.     <link href=\"{{ asset('Accueil/vendors/aos/aos.css') }}\" rel=\"stylesheet\">
  3473.     <!-- End Styles-->
  3474.     
  3475.     <!-- ======= Theme Style =======-->
  3476.     <link href=\"{{ asset('Accueil/css/style_nova.css') }}?v={{ \"now\"|date(\"Y-m-d-H-i-s\") }}\" rel=\"stylesheet\">
  3477.     <!-- End Theme Style-->
  3478.     <style>
  3479.     /* Section padding */
  3480. .py-6 { padding: 4rem 0; }
  3481. /* Card style premium */
  3482. .pricing-card {
  3483.     background: #ffffff;
  3484.     border-radius: 20px;
  3485.     border: 1px solid #eef2f4;
  3486.     transition: 0.25s;
  3487. }
  3488. .pricing-card:hover {
  3489.     transform: translateY(-6px);
  3490.     box-shadow: 0 20px 40px rgba(0,0,0,0.06);
  3491. }
  3492. /* Highlight card */
  3493. .pricing-card.highlight {
  3494.     border: 2px solid #52c0b4;
  3495.     background: #f4fdfb;
  3496. }
  3497. .highlight-text {
  3498.     color: #1ea594;
  3499.     font-weight: 800;
  3500. }
  3501. /* Prices */
  3502. .amount {
  3503.     font-size: 2.4rem;
  3504.     font-weight: 700;
  3505.     color: #1d2d35;
  3506. }
  3507. .subtitle {
  3508.     font-size: 0.9rem;
  3509. }
  3510. /* Badges */
  3511. .badge-5sur5 {
  3512.     position: absolute;
  3513.     top: -12px;
  3514.     left: 50%;
  3515.     transform: translateX(-50%);
  3516.     background: #1ea594;
  3517.     padding: 6px 14px;
  3518.     border-radius: 30px;
  3519.     color: #fff;
  3520.     font-size: 0.75rem;
  3521.     font-weight: 600;
  3522. }
  3523. /* Buttons - Styles personnalisés conservés pour les cartes de pricing */
  3524. .btn-5sur5 {
  3525.     background: #1ea594;
  3526.     color: #fff;
  3527.     border-radius: 30px;
  3528.     padding: 12px 22px;
  3529.     font-weight: 600;
  3530. }
  3531. .btn-5sur5:hover {
  3532.     background: #178a7d;
  3533.     color: #fff;
  3534. }
  3535. .btn-5sur5-highlight {
  3536.     background: #169e8f;
  3537.     color: #fff;
  3538.     border-radius: 30px;
  3539.     padding: 12px 22px;
  3540.     font-weight: 600;
  3541. }
  3542. .btn-5sur5-highlight:hover {
  3543.     background: #127d72;
  3544.     color: #fff;
  3545. }
  3546. .btn-outline-5sur5 {
  3547.     border: 2px solid #1ea594;
  3548.     color: #1ea594;
  3549.     border-radius: 30px;
  3550.     padding: 12px 22px;
  3551.     font-weight: 600;
  3552. }
  3553. .btn-outline-5sur5:hover {
  3554.     background: #1ea594;
  3555.     color: #fff;
  3556. }
  3557. /* Styles différenciés pour les boutons CTA */
  3558. .cta-section .btn-outline-primary {
  3559.     border: 2px solid #41a2aa;
  3560.     color: #41a2aa;
  3561.     background: transparent;
  3562.     font-weight: 600;
  3563.     transition: all 0.3s ease;
  3564. }
  3565. .cta-section .btn-outline-primary:hover {
  3566.     background: #41a2aa;
  3567.     color: #fff;
  3568.     border-color: #41a2aa;
  3569.     transform: translateY(-2px);
  3570.     box-shadow: 0 4px 12px rgba(65, 162, 170, 0.3);
  3571. }
  3572. .cta-section .btn-secondary {
  3573.     font-weight: 600;
  3574.     transition: all 0.3s ease;
  3575. }
  3576. .cta-section .btn-secondary:hover {
  3577.     background-color: #e67e4a !important;
  3578.     border-color: #e67e4a !important;
  3579.     transform: translateY(-2px);
  3580.     box-shadow: 0 4px 12px rgba(240, 158, 122, 0.3);
  3581. }
  3582. .cta-section .btn-primary {
  3583.     font-weight: 600;
  3584.     transition: all 0.3s ease;
  3585.     background-color: #41a2aa;
  3586.     border-color: #41a2aa;
  3587. }
  3588. .cta-section .btn-primary:hover {
  3589.     background-color: #358a92;
  3590.     border-color: #358a92;
  3591.     transform: translateY(-2px);
  3592.     box-shadow: 0 4px 12px rgba(65, 162, 170, 0.3);
  3593. }
  3594.     
  3595.     </style>
  3596.     
  3597.     <!-- ======= Apply theme =======-->
  3598.     <script>
  3599.       // Apply the theme as early as possible to avoid flicker
  3600.       (function() {
  3601.         const storedTheme = localStorage.getItem('theme') || 'light';
  3602.         document.documentElement.setAttribute('data-bs-theme', storedTheme);
  3603.       })();
  3604.     </script>
  3605.   </head>
  3606.   <body>
  3607.     
  3608. <!-- MODALE -->
  3609. <div class=\"modal fade\" id=\"demoModal\" tabindex=\"-1\" aria-hidden=\"true\">
  3610.   <div class=\"modal-dialog modal-lg modal-dialog-centered\">
  3611.     <div class=\"modal-content\">
  3612.       <div class=\"modal-header\">
  3613.         <h5 id=\"demoTitle\" class=\"modal-title\">Demander une démo guidée</h5>
  3614.         <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Fermer\"></button>
  3615.       </div>
  3616.       <div class=\"modal-body\">
  3617.         <ul class=\"nav nav-tabs\" id=\"demoTabs\" role=\"tablist\">
  3618.           <li class=\"nav-item\" role=\"presentation\">
  3619.             <button class=\"nav-link active\" id=\"tab-calendar\" data-bs-toggle=\"tab\" data-bs-target=\"#pane-calendar\" type=\"button\" role=\"tab\">
  3620.               Réserver un créneau
  3621.             </button>
  3622.           </li>
  3623.           <li class=\"nav-item\" role=\"presentation\">
  3624.             <button class=\"nav-link\" id=\"tab-callback\" data-bs-toggle=\"tab\" data-bs-target=\"#pane-callback\" type=\"button\" role=\"tab\">
  3625.               Être rappelé
  3626.             </button>
  3627.           </li>
  3628.         </ul>
  3629.         <div class=\"tab-content pt-3\">
  3630.           <!-- Calendrier -->
  3631.           <div class=\"tab-pane fade show active\" id=\"pane-calendar\" role=\"tabpanel\">
  3632.             <div class=\"text-center mb-3\">
  3633.               <h6 class=\"mb-2\">Réservez votre créneau de démonstration</h6>
  3634.               <p class=\"text-muted small\">Choisissez un créneau qui vous convient pour une démo personnalisée</p>
  3635.             </div>
  3636.             <div class=\"ratio ratio-16x9 border rounded\">
  3637.               <iframe src=\"https://calendly.com/5sur5sejour/demo\" title=\"Calendrier de réservation\" loading=\"lazy\" frameborder=\"0\"></iframe>
  3638.             </div>
  3639.             <p class=\"small text-muted mt-2 mb-0\">
  3640.               <i class=\"bi bi-clock me-1\"></i> Créneau visio 15–30 min · 
  3641.               <i class=\"bi bi-check-circle me-1\"></i> Confirmation instantanée ·
  3642.               <i class=\"bi bi-shield-check me-1\"></i> 100% gratuit
  3643.             </p>
  3644.           </div>
  3645.           <!-- Formulaire callback -->
  3646.           <div class=\"tab-pane fade\" id=\"pane-callback\" role=\"tabpanel\">
  3647.             <div class=\"text-center mb-3\">
  3648.               <h6 class=\"mb-2\">Être rappelé par un expert</h6>
  3649.               <p class=\"text-muted small\">Laissez-nous vos coordonnées et nous vous rappelons sous 24h</p>
  3650.             </div>
  3651.             <form id=\"contactForm\" class=\"needs-validation\" method=\"post\" action=\"{{ path('app_contact') }}\" novalidate>
  3652.               <input type=\"hidden\" name=\"topic\" id=\"topic\" value=\"demo\">
  3653.               <input type=\"hidden\" name=\"pack\"  id=\"pack\"  value=\"\">
  3654.               <input type=\"hidden\" name=\"objet\" id=\"objet\" value=\"demo\">
  3655.               <input type=\"text\" name=\"website\" class=\"visually-hidden\" tabindex=\"-1\" autocomplete=\"off\">
  3656.               <div class=\"row g-3\">
  3657.                 <div class=\"col-md-6\">
  3658.                   <label class=\"form-label\">Nom & prénom</label>
  3659.                   <input type=\"text\" class=\"form-control\" name=\"name\" required 
  3660.                          placeholder=\"Votre nom complet\">
  3661.                   <div class=\"invalid-feedback\">Veuillez saisir votre nom et prénom.</div>
  3662.                 </div>
  3663.                 <div class=\"col-md-6\">
  3664.                   <label class=\"form-label\">Établissement</label>
  3665.                   <input type=\"text\" class=\"form-control\" name=\"organization\" required 
  3666.                          placeholder=\"Nom de votre établissement\">
  3667.                   <div class=\"invalid-feedback\">Veuillez saisir le nom de votre établissement.</div>
  3668.                 </div>
  3669.                 <div class=\"col-md-6\">
  3670.                   <label class=\"form-label\">Email pro</label>
  3671.                   <input type=\"email\" class=\"form-control\" name=\"email\" required 
  3672.                          placeholder=\"votre.email@etablissement.fr\">
  3673.                   <div class=\"invalid-feedback\">Veuillez saisir une adresse email valide.</div>
  3674.                 </div>
  3675.                 <div class=\"col-md-6\">
  3676.                   <label class=\"form-label\">Téléphone</label>
  3677.                   <input type=\"tel\" class=\"form-control\" name=\"telephone\" required 
  3678.                          placeholder=\"06 12 34 56 78\" pattern=\"[0-9\\s\\+\\-\\(\\)]{10,}\">
  3679.                   <div class=\"invalid-feedback\">Veuillez saisir un numéro de téléphone valide.</div>
  3680.                 </div>
  3681.                 <div class=\"col-md-6\">
  3682.                   <label class=\"form-label\">Nb. de séjours / an</label>
  3683.                   <select class=\"form-select\" name=\"sejours_count\" required>
  3684.                     <option value=\"\" selected>Choisir…</option>
  3685.                     <option value=\"1-3\">1–3</option>
  3686.                     <option value=\"4-10\">4–10</option>
  3687.                     <option value=\"11-30\">11–30</option>
  3688.                     <option value=\"30+\">30+</option>
  3689.                   </select>
  3690.                   <div class=\"invalid-feedback\">Veuillez sélectionner le nombre de séjours.</div>
  3691.                 </div>
  3692.                 <div class=\"col-12\">
  3693.                   <label class=\"form-label\">Message (optionnel)</label>
  3694.                   <textarea class=\"form-control\" name=\"message\" rows=\"3\"
  3695.                     placeholder=\"Décrivez brièvement vos besoins : type de séjours, nombre d'enfants, questions spécifiques...\"></textarea>
  3696.                 </div>
  3697.                 <div class=\"col-12\">
  3698.                   <div class=\"form-check\">
  3699.                     <input class=\"form-check-input\" type=\"checkbox\" value=\"1\" id=\"consent\" name=\"consent\" required>
  3700.                     <label class=\"form-check-label\" for=\"consent\">J'accepte d'être contacté (RGPD).</label>
  3701.                     <div class=\"invalid-feedback\">Vous devez accepter d'être contacté pour continuer.</div>
  3702.                   </div>
  3703.                 </div>
  3704.                 <div class=\"col-12 d-grid d-sm-flex gap-2\">
  3705.                   <button id=\"submitBtn\" class=\"btn btn-primary px-4\" type=\"submit\">
  3706.                     <i class=\"bi bi-telephone me-2\"></i>Être rappelé sous 24h
  3707.                   </button>
  3708.                   <a class=\"btn btn-outline-secondary px-4\" href=\"mailto:contact@5sur5sejour.fr\">
  3709.                     <i class=\"bi bi-envelope me-2\"></i>Nous écrire
  3710.                   </a>
  3711.                 </div>
  3712.               </div>
  3713.               <p class=\"small text-muted mt-2 mb-0\">
  3714.                 Si la structure ne prend pas en charge <strong>Parent Premium</strong>, les familles peuvent l'activer (2,90 € / parent / séjour) pour l'accès complet, boîte vocale illimitée incluse. <span class=\"text-primary-emphasis\">Recommandé : prise en charge par la structure.</span>
  3715.               </p>
  3716.             </form>
  3717.           </div>
  3718.         </div>
  3719.       </div>
  3720.       <div class=\"modal-footer\">
  3721.         <p class=\"small text-muted mb-0\">Sans engagement · Données hébergées en France</p>
  3722.       </div>
  3723.     </div>
  3724.   </div>
  3725. </div>
  3726. <!-- MODALE CRÉER MON SÉJOUR -->
  3727. <div class=\"modal fade\" id=\"createSejourModal\" tabindex=\"-1\" aria-labelledby=\"createSejourTitle\" aria-hidden=\"true\">
  3728.   <div class=\"modal-dialog modal-xl modal-dialog-centered modal-dialog-scrollable\">
  3729.     <div class=\"modal-content\">
  3730.       <div class=\"modal-header border-bottom-0\">
  3731.         <div class=\"w-100\">
  3732.           <h5 id=\"createSejourTitle\" class=\"modal-title mb-2\">Créer mon espace séjour</h5>
  3733.           <div class=\"d-flex align-items-center gap-2\">
  3734.             <span id=\"stepLabel\" class=\"badge bg-primary\">Étape 1/2</span>
  3735.             <small class=\"text-muted\" id=\"stepDescription\">Choisissez votre profil</small>
  3736.           </div>
  3737.         </div>
  3738.         <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Fermer\"></button>
  3739.       </div>
  3740.       <div class=\"modal-body px-4\">
  3741.         <!-- ÉTAPE 1 : Choix du profil -->
  3742.         <div id=\"step1\" class=\"step-content\">
  3743.           <p class=\"lead text-center mb-4\">Sélectionnez l'option qui correspond à votre situation :</p>
  3744.           
  3745.           <div class=\"row g-3 mb-3\">
  3746.             <!-- Création simple -->
  3747.             <div class=\"col-md-4\">
  3748.               <a class=\"card h-100 border-2 hover-shadow text-decoration-none\" href=\"{{ path('app_creation_simple_creer') }}\">
  3749.                 <div class=\"card-body text-center p-4\">
  3750.                   <div class=\"fs-1 mb-3\">✨</div>
  3751.                   <h6 class=\"card-title fw-bold mb-2\">Créer un  espace séjour</h6>
  3752.                   <p class=\"card-text small text-muted mb-3\">
  3753.                     Créez un séjour unique. Paiement flexible : par les parents ou par la structure. Prix unique de 39€ par séjour.
  3754.                   </p>
  3755.                   <span class=\"badge bg-primary\">🎯 Flexible</span>
  3756.                 </div>
  3757.               </a>
  3758.             </div>
  3759.             <!-- Pack Annuel - 25 séjours -->
  3760.  <div class=\"col-md-4\">
  3761.               <a class=\"card h-100 border-2 hover-shadow text-decoration-none\" href=\"{{ path('pack_annuel_partenaires') }}\">
  3762.                 <div class=\"card-body text-center p-4\">
  3763.                   <div class=\"fs-1 mb-3\">📅</div>
  3764.                   <h6 class=\"card-title fw-bold mb-2\">En moyenne 25 séjours par an</h6>
  3765.                   <p class=\"card-text small text-muted mb-3\">
  3766.                     Pack Annuel idéal pour les structures organisant plusieurs séjours. Jusqu'à 25 séjours inclus, accompagnateurs illimités, support premium.
  3767.                   </p>
  3768.                   <span class=\"badge bg-info\">💼 Pack Annuel</span>
  3769.                 </div>
  3770.               </a>
  3771.             </div>
  3772.             <!-- Plus de 25 séjours - Partenaire -->
  3773.             <div class=\"col-md-4\">
  3774.               <a class=\"card h-100 border-2 hover-shadow text-decoration-none\" href=\"{{ path('nosPartenaires') }}\">
  3775.                 <div class=\"card-body text-center p-4\">
  3776.                   <div class=\"fs-1 mb-3\">🚀</div>
  3777.                   <h6 class=\"card-title fw-bold mb-2\">Plus de 25 séjours par an</h6>
  3778.                   <p class=\"card-text small text-muted mb-3\">
  3779.                     Devenez partenaire 5sur5 Séjour et bénéficiez d'une offre sur mesure avec tarif dégressif, accompagnement dédié et avantages exclusifs.
  3780.                   </p>
  3781.                   <span class=\"badge bg-purple\">🤝 Partenariat</span>
  3782.                 </div>
  3783.               </a>
  3784.             </div>
  3785.           </div>
  3786.           <!-- École publique - Plus discret -->
  3787.           <div class=\"text-center mt-4 pt-3 border-top\">
  3788.             <p class=\"small text-muted mb-2\">Vous êtes une école publique ?</p>
  3789.             <p class=\"small text-muted mb-2\">5sur5séjour offre son accès aux écoles publiques en France</p>
  3790.             <a href=\"{{ path('app_ecoles_publiques_creer') }}\" class=\"text-decoration-none d-inline-flex align-items-center gap-2 small fw-semibold text-primary\">
  3791.               <span>Accès gratuit à la plateforme</span>
  3792.               <span class=\"badge bg-success\">✅ Gratuit</span>
  3793.               <i class=\"bi bi-arrow-right\"></i>
  3794.             </a>
  3795.           </div>
  3796.         </div>
  3797.         <!-- ÉTAPE 2 : Formulaires selon le profil -->
  3798.         <div id=\"step2\" class=\"step-content d-none\">
  3799.           <!-- Panneau Partenaire -->
  3800.           <div id=\"pane-partenaire\" class=\"role-pane d-none\">
  3801.             <div class=\"alert alert-info mb-4\">
  3802.               <strong>🤝 Partenaire / Organisme</strong><br>
  3803.               <small>Démo 15–30 min · Accompagnement contrat & onboarding.</small>
  3804.             </div>
  3805.             <ul class=\"nav nav-tabs mb-3\" id=\"partenaireTabsNav\" role=\"tablist\">
  3806.               <li class=\"nav-item\" role=\"presentation\">
  3807.                 <button class=\"nav-link active\" id=\"tab-partenaire-demo\" data-bs-toggle=\"tab\" data-bs-target=\"#pane-partenaire-demo\" type=\"button\" role=\"tab\">
  3808.                   Réserver une démo
  3809.                 </button>
  3810.               </li>
  3811.               <li class=\"nav-item\" role=\"presentation\">
  3812.                 <button class=\"nav-link\" id=\"tab-partenaire-callback\" data-bs-toggle=\"tab\" data-bs-target=\"#pane-partenaire-callback\" type=\"button\" role=\"tab\">
  3813.                   Être rappelé
  3814.                 </button>
  3815.               </li>
  3816.             </ul>
  3817.             <div class=\"tab-content\">
  3818.               <!-- Calendly pour démo partenaire -->
  3819.               <div class=\"tab-pane fade show active\" id=\"pane-partenaire-demo\" role=\"tabpanel\">
  3820.                 <div class=\"text-center mb-3\">
  3821.                   <p class=\"text-muted small mb-2\">Choisissez un créneau pour une démo personnalisée</p>
  3822.                 </div>
  3823.                 <div class=\"ratio ratio-16x9 border rounded\">
  3824.                   <iframe data-src=\"https://calendly.com/5sur5sejour/demo\" title=\"Calendrier de réservation partenaire\" loading=\"lazy\" frameborder=\"0\"></iframe>
  3825.                 </div>
  3826.                 <p class=\"small text-muted mt-2 mb-0\">
  3827.                   <i class=\"bi bi-clock me-1\"></i> Créneau visio 15–30 min · 
  3828.                   <i class=\"bi bi-check-circle me-1\"></i> Accompagnement contrat ·
  3829.                   <i class=\"bi bi-shield-check me-1\"></i> 100% gratuit
  3830.                 </p>
  3831.               </div>
  3832.               <!-- Formulaire rappel partenaire -->
  3833.               <div class=\"tab-pane fade\" id=\"pane-partenaire-callback\" role=\"tabpanel\">
  3834.                 <form id=\"formPartenaire\" method=\"post\" action=\"/contact/partenaire\" class=\"needs-validation\" novalidate>
  3835.                   <input type=\"text\" name=\"website\" class=\"visually-hidden\" tabindex=\"-1\" autocomplete=\"off\">
  3836.                   
  3837.                   <div class=\"row g-3\">
  3838.                     <div class=\"col-md-6\">
  3839.                       <label class=\"form-label\">Nom & prénom <span class=\"text-danger\">*</span></label>
  3840.                       <input type=\"text\" class=\"form-control\" name=\"name\" required 
  3841.                              placeholder=\"Votre nom complet\">
  3842.                       <div class=\"invalid-feedback\">Veuillez saisir votre nom et prénom.</div>
  3843.                     </div>
  3844.                     <div class=\"col-md-6\">
  3845.                       <label class=\"form-label\">Structure <span class=\"text-danger\">*</span></label>
  3846.                       <input type=\"text\" class=\"form-control\" name=\"organization\" required 
  3847.                              placeholder=\"Nom de votre structure\">
  3848.                       <div class=\"invalid-feedback\">Veuillez saisir le nom de votre structure.</div>
  3849.                     </div>
  3850.                     <div class=\"col-md-6\">
  3851.                       <label class=\"form-label\">Email pro <span class=\"text-danger\">*</span></label>
  3852.                       <input type=\"email\" class=\"form-control\" name=\"email\" required 
  3853.                              placeholder=\"votre.email@structure.fr\">
  3854.                       <div class=\"invalid-feedback\">Veuillez saisir une adresse email valide.</div>
  3855.                     </div>
  3856.                     <div class=\"col-md-6\">
  3857.                       <label class=\"form-label\">Téléphone (optionnel)</label>
  3858.                       <input type=\"tel\" class=\"form-control\" name=\"telephone\" 
  3859.                              placeholder=\"06 12 34 56 78\">
  3860.                     </div>
  3861.                     <div class=\"col-12\">
  3862.                       <label class=\"form-label\">Message (optionnel)</label>
  3863.                       <textarea class=\"form-control\" name=\"message\" rows=\"3\"
  3864.                         placeholder=\"Décrivez brièvement vos besoins...\"></textarea>
  3865.                     </div>
  3866.                     <div class=\"col-12\">
  3867.                       <div class=\"form-check\">
  3868.                         <input class=\"form-check-input\" type=\"checkbox\" value=\"1\" id=\"consent_partenaire\" name=\"consent\" required>
  3869.                         <label class=\"form-check-label\" for=\"consent_partenaire\">
  3870.                           J'accepte d'être contacté (RGPD) <span class=\"text-danger\">*</span>
  3871.                         </label>
  3872.                         <div class=\"invalid-feedback\">Vous devez accepter d'être contacté.</div>
  3873.                       </div>
  3874.                     </div>
  3875.                     <div class=\"col-12 d-flex gap-2\">
  3876.                       <button type=\"submit\" class=\"btn btn-primary px-4\">
  3877.                         <i class=\"bi bi-telephone me-2\"></i>Être rappelé sous 24 h
  3878.                       </button>
  3879.                       <a class=\"btn btn-outline-secondary px-4\" href=\"mailto:contact@5sur5sejour.fr\">
  3880.                         Nous écrire
  3881.                       </a>
  3882.                     </div>
  3883.                   </div>
  3884.                 </form>
  3885.               </div>
  3886.             </div>
  3887.           </div>
  3888.           <!-- Panneau Création simple -->
  3889.           <div id=\"pane-autre\" class=\"role-pane d-none\">
  3890.             <div class=\"alert alert-primary mb-4\">
  3891.               <strong>✨ Créer un espace séjour</strong><br>
  3892.               <small>Type PP (Partenaire Payant) - Les familles peuvent activer Parent Premium (2,90 € / parent / séjour).</small>
  3893.             </div>
  3894.             <form id=\"formAutre\" method=\"post\" action=\"/Accompagnateur/register\" class=\"needs-validation\" novalidate>
  3895.               <input type=\"text\" name=\"website\" class=\"visually-hidden\" tabindex=\"-1\" autocomplete=\"off\">
  3896.               <input type=\"hidden\" name=\"type_user\" value=\"PP\">
  3897.               <input type=\"hidden\" name=\"connpay\" value=\"1\">
  3898.               
  3899.               <div class=\"row g-3\">
  3900.                 <div class=\"col-md-6\">
  3901.                   <label class=\"form-label\">Nom <span class=\"text-danger\">*</span></label>
  3902.                   <input type=\"text\" class=\"form-control\" name=\"nom_acc\" required 
  3903.                          placeholder=\"Votre nom\">
  3904.                   <div class=\"invalid-feedback\">Veuillez saisir votre nom.</div>
  3905.                 </div>
  3906.                 <div class=\"col-md-6\">
  3907.                   <label class=\"form-label\">Prénom <span class=\"text-danger\">*</span></label>
  3908.                   <input type=\"text\" class=\"form-control\" name=\"prenom_acc\" required 
  3909.                          placeholder=\"Votre prénom\">
  3910.                   <div class=\"invalid-feedback\">Veuillez saisir votre prénom.</div>
  3911.                 </div>
  3912.                 <div class=\"col-md-12\">
  3913.                   <label class=\"form-label\">Fonction <span class=\"text-danger\">*</span></label>
  3914.                   <select class=\"form-select\" name=\"fonction\" required>
  3915.                     <option value=\"\">Choisir votre fonction</option>
  3916.                     <option value=\"1\">Enseignant(e)</option>
  3917.                     <option value=\"2\">Principal(e)</option>
  3918.                     <option value=\"3\">Professeur(e)</option>
  3919.                     <option value=\"4\">CPE</option>
  3920.                     <option value=\"5\">Directeur(trice) d'école</option>
  3921.                     <option value=\"6\">Animateur(trice)</option>
  3922.                     <option value=\"7\">Directeur(trice) séjour</option>
  3923.                     <option value=\"8\">Directeur(trice) centre de loisirs / ALSH</option>
  3924.                     <option value=\"9\">Coordinateur(trice) enfance jeunesse</option>
  3925.                     <option value=\"10\">Educateur(trice)</option>
  3926.                     <option value=\"11\">Président(e)</option>
  3927.                     <option value=\"12\">Autre</option>
  3928.                   </select>
  3929.                   <div class=\"invalid-feedback\">Veuillez sélectionner votre fonction.</div>
  3930.                 </div>
  3931.                 <div class=\"col-md-12\">
  3932.                   <label class=\"form-label\">Structure / Organisme <span class=\"text-danger\">*</span></label>
  3933.                   <input type=\"text\" class=\"form-control\" name=\"etablisment\" required 
  3934.                          placeholder=\"Nom de votre structure ou organisation\">
  3935.                   <div class=\"invalid-feedback\">Veuillez saisir le nom de votre structure.</div>
  3936.                 </div>
  3937.                 <div class=\"col-md-12\">
  3938.                   <label class=\"form-label\">Adresse structure</label>
  3939.                   <input type=\"text\" class=\"form-control\" name=\"adressetablisment\" 
  3940.                          placeholder=\"Adresse de votre structure\">
  3941.                 </div>
  3942.                 <div class=\"col-md-6\">
  3943.                   <label class=\"form-label\">Code postal</label>
  3944.                   <input type=\"text\" class=\"form-control\" name=\"CODEpOSTALetablisment\" 
  3945.                          placeholder=\"Code postal\" maxlength=\"5\">
  3946.                 </div>
  3947.                 <div class=\"col-md-6\">
  3948.                   <label class=\"form-label\">Ville</label>
  3949.                   <input type=\"text\" class=\"form-control\" name=\"villeetablisment\" 
  3950.                          placeholder=\"Ville de votre structure\">
  3951.                 </div>
  3952.                 <div class=\"col-md-6\">
  3953.                   <label class=\"form-label\">N° de Téléphone mobile <span class=\"text-danger\">*</span></label>
  3954.                   <input type=\"tel\" class=\"form-control\" name=\"phone_acc\" required 
  3955.                          placeholder=\"06 12 34 56 78\" pattern=\"[0-9\\s\\+\\-\\(\\)]{10,}\">
  3956.                   <div class=\"invalid-feedback\">Veuillez saisir un numéro de téléphone valide.</div>
  3957.                 </div>
  3958.                 <div class=\"col-md-6\">
  3959.                   <label class=\"form-label\">Email <span class=\"text-danger\">*</span></label>
  3960.                   <input type=\"email\" class=\"form-control\" name=\"email\" required 
  3961.                          placeholder=\"votre.email@structure.fr\">
  3962.                   <div class=\"invalid-feedback\">Veuillez saisir une adresse email valide.</div>
  3963.                 </div>
  3964.                 <!-- Informations du séjour -->
  3965.                 <div class=\"col-12 mt-4\">
  3966.                   <h6 class=\"text-primary\">📍 Informations du séjour</h6>
  3967.                   <hr>
  3968.                 </div>
  3969.                 <div class=\"col-md-12\">
  3970.                   <label class=\"form-label\">Thème du séjour <span class=\"text-danger\">*</span></label>
  3971.                   <input type=\"text\" class=\"form-control\" name=\"theme_sejour\" required 
  3972.                          placeholder=\"Ex: Séjour ski, Camp d'été...\">
  3973.                   <div class=\"invalid-feedback\">Veuillez saisir le thème du séjour.</div>
  3974.                 </div>
  3975.                 <div class=\"col-md-12\">
  3976.                   <label class=\"form-label\">Adresse du séjour</label>
  3977.                   <input type=\"text\" class=\"form-control\" name=\"adress_sejour\" 
  3978.                          placeholder=\"Adresse du lieu de séjour\">
  3979.                 </div>
  3980.                 <div class=\"col-md-6\">
  3981.                   <label class=\"form-label\">Code postal</label>
  3982.                   <input type=\"text\" class=\"form-control\" name=\"codePostal\" 
  3983.                          placeholder=\"Code postal\" maxlength=\"5\">
  3984.                 </div>
  3985.                 <div class=\"col-md-6\">
  3986.                   <label class=\"form-label\">Pays <span class=\"text-danger\">*</span></label>
  3987.                   <select class=\"form-select\" name=\"pays\" required>
  3988.                     <option value=\"\">Choisir un pays</option>
  3989.                     <option value=\"France\" selected>France</option>
  3990.                     <option value=\"Belgique\">Belgique</option>
  3991.                     <option value=\"Suisse\">Suisse</option>
  3992.                     <option value=\"Espagne\">Espagne</option>
  3993.                     <option value=\"Italie\">Italie</option>
  3994.                     <option value=\"Allemagne\">Allemagne</option>
  3995.                     <option value=\"Royaume-Uni\">Royaume-Uni</option>
  3996.                     <option value=\"Autre\">Autre</option>
  3997.                   </select>
  3998.                   <div class=\"invalid-feedback\">Veuillez sélectionner un pays.</div>
  3999.                 </div>
  4000.                 <div class=\"col-md-6\">
  4001.                   <label class=\"form-label\">Ville du séjour</label>
  4002.                   <input type=\"text\" class=\"form-control\" name=\"ville\" 
  4003.                          placeholder=\"Ville du séjour\">
  4004.                 </div>
  4005.                 <div class=\"col-md-6\">
  4006.                   <label class=\"form-label\">Nombre de participants</label>
  4007.                   <input type=\"number\" class=\"form-control\" name=\"NbEnfant\" min=\"1\" 
  4008.                          placeholder=\"Nombre d'enfants\">
  4009.                 </div>
  4010.                 <div class=\"col-md-6\">
  4011.                   <label class=\"form-label\">Date début séjour <span class=\"text-danger\">*</span></label>
  4012.                   <input type=\"date\" class=\"form-control\" name=\"date_debut_sejour\" required>
  4013.                   <div class=\"invalid-feedback\">Veuillez saisir la date de début.</div>
  4014.                 </div>
  4015.                 <div class=\"col-md-6\">
  4016.                   <label class=\"form-label\">Date fin séjour <span class=\"text-danger\">*</span></label>
  4017.                   <input type=\"date\" class=\"form-control\" name=\"date_fin_sejour\" required>
  4018.                   <div class=\"invalid-feedback\">Veuillez saisir la date de fin.</div>
  4019.                 </div>
  4020.                 <div class=\"col-12 d-flex gap-2 mt-4\">
  4021.                   <button type=\"submit\" class=\"btn btn-primary px-4\">
  4022.                     <i class=\"bi bi-rocket me-2\"></i>Créer mon espace séjour (Type PP)
  4023.                   </button>
  4024.                   <a href=\"#\" class=\"btn btn-outline-secondary\" data-action=\"cta_demo\">
  4025.                     Besoin d'aide ? Démo
  4026.                   </a>
  4027.                 </div>
  4028.               </div>
  4029.             </form>
  4030.           </div>
  4031.           <button type=\"button\" id=\"backToStep1\" class=\"btn btn-link mt-3\">
  4032.             <i class=\"bi bi-arrow-left me-1\"></i> Retour au choix du profil
  4033.           </button>
  4034.         </div>
  4035.       </div>
  4036.       <div class=\"modal-footer border-top-0\">
  4037.         <p class=\"small text-muted mb-0\">Sans engagement · Données hébergées en France 🇫🇷</p>
  4038.       </div>
  4039.     </div>
  4040.   </div>
  4041. </div>
  4042. <style>
  4043. .select-role {
  4044.   cursor: pointer;
  4045.   transition: all 0.3s ease;
  4046. }
  4047. .select-role:hover,
  4048. .select-role:focus {
  4049.   transform: translateY(-5px);
  4050.   box-shadow: 0 4px 12px rgba(0,0,0,0.15);
  4051.   border-color: var(--bs-primary) !important;
  4052. }
  4053. .select-role:active {
  4054.   transform: translateY(-2px);
  4055. }
  4056. .hover-shadow {
  4057.   transition: box-shadow 0.3s ease;
  4058. }
  4059. .bg-purple {
  4060.   background-color: #6f42c1 !important;
  4061. }
  4062. </style>
  4063. <script>
  4064.   // Protection contre les erreurs de la toolbar Symfony
  4065.   (function() {
  4066.     // Désactiver complètement Sfjs
  4067.     window.Sfjs = {
  4068.       loadToolbar: function() { console.log('Sfjs.loadToolbar désactivé'); },
  4069.       showToolbar: function() { console.log('Sfjs.showToolbar désactivé'); },
  4070.       hideToolbar: function() { console.log('Sfjs.hideToolbar désactivé'); },
  4071.       initToolbar: function() { console.log('Sfjs.initToolbar désactivé'); }
  4072.     };
  4073.     
  4074.     // Désactiver les requêtes vers _wdt si elles échouent
  4075.     const originalFetch = window.fetch;
  4076.     window.fetch = function(...args) {
  4077.       const url = args[0];
  4078.       if (typeof url === 'string' && url.includes('/_wdt/')) {
  4079.         console.warn('Requête vers _wdt bloquée:', url);
  4080.         return Promise.reject(new Error('Toolbar Symfony désactivée'));
  4081.       }
  4082.       return originalFetch.apply(this, args);
  4083.     };
  4084.     
  4085.     // Désactiver XMLHttpRequest vers _wdt
  4086.     const originalXHROpen = XMLHttpRequest.prototype.open;
  4087.     const originalXHRSend = XMLHttpRequest.prototype.send;
  4088.     
  4089.     XMLHttpRequest.prototype.open = function(method, url, ...args) {
  4090.       this._url = url; // Stocker l'URL pour vérification dans send
  4091.       if (typeof url === 'string' && url.includes('/_wdt/')) {
  4092.         console.warn('Requête XHR vers _wdt bloquée:', url);
  4093.         this._blocked = true;
  4094.         return;
  4095.       }
  4096.       this._blocked = false;
  4097.       return originalXHROpen.apply(this, [method, url, ...args]);
  4098.     };
  4099.     
  4100.     XMLHttpRequest.prototype.send = function(payload) {
  4101.       if (this._blocked) {
  4102.         console.warn('Envoi XHR bloqué pour:', this._url);
  4103.         return; // Ne pas envoyer si bloqué
  4104.       }
  4105.       return originalXHRSend.apply(this, arguments);
  4106.     };
  4107.   })();
  4108.   // Supprimer complètement la toolbar Symfony du DOM
  4109.   function removeSymfonyToolbar() {
  4110.     const toolbar = document.querySelector('.sf-toolbar');
  4111.     if (toolbar) {
  4112.       toolbar.remove();
  4113.       console.log('Toolbar Symfony supprimée du DOM');
  4114.     }
  4115.     
  4116.     const clearer = document.querySelector('.sf-toolbar-clearer');
  4117.     if (clearer) {
  4118.       clearer.remove();
  4119.     }
  4120.     
  4121.     const minitoolbar = document.querySelector('.sf-minitoolbar');
  4122.     if (minitoolbar) {
  4123.       minitoolbar.remove();
  4124.     }
  4125.   }
  4126.   
  4127.   // Supprimer immédiatement
  4128.   removeSymfonyToolbar();
  4129.   
  4130.   // Observer pour supprimer la toolbar dès qu'elle apparaît
  4131.   const observer = new MutationObserver(function(mutations) {
  4132.     mutations.forEach(function(mutation) {
  4133.       if (mutation.type === 'childList') {
  4134.         mutation.addedNodes.forEach(function(node) {
  4135.           if (node.nodeType === 1) { // Element node
  4136.             if (node.classList && (node.classList.contains('sf-toolbar') || node.classList.contains('sf-minitoolbar'))) {
  4137.               node.remove();
  4138.               console.log('Toolbar Symfony supprimée par l\\'observer');
  4139.             }
  4140.             // Vérifier aussi les enfants
  4141.             const toolbars = node.querySelectorAll && node.querySelectorAll('.sf-toolbar, .sf-minitoolbar, .sf-toolbar-clearer');
  4142.             if (toolbars) {
  4143.               toolbars.forEach(tb => tb.remove());
  4144.             }
  4145.           }
  4146.         });
  4147.       }
  4148.     });
  4149.   });
  4150.   
  4151.   observer.observe(document.body, {
  4152.     childList: true,
  4153.     subtree: true
  4154.   });
  4155.   
  4156.   // Ajouter du CSS pour masquer la toolbar Symfony
  4157.   const style = document.createElement('style');
  4158.   style.textContent = `
  4159.     .sf-toolbar, .sf-toolbar-clearer, .sf-minitoolbar { 
  4160.       display: none !important; 
  4161.       visibility: hidden !important;
  4162.       opacity: 0 !important;
  4163.       height: 0 !important;
  4164.       width: 0 !important;
  4165.       overflow: hidden !important;
  4166.     }
  4167.   `;
  4168.   document.head.appendChild(style);
  4169.   // Masquer la toolbar Symfony si elle cause des problèmes
  4170.   document.addEventListener('DOMContentLoaded', function() {
  4171.     // Masquer la toolbar Symfony après 2 secondes si elle n'est pas chargée
  4172.     setTimeout(() => {
  4173.       const toolbar = document.querySelector('.sf-toolbar');
  4174.       if (toolbar && toolbar.classList.contains('sf-display-none')) {
  4175.         toolbar.style.display = 'none';
  4176.         console.log('Toolbar Symfony masquée pour éviter les erreurs 404');
  4177.       }
  4178.     }, 2000);
  4179.     // Ouvre la modale avec l'onglet adapté + pré-remplissage
  4180.     document.addEventListener('click', (e) => {
  4181.     // Éviter les conflits avec la toolbar Symfony
  4182.     if (e.target.closest('.sf-toolbar') || e.target.closest('[id^=\"sf\"]')) {
  4183.       return;
  4184.     }
  4185.     
  4186.     const a = e.target.closest('a[data-action=\"cta_demo\"], a[data-action=\"cta_expert\"]');
  4187.     if (!a) return;
  4188.     e.preventDefault();
  4189.     const isExpert = a.dataset.action === 'cta_expert';
  4190.     const pack = a.dataset.pack || '';
  4191.     document.getElementById('demoTitle').textContent = isExpert ? 'Parler à un expert' : 'Demander une démo guidée';
  4192.     document.getElementById('objet').value = isExpert ? 'expert' : 'demo';
  4193.     document.getElementById('topic').value = isExpert ? 'expert' : 'demo';
  4194.     document.getElementById('pack').value  = pack;
  4195.     // Onglet par défaut : expert => rappel / demo => calendrier
  4196.     const triggerId = isExpert ? 'tab-callback' : 'tab-calendar';
  4197.     const tabElement = document.getElementById(triggerId);
  4198.     
  4199.     if (tabElement) {
  4200.       // Désactiver tous les onglets
  4201.       document.querySelectorAll('#demoTabs .nav-link').forEach(tab => {
  4202.         tab.classList.remove('active');
  4203.         tab.setAttribute('aria-selected', 'false');
  4204.       });
  4205.       
  4206.       // Désactiver tous les panneaux
  4207.       document.querySelectorAll('.tab-pane').forEach(pane => {
  4208.         pane.classList.remove('show', 'active');
  4209.       });
  4210.       
  4211.       // Activer l'onglet sélectionné
  4212.       tabElement.classList.add('active');
  4213.       tabElement.setAttribute('aria-selected', 'true');
  4214.       
  4215.       // Activer le panneau correspondant
  4216.       const targetPane = document.querySelector(tabElement.getAttribute('data-bs-target'));
  4217.       if (targetPane) {
  4218.         targetPane.classList.add('show', 'active');
  4219.       }
  4220.     }
  4221.     const modal = bootstrap.Modal.getOrCreateInstance(document.getElementById('demoModal'));
  4222.     modal.show();
  4223.   });
  4224.   // Validation form + anti double-submit pour le formulaire de démo
  4225.   (function () {
  4226.     const form = document.getElementById('contactForm');
  4227.     const btn  = document.getElementById('submitBtn');
  4228.     if (!form || !btn) return;
  4229.     // Protection contre les soumissions multiples
  4230.     let isSubmitting = false;
  4231.     
  4232.     // Nettoyer les classes d'erreur quand l'utilisateur tape
  4233.     form.addEventListener('input', function(e) {
  4234.       if (e.target.classList.contains('is-invalid')) {
  4235.         e.target.classList.remove('is-invalid');
  4236.       }
  4237.     });
  4238.     
  4239.     form.addEventListener('submit', function(e){
  4240.       e.preventDefault(); // Toujours empêcher la soumission normale
  4241.       
  4242.       // Éviter les soumissions multiples
  4243.       if (isSubmitting) return;
  4244.       isSubmitting = true;
  4245.       
  4246.       // Nettoyer les messages précédents
  4247.       const existingAlerts = form.parentNode.querySelectorAll('.alert');
  4248.       existingAlerts.forEach(alert => alert.remove());
  4249.       
  4250.       if (!form.checkValidity()) {
  4251.         e.stopPropagation();
  4252.         form.classList.add('was-validated');
  4253.         
  4254.         // Afficher les messages d'erreur pour chaque champ invalide
  4255.         const invalidFields = form.querySelectorAll(':invalid');
  4256.         invalidFields.forEach(field => {
  4257.           field.classList.add('is-invalid');
  4258.         });
  4259.         
  4260.         // Afficher un message d'erreur général
  4261.         const errorAlert = document.createElement('div');
  4262.         errorAlert.className = 'alert alert-warning mt-3';
  4263.         errorAlert.innerHTML = `
  4264.           <div class=\"d-flex align-items-center\">
  4265.             <i class=\"bi bi-exclamation-triangle-fill me-2\"></i>
  4266.             <div>
  4267.               <strong>Veuillez corriger les erreurs :</strong><br>
  4268.               Tous les champs marqués d'un astérisque (*) sont obligatoires.
  4269.             </div>
  4270.           </div>
  4271.         `;
  4272.         form.parentNode.insertBefore(errorAlert, form.nextSibling);
  4273.         
  4274.         // Supprimer le message après 5 secondes
  4275.         setTimeout(() => {
  4276.           if (errorAlert.parentNode) {
  4277.             errorAlert.parentNode.removeChild(errorAlert);
  4278.           }
  4279.         }, 5000);
  4280.         
  4281.         isSubmitting = false;
  4282.         return;
  4283.       } 
  4284.       // Désactiver le bouton pendant l'envoi
  4285.       btn.disabled = true; 
  4286.       const originalText = btn.textContent;
  4287.       btn.textContent = 'Envoi en cours…';
  4288.       // Récupérer les données du formulaire
  4289.       const formData = new FormData(form);
  4290.       
  4291.       // Debug : afficher les données envoyées
  4292.       console.log('=== DEBUG FORMULAIRE ===');
  4293.       console.log('Données du formulaire :');
  4294.       const formDataObj = {};
  4295.       for (let [key, value] of formData.entries()) {
  4296.         console.log(key + ': \"' + value + '\"');
  4297.         formDataObj[key] = value;
  4298.       }
  4299.       console.log('Objet complet:', formDataObj);
  4300.       
  4301.       // Vérifier les champs obligatoires
  4302.       const requiredFields = ['name', 'organization', 'email', 'telephone', 'sejours_count', 'consent'];
  4303.       const missingFields = [];
  4304.       requiredFields.forEach(field => {
  4305.         if (!formDataObj[field] || formDataObj[field].trim() === '') {
  4306.           missingFields.push(field);
  4307.         }
  4308.       });
  4309.       
  4310.       if (missingFields.length > 0) {
  4311.         console.error('Champs manquants:', missingFields);
  4312.         alert('Champs manquants: ' + missingFields.join(', '));
  4313.         isSubmitting = false;
  4314.         return;
  4315.       }
  4316.       
  4317.       console.log('Tous les champs obligatoires sont remplis ✅');
  4318.       // Envoyer la requête AJAX
  4319.       fetch(form.action, {
  4320.         method: 'POST',
  4321.         body: formData,
  4322.         headers: {
  4323.           'X-Requested-With': 'XMLHttpRequest'
  4324.         }
  4325.       })
  4326.       .then(response => response.json())
  4327.       .then(data => {
  4328.         if (data.success) {
  4329.           // Afficher le message de succès
  4330.           const successAlert = document.createElement('div');
  4331.           successAlert.className = 'alert alert-success mt-3';
  4332.           successAlert.innerHTML = `
  4333.             <div class=\"d-flex align-items-center\">
  4334.               <i class=\"bi bi-check-circle-fill me-2\"></i>
  4335.               <div>
  4336.                 <strong>Demande envoyée !</strong><br>
  4337.                 \${data.message}
  4338.               </div>
  4339.             </div>
  4340.           `;
  4341.           form.parentNode.insertBefore(successAlert, form.nextSibling);
  4342.           
  4343.           // Réinitialiser le formulaire
  4344.           form.reset();
  4345.           form.classList.remove('was-validated');
  4346.           
  4347.           // Fermer le modal après 3 secondes
  4348.           setTimeout(() => {
  4349.             const modal = bootstrap.Modal.getInstance(document.getElementById('demoModal'));
  4350.             if (modal) modal.hide();
  4351.           }, 3000);
  4352.         } else {
  4353.           // Afficher le message d'erreur
  4354.           const errorAlert = document.createElement('div');
  4355.           errorAlert.className = 'alert alert-danger mt-3';
  4356.           errorAlert.innerHTML = `
  4357.             <div class=\"d-flex align-items-center\">
  4358.               <i class=\"bi bi-exclamation-triangle-fill me-2\"></i>
  4359.               <div>
  4360.                 <strong>Erreur :</strong><br>
  4361.                 \${data.message}
  4362.               </div>
  4363.             </div>
  4364.           `;
  4365.           form.parentNode.insertBefore(errorAlert, form.nextSibling);
  4366.           
  4367.           // Supprimer le message d'erreur après 8 secondes
  4368.           setTimeout(() => {
  4369.             if (errorAlert.parentNode) {
  4370.               errorAlert.parentNode.removeChild(errorAlert);
  4371.             }
  4372.           }, 8000);
  4373.         }
  4374.       })
  4375.       .catch(error => {
  4376.         console.error('Erreur:', error);
  4377.         const errorAlert = document.createElement('div');
  4378.         errorAlert.className = 'alert alert-danger mt-3';
  4379.         errorAlert.innerHTML = `
  4380.           <div class=\"d-flex align-items-center\">
  4381.             <i class=\"bi bi-exclamation-triangle-fill me-2\"></i>
  4382.             <div>
  4383.               <strong>Erreur technique :</strong><br>
  4384.               Une erreur est survenue lors de l'envoi. Veuillez réessayer plus tard.
  4385.             </div>
  4386.           </div>
  4387.         `;
  4388.         form.parentNode.insertBefore(errorAlert, form.nextSibling);
  4389.         
  4390.         // Supprimer le message d'erreur après 10 secondes
  4391.         setTimeout(() => {
  4392.           if (errorAlert.parentNode) {
  4393.             errorAlert.parentNode.removeChild(errorAlert);
  4394.           }
  4395.         }, 10000);
  4396.       })
  4397.       .finally(() => {
  4398.         // Réactiver le bouton et le flag de soumission
  4399.         btn.disabled = false;
  4400.         btn.textContent = originalText;
  4401.         isSubmitting = false;
  4402.         
  4403.         // Supprimer les anciennes alertes après 5 secondes
  4404.         setTimeout(() => {
  4405.           const alerts = form.parentNode.querySelectorAll('.alert');
  4406.           alerts.forEach(alert => alert.remove());
  4407.         }, 5000);
  4408.       });
  4409.     });
  4410.   })();
  4411.   // ===== GESTION MODALE \"CRÉER MON SÉJOUR\" =====
  4412.   const createSejourModal = document.getElementById('createSejourModal');
  4413.   const step1 = document.getElementById('step1');
  4414.   const step2 = document.getElementById('step2');
  4415.   const stepLabel = document.getElementById('stepLabel');
  4416.   const stepDescription = document.getElementById('stepDescription');
  4417.   const backToStep1Btn = document.getElementById('backToStep1');
  4418.   
  4419.   let currentRole = null;
  4420.   let isSubmittingCreate = false;
  4421.   // Fonction helper pour le tracking GA4
  4422.   function trackEvent(eventName, params = {}) {
  4423.     if (typeof gtag === 'function') {
  4424.       gtag('event', eventName, params);
  4425.       console.log('📊 GA4 Event:', eventName, params);
  4426.     }
  4427.   }
  4428.   // Reset de la modale à l'ouverture
  4429.   createSejourModal.addEventListener('show.bs.modal', function () {
  4430.     // Reset aux valeurs initiales
  4431.     step1.classList.remove('d-none');
  4432.     step2.classList.add('d-none');
  4433.     stepLabel.textContent = 'Étape 1/2';
  4434.     stepDescription.textContent = 'Choisissez votre profil';
  4435.     currentRole = null;
  4436.     
  4437.     // Masquer tous les panneaux de formulaire
  4438.     document.querySelectorAll('.role-pane').forEach(pane => pane.classList.add('d-none'));
  4439.     
  4440.     // Reset de tous les formulaires
  4441.     ['formEcole', 'formPartenaire', 'formAutre'].forEach(formId => {
  4442.       const form = document.getElementById(formId);
  4443.       if (form) {
  4444.         form.reset();
  4445.         form.classList.remove('was-validated');
  4446.       }
  4447.     });
  4448.     // Focus sur le titre de la modale
  4449.     setTimeout(() => {
  4450.       document.getElementById('createSejourTitle').focus();
  4451.     }, 300);
  4452.   });
  4453.   // Gestion du clic sur les cartes de sélection de rôle
  4454.   document.querySelectorAll('.select-role').forEach(card => {
  4455.     card.addEventListener('click', function() {
  4456.       const role = this.dataset.role;
  4457.       selectRole(role);
  4458.     });
  4459.     
  4460.     // Support du clavier
  4461.     card.addEventListener('keypress', function(e) {
  4462.       if (e.key === 'Enter' || e.key === ' ') {
  4463.         e.preventDefault();
  4464.         const role = this.dataset.role;
  4465.         selectRole(role);
  4466.       }
  4467.     });
  4468.   });
  4469.   function selectRole(role) {
  4470.     currentRole = role;
  4471.     
  4472.     // Track event GA4
  4473.     trackEvent('step_select_role', { role: role });
  4474.     
  4475.     // Si école publique → Redirection directe vers /Accompagnateur/login avec type EF
  4476.     if (role === 'ecole_publique') {
  4477.       // Fermer la modale
  4478.       bootstrap.Modal.getInstance(createSejourModal)?.hide();
  4479.       
  4480.       // Rediriger vers la page de login avec le paramètre type EF et source
  4481.       window.location.href = '/Accompagnateur/login?type=EF&from=modal';
  4482.       return;
  4483.     }
  4484.     
  4485.     // Passage à l'étape 2 pour les autres profils
  4486.     step1.classList.add('d-none');
  4487.     step2.classList.remove('d-none');
  4488.     stepLabel.textContent = 'Étape 2/2';
  4489.     
  4490.     // Afficher le panneau correspondant
  4491.     document.querySelectorAll('.role-pane').forEach(pane => pane.classList.add('d-none'));
  4492.     
  4493.     let roleLabel = '';
  4494.     if (role === 'partenaire') {
  4495.       document.getElementById('pane-partenaire').classList.remove('d-none');
  4496.       roleLabel = 'Partenaire / Organisme';
  4497.       // Lazy load Calendly pour le partenaire
  4498.       lazyLoadCalendlyIfNeeded('#pane-partenaire-demo iframe');
  4499.     } else if (role === 'autre') {
  4500.       document.getElementById('pane-autre').classList.remove('d-none');
  4501.       roleLabel = 'Création simple';
  4502.       setTimeout(() => document.querySelector('#pane-autre input')?.focus(), 300);
  4503.     }
  4504.     
  4505.     stepDescription.textContent = roleLabel;
  4506.   }
  4507.   // Retour à l'étape 1
  4508.   backToStep1Btn.addEventListener('click', function() {
  4509.     step1.classList.remove('d-none');
  4510.     step2.classList.add('d-none');
  4511.     stepLabel.textContent = 'Étape 1/2';
  4512.     stepDescription.textContent = 'Choisissez votre profil';
  4513.     currentRole = null;
  4514.   });
  4515.   // Lazy load Calendly
  4516.   function lazyLoadCalendlyIfNeeded(selector) {
  4517.     const iframe = document.querySelector(selector);
  4518.     if (iframe && iframe.hasAttribute('data-src') && !iframe.src) {
  4519.       iframe.src = iframe.getAttribute('data-src');
  4520.       console.log('📅 Calendly chargé:', iframe.src);
  4521.     }
  4522.   }
  4523.   // Lazy load Calendly pour modale démo (onglet calendrier)
  4524.   const tabCalendar = document.getElementById('tab-calendar');
  4525.   if (tabCalendar) {
  4526.     tabCalendar.addEventListener('shown.bs.tab', function() {
  4527.       lazyLoadCalendlyIfNeeded('#pane-calendar iframe');
  4528.     });
  4529.   }
  4530.   // Lazy load Calendly pour modale créer séjour (onglet demo partenaire)
  4531.   const tabPartenaireDemo = document.getElementById('tab-partenaire-demo');
  4532.   if (tabPartenaireDemo) {
  4533.     tabPartenaireDemo.addEventListener('shown.bs.tab', function() {
  4534.       lazyLoadCalendlyIfNeeded('#pane-partenaire-demo iframe');
  4535.     });
  4536.   }
  4537.   // Gestion des radios \"qui paie\" avec tracking
  4538.   document.querySelectorAll('input[name=\"payer\"]').forEach(radio => {
  4539.     radio.addEventListener('change', function() {
  4540.       trackEvent('toggle_payer', { who_pays: this.value });
  4541.     });
  4542.   });
  4543.   // Fonction générique de soumission de formulaire avec AJAX
  4544.   function setupFormSubmission(formId, onSuccess) {
  4545.     const form = document.getElementById(formId);
  4546.     if (!form) return;
  4547.     form.addEventListener('submit', function(e) {
  4548.       e.preventDefault();
  4549.       // Éviter les doubles soumissions
  4550.       if (isSubmittingCreate) {
  4551.         return;
  4552.       }
  4553.       // Valider le formulaire
  4554.       if (!form.checkValidity()) {
  4555.         form.classList.add('was-validated');
  4556.         
  4557.         // Afficher un message d'avertissement
  4558.         const warningAlert = document.createElement('div');
  4559.         warningAlert.className = 'alert alert-warning mt-3';
  4560.         warningAlert.innerHTML = `
  4561.           <div class=\"d-flex align-items-center\">
  4562.             <i class=\"bi bi-exclamation-triangle-fill me-2\"></i>
  4563.             <div>
  4564.               <strong>Veuillez corriger les erreurs :</strong><br>
  4565.               Tous les champs marqués d'un astérisque (*) sont obligatoires.
  4566.             </div>
  4567.           </div>
  4568.         `;
  4569.         form.parentNode.insertBefore(warningAlert, form.nextSibling);
  4570.         setTimeout(() => warningAlert.remove(), 5000);
  4571.         return;
  4572.       }
  4573.       isSubmittingCreate = true;
  4574.       // Track event GA4
  4575.       trackEvent('form_submit', { form_id: formId });
  4576.       // Désactiver le bouton
  4577.       const btn = form.querySelector('button[type=\"submit\"]');
  4578.       btn.disabled = true;
  4579.       const originalText = btn.textContent;
  4580.       btn.innerHTML = '<span class=\"spinner-border spinner-border-sm me-2\"></span>Envoi en cours…';
  4581.       // Soumettre via fetch
  4582.       const formData = new FormData(form);
  4583.       fetch(form.action, {
  4584.         method: 'POST',
  4585.         body: formData,
  4586.         headers: {
  4587.           'X-Requested-With': 'XMLHttpRequest'
  4588.         }
  4589.       })
  4590.       .then(response => response.json())
  4591.       .then(data => {
  4592.         if (data.idSejour) {
  4593.           // Succès ! Le séjour a été créé
  4594.           
  4595.           // Track event GA4 de succès
  4596.           trackEvent('create_sejour_success', {
  4597.             role: currentRole,
  4598.             sejour_id: data.idSejour,
  4599.             code_sejour: data.codeSejour || 'N/A'
  4600.           });
  4601.           // Afficher le message de succès
  4602.           const successAlert = document.createElement('div');
  4603.           successAlert.className = 'alert alert-success mt-3';
  4604.           successAlert.innerHTML = `
  4605.             <div class=\"d-flex align-items-center\">
  4606.               <i class=\"bi bi-check-circle-fill me-2\"></i>
  4607.               <div>
  4608.                 <strong>✅ Séjour créé avec succès !</strong><br>
  4609.                 \${data.codeSejour ? 'Code séjour : <strong>' + data.codeSejour + '</strong><br>' : ''}
  4610.                 Vous allez être redirigé vers votre espace...
  4611.               </div>
  4612.             </div>
  4613.           `;
  4614.           form.parentNode.insertBefore(successAlert, form.nextSibling);
  4615.           // Reset le formulaire
  4616.           form.reset();
  4617.           form.classList.remove('was-validated');
  4618.           // Rediriger après 2 secondes vers l'espace accompagnateur
  4619.           setTimeout(() => {
  4620.        
  4621.           }, 2000);
  4622.           // Callback optionnel
  4623.           if (onSuccess) onSuccess(data);
  4624.         } else if (data.success === false) {
  4625.           // Erreur métier
  4626.           const errorAlert = document.createElement('div');
  4627.           errorAlert.className = 'alert alert-danger mt-3';
  4628.           errorAlert.innerHTML = `
  4629.             <div class=\"d-flex align-items-center\">
  4630.               <i class=\"bi bi-x-circle-fill me-2\"></i>
  4631.               <div>
  4632.                 <strong>Erreur :</strong><br>
  4633.                 \${data.message || 'Une erreur est survenue lors de la création du séjour.'}
  4634.               </div>
  4635.             </div>
  4636.           `;
  4637.           form.parentNode.insertBefore(errorAlert, form.nextSibling);
  4638.           setTimeout(() => errorAlert.remove(), 7000);
  4639.         } else {
  4640.           // Réponse inattendue
  4641.           console.warn('Réponse inattendue:', data);
  4642.           const warningAlert = document.createElement('div');
  4643.           warningAlert.className = 'alert alert-warning mt-3';
  4644.           warningAlert.innerHTML = `
  4645.             <div class=\"d-flex align-items-center\">
  4646.               <i class=\"bi bi-exclamation-triangle-fill me-2\"></i>
  4647.               <div>
  4648.                 <strong>Attention :</strong><br>
  4649.                 La création du séjour a peut-être réussi. Vérifiez votre espace.
  4650.               </div>
  4651.             </div>
  4652.           `;
  4653.           form.parentNode.insertBefore(warningAlert, form.nextSibling);
  4654.           setTimeout(() => {
  4655.             window.location.href = '/Accompagnateur/login';
  4656.           }, 3000);
  4657.         }
  4658.       })
  4659.       .catch(error => {
  4660.         console.error('Erreur:', error);
  4661.         const errorAlert = document.createElement('div');
  4662.         errorAlert.className = 'alert alert-danger mt-3';
  4663.         errorAlert.innerHTML = `
  4664.           <div class=\"d-flex align-items-center\">
  4665.             <i class=\"bi bi-x-circle-fill me-2\"></i>
  4666.             <div>
  4667.               <strong>Erreur technique :</strong><br>
  4668.               Une erreur réseau est survenue. Veuillez réessayer plus tard.
  4669.             </div>
  4670.           </div>
  4671.         `;
  4672.         form.parentNode.insertBefore(errorAlert, form.nextSibling);
  4673.         setTimeout(() => errorAlert.remove(), 7000);
  4674.       })
  4675.       .finally(() => {
  4676.         btn.disabled = false;
  4677.         btn.innerHTML = originalText;
  4678.         isSubmittingCreate = false;
  4679.       });
  4680.     });
  4681.   }
  4682.   // Setup tous les formulaires de la modale \"Créer mon séjour\"
  4683.   // formEcole supprimé car redirection directe vers /Accompagnateur/login
  4684.   setupFormSubmission('formPartenaire');
  4685.   setupFormSubmission('formAutre');
  4686.   // Délégation d'événements pour tous les CTA avec data-action
  4687.   document.addEventListener('click', function(e) {
  4688.     // Éviter les conflits avec la toolbar Symfony
  4689.     if (e.target.closest('.sf-toolbar') || e.target.closest('[id^=\"sf\"]')) {
  4690.       return;
  4691.     }
  4692.     const target = e.target.closest('[data-action]');
  4693.     if (!target) return;
  4694.     const action = target.dataset.action;
  4695.     const pack = target.dataset.pack || '';
  4696.     // Track event GA4
  4697.     trackEvent('cta_open_modal', { action: action, pack: pack });
  4698.     if (action === 'cta_create') {
  4699.       // Ouvrir la modale \"Créer mon séjour\"
  4700.       e.preventDefault();
  4701.       const modal = new bootstrap.Modal(createSejourModal);
  4702.       modal.show();
  4703.     } else if (action === 'cta_demo' || action === 'cta_expert') {
  4704.       // Ouvrir la modale demo/expert existante
  4705.       e.preventDefault();
  4706.       const demoModal = document.getElementById('demoModal');
  4707.       const modal = new bootstrap.Modal(demoModal);
  4708.       
  4709.       const isExpert = action === 'cta_expert';
  4710.       
  4711.       // Changer le titre
  4712.       document.getElementById('demoTitle').textContent = isExpert ? 'Parler à un expert' : 'Demander une démo guidée';
  4713.       
  4714.       // Pré-remplir les champs cachés
  4715.       document.getElementById('objet').value = isExpert ? 'expert' : 'demo';
  4716.       document.getElementById('topic').value = isExpert ? 'expert' : 'demo';
  4717.       document.getElementById('pack').value = pack;
  4718.       
  4719.       // Activer le bon onglet
  4720.       const tabCalendar = document.getElementById('tab-calendar');
  4721.       const tabCallback = document.getElementById('tab-callback');
  4722.       const paneCalendar = document.getElementById('pane-calendar');
  4723.       const paneCallback = document.getElementById('pane-callback');
  4724.       
  4725.       if (isExpert) {
  4726.         // Expert → Onglet \"Être rappelé\"
  4727.         tabCalendar.classList.remove('active');
  4728.         tabCallback.classList.add('active');
  4729.         paneCalendar.classList.remove('show', 'active');
  4730.         paneCallback.classList.add('show', 'active');
  4731.       } else {
  4732.         // Démo → Onglet \"Réserver un créneau\"
  4733.         tabCallback.classList.remove('active');
  4734.         tabCalendar.classList.add('active');
  4735.         paneCallback.classList.remove('show', 'active');
  4736.         paneCalendar.classList.add('show', 'active');
  4737.         
  4738.         // Lazy load Calendly
  4739.         lazyLoadCalendlyIfNeeded('#pane-calendar iframe');
  4740.       }
  4741.       
  4742.       modal.show();
  4743.     }
  4744.   });
  4745.   }); // Fin du DOMContentLoaded
  4746. </script>
  4747.     <!-- ======= Site Wrap =======-->
  4748.     <div class=\"site-wrap\">
  4749.       
  4750.       <!-- ======= Header =======-->
  4751.       <header class=\"fbs__net-navbar navbar navbar-expand-lg dark\" aria-label=\"freebootstrap.net navbar\">
  4752.         <div class=\"container d-flex align-items-center justify-content-between\">
  4753.           
  4754.           <!-- Start Logo-->
  4755.           <a class=\"navbar-brand w-auto\" href=\"#\">
  4756.             <img class=\"logo dark img-fluid\" src=\"{{ asset('Accueil/imagesAccueil/logoHeader.png') }}\" alt=\"5sur5séjour logo\" style=\"height: 65px;\">
  4757.           </a>
  4758.           <!-- End Logo-->
  4759.           
  4760.           <!-- Start offcanvas-->
  4761.           <div class=\"offcanvas offcanvas-start w-75\" id=\"fbs__net-navbars\" tabindex=\"-1\" aria-labelledby=\"fbs__net-navbarsLabel\">
  4762.             
  4763.             <div class=\"offcanvas-header\">
  4764.               <div class=\"offcanvas-header-logo\">
  4765.                 <a class=\"logo-link\" id=\"fbs__net-navbarsLabel\" href=\"#\">
  4766.                   <img class=\"logo light img-fluid\" src=\"{{ asset('Accueil/imagesAccueil/logoHeader.png') }}\" alt=\"5sur5séjour logo\" style=\"height: 60px;\">
  4767.                 </a>
  4768.               </div>
  4769.               <button class=\"btn-close btn-close-black\" type=\"button\" data-bs-dismiss=\"offcanvas\" aria-label=\"Close\"></button>
  4770.             </div>
  4771.             
  4772.             <div class=\"offcanvas-body align-items-lg-center\">
  4773.               
  4774.               <ul class=\"navbar-nav nav me-auto ps-lg-5 mb-2 mb-lg-0\">
  4775.                 <li class=\"nav-item\"><a class=\"nav-link scroll-link\" href=\"#about\">A propos</a></li>
  4776.                 <li class=\"nav-item\"><a class=\"nav-link scroll-link\" href=\"#how-it-works\">Comment ça marche</a></li>
  4777.                 <li class=\"nav-item\"><a class=\"nav-link scroll-link\" href=\"#pricing\">Nos offres</a></li>
  4778.                 <li class=\"nav-item\"><a class=\"nav-link scroll-link\" href=\"#contact\">Contact</a></li>
  4779.                 <li class=\"nav-item dropdown\">
  4780.                   <a class=\"nav-link dropdown-toggle\" href=\"#\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">Nos produits <i class=\"bi bi-chevron-down\"></i></a>
  4781.                   <ul class=\"dropdown-menu\">
  4782.                     <li class=\"nav-item\"><a class=\"nav-link\" href=\"{{ path('pack_annuel_partenaires') }}\">Pack Annuel Partenaires</a></li>
  4783.                     <li><hr class=\"dropdown-divider\"></li>
  4784.                                                 {% for produit in produit %}
  4785.                                                     {% if produit.labeleType!=\"Connexion\" %}
  4786.                                        <li class=\"nav-item\"><a class=\"nav-link scroll-link\" href=\"{{path('album',{'id':produit.labeleType})}}\"> {{produit.labeleType}}</a></li>
  4787.                                                     {% endif %}
  4788.                                                 {% endfor %}
  4789.                    
  4790.                   </ul>
  4791.                 </li>
  4792.               </ul>
  4793.               
  4794.             </div>
  4795.           </div>
  4796.           <!-- End offcanvas-->
  4797.           
  4798.           <div class=\"ms-auto w-auto\">
  4799.             
  4800.             <div class=\"header-social d-flex align-items-center gap-1\">
  4801.               <a class=\"btn btn-primary py-2\" href=\"#jemeconnecte\">Je me connecte</a>
  4802.               
  4803.               <button class=\"fbs__net-navbar-toggler justify-content-center align-items-center ms-auto\" data-bs-toggle=\"offcanvas\" data-bs-target=\"#fbs__net-navbars\" aria-controls=\"fbs__net-navbars\" aria-label=\"Toggle navigation\" aria-expanded=\"false\">
  4804.                 <svg class=\"fbs__net-icon-menu\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">
  4805.                   <line x1=\"21\" x2=\"3\" y1=\"6\" y2=\"6\"></line>
  4806.                   <line x1=\"15\" x2=\"3\" y1=\"12\" y2=\"12\"></line>
  4807.                   <line x1=\"17\" x2=\"3\" y1=\"18\" y2=\"18\"></line>
  4808.                 </svg>
  4809.                 <svg class=\"fbs__net-icon-close\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">
  4810.                   <path d=\"M18 6 6 18\"></path>
  4811.                   <path d=\"m6 6 12 12\"></path>
  4812.                 </svg>
  4813.               </button>
  4814.               
  4815.             </div>
  4816.             
  4817.           </div>
  4818.         </div>
  4819.       </header>
  4820.       <!-- End Header-->
  4821.       
  4822.       <!-- ======= Main =======-->
  4823.       <main>
  4824.        
  4825.            <!-- ======= Hero =======-->
  4826.         <section class=\"hero__v6 section\" id=\"home\">
  4827.           <div class=\"container\">
  4828.             <div class=\"row\">
  4829.               <div class=\"col-lg-6 mb-4 mb-lg-0\">
  4830.                 <div class=\"row\">
  4831.                   <div class=\"col-lg-11\">
  4832.                     <span class=\"hero-subtitle text-uppercase\" data-aos=\"fade-up\" data-aos-delay=\"0\">La solution sécurisée qui rassure les familles et libère vos équipes</span>
  4833.                     <h1 class=\"hero-title mb-3\" data-aos=\"fade-up\" data-aos-delay=\"100\"> Avec 5sur5Séjour, transformez chaque séjour en une expérience sereine et valorisante.</h1>
  4834.                     <p class=\"hero-description mb-4 mb-lg-5\" data-aos=\"fade-up\" data-aos-delay=\"200\">🤝 Un accompagnement humain dédié| 📞 Des appels vocaux automatiques aux familles | 🔒 100% conforme RGPD & hébergé en France</p>
  4835.                     <a  class=\"btn btn-lg btn-primary px-4 w-100 w-sm-auto\" style=\"background:color-mix(in srgb, var(--bs-secondary), transparent 70%);color:#41a2aa\"
  4836.               href=\"{{ path('pack_annuel_partenaires') }}\">
  4837.            Devenir partenaire
  4838.             <svg class=\"ms-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">
  4839.               <path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path>
  4840.             </svg>
  4841.           </a>
  4842.                   </div>
  4843.                 </div>
  4844.               </div>
  4845.               <div class=\"col-lg-6\">
  4846.                 <div class=\"hero-img\">
  4847.                   <img class=\"img-card img-fluid\" style=\"background: radial-gradient(gray, transparent);border-radius: 30px;\" src=\"{{ asset('Accueil/imagesAccueil/demo3.png') }}\" alt=\"Image card\" data-aos=\"fade-down\" data-aos-delay=\"600\">
  4848.                   <img class=\"img-main img-fluid rounded-4\" src=\"{{ asset('images/smiling_5sur5.svg') }}\" alt=\"Hero Image\" data-aos=\"fade-in\" data-aos-delay=\"500\">
  4849.                 </div>
  4850.                   <!-- Bouton CTA -->
  4851.                     <!-- CTAs -->
  4852.         <div class=\"d-flex flex-wrap gap-3 align-items-center mb-2\" data-aos=\"fade-up\" data-aos-delay=\"250\"  style=\"margin-top:15%\">
  4853.           <a class=\"btn btn-lg btn-primary px-4 w-100 w-sm-auto\" href=\"#\" data-action=\"cta_create\" data-pack=\"creation\">
  4854.             Créer mon espace séjour 
  4855.             <svg class=\"ms-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">
  4856.               <path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path>
  4857.             </svg>
  4858.           </a>
  4859.         
  4860.         </div>
  4861.     
  4862.         <!-- Preuve sociale courte -->
  4863.         <div class=\"logos mt-4\" data-aos=\"fade-up\" data-aos-delay=\"350\">
  4864.         <p class=\"text-primary-emphasis text-uppercase small mt-4 mb-0\">
  4865.   Déjà adopté par <strong>1 500+</strong> écoles, centres de loisirs et associations en France
  4866. </p>
  4867.         </div>
  4868.               </div>
  4869.     
  4870.             </div>
  4871.           </div>
  4872.           <!-- End Hero-->
  4873.         </section>
  4874.         <!-- End Hero-->
  4875.         
  4876.         <!-- ======= Vignettes Section =======-->
  4877.         <section class=\"about_wrap_area aboutWrapper mb-5\">
  4878.           <div class=\"container\" id=\"jemeconnecte\">
  4879.             <div class=\"row\">
  4880.               <div class=\"col-xl-4 col-md-4 col-lg-4\">
  4881.                 <div class=\"single_service_wrap text-center vignetteContent\" data-aos=\"fade-up\" data-aos-delay=\"0\">
  4882.                   <img class=\"imageParent\" src=\"{{ asset('Accueil/imagesAccueil/son_sejour.svg') }}\" alt=\"Parent\">
  4883.                   <h3 class=\"titreVignette\">Vous êtes parent</h3>
  4884.                   <p class=\"txtVignette\">Consultez les photos et vidéos à tout moment, <b>et soyez appelé dès qu'un nouveau message vocal est déposé — restez connectés au séjour, où que vous soyez.</b> </p>
  4885.                   <a href=\"{{ path('app_back_Parent') }}\" class=\"btn btn-primary py-2\">Je me connecte</a>
  4886.                 </div>
  4887.               </div>
  4888.               <div class=\"col-xl-4 col-md-4 col-lg-4\">
  4889.                 <div class=\"single_service_wrap text-center vignetteContent\" data-aos=\"fade-up\" data-aos-delay=\"200\">
  4890.                   <img class=\"imageAcc\" src=\"{{ asset('Accueil/imagesAccueil/espceAcc.svg') }}\" alt=\"Accompagnateur\">
  4891.                   <h3 class=\"titreVignette titreAcc\">Vous êtes accompagnateur</h3>
  4892.                   <p class=\"txtVignette txtAcc\">Partagez facilement photos et messages pour rassurer les familles — créez et gérez vos séjours en toute simplicité. </p>
  4893.                   <a  data-bs-toggle=\"modal\" data-bs-target=\"#loginModal\"  class=\"btn btn-primary py-2\">Je me connecte</a>
  4894.                 </div>
  4895.               </div>
  4896.               <div class=\"col-xl-4 col-md-4 col-lg-4\">
  4897.                 <div class=\"single_service_wrap text-center vignetteContent\" data-aos=\"fade-up\" data-aos-delay=\"400\">
  4898.                   <img class=\"imagePartenaire\" src=\"{{ asset('Accueil/imagesAccueil/espcPart.svg') }}\" alt=\"Partenaire\">
  4899.                   <h3 class=\"titreVignette titrePartenaire\">Vous êtes partenaire</br></h3>
  4900.                   <p class=\"txtVignette txtPartenaire\">
  4901.                     <br/>Créez et gérez tous vos séjours depuis un espace dédié, avec un service client sur mesure et des outils pensés pour vous.</p>
  4902.                   <a data-bs-toggle=\"modal\" data-bs-target=\"#partnerLoginModal\" class=\"btn btn-primary py-2\">Je me connecte</a>
  4903.                 </div>
  4904.               </div>
  4905.             </div>
  4906.           </div>
  4907.         </section>
  4908.         <!-- End Vignettes -->
  4909.         
  4910.     
  4911.         <!-- ======= Pourquoi nous choisir =======-->
  4912.         <section class=\"section features__v2\" id=\"about\">
  4913.           <div class=\"container\">
  4914.             <div class=\"row\">
  4915.               <div class=\"col-12\">
  4916.                 <div class=\"d-lg-flex p-5 rounded-4 content\" data-aos=\"fade-in\" data-aos-delay=\"0\">
  4917.                   <div class=\"row\">
  4918.                     <div class=\"col-lg-5 mb-5 mb-lg-0\" data-aos=\"fade-up\" data-aos-delay=\"0\">
  4919.                       <div class=\"row\"> 
  4920.                         <div class=\"col-lg-11\">
  4921.                           <div class=\"h-100 flex-column justify-content-between d-flex\">
  4922.                             <div>
  4923.                               <h2 class=\"mb-4\">Pourquoi nous choisir pour vos séjours</h2>
  4924.                               <p class=\"mb-5\">5sur5séjour n'est pas qu'un outil pour les animateurs.
  4925. C'est une solution complète pour les professionnels qui veulent gagner du temps, rassurer les familles, et moderniser leur image.</p>
  4926.                             </div>
  4927.                             <div class=\"align-self-start\">
  4928.                                  <a  class=\"btn btn-lg btn-primary px-4 w-100 w-sm-auto\" style=\"background:color-mix(in srgb, var(--bs-secondary), transparent 70%);color:#41a2aa\"
  4929.               href=\"{{ path('pack_annuel_partenaires') }}\">
  4930.             Devenir partenaire
  4931.             <svg class=\"ms-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">
  4932.               <path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path>
  4933.             </svg>
  4934.           </a>
  4935.                             </div>
  4936.                           </div>
  4937.                         </div>
  4938.                       </div>
  4939.                     </div>
  4940.                     <div class=\"col-lg-7\">
  4941.                       <div class=\"row justify-content-end\">
  4942.                         <div class=\"col-lg-11\">
  4943.                           <div class=\"row\">
  4944.                             <div class=\"col-sm-6\" data-aos=\"fade-up\" data-aos-delay=\"0\">
  4945.                               <div class=\"icon text-center mb-4\"><i class=\"bi bi-shield-lock fs-4\"></i></div>
  4946.                               <h3 class=\"fs-6 fw-bold mb-3\">Partage sécurisé</h3>
  4947.                               <p>Galerie privée photos/vidéos, droits par groupes/classes, consentements intégrés.</p>
  4948.                             </div>
  4949.                             <div class=\"col-sm-6\" data-aos=\"fade-up\" data-aos-delay=\"100\">
  4950.                               <div class=\"icon text-center mb-4\"><i class=\"bi bi-telephone-outbound fs-4\"></i></div>
  4951.                               <h3 class=\"fs-6 fw-bold mb-3\">Boîte vocale 5sur5   </h3>
  4952.                               <p>Un service historique, revient modernisé pour renforcer encore votre lien avec les familles.</p>
  4953.                             </div>
  4954.                             <div class=\"col-sm-6\" data-aos=\"fade-up\" data-aos-delay=\"200\">
  4955.                               <div class=\"icon text-center mb-4\"><i class=\"bi bi-clock fs-4\"></i></div>
  4956.                               <h3 class=\"fs-6 fw-bold mb-3\">Temps gagné</h3>
  4957.                               <p>Publication partagées automatiquement en 2 clics. Aucune intervention de votre part : votre équipe reste tranquille.</p>
  4958.                             </div>
  4959.                             <div class=\"col-sm-6\" data-aos=\"fade-up\" data-aos-delay=\"300\">
  4960.                               <div class=\"icon text-center mb-4\"><i class=\"bi bi-headset fs-4\"></i></div>
  4961.                               <h3 class=\"fs-6 fw-bold mb-3\">Support humain</h3>
  4962.                               <p>Accompagnement à la mise en place et support dédié pendant vos séjours.</p>
  4963.                             </div>
  4964.                           </div>
  4965.                         </div>
  4966.                       </div>
  4967.                     </div>
  4968.                   </div>
  4969.                 </div>
  4970.               </div>
  4971.             </div>
  4972.           </div>
  4973.         </section>
  4974.         <!-- End Features-->
  4975.         <section class=\"section py-6 pro-offers\" id=\"pricing\">
  4976.           <div class=\"container position-relative\">
  4977.             <div class=\"text-center mb-5\">
  4978.               <span class=\"subtitle text-uppercase mb-2 tagSection d-inline-flex align-items-center gap-2\" data-aos=\"fade-up\">
  4979.                 <i class=\"bi bi-stars text-warning\"></i> Offres PRO 5sur5
  4980.               </span>
  4981.               <h2 class=\"mb-3\" data-aos=\"fade-up\" data-aos-delay=\"50\">
  4982.                 Une tarification claire pour chaque structure
  4983.               </h2>
  4984.               <p class=\"text-muted mb-0\" data-aos=\"fade-up\" data-aos-delay=\"100\">
  4985.                 Plateforme photo & audio sécurisée, boîte vocale web intégrée, support humain basé en France.
  4986.               </p>
  4987.             </div>
  4988.             <div class=\"row g-4 align-items-stretch\">
  4989.               <!-- Séjour unique -->
  4990.               <div class=\"col-lg-4\" data-aos=\"fade-up\" data-aos-delay=\"0\">
  4991.                 <div class=\"pro-card h-100\">
  4992.                   <div class=\"pro-card__badge text-secondary\"><i class=\"bi bi-calendar4-week me-2\"></i>Séjour ponctuel</div>
  4993.                   <h3>Séjour Unique</h3>
  4994.                   <p class=\"pro-card__subtitle\">Idéal pour tester la plateforme</p>
  4995.                   <div class=\"pro-card__price\">
  4996.                     <span>39€</span>
  4997.                     <small>/ séjour</small>
  4998.                   </div>
  4999.                   <ul>
  5000.                     <li><i class=\"bi bi-check-circle-fill\"></i>Galerie photo + messages vocaux</li>
  5001.                     <li><i class=\"bi bi-check-circle-fill\"></i>Espace sécurisé pendant 60 jours</li>
  5002.                     <li><i class=\"bi bi-check-circle-fill\"></i>Aucun engagement, aucune surprise</li>
  5003.                     <li><i class=\"bi bi-check-circle-fill\"></i>Support pour l'accompagnateur</li>
  5004.                   </ul>
  5005.                   <a href=\"{{ path('app_creation_simple_creer') }}\" class=\"btn btn-outline-primary w-100\">
  5006.                     <i class=\"bi bi-plus-circle me-2\"></i>Créer mon séjour
  5007.                   </a>
  5008.                 </div>
  5009.               </div>
  5010.               <!-- Pack annuel -->
  5011.               <div class=\"col-lg-4\" data-aos=\"fade-up\" data-aos-delay=\"150\">
  5012.                 <div class=\"pro-card pro-card--featured h-100 position-relative overflow-hidden\">
  5013.                   <span class=\"pro-card__badge pro-card__badge--featured\"><i class=\"bi bi-fire me-2\"></i>Le plus choisi</span>
  5014.                   <h3>Pack Annuel – 25 séjours</h3>
  5015.                   <p class=\"pro-card__subtitle\">Pour les structures qui partent toute l’année</p>
  5016.                   <div class=\"pro-card__price\">
  5017.                     <span>490€</span>
  5018.                     <small>/ an</small>
  5019.                   </div>
  5020.                   <ul>
  5021.                     <li><i class=\"bi bi-check-circle-fill\"></i>Jusqu’à 25 séjours inclus</li>
  5022.                     <li><i class=\"bi bi-check-circle-fill\"></i>Accompagnateurs & parents illimités</li>
  5023.                     <li><i class=\"bi bi-check-circle-fill\"></i>Mise en place en 24h + onboarding</li>
  5024.                     <li><i class=\"bi bi-check-circle-fill\"></i>Boîte vocale web intégrée</li>
  5025.                   </ul>
  5026.                   <a href=\"{{ path('pack_annuel_partenaires') }}\" class=\"btn btn-primary w-100\">
  5027.                     <i class=\"bi bi-rocket-takeoff me-2\"></i>Prendre le pack annuel
  5028.                   </a>
  5029.                 </div>
  5030.               </div>
  5031.               <!-- Offres sur mesure -->
  5032.               <div class=\"col-lg-4\" data-aos=\"fade-up\" data-aos-delay=\"300\">
  5033.                 <div class=\"pro-card h-100\">
  5034.                   <div class=\"pro-card__badge text-secondary\"><i class=\"bi bi-building-up me-2\"></i>Grandes structures</div>
  5035.                   <h3>+25 séjours / an</h3>
  5036.                   <p class=\"pro-card__subtitle\">Partenariat sur mesure & tarifs dégressifs</p>
  5037.                   <div class=\"pro-card__price pro-card__price--quote\">
  5038.                     <span>Sur devis</span>
  5039.                  
  5040.                   </div>
  5041.                   <ul>
  5042.                     <li><i class=\"bi bi-check-circle-fill\"></i>Déploiement multi-sites & multi-équipes</li>
  5043.                     <li><i class=\"bi bi-check-circle-fill\"></i>Tableau de bord groupe</li>
  5044.                     <li><i class=\"bi bi-check-circle-fill\"></i>Contrat cadre + facturation centralisée</li>
  5045.                     <li><i class=\"bi bi-check-circle-fill\"></i>Support prioritaire 7j/7</li>
  5046.                   </ul>
  5047.                   <button type=\"button\" class=\"btn btn-outline-primary w-100\" data-bs-toggle=\"modal\" data-bs-target=\"#grandVolumeModal\">
  5048.                     <i class=\"bi bi-envelope-open me-2\"></i>Parler à un expert
  5049.                   </button>
  5050.                 </div>
  5051.               </div>
  5052.             </div>
  5053.             <div class=\"pro-offers__foot text-center mt-5\" data-aos=\"fade-up\">
  5054.               🎓 <strong>Écoles publiques :</strong> accès à la plateforme sans abonnement &nbsp;•&nbsp; Données hébergées en France &nbsp;•&nbsp; Activation en 24h
  5055.             </div>
  5056.           </div>
  5057.         </section>
  5058.         <style>
  5059.           .pro-offers {
  5060.             background: linear-gradient(135deg, #f5fbff 0%, #f0f5ff 100%);
  5061.             border-top: 1px solid rgba(65,162,170,0.1);
  5062.             border-bottom: 1px solid rgba(65,162,170,0.1);
  5063.           }
  5064.           .pro-card {
  5065.             background: #fff;
  5066.             border-radius: 24px;
  5067.             padding: 32px;
  5068.             box-shadow: 0 25px 60px rgba(15, 40, 77, 0.08);
  5069.             transition: transform 0.3s ease, box-shadow 0.3s ease;
  5070.             height: 100%;
  5071.           }
  5072.           .pro-card:hover {
  5073.             transform: translateY(-6px);
  5074.             box-shadow: 0 30px 70px rgba(15, 40, 77, 0.16);
  5075.           }
  5076.           .pro-card h3 {
  5077.             font-weight: 700;
  5078.             color: #1f2b3a;
  5079.           }
  5080.           .pro-card__subtitle {
  5081.             color: #6b7b8d;
  5082.             margin-bottom: 1rem;
  5083.           }
  5084.           .pro-card__price {
  5085.             display: flex;
  5086.             align-items: baseline;
  5087.             gap: 8px;
  5088.             font-weight: 700;
  5089.             color: #1f2b3a;
  5090.             margin-bottom: 1.25rem;
  5091.           }
  5092.           .pro-card__price span {
  5093.             font-size: 2.4rem;
  5094.             color: #41a2aa;
  5095.           }
  5096.           .pro-card__price--quote span {
  5097.             font-size: 1.8rem;
  5098.           }
  5099.           .pro-card ul {
  5100.             list-style: none;
  5101.             padding: 0;
  5102.             margin: 0 0 1.5rem 0;
  5103.             color: #4b596b;
  5104.             font-size: 0.95rem;
  5105.           }
  5106.           .pro-card ul li {
  5107.             display: flex;
  5108.             gap: 10px;
  5109.             align-items: center;
  5110.             margin-bottom: 0.6rem;
  5111.           }
  5112.           .pro-card ul li i {
  5113.             color: #41a2aa;
  5114.           }
  5115.           .pro-card__badge {
  5116.             font-size: 0.75rem;
  5117.             text-transform: uppercase;
  5118.             letter-spacing: 0.08em;
  5119.             font-weight: 700;
  5120.             margin-bottom: 1rem;
  5121.             display: inline-flex;
  5122.             align-items: center;
  5123.             gap: 4px;
  5124.           }
  5125.           .pro-card--featured {
  5126.             border: 2px solid rgba(65,162,170,0.2);
  5127.             background: linear-gradient(135deg, #ffffff 0%, #f8fbff 100%);
  5128.           }
  5129.           .pro-card__badge--featured {
  5130.             background: #fde2d6;
  5131.             color: #c15f29;
  5132.             padding: 0.35rem 0.9rem;
  5133.             border-radius: 999px;
  5134.           }
  5135.           .pro-offers__foot {
  5136.             font-size: 0.95rem;
  5137.             color: #4b596b;
  5138.             font-weight: 500;
  5139.           }
  5140.         </style>
  5141.           <!-- ======= About =======-->
  5142.         <section class=\"about__v4 section\" id=\"about\" style=\"padding: 100px 0;
  5143.     scroll-margin-top: 100px;\">
  5144.         <div class=\"container\">
  5145.     <div class=\"text-center mb-4\">
  5146.       <span class=\"subtitle text-uppercase mb-3 text-center tagSection\" data-aos=\"fade-up\" data-aos-delay=\"0\">
  5147. Et si vous retrouviez l’un des services historiques de 5sur5, repensé pour 2025 ?    </span>
  5148.       <h2 class=\"mb-2\" data-aos=\"fade-up\" data-aos-delay=\"50\">
  5149.  La Boîte Vocale revient, plus simple, plus puissante, et entièrement intégrée à vos séjours    </h2>
  5150.       <p class=\"text-muted mb-3\" data-aos=\"fade-up\" data-aos-delay=\"100\">
  5151. Permettez aux familles de rester connectées au quotidien, grâce à une boîte vocale pensée pour rassurer sans solliciter. Simple, rapide et fluide.
  5152.    <br>  </p>
  5153.       
  5154.           <div class=\"container my-5\">
  5155.             <div class=\"row\">
  5156.             
  5157.               <div class=\"col-md-6 order-md-2\">
  5158.                   <span class=\"subtitle text-uppercase mb-3\" data-aos=\"fade-up\" data-aos-delay=\"0\">Service unique en France</span>
  5159.                     <h2 class=\"mb-4\" data-aos=\"fade-up\" data-aos-delay=\"100\">La boîte vocale 5sur5 : vos messages, écoutés tout de suite</h2>
  5160.        
  5161.                 <div class=\"row justify-content-end\">
  5162.                   <div class=\"col-md-11 mb-4 mb-md-0\">
  5163.                              <div data-aos=\"fade-up\" data-aos-delay=\"200\">
  5164.                       <p>
  5165.                       
  5166.                      La Boîte Vocale 5sur5 fonctionne immédiatement : nous prenons en charge toute l’installation, la configuration et le support. 
  5167. Chaque message vocal déclenche automatiquement un appel aux parents créant un lien direct  sans perturbation .
  5168.  Aucune action ni intervention n’est requise de votre part.  </p>
  5169.                     </div>
  5170.                     <h4 class=\"small fw-bold mt-4 mb-3\" data-aos=\"fade-up\" data-aos-delay=\"300\">La voix est bien plus consultée qu'un SMS/mail.</h4>
  5171.                     <ul class=\"d-flex flex-row flex-wrap list-unstyled gap-3 features\" data-aos=\"fade-up\" data-aos-delay=\"400\">
  5172.                       <li class=\"d-flex align-items-center gap-2\"><span class=\"icon rounded-circle text-center\"><i class=\"bi bi-check\"></i></span><span class=\"text\">–70% d’appels entrants</span></li>
  5173.                       <li class=\"d-flex align-items-center gap-2\"><span class=\"icon rounded-circle text-center\"><i class=\"bi bi-check\"></i></span><span class=\"text\">moins de charges pour les animateurs</span></li>
  5174.                       <li class=\"d-flex align-items-center gap-2\"><span class=\"icon rounded-circle text-center\"><i class=\"bi bi-check\"></i></span><span class=\"text\">parents rassurés sans effort</span></li>
  5175.                       <li class=\"d-flex align-items-center gap-2\"><span class=\"icon rounded-circle text-center\"><i class=\"bi bi-check\"></i></span><span class=\"text\">illimitée</span></li>
  5176.                     </ul>
  5177.                         <a  class=\"btn btn-lg btn-primary px-4 w-100 w-sm-auto\" style=\"background:color-mix(in srgb, var(--bs-secondary), transparent 70%);color:#41a2aa\"
  5178.                href=\"{{ path('boite_vocale') }}\">
  5179.             Commander une boite vocale
  5180.             <svg class=\"ms-2\" xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">
  5181.               <path d=\"M7 7h10v10\"></path><path d=\"M7 17 17 7\"></path>
  5182.             </svg>
  5183.           </a>
  5184.                   </div>
  5185.                 </div>
  5186.               </div>
  5187.               <div class=\"col-md-6\"> 
  5188.                 <div class=\"img-wrap position-relative\">
  5189.                   <img class=\"img-fluid rounded-4\" src=\"{{ asset('Accueil/imagesAccueil/feature.png') }}\" alt=\"Sécurité 5sur5séjour\" data-aos=\"fade-up\" data-aos-delay=\"0\" style=\"width: 100%; height: 300px; object-fit: cover;\">
  5190.                   <div class=\"mission-statement p-4 rounded-4 d-flex gap-4\" data-aos=\"fade-up\" data-aos-delay=\"100\">
  5191.                     <div class=\"mission-icon text-center rounded-circle\"><i class=\"bi bi-lightbulb fs-4\"></i></div>
  5192.                     <div>
  5193.                       <h3 class=\"text-uppercase fw-bold\">Notre mission</h3>
  5194.                       <p class=\"fs-5 mb-0\">Notre mission est de fournir aux structures une communication simple, fiable et professionnelle pour rassurer toutes les familles..</p>
  5195.                     </div>
  5196.                   </div>
  5197.                 </div>
  5198.               </div>
  5199.             </div>
  5200.           </div>
  5201.         </section>
  5202.         <!-- End About-->
  5203.         <!-- ======= How it works =======-->
  5204.         <section class=\"section howitworks__v1\" id=\"how-it-works\">
  5205.           <div class=\"container\">
  5206.             <div class=\"row mb-5\">
  5207.               <div class=\"col-md-6 text-center mx-auto\">
  5208.                 <span class=\"subtitle text-uppercase mb-3\" data-aos=\"fade-up\" data-aos-delay=\"0\">Comment ça marche</span>
  5209.                 <h2 data-aos=\"fade-up\" data-aos-delay=\"100\">Simple pour vous, magique pour les familles</h2>
  5210.                 <p data-aos=\"fade-up\" data-aos-delay=\"200\">Une plateforme complète qui centralise contenus et communications, pour partager le séjour avec les familles en toute simplicité, sans surcharge pour les équipes.</p>
  5211.               </div>
  5212.             </div>
  5213.             <div class=\"row g-md-5\">
  5214.               <div class=\"col-md-6 col-lg-3\">
  5215.                 <div class=\"step-card text-center h-100 d-flex flex-column justify-content-start position-relative\" data-aos=\"fade-up\" data-aos-delay=\"0\">
  5216.                   <div data-aos=\"fade-right\" data-aos-delay=\"500\">
  5217.                     <img class=\"arch-line\" src=\"{{ asset('Accueil/imagesAccueil/arch-line.png') }}\" alt=\"Flèche animation\">
  5218.                   </div>
  5219.                   <span class=\"step-number rounded-circle text-center fw-bold mb-5 mx-auto\">1</span>
  5220.                   <div>
  5221.                     <h3 class=\"fs-5 mb-4\">Créez l'espace séjour</h3>
  5222.                     <p>Créez votre séjour en quelques clics… ou confiez-nous l'import de plusieurs séjours,<strong> on s'occupe de tout.</strong></p>
  5223.                   </div>
  5224.                 </div>
  5225.               </div>
  5226.               <div class=\"col-md-6 col-lg-3\" data-aos=\"fade-up\" data-aos-delay=\"600\">
  5227.                 <div class=\"step-card reverse text-center h-100 d-flex flex-column justify-content-start position-relative\">
  5228.                   <div data-aos=\"fade-right\" data-aos-delay=\"1100\">
  5229.                     <img class=\"arch-line reverse\" src=\"{{ asset('Accueil/imagesAccueil/arch-line-reverse.png') }}\" alt=\"Flèche animation\">
  5230.                   </div>
  5231.                   <span class=\"step-number rounded-circle text-center fw-bold mb-5 mx-auto\">2</span>
  5232.                   <h3 class=\"fs-5 mb-4\">Invitez les familles</h3>
  5233.                   <p>Envoyez le code de séjour aux familles pour qu'ils rejoignent l'espace séjour. </p>
  5234.                 </div>
  5235.               </div>
  5236.               <div class=\"col-md-6 col-lg-3\" data-aos=\"fade-up\" data-aos-delay=\"1200\">
  5237.                 <div class=\"step-card text-center h-100 d-flex flex-column justify-content-start position-relative\">
  5238.                   <div data-aos=\"fade-right\" data-aos-delay=\"1700\">
  5239.                     <img class=\"arch-line\" src=\"{{ asset('Accueil/imagesAccueil/arch-line.png') }}\" alt=\"Flèche animation\">
  5240.                   </div>
  5241.                   <span class=\"step-number rounded-circle text-center fw-bold mb-5 mx-auto\">3</span>
  5242.                   <h3 class=\"fs-5 mb-4\">Publiez en 2 clics</h3>
  5243.                   <p>Diffusez vos photos, vidéos et messages vocaux <strong>en toute simplicité.</strong></p>
  5244.                 </div>
  5245.               </div>
  5246.               <div class=\"col-md-6 col-lg-3\" data-aos=\"fade-up\" data-aos-delay=\"1800\">
  5247.                 <div class=\"step-card last text-center h-100 d-flex flex-column justify-content-start position-relative\">
  5248.                   <span class=\"step-number rounded-circle text-center fw-bold mb-5 mx-auto\">4</span>
  5249.                   <div>
  5250.                     <h3 class=\"fs-5 mb-4\">Bilan & archive</h3>
  5251.                     <p>À la fin du séjour, accédez à un bilan complet avec statistiques, et proposez aux familles des produits souvenir personnalisés.</p>
  5252.                   </div>
  5253.                 </div>
  5254.               </div>
  5255.             </div>
  5256.           </div>
  5257.         </section>
  5258.         <!-- End How it works-->
  5259.         
  5260.         <!-- ======= Pricing =======-->
  5261.      
  5262. <section class=\"py-5 bg-light d-none\" data-aos=\"fade-up\" data-aos-delay=\"50\">
  5263.   <div class=\"container text-center\" style=\"display:none\">
  5264.     <span class=\"subtitle text-uppercase mb-2 text-center tagSection\">Séjour ponctuel</span>
  5265.     <h2 class=\"mb-3\">Un séjour simple, tout compris</h2>
  5266.     <p class=\"text-muted mb-4 mx-auto\" style=\"max-width: 700px;\">
  5267.       Vous organisez un seul séjour dans l’année ?  
  5268.       5sur5Séjour vous permet de partager photos, vidéos et messages vocaux avec les familles  
  5269.       sans abonnement ni engagement.
  5270.     </p>
  5271.     <div class=\"p-5 bg-white shadow-sm rounded-4 mx-auto\" style=\"max-width: 600px;\">
  5272.       <div class=\"display-6 fw-semibold mb-1\" style=\"color: #41a2aa;\">
  5273.         <i class=\"bi bi-building-check\"></i> Prise en charge par la structure
  5274.       </div>
  5275.       <div class=\"text-muted mb-3 small\">
  5276.         Boîte vocale incluse · Tarif préférentiel partenaire
  5277.       </div>
  5278.       <ul class=\"list-unstyled text-start d-inline-block mb-4\">
  5279.         <li>✅ Accès complet à la plateforme pendant 60 jours</li>
  5280.         <li>✅ Galerie <strong>photos & vidéos</strong> sécurisée</li>
  5281.        
  5282.         <li>✅ Consentements <strong>RGPD</strong> hébergés en France</li>
  5283.         <li>➡️ Ajouter la Boîte Vocale pour appeler automatiquement les parents après chaque message <li>
  5284.       </ul>
  5285.       <a href=\"{{ path('app_creation_simple_creer') }}\" class=\"btn btn-primary px-4 py-2\">
  5286.         <i class=\"bi bi-calculator\"></i> Obtenir un devis
  5287.       </a>
  5288.       <p class=\"text-muted small mt-3\">Idéal pour un premier usage ou un séjour unique.</p>
  5289.     </div>
  5290.   </div>
  5291. </section>
  5292.   
  5293. <!-- BANDEAU CTA FINAL -->
  5294. <section class=\"py-5\">
  5295.   <div class=\"container\">
  5296.     <div class=\"cta-section p-4 p-md-5 text-center\" data-aos=\"fade-up\">
  5297.       <h3 class=\"fw-bold mb-2\">Prêt à gagner du temps et rassurer 100&nbsp;% des familles&nbsp;?</h3>
  5298.       <p class=\"text-muted mb-4\">Choisissez votre pack — on vous met en place en 24&nbsp;h, et on vous accompagne pas à pas.</p>
  5299.       <div class=\"d-flex flex-wrap justify-content-center gap-3\">
  5300.         <a href=\"{{ path('app_creation_simple_creer') }}\"
  5301.            class=\"btn btn-outline-primary btn-lg px-4\">
  5302.           <i class=\"bi bi-plus-circle me-2\"></i>Créer un séjour simple
  5303.         </a>
  5304.         <a href=\"{{ path('boite_vocale') }}\"
  5305.            class=\"btn btn-secondary btn-lg px-4\" >
  5306.           <i class=\"bi bi-telephone me-2\"></i>Commander boîte vocale
  5307.         </a>
  5308.         <a href=\"{{ path('pack_annuel_partenaires') }}\" style=\"background-color: #F09E7A; border-color: #F09E7A; color: #fff;\"
  5309.            class=\"btn btn-primary btn-lg px-4\">
  5310.           <i class=\"bi bi-rocket-takeoff me-2\"></i>Prendre le pack annuel
  5311.         </a>
  5312.       </div>
  5313.       <div class=\"mt-3 small \">
  5314.         <i class=\"bi bi-shield-lock me-1\"></i>Paiement sécurisé • <i class=\"bi bi-check2-circle ms-1 me-1\"></i>Mise en place totale par l'équipe 5sur5
  5315.       </div>
  5316.     </div>
  5317.   </div>
  5318. </section>
  5319.     
  5320.         <!-- ======= Stats =======-->
  5321.         <section class=\"stats__v3 section\">
  5322.           <div class=\"container\">
  5323.             <div class=\"row\">
  5324.               <div class=\"col-12\">
  5325.                 <div class=\"d-flex flex-wrap content rounded-4\" data-aos=\"fade-up\" data-aos-delay=\"0\">
  5326.                   <div class=\"rounded-borders\">
  5327.                     <div class=\"rounded-border-1\"></div>
  5328.                     <div class=\"rounded-border-2\"></div>
  5329.                     <div class=\"rounded-border-3\"></div>
  5330.                   </div>
  5331.                   <div class=\"col-12 col-sm-6 col-md-4 mb-4 mb-md-0 text-center\" data-aos=\"fade-up\" data-aos-delay=\"80\">
  5332.                     <div class=\"stat-item\">
  5333.                       <h3 class=\"fs-1 fw-bold\">+<span class=\"purecounter\" data-purecounter-start=\"0\" data-purecounter-end=\"90\" data-purecounter-duration=\"2\">0</span><span>%</span></h3>
  5334.                       <p class=\"mb-0\">des familles connectées dès J1
  5335. Invitation simple, lien sécurisé</p>
  5336.                     </div>
  5337.                   </div>
  5338.                   <div class=\"col-12 col-sm-6 col-md-4 mb-4 mb-md-0 text-center\" data-aos=\"fade-up\" data-aos-delay=\"200\">
  5339.                     <div class=\"stat-item\">
  5340.                       <h3 class=\"fs-1 fw-bold\"> > <span class=\"purecounter\" data-purecounter-start=\"0\" data-purecounter-end=\"370\" data-purecounter-duration=\"2\">0</span><span>k+</span></h3>
  5341.                       <p class=\"mb-0\">enfants suivis
  5342. Confiance des établissements & associations</p>
  5343.                     </div>
  5344.                   </div>
  5345.                   <div class=\"col-12 col-sm-6 col-md-4 mb-4 mb-md-0 text-center\" data-aos=\"fade-up\" data-aos-delay=\"300\">
  5346.                     <div class=\"stat-item\">
  5347.                       <h3 class=\"fs-1 fw-bold\"><span class=\"purecounter\" data-purecounter-start=\"0\" data-purecounter-end=\"20\" data-purecounter-duration=\"2\">0</span><span>K+</span></h3>
  5348.                       <p class=\"mb-0\">séjours accompagnés
  5349. Partout en France et à l'étranger</p>
  5350.                     </div>
  5351.                   </div>
  5352.                 </div>
  5353.               </div>
  5354.             </div>
  5355.           </div>
  5356.         </section>
  5357.         <!-- End Stats-->
  5358.         
  5359.         <!-- ======= Services =======-->
  5360.        <section class=\"section services__v3\" id=\"souvenirs\">
  5361.           <div class=\"container\">
  5362.             <div class=\"row mb-5\">
  5363.               <div class=\"col-md-8 mx-auto text-center\">
  5364.         <span class=\"subtitle text-uppercase mb-2\" data-aos=\"fade-up\" data-aos-delay=\"0\">Produits 5sur5</span>
  5365.         <h2 class=\"mb-2\" data-aos=\"fade-up\" data-aos-delay=\"100\">
  5366.           Souvenirs premium, <span class=\"whitespace-nowrap\">fabriqués en France</span> 
  5367.         </h2>
  5368.         <p class=\"text-muted\" data-aos=\"fade-up\" data-aos-delay=\"150\">
  5369.           Offrez aux familles un souvenir durable du séjour. Qualité premium, expédition rapide, et
  5370.           possibilité d'<strong>achat groupé –20%</strong> pour les établissements.
  5371.         </p>
  5372.               </div>
  5373.             </div>
  5374.             <div class=\"row g-4\">
  5375.       <!-- Carte 1 : Albums -->
  5376.               <div class=\"col-md-6 col-lg-4\" data-aos=\"fade-up\" data-aos-delay=\"0\">
  5377.                 <div class=\"service-card p-4 rounded-4 h-100 d-flex flex-column justify-content-between gap-5\">
  5378.                   <div>
  5379.             <figure class=\"product-visual\" style=\"\"  width: 100%;
  5380.   height: 200px;                /* hauteur demandée */
  5381.   display: flex;
  5382.   align-items: center;
  5383.   justify-content: center;      /* image centrée */
  5384.   background: rgba(47,167,163,.06);
  5385.   border-radius: 16px;
  5386.   overflow: hidden;
  5387.   margin-bottom: 16px;>
  5388.         <img style=\" max-width: 100%;
  5389.   max-height: 100%;
  5390.   object-fit: contain;          /* garde le ratio, pas de crop */
  5391.   display: block;\"
  5392.           src=\"https://5sur5sejour.com/images/produit/LivreSouvenir5sur5-1.jpg\"
  5393.           alt=\"Album photo premium 5sur5\"
  5394.           width=\"400\" height=\"300\" loading=\"lazy\" decoding=\"async\"
  5395.           sizes=\"(min-width:992px) 330px, 90vw\">
  5396.       </figure>
  5397.             
  5398.             <h3 class=\"fs-5 mb-3\">Album photo premium</h3>
  5399.             <p class=\"mb-4\">
  5400.               Le souvenir incontournable du séjour. Qualité soignée, fabrication locale en France et
  5401.               <strong>livraison gratuite</strong> pour les familles.
  5402.             </p>
  5403.                   </div>
  5404.           <a class=\"special-link d-inline-flex gap-2 align-items-center text-decoration-none\" href=\"https://futur.5sur5sejour.fr/Accueil5sur5/album/Album%20photos\" target=\"_blank\">
  5405.                     <span class=\"icons\"><i class=\"icon-1 bi bi-arrow-right-short\"></i><i class=\"icon-2 bi bi-arrow-right-short\"></i></span>
  5406.             <span>Voir les modèles d'albums</span>
  5407.                   </a>
  5408.                 </div>
  5409.               </div>
  5410.       <!-- Carte 2 : Tirages & souvenirs -->
  5411.               <div class=\"col-md-6 col-lg-4\" data-aos=\"fade-up\" data-aos-delay=\"200\">
  5412.                 <div class=\"service-card p-4 rounded-4 h-100 d-flex flex-column justify-content-between gap-5\">
  5413.                   <div>
  5414.            <figure class=\"product-visual\" style=\"\"  width: 100%;
  5415.   height: 200px;                /* hauteur demandée */
  5416.   display: flex;
  5417.   align-items: center;
  5418.   justify-content: center;      /* image centrée */
  5419.   background: rgba(47,167,163,.06);
  5420.   border-radius: 16px;
  5421.   overflow: hidden;
  5422.   margin-bottom: 16px;>
  5423.         <img style=\" max-width: 100%;
  5424.   max-height: 100%;
  5425.   object-fit: contain;          /* garde le ratio, pas de crop */
  5426.   display: block;\"
  5427.           src=\"https://5sur5sejour.com/images/produit/PochettePhoto5sur5-2.jpg\"
  5428.           alt=\"Album photo premium 5sur5\"
  5429.           width=\"400\" height=\"300\" loading=\"lazy\" decoding=\"async\"
  5430.           sizes=\"(min-width:992px) 330px, 90vw\">
  5431.       </figure>
  5432.             
  5433.            
  5434.             <h3 class=\"fs-5 mb-3\">Tirages & produits souvenirs</h3>
  5435.             <p class=\"mb-4\">
  5436.               Tirages photo et articles souvenirs 5sur5 pour prolonger l'expérience du séjour.
  5437.               Qualité premium, <strong>fabriqués en France</strong>.
  5438.             </p>
  5439.                   </div>
  5440.           <a class=\"special-link d-inline-flex gap-2 align-items-center text-decoration-none\" href=\"{{ path('boutique5sur5_Souvenir') }}\">
  5441.                     <span class=\"icons\"><i class=\"icon-1 bi bi-arrow-right-short\"></i><i class=\"icon-2 bi bi-arrow-right-short\"></i></span>
  5442.             <span>Découvrir les souvenirs</span>
  5443.                   </a>
  5444.                 </div>
  5445.               </div>
  5446.       <!-- Carte 3 : Achat groupé -20% -->
  5447.               <div class=\"col-md-6 col-lg-4\" data-aos=\"fade-up\" data-aos-delay=\"300\">
  5448.                 <div class=\"service-card p-4 rounded-4 h-100 d-flex flex-column justify-content-between gap-5\">
  5449.                   <div>
  5450.                <figure class=\"product-visual\" style=\"\"  width: 100%;
  5451.   height: 200px;                /* hauteur demandée */
  5452.   display: flex;
  5453.   align-items: center;
  5454.   justify-content: center;      /* image centrée */
  5455.   background: rgba(47,167,163,.06);
  5456.   border-radius: 16px;
  5457.   overflow: hidden;
  5458.   margin-bottom: 16px;>
  5459.         <img style=\" max-width: 100%;
  5460.   max-height: 100%;
  5461.   object-fit: contain;          /* garde le ratio, pas de crop */
  5462.   display: block;\"
  5463.           src=\"https://5sur5sejour.com/images/produit/Album5sur5-3.jpg\"
  5464.           alt=\"Album photo premium 5sur5\"
  5465.           width=\"400\" height=\"300\" loading=\"lazy\" decoding=\"async\"
  5466.           sizes=\"(min-width:992px) 330px, 90vw\">
  5467.       </figure>
  5468.            
  5469.             <h3 class=\"fs-5 mb-3\">Achat groupé établissement –20%</h3>
  5470.             <p class=\"mb-4\">
  5471.               Activez l'option \"achat groupé\" pour la classe/le séjour et bénéficiez de
  5472.               <strong>–20% de réduction</strong> avec <strong>livraison gratuite</strong>. Simple à organiser, apprécié des familles.
  5473.             </p>
  5474.                   </div>
  5475.           <a  data-bs-toggle=\"modal\"
  5476.    data-bs-target=\"#groupBuyLite\"
  5477.    data-action=\"group_buy_open\" class=\"special-link d-inline-flex gap-2 align-items-center text-decoration-none\" href=\"#achat-groupe\">
  5478.                     <span class=\"icons\"><i class=\"icon-1 bi bi-arrow-right-short\"></i><i class=\"icon-2 bi bi-arrow-right-short\"></i></span>
  5479.             <span>Activer l'achat groupé</span>
  5480.                   </a>
  5481.                 </div>
  5482.               </div>
  5483.             </div>
  5484.     <!-- Micro-barre de réassurance (discrète) -->
  5485.     <div class=\"text-center text-muted small mt-4\">
  5486.       Fabriqué en France · Livraison gratuite · Qualité premium 5sur5 · Possibilité de <strong>partage des bénéfices</strong> pour les partenaires
  5487.     </div>
  5488.   </div>
  5489. </section>
  5490.       
  5491.         <!-- ======= Contact =======-->
  5492.         <section class=\"section contact__v2\" id=\"contact\">
  5493.           <div class=\"container\">
  5494.             <div class=\"row mb-5\">
  5495.               <div class=\"col-md-6 col-lg-7 mx-auto text-center\">
  5496.                 <span class=\"subtitle text-uppercase mb-3\" data-aos=\"fade-up\" data-aos-delay=\"0\">Contact</span>
  5497.                 <h2 class=\"h2 fw-bold mb-3\" data-aos=\"fade-up\" data-aos-delay=\"0\">Nous contacter</h2>
  5498.                 <p data-aos=\"fade-up\" data-aos-delay=\"100\">Nous sommes à votre écoute pour répondre à vos questions et vous aider à mieux comprendre nos services.</p>
  5499.               </div>
  5500.             </div>
  5501.             <div class=\"row\">
  5502.               <div class=\"col-md-6\">
  5503.                 <div class=\"d-flex gap-5 flex-column\">
  5504.                   <div class=\"d-flex align-items-start gap-3\" data-aos=\"fade-up\" data-aos-delay=\"0\">
  5505.                     <div class=\"icon d-block\"><i class=\"bi bi-telephone\"></i></div>
  5506.                     <span>
  5507.                       <span class=\"d-block\">Téléphone</span>
  5508.                       <strong>05 36 28 29 30</strong>
  5509.                     </span>
  5510.                   </div>
  5511.                   <div class=\"d-flex align-items-start gap-3\" data-aos=\"fade-up\" data-aos-delay=\"100\">
  5512.                     <div class=\"icon d-block\"><i class=\"bi bi-send\"></i></div>
  5513.                     <span>
  5514.                       <span class=\"d-block\">Email</span>
  5515.                       <strong>contact@5sur5sejour.com</strong>
  5516.                     </span>
  5517.                   </div>
  5518.                   <div class=\"d-flex align-items-start gap-3\" data-aos=\"fade-up\" data-aos-delay=\"200\">
  5519.                     <div class=\"icon d-block\"><i class=\"bi bi-geo-alt\"></i></div>
  5520.                     <span>
  5521.                       <span class=\"d-block\">Adresse</span>
  5522.                       <address class=\"fw-bold\">5sur5séjour<br>France</address>
  5523.                     </span>
  5524.                   </div>
  5525.                 </div>
  5526.               </div>
  5527.               <div class=\"col-md-6\">
  5528.                 <div class=\"form-wrapper\" data-aos=\"fade-up\" data-aos-delay=\"300\">
  5529.                   <div class=\"text-center mb-4\">
  5530.                     <a href=\"#\" class=\"btn btn-primary btn-lg\" data-action=\"cta_expert\" data-pack=\"contact\">
  5531.                       Parler à un expert maintenant
  5532.                     </a>
  5533.                     <p class=\"text-muted mt-3 mb-0\">Ou utilisez le formulaire ci-dessous pour nous laisser un message</p>
  5534.                   </div>
  5535.                   <form id=\"contactFormSection\" action=\"{{ path('app_contact') }}\" method=\"POST\">
  5536.                     <div class=\"row gap-3 mb-3\">
  5537.                       <div class=\"col-md-12\">
  5538.                         <label class=\"mb-2\" for=\"name\">Nom</label>
  5539.                         <input class=\"form-control\" id=\"name\" type=\"text\" name=\"name\" required=\"\">
  5540.                       </div>
  5541.                       <div class=\"col-md-12\">
  5542.                         <label class=\"mb-2\" for=\"email\">Email</label>
  5543.                         <input class=\"form-control\" id=\"email\" type=\"email\" name=\"email\" required=\"\">
  5544.                       </div>
  5545.                     </div>
  5546.                     <div class=\"row gap-3 mb-3\">
  5547.                       <div class=\"col-md-12\">
  5548.                         <label class=\"mb-2\" for=\"subject\">Sujet</label>
  5549.                         <input class=\"form-control\" id=\"subject\" type=\"text\" name=\"subject\">
  5550.                       </div>
  5551.                     </div>
  5552.                     <div class=\"row gap-3 gap-md-0 mb-3\">
  5553.                       <div class=\"col-md-12\">
  5554.                         <label class=\"mb-2\" for=\"message\">Message</label>
  5555.                         <textarea class=\"form-control\" id=\"message\" name=\"message\" rows=\"5\" required=\"\"></textarea>
  5556.                       </div>
  5557.                     </div>
  5558.                     <button class=\"btn btn-primary fw-semibold\" type=\"submit\">Envoyer le message</button>
  5559.                   </form>
  5560.                   <div class=\"mt-3 d-none alert alert-success\" id=\"successMessageSection\">Message envoyé avec succès !</div>
  5561.                   <div class=\"mt-3 d-none alert alert-danger\" id=\"errorMessageSection\">Échec de l'envoi du message. Veuillez réessayer plus tard.</div>
  5562.                 </div>
  5563.               </div>
  5564.             </div>
  5565.           </div>
  5566.         </section>
  5567.         <!-- End Contact-->
  5568.         
  5569.         <!-- ======= Footer =======-->
  5570.     
  5571.         {%block Footer %}
  5572.             {% include 'Accueil/_footer_premium.html.twig' %}
  5573.         {% endblock %}
  5574.         <!-- End Footer-->
  5575.         
  5576.       </main>
  5577.     </div>
  5578.     
  5579.     <!-- ======= Back to Top =======-->
  5580.     <button id=\"back-to-top\"><i class=\"bi bi-arrow-up-short\"></i></button>
  5581.     <!-- End Back to top-->
  5582.     
  5583.     <!-- ======= Javascripts =======-->
  5584.     <script src=\"{{ asset('Accueil/vendors/bootstrap/bootstrap.bundle.min.js') }}\"></script>
  5585.     <script src=\"{{ asset('Accueil/vendors/gsap/gsap.min.js') }}\"></script>
  5586.     <script src=\"{{ asset('Accueil/vendors/imagesloaded/imagesloaded.pkgd.min.js') }}\"></script>
  5587.     <script src=\"{{ asset('Accueil/vendors/isotope/isotope.pkgd.min.js') }}\"></script>
  5588.     <script src=\"{{ asset('Accueil/vendors/glightbox/glightbox.min.js') }}\"></script>
  5589.     <script src=\"{{ asset('Accueil/vendors/swiper/swiper-bundle.min.js') }}\"></script>
  5590.     <script src=\"{{ asset('Accueil/vendors/aos/aos.js') }}\"></script>
  5591.     <script src=\"{{ asset('Accueil/vendors/purecounter/purecounter.js') }}\"></script>
  5592.     <script src=\"{{ asset('Accueil/js/js_nova.js') }}\"></script>
  5593.     <script src=\"{{ asset('Accueil/js/test-animations.js') }}\"></script>
  5594.     
  5595.     <!-- Initialize AOS -->
  5596.     <script>
  5597.       document.addEventListener('DOMContentLoaded', function() {
  5598.         console.log('DOM loaded, initializing AOS...');
  5599.         
  5600.         // Initialize AOS
  5601.         AOS.init({
  5602.           duration: 1000,
  5603.           easing: 'ease-in-out',
  5604.           once: true,
  5605.           mirror: false
  5606.         });
  5607.         
  5608.         console.log('AOS initialized');
  5609.         
  5610.         // Initialize PureCounter
  5611.         new PureCounter();
  5612.         
  5613.         // Initialize GLightbox
  5614.         const lightbox = GLightbox({
  5615.           selector: '.glightbox'
  5616.         });
  5617.         
  5618.         // Debug: Check if arch-line images are loaded
  5619.         const archLines = document.querySelectorAll('.arch-line');
  5620.         console.log('Found arch-line elements:', archLines.length);
  5621.         archLines.forEach((line, index) => {
  5622.           console.log(`Arch-line \${index + 1}:`, line.src, line.complete ? 'loaded' : 'loading...');
  5623.         });
  5624.         
  5625.         // Smooth scrolling for anchor links
  5626.         document.querySelectorAll('a[href^=\"#\"]').forEach(anchor => {
  5627.           anchor.addEventListener('click', function (e) {
  5628.             e.preventDefault();
  5629.             const target = document.querySelector(this.getAttribute('href'));
  5630.             if (target) {
  5631.               target.scrollIntoView({
  5632.                 behavior: 'smooth',
  5633.                 block: 'start'
  5634.               });
  5635.             }
  5636.           });
  5637.         });
  5638.         
  5639.         // Back to top button
  5640.         const backToTop = document.getElementById('back-to-top');
  5641.         if (backToTop) {
  5642.           window.addEventListener('scroll', function() {
  5643.             if (window.pageYOffset > 100) {
  5644.               backToTop.style.display = 'block';
  5645.             } else {
  5646.               backToTop.style.display = 'none';
  5647.             }
  5648.           });
  5649.           
  5650.           backToTop.addEventListener('click', function() {
  5651.             window.scrollTo({
  5652.               top: 0,
  5653.               behavior: 'smooth'
  5654.             });
  5655.           });
  5656.         }
  5657.         
  5658.         // Animation des flèches pour l'ancienne section
  5659.         function startArrowAnimation() {
  5660.           const arrowImg = document.querySelector('.MyImgFirstPosition');
  5661.           const lineImg = document.querySelector('.MyLineFirstPosition');
  5662.           
  5663.           if (arrowImg && lineImg) {
  5664.             // Démarrer l'animation après 1 seconde
  5665.             setTimeout(() => {
  5666.               arrowImg.classList.add('Myimg');
  5667.               lineImg.classList.add('MyLine');
  5668.             }, 1000);
  5669.           }
  5670.         }
  5671.         
  5672.         // Démarrer l'animation des flèches
  5673.         startArrowAnimation();
  5674.         
  5675.         // Slider simple (sans Owl Carousel pour l'instant)
  5676.         let currentSlide = 0;
  5677.         const slides = document.querySelectorAll('.single_slider');
  5678.         
  5679.         function showSlide(index) {
  5680.           slides.forEach((slide, i) => {
  5681.             slide.style.display = i === index ? 'flex' : 'none';
  5682.           });
  5683.         }
  5684.         
  5685.         function nextSlide() {
  5686.           currentSlide = (currentSlide + 1) % slides.length;
  5687.           showSlide(currentSlide);
  5688.         }
  5689.         
  5690.         // Initialiser le slider
  5691.         if (slides.length > 0) {
  5692.           showSlide(0);
  5693.           // Changer de slide toutes les 5 secondes
  5694.           setInterval(nextSlide, 5000);
  5695.         }
  5696.         
  5697.         // Nouveau slider functionality
  5698.         let currentHeroSlide = 0;
  5699.         const heroSlides = [
  5700.           {
  5701.             title: \"Révolutionnez la Communication\",
  5702.             description: \"Partagez vos aventures avec les familles en toute sécurité grâce à notre plateforme, agrémentée de photos, de vidéos et messages.\",
  5703.             image: \"{{ asset('Accueil/imagesAccueil/slider/child-laughing.jpg') }}\"
  5704.           },
  5705.           {
  5706.             title: \"La plateforme qui rassure les familles\",
  5707.             description: \"Partagez vos souvenirs en toute sécurité avec des photos, vidéos et messages vocaux.\",
  5708.             image: \"{{ asset('Accueil/imagesAccueil/secure.jpg') }}\"
  5709.           },
  5710.           {
  5711.             title: \"Messages vocaux et photos\",
  5712.             description: \"Restez connecté avec votre enfant tout au long du séjour grâce à notre technologie sécurisée.\",
  5713.             image: \"{{ asset('Accueil/imagesAccueil/slider/bg-slider.svg') }}\"
  5714.           }
  5715.         ];
  5716.         
  5717.         function changeSlide(direction) {
  5718.           currentHeroSlide = (currentHeroSlide + direction + heroSlides.length) % heroSlides.length;
  5719.           updateHeroSlider();
  5720.         }
  5721.         
  5722.         function updateHeroSlider() {
  5723.           const titleElement = document.querySelector('.hero-slider-title');
  5724.           const descriptionElement = document.querySelector('.hero-slider-description');
  5725.           const imageElement = document.querySelector('.hero-slider-image img');
  5726.           
  5727.           if (titleElement && descriptionElement && imageElement) {
  5728.             // Animation de transition
  5729.             titleElement.style.opacity = '0';
  5730.             descriptionElement.style.opacity = '0';
  5731.             
  5732.             setTimeout(() => {
  5733.               titleElement.textContent = heroSlides[currentHeroSlide].title;
  5734.               descriptionElement.textContent = heroSlides[currentHeroSlide].description;
  5735.               imageElement.src = heroSlides[currentHeroSlide].image;
  5736.               
  5737.               titleElement.style.opacity = '1';
  5738.               descriptionElement.style.opacity = '1';
  5739.             }, 300);
  5740.           }
  5741.         }
  5742.         
  5743.         // Auto-play pour le nouveau slider
  5744.         setInterval(() => {
  5745.           changeSlide(1);
  5746.         }, 6000);
  5747.         
  5748.         // Gestion du formulaire de contact de la section contact
  5749.         const contactFormSection = document.getElementById('contactFormSection');
  5750.         const successMessageSection = document.getElementById('successMessageSection');
  5751.         const errorMessageSection = document.getElementById('errorMessageSection');
  5752.         
  5753.         if (contactFormSection) {
  5754.           contactFormSection.addEventListener('submit', function(e) {
  5755.             e.preventDefault();
  5756.             
  5757.             // Masquer les messages précédents
  5758.             successMessageSection.classList.add('d-none');
  5759.             errorMessageSection.classList.add('d-none');
  5760.             
  5761.             // Désactiver le bouton pendant l'envoi
  5762.             const submitButton = contactFormSection.querySelector('button[type=\"submit\"]');
  5763.             const originalText = submitButton.textContent;
  5764.             submitButton.textContent = 'Envoi en cours...';
  5765.             submitButton.disabled = true;
  5766.             
  5767.             // Récupérer les données du formulaire
  5768.             const formData = new FormData(contactFormSection);
  5769.             
  5770.             // Envoyer la requête AJAX
  5771.             fetch(contactFormSection.action, {
  5772.               method: 'POST',
  5773.               body: formData,
  5774.               headers: {
  5775.                 'X-Requested-With': 'XMLHttpRequest'
  5776.               }
  5777.             })
  5778.             .then(response => response.json())
  5779.             .then(data => {
  5780.               if (data.success) {
  5781.                 // Afficher le message de succès
  5782.                 successMessageSection.textContent = data.message;
  5783.                 successMessageSection.classList.remove('d-none');
  5784.                 
  5785.                 // Réinitialiser le formulaire
  5786.                 contactFormSection.reset();
  5787.               } else {
  5788.                 // Afficher le message d'erreur
  5789.                 errorMessageSection.textContent = data.message;
  5790.                 errorMessageSection.classList.remove('d-none');
  5791.               }
  5792.             })
  5793.             .catch(error => {
  5794.               console.error('Erreur:', error);
  5795.               errorMessageSection.textContent = 'Une erreur est survenue lors de l\\'envoi du message. Veuillez réessayer plus tard.';
  5796.               errorMessageSection.classList.remove('d-none');
  5797.             })
  5798.             .finally(() => {
  5799.               // Réactiver le bouton
  5800.               submitButton.textContent = originalText;
  5801.               submitButton.disabled = false;
  5802.             });
  5803.           });
  5804.         }
  5805.         
  5806.       });
  5807.     </script>
  5808.     <!-- End JavaScripts-->
  5809. <!-- MODAL CONNEXION -->
  5810. <div class=\"modal fade\" id=\"loginModal\" tabindex=\"-1\" aria-hidden=\"true\">
  5811.   <div class=\"modal-dialog modal-dialog-centered modal-lg\">
  5812.     <div class=\"modal-content rounded-4\">
  5813.       <div class=\"modal-header border-0\">
  5814.         <h5 class=\"modal-title fw-bold\">Accéder à mon espace de séjour </h5>
  5815.         <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Fermer\"></button>
  5816.       </div>
  5817.       <div class=\"modal-body p-4\">
  5818.         <div class=\"row g-4 align-items-center\">
  5819.           <div class=\"col-lg-5 text-center border-end\">
  5820.             <img src=\"/images/Accompagnateur/LogoEspaceAccom.svg\" alt=\"Espace accompagnateur\" class=\"img-fluid mb-3\" style=\"max-height: 120px;\">
  5821.             <p class=\"small text-muted mb-0\">
  5822.               Retrouvez votre séjour, publiez vos contenus et rassurez les familles en temps réel.
  5823.             </p>
  5824.           </div>
  5825.           <div class=\"col-lg-7\">
  5826.             <div class=\"titleAutre mb-3\">Vous êtes accompagnateur et disposez déjà d'un identifiant et d'un mot de passe.</div>
  5827.             <form method=\"post\" class=\"fomru\" action=\"{{ path('app_back_Acommpa') }}\">
  5828.               <div class=\"form-group d-grid gap-3\">
  5829.                 <input type=\"text\" value=\"\" name=\"email\" id=\"modalInputEmail\" class=\"form-control\" placeholder=\" Code séjour de l'accompagnateur * \">
  5830.                 <input type=\"password\" name=\"password\" id=\"modalInputPassword\" class=\"form-control\" placeholder=\"mot de passe fourni à l'organisme * \">
  5831.                 <input type=\"hidden\" name=\"_csrf_token\" value=\"{{ csrf_token('authenticate') }}\">
  5832.                 <div class=\"description\"><a href=\"#\" data-bs-toggle=\"modal\" data-bs-target=\"#mdpoblier\" style=\"color:#f09e7a;\">Vous avez oublié votre mot de passe</a></div>
  5833.               </div>
  5834.               <div class=\"d-grid mt-4\">
  5835.                 <button class=\"btn btn-primary rounded-3\" type=\"submit\">Je me connecte</button>
  5836.               </div>
  5837.             </form>
  5838.           </div>
  5839.         </div>
  5840.       </div>
  5841.     </div>
  5842.   </div>
  5843. </div>
  5844. <!-- MODAL MOT DE PASSE OUBLIÉ -->
  5845. <div class=\"modal fade\" id=\"mdpoblier\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"exampleModalLabel\" aria-hidden=\"true\">
  5846.   <div class=\"modal-dialog\" role=\"document\">
  5847.     <div class=\"modal-content\" style=\"border-radius: 0px;top: 50px;width: 55%;margin: auto;min-width: 270px;\">
  5848.       <div class=\"modal-header\">
  5849.         <button type=\"button\" class=\"close\" data-bs-dismiss=\"modal\" aria-label=\"Close\">
  5850.           <img src=\"{{ asset('images/Groupe_526.svg')}}\">
  5851.         </button>
  5852.       </div>
  5853.       <div class=\"modal-body\" style=\"text-align:center\">
  5854.         <h5 class=\"modal-title\" id=\"exampleModalLabel\" style=\"margin-left:15px; margin-bottom: 15px\">
  5855.           <img class=\"imageLogo2\" style=\"width: 58% !important;\" src=\"{{ asset('Accueil/imagesAccueil/logoHeader.svg')}}\">
  5856.         </h5>
  5857.         <div class=\"row no-margin\" style=\"padding-bottom: 40px;\">
  5858.           <div class=\"col-md-12 col-sm-12 col-xs-12 descTitre\">
  5859.             <strong>Vous avez oublié votre mot de passe ? Contactez notre équipe 5sur5sejour au 05 36 28 29 30.</strong>
  5860.           </div>
  5861.         </div>
  5862.       </div>
  5863.     </div>
  5864.   </div>
  5865. </div>
  5866. <!-- MODAL CONNEXION PARTENAIRE -->
  5867. <div class=\"modal fade\" id=\"partnerLoginModal\" tabindex=\"-1\" aria-hidden=\"true\">
  5868.   <div class=\"modal-dialog modal-dialog-centered modal-lg\">
  5869.     <div class=\"modal-content rounded-4\">
  5870.       <div class=\"modal-header border-0\">
  5871.         <h5 class=\"modal-title fw-bold\">Espace Partenaire - Connexion</h5>
  5872.         <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Fermer\"></button>
  5873.       </div>
  5874.       <div class=\"modal-body p-4\">
  5875.         <div class=\"row g-4 align-items-center\">
  5876.           <div class=\"col-lg-5 text-center border-end\">
  5877.             <img src=\"{{ asset('Accueil/imagesAccueil/espcPart.svg') }}\" alt=\"Espace partenaire\" class=\"img-fluid mb-3\" style=\"max-height: 120px;\">
  5878.             <p class=\"small text-muted mb-0\">
  5879.               Créez et gérez tous vos séjours depuis un espace dédié, avec un service client sur mesure et des outils pensés pour vous.
  5880.             </p>
  5881.           </div>
  5882.           <div class=\"col-lg-7\">
  5883.             <div class=\"titleAutre mb-3\">Vous êtes partenaire</div>
  5884.             <div class=\"sous-titrecnx mb-3\">Bienvenue dans votre espace 5 sur 5 séjour</div>
  5885.             <div class=\"descriptioncnx mb-4\">Entrez votre identifiant et votre mot de passe afin d'entrer dans votre plateforme d'administration</div>
  5886.             
  5887.             <form method=\"post\" action=\"{{ path('app_login_back_Partenaire') }}\">
  5888.               <div class=\"form-group d-grid gap-3\">
  5889.                 <input type=\"text\" name=\"email\" id=\"partnerInputEmail\" class=\"form-control\" placeholder=\"Mail partenaire\" value=\"\">
  5890.                 <input type=\"password\" name=\"password\" id=\"partnerInputPassword\" class=\"form-control\" placeholder=\"Mot de passe\">
  5891.                 <input type=\"hidden\" name=\"_csrf_token\" value=\"{{ csrf_token('authenticate') }}\">
  5892.                 <div class=\"description\">
  5893.                   <a href=\"/forgotPasspatenaire\" style=\"color:#f09e7a;\">Vous avez oublié votre mot de passe</a>
  5894.                 </div>
  5895.               </div>
  5896.               <div class=\"d-grid mt-4\">
  5897.                 <button class=\"btn btn-primary rounded-3\" type=\"submit\">Je me connecte</button>
  5898.               </div>
  5899.             </form>
  5900.           </div>
  5901.         </div>
  5902.       </div>
  5903.     </div>
  5904.   </div>
  5905. </div>
  5906. <!-- Modale ultra-légère -->
  5907. <div class=\"modal fade\" id=\"groupBuyLite\" tabindex=\"-1\" aria-hidden=\"true\">
  5908.   <div class=\"modal-dialog modal-dialog-centered\">
  5909.     <div class=\"modal-content rounded-4\">
  5910.       <div class=\"modal-header\">
  5911.         <h5 class=\"modal-title\">Achat groupé — jusqu’à −20%</h5>
  5912.         <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Fermer\"></button>
  5913.       </div>
  5914.       <div class=\"modal-body\">
  5915.         <ul class=\"small text-muted ps-3\">
  5916.           <li>Remise automatique selon le volume (ex. −10% dès 5, −15% dès 10, −20% dès 20).</li>
  5917.           <li>Applicable sur albums, tirages et packs.</li>
  5918.           <li>La structure peut prendre en charge Parent Premium (tarif préférentiel, voix illimitée incluse).</li>
  5919.         </ul>
  5920.         <div class=\"alert alert-info small mb-0\">
  5921.           <i class=\"bi bi-info-circle me-1\"></i>
  5922.           La remise sera affichée sur la boutique. Munissez-vous du <strong>code séjour</strong> si demandé.
  5923.         </div>
  5924.       </div>
  5925.       <div class=\"modal-footer d-block\">
  5926.         <div class=\"d-grid d-sm-flex gap-2\">
  5927.           <!-- Redirection directe (aucun champ) -->
  5928.           <a class=\"btn btn-primary\"
  5929.              href=\"/boutique?groupbuy=1&utm_source=site&utm_medium=modal&utm_campaign=group_buy\"
  5930.              data-action=\"group_buy_continue\">
  5931.             Aller à la boutique
  5932.           </a>
  5933.           <button class=\"btn btn-outline-secondary\" data-bs-dismiss=\"modal\">Plus tard</button>
  5934.         </div>
  5935.         <p class=\"small text-muted mt-2 mb-0\">
  5936.           Besoin d’aide ? <a href=\"#\" data-action=\"cta_expert\">Parler à un expert</a>
  5937.         </p>
  5938.       </div>
  5939.     </div>
  5940.   </div>
  5941. </div>
  5942. <!-- MODALE CHOIX DE PAIEMENT -->
  5943. <div class=\"modal fade\" id=\"checkoutChoiceModal\" tabindex=\"-1\" aria-labelledby=\"checkoutChoiceModalLabel\" aria-hidden=\"true\" data-bs-backdrop=\"static\" data-bs-keyboard=\"false\">
  5944.     <div class=\"modal-dialog modal-lg modal-dialog-centered\">
  5945.         <div class=\"modal-content\">
  5946.             <div class=\"modal-header border-0 pb-0\">
  5947.                 <h5 class=\"modal-title w-100 text-center\" id=\"checkoutChoiceModalLabel\">
  5948.                     <i class=\"bi bi-credit-card-2-front me-2\"></i>
  5949.                     Comment souhaitez-vous procéder ?
  5950.                 </h5>
  5951.                 <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>
  5952.             </div>
  5953.             <div class=\"modal-body px-5 py-4\">
  5954.                 <!-- Récapitulatif du pack sélectionné -->
  5955.                 <div class=\"alert alert-primary border-primary mb-4 d-flex align-items-center justify-content-between\" role=\"alert\" id=\"packSummary\" style=\"display: none !important;\">
  5956.                     <div class=\"d-flex align-items-center gap-3\">
  5957.                         <i class=\"bi bi-box-seam fs-3\"></i>
  5958.                         <div>
  5959.                             <div class=\"fw-bold mb-1\">Pack sélectionné</div>
  5960.                             <div class=\"h5 mb-0\" id=\"packName\">—</div>
  5961.                         </div>
  5962.                     </div>
  5963.                     <div class=\"text-end\">
  5964.                         <div class=\"text-muted small\">Montant annuel</div>
  5965.                         <div class=\"h4 mb-0 fw-bold\" id=\"packPrice\">—</div>
  5966.                     </div>
  5967.                 </div>
  5968.                 
  5969.                 <p class=\"text-center text-muted mb-4\">Choisissez le mode de souscription adapté à votre structure</p>
  5970.                 
  5971.                 <div class=\"row g-4\">
  5972.                     <!-- Card 1 — Souscription en ligne -->
  5973.                     <div class=\"col-lg-4 col-md-6\">
  5974.                         <div class=\"card h-100 border-2 checkout-choice-card\" data-choice=\"online\" tabindex=\"0\" role=\"button\">
  5975.                             <div class=\"card-body d-flex flex-column\">
  5976.                                 <div class=\"mb-3\">
  5977.                                     <span class=\"badge bg-success text-white mb-2\">Recommandé</span>
  5978.                                     <h4 class=\"card-title mb-2\">Souscrire en ligne</h4>
  5979.                                     <p class=\"text-muted small\">CB / SEPA — activation en 24 h. Facturation annuelle.</p>
  5980.                                 </div>
  5981.                                 <ul class=\"list-unstyled mb-4 flex-grow-1\">
  5982.                                     <li class=\"mb-2\"><i class=\"bi bi-check-circle-fill text-success me-2\"></i>Stripe Checkout sécurisé</li>
  5983.                                     <li class=\"mb-2\"><i class=\"bi bi-check-circle-fill text-success me-2\"></i>Facture et mandat SEPA automatiques</li>
  5984.                                     <li class=\"mb-2\"><i class=\"bi bi-check-circle-fill text-success me-2\"></i>Planifier l'onboarding (30 min)</li>
  5985.                                 </ul>
  5986.                                 <button class=\"btn btn-primary w-100\" data-cta=\"checkout_online\" data-loc=\"modal\">
  5987.                                     <i class=\"bi bi-credit-card me-2\"></i>Payer & activer
  5988.                                 </button>
  5989.                             </div>
  5990.                         </div>
  5991.                     </div>
  5992.                     <!-- Card 2 — Virement bancaire -->
  5993.                     <div class=\"col-lg-4 col-md-6\">
  5994.                         <div class=\"card h-100 border-2 checkout-choice-card\" data-choice=\"bank_transfer\" tabindex=\"0\" role=\"button\">
  5995.                             <div class=\"card-body d-flex flex-column\">
  5996.                                 <div class=\"mb-3\">
  5997.                                     <span class=\"badge bg-info text-white mb-2\">Économique</span>
  5998.                                     <h4 class=\"card-title mb-2\">Virement bancaire</h4>
  5999.                                     <p class=\"text-muted small\">Paiement par virement — activation sous 48h après réception.</p>
  6000.                                 </div>
  6001.                                 <ul class=\"list-unstyled mb-4 flex-grow-1\">
  6002.                                     <li class=\"mb-2\"><i class=\"bi bi-check-circle-fill text-info me-2\"></i>RIB fourni automatiquement</li>
  6003.                                     <li class=\"mb-2\"><i class=\"bi bi-check-circle-fill text-info me-2\"></i>Facture proforma envoyée</li>
  6004.                                     <li class=\"mb-2\"><i class=\"bi bi-check-circle-fill text-info me-2\"></i>Activation après réception</li>
  6005.                                 </ul>
  6006.                                 <button type=\"button\" class=\"btn btn-outline-info w-100\" data-bs-toggle=\"modal\" data-bs-target=\"#bankTransferModal\" data-bs-dismiss=\"modal\">
  6007.                                     <i class=\"bi bi-bank me-2\"></i>Demander le RIB
  6008.                                 </button>
  6009.                             </div>
  6010.                         </div>
  6011.                     </div>
  6012.                     <!-- Card 3 — Devis / Bon de commande -->
  6013.                     <div class=\"col-lg-4 col-md-6\">
  6014.                         <div class=\"card h-100 border-2 checkout-choice-card\" data-choice=\"quote\" tabindex=\"0\" role=\"button\">
  6015.                             <div class=\"card-body d-flex flex-column\">
  6016.                                 <div class=\"mb-3\">
  6017.                                     <h4 class=\"card-title mb-2 mt-4\">Demander un devis / BC</h4>
  6018.                                     <p class=\"text-muted small\">Adapté écoles publiques, collectivités, associations.</p>
  6019.                                 </div>
  6020.                                 <ul class=\"list-unstyled mb-4 flex-grow-1\">
  6021.                                     <li class=\"mb-2\"><i class=\"bi bi-check-circle-fill text-primary me-2\"></i>Devis PDF instantané</li>
  6022.                                     <li class=\"mb-2\"><i class=\"bi bi-check-circle-fill text-primary me-2\"></i>DPA/RGPD, RIB, CGV joints</li>
  6023.                                     <li class=\"mb-2\"><i class=\"bi bi-check-circle-fill text-primary me-2\"></i>E‑signature & upload du BC</li>
  6024.                                 </ul>
  6025.                                 <button class=\"btn btn-outline-primary w-100\" data-cta=\"checkout_quote\" data-loc=\"modal\">
  6026.                                     <i class=\"bi bi-file-earmark-text me-2\"></i>Recevoir le devis
  6027.                                 </button>
  6028.                             </div>
  6029.                         </div>
  6030.                     </div>
  6031.                 </div>
  6032.             </div>
  6033.             <div class=\"modal-footer border-0 pt-0\">
  6034.                 <button type=\"button\" class=\"btn btn-secondary\" data-bs-dismiss=\"modal\">Retour</button>
  6035.             </div>
  6036.         </div>
  6037.     </div>
  6038. </div>
  6039. <!-- MODALE VIREMENT BANCAIRE (RIB) -->
  6040. <div class=\"modal fade\" id=\"bankTransferModal\" tabindex=\"-1\" aria-labelledby=\"bankTransferModalLabel\" aria-hidden=\"true\" data-bs-backdrop=\"static\" data-bs-keyboard=\"false\">
  6041.     <div class=\"modal-dialog modal-xl modal-dialog-centered\">
  6042.         <div class=\"modal-content\">
  6043.             <div class=\"modal-header border-0 pb-2\">
  6044.                 <h5 class=\"modal-title w-100 text-center\" id=\"bankTransferModalLabel\">
  6045.                     <i class=\"bi bi-bank2 me-2 text-info\"></i>
  6046.                     Virement bancaire — RIB instantané
  6047.                 </h5>
  6048.                 <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Close\"></button>
  6049.             </div>
  6050.             <div class=\"modal-body p-4\">
  6051.                 <div class=\"row\">
  6052.                     <!-- Colonne formulaire -->
  6053.                     <div class=\"col-lg-5\">
  6054.                         <div class=\"card border-0 bg-light h-100\">
  6055.                             <div class=\"card-body p-4\">
  6056.                                 <h6 class=\"text-info mb-3\">
  6057.                                     <i class=\"bi bi-person-circle me-2\"></i>Vos informations
  6058.                                 </h6>
  6059.                                 <p class=\"text-muted small mb-4\">Nous vous enverrons le RIB et la facture proforma par email</p>
  6060.                                 
  6061.                                 <form id=\"rib-form\" method=\"post\" action=\"{{ path('bank_transfer_request') }}\" data-event=\"rib_request_submit\">
  6062.                                     <div class=\"mb-4\">
  6063.                                         <label for=\"rib_fullname\" class=\"form-label fw-semibold\">
  6064.                                             <i class=\"bi bi-person me-1\"></i>Nom & prénom *
  6065.                                         </label>
  6066.                                         <input id=\"rib_fullname\" name=\"full_name\" class=\"form-control form-control-lg\" required 
  6067.                                                placeholder=\"Ex: Marie Dupont\" autocomplete=\"name\">
  6068.                                     </div>
  6069.                                     
  6070.                                     <div class=\"mb-4\">
  6071.                                         <label for=\"rib_email\" class=\"form-label fw-semibold\">
  6072.                                             <i class=\"bi bi-envelope me-1\"></i>Email de facturation *
  6073.                                         </label>
  6074.                                         <input id=\"rib_email\" name=\"billing_email\" type=\"email\" class=\"form-control form-control-lg\" required 
  6075.                                                placeholder=\"Ex: comptabilite@ecole.fr\" autocomplete=\"email\">
  6076.                                     </div>
  6077.                                     <div class=\"mb-4\">
  6078.                                         <label for=\"rib_company\" class=\"form-label fw-semibold\">
  6079.                                             <i class=\"bi bi-building me-1\"></i>Nom de la structure
  6080.                                         </label>
  6081.                                         <input id=\"rib_company\" name=\"company\" class=\"form-control form-control-lg\" 
  6082.                                                placeholder=\"Ex: École Primaire Jean Moulin\" autocomplete=\"organization\">
  6083.                                     </div>
  6084.                                     <!-- Contexte pack (sera rempli dynamiquement) -->
  6085.                                     <input type=\"hidden\" name=\"pack_id\" id=\"rib_pack_id\" value=\"\">
  6086.                                     <div class=\"d-grid\">
  6087.                                         <button class=\"btn btn-info btn-lg py-3\" id=\"rib-submit\" type=\"submit\" data-cta=\"rib_request\" data-loc=\"wire\">
  6088.                                             <i class=\"bi bi-bank me-2\"></i>Obtenir le RIB instantanément
  6089.                                         </button>
  6090.                                     </div>
  6091.                                     
  6092.                                     <p class=\"text-muted text-center small mt-3 mb-0\">
  6093.                                         <i class=\"bi bi-shield-check me-1\"></i>
  6094.                                         Sécurisé • Données hébergées en France • Conforme RGPD
  6095.                                     </p>
  6096.                                 </form>
  6097.                             </div>
  6098.                         </div>
  6099.                     </div>
  6100.                     <!-- Colonne RIB -->
  6101.                     <div class=\"col-lg-7\">
  6102.                         <div id=\"rib-panel\" class=\"card border-info\" style=\"display: none;\">
  6103.                             <div class=\"card-header bg-info text-white\">
  6104.                                 <h6 class=\"mb-0\">
  6105.                                     <i class=\"bi bi-bank me-2\"></i>Coordonnées bancaires 5sur5séjour
  6106.                                 </h6>
  6107.                             </div>
  6108.                             <div class=\"card-body p-4\">
  6109.                                 <div class=\"row g-4\">
  6110.                                     <div class=\"col-md-6\">
  6111.                                         <div class=\"border-bottom pb-2 mb-2\">
  6112.                                             <div class=\"text-muted small text-uppercase fw-bold\">Titulaire du compte</div>
  6113.                                             <div class=\"h6 mb-0\">S.A.S. TRUST CONSEILS</div>
  6114.                                         </div>
  6115.                                     </div>
  6116.                                     <div class=\"col-md-6\">
  6117.                                         <div class=\"border-bottom pb-2 mb-2\">
  6118.                                             <div class=\"text-muted small text-uppercase fw-bold\">Banque</div>
  6119.                                             <div class=\"h6 mb-0\">CR CENTRE EST</div>
  6120.                                         </div>
  6121.                                     </div>
  6122.                                     <div class=\"col-12\">
  6123.                                         <div class=\"border-bottom pb-2 mb-2\">
  6124.                                             <div class=\"text-muted small text-uppercase fw-bold\">IBAN</div>
  6125.                                             <div class=\"d-flex align-items-center gap-3\">
  6126.                                                 <code id=\"iban-text\" class=\"user-select-all h6 mb-0 text-primary\">FR76 1780 6009 6304 1603 4748 776</code>
  6127.                                                 <button type=\"button\" class=\"btn btn-outline-primary\" data-cta=\"copy_iban\" aria-label=\"Copier l'IBAN\" onclick=\"copyToClipboard('iban-text', this)\">
  6128.                                                     <i class=\"bi bi-clipboard me-1\"></i>Copier
  6129.                                                 </button>
  6130.                                             </div>
  6131.                                         </div>
  6132.                                     </div>
  6133.                                     <div class=\"col-md-6\">
  6134.                                         <div class=\"border-bottom pb-2 mb-2\">
  6135.                                             <div class=\"text-muted small text-uppercase fw-bold\">Code BIC</div>
  6136.                                             <div class=\"d-flex align-items-center gap-3\">
  6137.                                                 <code id=\"bic-text\" class=\"user-select-all h6 mb-0 text-primary\">AGRIFRPP878</code>
  6138.                                                 <button type=\"button\" class=\"btn btn-outline-primary btn-sm\" data-cta=\"copy_bic\" aria-label=\"Copier le BIC\" onclick=\"copyToClipboard('bic-text', this)\">
  6139.                                                     <i class=\"bi bi-clipboard\"></i>
  6140.                                                 </button>
  6141.                                             </div>
  6142.                                         </div>
  6143.                                     </div>
  6144.                                     <div class=\"col-md-6\">
  6145.                                         <div class=\"border-bottom pb-2 mb-2\">
  6146.                                             <div class=\"text-muted small text-uppercase fw-bold\">Référence à indiquer</div>
  6147.                                             <div class=\"h6 mb-0 text-success\">PACK-PRO-<span id=\"rib-ref-date\"></span></div>
  6148.                                         </div>
  6149.                                     </div>
  6150.                                 </div>
  6151.                                 <div class=\"alert alert-success mt-4\" role=\"alert\">
  6152.                                     <i class=\"bi bi-check-circle me-2\"></i>
  6153.                                     <strong>Email envoyé !</strong> Vous recevrez le RIB et la facture proforma à <span id=\"rib-email-echo\" class=\"fw-bold\">votre adresse</span>.
  6154.                                 </div>
  6155.                                 <div class=\"d-flex flex-wrap gap-3 mt-4\">
  6156.                                     <a class=\"btn btn-primary\" href=\"#\" id=\"proforma-download-link\" data-cta=\"download_proforma\">
  6157.                                         <i class=\"bi bi-download me-2\"></i>Télécharger la facture proforma
  6158.                                     </a>
  6159.                                     <a class=\"btn btn-outline-secondary\" href=\"https://calendly.com/5sur5sejour/demo\" target=\"_blank\" data-cta=\"book_call\">
  6160.                                         <i class=\"bi bi-telephone me-2\"></i>Planifier un appel
  6161.                                     </a>
  6162.                                 </div>
  6163.                                 <div class=\"text-muted small mt-3\">
  6164.                                     <i class=\"bi bi-info-circle me-1\"></i>
  6165.                                     Activation de votre compte sous 48h après réception du virement.
  6166.                                 </div>
  6167.                             </div>
  6168.                         </div>
  6169.                         <!-- Message d'attente -->
  6170.                         <div id=\"rib-waiting\" class=\"text-center p-5\">
  6171.                             <i class=\"bi bi-bank2 text-muted\" style=\"font-size: 4rem;\"></i>
  6172.                             <h5 class=\"text-muted mt-3\">Remplissez le formulaire pour obtenir le RIB</h5>
  6173.                             <p class=\"text-muted\">Vos coordonnées bancaires apparaîtront ici instantanément</p>
  6174.                         </div>
  6175.                     </div>
  6176.                 </div>
  6177.             </div>
  6178.         </div>
  6179.     </div>
  6180. </div>
  6181. <script>
  6182. document.addEventListener('DOMContentLoaded', function() {
  6183.     console.log('✅ Page Accueil - Modale checkout initialisée');
  6184.     
  6185.     // Mapping des packs
  6186.     const packLabels = {
  6187.         'access': 'Pack Accès',
  6188.         'serenite': 'Pack Sérénité',
  6189.         'pro_illimite': 'Partenariat à la performance ✨'
  6190.     };
  6191.     
  6192.     // Récupérer le pack sélectionné lors de l'ouverture de la modale
  6193.     const checkoutModal = document.getElementById('checkoutChoiceModal');
  6194.     const bankTransferModal = document.getElementById('bankTransferModal');
  6195.     let selectedPack = null;
  6196.     let selectedPackPrice = null;
  6197.     
  6198.     if (checkoutModal) {
  6199.         checkoutModal.addEventListener('show.bs.modal', function(event) {
  6200.             const button = event.relatedTarget;
  6201.             selectedPack = button.getAttribute('data-pack');
  6202.             selectedPackPrice = button.getAttribute('data-pack-price');
  6203.             console.log('📦 Pack sélectionné:', selectedPack, '- Prix:', selectedPackPrice + '€');
  6204.             
  6205.             // Afficher le récapitulatif du pack
  6206.             const packSummary = document.getElementById('packSummary');
  6207.             const packName = document.getElementById('packName');
  6208.             const packPrice = document.getElementById('packPrice');
  6209.             
  6210.             if (packSummary && packName && packPrice) {
  6211.                 packName.textContent = packLabels[selectedPack] || selectedPack;
  6212.                 packPrice.textContent = selectedPackPrice + ' € / an';
  6213.                 packSummary.style.display = 'flex';
  6214.             }
  6215.         });
  6216.     }
  6217.     
  6218.     // Transférer le pack sélectionné au modal RIB
  6219.     if (bankTransferModal) {
  6220.         bankTransferModal.addEventListener('show.bs.modal', function(event) {
  6221.             console.log('📦 Ouverture modal RIB avec pack:', selectedPack);
  6222.             // Remplir le champ caché avec le pack sélectionné
  6223.             const ribPackIdField = document.getElementById('rib_pack_id');
  6224.             if (ribPackIdField) {
  6225.                 ribPackIdField.value = selectedPack || '';
  6226.                 console.log('✅ Pack ID défini dans le formulaire:', ribPackIdField.value);
  6227.                 
  6228.                 // ALERTE SI PAS DE PACK SÉLECTIONNÉ
  6229.                 if (!selectedPack) {
  6230.                     console.warn('⚠️ ATTENTION: Aucun pack sélectionné ! La commande ne sera pas créée.');
  6231.                     alert('⚠️ DEBUG: Aucun pack sélectionné. Cliquez d\\'abord sur un bouton de pack (Sérénité ou Découverte) avant de demander le RIB.');
  6232.                 }
  6233.             }
  6234.         });
  6235.     }
  6236.     
  6237.     // =========================
  6238.     // GESTION DU FORMULAIRE RIB
  6239.     // =========================
  6240.     const ribForm = document.getElementById('rib-form');
  6241.     const ribSubmit = document.getElementById('rib-submit');
  6242.     const ribPanel = document.getElementById('rib-panel');
  6243.     const ribWaiting = document.getElementById('rib-waiting');
  6244.     const ribEmailEcho = document.getElementById('rib-email-echo');
  6245.     const ribRefDate = document.getElementById('rib-ref-date');
  6246.     const proformaDownloadLink = document.getElementById('proforma-download-link');
  6247.     
  6248.     if (ribForm && ribSubmit) {
  6249.         // Set current date for reference
  6250.         if (ribRefDate) {
  6251.             const now = new Date();
  6252.             const dateStr = now.getFullYear().toString().slice(-2) + 
  6253.                            (now.getMonth() + 1).toString().padStart(2, '0') + 
  6254.                            now.getDate().toString().padStart(2, '0');
  6255.             ribRefDate.textContent = dateStr;
  6256.         }
  6257.         
  6258.         ribForm.addEventListener('submit', function(e) {
  6259.             e.preventDefault();
  6260.             
  6261.             // Get form data
  6262.             const formData = new FormData(ribForm);
  6263.             const fullName = formData.get('full_name');
  6264.             const billingEmail = formData.get('billing_email');
  6265.             const company = formData.get('company');
  6266.             const packId = formData.get('pack_id');
  6267.             
  6268.             // Validation
  6269.             if (!fullName || fullName.trim().length < 2) {
  6270.                 showFieldError('rib_fullname', 'Veuillez saisir votre nom complet');
  6271.                 return;
  6272.             }
  6273.             
  6274.             if (!billingEmail || !isValidEmail(billingEmail)) {
  6275.                 showFieldError('rib_email', 'Veuillez saisir une adresse email valide');
  6276.                 return;
  6277.             }
  6278.             
  6279.             // Clear any previous errors
  6280.             clearFieldErrors();
  6281.             
  6282.             // Show loading state
  6283.             ribSubmit.disabled = true;
  6284.             ribSubmit.innerHTML = '<i class=\"bi bi-hourglass-split me-2\"></i>Envoi en cours...';
  6285.             
  6286.             // Send to backend
  6287.             fetch('{{ path(\"bank_transfer_request\") }}', {
  6288.                 method: 'POST',
  6289.                 body: formData
  6290.             })
  6291.             .then(res => res.json())
  6292.             .then(data => {
  6293.                 if (data.success) {
  6294.                     showRibSuccess(billingEmail, fullName, company, data.requestNumber);
  6295.                 } else {
  6296.                     throw new Error(data.message || 'Erreur lors de l\\'envoi');
  6297.                 }
  6298.             })
  6299.             .catch(err => {
  6300.                 alert('❌ Erreur : ' + err.message);
  6301.                 ribSubmit.disabled = false;
  6302.                 ribSubmit.innerHTML = '<i class=\"bi bi-bank me-2\"></i>Obtenir le RIB instantanément';
  6303.             });
  6304.         });
  6305.     }
  6306.     
  6307.     function showFieldError(fieldId, message) {
  6308.         const field = document.getElementById(fieldId);
  6309.         if (field) {
  6310.             field.classList.add('is-invalid');
  6311.             
  6312.             // Remove existing error message
  6313.             const existingError = field.parentNode.querySelector('.invalid-feedback');
  6314.             if (existingError) {
  6315.                 existingError.remove();
  6316.             }
  6317.             
  6318.             // Add new error message
  6319.             const errorDiv = document.createElement('div');
  6320.             errorDiv.className = 'invalid-feedback';
  6321.             errorDiv.textContent = message;
  6322.             field.parentNode.appendChild(errorDiv);
  6323.         }
  6324.     }
  6325.     
  6326.     function clearFieldErrors() {
  6327.         const invalidFields = document.querySelectorAll('.is-invalid');
  6328.         invalidFields.forEach(field => {
  6329.             field.classList.remove('is-invalid');
  6330.         });
  6331.         
  6332.         const errorMessages = document.querySelectorAll('.invalid-feedback');
  6333.         errorMessages.forEach(error => {
  6334.             error.remove();
  6335.         });
  6336.     }
  6337.     
  6338.     function showRibSuccess(email, name, company, requestNumber) {
  6339.         // Hide waiting message
  6340.         if (ribWaiting) {
  6341.             ribWaiting.style.display = 'none';
  6342.         }
  6343.         
  6344.         // Show RIB panel
  6345.         if (ribPanel) {
  6346.             ribPanel.style.display = 'block';
  6347.         }
  6348.         
  6349.         // Update email echo
  6350.         if (ribEmailEcho) {
  6351.             ribEmailEcho.textContent = email;
  6352.         }
  6353.         
  6354.         // Generate proforma download link
  6355.         if (proformaDownloadLink && requestNumber) {
  6356.             proformaDownloadLink.href = '/proforma-download/' + requestNumber;
  6357.         }
  6358.         
  6359.         // Scroll to RIB panel
  6360.         if (ribPanel) {
  6361.             ribPanel.scrollIntoView({ behavior: 'smooth', block: 'start' });
  6362.         }
  6363.         
  6364.         // Reset button
  6365.         if (ribSubmit) {
  6366.             ribSubmit.disabled = false;
  6367.             ribSubmit.innerHTML = '<i class=\"bi bi-bank me-2\"></i>Obtenir le RIB instantanément';
  6368.         }
  6369.         
  6370.         console.log('✅ RIB request submitted:', { name, email, company });
  6371.     }
  6372.     
  6373.     function isValidEmail(email) {
  6374.         const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+\$/;
  6375.         return emailRegex.test(email);
  6376.     }
  6377.     
  6378.     // Gérer le clic sur \"Payer & activer\" (Stripe)
  6379.     document.querySelector('[data-cta=\"checkout_online\"]')?.addEventListener('click', function() {
  6380.         alert('Paiement Stripe en cours de développement\\n\\nPack : ' + selectedPack + '\\nPrix : ' + selectedPackPrice + '€');
  6381.     });
  6382.     
  6383.     // Gérer le clic sur \"Recevoir le devis\"
  6384.     document.querySelector('[data-cta=\"checkout_quote\"]')?.addEventListener('click', function() {
  6385.         alert('Génération de devis en cours de développement\\n\\nPack : ' + selectedPack + '\\nPrix : ' + selectedPackPrice + '€');
  6386.     });
  6387. });
  6388. // Copy to clipboard function
  6389. function copyToClipboard(elementId, button) {
  6390.     const element = document.getElementById(elementId);
  6391.     if (element) {
  6392.         const text = element.textContent;
  6393.         navigator.clipboard.writeText(text).then(() => {
  6394.             // Show success feedback
  6395.             const originalText = button.innerHTML;
  6396.             button.innerHTML = '<i class=\"bi bi-check\"></i> Copié !';
  6397.             button.classList.remove('btn-outline-primary');
  6398.             button.classList.add('btn-success');
  6399.             
  6400.             setTimeout(() => {
  6401.                 button.innerHTML = originalText;
  6402.                 button.classList.remove('btn-success');
  6403.                 button.classList.add('btn-outline-primary');
  6404.             }, 2000);
  6405.         }).catch(err => {
  6406.             console.error('Erreur copie:', err);
  6407.             alert('Impossible de copier. Copiez manuellement : ' + text);
  6408.         });
  6409.     }
  6410. }
  6411. // Gestion du formulaire grand volume
  6412. const grandVolumeForm = document.getElementById('grandVolumeForm');
  6413. const formMessage = document.getElementById('formMessage');
  6414. if (grandVolumeForm) {
  6415.   grandVolumeForm.addEventListener('submit', function(e) {
  6416.     e.preventDefault();
  6417.     
  6418.     // Désactiver le bouton pendant l'envoi
  6419.     const submitBtn = grandVolumeForm.querySelector('button[type=\"submit\"]');
  6420.     const originalText = submitBtn.innerHTML;
  6421.     submitBtn.disabled = true;
  6422.     submitBtn.innerHTML = '<span class=\"spinner-border spinner-border-sm me-2\"></span>Envoi en cours...';
  6423.     
  6424.     // Masquer les messages précédents
  6425.     formMessage.innerHTML = '';
  6426.     formMessage.className = 'mt-3';
  6427.     
  6428.     // Récupérer les données du formulaire
  6429.     const formData = new FormData(grandVolumeForm);
  6430.     
  6431.     // Envoyer la requête
  6432.     fetch('/contact/grand-volume', {
  6433.       method: 'POST',
  6434.       body: formData,
  6435.       headers: {
  6436.         'X-Requested-With': 'XMLHttpRequest'
  6437.       }
  6438.     })
  6439.     .then(response => response.json())
  6440.     .then(data => {
  6441.       if (data.success) {
  6442.         // Fermer le modal du formulaire
  6443.         const formModal = bootstrap.Modal.getInstance(document.getElementById('grandVolumeModal'));
  6444.         if (formModal) formModal.hide();
  6445.         
  6446.         // Réinitialiser le formulaire
  6447.         grandVolumeForm.reset();
  6448.         
  6449.         // Afficher le modal de succès
  6450.         const successModal = new bootstrap.Modal(document.getElementById('grandVolumeSuccessModal'));
  6451.         successModal.show();
  6452.       } else {
  6453.         formMessage.className = 'mt-3 alert alert-danger';
  6454.         formMessage.innerHTML = `
  6455.           <div class=\"d-flex align-items-center\">
  6456.             <i class=\"bi bi-exclamation-triangle-fill me-2 fs-5\"></i>
  6457.             <div>
  6458.               <strong>Erreur :</strong><br>
  6459.               \${data.message || 'Une erreur est survenue. Veuillez réessayer.'}
  6460.             </div>
  6461.           </div>
  6462.         `;
  6463.       }
  6464.     })
  6465.     .catch(error => {
  6466.       console.error('Erreur:', error);
  6467.       formMessage.className = 'mt-3 alert alert-danger';
  6468.       formMessage.innerHTML = `
  6469.         <div class=\"d-flex align-items-center\">
  6470.           <i class=\"bi bi-exclamation-triangle-fill me-2 fs-5\"></i>
  6471.           <div>
  6472.             <strong>Erreur :</strong><br>
  6473.             Une erreur est survenue lors de l'envoi. Veuillez réessayer plus tard.
  6474.           </div>
  6475.         </div>
  6476.       `;
  6477.     })
  6478.     .finally(() => {
  6479.       submitBtn.disabled = false;
  6480.       submitBtn.innerHTML = originalText;
  6481.     });
  6482.   });
  6483. }
  6484. </script>
  6485. <!-- MODAL FORMULAIRE GRAND VOLUME -->
  6486.   <!-- MODAL FORMULAIRE GRAND VOLUME -->
  6487.   <div class=\"modal fade\" id=\"grandVolumeModal\" tabindex=\"-1\" aria-labelledby=\"grandVolumeModalLabel\" aria-hidden=\"true\">
  6488.     <div class=\"modal-dialog modal-dialog-centered modal-lg\">
  6489.       <div class=\"modal-content\">
  6490.         <div class=\"modal-header border-0 pb-0\">
  6491.           <h5 class=\"modal-title w-100 text-center\" id=\"grandVolumeModalLabel\">
  6492.             <i class=\"bi bi-envelope me-2\"></i>Demande de devis - Grand volume (+25 séjours/an)
  6493.           </h5>
  6494.           <button type=\"button\" class=\"btn-close\" data-bs-dismiss=\"modal\" aria-label=\"Fermer\"></button>
  6495.         </div>
  6496.         <div class=\"modal-body px-4 py-4\">
  6497.           <p class=\"text-center text-muted mb-4\">Remplissez ce formulaire et notre équipe vous contactera rapidement pour vous proposer une offre personnalisée.</p>
  6498.           
  6499.           <form id=\"grandVolumeForm\" method=\"post\" action=\"/contact/grand-volume\">
  6500.             <div class=\"row g-3\">
  6501.               <div class=\"col-md-6\">
  6502.                 <label for=\"nom_structure\" class=\"form-label\">Nom de la structure <span class=\"text-danger\">*</span></label>
  6503.                 <input type=\"text\" class=\"form-control\" id=\"nom_structure\" name=\"nom_structure\" required>
  6504.               </div>
  6505.               <div class=\"col-md-6\">
  6506.                 <label for=\"type_structure\" class=\"form-label\">Type de structure <span class=\"text-danger\">*</span></label>
  6507.                 <select class=\"form-select\" id=\"type_structure\" name=\"type_structure\" required>
  6508.                   <option value=\"\">Sélectionnez...</option>
  6509.                   <option value=\"ecole\">École</option>
  6510.                   <option value=\"centre_loisirs\">Centre de loisirs</option>
  6511.                   <option value=\"association\">Association</option>
  6512.                   <option value=\"voyagiste\">Voyagiste</option>
  6513.                   <option value=\"autre\">Autre</option>
  6514.                 </select>
  6515.               </div>
  6516.               <div class=\"col-md-6\">
  6517.                 <label for=\"nombre_sejours\" class=\"form-label\">Nombre de séjours par an <span class=\"text-danger\">*</span></label>
  6518.                 <input type=\"number\" class=\"form-control\" id=\"nombre_sejours\" name=\"nombre_sejours\" min=\"26\" required placeholder=\"Ex: 30, 50, 100...\">
  6519.                 <div class=\"form-text\">Minimum 26 séjours par an</div>
  6520.               </div>
  6521.               <div class=\"col-md-6\">
  6522.                 <label for=\"contact_email\" class=\"form-label\">Email <span class=\"text-danger\">*</span></label>
  6523.                 <input type=\"email\" class=\"form-control\" id=\"contact_email\" name=\"contact_email\" required>
  6524.               </div>
  6525.               <div class=\"col-md-6\">
  6526.                 <label for=\"contact_telephone\" class=\"form-label\">Téléphone <span class=\"text-danger\">*</span></label>
  6527.                 <input type=\"tel\" class=\"form-control\" id=\"contact_telephone\" name=\"contact_telephone\" required>
  6528.               </div>
  6529.               <div class=\"col-12\">
  6530.                 <label for=\"message\" class=\"form-label\">Message (optionnel)</label>
  6531.                 <textarea class=\"form-control\" id=\"message\" name=\"message\" rows=\"4\" placeholder=\"Décrivez vos besoins spécifiques, vos contraintes, vos questions...\"></textarea>
  6532.               </div>
  6533.               <div class=\"col-12\">
  6534.                 <div class=\"form-check\">
  6535.                   <input class=\"form-check-input\" type=\"checkbox\" id=\"accept_rgpd\" name=\"accept_rgpd\" required>
  6536.                   <label class=\"form-check-label\" for=\"accept_rgpd\">
  6537.                     J'accepte que mes données soient utilisées pour me recontacter concernant cette demande de devis. <span class=\"text-danger\">*</span>
  6538.                   </label>
  6539.                 </div>
  6540.               </div>
  6541.             </div>
  6542.             <div id=\"formMessage\" class=\"mt-3\"></div>
  6543.             <div class=\"d-grid gap-2 mt-4\">
  6544.               <button type=\"submit\" class=\"btn btn-primary btn-lg\">
  6545.                 <i class=\"bi bi-send me-2\"></i>Envoyer la demande
  6546.               </button>
  6547.               <button type=\"button\" class=\"btn btn-outline-secondary\" data-bs-dismiss=\"modal\">Annuler</button>
  6548.             </div>
  6549.           </form>
  6550.         </div>
  6551.       </div>
  6552.     </div>
  6553.   </div>
  6554.   </body>
  6555. </html>
  6556.     </div>
  6557.   </div>
  6558.   </body>
  6559. </html>
  6560.     </div>
  6561.   </div>
  6562.   </body>
  6563. </html>
  6564.     </div>
  6565.   </div>
  6566.   </body>
  6567. </html>""Accueil/PageAccueil.html.twig""/var/www/5sur5sejour/templates/Accueil/PageAccueil.html.twig");
  6568.     }
  6569. }