/** * Consent-gated analytics loader. * All third-party tracking (GTM, Google Ads, Ahrefs) is loaded dynamically * ONLY after the user accepts analytics/marketing consent. * No tracking script loads before the user makes a choice. */ (() => { function pushConsentUpdate(prefs, mode) { window.dataLayer = window.dataLayer || []; window.dataLayer.push([ 'consent', mode, { ad_storage: prefs.marketing ? 'granted' : 'denied', ad_user_data: prefs.marketing ? 'granted' : 'denied', ad_personalization: prefs.marketing ? 'granted' : 'denied', analytics_storage: prefs.analytics ? 'granted' : 'denied', }, ]); } function loadGTM(prefs) { if (window._gtmLoaded) { pushConsentUpdate(prefs, 'update'); return; } window._gtmLoaded = true; var w = window, d = document, s = 'script', l = 'dataLayer', i = 'GTM-N9LNSJJR'; w[l] = w[l] || []; // Tell Google tags which storage categories were granted before the // container starts. This keeps an analytics-only choice from enabling // advertising storage inside the shared GTM container. pushConsentUpdate(prefs, 'default'); w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0]; var j = d.createElement(s); j.async = true; j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i; f.parentNode.insertBefore(j, f); } function loadGoogleAds() { if (window._gadsLoaded) return; window._gadsLoaded = true; var s = document.createElement('script'); s.async = true; s.src = 'https://www.googletagmanager.com/gtag/js?id=AW-18323187725'; document.head.appendChild(s); window.dataLayer = window.dataLayer || []; function gtag() { window.dataLayer.push(arguments); } window.gtag = gtag; gtag('js', new Date()); gtag('config', 'AW-18323187725'); } function loadAhrefs() { if (window._ahrefsLoaded) return; window._ahrefsLoaded = true; var s = document.createElement('script'); s.src = 'https://analytics.ahrefs.com/analytics.js'; s.dataset.key = '9GF8lp7prynyiOk5HcbCrQ'; s.async = true; document.head.appendChild(s); } function clearCookie(name) { document.cookie = name + '=; Max-Age=0; path=/; SameSite=Lax'; } function clearDisallowedCookies(prefs) { var names = document.cookie .split(';') .map(function (cookie) { return cookie.trim().split('=', 1)[0]; }) .filter(Boolean); names.forEach(function (name) { var isFunctional = name === 'kp_currency'; var isMarketing = name === 'kp_ref' || name.indexOf('_gcl_') === 0; var isAnalytics = name === '_ga' || name.indexOf('_ga_') === 0; if ((!prefs.functional && isFunctional) || (!prefs.marketing && isMarketing) || (!prefs.analytics && isAnalytics)) { clearCookie(name); } }); } function applyConsent(prefs) { clearDisallowedCookies(prefs); if (prefs.analytics || prefs.marketing) { loadGTM(prefs); } if (prefs.analytics) { loadAhrefs(); } if (prefs.marketing) { loadGoogleAds(); } } function getCookie(name) { var match = document.cookie.match(new RegExp('(?:^|;\\s*)' + name + '=([^;]*)')); return match ? decodeURIComponent(match[1]) : null; } function getSavedPrefs() { try { var raw = getCookie('kp_cookie_consent'); return raw ? JSON.parse(raw) : null; } catch (_) { return null; } } var prefs = getSavedPrefs(); if (prefs) { applyConsent(prefs); } window.addEventListener('kp:consent-changed', (e) => { applyConsent(e.detail); }); })();