var/cache/dev/twig/7f/7ff77c739a8255ba0f35a2e6155892cd.php line 59

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. /* vitrine/fr/homepage.html.twig */
  16. class __TwigTemplate_f3ef98ee2c394bb2ba6d1bc2a5ca5cc7 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->blocks = [
  28. 'title' => [$this, 'block_title'],
  29. 'description' => [$this, 'block_description'],
  30. 'robots' => [$this, 'block_robots'],
  31. 'canonical' => [$this, 'block_canonical'],
  32. 'body' => [$this, 'block_body'],
  33. 'footerjs' => [$this, 'block_footerjs'],
  34. 'css' => [$this, 'block_css'],
  35. ];
  36. }
  37. protected function doGetParent(array $context): bool|string|Template|TemplateWrapper
  38. {
  39. // line 1
  40. return "vitrine/fr/layout.html.twig";
  41. }
  42. protected function doDisplay(array $context, array $blocks = []): iterable
  43. {
  44. $macros = $this->macros;
  45. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  46. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "vitrine/fr/homepage.html.twig"));
  47. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  48. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "template", "vitrine/fr/homepage.html.twig"));
  49. $this->parent = $this->load("vitrine/fr/layout.html.twig", 1);
  50. yield from $this->parent->unwrap()->yield($context, array_merge($this->blocks, $blocks));
  51. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  52. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  53. }
  54. // line 3
  55. /**
  56. * @return iterable<null|scalar|\Stringable>
  57. */
  58. public function block_title(array $context, array $blocks = []): iterable
  59. {
  60. $macros = $this->macros;
  61. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  62. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "title"));
  63. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  64. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "title"));
  65. yield "Suite Cathedrale Heritage - Location 8 pers Strasbourg Centre";
  66. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  67. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  68. yield from [];
  69. }
  70. // line 4
  71. /**
  72. * @return iterable<null|scalar|\Stringable>
  73. */
  74. public function block_description(array $context, array $blocks = []): iterable
  75. {
  76. $macros = $this->macros;
  77. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  78. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "description"));
  79. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  80. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "description"));
  81. 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!";
  82. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  83. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  84. yield from [];
  85. }
  86. // line 5
  87. /**
  88. * @return iterable<null|scalar|\Stringable>
  89. */
  90. public function block_robots(array $context, array $blocks = []): iterable
  91. {
  92. $macros = $this->macros;
  93. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  94. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "robots"));
  95. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  96. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "robots"));
  97. yield "index,follow";
  98. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  99. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  100. yield from [];
  101. }
  102. // line 7
  103. /**
  104. * @return iterable<null|scalar|\Stringable>
  105. */
  106. public function block_canonical(array $context, array $blocks = []): iterable
  107. {
  108. $macros = $this->macros;
  109. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  110. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "canonical"));
  111. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  112. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "canonical"));
  113. // line 8
  114. yield " <link rel=\"canonical\" href=\"https://cathedraleheritage.com/fr\" />
  115. <link rel=\"alternate\" hreflang=\"fr\" href=\"https://cathedraleheritage.com/fr\" />
  116. <link rel=\"alternate\" hreflang=\"en\" href=\"https://cathedraleheritage.com\" />
  117. <link rel=\"alternate\" hreflang=\"x-default\" href=\"https://cathedraleheritage.com\" />
  118. ";
  119. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  120. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  121. yield from [];
  122. }
  123. // line 14
  124. /**
  125. * @return iterable<null|scalar|\Stringable>
  126. */
  127. public function block_body(array $context, array $blocks = []): iterable
  128. {
  129. $macros = $this->macros;
  130. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  131. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "body"));
  132. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  133. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "body"));
  134. // line 15
  135. yield "
  136. <section id=\"hero\" class=\"text-light no-top no-bottom relative overflow-hidden z-1000\">
  137. <div class=\"abs w-100 abs-centered z-2\">
  138. <div class=\"container\">
  139. <div class=\"spacer-double\"></div>
  140. <div class=\"row g-4 align-items-center justify-content-center\">
  141. <div class=\"col-md-8 text-center\">
  142. <h1 class=\"mb-2\" style=\"color:white;\">Bienvenue sur la Suite Cathédrale Héritage</h1>
  143. <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>
  144. <a class=\"btn-main btn-line bg-blur fx-slide\" href=\"#about\" style=\"color:white;\"><span>Découverte</span></a>
  145. </div>
  146. </div>
  147. </div>
  148. </div>
  149. <div class=\"vertical-center\">
  150. <div class=\"swiper\">
  151. <div class=\"swiper-wrapper\">
  152. <div class=\"swiper-slide\">
  153. <div class=\"swiper-inner\" data-bgimage=\"url(/images/salon2.jpeg)\">
  154. <div class=\"sw-overlay op-5\"></div>
  155. </div>
  156. </div>
  157. <div class=\"swiper-slide\">
  158. <div class=\"swiper-inner\" data-bgimage=\"url(/images/chambre2.jpeg)\">
  159. <div class=\"sw-overlay op-5\"></div>
  160. </div>
  161. </div>
  162. <div class=\"swiper-slide\">
  163. <div class=\"swiper-inner\" data-bgimage=\"url(/images/noel.jpeg)\">
  164. <div class=\"sw-overlay op-5\"></div>
  165. </div>
  166. </div>
  167. </div>
  168. </div>
  169. </div>
  170. <div class=\"abs w-100 bottom-0 z-2 pb-4 sm-hide\">
  171. <div class=\"container\">
  172. <div class=\"row\">
  173. <div class=\"col-lg-12\">
  174. <div class=\"d-flex justify-content-between\">
  175. <div>
  176. <h6 style=\"color:white;\">Cathédrale à 100m</h6>
  177. </div>
  178. <div>
  179. <h6 style=\"color:white;\">Musées à 200m</h6>
  180. </div>
  181. <div>
  182. <h6 style=\"color:white;\">Petite France à 300m</h6>
  183. </div>
  184. </div>
  185. </div>
  186. </div>
  187. </div>
  188. </div>
  189. <div class=\"gradient-edge-bottom op-8\"></div>
  190. </section>
  191. <section id=\"about\">
  192. <div class=\"container\">
  193. <div class=\"row g-4 align-items-end justify-content-between\">
  194. <div class=\"col-lg-5\">
  195. <div class=\"subtitle\">A propos de l'appartement</div>
  196. <h2>Suite moderne en hyper centre de la grande île de Strasbourg</h2>
  197. </div>
  198. <div class=\"col-lg-4\">
  199. <p class=\"mb-4\" style=\"color:#212121;\">
  200. 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.
  201. </p>
  202. <p class=\"mb-4\" style=\"color:#212121;\">
  203. Cuisine entièrement équipée et salon-salle à manger convivial pour partager de bons moments ensemble.
  204. </p>
  205. <p class=\"mb-4\" style=\"color:#212121;\">
  206. É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.
  207. </p>
  208. </div>
  209. </div>
  210. <div class=\"spacer-single\"></div>
  211. <div class=\"row g-4\">
  212. <div class=\"col-md-2\">
  213. <div class=\"relative\">
  214. <h5>Taille</h5>
  215. <div class=\"d-flex justify-content-start align-items-center\" style=\"padding-top:6px;\">
  216. <img src=\"/images/home.png\" width=\"37\" class=\"me-3\" alt=\"\">
  217. <div class=\"fs-20 fw-600\" style=\"color:#212121;\">83 m²</div>
  218. </div>
  219. </div>
  220. </div>
  221. <div class=\"col-md-2\">
  222. <div class=\"relative\">
  223. <h5>Chambres</h5>
  224. <div class=\"d-flex justify-content-start align-items-center\" style=\"padding-top:4px;\">
  225. <img src=\"/images/bed.png\" width=\"37\" class=\"me-3\" alt=\"\">
  226. <div class=\"fs-20 fw-600\" style=\"color:#212121;\">3</div>
  227. </div>
  228. </div>
  229. </div>
  230. <div class=\"col-md-2\">
  231. <div class=\"relative\">
  232. <h5>Salon</h5>
  233. <div class=\"d-flex justify-content-start align-items-center\">
  234. <img src=\"/images/sofa.png\" width=\"50\" class=\"me-3\" alt=\"\">
  235. <div class=\"fs-20 fw-600\" style=\"color:#212121;\">Inclus</div>
  236. </div>
  237. </div>
  238. </div>
  239. <div class=\"col-md-2\">
  240. <div class=\"relative\">
  241. <h5>Cuisine</h5>
  242. <div class=\"d-flex justify-content-start align-items-center\" style=\"padding-top:6px;\">
  243. <img src=\"/images/cooking.png\" width=\"37\" class=\"me-3\" alt=\"\">
  244. <div class=\"fs-20 fw-600\" style=\"color:#212121;\">Inclus</div>
  245. </div>
  246. </div>
  247. </div>
  248. <div class=\"col-md-2\">
  249. <div class=\"relative\">
  250. <h5>Salle de bain</h5>
  251. <div class=\"d-flex justify-content-start align-items-center\" style=\"padding-top:4px;\">
  252. <img src=\"/images/bathroom.png\" width=\"40\" class=\"me-3\" alt=\"\">
  253. <div class=\"fs-20 fw-600\" style=\"color:#212121;\">2</div>
  254. </div>
  255. </div>
  256. </div>
  257. <div class=\"col-md-2\">
  258. <div class=\"relative\">
  259. <h5>Personnes</h5>
  260. <div class=\"d-flex justify-content-start align-items-center\" style=\"padding-top:5px;\">
  261. <img src=\"/images/user.png\" width=\"37\" class=\"me-3\" alt=\"\">
  262. <div class=\"fs-20 fw-600\" style=\"color:#212121;\">8</div>
  263. </div>
  264. </div>
  265. </div>
  266. </div>
  267. </div>
  268. </section>
  269. <section id=\"rooms\" class=\"p-0 overflow-hidden\">
  270. <div class=\"container-fluid\">
  271. <div class=\"row\">
  272. <div class=\"col-lg-12\">
  273. <div class=\"owl-custom-nav menu-float\" data-target=\"#room-carousel\">
  274. <a class=\"btn-next\"></a>
  275. <a class=\"btn-prev\"></a>
  276. <div id=\"room-carousel\" class=\"owl-2-cols-center owl-carousel owl-theme\">
  277. <div class=\"item\">
  278. <div class=\"relative\">
  279. <div class=\"overflow-hidden text-light\">
  280. <div class=\"abs h-100 start-0 z-2 p-4\">
  281. <h3 style=\"color:white;\">Salon</h3>
  282. </div>
  283. <img src=\"/images/salon2.jpeg\" class=\"w-100\" alt=\"Salon\">
  284. </div>
  285. </div>
  286. </div>
  287. <div class=\"item\">
  288. <div class=\"relative\">
  289. <div class=\"overflow-hidden text-light\">
  290. <div class=\"abs h-100 start-1 z-2 p-4\">
  291. <h3 style=\"color:white;\">Chambre 1</h3>
  292. </div>
  293. <img src=\"/images/chambre1.jpeg\" class=\"w-100\" alt=\"Chambre 1\">
  294. </div>
  295. </div>
  296. </div>
  297. <div class=\"item\">
  298. <div class=\"relative\">
  299. <div class=\"overflow-hidden text-light\">
  300. <div class=\"abs h-100 start-2 z-2 p-4\">
  301. <h3 style=\"color:white;\">Chambre 2</h3>
  302. </div>
  303. <img src=\"/images/chambre2.jpeg\" class=\"w-100\" alt=\"Chambre 2\">
  304. </div>
  305. </div>
  306. </div>
  307. <div class=\"item\">
  308. <div class=\"relative\">
  309. <div class=\"overflow-hidden text-light\">
  310. <div class=\"abs h-100 start-3 z-2 p-4\">
  311. <h3 style=\"color:white;\">Chambre 3</h3>
  312. </div>
  313. <img src=\"/images/chambre3.jpeg\" class=\"w-100\" alt=\"Chambre 3\">
  314. </div>
  315. </div>
  316. </div>
  317. <div class=\"item\">
  318. <div class=\"relative\">
  319. <div class=\"overflow-hidden text-light\">
  320. <div class=\"abs h-100 start-4 z-2 p-4\">
  321. <h3 style=\"color:white;\">Cuisine</h3>
  322. </div>
  323. <img src=\"/images/cuisine.jpeg\" class=\"w-100\" alt=\"Cuisine\">
  324. </div>
  325. </div>
  326. </div>
  327. <div class=\"item\">
  328. <div class=\"relative\">
  329. <div class=\"overflow-hidden text-light\">
  330. <div class=\"abs h-100 start-5 z-2 p-4\">
  331. <h3 style=\"color:white;\">Salle de bain</h3>
  332. </div>
  333. <img src=\"/images/salledebain.jpeg\" class=\"w-100\" alt=\"Salle de bain 1\">
  334. </div>
  335. </div>
  336. </div>
  337. <div class=\"item\">
  338. <div class=\"relative\">
  339. <div class=\"overflow-hidden text-light\">
  340. <div class=\"abs h-100 start-6 z-2 p-4\">
  341. <h3 style=\"color:white;\">Salle de bain 2</h3>
  342. </div>
  343. <img src=\"/images/salledebain2.jpeg\" class=\"w-100\" alt=\"Salle de bain 2\">
  344. </div>
  345. </div>
  346. </div>
  347. </div>
  348. </div>
  349. </div>
  350. </div>
  351. </div>
  352. </section>
  353. <section id=\"services\" class=\"overlay-dark-1\">
  354. <div class=\"container\">
  355. <div class=\"row g-4 justify-content-between\">
  356. <div class=\"col-lg-5 relative z-3\">
  357. <div class=\"me-lg-3\">
  358. <div class=\"subtitle wow fadeInUp\" data-wow-delay=\".0s\">Votre séjour à Strasbourg</div>
  359. <h2 class=\"wow fadeInUp\" data-wow-delay=\".2s\">Tarifs et services</h2>
  360. <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>
  361. <p style=\"color:#212121; font-size:18px;\">Réservation minimum deux nuits.</p>
  362. <a href=\"#reservation\" class=\"btn-main\" style=\"color:white;\">Réservation</a>
  363. </div>
  364. </div>
  365. <div class=\"col-lg-6\" style=\"color:black;\">
  366. <div class=\"spacer-single spacer-double\"></div>
  367. <div class=\"row\">
  368. <div class=\"col-md-6 wow fadeInUp\" data-wow-delay=\".2s\">
  369. ";
  370. // line 289
  371. yield "
  372. <ul class=\"ul-check fs-500\">
  373. <li>2 personnes : 350 € la nuit</li>
  374. <li>4 personnes : 690 € la nuit</li>
  375. <li>à partir de 6 personnes : 890 € la nuit</li>
  376. <li>10% de remise à partir de 7 nuits</li>
  377. </ul>
  378. </div>
  379. <div class=\"col-md-6 wow fadeInUp\" data-wow-delay=\".4s\">
  380. <h5 class=\"mb-3\">Services optionnels</h5>
  381. <ul class=\"ul-check fs-500\">
  382. <li>Une place de parking : 24 €/jour ou 150 €/semaine</li>
  383. <li>Ménage supplémentaire durant votre séjour : 60 euros</li>
  384. <li>Apéro alsacien : sur commande</li>
  385. <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>
  386. </ul>
  387. <div class=\"mt-4\">
  388. <p class=\"fs-500\"><strong>Conciergerie sur place</strong><br>
  389. <small>Mardi au samedi • 10h-18h45 <br /> Conciergerie privée sur demande selon disponibilité <br /> Sur devis (Correspond à 10% de la réservation)</small>
  390. </p>
  391. </div>
  392. </div>
  393. </div>
  394. </div>
  395. </div>
  396. </div>
  397. </section>
  398. <section id=\"section-gallery\" class=\"relative\">
  399. <div class=\"container relative z-2\" id=\"photos\">
  400. <div class=\"row g-4 gx-5 justify-content-center\">
  401. <div class=\"col-lg-6 text-center\">
  402. <h2 class=\"wow fadeInUp\" data-wow-delay=\".2s\">Galerie de l'Appartement</h2>
  403. <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>
  404. </div>
  405. </div>
  406. <div class=\"row\">
  407. <div class=\"col-md-12 text-center\">
  408. <ul id=\"filters\" class=\"wow fadeInUp\" data-wow-delay=\"0s\">
  409. <li><a href=\"#\" data-filter=\"*\" class=\"selected\" style=\"color:#212121;\">Tout afficher</a></li>
  410. <li><a href=\"#\" data-filter=\".chambre\" style=\"color:#212121;\">Chambres</a></li>
  411. <li><a href=\"#\" data-filter=\".salon\" style=\"color:#212121;\">Salon</a></li>
  412. <li><a href=\"#\" data-filter=\".cuisine\" style=\"color:#212121;\">Cuisine</a></li>
  413. <li><a href=\"#\" data-filter=\".salledebain\" style=\"color:#212121;\">Salle de bain</a></li>
  414. <li><a href=\"#\" data-filter=\".exterieur\" style=\"color:#212121;\">Extérieur</a></li>
  415. </ul>
  416. </div>
  417. </div>
  418. <div id=\"gallery\" class=\"row g-3 wow fadeInUp\" data-wow-delay=\".3s\">
  419. <!-- Chambres -->
  420. <div class=\"col-md-3 col-sm-6 col-12 item chambre\">
  421. <a href=\"images/chambre1.jpeg\" class=\"image-popup d-block hover\">
  422. <div class=\"relative overflow-hidden\">
  423. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  424. Voir
  425. </div>
  426. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  427. <img src=\"images/chambre1.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Chambre\">
  428. </div>
  429. </a>
  430. </div>
  431. <div class=\"col-md-3 col-sm-6 col-12 item chambre\">
  432. <a href=\"images/chambre2.jpeg\" class=\"image-popup d-block hover\">
  433. <div class=\"relative overflow-hidden\">
  434. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  435. Voir
  436. </div>
  437. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  438. <img src=\"images/chambre2.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Chambre 2\">
  439. </div>
  440. </a>
  441. </div>
  442. <div class=\"col-md-3 col-sm-6 col-12 item chambre\">
  443. <a href=\"images/chambre3.jpeg\" class=\"image-popup d-block hover\">
  444. <div class=\"relative overflow-hidden\">
  445. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  446. Voir
  447. </div>
  448. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  449. <img src=\"images/chambre3.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Chambre 3\">
  450. </div>
  451. </a>
  452. </div>
  453. <!-- Salon -->
  454. <div class=\"col-md-3 col-sm-6 col-12 item salon\">
  455. <a href=\"images/salon.jpeg\" class=\"image-popup d-block hover\">
  456. <div class=\"relative overflow-hidden\">
  457. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  458. Voir
  459. </div>
  460. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  461. <img src=\"images/salon.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salon\">
  462. </div>
  463. </a>
  464. </div>
  465. <div class=\"col-md-3 col-sm-6 col-12 item salon\">
  466. <a href=\"images/salon2.jpeg\" class=\"image-popup d-block hover\">
  467. <div class=\"relative overflow-hidden\">
  468. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  469. Voir
  470. </div>
  471. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  472. <img src=\"images/salon2.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salon 2\">
  473. </div>
  474. </a>
  475. </div>
  476. <div class=\"col-md-3 col-sm-6 col-12 item salon\">
  477. <a href=\"images/salon3.jpeg\" class=\"image-popup d-block hover\">
  478. <div class=\"relative overflow-hidden\">
  479. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  480. Voir
  481. </div>
  482. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  483. <img src=\"images/salon3.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salon 3\">
  484. </div>
  485. </a>
  486. </div>
  487. <div class=\"col-md-3 col-sm-6 col-12 item salon\">
  488. <a href=\"images/salon4.jpeg\" class=\"image-popup d-block hover\">
  489. <div class=\"relative overflow-hidden\">
  490. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  491. Voir
  492. </div>
  493. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  494. <img src=\"images/salon4.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salon 4\">
  495. </div>
  496. </a>
  497. </div>
  498. <div class=\"col-md-3 col-sm-6 col-12 item salon\">
  499. <a href=\"images/salon5.jpeg\" class=\"image-popup d-block hover\">
  500. <div class=\"relative overflow-hidden\">
  501. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  502. Voir
  503. </div>
  504. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  505. <img src=\"images/salon5.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salon 5\">
  506. </div>
  507. </a>
  508. </div>
  509. <!-- Cuisine -->
  510. <div class=\"col-md-3 col-sm-6 col-12 item cuisine\">
  511. <a href=\"images/cuisine.jpeg\" class=\"image-popup d-block hover\">
  512. <div class=\"relative overflow-hidden\">
  513. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  514. Voir
  515. </div>
  516. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  517. <img src=\"images/cuisine.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Cuisine\">
  518. </div>
  519. </a>
  520. </div>
  521. <!-- Salle de bain -->
  522. <div class=\"col-md-3 col-sm-6 col-12 item salledebain\">
  523. <a href=\"images/salledebain.jpeg\" class=\"image-popup d-block hover\">
  524. <div class=\"relative overflow-hidden\">
  525. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  526. Voir
  527. </div>
  528. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  529. <img src=\"images/salledebain.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salle de bain\">
  530. </div>
  531. </a>
  532. </div>
  533. <div class=\"col-md-3 col-sm-6 col-12 item salledebain\">
  534. <a href=\"images/salledebain2.jpeg\" class=\"image-popup d-block hover\">
  535. <div class=\"relative overflow-hidden\">
  536. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  537. Voir
  538. </div>
  539. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  540. <img src=\"images/salledebain2.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salle de bain 2\">
  541. </div>
  542. </a>
  543. </div>
  544. <!-- Extérieur -->
  545. <div class=\"col-md-3 col-sm-6 col-12 item exterieur\">
  546. <a href=\"images/exterieur.jpeg\" class=\"image-popup d-block hover\">
  547. <div class=\"relative overflow-hidden\">
  548. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  549. Voir
  550. </div>
  551. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  552. <img src=\"images/exterieur.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Extérieur\">
  553. </div>
  554. </a>
  555. </div>
  556. </div>
  557. </div>
  558. </section>
  559. <section id=\"reservation\" class=\"text-light\">
  560. <div class=\"container\">
  561. <div class=\"row g-4 justify-content-center\">
  562. <div class=\"col-lg-6 text-center\">
  563. <h2 class=\"wow fadeInUp\" data-wow-delay=\".2s\">Réservez votre séjour</h2>
  564. </div>
  565. </div>
  566. <div class=\"row g-4 justify-content-center\">
  567. <div class=\"col-md-6\">
  568. ";
  569. // line 509
  570. 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');
  571. yield "
  572. <div class=\"row g-4\">
  573. <div class=\"col-md-12\">
  574. <div class=\"calendar-container\" style=\"height:300px;\">
  575. <input type=\"text\" id=\"date_range_picker\">
  576. </div>
  577. </div>
  578. <div class=\"col-md-3\">
  579. <label style=\"color:#212121;\">Voyageurs</label>
  580. ";
  581. // line 520
  582. 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');
  583. yield "
  584. </div>
  585. <div class=\"col-md-3\">
  586. <label style=\"color:#212121;\">Arrivée</label> <br />
  587. </strong> <span id=\"info-start\" style=\"color:#212121;\">-</span>
  588. </div>
  589. <div class=\"col-md-3\">
  590. <label style=\"color:#212121;\">Départ</label> <br />
  591. <span id=\"info-end\" style=\"color:#212121;\">-</span>
  592. </div>
  593. <div class=\"col-md-3\">
  594. <label style=\"color:#212121;\">Nuits</label> <br />
  595. <span id=\"info-nights\" style=\"color:#212121;\">-</span>
  596. </div>
  597. <div class=\"col-md-12\" style=\"font-size:20px;\">
  598. <div id=\"results\"></div>
  599. </div>
  600. <div class=\"col-md-6\">
  601. <label style=\"color:#212121;\">Nom</label>
  602. ";
  603. // line 544
  604. 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');
  605. yield "
  606. </div>
  607. <div class=\"col-md-6\">
  608. <label style=\"color:#212121;\">Prénom</label>
  609. ";
  610. // line 549
  611. 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');
  612. yield "
  613. </div>
  614. <div class=\"col-md-12\">
  615. <label style=\"color:#212121;\">Email</label>
  616. ";
  617. // line 554
  618. 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');
  619. yield "
  620. </div>
  621. <div class=\"col-md-12\">
  622. <label style=\"color:#212121;\">Message</label>
  623. ";
  624. // line 559
  625. 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');
  626. yield "
  627. </div>
  628. <div class=\"col-md-12\">
  629. <div class=\"text-center\" style=\"color:#212121;\">
  630. <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>
  631. </div>
  632. </div>
  633. <div class=\"col-md-12\">
  634. <div class=\"text-center\">
  635. <button type=\"submit\" name=\"submit\" value=\"1\" class=\"btn-main\" style=\"color:white;\">Confirmer la réservation</button>
  636. </div>
  637. </div>
  638. </div>
  639. ";
  640. // line 575
  641. 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');
  642. yield "
  643. ";
  644. // line 576
  645. 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');
  646. yield "
  647. ";
  648. // line 578
  649. 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');
  650. yield "
  651. ";
  652. // line 579
  653. 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');
  654. yield "
  655. </div>
  656. </div>
  657. </div>
  658. </section>
  659. <section id=\"faq\" class=\"text-light\">
  660. <div class=\"container\">
  661. <div class=\"row g-4 justify-content-center\">
  662. <div class=\"col-lg-6 text-center\">
  663. <h2 class=\"wow fadeInUp\" data-wow-delay=\".2s\">FAQ</h2>
  664. </div>
  665. </div>
  666. <div class=\"row g-4 justify-content-center\">
  667. <div class=\"col-lg-6 text-left\" style=\"color:black !important;\">
  668. <h3 style=\"margin-top:7px;\">Comment réserver le logement ?</h3>
  669. <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>
  670. <h3 style=\"margin-top:7px;\">Quels sont les horaires d’arrivée et de départ ?</h3>
  671. <ul>
  672. <li>Arrivée : à partir de 15h</li>
  673. <li>Départ : avant 11h</li>
  674. </ul>
  675. <h3 style=\"margin-top:7px;\">Le logement est-il entièrement équipé ?</h3>
  676. <div>Oui, le logement est entièrement meublé et équipé : cuisine, literie, serviettes, électroménager, Wi-Fi,…</div>
  677. <h3 style=\"margin-top:7px;\">Y a-t-il un parking disponible ?</h3>
  678. <div>Oui, un parking privatif est possible en option au prix de 24 euros les 24h ou 150 euros la semaine (7 nuits).</div>
  679. <h3 style=\"margin-top:7px;\">Le logement est-il adapté aux enfants ?</h3>
  680. <div>Oui, nous proposons certains équipements pour enfants (lit bébé, chaise haute, vaisselle adaptée) sur demande.</div>
  681. <h3 style=\"margin-top:7px;\">Les animaux sont-ils acceptés ?</h3>
  682. <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>
  683. <h3 style=\"margin-top:7px;\">Puis-je annuler ou modifier ma réservation ?</h3>
  684. <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>
  685. <h3 style=\"margin-top:7px;\">Le logement est-il accessible en transport public ?</h3>
  686. <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>
  687. <h3 style=\"margin-top:7px;\">Y a-t-il des commerces ou restaurants à proximité ?</h3>
  688. <div>Oui, vous trouverez supermarchés, cafés, restaurants et activités touristiques au pied de l’immeuble.</div>
  689. <h3 style=\"margin-top:7px;\">Que faire en cas de problème pendant le séjour ?</h3>
  690. <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>
  691. </div>
  692. </div>
  693. </div>
  694. </section>
  695. ";
  696. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  697. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  698. yield from [];
  699. }
  700. // line 639
  701. /**
  702. * @return iterable<null|scalar|\Stringable>
  703. */
  704. public function block_footerjs(array $context, array $blocks = []): iterable
  705. {
  706. $macros = $this->macros;
  707. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  708. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "footerjs"));
  709. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  710. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "footerjs"));
  711. // line 640
  712. yield " <script src=\"https://cdn.jsdelivr.net/npm/flatpickr\"></script>
  713. <script src=\"https://cdn.jsdelivr.net/npm/flatpickr/dist/l10n/fr.js\"></script>
  714. <script>
  715. function updateSimulation() {
  716. var start = \$(\"#reservation_form_start\").val();
  717. var end = \$(\"#reservation_form_end\").val();
  718. var persons = \$(\"#reservation_form_persons\").val();
  719. if (start && end && persons) {
  720. \$(\"#results\").html('<div class=\"loading\">Calcul en cours...</div>');
  721. \$.post(
  722. Routing.generate('locale_simulation_pricing',{'_locale':'fr'}),
  723. {'start': start, 'end': end, 'persons': persons}
  724. )
  725. .done(function(data) {
  726. \$(\"#results\").html(data);
  727. })
  728. .fail(function() {
  729. \$(\"#results\").html('<div class=\"error\">Erreur</div>');
  730. });
  731. } else {
  732. \$(\"#results\").html('');
  733. }
  734. }
  735. // Écoute les changements sur le nombre de personnes
  736. \$(\"#reservation_form_persons\").change(updateSimulation);
  737. \$(document).ready(function() {
  738. // Désactive le bouton au chargement de la page
  739. \$('button[type=\"submit\"]').prop('disabled', true);
  740. // Écoute les changements sur la checkbox
  741. \$('#acceptCGV').change(function() {
  742. if(\$(this).is(':checked')) {
  743. \$('button[type=\"submit\"]').prop('disabled', false);
  744. } else {
  745. \$('button[type=\"submit\"]').prop('disabled', true);
  746. }
  747. });
  748. });
  749. </script>
  750. <script>
  751. \$(document).ready(function() {
  752. let bookedRanges = [];
  753. \$.ajax({
  754. url: '";
  755. // line 688
  756. yield $this->env->getRuntime('Twig\Runtime\EscaperRuntime')->escape($this->extensions['App\Twig\CoreExtension']->getEnvironmentVariable("WEBHOOK_CALENDAR_AVAILABILITY"), "html", null, true);
  757. yield "',
  758. method: 'POST',
  759. contentType: 'application/json',
  760. data: ''
  761. })
  762. .done(function(data) {
  763. bookedRanges = data.bookings || [];
  764. console.log('✅ Créneaux chargés:', bookedRanges);
  765. initDatePicker();
  766. })
  767. .fail(function(error) {
  768. console.error('❌ Erreur:', error);
  769. initDatePicker();
  770. });
  771. // 🔧 FONCTION POUR CRÉER UNE DATE LOCALE SANS DÉCALAGE UTC
  772. function parseLocalDate(dateStr) {
  773. const [year, month, day] = dateStr.split('-').map(Number);
  774. return new Date(year, month - 1, day);
  775. }
  776. const isMobile = window.innerWidth <= 900;
  777. function initDatePicker() {
  778. flatpickr(\"#date_range_picker\", {
  779. inline: true,
  780. mode: \"range\",
  781. locale: \"fr\",
  782. minDate: new Date(new Date().setDate(new Date().getDate() + 1)),
  783. dateFormat: \"Y-m-d\",
  784. showMonths: isMobile ? 1 : 2,
  785. disable: [
  786. function(date) {
  787. const checkDate = new Date(date);
  788. checkDate.setHours(0, 0, 0, 0);
  789. return bookedRanges.some(range => {
  790. const start = parseLocalDate(range.start_date);
  791. const end = parseLocalDate(range.end_date);
  792. return checkDate >= start && checkDate <= end;
  793. });
  794. }
  795. ],
  796. onChange: function(selectedDates, dateStr, instance) {
  797. console.log('📅 Dates sélectionnées:', selectedDates.length);
  798. if (selectedDates.length === 2) {
  799. const start = selectedDates[0];
  800. const end = selectedDates[1];
  801. if (isRangeAvailable(start, end)) {
  802. // ✅ Met à jour avec jQuery ET déclenche l'événement change
  803. \$('#reservation_form_start').val(formatDate(start)).trigger('change');
  804. \$('#reservation_form_end').val(formatDate(end)).trigger('change');
  805. console.log('✅ Champs mis à jour:',
  806. \$('#reservation_form_start').val(),
  807. '→',
  808. \$('#reservation_form_end').val()
  809. );
  810. updateSelectedInfo(start, end);
  811. // ✅ Force la simulation
  812. updateSimulation();
  813. } else {
  814. alert('⚠️ Cette période contient des dates déjà réservées.\\nVeuillez choisir une autre période.');
  815. instance.clear();
  816. clearSymfonyFields();
  817. hideSelectedInfo();
  818. \$(\"#results\").html('');
  819. }
  820. } else {
  821. clearSymfonyFields();
  822. hideSelectedInfo();
  823. \$(\"#results\").html('');
  824. }
  825. },
  826. onDayCreate: function(dObj, dStr, fp, dayElem) {
  827. const date = new Date(dayElem.dateObj);
  828. date.setHours(0, 0, 0, 0);
  829. const isBooked = bookedRanges.some(range => {
  830. const start = parseLocalDate(range.start_date);
  831. const end = parseLocalDate(range.end_date);
  832. return date >= start && date <= end;
  833. });
  834. if (isBooked) {
  835. dayElem.classList.add('booked');
  836. dayElem.title = 'Date indisponible (réservée)';
  837. } else if (date >= new Date()) {
  838. dayElem.classList.add('available');
  839. dayElem.title = 'Date disponible';
  840. }
  841. }
  842. });
  843. }
  844. function isRangeAvailable(startDate, endDate) {
  845. let currentDate = new Date(startDate);
  846. currentDate.setHours(0, 0, 0, 0);
  847. const endCheck = new Date(endDate);
  848. endCheck.setHours(0, 0, 0, 0);
  849. while (currentDate <= endCheck) {
  850. const isBooked = bookedRanges.some(range => {
  851. const start = parseLocalDate(range.start_date);
  852. const end = parseLocalDate(range.end_date);
  853. return currentDate >= start && currentDate <= end;
  854. });
  855. if (isBooked) return false;
  856. currentDate.setDate(currentDate.getDate() + 1);
  857. }
  858. return true;
  859. }
  860. function updateSelectedInfo(start, end) {
  861. const nights = Math.ceil((end - start) / (1000 * 60 * 60 * 24));
  862. \$('#info-start').text(start.toLocaleDateString('fr-FR'));
  863. \$('#info-end').text(end.toLocaleDateString('fr-FR'));
  864. \$('#info-nights').text(`\${nights} nuit\${nights > 1 ? 's' : ''}`);
  865. \$('#selected-dates-info').addClass('active');
  866. }
  867. function hideSelectedInfo() {
  868. \$('#selected-dates-info').removeClass('active');
  869. }
  870. function clearSymfonyFields() {
  871. \$('#reservation_form_start').val('');
  872. \$('#reservation_form_end').val('');
  873. }
  874. function formatDate(date) {
  875. const year = date.getFullYear();
  876. const month = String(date.getMonth() + 1).padStart(2, '0');
  877. const day = String(date.getDate()).padStart(2, '0');
  878. return `\${year}-\${month}-\${day}`;
  879. }
  880. });
  881. </script>
  882. ";
  883. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  884. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  885. yield from [];
  886. }
  887. // line 837
  888. /**
  889. * @return iterable<null|scalar|\Stringable>
  890. */
  891. public function block_css(array $context, array $blocks = []): iterable
  892. {
  893. $macros = $this->macros;
  894. $__internal_5a27a8ba21ca79b61932376b2fa922d2 = $this->extensions["Symfony\\Bundle\\WebProfilerBundle\\Twig\\WebProfilerExtension"];
  895. $__internal_5a27a8ba21ca79b61932376b2fa922d2->enter($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "css"));
  896. $__internal_6f47bbe9983af81f1e7450e9a3e3768f = $this->extensions["Symfony\\Bridge\\Twig\\Extension\\ProfilerExtension"];
  897. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->enter($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof = new \Twig\Profiler\Profile($this->getTemplateName(), "block", "css"));
  898. // line 838
  899. yield " <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css\">
  900. <style>
  901. .calendar-container {
  902. margin: 20px 0;
  903. width: 100%;
  904. overflow: hidden;
  905. }
  906. /* Calendrier inline (toujours visible) */
  907. #date_range_picker {
  908. display: none; /* Le champ input est caché, on affiche juste le calendrier */
  909. }
  910. .flatpickr-calendar.inline {
  911. margin: 0 auto;
  912. box-shadow: 0 4px 12px rgba(0,0,0,0.15);
  913. border-radius: 8px;
  914. max-width: 100%;
  915. }
  916. .flatpickr-day.booked {
  917. background-color: #ff4444 !important;
  918. color: white !important;
  919. cursor: not-allowed !important;
  920. position: relative;
  921. }
  922. .flatpickr-day.booked::after {
  923. content: \"✕\";
  924. position: absolute;
  925. top: 50%;
  926. left: 50%;
  927. transform: translate(-50%, -50%);
  928. font-size: 20px;
  929. font-weight: bold;
  930. }
  931. .flatpickr-day.booked:hover {
  932. background-color: #ff0000 !important;
  933. }
  934. .flatpickr-day.available:hover {
  935. background-color: #28a745;
  936. color: white;
  937. }
  938. /* Adaptations Mobile */
  939. @media (max-width: 768px) {
  940. .calendar-container {
  941. margin: 10px 0;
  942. padding: 0 10px;
  943. }
  944. .flatpickr-calendar.inline {
  945. width: 100% !important;
  946. max-width: 100% !important;
  947. }
  948. .flatpickr-months {
  949. padding: 8px 10px;
  950. }
  951. .flatpickr-days {
  952. width: 100% !important;
  953. }
  954. .dayContainer {
  955. width: 100% !important;
  956. min-width: 100% !important;
  957. max-width: 100% !important;
  958. }
  959. .flatpickr-day {
  960. height: 40px !important;
  961. line-height: 40px !important;
  962. flex-basis: 14.2857% !important;
  963. max-width: 14.2857% !important;
  964. }
  965. }
  966. </style>
  967. ";
  968. $__internal_6f47bbe9983af81f1e7450e9a3e3768f->leave($__internal_6f47bbe9983af81f1e7450e9a3e3768f_prof);
  969. $__internal_5a27a8ba21ca79b61932376b2fa922d2->leave($__internal_5a27a8ba21ca79b61932376b2fa922d2_prof);
  970. yield from [];
  971. }
  972. /**
  973. * @codeCoverageIgnore
  974. */
  975. public function getTemplateName(): string
  976. {
  977. return "vitrine/fr/homepage.html.twig";
  978. }
  979. /**
  980. * @codeCoverageIgnore
  981. */
  982. public function isTraitable(): bool
  983. {
  984. return false;
  985. }
  986. /**
  987. * @codeCoverageIgnore
  988. */
  989. public function getDebugInfo(): array
  990. {
  991. 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,);
  992. }
  993. public function getSourceContext(): Source
  994. {
  995. return new Source("{% extends 'vitrine/fr/layout.html.twig' %}
  996. {% block title %}Suite Cathedrale Heritage - Location 8 pers Strasbourg Centre{% endblock title %}
  997. {% 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 %}
  998. {% block robots %}index,follow{% endblock robots %}
  999. {% block canonical %}
  1000. <link rel=\"canonical\" href=\"https://cathedraleheritage.com/fr\" />
  1001. <link rel=\"alternate\" hreflang=\"fr\" href=\"https://cathedraleheritage.com/fr\" />
  1002. <link rel=\"alternate\" hreflang=\"en\" href=\"https://cathedraleheritage.com\" />
  1003. <link rel=\"alternate\" hreflang=\"x-default\" href=\"https://cathedraleheritage.com\" />
  1004. {% endblock canonical %}
  1005. {% block body %}
  1006. <section id=\"hero\" class=\"text-light no-top no-bottom relative overflow-hidden z-1000\">
  1007. <div class=\"abs w-100 abs-centered z-2\">
  1008. <div class=\"container\">
  1009. <div class=\"spacer-double\"></div>
  1010. <div class=\"row g-4 align-items-center justify-content-center\">
  1011. <div class=\"col-md-8 text-center\">
  1012. <h1 class=\"mb-2\" style=\"color:white;\">Bienvenue sur la Suite Cathédrale Héritage</h1>
  1013. <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>
  1014. <a class=\"btn-main btn-line bg-blur fx-slide\" href=\"#about\" style=\"color:white;\"><span>Découverte</span></a>
  1015. </div>
  1016. </div>
  1017. </div>
  1018. </div>
  1019. <div class=\"vertical-center\">
  1020. <div class=\"swiper\">
  1021. <div class=\"swiper-wrapper\">
  1022. <div class=\"swiper-slide\">
  1023. <div class=\"swiper-inner\" data-bgimage=\"url(/images/salon2.jpeg)\">
  1024. <div class=\"sw-overlay op-5\"></div>
  1025. </div>
  1026. </div>
  1027. <div class=\"swiper-slide\">
  1028. <div class=\"swiper-inner\" data-bgimage=\"url(/images/chambre2.jpeg)\">
  1029. <div class=\"sw-overlay op-5\"></div>
  1030. </div>
  1031. </div>
  1032. <div class=\"swiper-slide\">
  1033. <div class=\"swiper-inner\" data-bgimage=\"url(/images/noel.jpeg)\">
  1034. <div class=\"sw-overlay op-5\"></div>
  1035. </div>
  1036. </div>
  1037. </div>
  1038. </div>
  1039. </div>
  1040. <div class=\"abs w-100 bottom-0 z-2 pb-4 sm-hide\">
  1041. <div class=\"container\">
  1042. <div class=\"row\">
  1043. <div class=\"col-lg-12\">
  1044. <div class=\"d-flex justify-content-between\">
  1045. <div>
  1046. <h6 style=\"color:white;\">Cathédrale à 100m</h6>
  1047. </div>
  1048. <div>
  1049. <h6 style=\"color:white;\">Musées à 200m</h6>
  1050. </div>
  1051. <div>
  1052. <h6 style=\"color:white;\">Petite France à 300m</h6>
  1053. </div>
  1054. </div>
  1055. </div>
  1056. </div>
  1057. </div>
  1058. </div>
  1059. <div class=\"gradient-edge-bottom op-8\"></div>
  1060. </section>
  1061. <section id=\"about\">
  1062. <div class=\"container\">
  1063. <div class=\"row g-4 align-items-end justify-content-between\">
  1064. <div class=\"col-lg-5\">
  1065. <div class=\"subtitle\">A propos de l'appartement</div>
  1066. <h2>Suite moderne en hyper centre de la grande île de Strasbourg</h2>
  1067. </div>
  1068. <div class=\"col-lg-4\">
  1069. <p class=\"mb-4\" style=\"color:#212121;\">
  1070. 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.
  1071. </p>
  1072. <p class=\"mb-4\" style=\"color:#212121;\">
  1073. Cuisine entièrement équipée et salon-salle à manger convivial pour partager de bons moments ensemble.
  1074. </p>
  1075. <p class=\"mb-4\" style=\"color:#212121;\">
  1076. É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.
  1077. </p>
  1078. </div>
  1079. </div>
  1080. <div class=\"spacer-single\"></div>
  1081. <div class=\"row g-4\">
  1082. <div class=\"col-md-2\">
  1083. <div class=\"relative\">
  1084. <h5>Taille</h5>
  1085. <div class=\"d-flex justify-content-start align-items-center\" style=\"padding-top:6px;\">
  1086. <img src=\"/images/home.png\" width=\"37\" class=\"me-3\" alt=\"\">
  1087. <div class=\"fs-20 fw-600\" style=\"color:#212121;\">83 m²</div>
  1088. </div>
  1089. </div>
  1090. </div>
  1091. <div class=\"col-md-2\">
  1092. <div class=\"relative\">
  1093. <h5>Chambres</h5>
  1094. <div class=\"d-flex justify-content-start align-items-center\" style=\"padding-top:4px;\">
  1095. <img src=\"/images/bed.png\" width=\"37\" class=\"me-3\" alt=\"\">
  1096. <div class=\"fs-20 fw-600\" style=\"color:#212121;\">3</div>
  1097. </div>
  1098. </div>
  1099. </div>
  1100. <div class=\"col-md-2\">
  1101. <div class=\"relative\">
  1102. <h5>Salon</h5>
  1103. <div class=\"d-flex justify-content-start align-items-center\">
  1104. <img src=\"/images/sofa.png\" width=\"50\" class=\"me-3\" alt=\"\">
  1105. <div class=\"fs-20 fw-600\" style=\"color:#212121;\">Inclus</div>
  1106. </div>
  1107. </div>
  1108. </div>
  1109. <div class=\"col-md-2\">
  1110. <div class=\"relative\">
  1111. <h5>Cuisine</h5>
  1112. <div class=\"d-flex justify-content-start align-items-center\" style=\"padding-top:6px;\">
  1113. <img src=\"/images/cooking.png\" width=\"37\" class=\"me-3\" alt=\"\">
  1114. <div class=\"fs-20 fw-600\" style=\"color:#212121;\">Inclus</div>
  1115. </div>
  1116. </div>
  1117. </div>
  1118. <div class=\"col-md-2\">
  1119. <div class=\"relative\">
  1120. <h5>Salle de bain</h5>
  1121. <div class=\"d-flex justify-content-start align-items-center\" style=\"padding-top:4px;\">
  1122. <img src=\"/images/bathroom.png\" width=\"40\" class=\"me-3\" alt=\"\">
  1123. <div class=\"fs-20 fw-600\" style=\"color:#212121;\">2</div>
  1124. </div>
  1125. </div>
  1126. </div>
  1127. <div class=\"col-md-2\">
  1128. <div class=\"relative\">
  1129. <h5>Personnes</h5>
  1130. <div class=\"d-flex justify-content-start align-items-center\" style=\"padding-top:5px;\">
  1131. <img src=\"/images/user.png\" width=\"37\" class=\"me-3\" alt=\"\">
  1132. <div class=\"fs-20 fw-600\" style=\"color:#212121;\">8</div>
  1133. </div>
  1134. </div>
  1135. </div>
  1136. </div>
  1137. </div>
  1138. </section>
  1139. <section id=\"rooms\" class=\"p-0 overflow-hidden\">
  1140. <div class=\"container-fluid\">
  1141. <div class=\"row\">
  1142. <div class=\"col-lg-12\">
  1143. <div class=\"owl-custom-nav menu-float\" data-target=\"#room-carousel\">
  1144. <a class=\"btn-next\"></a>
  1145. <a class=\"btn-prev\"></a>
  1146. <div id=\"room-carousel\" class=\"owl-2-cols-center owl-carousel owl-theme\">
  1147. <div class=\"item\">
  1148. <div class=\"relative\">
  1149. <div class=\"overflow-hidden text-light\">
  1150. <div class=\"abs h-100 start-0 z-2 p-4\">
  1151. <h3 style=\"color:white;\">Salon</h3>
  1152. </div>
  1153. <img src=\"/images/salon2.jpeg\" class=\"w-100\" alt=\"Salon\">
  1154. </div>
  1155. </div>
  1156. </div>
  1157. <div class=\"item\">
  1158. <div class=\"relative\">
  1159. <div class=\"overflow-hidden text-light\">
  1160. <div class=\"abs h-100 start-1 z-2 p-4\">
  1161. <h3 style=\"color:white;\">Chambre 1</h3>
  1162. </div>
  1163. <img src=\"/images/chambre1.jpeg\" class=\"w-100\" alt=\"Chambre 1\">
  1164. </div>
  1165. </div>
  1166. </div>
  1167. <div class=\"item\">
  1168. <div class=\"relative\">
  1169. <div class=\"overflow-hidden text-light\">
  1170. <div class=\"abs h-100 start-2 z-2 p-4\">
  1171. <h3 style=\"color:white;\">Chambre 2</h3>
  1172. </div>
  1173. <img src=\"/images/chambre2.jpeg\" class=\"w-100\" alt=\"Chambre 2\">
  1174. </div>
  1175. </div>
  1176. </div>
  1177. <div class=\"item\">
  1178. <div class=\"relative\">
  1179. <div class=\"overflow-hidden text-light\">
  1180. <div class=\"abs h-100 start-3 z-2 p-4\">
  1181. <h3 style=\"color:white;\">Chambre 3</h3>
  1182. </div>
  1183. <img src=\"/images/chambre3.jpeg\" class=\"w-100\" alt=\"Chambre 3\">
  1184. </div>
  1185. </div>
  1186. </div>
  1187. <div class=\"item\">
  1188. <div class=\"relative\">
  1189. <div class=\"overflow-hidden text-light\">
  1190. <div class=\"abs h-100 start-4 z-2 p-4\">
  1191. <h3 style=\"color:white;\">Cuisine</h3>
  1192. </div>
  1193. <img src=\"/images/cuisine.jpeg\" class=\"w-100\" alt=\"Cuisine\">
  1194. </div>
  1195. </div>
  1196. </div>
  1197. <div class=\"item\">
  1198. <div class=\"relative\">
  1199. <div class=\"overflow-hidden text-light\">
  1200. <div class=\"abs h-100 start-5 z-2 p-4\">
  1201. <h3 style=\"color:white;\">Salle de bain</h3>
  1202. </div>
  1203. <img src=\"/images/salledebain.jpeg\" class=\"w-100\" alt=\"Salle de bain 1\">
  1204. </div>
  1205. </div>
  1206. </div>
  1207. <div class=\"item\">
  1208. <div class=\"relative\">
  1209. <div class=\"overflow-hidden text-light\">
  1210. <div class=\"abs h-100 start-6 z-2 p-4\">
  1211. <h3 style=\"color:white;\">Salle de bain 2</h3>
  1212. </div>
  1213. <img src=\"/images/salledebain2.jpeg\" class=\"w-100\" alt=\"Salle de bain 2\">
  1214. </div>
  1215. </div>
  1216. </div>
  1217. </div>
  1218. </div>
  1219. </div>
  1220. </div>
  1221. </div>
  1222. </section>
  1223. <section id=\"services\" class=\"overlay-dark-1\">
  1224. <div class=\"container\">
  1225. <div class=\"row g-4 justify-content-between\">
  1226. <div class=\"col-lg-5 relative z-3\">
  1227. <div class=\"me-lg-3\">
  1228. <div class=\"subtitle wow fadeInUp\" data-wow-delay=\".0s\">Votre séjour à Strasbourg</div>
  1229. <h2 class=\"wow fadeInUp\" data-wow-delay=\".2s\">Tarifs et services</h2>
  1230. <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>
  1231. <p style=\"color:#212121; font-size:18px;\">Réservation minimum deux nuits.</p>
  1232. <a href=\"#reservation\" class=\"btn-main\" style=\"color:white;\">Réservation</a>
  1233. </div>
  1234. </div>
  1235. <div class=\"col-lg-6\" style=\"color:black;\">
  1236. <div class=\"spacer-single spacer-double\"></div>
  1237. <div class=\"row\">
  1238. <div class=\"col-md-6 wow fadeInUp\" data-wow-delay=\".2s\">
  1239. {#
  1240. <h5 class=\" mb-3\">Haute saison</h5>
  1241. <p class=\"fs-500\"><small>Du 1er juin au 30 septembre • 25 novembre au 05 janvier</small></p>
  1242. <ul class=\"ul-check fs-500\">
  1243. <li>960 € la nuit</li>
  1244. <li>10% de remise à partir de 7 nuits</li>
  1245. </ul>
  1246. <h5 class=\"mb-3 mt-4\">Hors Saison</h5>
  1247. #}
  1248. <ul class=\"ul-check fs-500\">
  1249. <li>2 personnes : 350 € la nuit</li>
  1250. <li>4 personnes : 690 € la nuit</li>
  1251. <li>à partir de 6 personnes : 890 € la nuit</li>
  1252. <li>10% de remise à partir de 7 nuits</li>
  1253. </ul>
  1254. </div>
  1255. <div class=\"col-md-6 wow fadeInUp\" data-wow-delay=\".4s\">
  1256. <h5 class=\"mb-3\">Services optionnels</h5>
  1257. <ul class=\"ul-check fs-500\">
  1258. <li>Une place de parking : 24 €/jour ou 150 €/semaine</li>
  1259. <li>Ménage supplémentaire durant votre séjour : 60 euros</li>
  1260. <li>Apéro alsacien : sur commande</li>
  1261. <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>
  1262. </ul>
  1263. <div class=\"mt-4\">
  1264. <p class=\"fs-500\"><strong>Conciergerie sur place</strong><br>
  1265. <small>Mardi au samedi • 10h-18h45 <br /> Conciergerie privée sur demande selon disponibilité <br /> Sur devis (Correspond à 10% de la réservation)</small>
  1266. </p>
  1267. </div>
  1268. </div>
  1269. </div>
  1270. </div>
  1271. </div>
  1272. </div>
  1273. </section>
  1274. <section id=\"section-gallery\" class=\"relative\">
  1275. <div class=\"container relative z-2\" id=\"photos\">
  1276. <div class=\"row g-4 gx-5 justify-content-center\">
  1277. <div class=\"col-lg-6 text-center\">
  1278. <h2 class=\"wow fadeInUp\" data-wow-delay=\".2s\">Galerie de l'Appartement</h2>
  1279. <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>
  1280. </div>
  1281. </div>
  1282. <div class=\"row\">
  1283. <div class=\"col-md-12 text-center\">
  1284. <ul id=\"filters\" class=\"wow fadeInUp\" data-wow-delay=\"0s\">
  1285. <li><a href=\"#\" data-filter=\"*\" class=\"selected\" style=\"color:#212121;\">Tout afficher</a></li>
  1286. <li><a href=\"#\" data-filter=\".chambre\" style=\"color:#212121;\">Chambres</a></li>
  1287. <li><a href=\"#\" data-filter=\".salon\" style=\"color:#212121;\">Salon</a></li>
  1288. <li><a href=\"#\" data-filter=\".cuisine\" style=\"color:#212121;\">Cuisine</a></li>
  1289. <li><a href=\"#\" data-filter=\".salledebain\" style=\"color:#212121;\">Salle de bain</a></li>
  1290. <li><a href=\"#\" data-filter=\".exterieur\" style=\"color:#212121;\">Extérieur</a></li>
  1291. </ul>
  1292. </div>
  1293. </div>
  1294. <div id=\"gallery\" class=\"row g-3 wow fadeInUp\" data-wow-delay=\".3s\">
  1295. <!-- Chambres -->
  1296. <div class=\"col-md-3 col-sm-6 col-12 item chambre\">
  1297. <a href=\"images/chambre1.jpeg\" class=\"image-popup d-block hover\">
  1298. <div class=\"relative overflow-hidden\">
  1299. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  1300. Voir
  1301. </div>
  1302. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  1303. <img src=\"images/chambre1.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Chambre\">
  1304. </div>
  1305. </a>
  1306. </div>
  1307. <div class=\"col-md-3 col-sm-6 col-12 item chambre\">
  1308. <a href=\"images/chambre2.jpeg\" class=\"image-popup d-block hover\">
  1309. <div class=\"relative overflow-hidden\">
  1310. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  1311. Voir
  1312. </div>
  1313. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  1314. <img src=\"images/chambre2.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Chambre 2\">
  1315. </div>
  1316. </a>
  1317. </div>
  1318. <div class=\"col-md-3 col-sm-6 col-12 item chambre\">
  1319. <a href=\"images/chambre3.jpeg\" class=\"image-popup d-block hover\">
  1320. <div class=\"relative overflow-hidden\">
  1321. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  1322. Voir
  1323. </div>
  1324. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  1325. <img src=\"images/chambre3.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Chambre 3\">
  1326. </div>
  1327. </a>
  1328. </div>
  1329. <!-- Salon -->
  1330. <div class=\"col-md-3 col-sm-6 col-12 item salon\">
  1331. <a href=\"images/salon.jpeg\" class=\"image-popup d-block hover\">
  1332. <div class=\"relative overflow-hidden\">
  1333. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  1334. Voir
  1335. </div>
  1336. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  1337. <img src=\"images/salon.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salon\">
  1338. </div>
  1339. </a>
  1340. </div>
  1341. <div class=\"col-md-3 col-sm-6 col-12 item salon\">
  1342. <a href=\"images/salon2.jpeg\" class=\"image-popup d-block hover\">
  1343. <div class=\"relative overflow-hidden\">
  1344. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  1345. Voir
  1346. </div>
  1347. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  1348. <img src=\"images/salon2.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salon 2\">
  1349. </div>
  1350. </a>
  1351. </div>
  1352. <div class=\"col-md-3 col-sm-6 col-12 item salon\">
  1353. <a href=\"images/salon3.jpeg\" class=\"image-popup d-block hover\">
  1354. <div class=\"relative overflow-hidden\">
  1355. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  1356. Voir
  1357. </div>
  1358. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  1359. <img src=\"images/salon3.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salon 3\">
  1360. </div>
  1361. </a>
  1362. </div>
  1363. <div class=\"col-md-3 col-sm-6 col-12 item salon\">
  1364. <a href=\"images/salon4.jpeg\" class=\"image-popup d-block hover\">
  1365. <div class=\"relative overflow-hidden\">
  1366. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  1367. Voir
  1368. </div>
  1369. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  1370. <img src=\"images/salon4.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salon 4\">
  1371. </div>
  1372. </a>
  1373. </div>
  1374. <div class=\"col-md-3 col-sm-6 col-12 item salon\">
  1375. <a href=\"images/salon5.jpeg\" class=\"image-popup d-block hover\">
  1376. <div class=\"relative overflow-hidden\">
  1377. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  1378. Voir
  1379. </div>
  1380. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  1381. <img src=\"images/salon5.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salon 5\">
  1382. </div>
  1383. </a>
  1384. </div>
  1385. <!-- Cuisine -->
  1386. <div class=\"col-md-3 col-sm-6 col-12 item cuisine\">
  1387. <a href=\"images/cuisine.jpeg\" class=\"image-popup d-block hover\">
  1388. <div class=\"relative overflow-hidden\">
  1389. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  1390. Voir
  1391. </div>
  1392. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  1393. <img src=\"images/cuisine.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Cuisine\">
  1394. </div>
  1395. </a>
  1396. </div>
  1397. <!-- Salle de bain -->
  1398. <div class=\"col-md-3 col-sm-6 col-12 item salledebain\">
  1399. <a href=\"images/salledebain.jpeg\" class=\"image-popup d-block hover\">
  1400. <div class=\"relative overflow-hidden\">
  1401. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  1402. Voir
  1403. </div>
  1404. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  1405. <img src=\"images/salledebain.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salle de bain\">
  1406. </div>
  1407. </a>
  1408. </div>
  1409. <div class=\"col-md-3 col-sm-6 col-12 item salledebain\">
  1410. <a href=\"images/salledebain2.jpeg\" class=\"image-popup d-block hover\">
  1411. <div class=\"relative overflow-hidden\">
  1412. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  1413. Voir
  1414. </div>
  1415. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  1416. <img src=\"images/salledebain2.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Salle de bain 2\">
  1417. </div>
  1418. </a>
  1419. </div>
  1420. <!-- Extérieur -->
  1421. <div class=\"col-md-3 col-sm-6 col-12 item exterieur\">
  1422. <a href=\"images/exterieur.jpeg\" class=\"image-popup d-block hover\">
  1423. <div class=\"relative overflow-hidden\">
  1424. <div class=\"absolute start-0 w-100 hover-op-1 p-5 abs-middle z-2 text-center text-white z-3\">
  1425. Voir
  1426. </div>
  1427. <div class=\"absolute start-0 w-100 h-100 overlay-dark-7 hover-op-1 z-2\"></div>
  1428. <img src=\"images/exterieur.jpeg\" class=\"w-100 hover-scale-1-2\" alt=\"Extérieur\">
  1429. </div>
  1430. </a>
  1431. </div>
  1432. </div>
  1433. </div>
  1434. </section>
  1435. <section id=\"reservation\" class=\"text-light\">
  1436. <div class=\"container\">
  1437. <div class=\"row g-4 justify-content-center\">
  1438. <div class=\"col-lg-6 text-center\">
  1439. <h2 class=\"wow fadeInUp\" data-wow-delay=\".2s\">Réservez votre séjour</h2>
  1440. </div>
  1441. </div>
  1442. <div class=\"row g-4 justify-content-center\">
  1443. <div class=\"col-md-6\">
  1444. {{ form_start(form) }}
  1445. <div class=\"row g-4\">
  1446. <div class=\"col-md-12\">
  1447. <div class=\"calendar-container\" style=\"height:300px;\">
  1448. <input type=\"text\" id=\"date_range_picker\">
  1449. </div>
  1450. </div>
  1451. <div class=\"col-md-3\">
  1452. <label style=\"color:#212121;\">Voyageurs</label>
  1453. {{ form_widget(form.persons) }}
  1454. </div>
  1455. <div class=\"col-md-3\">
  1456. <label style=\"color:#212121;\">Arrivée</label> <br />
  1457. </strong> <span id=\"info-start\" style=\"color:#212121;\">-</span>
  1458. </div>
  1459. <div class=\"col-md-3\">
  1460. <label style=\"color:#212121;\">Départ</label> <br />
  1461. <span id=\"info-end\" style=\"color:#212121;\">-</span>
  1462. </div>
  1463. <div class=\"col-md-3\">
  1464. <label style=\"color:#212121;\">Nuits</label> <br />
  1465. <span id=\"info-nights\" style=\"color:#212121;\">-</span>
  1466. </div>
  1467. <div class=\"col-md-12\" style=\"font-size:20px;\">
  1468. <div id=\"results\"></div>
  1469. </div>
  1470. <div class=\"col-md-6\">
  1471. <label style=\"color:#212121;\">Nom</label>
  1472. {{ form_widget(form.lastname) }}
  1473. </div>
  1474. <div class=\"col-md-6\">
  1475. <label style=\"color:#212121;\">Prénom</label>
  1476. {{ form_widget(form.name) }}
  1477. </div>
  1478. <div class=\"col-md-12\">
  1479. <label style=\"color:#212121;\">Email</label>
  1480. {{ form_widget(form.email) }}
  1481. </div>
  1482. <div class=\"col-md-12\">
  1483. <label style=\"color:#212121;\">Message</label>
  1484. {{ form_widget(form.message) }}
  1485. </div>
  1486. <div class=\"col-md-12\">
  1487. <div class=\"text-center\" style=\"color:#212121;\">
  1488. <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>
  1489. </div>
  1490. </div>
  1491. <div class=\"col-md-12\">
  1492. <div class=\"text-center\">
  1493. <button type=\"submit\" name=\"submit\" value=\"1\" class=\"btn-main\" style=\"color:white;\">Confirmer la réservation</button>
  1494. </div>
  1495. </div>
  1496. </div>
  1497. {{ form_widget(form.start) }}
  1498. {{ form_widget(form.end) }}
  1499. {{ form_rest(form) }}
  1500. {{ form_end(form) }}
  1501. </div>
  1502. </div>
  1503. </div>
  1504. </section>
  1505. <section id=\"faq\" class=\"text-light\">
  1506. <div class=\"container\">
  1507. <div class=\"row g-4 justify-content-center\">
  1508. <div class=\"col-lg-6 text-center\">
  1509. <h2 class=\"wow fadeInUp\" data-wow-delay=\".2s\">FAQ</h2>
  1510. </div>
  1511. </div>
  1512. <div class=\"row g-4 justify-content-center\">
  1513. <div class=\"col-lg-6 text-left\" style=\"color:black !important;\">
  1514. <h3 style=\"margin-top:7px;\">Comment réserver le logement ?</h3>
  1515. <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>
  1516. <h3 style=\"margin-top:7px;\">Quels sont les horaires d’arrivée et de départ ?</h3>
  1517. <ul>
  1518. <li>Arrivée : à partir de 15h</li>
  1519. <li>Départ : avant 11h</li>
  1520. </ul>
  1521. <h3 style=\"margin-top:7px;\">Le logement est-il entièrement équipé ?</h3>
  1522. <div>Oui, le logement est entièrement meublé et équipé : cuisine, literie, serviettes, électroménager, Wi-Fi,…</div>
  1523. <h3 style=\"margin-top:7px;\">Y a-t-il un parking disponible ?</h3>
  1524. <div>Oui, un parking privatif est possible en option au prix de 24 euros les 24h ou 150 euros la semaine (7 nuits).</div>
  1525. <h3 style=\"margin-top:7px;\">Le logement est-il adapté aux enfants ?</h3>
  1526. <div>Oui, nous proposons certains équipements pour enfants (lit bébé, chaise haute, vaisselle adaptée) sur demande.</div>
  1527. <h3 style=\"margin-top:7px;\">Les animaux sont-ils acceptés ?</h3>
  1528. <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>
  1529. <h3 style=\"margin-top:7px;\">Puis-je annuler ou modifier ma réservation ?</h3>
  1530. <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>
  1531. <h3 style=\"margin-top:7px;\">Le logement est-il accessible en transport public ?</h3>
  1532. <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>
  1533. <h3 style=\"margin-top:7px;\">Y a-t-il des commerces ou restaurants à proximité ?</h3>
  1534. <div>Oui, vous trouverez supermarchés, cafés, restaurants et activités touristiques au pied de l’immeuble.</div>
  1535. <h3 style=\"margin-top:7px;\">Que faire en cas de problème pendant le séjour ?</h3>
  1536. <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>
  1537. </div>
  1538. </div>
  1539. </div>
  1540. </section>
  1541. {% endblock body %}
  1542. {% block footerjs %}
  1543. <script src=\"https://cdn.jsdelivr.net/npm/flatpickr\"></script>
  1544. <script src=\"https://cdn.jsdelivr.net/npm/flatpickr/dist/l10n/fr.js\"></script>
  1545. <script>
  1546. function updateSimulation() {
  1547. var start = \$(\"#reservation_form_start\").val();
  1548. var end = \$(\"#reservation_form_end\").val();
  1549. var persons = \$(\"#reservation_form_persons\").val();
  1550. if (start && end && persons) {
  1551. \$(\"#results\").html('<div class=\"loading\">Calcul en cours...</div>');
  1552. \$.post(
  1553. Routing.generate('locale_simulation_pricing',{'_locale':'fr'}),
  1554. {'start': start, 'end': end, 'persons': persons}
  1555. )
  1556. .done(function(data) {
  1557. \$(\"#results\").html(data);
  1558. })
  1559. .fail(function() {
  1560. \$(\"#results\").html('<div class=\"error\">Erreur</div>');
  1561. });
  1562. } else {
  1563. \$(\"#results\").html('');
  1564. }
  1565. }
  1566. // Écoute les changements sur le nombre de personnes
  1567. \$(\"#reservation_form_persons\").change(updateSimulation);
  1568. \$(document).ready(function() {
  1569. // Désactive le bouton au chargement de la page
  1570. \$('button[type=\"submit\"]').prop('disabled', true);
  1571. // Écoute les changements sur la checkbox
  1572. \$('#acceptCGV').change(function() {
  1573. if(\$(this).is(':checked')) {
  1574. \$('button[type=\"submit\"]').prop('disabled', false);
  1575. } else {
  1576. \$('button[type=\"submit\"]').prop('disabled', true);
  1577. }
  1578. });
  1579. });
  1580. </script>
  1581. <script>
  1582. \$(document).ready(function() {
  1583. let bookedRanges = [];
  1584. \$.ajax({
  1585. url: '{{ env('WEBHOOK_CALENDAR_AVAILABILITY') }}',
  1586. method: 'POST',
  1587. contentType: 'application/json',
  1588. data: ''
  1589. })
  1590. .done(function(data) {
  1591. bookedRanges = data.bookings || [];
  1592. console.log('✅ Créneaux chargés:', bookedRanges);
  1593. initDatePicker();
  1594. })
  1595. .fail(function(error) {
  1596. console.error('❌ Erreur:', error);
  1597. initDatePicker();
  1598. });
  1599. // 🔧 FONCTION POUR CRÉER UNE DATE LOCALE SANS DÉCALAGE UTC
  1600. function parseLocalDate(dateStr) {
  1601. const [year, month, day] = dateStr.split('-').map(Number);
  1602. return new Date(year, month - 1, day);
  1603. }
  1604. const isMobile = window.innerWidth <= 900;
  1605. function initDatePicker() {
  1606. flatpickr(\"#date_range_picker\", {
  1607. inline: true,
  1608. mode: \"range\",
  1609. locale: \"fr\",
  1610. minDate: new Date(new Date().setDate(new Date().getDate() + 1)),
  1611. dateFormat: \"Y-m-d\",
  1612. showMonths: isMobile ? 1 : 2,
  1613. disable: [
  1614. function(date) {
  1615. const checkDate = new Date(date);
  1616. checkDate.setHours(0, 0, 0, 0);
  1617. return bookedRanges.some(range => {
  1618. const start = parseLocalDate(range.start_date);
  1619. const end = parseLocalDate(range.end_date);
  1620. return checkDate >= start && checkDate <= end;
  1621. });
  1622. }
  1623. ],
  1624. onChange: function(selectedDates, dateStr, instance) {
  1625. console.log('📅 Dates sélectionnées:', selectedDates.length);
  1626. if (selectedDates.length === 2) {
  1627. const start = selectedDates[0];
  1628. const end = selectedDates[1];
  1629. if (isRangeAvailable(start, end)) {
  1630. // ✅ Met à jour avec jQuery ET déclenche l'événement change
  1631. \$('#reservation_form_start').val(formatDate(start)).trigger('change');
  1632. \$('#reservation_form_end').val(formatDate(end)).trigger('change');
  1633. console.log('✅ Champs mis à jour:',
  1634. \$('#reservation_form_start').val(),
  1635. '→',
  1636. \$('#reservation_form_end').val()
  1637. );
  1638. updateSelectedInfo(start, end);
  1639. // ✅ Force la simulation
  1640. updateSimulation();
  1641. } else {
  1642. alert('⚠️ Cette période contient des dates déjà réservées.\\nVeuillez choisir une autre période.');
  1643. instance.clear();
  1644. clearSymfonyFields();
  1645. hideSelectedInfo();
  1646. \$(\"#results\").html('');
  1647. }
  1648. } else {
  1649. clearSymfonyFields();
  1650. hideSelectedInfo();
  1651. \$(\"#results\").html('');
  1652. }
  1653. },
  1654. onDayCreate: function(dObj, dStr, fp, dayElem) {
  1655. const date = new Date(dayElem.dateObj);
  1656. date.setHours(0, 0, 0, 0);
  1657. const isBooked = bookedRanges.some(range => {
  1658. const start = parseLocalDate(range.start_date);
  1659. const end = parseLocalDate(range.end_date);
  1660. return date >= start && date <= end;
  1661. });
  1662. if (isBooked) {
  1663. dayElem.classList.add('booked');
  1664. dayElem.title = 'Date indisponible (réservée)';
  1665. } else if (date >= new Date()) {
  1666. dayElem.classList.add('available');
  1667. dayElem.title = 'Date disponible';
  1668. }
  1669. }
  1670. });
  1671. }
  1672. function isRangeAvailable(startDate, endDate) {
  1673. let currentDate = new Date(startDate);
  1674. currentDate.setHours(0, 0, 0, 0);
  1675. const endCheck = new Date(endDate);
  1676. endCheck.setHours(0, 0, 0, 0);
  1677. while (currentDate <= endCheck) {
  1678. const isBooked = bookedRanges.some(range => {
  1679. const start = parseLocalDate(range.start_date);
  1680. const end = parseLocalDate(range.end_date);
  1681. return currentDate >= start && currentDate <= end;
  1682. });
  1683. if (isBooked) return false;
  1684. currentDate.setDate(currentDate.getDate() + 1);
  1685. }
  1686. return true;
  1687. }
  1688. function updateSelectedInfo(start, end) {
  1689. const nights = Math.ceil((end - start) / (1000 * 60 * 60 * 24));
  1690. \$('#info-start').text(start.toLocaleDateString('fr-FR'));
  1691. \$('#info-end').text(end.toLocaleDateString('fr-FR'));
  1692. \$('#info-nights').text(`\${nights} nuit\${nights > 1 ? 's' : ''}`);
  1693. \$('#selected-dates-info').addClass('active');
  1694. }
  1695. function hideSelectedInfo() {
  1696. \$('#selected-dates-info').removeClass('active');
  1697. }
  1698. function clearSymfonyFields() {
  1699. \$('#reservation_form_start').val('');
  1700. \$('#reservation_form_end').val('');
  1701. }
  1702. function formatDate(date) {
  1703. const year = date.getFullYear();
  1704. const month = String(date.getMonth() + 1).padStart(2, '0');
  1705. const day = String(date.getDate()).padStart(2, '0');
  1706. return `\${year}-\${month}-\${day}`;
  1707. }
  1708. });
  1709. </script>
  1710. {% endblock footerjs %}
  1711. {% block css %}
  1712. <link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css\">
  1713. <style>
  1714. .calendar-container {
  1715. margin: 20px 0;
  1716. width: 100%;
  1717. overflow: hidden;
  1718. }
  1719. /* Calendrier inline (toujours visible) */
  1720. #date_range_picker {
  1721. display: none; /* Le champ input est caché, on affiche juste le calendrier */
  1722. }
  1723. .flatpickr-calendar.inline {
  1724. margin: 0 auto;
  1725. box-shadow: 0 4px 12px rgba(0,0,0,0.15);
  1726. border-radius: 8px;
  1727. max-width: 100%;
  1728. }
  1729. .flatpickr-day.booked {
  1730. background-color: #ff4444 !important;
  1731. color: white !important;
  1732. cursor: not-allowed !important;
  1733. position: relative;
  1734. }
  1735. .flatpickr-day.booked::after {
  1736. content: \"✕\";
  1737. position: absolute;
  1738. top: 50%;
  1739. left: 50%;
  1740. transform: translate(-50%, -50%);
  1741. font-size: 20px;
  1742. font-weight: bold;
  1743. }
  1744. .flatpickr-day.booked:hover {
  1745. background-color: #ff0000 !important;
  1746. }
  1747. .flatpickr-day.available:hover {
  1748. background-color: #28a745;
  1749. color: white;
  1750. }
  1751. /* Adaptations Mobile */
  1752. @media (max-width: 768px) {
  1753. .calendar-container {
  1754. margin: 10px 0;
  1755. padding: 0 10px;
  1756. }
  1757. .flatpickr-calendar.inline {
  1758. width: 100% !important;
  1759. max-width: 100% !important;
  1760. }
  1761. .flatpickr-months {
  1762. padding: 8px 10px;
  1763. }
  1764. .flatpickr-days {
  1765. width: 100% !important;
  1766. }
  1767. .dayContainer {
  1768. width: 100% !important;
  1769. min-width: 100% !important;
  1770. max-width: 100% !important;
  1771. }
  1772. .flatpickr-day {
  1773. height: 40px !important;
  1774. line-height: 40px !important;
  1775. flex-basis: 14.2857% !important;
  1776. max-width: 14.2857% !important;
  1777. }
  1778. }
  1779. </style>
  1780. {% endblock css %}", "vitrine/fr/homepage.html.twig", "/var/www/vhosts/mirtillostudio.com/ch.mirtillostudio.com/templates/vitrine/fr/homepage.html.twig");
  1781. }
  1782. }