<!DOCTYPE html>
<html lang="en">
<head>
{% if app.environment == "prod" %}
<script id="Cookiebot"
src="https://consent.cookiebot.com/uc.js"
data-cbid="af3fd7ec-069c-4e52-b5a2-27c184e8b4a9"
data-blockingmode="manual"
type="text/javascript"></script>
<script data-cookieconsent="ignore">
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("consent", "default", {
ad_personalization: "denied",
ad_storage: "denied",
ad_user_data: "denied",
analytics_storage: "denied",
functionality_storage: "denied",
personalization_storage: "denied",
security_storage: "granted",
wait_for_update: 500,
});
gtag("set", "ads_data_redaction", true);
gtag("set", "url_passthrough", false);
</script>
<!-- Google tag (gtag.js) -->
<script data-cookieconsent="statistics" async src="https://www.googletagmanager.com/gtag/js?id=UA-188652373-1"></script>
<script data-cookieconsent="statistics">
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'UA-188652373-1');
</script>
<!-- Hotjar Tracking Code for https://taakabeerspa.com -->
<script data-cookieconsent="statistics">
(function (h, o, t, j, a, r) {
h.hj = h.hj || function () { (h.hj.q = h.hj.q || []).push(arguments) };
h._hjSettings = { hjid: 3893655, hjsv: 6 };
a = o.getElementsByTagName('head')[0];
r = o.createElement('script'); r.async = 1;
r.src = t + h._hjSettings.hjid + j + h._hjSettings.hjsv;
a.appendChild(r);
})(window, document, 'https://static.hotjar.com/c/hotjar-', '.js?sv=');
</script>
{% endif %}
{# Sentry Integration for Error Monitoring #}
{% include 'sentry/sentry_js.html.twig' %}
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="{% block description '' %}">
<link rel="icon" type="image/png" sizes="32x32" href="{{asset('images/favicon/favicon-32x32.png')}}">
<link rel="icon" type="image/png" sizes="16x16" href="{{asset('images/favicon/favicon-16x16.png')}}">
<title>{% block title '' %} | Taaka Beer Spa</title>
{% block stylesheets %}
{{ encore_entry_link_tags('vitrine') }}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css" />
{% endblock %}
{% block javascripts %}
{{ encore_entry_script_tags('vitrine') }}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
{% endblock %}
</head>
<body class="flex flex-col items-center text-white">
<div id="loading-transition" class="relative opacity-0 pointer-events-none transition-opacity duration-200">
</div>
<div id="loading-gif" class="fixed top-0 left-0 w-full h-lvh">
<img class="absolute top-1/2 left-1/2 transform -translate-x-1/2 -translate-y-1/2 h-52 w-auto"
src="{{asset('vitrine/logo/loader.gif')}}" alt="Taaka Beer Spa">
</div>
<div id="content" class="opacity-0 w-full">
{% include "vitrine/layout/header.html.twig" %}
<div id="smooth-wrapper" class="w-full background-parallax">
<div id="smooth-content" class="w-full">
<main class="w-full relative z-10 flex-col flex items-center overflow-hidden">
{% block main %}{% endblock main %}
</main>
</div>
</div>
</div>
{% for message in app.flashes('success') %}
<div class="z-50 fixed bottom-4 left-1/2 -translate-x-1/2 rounded-md bg-green-50 p-4">
<div class="flex">
<div class="flex-shrink-0">
<svg class="h-5 w-5 text-green-400" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
<path fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"
clip-rule="evenodd" />
</svg>
</div>
<div class="ml-3 text-sm font-medium text-green-800 opacity-70">
{{ message }}
</div>
</div>
</div>
{% endfor %}
{% for message in app.flashes('error') %}
<div class="z-50 fixed bottom-4 left-1/2 -translate-x-1/2 rounded-md bg-red-50 p-4">
<div class="flex">
<div class="flex-shrink-0">
<svg class="h-5 w-5 text-red-400" viewBox="0 0 20 20" fill="currentColor" aria-hidden="true">
<path fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z"
clip-rule="evenodd" />
</svg>
</div>
<div class="ml-3 text-sm font-medium text-red-800">
{{ message }}
</div>
</div>
</div>
{% endfor %}
<script src="https://cdnjs.cloudflare.com/ajax/libs/animejs/3.2.1/anime.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', () => {
const bubbleAnimationParents = document.querySelectorAll('.animateBubble');
const bubbleAnimationBtns = document.querySelectorAll('.btnBubbleAnimation');
let animations = [];
bubbleAnimationParents.forEach((parent) => {
const animation = startAnimationLoop(parent);
animations.push(animation);
});
document.addEventListener('visibilitychange', () => {
if (document.visibilityState === 'hidden') {
// Arrêter toutes les animations
animations.forEach(animation => clearInterval(animation));
animations = [];
} else if (document.visibilityState === 'visible') {
// Redémarrer les animations
bubbleAnimationParents.forEach((parent) => {
const animation = startAnimationLoop(parent);
animations.push(animation);
});
}
});
bubbleAnimationBtns.forEach((btn) => {
btn.addEventListener('mouseenter', () => {
const parent = btn.closest('.btnBubbleAnimation');
if (parent) {
hoverBtnBubbleAnimation(parent);
} else {
console.error('Aucun parent trouvé avec la classe .animateBubble pour le bouton', btn);
}
});
});
const loadingTransition = document.getElementById('loading-transition');
const content = document.getElementById('content');
const loadingGif = document.getElementById('loading-gif');
// Fonction pour gérer le fade-in
const handlePageShow = () => {
// Fade-in de la page après le chargement
setTimeout(() => {
document.body.classList.add('loaded'); // Ajoute la classe 'loaded' pour déclencher le fade-in
content.classList.remove('opacity-0'); // Ré-affiche le contenu après le fade-in
// Cache le GIF après 200ms suivant le fade-in
setTimeout(() => {
loadingGif.style.display = 'none'; // Cache le GIF après l'animation de fade-in
}, 400); // Ce délai correspond à la durée du fade-in
}, 400); // Ajuste ce délai en fonction du temps de chargement de ton animation
};
// Gestion du chargement initial et du retour arrière
handlePageShow();
window.addEventListener('pageshow', (event) => {
if (event.persisted) {
// Si la page vient du cache (retour arrière)
content.style.display = 'block';
loadingGif.style.display = 'block';
handlePageShow();
}
});
// Interception du clic sur les liens pour gérer le fade-out et réafficher l'écran de transition
document.querySelectorAll('a').forEach(link => {
link.addEventListener('click', function (e) {
// Ignore les liens internes (#), les liens de la galerie, et les liens qui s'ouvrent dans un nouvel onglet
if (this.getAttribute('href').startsWith('#') ||
this.closest('#gallery_taaka') ||
this.getAttribute('target') === '_blank') {
return; // Ne fait rien pour ces liens
}
if (this.hostname === window.location.hostname) {
e.preventDefault();
document.body.classList.remove('loaded');
content.classList.add('opacity-0');
loadingTransition.classList.remove('opacity-0');
loadingTransition.classList.add('opacity-100');
loadingGif.style.display = 'block';
setTimeout(() => {
window.location.href = this.href;
}, 350);
}
});
});
});
</script>
</body>
</html>