{% extends 'vitrine/en/layout.html.twig' %}{% block title %}Cathedral Heritage Suite - 8-Guest Rental Strasbourg Center{% endblock title %}{% block description %}Rent our 83m² suite in the heart of Strasbourg. 3 bedrooms, sleeps 8, 100m from Cathedral. Kitchen fully furnished, 2 bathrooms. Book your stay today!{% endblock description %}{% block robots %}index,follow{% endblock robots %}{% block canonical %}<link rel="canonical" href="https://cathedraleheritage.com" /><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;">Welcome to Cathedral Heritage Suite</h1><p class="lead mb-3" style="color:white; font-size:22px;">Beautifully appointed apartment accommodating up to 8 guests in Strasbourg’s prestigious historical city center</p><a class="btn-main btn-line bg-blur fx-slide" href="#about" style="color:white;"><span>Find out more</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;">Cathedral 100m away</h6></div><div><h6 style="color:white;">Museums 200m away</h6></div><div><h6 style="color:white;">Petite France 300m away</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">About the apartment</div><h2>Modern suite in the heart of Strasbourg's Grande Île</h2></div><div class="col-lg-4"><p class="mb-4" style="color:#212121;">Spacious fully equipped appartement ideal for families and groups up to 8 people : 1 master bedroom with en-suite bathroom, one double bedroom, one bedroom with two double bunk beds (sleeps 4), maximum weight of 100kg for upper bunks.</p><p class="mb-4" style="color:#212121;">Kitchen fully furnished and cozy living-dining room to share great moments together.</p><p class="mb-4" style="color:#212121;">Amenities: hairdryer, dishwasher, washer-dryer, microwave, oven, ironing board with iron, Nespresso coffee machine, kettle, TV, Wi-Fi and USB outlets for charging your devices.</p></div></div><div class="spacer-single"></div><div class="row g-4"><div class="col-md-2"><div class="relative"><h5>Size</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>Bedrooms</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>Living Room</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;">Included</div></div></div></div><div class="col-md-2"><div class="relative"><h5>Kitchen</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;">Included</div></div></div></div><div class="col-md-2"><div class="relative"><h5>Bathrooms</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>Guests</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;">Living Room</h3></div><img src="/images/salon2.jpeg" class="w-100" alt="Living Room"></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;">Bedroom 1</h3></div><img src="/images/chambre1.jpeg" class="w-100" alt="Bedroom 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;">Bedroom 2</h3></div><img src="/images/chambre2.jpeg" class="w-100" alt="Bedroom 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;">Bedroom 3</h3></div><img src="/images/chambre3.jpeg" class="w-100" alt="Bedroom 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;">Kitchen</h3></div><img src="/images/cuisine.jpeg" class="w-100" alt="Kitchen"></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;">Bathroom</h3></div><img src="/images/salledebain.jpeg" class="w-100" alt="Bathroom 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;">Bathroom 2</h3></div><img src="/images/salledebain2.jpeg" class="w-100" alt="Bathroom 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">Your stay in Strasbourg</div><h2 class="wow fadeInUp" data-wow-delay=".2s">Rates and services</h2><p style="color:#212121; font-size:18px;">An exceptional suite in the heart of Strasbourg, with optionnal dedicated concierge service to assist you throughout your stay.</p><p style="color:#212121; font-size:18px;">Minimum booking of two nights.</p><a href="#reservation" class="btn-main" style="color:white;">Booking</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">Peak Season</h5><p class="fs-500"><small>June 1st to September 30th • November 25th to January 5th</small></p><ul class="ul-check fs-500"><li>€960 per night</li><li>10% discount for bookings of 7 nights and up</li></ul><h5 class="mb-3 mt-4">Off-peak Season</h5>#}<ul class="ul-check fs-500"><li>2 guests: €350 per night</li><li>4 guests: €690 per night</li><li>from 6 guests and up: €890 per night</li><li>10% discount for bookings of 7 nights and up</li></ul></div><div class="col-md-6 wow fadeInUp" data-wow-delay=".4s"><h5 class="mb-3">Optional services</h5><ul class="ul-check fs-500"><li>One parking space: €24/day or €150/week</li><li>Extra cleaning during your stay : 60 euros</li><li>Other Extras : Children's workshop, baby amenities, dog policy on request (other pets are unfortunately not allowed in the appartement), Decoration for special occasions, breakfast, Alsatian delicacies, etc</li></ul><div class="mt-4"><p class="fs-500"><strong>On site assistance</strong> <br /><small>Tuesday to Saturday • 10am-6:45pm</small></p><p class="fs-500"><strong>Private concierge subject to availability</strong><br><small>Quotation on request</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">Apartment Gallery</h2><p class="wow fadeInUp" data-wow-delay=".3s" style="color:#212121;">Explore our curated images to discover the residence’s various spaces — from the bedrooms and living area to the kitchen, bathroom, and outdoor surroundings.</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;">Show All</a></li><li><a href="#" data-filter=".chambre" style="color:#212121;">Bedrooms</a></li><li><a href="#" data-filter=".salon" style="color:#212121;">Living Room</a></li><li><a href="#" data-filter=".cuisine" style="color:#212121;">Kitchen</a></li><li><a href="#" data-filter=".salledebain" style="color:#212121;">Bathroom</a></li><li><a href="#" data-filter=".exterieur" style="color:#212121;">Outdoor surroundings</a></li></ul></div></div><div id="gallery" class="row g-3 wow fadeInUp" data-wow-delay=".3s"><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">View</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="Bedroom"></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">View</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="Bedroom 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">View</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="Bedroom 3"></div></a></div><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">View</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="Living Room"></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">View</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="Living Room 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">View</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="Living Room 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">View</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="Living Room 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">View</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="Living Room 5"></div></a></div><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">View</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="Kitchen"></div></a></div><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">View</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="Bathroom"></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">View</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="Bathroom 2"></div></a></div><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">View</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="Exterior"></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">Book your stay</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;">Guests</label>{{ form_widget(form.persons) }}</div><div class="col-md-3"><label style="color:#212121;">Arrival</label> <br /></strong> <span id="info-start" style="color:#212121;">-</span></div><div class="col-md-3"><label style="color:#212121;">Departure</label> <br /><span id="info-end" style="color:#212121;">-</span></div><div class="col-md-3"><label style="color:#212121;">Nights</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;">Last name</label>{{ form_widget(form.lastname) }}</div><div class="col-md-6"><label style="color:#212121;">First name</label>{{ form_widget(form.name) }}</div><div class="col-md-12"><label style="color:#212121;">Email address</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" /> I accept the <a href="/terms" target="_blank" style="text-decoration:underline; color:#212121;">terms and conditions of sale</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;">Send booking request</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;">How can I book the accommodation?</h3><div>You can book directly on our website and soon via partner platforms. Secure payment immediately confirms your reservation.</div><h3 style="margin-top:7px;">What are the check-in and check-out times?</h3><div><ul><li>Check-in: from 3:00 PM</li><li>Check-out: before 11:00 AM</li></ul></div><h3 style="margin-top:7px;">Is the accommodation fully equipped?</h3><div> Yes, the apartment is fully furnished and equipped: kitchen, bedding, towels, appliances, Wi-Fi, and more.</div><h3 style="margin-top:7px;">Is parking available?</h3><div>Yes, private parking is available as an option at €24 per 24 hours or €150 per week (7 nights).</div><h3 style="margin-top:7px;">Is the accommodation suitable for children?</h3><div>Yes, we offer some baby amenities (baby cot, high chair, child-friendly tableware) upon request.</div><h3 style="margin-top:7px;"> Are pets allowed?</h3><div> Please contact us before booking if you wish to bring a pet. Only dogs are accepted, and prior approval is required.</div><h3 style="margin-top:7px;">Can I cancel or modify my reservation?</h3><div>Yes, our cancellation policy is provided at the time of booking:<ul><li>85% refund if canceled more than 1 month before arrival</li><li>50% refund if canceled between 1 month and 15 days before arrival</li><li>No refund if canceled less than 15 days before arrival</li></ul></div><h3 style="margin-top:7px;">Is the accommodation accessible by public transport?</h3><div>Yes, major transport options are nearby. The tram station “Langstross, Grand’rue” is less than 100 meters from the apartment, and Strasbourg train station is a 10-minute walk.</div><h3 style="margin-top:7px;">Are there shops or restaurants nearby?</h3><div>Yes, you’ll find supermarkets, cafés, restaurants, and tourist activities right at the foot of the building.</div><h3 style="margin-top:7px;"> What should I do if there’s a problem during my stay?</h3><div> We are available 24/7 by email for emergencies or questions about the apartment. You can also call us from 9:00 AM to 8:00 PM at +33 7 61 05 82 43, and we are available on-site on the ground floor of the building from Tuesday to Saturday, 10:00 AM to 6:45 PM.</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/en.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">Calculating...</div>');$.post(Routing.generate('simulation_pricing'),{'start': start, 'end': end, 'persons': persons}).done(function(data) {$("#results").html(data);}).fail(function() {$("#results").html('<div class="error">Calculation error</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 UTCfunction 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 simulationupdateSimulation();} 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 %}