{% extends 'vitrine/base.html.twig' %}
{% import 'vitrine/macros/svg_illustration_macros.twig' as svg %}
{% block title "Réserver" %}
{% block description %}{% trans %}Réservez votre moment de détente{% endtrans %}{% endblock %}
{% block stylesheets %}
{{ parent() }}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css" />
{{ encore_entry_link_tags('tunnel') }}
{% endblock %}
{% block javascripts %}
{{ parent() }}
{{ encore_entry_script_tags('tunnel') }}
<script src="https://unpkg.com/swiper/swiper-bundle.min.js"></script>
<script type="text/javascript" src="https://api.payplug.com/js/1/form.latest.js"></script>
<script src="https://js.hcaptcha.com/1/api.js" async defer></script>
<script async defer src="https://api.mapbox.com/mapbox-assembly/v1.5.1/assembly.js"></script>
<script id="search-js" defer="" src="https://api.mapbox.com/search-js/v1.0.0-beta.21/web.js"></script>
<script>
const ACCESS_TOKEN = '{{ mapbox_access_token }}';
const COUNTRIES = '{{ mapbox_countries }}'.split(',');
const script = document.getElementById('search-js');
script.onload = () => {
const collection = mapboxsearch.autofill({
accessToken: ACCESS_TOKEN,
options: { COUNTRIES }
});
};
</script>
{% include 'form/components/js-translations.html.twig' %}
{% endblock %}
{% block main %}
<div id="background-override">
<video data-step="start" class="background-video" src="https://i.gyazo.com/d9d0bd5636691cfdf72d4db0a4132c09.mp4" muted playsinline autoplay loop></video>
<img data-step="second-step" class="background-image tunnel-hidden" src="https://i.gyazo.com/b7d32e07063d6a51fc24bfe3b70da6ca.jpg">
<img data-step="third-step" class="background-image tunnel-hidden" src="https://i.gyazo.com/84c7b90fc6ff6c31478eae19f38bd03d.jpg">
</div>
{% form_theme form 'form/theme_tunnel.html.twig' %}
{{ form_start(form, { 'attr': { 'class': 'to-submit w-full' }}) }}
<div class="not-animate-childs pt-32 justify-items-center">
<div id="progress-bar" class="progress-bar-container tunnel-hidden" style="{{ code is defined ? "display: none" : "" }}">
<p class="progress-bar-steps">
Étape <span id="step-count">1</span> sur 5
</p>
<div class="progress-bar">
<div class="progress-bar-fill"></div>
</div>
</div>
<section id="start" class="tunnel-hidden content-column-center-48">
<h2 class="title text-center mt-24 text-4xl">
La bulle {% trans %}(privatisation){% endtrans %}
</h2>
<p class="text-opacity-70 text-center">
{% trans %}Séduit par notre concept atypique ?<br><br>
Privatisez-le pour une expérience exclusive ! Que ce soit pour célébrer un anniversaire, un EVJ, ou simplement partager un moment spécial en famille, remplissez le formulaire ci-dessous. <br><br>
Nos équipes seront à vos côtés pour planifier soigneusement votre moment de détente inoubliable avec vos proches.{% endtrans %}
</p>
<div class="tunnel-footer m-auto">
{% include "tunnel/components/primary-button.html.twig" with {'action': 'nextStep', 'label': 'Commencer' } %}
</div>
</section>
<section id="first-step" class="tunnel-hidden ">
<div class="content-column-center-48 ">
<div class="content-column-8-center">
<h2 class="title text-center">
{% trans %}Combien serez-vous ?{% endtrans %}
</h2>
<p class="text-opacity-70 text-center">
{% trans %}En fonction du nombre de participants, notre parcours en 3 étapes s'adapte à vos besoins :<br><br>{% endtrans %}
{% trans %}Avec 4 baignoires duo dans le même espace, 4 à 8 participants, suivez le parcours classique : sauna, bain de bière, relaxation.<br><br>{% endtrans %}
{% trans %}Pour des groupes de plus de 8, le parcours alterne entre les membres, offrant à chacun un confort optimal.{% endtrans %}
{% trans %}Pendant qu'un groupe profite du sauna, l'autre déguste une bière en toute détente.{% endtrans %}
{% trans %}Les espaces sont entièrement dédiés, permettant à tous de savourer chaque étape à leur rythme. <br><br>{% endtrans %}
{% trans %}Transformez votre expérience en la personnalisant davantage. Optez pour des planchettes de dégustation ou ajoutez une touche spécial avec une décoration adaptée à votre événement. Partagez vos souhaits en remplissant les étapes suivantes, nous vous garantissons une réponse dans les 24 heures.{% endtrans %}
</p>
</div>
<div class="my-6">
{{ form_widget(form.nbParticipants) }}
</div>
<div class="tunnel-footer">
{# <div class="infoContainer w-full text-center" style="display: none">#}
{# <p class="stepInfo">#}
{# </p>#}
{# </div>#}
{% include "tunnel/components/primary-button.html.twig" with {'action': 'nextStep', 'label': 'Suivant' } %}
{# {% include "tunnel/components/secondary-button.html.twig" with {'action': 'goToPrivatisation', 'label': "Privatiser le spa"} %}#}
</div>
</div>
</section>
<section id="second-step" class="tunnel-hidden">
<div class="content-column-center-48">
<h2 class="title text-center">
{% trans %}Pour quelle durée souhaitez-vous privatiser le spa ?{% endtrans %}
</h2>
<div class="w-full">
{{ form_widget(form.offer) }}
</div>
<div class="tunnel-footer">
<div class="totalContainer w-full flex-between" style="display: none">
<p class="small-text-opacity-70">
{% trans %}Total pour{% endtrans %} <span class="totalPerson">1</span> {% trans %}personne(s){% endtrans %}
</p>
<p>
<b class="totalPrice"></b>
</p>
</div>
{% include "tunnel/components/primary-button.html.twig" with {'action': 'nextStep', 'label': 'Suivant' } %}
{% include "tunnel/components/secondary-button.html.twig" with {'action': 'previousStep', 'label': "Précédent" } %}
</div>
</div>
</section>
<section id="third-step" class="tunnel-hidden">
<div class="content-column-center-48 ">
<div class="content-column-8">
<h2 class="title text-center">
{% trans %}Un petit plaisir à ajouter ?{% endtrans %}
</h2>
</div>
<div class="extra-container max-w-400">
{{ form_row(form.extraReservations) }}
</div>
<div class="tunnel-footer">
<div class="totalDifferencePriceContainer w-full flex-between" style="display: none">
<p class="small-text-opacity-70">
{% trans %}Supplément à régler{% endtrans %}
</p>
<p>
<b>+</b><b class="totalDifferencePrice"></b>
</p>
</div>
<div class="totalContainer w-full flex-between" style="display: none">
<p class="small-text-opacity-70">
{% trans %}Total pour{% endtrans %} <span class="totalPerson">1</span> {% trans %}personne(s){% endtrans %}
</p>
<p>
<b class="totalPrice"></b>
</p>
</div>
{% include "tunnel/components/primary-button.html.twig" with {'action': 'nextStep', 'label': 'Suivant' } %}
{% include "tunnel/components/secondary-button.html.twig" with {'action': 'previousStep', 'label': "Précédent" } %}
</div>
</div>
</section>
<section id="fourth-step" class="tunnel-hidden">
<div class="content-column-center-48 ">
<div class="content-column-8">
<h2 class="title text-center">
{% trans %}Choisissez une date{% endtrans %}
</h2>
</div>
<div class="date-container max-w-400 content-column-16">
{{ form_widget(form.date) }}
</div>
<div class="tunnel-footer">
<div class="totalDifferencePriceContainer w-full flex-between" style="display: none">
<p class="small-text-opacity-70">
{% trans %}Supplément à régler{% endtrans %}
</p>
<p>
<b>+</b><b class="totalDifferencePrice"></b>
</p>
</div>
<div class="totalContainer w-full flex-between" style="display: none">
<p class="small-text-opacity-70">
{% trans %}Total pour{% endtrans %} <span class="totalPerson">1</span> {% trans %}personne(s){% endtrans %}
</p>
<p>
<b class="totalPrice"></b>
</p>
</div>
{% include "tunnel/components/primary-button.html.twig" with {'action': 'nextStep', 'label': 'Suivant' } %}
{% include "tunnel/components/secondary-button.html.twig" with {'action': 'previousStep', 'label': "Précédent" } %}
</div>
</div>
</section>
<section id="fifth-step" class="tunnel-hidden">
<div class="content-column-center-48">
<div class="content-column-8-center">
<h2 class="title text-center">
{% trans %}Récapitulons{% endtrans %}
</h2>
</div>
<div class="content-row-48-center max-w-1200">
<div class="gsap-sticky">
{% include "tunnel/components/recapitulatif.html.twig" %}
</div>
<div class="contact-container wrapper-form-right flex-1">
<div class="content-column-16">
<h2 class="p-16-0">
{% trans %}Contact{% endtrans %}
</h2>
<div class="content-column-16">
<div class="input-wrapper">
<label class="content-column-8">
{% trans %}Prénom{% endtrans %} *
{{ form_widget(form.contactData.firstname) }}
</label>
<hr>
<label class="content-column-8">
{% trans %}Nom{% endtrans %} *
{{ form_widget(form.contactData.lastname) }}
</label>
</div>
<div class="input-wrapper">
<label class="content-column-8">
{% trans %}Email{% endtrans %} *
{{ form_widget(form.contactData.email) }}
</label>
</div>
<div class="input-wrapper">
<label class="content-column-8">
{% trans %}Entreprise{% endtrans %}
{{ form_widget(form.contactData.company) }}
</label>
</div>
<div class="input-wrapper">
<label class="content-column-8">
{% trans %}Téléphone{% endtrans %} *
{{ form_widget(form.contactData.phoneNumber) }}
</label>
</div>
<div class="input-wrapper">
<label class="content-column-8">
{% trans %}Adresse{% endtrans %} *
{{ form_widget(form.contactData.address) }}
</label>
</div>
<div class="input-wrapper">
<label class="content-column-8">
{% trans %}Ville{% endtrans %} *
{{ form_widget(form.contactData.city) }}
</label>
<hr>
<label class="content-column-8">
{% trans %}Code postal{% endtrans %} *
{{ form_widget(form.contactData.postalCode) }}
</label>
</div>
<div class="input-wrapper">
<label class="content-column-8">
{% trans %}Pays{% endtrans %} *
{{ form_widget(form.contactData.country) }}
</label>
</div>
</div>
<h2 class="p-16-0">
{% trans %}Demande d'information{% endtrans %}
</h2>
<div class="content-column-16">
<div class="input-wrapper">
<label class="content-column-8">
{% trans %}Commentaire{% endtrans %}
{{ form_widget(form.clientCommentary) }}
</label>
</div>
<div class="input-wrapper">
<label class="content-row-8">
{{ form_widget(form.checkedAcceptPromotion) }}
<p>{% trans %}Vous acceptez d'être contacté pour recevoir des offres promotionnelles{% endtrans %}</p>
</label>
</div>
<div class="input-wrapper">
<label class="content-row-8">
{{ form_widget(form.checkedCGV) }}
<p>{% trans %}Vous acceptez notre{% endtrans %} <a href="#" onclick='window.open("{{ path('privacy-policy') }}");return false;' href="#">{% trans %}politique de confidentialité{% endtrans %}</a> {% trans %}et nos{% endtrans %} <a onclick='window.open("{{ path('cgv') }}");return false;' href="#">{% trans %}conditions générales{% endtrans %}</a> *</p>
</label>
</div>
</div>
<p style="font-size: 14px;">
(*) {% trans %}Champs obligatoires{% endtrans %}
</p>
</div>
</div>
</div>
<div class="tunnel-footer">
<div class="infoContainer w-full text-center">
<p class="stepInfo" style="margin-bottom: 8px;">
{% trans %}Veuillez noter qu'une demande de formulaire ne constitue pas une confirmation de réservation.{% endtrans %}
</p>
<p class="stepInfo">
{% trans %}La disponibilité de la date demandée peut varier. Nos équipes vous répondront rapidement pour assurer une organisation optimale de votre événement privatif.{% endtrans %}
</p>
</div>
{% include 'form/components/rgpd.html.twig' with {'sujet': 'demande'} %}
<div class="h-captcha-container text-center my-4">
<div class="h-captcha"
data-sitekey="{{ siteKeyHcaptcha }}"
data-callback="onCaptchaSuccess"
data-expired-callback="onCaptchaExpired"></div>
<div id="captcha-error" class="text-red-500 mt-2" style="display: none;">
{% trans %}Veuillez valider le captcha avant de soumettre le formulaire{% endtrans %}
</div>
</div>
{% include "tunnel/components/primary-button.html.twig" with {'action': 'submit', 'label': 'Envoyer ma demande' } %}
{% include "tunnel/components/secondary-button.html.twig" with {'action': 'goToFirstStep', 'label': 'Modifier' } %}
</div>
</div>
</section>
</div>
{{ form_end(form) }}
<script src="{{ asset('js/tunnel.js') }}"></script>
<script>
const oldPrice = {{ priceOffered|default(0) }};
const usingCode = {{ code is defined ? "true" : "false" }};
// hCaptcha callback when challenge is successfully completed
function onCaptchaSuccess() {
document.getElementById('captcha-error').style.display = 'none';
const submitBtn = document.querySelector('.submit-btn');
if (submitBtn) {
submitBtn.removeAttribute('disabled');
}
}
// hCaptcha callback when verification expires
function onCaptchaExpired() {
const submitBtn = document.querySelector('.submit-btn');
if (submitBtn) {
submitBtn.setAttribute('disabled', 'disabled');
}
}
// on dom ready
document.addEventListener('DOMContentLoaded', function() {
if (usingCode){
updateUI(5);
}
// Initially disable submit button
const submitBtn = document.querySelector('.submit-btn');
if (submitBtn) {
submitBtn.setAttribute('disabled', 'disabled');
}
// Add submit event listener to form
const form = document.querySelector('form.to-submit');
form.addEventListener('submit', function(event) {
// Check if hCaptcha is completed
const hcaptchaResponse = document.querySelector('textarea[name="h-captcha-response"]');
if (!hcaptchaResponse || !hcaptchaResponse.value) {
event.preventDefault();
document.getElementById('captcha-error').style.display = 'block';
// Scroll to captcha error
document.querySelector('.h-captcha-container').scrollIntoView({
behavior: 'smooth',
block: 'center'
});
return false;
}
// If hCaptcha is completed, hide error message and continue submission
document.getElementById('captcha-error').style.display = 'none';
return true;
});
});
function openCarteCadeauModal() {
const tokenValue = prompt("Please enter your token:");
// Check if the user provided a value
if (tokenValue) {
const baseUrl = "{{ path('reservation_carte_cadeau_tunnel') }}";
window.location.href = `${baseUrl}?code=${encodeURIComponent(tokenValue)}`;
}
}
function createPayment() {
console.log("Nop");
}
</script>
{% endblock %}