templates/base.html.twig line 35
<!DOCTYPE html><html xmlns="https://www.w3.org/1999/xhtml" xmlns:fb="http://ogp.me/ns/fb#" prefix="og: http://ogp.me/ns#" lang="{{ app.request.getLocale() }}">{% set busters = getBustersValues() %}{% set webpEnabled = isWebpEnabled() %}{% set iubendaCookie = getIubendaCookie(app.request.locale) %}<head>{% apply spaceless %}<meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><meta http-equiv="X-UA-Compatible" content="IE=edge">{% block meta_group %}{% if metatags is defined and metatags %}{% include 'partials/metatags/_custom.html.twig' %}{% else %}{% include 'partials/metatags/_default.html.twig' %}{% endif %}{% endblock %}{% block meta_canonical %}{% if app.request.attributes.get('_route') %}<link rel="canonical" href="{{ url(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|default({}))|lower }}" />{% endif %}{% endblock %}{% block meta_alternate %}{% if hreflangs is defined and hreflangs %}{% for hreflang in hreflangs %}<link rel="alternate" hreflang="{{ hreflang.locale }}" href="{{ hreflang.href|lower }}" />{% endfor %}{% else %}{% for locale in locales %}<link rel="alternate" hreflang="{{ locale }}" href="{{ url(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|default({})|merge({'_locale': locale}))|lower }}" />{% endfor %}{% endif %}{% endblock %}{% block meta_robots %}{% if app.environment == 'dev' or app.environment == 'test' %}<meta name="robots" content="noindex,nofollow"><meta name="googlebot" content="noindex,nofollow">{% else %}<meta name="robots" content="index,follow"><meta name="googlebot" content="index,follow">{% endif %}{% endblock %}<link rel="icon" href="{{ asset('assets/images/frontend/favicon.ico') }}" sizes="any">{% set icons = [32, 76, 120, 152, 167, 180, 192, 196]%}{% for icon in icons %}<link rel="apple-touch-icon" sizes="{{ icon }}x{{ icon }}" href="{{ asset('assets/images/frontend/webpage-icons/icon-' ~ icon ~ 'x' ~ icon ~ '.png') }}">{% endfor %}<meta name="apple-mobile-web-app-title" content="Kioene"><meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="theme-color" content="#166938"><meta name="msapplication-navbutton-color" content="#166938"><meta name="geo.region" content="IT"><meta name="geo.placename" content="Villanova di Camposampiero"><meta name="geo.position" content="45.491379;11.96371"><meta name="ICBM" content="45.491379, 11.96371"><meta name="msapplication-config" content="none">{% block stylesheets %}{# <link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap" rel="stylesheet"> #}<link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=Bebas+Neue&family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&display=swap" rel="stylesheet"><link rel="stylesheet" href="https://use.typekit.net/uil7luu.css"><!-- Preload the LCP image with a high fetchpriority so it starts loading with the stylesheet. -->{# <link rel="preload" as="image" href="{{ asset('assets/images/frontend/bg-land-large-mobile.png') }}" type="image/png"> #}<link rel="preload" as="image" href="{{ asset('assets/images/webp/frontend/bg-land-large-mobile.webp') }}" type="image/webp"><link rel="preload" href="{{ asset('assets/fonts/market-fresh/market-fresh-bold.woff2') }}" as="font" type="font/woff2" crossorigin><link rel="preload" fetchpriority="high" href="{{ asset('assets/css/frontend/fonts.css') }}?v={{ busters['css/frontend/fonts.css'] is defined ? busters['css/frontend/fonts.css'] }}" as="style"><link rel="stylesheet" href="{{ asset('assets/css/frontend/fonts.css') }}?v={{ busters['css/frontend/fonts.css'] is defined ? busters['css/frontend/fonts.css'] }}"><link rel="preload" href="{{ asset('assets/css/frontend/pofo.css') }}?v={{ busters['css/frontend/pofo.css'] is defined ? busters['css/frontend/pofo.css'] }}" as="style"><link rel="stylesheet" href="{{ asset('assets/css/frontend/pofo.css') }}?v={{ busters['css/frontend/pofo.css'] is defined ? busters['css/frontend/pofo.css'] }}"><link rel="preload" href="{{ asset('assets/css/frontend/main.css') }}?v={{ busters['css/frontend/main.css'] is defined ? busters['css/frontend/main.css'] }}" as="style"><link rel="stylesheet" href="{{ asset('assets/css/frontend/main.css') }}?v={{ busters['css/frontend/main.css'] is defined ? busters['css/frontend/main.css'] }}">{% endblock %}<script type="application/ld+json">{"@context": "https://schema.org","@type": "Organization","url": "https://www.kioene.com","logo": "{{ asset('assets/svg/logo-kioene.svg') }}"}</script>{% block javascripts '' %}{% endapply %}<script type="text/javascript">var pixel_PageView__now = Math.floor(Date.now() / 1000);var pixel_PageView__eventID = pixel_PageView__now + '_' + Math.random().toString(36).substr(2, 9);var pixel_em = '';var pixel_ph = '';</script>{% block iubenda_config %}<script type="text/javascript">var iubendaIds = [];var locale = '{{ app.request.locale }}';iubendaIds[locale] = {'siteId' : '{{ iubenda[app.request.locale].siteId }}','cookiePolicyId' : '{{ iubenda[app.request.locale].cookiePolicyId }}','locale': '{{ iubenda[app.request.locale].locale }}'};</script>{% endblock %}<script>var url__tracking_pixel="/api/tracking-pixel-api-conversion/ajax.php";var url__tracking_pinterest="/api/tracking-pinterest-api-conversion/ajax.php";var tracking__locale = '{{ app.request.locale }}';var tracking__viewcontent__title = '';var tracking__viewcontent__ids = [];var tracking__viewcontent__type = 'page';</script><!-- Google Tag Manager --><script type="text/javascript">window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);}</script><script type="text/javascript">dataLayer.push({locale: '{{ app.request.locale }}'});</script><script type="application/javascript">var checkPixelCallback = false;var consent_analytics_storage = 'denied';var consent_ad_storage = 'denied';var consent_personalization_storage = 'denied';var consent_functionality_storage = 'denied';var consent_security_storage = 'denied';var iubendaCookie = null;var cookieName = '_iub_cs-'+iubendaIds[locale]['cookiePolicyId'] + "=";var ca = document.cookie.split(';');for(var i=0; i<ca.length; i++) {var c = ca[i];while (c.charAt(0)==' ') c = c.substring(1);if (c.indexOf(cookieName) == 0) {iubendaCookie = c.substring(cookieName.length,c.length)}}if (iubendaCookie) {iubendaCookie = decodeURIComponent(iubendaCookie);iubendaCookie = JSON.parse(iubendaCookie);if (iubendaCookie.purposes[5]) {consent_ad_storage = 'granted';var checkPixelCallback = true;dataLayer.push({consense_marketing: true});}if (iubendaCookie.purposes[4]) {consent_analytics_storage = 'granted';dataLayer.push({anonymizeIp: false,});}if (iubendaCookie.purposes[3]) {consent_personalization_storage = 'granted';}if (iubendaCookie.purposes[2]) {consent_functionality_storage = 'granted';}} else {dataLayer.push({anonymizeIp: true,consense_marketing: false});}gtag('consent', 'default', {'ad_storage': consent_ad_storage,'ad_user_data': consent_ad_storage,'ad_personalization': consent_ad_storage,'analytics_storage': consent_analytics_storage,'wait_for_update': 500,// 'personalization_storage': consent_personalization_storage,// 'functionality_storage': consent_functionality_storage,// 'security_storage': consent_security_storage,});</script>{% block gtm_config %}<script type="text/javascript">(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','GTM-MM2BS55');</script>{% endblock %}<!-- End Google Tag Manager --></head><body class="body body_{{ app.request.attributes.get('_route')|replace({'_': '-'}) }} {{ app.request.attributes.get('category_slug') ? 'body_' ~ app.request.attributes.get('category_slug') : '' }} {{ webpEnabled ? 'webp' }} w-100 {% block bodyClass '' %}" {% block bodyStyle '' %}><!-- Google Tag Manager (noscript) -->{% block gtm_config_noscript %}<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MM2BS55"height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>{% endblock %}<!-- End Google Tag Manager (noscript) -->{% block body %}<div class="body__layer-transition body__layer-transition_bg-color_jewel" data-js="layer-transition-2"></div><div class="body__layer-transition body__layer-transition_bg-color_la-riojia" data-js="layer-transition-1"></div><div class="body__layer-transition" data-js="layer-loading"><img src="{{ asset('assets/svg/spin-1.1s-100px.svg') }}" alt="loading"></div>{% block header %}{{ render(controller('App\\Controller\\DefaultController::headerAction',{ 'route': app.request.attributes.get('_route') })) }}{% endblock %}<div class="page overflow-hidden"><div class="page__bg"></div><div class="page__bg-top" data-transition="element-pre-enter"></div><div class="page__content margin-lr-auto">{% block content '' %}</div>{% block extraContent '' %}</div>{% block footer %}{% if app.request.locale == 'it' %}{% include 'wheretobuy/_banner.html.twig' with {'padding': true} %}{% else %}<div class="footer-top position-relative z-index-2"></div>{% endif %}{{ render(controller('App\\Controller\\DefaultController::footerAction', {'banner': true, 'color': 'white', 'currentPath': app.request.get('_route')})) }}{% endblock %}{% block modals '' %}{% if app.request.locale == 'it' %}<div class="modal micromodal-slide" id="modalVideo" aria-hidden="true"><div class="modal__overlay" tabindex="-1" data-micromodal-close><div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modalVideo-title"><header class="modal__header"><button class="modal__close" aria-label="Close modal" data-micromodal-close></button></header><main class="modal__content" id="modalVideo-content"><video id="beforeAdterVideo" preload="none" data-heroVideo autoplay muted playsinline><source src="/assets/video/post-reveal.mov" type="video/mp4; codecs=hvc1"><source src="/assets/video/post-reveal.webm" type="video/webm"></video></main></div></div></div>{% endif %}{% endblock %}{% block javascripts_body %}<script type="text/javascript" src="{{ asset('assets/js/gsap/gsap.js') }}?v={{ busters['js/gsap/gsap.js'] is defined ? busters['js/gsap/gsap.js'] }}"></script><script type="text/javascript" src="{{ asset('assets/js/gsap/ScrollTrigger.js') }}?v={{ busters['js/gsap/ScrollTrigger.js'] is defined ? busters['js/gsap/ScrollTrigger.js'] }}"></script><script type="text/javascript" src="{{ asset('assets/js/frontend/main.js') }}?v={{ busters['js/frontend/main.js'] is defined ? busters['js/frontend/main.js'] }}"></script>{% if app.request.locale == 'it' %}<script type="text/javascript">MicroModal.init();// MicroModal.show('modalVideo');document.addEventListener("DOMContentLoaded", function() {// --- CONFIG: imposta una stringa 'YYYY-MM-DD' per testare (o lascia null)const DEBUG_DATE = null; // ex: "2025-10-24" oppure null per usare la data reale// --- helper per formattare la data come YYYY-MM-DDfunction formatYYYYMMDD(d) {const yyyy = d.getFullYear();const mm = String(d.getMonth() + 1).padStart(2, "0");const dd = String(d.getDate()).padStart(2, "0");return `${yyyy}-${mm}-${dd}`;}// --- ottenere "oggi" rispettando DEBUG_DATE se presentefunction getTodayDateObject() {if (DEBUG_DATE) {// crea Date da DEBUG_DATE (assume formato YYYY-MM-DD)const parts = DEBUG_DATE.split("-");return new Date(Number(parts[0]), Number(parts[1]) - 1, Number(parts[2]));}return new Date();}// --- cookie base helpers ---function setRawCookie(name, value, expiresDate) {const expires = expiresDate ? `; expires=${expiresDate.toUTCString()}` : "";document.cookie = `${name}=${encodeURIComponent(value)}${expires}; path=/`;}function getRawCookie(name) {const value = `; ${document.cookie}`;const parts = value.split(`; ${name}=`);if (parts.length === 2) return decodeURIComponent(parts.pop().split(";").shift());return null;}// --- setta cookie con valore = data odierna (YYYY-MM-DD) e scadenza a mezzanotte successiva ---function setCookieWithDate(name) {const today = getTodayDateObject();const dateStr = formatYYYYMMDD(today);// calcola mezzanotte del giorno successivoconst midnight = new Date(today);midnight.setHours(24, 0, 0, 0); // mezzanotte successivasetRawCookie(name, dateStr, midnight);console.log(`[Modal] Imposto cookie "${name}" = ${dateStr} (scade: ${midnight.toString()})`);}// --- ritorna la data memorizzata nel cookie solo se corrisponde alla "data corrente" ---function getValidCookieDate(name) {const stored = getRawCookie(name);if (!stored) return null;const today = getTodayDateObject();const todayStr = formatYYYYMMDD(today);if (stored === todayStr) {console.log(`[Modal] Cookie "${name}" valido per oggi: ${stored}`);return stored;} else {console.log(`[Modal] Cookie "${name}" presente ma non corrisponde a oggi (cookie: ${stored} - oggi: ${todayStr}) -> ignoro`);return null;}}// --- configurazione principale ---const modalId = "modalVideo";const modalCookieName = "modalVideoSeenDate";// se il cookie valido per oggi esiste -> non mostrare la modaleif (getValidCookieDate(modalCookieName)) {console.log("[Modal] giĆ visto oggi: non mostro la modale.");return;}let cookieSet = false;function markModalSeen() {if (cookieSet) return;cookieSet = true;setCookieWithDate(modalCookieName);removeCloseListeners();}// --- listeners fallback per garantire che il cookie venga impostato ---const closeSelectors = `[data-micromodal-close], .micromodal-close`;let closeElements = [];function addCloseListeners() {const modalEl = document.getElementById(modalId);if (!modalEl) {console.warn(`[Modal] elemento con id="${modalId}" non trovato.`);return;}closeElements = Array.from(modalEl.querySelectorAll(closeSelectors));closeElements.forEach(el => el.addEventListener("click", markModalSeen));document.addEventListener("keydown", escHandler);// fallback per event custom se presentedocument.addEventListener("micromodal-close", markModalSeen);}function removeCloseListeners() {closeElements.forEach(el => {try { el.removeEventListener("click", markModalSeen); } catch(e){}});document.removeEventListener("keydown", escHandler);document.removeEventListener("micromodal-close", markModalSeen);}function escHandler(e) {if (e.key === "Escape" || e.key === "Esc") {const modalEl = document.getElementById(modalId);if (!modalEl) return;const ariaHidden = modalEl.getAttribute("aria-hidden");if (modalEl.classList.contains("is-open") || ariaHidden === "false") {markModalSeen();}}}// --- inizializzazione MicroModal con onClose che imposta il cookie ---MicroModal.init({onClose: () => {console.log("[Modal] MicroModal onClose fired");markModalSeen();}});// aggiungiamo fallback listeners e mostriamo la modale dopo loadaddCloseListeners();window.addEventListener("load", function() {setTimeout(() => {if (!getValidCookieDate(modalCookieName)) {MicroModal.show(modalId);console.log(`[Modal] Mostro la modale: ${modalId}`);} else {console.log("[Modal] Cookie valido trovato al momento del load: non mostro.");}}, 2000);});});</script>{% endif %}{% endblock %}{% block javascripts_iubenda %}<script>var _iub = _iub || [];_iub.csConfiguration = {"invalidateConsentWithoutLog": true,"consentOnContinuedBrowsing": false,"perPurposeConsent": true,"whitelabel": false,"lang": iubendaIds[locale].locale,"siteId": iubendaIds[locale].siteId,"floatingPreferencesButtonDisplay": "bottom-left","cookiePolicyId": iubendaIds[locale].cookiePolicyId,"callback": {"onPreferenceFirstExpressed": function(event) {onConsent(event);}},"banner": {"closeButtonRejects": true,"rejectButtonDisplay": true,"rejectButtonColor": "#a2c618","rejectButtonCaptionColor": "white","explicitWithdrawal": true,"position": "float-center","textColor": "black","backgroundColor": "white","listPurposes": true,"acceptButtonDisplay": true,"acceptButtonColor": "#046A38","acceptButtonCaptionColor": "white","customizeButtonDisplay": true,"customizeButtonColor": "#A3A3A3","customizeButtonCaptionColor": "white"}};</script><script type="text/javascript" src="//cdn.iubenda.com/cs/gpp/stub.js"></script><script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>{% endblock %}</body></html>