templates/base.html.twig line 35

  1. <!DOCTYPE html>
  2. <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() }}">
  3.     {% set busters = getBustersValues() %}
  4.     {% set webpEnabled = isWebpEnabled() %}
  5.     {% set iubendaCookie = getIubendaCookie(app.request.locale) %}
  6.     <head>
  7.         {% apply spaceless %}
  8.             <meta charset="utf-8">
  9.             <meta name="viewport" content="width=device-width, initial-scale=1">
  10.             <meta http-equiv="X-UA-Compatible" content="IE=edge">
  11.             {% block meta_group %}
  12.                 {% if metatags is defined and metatags %}
  13.                     {% include 'partials/metatags/_custom.html.twig' %}
  14.                 {% else %}
  15.                     {% include 'partials/metatags/_default.html.twig' %}
  16.                 {% endif %}
  17.             {% endblock %}
  18.             {% block meta_canonical %}
  19.                 {% if app.request.attributes.get('_route') %}
  20.                     <link rel="canonical" href="{{ url(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|default({}))|lower }}" />
  21.                 {% endif %}
  22.             {% endblock %}
  23.             {% block meta_alternate %}
  24.                 {% if hreflangs is defined and hreflangs %}
  25.                     {% for hreflang in hreflangs %}
  26.                         <link rel="alternate" hreflang="{{ hreflang.locale }}" href="{{ hreflang.href|lower }}" />
  27.                     {% endfor %}
  28.                 {% else %}
  29.                     {% for locale in locales %}
  30.                         <link rel="alternate" hreflang="{{ locale }}" href="{{ url(app.request.attributes.get('_route'), app.request.attributes.get('_route_params')|default({})|merge({'_locale': locale}))|lower }}" />
  31.                     {% endfor %}
  32.                 {% endif %}
  33.             {% endblock %}
  34.             {% block meta_robots %}
  35.                 {% if app.environment == 'dev' or app.environment == 'test' %}
  36.                     <meta name="robots" content="noindex,nofollow">
  37.                     <meta name="googlebot" content="noindex,nofollow">
  38.                 {% else %}
  39.                     <meta name="robots" content="index,follow">
  40.                     <meta name="googlebot" content="index,follow">
  41.                 {% endif %}
  42.             {% endblock %}
  43.             <link rel="icon" href="{{ asset('assets/images/frontend/favicon.ico') }}" sizes="any">
  44.             {% set icons = [32, 76, 120, 152, 167, 180, 192, 196]%}
  45.             {% for icon in icons %}
  46.                 <link rel="apple-touch-icon" sizes="{{ icon }}x{{ icon }}" href="{{ asset('assets/images/frontend/webpage-icons/icon-' ~ icon ~ 'x' ~ icon ~ '.png') }}">
  47.             {% endfor %}
  48.             <meta name="apple-mobile-web-app-title" content="Kioene">
  49.             <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
  50.             <meta name="apple-mobile-web-app-capable" content="yes">
  51.             <meta name="theme-color" content="#166938">
  52.             <meta name="msapplication-navbutton-color" content="#166938">
  53.             <meta name="geo.region" content="IT">
  54.             <meta name="geo.placename" content="Villanova di Camposampiero">
  55.             <meta name="geo.position" content="45.491379;11.96371">
  56.             <meta name="ICBM" content="45.491379, 11.96371">
  57.             <meta name="msapplication-config" content="none">
  58.             {% block stylesheets %}
  59.                 {# <link rel="preconnect" href="https://fonts.googleapis.com">
  60.                 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  61.                 <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&display=swap" rel="stylesheet"> #}
  62.                 <link rel="preconnect" href="https://fonts.googleapis.com">
  63.                 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  64.                 <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">
  65.                 <link rel="stylesheet" href="https://use.typekit.net/uil7luu.css">
  66.                 <!-- Preload the LCP image with a high fetchpriority so it starts loading with the stylesheet. -->
  67.                 {# <link rel="preload" as="image" href="{{ asset('assets/images/frontend/bg-land-large-mobile.png') }}" type="image/png"> #}
  68.                 <link rel="preload" as="image" href="{{ asset('assets/images/webp/frontend/bg-land-large-mobile.webp') }}" type="image/webp">
  69.                 <link rel="preload" href="{{ asset('assets/fonts/market-fresh/market-fresh-bold.woff2') }}" as="font" type="font/woff2" crossorigin>
  70.                 <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">
  71.                 <link rel="stylesheet" href="{{ asset('assets/css/frontend/fonts.css') }}?v={{ busters['css/frontend/fonts.css'] is defined ? busters['css/frontend/fonts.css'] }}">
  72.                 <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">
  73.                 <link rel="stylesheet" href="{{ asset('assets/css/frontend/pofo.css') }}?v={{ busters['css/frontend/pofo.css'] is defined ? busters['css/frontend/pofo.css'] }}">
  74.                 <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">
  75.                 <link rel="stylesheet" href="{{ asset('assets/css/frontend/main.css') }}?v={{ busters['css/frontend/main.css'] is defined ? busters['css/frontend/main.css'] }}">
  76.             {% endblock %}
  77.             <script type="application/ld+json">
  78.                 {
  79.                     "@context": "https://schema.org",
  80.                     "@type": "Organization",
  81.                     "url": "{{ app.request.schemeAndHttpHost }}",
  82.                     "logo": "{{ app.request.schemeAndHttpHost }}{{ asset('assets/svg/logo-kioene.svg') }}"
  83.                 }
  84.             </script>
  85.             {% block javascripts '' %}
  86.             {% block applicationldjson '' %}
  87.         {% endapply %}
  88.         <script type="text/javascript">
  89.             var pixel_PageView__now = Math.floor(Date.now() / 1000);
  90.             var pixel_PageView__eventID = pixel_PageView__now + '_' + Math.random().toString(36).substr(2, 9);
  91.             var pixel_em = '';
  92.             var pixel_ph = '';
  93.         </script>
  94.         {% block iubenda_config %}
  95.         <script type="text/javascript">
  96.             var iubendaIds = [];
  97.             var locale = '{{ app.request.locale }}';
  98.             iubendaIds[locale] = {
  99.                 'siteId' : '{{ iubenda[app.request.locale].siteId }}',
  100.                 'cookiePolicyId' : '{{ iubenda[app.request.locale].cookiePolicyId }}',
  101.                 'locale': '{{ iubenda[app.request.locale].locale }}'
  102.             };
  103.         </script>
  104.         {% endblock %}
  105.         <script>
  106.             var url__tracking_pixel="/api/tracking-pixel-api-conversion/ajax.php";
  107.             var url__tracking_pinterest="/api/tracking-pinterest-api-conversion/ajax.php";
  108.             var tracking__locale = '{{ app.request.locale }}';
  109.             var tracking__viewcontent__title = '';
  110.             var tracking__viewcontent__ids = [];
  111.             var tracking__viewcontent__type = 'page';
  112.         </script>
  113.         <!-- Google Tag Manager -->
  114.         <script type="text/javascript">
  115.             window.dataLayer = window.dataLayer || [];
  116.             function gtag(){dataLayer.push(arguments);}
  117.         </script>
  118.         <script type="text/javascript">dataLayer.push({locale: '{{ app.request.locale }}'});</script>
  119.         <script type="application/javascript">
  120.             var checkPixelCallback = false;
  121.             var consent_analytics_storage = 'denied';
  122.             var consent_ad_storage = 'denied';
  123.             var consent_personalization_storage = 'denied';
  124.             var consent_functionality_storage = 'denied';
  125.             var consent_security_storage = 'denied';
  126.             var iubendaCookie = null;
  127.             var cookieName = '_iub_cs-'+iubendaIds[locale]['cookiePolicyId'] + "=";
  128.             var ca = document.cookie.split(';');
  129.             for(var i=0; i<ca.length; i++) {
  130.                 var c = ca[i];
  131.                 while (c.charAt(0)==' ') c = c.substring(1);
  132.                 if (c.indexOf(cookieName) == 0) {
  133.                     iubendaCookie = c.substring(cookieName.length,c.length)
  134.                 }
  135.             }
  136.             if (iubendaCookie) {
  137.                 iubendaCookie = decodeURIComponent(iubendaCookie);
  138.                 iubendaCookie = JSON.parse(iubendaCookie);
  139.                 if (iubendaCookie.purposes[5]) {
  140.                     consent_ad_storage = 'granted';
  141.                     var checkPixelCallback = true;
  142.                     dataLayer.push({
  143.                         consense_marketing: true
  144.                     });
  145.                 }
  146.                 if (iubendaCookie.purposes[4]) {
  147.                     consent_analytics_storage = 'granted';
  148.                     dataLayer.push({
  149.                         anonymizeIp: false,
  150.                     });
  151.                 }
  152.                 if (iubendaCookie.purposes[3]) {
  153.                     consent_personalization_storage = 'granted';
  154.                 }
  155.                 if (iubendaCookie.purposes[2]) {
  156.                     consent_functionality_storage = 'granted';
  157.                 }
  158.             } else {
  159.                 dataLayer.push({
  160.                     anonymizeIp: true,
  161.                     consense_marketing: false
  162.                 });
  163.             }
  164.             gtag('consent', 'default', {
  165.                 'ad_storage': consent_ad_storage,
  166.                 'ad_user_data': consent_ad_storage,
  167.                 'ad_personalization': consent_ad_storage,
  168.                 'analytics_storage': consent_analytics_storage,
  169.                 'wait_for_update': 500,
  170.                 // 'personalization_storage': consent_personalization_storage,
  171.                 // 'functionality_storage': consent_functionality_storage,
  172.                 // 'security_storage': consent_security_storage,
  173.             });
  174.         </script>
  175.         {% block gtm_config %}
  176.         <script type="text/javascript">(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
  177.                     new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
  178.                 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
  179.                 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
  180.             })(window,document,'script','dataLayer','GTM-MM2BS55');</script>
  181.         {% endblock  %}
  182.         <!-- End Google Tag Manager -->
  183.     </head>
  184.     <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 '' %}>
  185.     <!-- Google Tag Manager (noscript) -->
  186.     {% block gtm_config_noscript %}
  187.     <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MM2BS55"
  188.                       height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
  189.     {% endblock  %}
  190.     <!-- End Google Tag Manager (noscript) -->
  191.         {% block body %}
  192.             <div class="body__layer-transition body__layer-transition_bg-color_jewel" data-js="layer-transition-2"></div>
  193.             <div class="body__layer-transition body__layer-transition_bg-color_la-riojia" data-js="layer-transition-1"></div>
  194.             <div class="body__layer-transition" data-js="layer-loading">
  195.                 <img src="{{ asset('assets/svg/spin-1.1s-100px.svg') }}" alt="loading">
  196.             </div>
  197.             {% block header %}
  198.                 {{ render(controller(
  199.                     'App\\Controller\\DefaultController::headerAction',
  200.                     { 'route': app.request.attributes.get('_route') }
  201.                 )) }}
  202.             {% endblock %}
  203.             <div class="page overflow-hidden">
  204.                 <div class="page__bg"></div>
  205.                 <div class="page__bg-top" data-transition="element-pre-enter"></div>
  206.                 <div class="page__content {{ app.request.attributes.get('_route') == 'homepage' ? 'page__content_home' : 'margin-lr-auto' }}">
  207.                     {% block content '' %}
  208.                 </div>
  209.                 {% block extraContent '' %}
  210.             </div>
  211.             {% block footer %}
  212.                 {% if app.request.locale == 'it' %}
  213.                     {% include 'wheretobuy/_banner.html.twig' with {'padding': true} %}
  214.                 {% else %}
  215.                     <div class="footer-top position-relative z-index-2"></div>
  216.                 {% endif %}
  217.                 {{ render(controller(
  218.                     'App\\Controller\\DefaultController::footerAction', {'banner': true, 'color': 'white', 'spalmabile': false, 'currentPath': app.request.get('_route')}
  219.                 )) }}
  220.             {% endblock %}
  221.             {% block modals '' %}
  222.             {% if app.request.locale == 'it' %}
  223.                 {# <div class="modal micromodal-slide" id="modalVideo" aria-hidden="true">
  224.                   <div class="modal__overlay" tabindex="-1" data-micromodal-close>
  225.                     <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modalVideo-title">
  226.                       <header class="modal__header">
  227.                         <button class="modal__close" aria-label="Close modal" data-micromodal-close></button>
  228.                       </header>
  229.                       <main class="modal__content" id="modalVideo-content">
  230.                           <video id="beforeAdterVideo" preload="none" data-heroVideo autoplay muted playsinline>
  231.                               <source src="/assets/video/post-reveal.mov" type="video/mp4; codecs=hvc1">
  232.                               <source src="/assets/video/post-reveal.webm" type="video/webm">
  233.                           </video>
  234.                       </main>
  235.                     </div>
  236.                   </div>
  237.                 </div> #}
  238.             {% endif %}
  239.         {% endblock %}
  240.         {% block javascripts_body %}
  241.             <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>
  242.             <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>
  243.             <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>
  244.             {% if app.request.locale == 'it' %}
  245.                 <script type="text/javascript">
  246.                     // MicroModal.init();
  247.                     // // MicroModal.show('modalVideo');
  248.                     //
  249.                     //   document.addEventListener("DOMContentLoaded", function() {
  250.                     //     // --- CONFIG: imposta una stringa 'YYYY-MM-DD' per testare (o lascia null)
  251.                     //     const DEBUG_DATE = null; // ex: "2025-10-24" oppure null per usare la data reale
  252.                     //
  253.                     //     // --- helper per formattare la data come YYYY-MM-DD
  254.                     //     function formatYYYYMMDD(d) {
  255.                     //       const yyyy = d.getFullYear();
  256.                     //       const mm = String(d.getMonth() + 1).padStart(2, "0");
  257.                     //       const dd = String(d.getDate()).padStart(2, "0");
  258.                     //       return `${yyyy}-${mm}-${dd}`;
  259.                     //     }
  260.                     //
  261.                     //     // --- ottenere "oggi" rispettando DEBUG_DATE se presente
  262.                     //     function getTodayDateObject() {
  263.                     //       if (DEBUG_DATE) {
  264.                     //         // crea Date da DEBUG_DATE (assume formato YYYY-MM-DD)
  265.                     //         const parts = DEBUG_DATE.split("-");
  266.                     //         return new Date(Number(parts[0]), Number(parts[1]) - 1, Number(parts[2]));
  267.                     //       }
  268.                     //       return new Date();
  269.                     //     }
  270.                     //
  271.                     //     // --- cookie base helpers ---
  272.                     //     function setRawCookie(name, value, expiresDate) {
  273.                     //       const expires = expiresDate ? `; expires=${expiresDate.toUTCString()}` : "";
  274.                     //       document.cookie = `${name}=${encodeURIComponent(value)}${expires}; path=/`;
  275.                     //     }
  276.                     //
  277.                     //     function getRawCookie(name) {
  278.                     //       const value = `; ${document.cookie}`;
  279.                     //       const parts = value.split(`; ${name}=`);
  280.                     //       if (parts.length === 2) return decodeURIComponent(parts.pop().split(";").shift());
  281.                     //       return null;
  282.                     //     }
  283.                     //
  284.                     //     // --- setta cookie con valore = data odierna (YYYY-MM-DD) e scadenza a mezzanotte successiva ---
  285.                     //     function setCookieWithDate(name) {
  286.                     //       const today = getTodayDateObject();
  287.                     //       const dateStr = formatYYYYMMDD(today);
  288.                     //
  289.                     //       // calcola mezzanotte del giorno successivo
  290.                     //       const midnight = new Date(today);
  291.                     //       midnight.setHours(24, 0, 0, 0); // mezzanotte successiva
  292.                     //       setRawCookie(name, dateStr, midnight);
  293.                     //
  294.                     //       console.log(`[Modal] Imposto cookie "${name}" = ${dateStr} (scade: ${midnight.toString()})`);
  295.                     //     }
  296.                     //
  297.                     //     // --- ritorna la data memorizzata nel cookie solo se corrisponde alla "data corrente" ---
  298.                     //     function getValidCookieDate(name) {
  299.                     //       const stored = getRawCookie(name);
  300.                     //       if (!stored) return null;
  301.                     //
  302.                     //       const today = getTodayDateObject();
  303.                     //       const todayStr = formatYYYYMMDD(today);
  304.                     //
  305.                     //       if (stored === todayStr) {
  306.                     //         console.log(`[Modal] Cookie "${name}" valido per oggi: ${stored}`);
  307.                     //         return stored;
  308.                     //       } else {
  309.                     //         console.log(`[Modal] Cookie "${name}" presente ma non corrisponde a oggi (cookie: ${stored} - oggi: ${todayStr}) -> ignoro`);
  310.                     //         return null;
  311.                     //       }
  312.                     //     }
  313.                     //
  314.                     //     // --- configurazione principale ---
  315.                     //     const modalId = "modalVideo";
  316.                     //     const modalCookieName = "modalVideoSeenDate";
  317.                     //
  318.                     //     // se il cookie valido per oggi esiste -> non mostrare la modale
  319.                     //     if (getValidCookieDate(modalCookieName)) {
  320.                     //       console.log("[Modal] giĆ  visto oggi: non mostro la modale.");
  321.                     //       return;
  322.                     //     }
  323.                     //
  324.                     //     let cookieSet = false;
  325.                     //     function markModalSeen() {
  326.                     //       if (cookieSet) return;
  327.                     //       cookieSet = true;
  328.                     //       setCookieWithDate(modalCookieName);
  329.                     //
  330.                     //       removeCloseListeners();
  331.                     //     }
  332.                     //
  333.                     //     // --- listeners fallback per garantire che il cookie venga impostato ---
  334.                     //     const closeSelectors = `[data-micromodal-close], .micromodal-close`;
  335.                     //     let closeElements = [];
  336.                     //
  337.                     //     function addCloseListeners() {
  338.                     //       const modalEl = document.getElementById(modalId);
  339.                     //       if (!modalEl) {
  340.                     //         console.warn(`[Modal] elemento con id="${modalId}" non trovato.`);
  341.                     //         return;
  342.                     //       }
  343.                     //
  344.                     //       closeElements = Array.from(modalEl.querySelectorAll(closeSelectors));
  345.                     //       closeElements.forEach(el => el.addEventListener("click", markModalSeen));
  346.                     //
  347.                     //       document.addEventListener("keydown", escHandler);
  348.                     //       // fallback per event custom se presente
  349.                     //       document.addEventListener("micromodal-close", markModalSeen);
  350.                     //     }
  351.                     //
  352.                     //     function removeCloseListeners() {
  353.                     //       closeElements.forEach(el => {
  354.                     //         try { el.removeEventListener("click", markModalSeen); } catch(e){}
  355.                     //       });
  356.                     //       document.removeEventListener("keydown", escHandler);
  357.                     //       document.removeEventListener("micromodal-close", markModalSeen);
  358.                     //     }
  359.                     //
  360.                     //     function escHandler(e) {
  361.                     //       if (e.key === "Escape" || e.key === "Esc") {
  362.                     //         const modalEl = document.getElementById(modalId);
  363.                     //         if (!modalEl) return;
  364.                     //
  365.                     //         const ariaHidden = modalEl.getAttribute("aria-hidden");
  366.                     //         if (modalEl.classList.contains("is-open") || ariaHidden === "false") {
  367.                     //           markModalSeen();
  368.                     //         }
  369.                     //       }
  370.                     //     }
  371.                     //
  372.                     //     // --- inizializzazione MicroModal con onClose che imposta il cookie ---
  373.                     //     MicroModal.init({
  374.                     //       onClose: () => {
  375.                     //         console.log("[Modal] MicroModal onClose fired");
  376.                     //         markModalSeen();
  377.                     //       }
  378.                     //     });
  379.                     //
  380.                     //     // aggiungiamo fallback listeners e mostriamo la modale dopo load
  381.                     //     addCloseListeners();
  382.                     //     window.addEventListener("load", function() {
  383.                     //       setTimeout(() => {
  384.                     //
  385.                     //         if (!getValidCookieDate(modalCookieName)) {
  386.                     //           MicroModal.show(modalId);
  387.                     //           console.log(`[Modal] Mostro la modale: ${modalId}`);
  388.                     //         } else {
  389.                     //           console.log("[Modal] Cookie valido trovato al momento del load: non mostro.");
  390.                     //         }
  391.                     //       }, 2000);
  392.                     //     });
  393.                     //
  394.                     //   });
  395.                 </script>
  396.             {% endif %}
  397.         {% endblock %}
  398.         {% block javascripts_iubenda %}
  399.             <script>
  400.                 var _iub = _iub || [];
  401.                 _iub.csConfiguration = {
  402.                     "invalidateConsentWithoutLog": true,
  403.                     "consentOnContinuedBrowsing": false,
  404.                     "perPurposeConsent": true,
  405.                     "whitelabel": false,
  406.                     "lang": iubendaIds[locale].locale,
  407.                     "siteId": iubendaIds[locale].siteId,
  408.                     "floatingPreferencesButtonDisplay": "bottom-left",
  409.                     "cookiePolicyId": iubendaIds[locale].cookiePolicyId,
  410.                     "callback": {
  411.                         "onPreferenceFirstExpressed": function(event) {
  412.                             onConsent(event);
  413.                         }
  414.                     },
  415.                     "banner": {
  416.                         "closeButtonRejects": true,
  417.                         "rejectButtonDisplay": true,
  418.                         "rejectButtonColor": "#647163",
  419.                         "rejectButtonCaptionColor": "white",
  420.                         "explicitWithdrawal": true,
  421.                         "position": "float-center",
  422.                         "textColor": "black",
  423.                         "backgroundColor": "white",
  424.                         "listPurposes": true,
  425.                         "acceptButtonDisplay": true,
  426.                         "acceptButtonColor": "#5b7359",
  427.                         "acceptButtonCaptionColor": "white",
  428.                         "customizeButtonDisplay": true,
  429.                         "customizeButtonColor": "#686868",
  430.                         "customizeButtonCaptionColor": "white"
  431.                     }
  432.                 };
  433.             </script>
  434.             <script type="text/javascript" src="//cdn.iubenda.com/cs/gpp/stub.js"></script>
  435.             <script type="text/javascript" src="//cdn.iubenda.com/cs/iubenda_cs.js" charset="UTF-8" async></script>
  436.         {% endblock %}
  437.     </body>
  438. </html>