<?phpuse Twig\Environment;use Twig\Error\LoaderError;use Twig\Error\RuntimeError;use Twig\Extension\CoreExtension;use Twig\Extension\SandboxExtension;use Twig\Markup;use Twig\Sandbox\SecurityError;use Twig\Sandbox\SecurityNotAllowedTagError;use Twig\Sandbox\SecurityNotAllowedFilterError;use Twig\Sandbox\SecurityNotAllowedFunctionError;use Twig\Source;use Twig\Template;use Twig\TemplateWrapper;/* vitrine/fr/homepage.html.twig */class __TwigTemplate_f3ef98ee2c394bb2ba6d1bc2a5ca5cc7 extends Template{ private Source $source; /** * @var array<string, Template> */ private array $macros = []; public function __construct(Environment $env) { parent::__construct($env); $this->source = $this->getSourceContext(); $this->blocks = [ 'title' => [$this, 'block_title'], 'description' => [$this, 'block_description'], 'robots' => [$this, 'block_robots'], 'canonical' => [$this, 'block_canonical'], 'body' => [$this, 'block_body'], 'footerjs' => [$this, 'block_footerjs'], 'css' => [$this, 'block_css'], ]; } protected function doGetParent(array $context): bool|string|Template|TemplateWrapper { // line 1 return "vitrine/fr/layout.html.twig"; } protected function doDisplay(array $context, array $blocks = []): iterable { $macros = $this->macros; $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"]; $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "vitrine/fr/homepage.html.twig")); $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"]; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "vitrine/fr/homepage.html.twig")); $this->parent = $this->load("vitrine/fr/layout.html.twig", 1); yield from $this->parent->unwrap()->yield($context, array_merge($this->blocks, $blocks)); $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof); $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof); } // line 3 /** * @return iterable<null|scalar|\Stringable> */ public function block_title(array $context, array $blocks = []): iterable { $macros = $this->macros; $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"]; $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "title")); $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"]; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "title")); yield "Suite Cathedrale Heritage - Location 8 pers Strasbourg Centre"; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof); $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof); yield from []; } // line 4 /** * @return iterable<null|scalar|\Stringable> */ public function block_description(array $context, array $blocks = []): iterable { $macros = $this->macros; $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"]; $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "description")); $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"]; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "description")); yield "Louez notre suite de 83m² au cœur de Strasbourg. 3 chambres, 8 personnes, à 100m de la Cathédrale. Cuisine équipée, 2 salles de bain. Réservez votre séjour!"; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof); $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof); yield from []; } // line 5 /** * @return iterable<null|scalar|\Stringable> */ public function block_robots(array $context, array $blocks = []): iterable { $macros = $this->macros; $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"]; $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "robots")); $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"]; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "robots")); yield "index,follow"; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof); $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof); yield from []; } // line 7 /** * @return iterable<null|scalar|\Stringable> */ public function block_canonical(array $context, array $blocks = []): iterable { $macros = $this->macros; $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"]; $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "canonical")); $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"]; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "canonical")); // line 8 yield " <link rel=\"canonical\" href=\"https://cathedraleheritage.com/fr\" /> <link rel=\"alternate\" hreflang=\"fr\" href=\"https://cathedraleheritage.com/fr\" /> <link rel=\"alternate\" hreflang=\"en\" href=\"https://cathedraleheritage.com\" /> <link rel=\"alternate\" hreflang=\"x-default\" href=\"https://cathedraleheritage.com\" />"; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof); $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof); yield from []; } // line 14 /** * @return iterable<null|scalar|\Stringable> */ public function block_body(array $context, array $blocks = []): iterable { $macros = $this->macros; $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"]; $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "body")); $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"]; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "body")); // line 15 yield " <section id=\"hero\" class=\"text-light no-top no-bottom relative overflow-hidden z-1000\"> <div class=\"abs w-100 abs-centered z-2\"> <div class=\"container\"> <div class=\"spacer-double\"></div> <div class=\"row g-4 align-items-center justify-content-center\"> <div class=\"col-md-8 text-center\"> <h1 class=\"mb-2\" style=\"color:white;\">Bienvenue sur la Suite Cathédrale Héritage</h1> <p class=\"lead mb-3\" style=\"color:white; font-size:22px;\">Appartement d’exception, pouvant accueillir jusqu’à 8 personnes au cœur du prestigieux centre historique de Strasbourg</p> <a class=\"btn-main btn-line bg-blur fx-slide\" href=\"#about\" style=\"color:white;\"><span>Découverte</span></a> </div> </div> </div> </div> <div class=\"vertical-center\"> <div class=\"swiper\"> <div class=\"swiper-wrapper\"> <div class=\"swiper-slide\"> <div class=\"swiper-inner\" data-bgimage=\"url(/images/salon2.jpeg)\"> <div class=\"sw-overlay op-5\"></div> </div> </div> <div class=\"swiper-slide\"> <div class=\"swiper-inner\" data-bgimage=\"url(/images/chambre2.jpeg)\"> <div class=\"sw-overlay op-5\"></div> </div> </div> <div class=\"swiper-slide\"> <div class=\"swiper-inner\" data-bgimage=\"url(/images/noel.jpeg)\"> <div class=\"sw-overlay op-5\"></div> </div> </div> </div> </div> </div> <div class=\"abs w-100 bottom-0 z-2 pb-4 sm-hide\"> <div class=\"container\"> <div class=\"row\"> <div class=\"col-lg-12\"> <div class=\"d-flex justify-content-between\"> <div> <h6 style=\"color:white;\">Cathédrale à 100m</h6> </div> <div> <h6 style=\"color:white;\">Musées à 200m</h6> </div> <div> <h6 style=\"color:white;\">Petite France à 300m</h6> </div> </div> </div> </div> </div> </div> <div class=\"gradient-edge-bottom op-8\"></div> </section> <section id=\"about\"> <div class=\"container\"> <div class=\"row g-4 align-items-end justify-content-between\"> <div class=\"col-lg-5\"> <div class=\"subtitle\">A propos de l'appartement</div> <h2>Suite moderne en hyper centre de la grande île de Strasbourg</h2> </div> <div class=\"col-lg-4\"> <p class=\"mb-4\" style=\"color:#212121;\"> Logement spacieux idéal pour familles et groupes jusqu'à 8 personnes, comprenant deux chambres doubles dont une suite parentale avec une salle de bain, une chambre avec deux lits superposés doubles (4 couchages) maximum de 100kg pour les lits en hauteur. </p> <p class=\"mb-4\" style=\"color:#212121;\"> Cuisine entièrement équipée et salon-salle à manger convivial pour partager de bons moments ensemble. </p> <p class=\"mb-4\" style=\"color:#212121;\"> Équipements : sèche-cheveux, lave-vaisselle, lave-linge séchant, micro-ondes, four, planche à repasser avec fer, cafetière Nespresso, bouilloire, télévision, Wi-Fi et prises USB pour recharger vos appareils. </p> </div> </div> <div class=\"spacer-single\"></div> <div class=\"row g-4\"> <div class=\"col-md-2\"> <div class=\"relative\"> <h5>Taille</h5> <div class=\"d-flex justify-content-start align-items-center\" style=\"padding-top:6px;\"> <img src=\"/images/home.png\" width=\"37\" class=\"me-3\" alt=\"\"> <div class=\"fs-20 fw-600\" style=\"color:#212121;\">83 m²</div> </div> </div> </div> <div class=\"col-md-2\"> <div class=\"relative\"> <h5>Chambres</h5> <div class=\"d-flex justify-content-start align-items-center\" style=\"padding-top:4px;\"> <img src=\"/images/bed.png\" width=\"37\" class=\"me-3\" alt=\"\"> <div class=\"fs-20 fw-600\" style=\"color:#212121;\">3</div> </div> </div> </div> <div class=\"col-md-2\"> <div class=\"relative\"> <h5>Salon</h5> <div class=\"d-flex justify-content-start align-items-center\"> <img src=\"/images/sofa.png\" width=\"50\" class=\"me-3\" alt=\"\"> <div class=\"fs-20 fw-600\" style=\"color:#212121;\">Inclus</div> </div> </div> </div> <div class=\"col-md-2\"> <div class=\"relative\"> <h5>Cuisine</h5> <div class=\"d-flex justify-content-start align-items-center\" style=\"padding-top:6px;\"> <img src=\"/images/cooking.png\" width=\"37\" class=\"me-3\" alt=\"\"> <div class=\"fs-20 fw-600\" style=\"color:#212121;\">Inclus</div> </div> </div> </div> <div class=\"col-md-2\"> <div class=\"relative\"> <h5>Salle de bain</h5> <div class=\"d-flex justify-content-start align-items-center\" style=\"padding-top:4px;\"> <img src=\"/images/bathroom.png\" width=\"40\" class=\"me-3\" alt=\"\"> <div class=\"fs-20 fw-600\" style=\"color:#212121;\">2</div> </div> </div> </div> <div class=\"col-md-2\"> <div class=\"relative\"> <h5>Personnes</h5> <div class=\"d-flex justify-content-start align-items-center\" style=\"padding-top:5px;\"> <img src=\"/images/user.png\" width=\"37\" class=\"me-3\" alt=\"\"> <div class=\"fs-20 fw-600\" style=\"color:#212121;\">8</div> </div> </div> </div> </div> </div> </section> <section id=\"rooms\" class=\"p-0 overflow-hidden\"> <div class=\"container-fluid\"> <div class=\"row\"> <div class=\"col-lg-12\"> <div class=\"owl-custom-nav menu-float\" data-target=\"#room-carousel\"> <a class=\"btn-next\"></a> <a class=\"btn-prev\"></a> <div id=\"room-carousel\" class=\"owl-2-cols-center owl-carousel owl-theme\"> <div class=\"item\"> <div class=\"relative\"> <div class=\"overflow-hidden text-light\"> <div class=\"abs h-100 start-0 z-2 p-4\"> <h3 style=\"color:white;\">Salon</h3> </div> <img src=\"/images/salon2.jpeg\" class=\"w-100\" alt=\"Salon\"> </div> </div> </div> <div class=\"item\"> <div class=\"relative\"> <div class=\"overflow-hidden text-light\"> <div class=\"abs h-100 start-1 z-2 p-4\"> <h3 style=\"color:white;\">Chambre 1</h3> </div> <img src=\"/images/chambre1.jpeg\" class=\"w-100\" alt=\"Chambre 1\"> </div> </div> </div> <div class=\"item\"> <div class=\"relative\"> <div class=\"overflow-hidden text-light\"> <div class=\"abs h-100 start-2 z-2 p-4\"> <h3 style=\"color:white;\">Chambre 2</h3> </div> <img src=\"/images/chambre2.jpeg\" class=\"w-100\" alt=\"Chambre 2\"> </div> </div> </div> <div class=\"item\"> <div class=\"relative\"> <div class=\"overflow-hidden text-light\"> <div class=\"abs h-100 start-3 z-2 p-4\"> <h3 style=\"color:white;\">Chambre 3</h3> </div> <img src=\"/images/chambre3.jpeg\" class=\"w-100\" alt=\"Chambre 3\"> </div> </div> </div> <div class=\"item\"> <div class=\"relative\"> <div class=\"overflow-hidden text-light\"> <div class=\"abs h-100 start-4 z-2 p-4\"> <h3 style=\"color:white;\">Cuisine</h3> </div> <img src=\"/images/cuisine.jpeg\" class=\"w-100\" alt=\"Cuisine\"> </div> </div> </div> <div class=\"item\"> <div class=\"relative\"> <div class=\"overflow-hidden text-light\"> <div class=\"abs h-100 start-5 z-2 p-4\"> <h3 style=\"color:white;\">Salle de bain</h3> </div> <img src=\"/images/salledebain.jpeg\" class=\"w-100\" alt=\"Salle de bain 1\"> </div> </div> </div> <div class=\"item\"> <div class=\"relative\"> <div class=\"overflow-hidden text-light\"> <div class=\"abs h-100 start-6 z-2 p-4\"> <h3 style=\"color:white;\">Salle de bain 2</h3> </div> <img src=\"/images/salledebain2.jpeg\" class=\"w-100\" alt=\"Salle de bain 2\"> </div> </div> </div> </div> </div> </div> </div> </div> </section> <section id=\"services\" class=\"overlay-dark-1\"> <div class=\"container\"> <div class=\"row g-4 justify-content-between\"> <div class=\"col-lg-5 relative z-3\"> <div class=\"me-lg-3\"> <div class=\"subtitle wow fadeInUp\" data-wow-delay=\".0s\">Votre séjour à Strasbourg</div> <h2 class=\"wow fadeInUp\" data-wow-delay=\".2s\">Tarifs et services</h2> <p style=\"color:#212121; font-size:18px;\">Une suite d'exception au cœur de Strasbourg, avec conciergerie dédiée pour vous accompagner tout au long de votre séjour.</p> <p style=\"color:#212121; font-size:18px;\">Réservation minimum deux nuits.</p> <a href=\"#reservation\" class=\"btn-main\" style=\"color:white;\">Réservation</a> </div> </div> <div class=\"col-lg-6\" style=\"color:black;\"> <div class=\"spacer-single spacer-double\"></div> <div class=\"row\"> <div class=\"col-md-6 wow fadeInUp\" data-wow-delay=\".2s\"> "; // line 289 yield " <ul class=\"ul-check fs-500\"> <li>2 personnes : 350 € la nuit</li> <li>4 personnes : 690 € la nuit</li> <li>à partir de 6 personnes : 890 € la nuit</li> <li>10% de remise à partir de 7 nuits</li> </ul> </div> <div class=\"col-md-6 wow fadeInUp\" data-wow-delay=\".4s\"> <h5 class=\"mb-3\">Services optionnels</h5> <ul class=\"ul-check fs-500\"> <li>Une place de parking : 24 €/jour ou 150 €/semaine</li> <li>Ménage supplémentaire durant votre séjour : 60 euros</li> <li>Apéro alsacien : sur commande</li> <li>Atelier pour enfants, équipements bébé, chiens acceptés sur demande (les autres animaux ne sont malheureusement pas autorisés dans l'appartement), Décoration pour occasions spéciales,…</li> </ul> <div class=\"mt-4\"> <p class=\"fs-500\"><strong>Conciergerie sur place</strong><br> <small>Mardi au samedi • 10h-18h45 <br /> Conciergerie privée sur demande selon disponibilité <br /> Sur devis (Correspond à 10% de la réservation)</small> </p> </div> </div> </div> </div> </div> </div> </section> <section id=\"section-gallery\" class=\"relative\"> <div class=\"container relative z-2\" id=\"photos\"> <div class=\"row g-4 gx-5 justify-content-center\"> <div class=\"col-lg-6 text-center\"> <h2 class=\"wow fadeInUp\" data-wow-delay=\".2s\">Galerie de l'Appartement</h2> <p class=\"wow fadeInUp\" data-wow-delay=\".3s\" style=\"color:#212121;\">Voici les images de l'appartement qui vous permettront de découvrir les différents espaces : chambres, salon, cuisine, salle de bain et extérieur.</p> </div> </div> <div class=\"row\"> <div class=\"col-md-12 text-center\"> <ul id=\"filters\" class=\"wow fadeInUp\" data-wow-delay=\"0s\"> <li><a href=\"#\" data-filter=\"*\" class=\"selected\" style=\"color:#212121;\">Tout afficher</a></li> <li><a href=\"#\" data-filter=\".chambre\" style=\"color:#212121;\">Chambres</a></li> <li><a href=\"#\" data-filter=\".salon\" style=\"color:#212121;\">Salon</a></li> <li><a href=\"#\" data-filter=\".cuisine\" style=\"color:#212121;\">Cuisine</a></li> <li><a href=\"#\" data-filter=\".salledebain\" style=\"color:#212121;\">Salle de bain</a></li> <li><a href=\"#\" data-filter=\".exterieur\" style=\"color:#212121;\">Extérieur</a></li> </ul> </div> </div> <div id=\"gallery\" class=\"row g-3 wow fadeInUp\" data-wow-delay=\".3s\"> <!-- Chambres --> <div class=\"col-md-3 col-sm-6 col-12 item chambre\"> <a href=\"images/chambre1.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/chambre1.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Chambre\"> </div> </a> </div> <div class=\"col-md-3 col-sm-6 col-12 item chambre\"> <a href=\"images/chambre2.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/chambre2.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Chambre 2\"> </div> </a> </div> <div class=\"col-md-3 col-sm-6 col-12 item chambre\"> <a href=\"images/chambre3.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/chambre3.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Chambre 3\"> </div> </a> </div> <!-- Salon --> <div class=\"col-md-3 col-sm-6 col-12 item salon\"> <a href=\"images/salon.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/salon.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salon\"> </div> </a> </div> <div class=\"col-md-3 col-sm-6 col-12 item salon\"> <a href=\"images/salon2.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/salon2.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salon 2\"> </div> </a> </div> <div class=\"col-md-3 col-sm-6 col-12 item salon\"> <a href=\"images/salon3.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/salon3.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salon 3\"> </div> </a> </div> <div class=\"col-md-3 col-sm-6 col-12 item salon\"> <a href=\"images/salon4.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/salon4.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salon 4\"> </div> </a> </div> <div class=\"col-md-3 col-sm-6 col-12 item salon\"> <a href=\"images/salon5.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/salon5.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salon 5\"> </div> </a> </div> <!-- Cuisine --> <div class=\"col-md-3 col-sm-6 col-12 item cuisine\"> <a href=\"images/cuisine.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/cuisine.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Cuisine\"> </div> </a> </div> <!-- Salle de bain --> <div class=\"col-md-3 col-sm-6 col-12 item salledebain\"> <a href=\"images/salledebain.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/salledebain.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salle de bain\"> </div> </a> </div> <div class=\"col-md-3 col-sm-6 col-12 item salledebain\"> <a href=\"images/salledebain2.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/salledebain2.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salle de bain 2\"> </div> </a> </div> <!-- Extérieur --> <div class=\"col-md-3 col-sm-6 col-12 item exterieur\"> <a href=\"images/exterieur.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/exterieur.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Extérieur\"> </div> </a> </div> </div> </div> </section> <section id=\"reservation\" class=\"text-light\"> <div class=\"container\"> <div class=\"row g-4 justify-content-center\"> <div class=\"col-lg-6 text-center\"> <h2 class=\"wow fadeInUp\" data-wow-delay=\".2s\">Réservez votre séjour</h2> </div> </div> <div class=\"row g-4 justify-content-center\"> <div class=\"col-md-6\"> "; // line 509 yield $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->renderBlock((isset($context["form"]) || array_key_exists("form", $context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.', 509, $this->source); })()), 'form_start'); yield " <div class=\"row g-4\"> <div class=\"col-md-12\"> <div class=\"calendar-container\" style=\"height:300px;\"> <input type=\"text\" id=\"date_range_picker\"> </div> </div> <div class=\"col-md-3\"> <label style=\"color:#212121;\">Voyageurs</label> "; // line 520 yield $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->searchAndRenderBlock(CoreExtension::getAttribute($this->env, $this->source, (isset($context["form"]) || array_key_exists("form", $context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.', 520, $this->source); })()), "persons", [], "any", false, false, false, 520), 'widget'); yield " </div> <div class=\"col-md-3\"> <label style=\"color:#212121;\">Arrivée</label> <br /> </strong> <span id=\"info-start\" style=\"color:#212121;\">-</span> </div> <div class=\"col-md-3\"> <label style=\"color:#212121;\">Départ</label> <br /> <span id=\"info-end\" style=\"color:#212121;\">-</span> </div> <div class=\"col-md-3\"> <label style=\"color:#212121;\">Nuits</label> <br /> <span id=\"info-nights\" style=\"color:#212121;\">-</span> </div> <div class=\"col-md-12\" style=\"font-size:20px;\"> <div id=\"results\"></div> </div> <div class=\"col-md-6\"> <label style=\"color:#212121;\">Nom</label> "; // line 544 yield $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->searchAndRenderBlock(CoreExtension::getAttribute($this->env, $this->source, (isset($context["form"]) || array_key_exists("form", $context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.', 544, $this->source); })()), "lastname", [], "any", false, false, false, 544), 'widget'); yield " </div> <div class=\"col-md-6\"> <label style=\"color:#212121;\">Prénom</label> "; // line 549 yield $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->searchAndRenderBlock(CoreExtension::getAttribute($this->env, $this->source, (isset($context["form"]) || array_key_exists("form", $context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.', 549, $this->source); })()), "name", [], "any", false, false, false, 549), 'widget'); yield " </div> <div class=\"col-md-12\"> <label style=\"color:#212121;\">Email</label> "; // line 554 yield $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->searchAndRenderBlock(CoreExtension::getAttribute($this->env, $this->source, (isset($context["form"]) || array_key_exists("form", $context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.', 554, $this->source); })()), "email", [], "any", false, false, false, 554), 'widget'); yield " </div> <div class=\"col-md-12\"> <label style=\"color:#212121;\">Message</label> "; // line 559 yield $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->searchAndRenderBlock(CoreExtension::getAttribute($this->env, $this->source, (isset($context["form"]) || array_key_exists("form", $context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.', 559, $this->source); })()), "message", [], "any", false, false, false, 559), 'widget'); yield " </div> <div class=\"col-md-12\"> <div class=\"text-center\" style=\"color:#212121;\"> <input type=\"checkbox\" id=\"acceptCGV\" /> J'accepte <a href=\"/fr/cgv\" target=\"_blank\" style=\"text-decoration:underline; color:#212121;\">conditions générales de vente</a> </div> </div> <div class=\"col-md-12\"> <div class=\"text-center\"> <button type=\"submit\" name=\"submit\" value=\"1\" class=\"btn-main\" style=\"color:white;\">Confirmer la réservation</button> </div> </div> </div> "; // line 575 yield $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->searchAndRenderBlock(CoreExtension::getAttribute($this->env, $this->source, (isset($context["form"]) || array_key_exists("form", $context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.', 575, $this->source); })()), "start", [], "any", false, false, false, 575), 'widget'); yield " "; // line 576 yield $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->searchAndRenderBlock(CoreExtension::getAttribute($this->env, $this->source, (isset($context["form"]) || array_key_exists("form", $context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.', 576, $this->source); })()), "end", [], "any", false, false, false, 576), 'widget'); yield " "; // line 578 yield $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->searchAndRenderBlock((isset($context["form"]) || array_key_exists("form", $context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.', 578, $this->source); })()), 'rest'); yield " "; // line 579 yield $this->env->getRuntime('Symfony\Component\Form\FormRenderer')->renderBlock((isset($context["form"]) || array_key_exists("form", $context) ? $context["form"] : (function () { throw new RuntimeError('Variable "form" does not exist.', 579, $this->source); })()), 'form_end'); yield " </div> </div> </div> </section> <section id=\"faq\" class=\"text-light\"> <div class=\"container\"> <div class=\"row g-4 justify-content-center\"> <div class=\"col-lg-6 text-center\"> <h2 class=\"wow fadeInUp\" data-wow-delay=\".2s\">FAQ</h2> </div> </div> <div class=\"row g-4 justify-content-center\"> <div class=\"col-lg-6 text-left\" style=\"color:black !important;\"> <h3 style=\"margin-top:7px;\">Comment réserver le logement ?</h3> <div>Vous pouvez réserver directement sur notre site et bientôt via les plateformes partenaires. Le paiement sécurisé confirme immédiatement votre réservation.</div> <h3 style=\"margin-top:7px;\">Quels sont les horaires d’arrivée et de départ ?</h3> <ul> <li>Arrivée : à partir de 15h</li> <li>Départ : avant 11h</li> </ul> <h3 style=\"margin-top:7px;\">Le logement est-il entièrement équipé ?</h3> <div>Oui, le logement est entièrement meublé et équipé : cuisine, literie, serviettes, électroménager, Wi-Fi,…</div> <h3 style=\"margin-top:7px;\">Y a-t-il un parking disponible ?</h3> <div>Oui, un parking privatif est possible en option au prix de 24 euros les 24h ou 150 euros la semaine (7 nuits).</div> <h3 style=\"margin-top:7px;\">Le logement est-il adapté aux enfants ?</h3> <div>Oui, nous proposons certains équipements pour enfants (lit bébé, chaise haute, vaisselle adaptée) sur demande.</div> <h3 style=\"margin-top:7px;\">Les animaux sont-ils acceptés ?</h3> <div>Merci de nous contacter avant de réserver si vous souhaitez venir avec un animal, les chiens sont les seuls animaux acceptés, mais soumis à une demande préalable.</div> <h3 style=\"margin-top:7px;\">Puis-je annuler ou modifier ma réservation ?</h3> <div>Oui, nos conditions d’annulation sont précisées lors de la réservation. Remboursement de 85% du montant de la location si annulation plus d’un mois avant la date d’arrivée, puis 50 % remboursés si annulation entre 1 mois et 15 jours avant la date d’arrivée. Pas de remboursement si annulation moins de 15 jours avant la date d’arrivée.</div> <h3 style=\"margin-top:7px;\">Le logement est-il accessible en transport public ?</h3> <div>Oui, les principaux transports sont proches. La station de tram « Langstross, Grand’rue » est à moins de 100 mètres de l’appartement. La gare de Strasbourg est à 10 minutes à pieds.</div> <h3 style=\"margin-top:7px;\">Y a-t-il des commerces ou restaurants à proximité ?</h3> <div>Oui, vous trouverez supermarchés, cafés, restaurants et activités touristiques au pied de l’immeuble.</div> <h3 style=\"margin-top:7px;\">Que faire en cas de problème pendant le séjour ?</h3> <div>Nous restons disponibles 24h/24 par mail, pour toute urgence ou question concernant le logement, vous pouvez aussi nous joindre entre 9h et 20h par téléphone au 07 61 05 82 43 et nous sommes disponibles</div> </div> </div> </div> </section>"; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof); $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof); yield from []; } // line 639 /** * @return iterable<null|scalar|\Stringable> */ public function block_footerjs(array $context, array $blocks = []): iterable { $macros = $this->macros; $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"]; $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "footerjs")); $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"]; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "footerjs")); // line 640 yield " <script src=\"https://cdn.jsdelivr.net/npm/flatpickr\"></script> <script src=\"https://cdn.jsdelivr.net/npm/flatpickr/dist/l10n/fr.js\"></script> <script> function updateSimulation() { var start = \$(\"#reservation_form_start\").val(); var end = \$(\"#reservation_form_end\").val(); var persons = \$(\"#reservation_form_persons\").val(); if (start && end && persons) { \$(\"#results\").html('<div class=\"loading\">Calcul en cours...</div>'); \$.post( Routing.generate('locale_simulation_pricing',{'_locale':'fr'}), {'start': start, 'end': end, 'persons': persons} ) .done(function(data) { \$(\"#results\").html(data); }) .fail(function() { \$(\"#results\").html('<div class=\"error\">Erreur</div>'); }); } else { \$(\"#results\").html(''); } } // Écoute les changements sur le nombre de personnes \$(\"#reservation_form_persons\").change(updateSimulation); \$(document).ready(function() { // Désactive le bouton au chargement de la page \$('button[type=\"submit\"]').prop('disabled', true); // Écoute les changements sur la checkbox \$('#acceptCGV').change(function() { if(\$(this).is(':checked')) { \$('button[type=\"submit\"]').prop('disabled', false); } else { \$('button[type=\"submit\"]').prop('disabled', true); } }); }); </script> <script> \$(document).ready(function() { let bookedRanges = []; \$.ajax({ url: '"; // line 688 yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['App\Twig\CoreExtension']->getEnvironmentVariable("WEBHOOK_CALENDAR_AVAILABILITY"), "html", null, true); yield "', method: 'POST', contentType: 'application/json', data: '' }) .done(function(data) { bookedRanges = data.bookings || []; console.log('✅ Créneaux chargés:', bookedRanges); initDatePicker(); }) .fail(function(error) { console.error('❌ Erreur:', error); initDatePicker(); }); // 🔧 FONCTION POUR CRÉER UNE DATE LOCALE SANS DÉCALAGE UTC function parseLocalDate(dateStr) { const [year, month, day] = dateStr.split('-').map(Number); return new Date(year, month - 1, day); } const isMobile = window.innerWidth <= 900; function initDatePicker() { flatpickr(\"#date_range_picker\", { inline: true, mode: \"range\", locale: \"fr\", minDate: new Date(new Date().setDate(new Date().getDate() + 1)), dateFormat: \"Y-m-d\", showMonths: isMobile ? 1 : 2, disable: [ function(date) { const checkDate = new Date(date); checkDate.setHours(0, 0, 0, 0); return bookedRanges.some(range => { const start = parseLocalDate(range.start_date); const end = parseLocalDate(range.end_date); return checkDate >= start && checkDate <= end; }); } ], onChange: function(selectedDates, dateStr, instance) { console.log('📅 Dates sélectionnées:', selectedDates.length); if (selectedDates.length === 2) { const start = selectedDates[0]; const end = selectedDates[1]; if (isRangeAvailable(start, end)) { // ✅ Met à jour avec jQuery ET déclenche l'événement change \$('#reservation_form_start').val(formatDate(start)).trigger('change'); \$('#reservation_form_end').val(formatDate(end)).trigger('change'); console.log('✅ Champs mis à jour:', \$('#reservation_form_start').val(), '→', \$('#reservation_form_end').val() ); updateSelectedInfo(start, end); // ✅ Force la simulation updateSimulation(); } else { alert('⚠️ Cette période contient des dates déjà réservées.\\nVeuillez choisir une autre période.'); instance.clear(); clearSymfonyFields(); hideSelectedInfo(); \$(\"#results\").html(''); } } else { clearSymfonyFields(); hideSelectedInfo(); \$(\"#results\").html(''); } }, onDayCreate: function(dObj, dStr, fp, dayElem) { const date = new Date(dayElem.dateObj); date.setHours(0, 0, 0, 0); const isBooked = bookedRanges.some(range => { const start = parseLocalDate(range.start_date); const end = parseLocalDate(range.end_date); return date >= start && date <= end; }); if (isBooked) { dayElem.classList.add('booked'); dayElem.title = 'Date indisponible (réservée)'; } else if (date >= new Date()) { dayElem.classList.add('available'); dayElem.title = 'Date disponible'; } } }); } function isRangeAvailable(startDate, endDate) { let currentDate = new Date(startDate); currentDate.setHours(0, 0, 0, 0); const endCheck = new Date(endDate); endCheck.setHours(0, 0, 0, 0); while (currentDate <= endCheck) { const isBooked = bookedRanges.some(range => { const start = parseLocalDate(range.start_date); const end = parseLocalDate(range.end_date); return currentDate >= start && currentDate <= end; }); if (isBooked) return false; currentDate.setDate(currentDate.getDate() + 1); } return true; } function updateSelectedInfo(start, end) { const nights = Math.ceil((end - start) / (1000 * 60 * 60 * 24)); \$('#info-start').text(start.toLocaleDateString('fr-FR')); \$('#info-end').text(end.toLocaleDateString('fr-FR')); \$('#info-nights').text(`\${nights} nuit\${nights > 1 ? 's' : ''}`); \$('#selected-dates-info').addClass('active'); } function hideSelectedInfo() { \$('#selected-dates-info').removeClass('active'); } function clearSymfonyFields() { \$('#reservation_form_start').val(''); \$('#reservation_form_end').val(''); } function formatDate(date) { const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); return `\${year}-\${month}-\${day}`; } }); </script>"; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof); $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof); yield from []; } // line 837 /** * @return iterable<null|scalar|\Stringable> */ public function block_css(array $context, array $blocks = []): iterable { $macros = $this->macros; $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"]; $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "css")); $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"]; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "css")); // line 838 yield " <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css\"> <style> .calendar-container { margin: 20px 0; width: 100%; overflow: hidden; } /* Calendrier inline (toujours visible) */ #date_range_picker { display: none; /* Le champ input est caché, on affiche juste le calendrier */ } .flatpickr-calendar.inline { margin: 0 auto; box-shadow: 0 4px 12px rgba(0,0,0,0.15); border-radius: 8px; max-width: 100%; } .flatpickr-day.booked { background-color: #ff4444 !important; color: white !important; cursor: not-allowed !important; position: relative; } .flatpickr-day.booked::after { content: \"✕\"; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 20px; font-weight: bold; } .flatpickr-day.booked:hover { background-color: #ff0000 !important; } .flatpickr-day.available:hover { background-color: #28a745; color: white; } /* Adaptations Mobile */ @media (max-width: 768px) { .calendar-container { margin: 10px 0; padding: 0 10px; } .flatpickr-calendar.inline { width: 100% !important; max-width: 100% !important; } .flatpickr-months { padding: 8px 10px; } .flatpickr-days { width: 100% !important; } .dayContainer { width: 100% !important; min-width: 100% !important; max-width: 100% !important; } .flatpickr-day { height: 40px !important; line-height: 40px !important; flex-basis: 14.2857% !important; max-width: 14.2857% !important; } } </style>"; $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof); $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof); yield from []; } /** * @codeCoverageIgnore */ public function getTemplateName(): string { return "vitrine/fr/homepage.html.twig"; } /** * @codeCoverageIgnore */ public function isTraitable(): bool { return false; } /** * @codeCoverageIgnore */ public function getDebugInfo(): array { return array ( 1069 => 838, 1056 => 837, 897 => 688, 847 => 640, 834 => 639, 764 => 579, 760 => 578, 755 => 576, 751 => 575, 732 => 559, 724 => 554, 716 => 549, 708 => 544, 681 => 520, 667 => 509, 445 => 289, 179 => 15, 166 => 14, 151 => 8, 138 => 7, 115 => 5, 92 => 4, 69 => 3, 46 => 1,); } public function getSourceContext(): Source { return new Source("{% extends 'vitrine/fr/layout.html.twig' %}{% block title %}Suite Cathedrale Heritage - Location 8 pers Strasbourg Centre{% endblock title %}{% block description %}Louez notre suite de 83m² au cœur de Strasbourg. 3 chambres, 8 personnes, à 100m de la Cathédrale. Cuisine équipée, 2 salles de bain. Réservez votre séjour!{% endblock description %}{% block robots %}index,follow{% endblock robots %}{% block canonical %} <link rel=\"canonical\" href=\"https://cathedraleheritage.com/fr\" /> <link rel=\"alternate\" hreflang=\"fr\" href=\"https://cathedraleheritage.com/fr\" /> <link rel=\"alternate\" hreflang=\"en\" href=\"https://cathedraleheritage.com\" /> <link rel=\"alternate\" hreflang=\"x-default\" href=\"https://cathedraleheritage.com\" />{% endblock canonical %}{% block body %} <section id=\"hero\" class=\"text-light no-top no-bottom relative overflow-hidden z-1000\"> <div class=\"abs w-100 abs-centered z-2\"> <div class=\"container\"> <div class=\"spacer-double\"></div> <div class=\"row g-4 align-items-center justify-content-center\"> <div class=\"col-md-8 text-center\"> <h1 class=\"mb-2\" style=\"color:white;\">Bienvenue sur la Suite Cathédrale Héritage</h1> <p class=\"lead mb-3\" style=\"color:white; font-size:22px;\">Appartement d’exception, pouvant accueillir jusqu’à 8 personnes au cœur du prestigieux centre historique de Strasbourg</p> <a class=\"btn-main btn-line bg-blur fx-slide\" href=\"#about\" style=\"color:white;\"><span>Découverte</span></a> </div> </div> </div> </div> <div class=\"vertical-center\"> <div class=\"swiper\"> <div class=\"swiper-wrapper\"> <div class=\"swiper-slide\"> <div class=\"swiper-inner\" data-bgimage=\"url(/images/salon2.jpeg)\"> <div class=\"sw-overlay op-5\"></div> </div> </div> <div class=\"swiper-slide\"> <div class=\"swiper-inner\" data-bgimage=\"url(/images/chambre2.jpeg)\"> <div class=\"sw-overlay op-5\"></div> </div> </div> <div class=\"swiper-slide\"> <div class=\"swiper-inner\" data-bgimage=\"url(/images/noel.jpeg)\"> <div class=\"sw-overlay op-5\"></div> </div> </div> </div> </div> </div> <div class=\"abs w-100 bottom-0 z-2 pb-4 sm-hide\"> <div class=\"container\"> <div class=\"row\"> <div class=\"col-lg-12\"> <div class=\"d-flex justify-content-between\"> <div> <h6 style=\"color:white;\">Cathédrale à 100m</h6> </div> <div> <h6 style=\"color:white;\">Musées à 200m</h6> </div> <div> <h6 style=\"color:white;\">Petite France à 300m</h6> </div> </div> </div> </div> </div> </div> <div class=\"gradient-edge-bottom op-8\"></div> </section> <section id=\"about\"> <div class=\"container\"> <div class=\"row g-4 align-items-end justify-content-between\"> <div class=\"col-lg-5\"> <div class=\"subtitle\">A propos de l'appartement</div> <h2>Suite moderne en hyper centre de la grande île de Strasbourg</h2> </div> <div class=\"col-lg-4\"> <p class=\"mb-4\" style=\"color:#212121;\"> Logement spacieux idéal pour familles et groupes jusqu'à 8 personnes, comprenant deux chambres doubles dont une suite parentale avec une salle de bain, une chambre avec deux lits superposés doubles (4 couchages) maximum de 100kg pour les lits en hauteur. </p> <p class=\"mb-4\" style=\"color:#212121;\"> Cuisine entièrement équipée et salon-salle à manger convivial pour partager de bons moments ensemble. </p> <p class=\"mb-4\" style=\"color:#212121;\"> Équipements : sèche-cheveux, lave-vaisselle, lave-linge séchant, micro-ondes, four, planche à repasser avec fer, cafetière Nespresso, bouilloire, télévision, Wi-Fi et prises USB pour recharger vos appareils. </p> </div> </div> <div class=\"spacer-single\"></div> <div class=\"row g-4\"> <div class=\"col-md-2\"> <div class=\"relative\"> <h5>Taille</h5> <div class=\"d-flex justify-content-start align-items-center\" style=\"padding-top:6px;\"> <img src=\"/images/home.png\" width=\"37\" class=\"me-3\" alt=\"\"> <div class=\"fs-20 fw-600\" style=\"color:#212121;\">83 m²</div> </div> </div> </div> <div class=\"col-md-2\"> <div class=\"relative\"> <h5>Chambres</h5> <div class=\"d-flex justify-content-start align-items-center\" style=\"padding-top:4px;\"> <img src=\"/images/bed.png\" width=\"37\" class=\"me-3\" alt=\"\"> <div class=\"fs-20 fw-600\" style=\"color:#212121;\">3</div> </div> </div> </div> <div class=\"col-md-2\"> <div class=\"relative\"> <h5>Salon</h5> <div class=\"d-flex justify-content-start align-items-center\"> <img src=\"/images/sofa.png\" width=\"50\" class=\"me-3\" alt=\"\"> <div class=\"fs-20 fw-600\" style=\"color:#212121;\">Inclus</div> </div> </div> </div> <div class=\"col-md-2\"> <div class=\"relative\"> <h5>Cuisine</h5> <div class=\"d-flex justify-content-start align-items-center\" style=\"padding-top:6px;\"> <img src=\"/images/cooking.png\" width=\"37\" class=\"me-3\" alt=\"\"> <div class=\"fs-20 fw-600\" style=\"color:#212121;\">Inclus</div> </div> </div> </div> <div class=\"col-md-2\"> <div class=\"relative\"> <h5>Salle de bain</h5> <div class=\"d-flex justify-content-start align-items-center\" style=\"padding-top:4px;\"> <img src=\"/images/bathroom.png\" width=\"40\" class=\"me-3\" alt=\"\"> <div class=\"fs-20 fw-600\" style=\"color:#212121;\">2</div> </div> </div> </div> <div class=\"col-md-2\"> <div class=\"relative\"> <h5>Personnes</h5> <div class=\"d-flex justify-content-start align-items-center\" style=\"padding-top:5px;\"> <img src=\"/images/user.png\" width=\"37\" class=\"me-3\" alt=\"\"> <div class=\"fs-20 fw-600\" style=\"color:#212121;\">8</div> </div> </div> </div> </div> </div> </section> <section id=\"rooms\" class=\"p-0 overflow-hidden\"> <div class=\"container-fluid\"> <div class=\"row\"> <div class=\"col-lg-12\"> <div class=\"owl-custom-nav menu-float\" data-target=\"#room-carousel\"> <a class=\"btn-next\"></a> <a class=\"btn-prev\"></a> <div id=\"room-carousel\" class=\"owl-2-cols-center owl-carousel owl-theme\"> <div class=\"item\"> <div class=\"relative\"> <div class=\"overflow-hidden text-light\"> <div class=\"abs h-100 start-0 z-2 p-4\"> <h3 style=\"color:white;\">Salon</h3> </div> <img src=\"/images/salon2.jpeg\" class=\"w-100\" alt=\"Salon\"> </div> </div> </div> <div class=\"item\"> <div class=\"relative\"> <div class=\"overflow-hidden text-light\"> <div class=\"abs h-100 start-1 z-2 p-4\"> <h3 style=\"color:white;\">Chambre 1</h3> </div> <img src=\"/images/chambre1.jpeg\" class=\"w-100\" alt=\"Chambre 1\"> </div> </div> </div> <div class=\"item\"> <div class=\"relative\"> <div class=\"overflow-hidden text-light\"> <div class=\"abs h-100 start-2 z-2 p-4\"> <h3 style=\"color:white;\">Chambre 2</h3> </div> <img src=\"/images/chambre2.jpeg\" class=\"w-100\" alt=\"Chambre 2\"> </div> </div> </div> <div class=\"item\"> <div class=\"relative\"> <div class=\"overflow-hidden text-light\"> <div class=\"abs h-100 start-3 z-2 p-4\"> <h3 style=\"color:white;\">Chambre 3</h3> </div> <img src=\"/images/chambre3.jpeg\" class=\"w-100\" alt=\"Chambre 3\"> </div> </div> </div> <div class=\"item\"> <div class=\"relative\"> <div class=\"overflow-hidden text-light\"> <div class=\"abs h-100 start-4 z-2 p-4\"> <h3 style=\"color:white;\">Cuisine</h3> </div> <img src=\"/images/cuisine.jpeg\" class=\"w-100\" alt=\"Cuisine\"> </div> </div> </div> <div class=\"item\"> <div class=\"relative\"> <div class=\"overflow-hidden text-light\"> <div class=\"abs h-100 start-5 z-2 p-4\"> <h3 style=\"color:white;\">Salle de bain</h3> </div> <img src=\"/images/salledebain.jpeg\" class=\"w-100\" alt=\"Salle de bain 1\"> </div> </div> </div> <div class=\"item\"> <div class=\"relative\"> <div class=\"overflow-hidden text-light\"> <div class=\"abs h-100 start-6 z-2 p-4\"> <h3 style=\"color:white;\">Salle de bain 2</h3> </div> <img src=\"/images/salledebain2.jpeg\" class=\"w-100\" alt=\"Salle de bain 2\"> </div> </div> </div> </div> </div> </div> </div> </div> </section> <section id=\"services\" class=\"overlay-dark-1\"> <div class=\"container\"> <div class=\"row g-4 justify-content-between\"> <div class=\"col-lg-5 relative z-3\"> <div class=\"me-lg-3\"> <div class=\"subtitle wow fadeInUp\" data-wow-delay=\".0s\">Votre séjour à Strasbourg</div> <h2 class=\"wow fadeInUp\" data-wow-delay=\".2s\">Tarifs et services</h2> <p style=\"color:#212121; font-size:18px;\">Une suite d'exception au cœur de Strasbourg, avec conciergerie dédiée pour vous accompagner tout au long de votre séjour.</p> <p style=\"color:#212121; font-size:18px;\">Réservation minimum deux nuits.</p> <a href=\"#reservation\" class=\"btn-main\" style=\"color:white;\">Réservation</a> </div> </div> <div class=\"col-lg-6\" style=\"color:black;\"> <div class=\"spacer-single spacer-double\"></div> <div class=\"row\"> <div class=\"col-md-6 wow fadeInUp\" data-wow-delay=\".2s\"> {# <h5 class=\" mb-3\">Haute saison</h5> <p class=\"fs-500\"><small>Du 1er juin au 30 septembre • 25 novembre au 05 janvier</small></p> <ul class=\"ul-check fs-500\"> <li>960 € la nuit</li> <li>10% de remise à partir de 7 nuits</li> </ul> <h5 class=\"mb-3 mt-4\">Hors Saison</h5> #} <ul class=\"ul-check fs-500\"> <li>2 personnes : 350 € la nuit</li> <li>4 personnes : 690 € la nuit</li> <li>à partir de 6 personnes : 890 € la nuit</li> <li>10% de remise à partir de 7 nuits</li> </ul> </div> <div class=\"col-md-6 wow fadeInUp\" data-wow-delay=\".4s\"> <h5 class=\"mb-3\">Services optionnels</h5> <ul class=\"ul-check fs-500\"> <li>Une place de parking : 24 €/jour ou 150 €/semaine</li> <li>Ménage supplémentaire durant votre séjour : 60 euros</li> <li>Apéro alsacien : sur commande</li> <li>Atelier pour enfants, équipements bébé, chiens acceptés sur demande (les autres animaux ne sont malheureusement pas autorisés dans l'appartement), Décoration pour occasions spéciales,…</li> </ul> <div class=\"mt-4\"> <p class=\"fs-500\"><strong>Conciergerie sur place</strong><br> <small>Mardi au samedi • 10h-18h45 <br /> Conciergerie privée sur demande selon disponibilité <br /> Sur devis (Correspond à 10% de la réservation)</small> </p> </div> </div> </div> </div> </div> </div> </section> <section id=\"section-gallery\" class=\"relative\"> <div class=\"container relative z-2\" id=\"photos\"> <div class=\"row g-4 gx-5 justify-content-center\"> <div class=\"col-lg-6 text-center\"> <h2 class=\"wow fadeInUp\" data-wow-delay=\".2s\">Galerie de l'Appartement</h2> <p class=\"wow fadeInUp\" data-wow-delay=\".3s\" style=\"color:#212121;\">Voici les images de l'appartement qui vous permettront de découvrir les différents espaces : chambres, salon, cuisine, salle de bain et extérieur.</p> </div> </div> <div class=\"row\"> <div class=\"col-md-12 text-center\"> <ul id=\"filters\" class=\"wow fadeInUp\" data-wow-delay=\"0s\"> <li><a href=\"#\" data-filter=\"*\" class=\"selected\" style=\"color:#212121;\">Tout afficher</a></li> <li><a href=\"#\" data-filter=\".chambre\" style=\"color:#212121;\">Chambres</a></li> <li><a href=\"#\" data-filter=\".salon\" style=\"color:#212121;\">Salon</a></li> <li><a href=\"#\" data-filter=\".cuisine\" style=\"color:#212121;\">Cuisine</a></li> <li><a href=\"#\" data-filter=\".salledebain\" style=\"color:#212121;\">Salle de bain</a></li> <li><a href=\"#\" data-filter=\".exterieur\" style=\"color:#212121;\">Extérieur</a></li> </ul> </div> </div> <div id=\"gallery\" class=\"row g-3 wow fadeInUp\" data-wow-delay=\".3s\"> <!-- Chambres --> <div class=\"col-md-3 col-sm-6 col-12 item chambre\"> <a href=\"images/chambre1.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/chambre1.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Chambre\"> </div> </a> </div> <div class=\"col-md-3 col-sm-6 col-12 item chambre\"> <a href=\"images/chambre2.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/chambre2.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Chambre 2\"> </div> </a> </div> <div class=\"col-md-3 col-sm-6 col-12 item chambre\"> <a href=\"images/chambre3.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/chambre3.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Chambre 3\"> </div> </a> </div> <!-- Salon --> <div class=\"col-md-3 col-sm-6 col-12 item salon\"> <a href=\"images/salon.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/salon.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salon\"> </div> </a> </div> <div class=\"col-md-3 col-sm-6 col-12 item salon\"> <a href=\"images/salon2.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/salon2.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salon 2\"> </div> </a> </div> <div class=\"col-md-3 col-sm-6 col-12 item salon\"> <a href=\"images/salon3.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/salon3.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salon 3\"> </div> </a> </div> <div class=\"col-md-3 col-sm-6 col-12 item salon\"> <a href=\"images/salon4.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/salon4.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salon 4\"> </div> </a> </div> <div class=\"col-md-3 col-sm-6 col-12 item salon\"> <a href=\"images/salon5.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/salon5.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salon 5\"> </div> </a> </div> <!-- Cuisine --> <div class=\"col-md-3 col-sm-6 col-12 item cuisine\"> <a href=\"images/cuisine.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/cuisine.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Cuisine\"> </div> </a> </div> <!-- Salle de bain --> <div class=\"col-md-3 col-sm-6 col-12 item salledebain\"> <a href=\"images/salledebain.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/salledebain.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salle de bain\"> </div> </a> </div> <div class=\"col-md-3 col-sm-6 col-12 item salledebain\"> <a href=\"images/salledebain2.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/salledebain2.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salle de bain 2\"> </div> </a> </div> <!-- Extérieur --> <div class=\"col-md-3 col-sm-6 col-12 item exterieur\"> <a href=\"images/exterieur.jpeg\" class=\"image-popup d-block hover\"> <div class=\"relative overflow-hidden\"> <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\"> Voir </div> <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div> <img src=\"images/exterieur.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Extérieur\"> </div> </a> </div> </div> </div> </section> <section id=\"reservation\" class=\"text-light\"> <div class=\"container\"> <div class=\"row g-4 justify-content-center\"> <div class=\"col-lg-6 text-center\"> <h2 class=\"wow fadeInUp\" data-wow-delay=\".2s\">Réservez votre séjour</h2> </div> </div> <div class=\"row g-4 justify-content-center\"> <div class=\"col-md-6\"> {{ form_start(form) }} <div class=\"row g-4\"> <div class=\"col-md-12\"> <div class=\"calendar-container\" style=\"height:300px;\"> <input type=\"text\" id=\"date_range_picker\"> </div> </div> <div class=\"col-md-3\"> <label style=\"color:#212121;\">Voyageurs</label> {{ form_widget(form.persons) }} </div> <div class=\"col-md-3\"> <label style=\"color:#212121;\">Arrivée</label> <br /> </strong> <span id=\"info-start\" style=\"color:#212121;\">-</span> </div> <div class=\"col-md-3\"> <label style=\"color:#212121;\">Départ</label> <br /> <span id=\"info-end\" style=\"color:#212121;\">-</span> </div> <div class=\"col-md-3\"> <label style=\"color:#212121;\">Nuits</label> <br /> <span id=\"info-nights\" style=\"color:#212121;\">-</span> </div> <div class=\"col-md-12\" style=\"font-size:20px;\"> <div id=\"results\"></div> </div> <div class=\"col-md-6\"> <label style=\"color:#212121;\">Nom</label> {{ form_widget(form.lastname) }} </div> <div class=\"col-md-6\"> <label style=\"color:#212121;\">Prénom</label> {{ form_widget(form.name) }} </div> <div class=\"col-md-12\"> <label style=\"color:#212121;\">Email</label> {{ form_widget(form.email) }} </div> <div class=\"col-md-12\"> <label style=\"color:#212121;\">Message</label> {{ form_widget(form.message) }} </div> <div class=\"col-md-12\"> <div class=\"text-center\" style=\"color:#212121;\"> <input type=\"checkbox\" id=\"acceptCGV\" /> J'accepte <a href=\"/fr/cgv\" target=\"_blank\" style=\"text-decoration:underline; color:#212121;\">conditions générales de vente</a> </div> </div> <div class=\"col-md-12\"> <div class=\"text-center\"> <button type=\"submit\" name=\"submit\" value=\"1\" class=\"btn-main\" style=\"color:white;\">Confirmer la réservation</button> </div> </div> </div> {{ form_widget(form.start) }} {{ form_widget(form.end) }} {{ form_rest(form) }} {{ form_end(form) }} </div> </div> </div> </section> <section id=\"faq\" class=\"text-light\"> <div class=\"container\"> <div class=\"row g-4 justify-content-center\"> <div class=\"col-lg-6 text-center\"> <h2 class=\"wow fadeInUp\" data-wow-delay=\".2s\">FAQ</h2> </div> </div> <div class=\"row g-4 justify-content-center\"> <div class=\"col-lg-6 text-left\" style=\"color:black !important;\"> <h3 style=\"margin-top:7px;\">Comment réserver le logement ?</h3> <div>Vous pouvez réserver directement sur notre site et bientôt via les plateformes partenaires. Le paiement sécurisé confirme immédiatement votre réservation.</div> <h3 style=\"margin-top:7px;\">Quels sont les horaires d’arrivée et de départ ?</h3> <ul> <li>Arrivée : à partir de 15h</li> <li>Départ : avant 11h</li> </ul> <h3 style=\"margin-top:7px;\">Le logement est-il entièrement équipé ?</h3> <div>Oui, le logement est entièrement meublé et équipé : cuisine, literie, serviettes, électroménager, Wi-Fi,…</div> <h3 style=\"margin-top:7px;\">Y a-t-il un parking disponible ?</h3> <div>Oui, un parking privatif est possible en option au prix de 24 euros les 24h ou 150 euros la semaine (7 nuits).</div> <h3 style=\"margin-top:7px;\">Le logement est-il adapté aux enfants ?</h3> <div>Oui, nous proposons certains équipements pour enfants (lit bébé, chaise haute, vaisselle adaptée) sur demande.</div> <h3 style=\"margin-top:7px;\">Les animaux sont-ils acceptés ?</h3> <div>Merci de nous contacter avant de réserver si vous souhaitez venir avec un animal, les chiens sont les seuls animaux acceptés, mais soumis à une demande préalable.</div> <h3 style=\"margin-top:7px;\">Puis-je annuler ou modifier ma réservation ?</h3> <div>Oui, nos conditions d’annulation sont précisées lors de la réservation. Remboursement de 85% du montant de la location si annulation plus d’un mois avant la date d’arrivée, puis 50 % remboursés si annulation entre 1 mois et 15 jours avant la date d’arrivée. Pas de remboursement si annulation moins de 15 jours avant la date d’arrivée.</div> <h3 style=\"margin-top:7px;\">Le logement est-il accessible en transport public ?</h3> <div>Oui, les principaux transports sont proches. La station de tram « Langstross, Grand’rue » est à moins de 100 mètres de l’appartement. La gare de Strasbourg est à 10 minutes à pieds.</div> <h3 style=\"margin-top:7px;\">Y a-t-il des commerces ou restaurants à proximité ?</h3> <div>Oui, vous trouverez supermarchés, cafés, restaurants et activités touristiques au pied de l’immeuble.</div> <h3 style=\"margin-top:7px;\">Que faire en cas de problème pendant le séjour ?</h3> <div>Nous restons disponibles 24h/24 par mail, pour toute urgence ou question concernant le logement, vous pouvez aussi nous joindre entre 9h et 20h par téléphone au 07 61 05 82 43 et nous sommes disponibles</div> </div> </div> </div> </section>{% endblock body %}{% block footerjs %} <script src=\"https://cdn.jsdelivr.net/npm/flatpickr\"></script> <script src=\"https://cdn.jsdelivr.net/npm/flatpickr/dist/l10n/fr.js\"></script> <script> function updateSimulation() { var start = \$(\"#reservation_form_start\").val(); var end = \$(\"#reservation_form_end\").val(); var persons = \$(\"#reservation_form_persons\").val(); if (start && end && persons) { \$(\"#results\").html('<div class=\"loading\">Calcul en cours...</div>'); \$.post( Routing.generate('locale_simulation_pricing',{'_locale':'fr'}), {'start': start, 'end': end, 'persons': persons} ) .done(function(data) { \$(\"#results\").html(data); }) .fail(function() { \$(\"#results\").html('<div class=\"error\">Erreur</div>'); }); } else { \$(\"#results\").html(''); } } // Écoute les changements sur le nombre de personnes \$(\"#reservation_form_persons\").change(updateSimulation); \$(document).ready(function() { // Désactive le bouton au chargement de la page \$('button[type=\"submit\"]').prop('disabled', true); // Écoute les changements sur la checkbox \$('#acceptCGV').change(function() { if(\$(this).is(':checked')) { \$('button[type=\"submit\"]').prop('disabled', false); } else { \$('button[type=\"submit\"]').prop('disabled', true); } }); }); </script> <script> \$(document).ready(function() { let bookedRanges = []; \$.ajax({ url: '{{ env('WEBHOOK_CALENDAR_AVAILABILITY') }}', method: 'POST', contentType: 'application/json', data: '' }) .done(function(data) { bookedRanges = data.bookings || []; console.log('✅ Créneaux chargés:', bookedRanges); initDatePicker(); }) .fail(function(error) { console.error('❌ Erreur:', error); initDatePicker(); }); // 🔧 FONCTION POUR CRÉER UNE DATE LOCALE SANS DÉCALAGE UTC function parseLocalDate(dateStr) { const [year, month, day] = dateStr.split('-').map(Number); return new Date(year, month - 1, day); } const isMobile = window.innerWidth <= 900; function initDatePicker() { flatpickr(\"#date_range_picker\", { inline: true, mode: \"range\", locale: \"fr\", minDate: new Date(new Date().setDate(new Date().getDate() + 1)), dateFormat: \"Y-m-d\", showMonths: isMobile ? 1 : 2, disable: [ function(date) { const checkDate = new Date(date); checkDate.setHours(0, 0, 0, 0); return bookedRanges.some(range => { const start = parseLocalDate(range.start_date); const end = parseLocalDate(range.end_date); return checkDate >= start && checkDate <= end; }); } ], onChange: function(selectedDates, dateStr, instance) { console.log('📅 Dates sélectionnées:', selectedDates.length); if (selectedDates.length === 2) { const start = selectedDates[0]; const end = selectedDates[1]; if (isRangeAvailable(start, end)) { // ✅ Met à jour avec jQuery ET déclenche l'événement change \$('#reservation_form_start').val(formatDate(start)).trigger('change'); \$('#reservation_form_end').val(formatDate(end)).trigger('change'); console.log('✅ Champs mis à jour:', \$('#reservation_form_start').val(), '→', \$('#reservation_form_end').val() ); updateSelectedInfo(start, end); // ✅ Force la simulation updateSimulation(); } else { alert('⚠️ Cette période contient des dates déjà réservées.\\nVeuillez choisir une autre période.'); instance.clear(); clearSymfonyFields(); hideSelectedInfo(); \$(\"#results\").html(''); } } else { clearSymfonyFields(); hideSelectedInfo(); \$(\"#results\").html(''); } }, onDayCreate: function(dObj, dStr, fp, dayElem) { const date = new Date(dayElem.dateObj); date.setHours(0, 0, 0, 0); const isBooked = bookedRanges.some(range => { const start = parseLocalDate(range.start_date); const end = parseLocalDate(range.end_date); return date >= start && date <= end; }); if (isBooked) { dayElem.classList.add('booked'); dayElem.title = 'Date indisponible (réservée)'; } else if (date >= new Date()) { dayElem.classList.add('available'); dayElem.title = 'Date disponible'; } } }); } function isRangeAvailable(startDate, endDate) { let currentDate = new Date(startDate); currentDate.setHours(0, 0, 0, 0); const endCheck = new Date(endDate); endCheck.setHours(0, 0, 0, 0); while (currentDate <= endCheck) { const isBooked = bookedRanges.some(range => { const start = parseLocalDate(range.start_date); const end = parseLocalDate(range.end_date); return currentDate >= start && currentDate <= end; }); if (isBooked) return false; currentDate.setDate(currentDate.getDate() + 1); } return true; } function updateSelectedInfo(start, end) { const nights = Math.ceil((end - start) / (1000 * 60 * 60 * 24)); \$('#info-start').text(start.toLocaleDateString('fr-FR')); \$('#info-end').text(end.toLocaleDateString('fr-FR')); \$('#info-nights').text(`\${nights} nuit\${nights > 1 ? 's' : ''}`); \$('#selected-dates-info').addClass('active'); } function hideSelectedInfo() { \$('#selected-dates-info').removeClass('active'); } function clearSymfonyFields() { \$('#reservation_form_start').val(''); \$('#reservation_form_end').val(''); } function formatDate(date) { const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); return `\${year}-\${month}-\${day}`; } }); </script>{% endblock footerjs %}{% block css %} <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css\"> <style> .calendar-container { margin: 20px 0; width: 100%; overflow: hidden; } /* Calendrier inline (toujours visible) */ #date_range_picker { display: none; /* Le champ input est caché, on affiche juste le calendrier */ } .flatpickr-calendar.inline { margin: 0 auto; box-shadow: 0 4px 12px rgba(0,0,0,0.15); border-radius: 8px; max-width: 100%; } .flatpickr-day.booked { background-color: #ff4444 !important; color: white !important; cursor: not-allowed !important; position: relative; } .flatpickr-day.booked::after { content: \"✕\"; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 20px; font-weight: bold; } .flatpickr-day.booked:hover { background-color: #ff0000 !important; } .flatpickr-day.available:hover { background-color: #28a745; color: white; } /* Adaptations Mobile */ @media (max-width: 768px) { .calendar-container { margin: 10px 0; padding: 0 10px; } .flatpickr-calendar.inline { width: 100% !important; max-width: 100% !important; } .flatpickr-months { padding: 8px 10px; } .flatpickr-days { width: 100% !important; } .dayContainer { width: 100% !important; min-width: 100% !important; max-width: 100% !important; } .flatpickr-day { height: 40px !important; line-height: 40px !important; flex-basis: 14.2857% !important; max-width: 14.2857% !important; } } </style>{% endblock css %}", "vitrine/fr/homepage.html.twig", "/var/www/vhosts/mirtillostudio.com/ch.mirtillostudio.com/templates/vitrine/fr/homepage.html.twig"); }}