@blakfy/cookie 2.1.0 → 2.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/core/config.js", "../src/core/consent-store.js", "../src/core/events.js", "../src/i18n/detect.js", "../src/i18n/translations/tr.js", "../src/i18n/translations/en.js", "../src/i18n/translations/ar.js", "../src/i18n/translations/fa.js", "../src/i18n/translations/ur.js", "../src/i18n/translations/fr.js", "../src/i18n/translations/ru.js", "../src/i18n/translations/de.js", "../src/i18n/translations/he.js", "../src/i18n/translations/uk.js", "../src/i18n/translations/es.js", "../src/i18n/translations/it.js", "../src/i18n/translations/pt.js", "../src/i18n/translations/nl.js", "../src/i18n/translations/pl.js", "../src/i18n/translations/sv.js", "../src/i18n/translations/cs.js", "../src/i18n/translations/zh.js", "../src/i18n/translations/zh-TW.js", "../src/i18n/translations/ja.js", "../src/i18n/translations/ko.js", "../src/i18n/translations/id.js", "../src/i18n/translations/hi.js", "../src/i18n/index.js", "../src/ui/styles.js", "../src/ui/banner.js", "../src/data/service-metadata.js", "../src/ui/modal.js", "../src/ui/badge.js", "../src/ui/focus-trap.js", "../src/ui/status-bar.js", "../src/gating/script-unblocker.js", "../src/gating/placeholder.js", "../src/gating/iframe-unblocker.js", "../src/gating/observer.js", "../src/gating/cleaner.js", "../src/presets/google-analytics.js", "../src/presets/google-tag-manager.js", "../src/presets/google-maps.js", "../src/presets/google-recaptcha.js", "../src/presets/facebook-pixel.js", "../src/presets/youtube.js", "../src/presets/vimeo.js", "../src/presets/hotjar.js", "../src/presets/microsoft-clarity.js", "../src/presets/linkedin-insight.js", "../src/presets/yandex-metrica.js", "../src/presets/bing-ads-uet.js", "../src/presets/tiktok-pixel.js", "../src/presets/pinterest-tag.js", "../src/presets/tawk-to.js", "../src/presets/intercom.js", "../src/presets/hubspot.js", "../src/presets/mailchimp.js", "../src/presets/_registry.js", "../src/compliance/google-cmv2.js", "../src/compliance/microsoft-uet.js", "../src/compliance/yandex-metrica.js", "../src/compliance/tcf-v2.js", "../src/compliance/ccpa.js", "../src/compliance/gpc.js", "../src/compliance/dnt.js", "../src/geo/jurisdiction.js", "../src/core/audit.js", "../src/api.js", "../src/index.js"],
4
- "sourcesContent": ["// blakfy-cookie/src/core/config.js \u2014 script tag attribute reader and v2 defaults\r\n\r\nexport const CDN_BASE = \"https://cdn.jsdelivr.net/gh/tariktunc/blakfy-cookie@v2\";\r\n\r\nexport const DEFAULTS = {\r\n locale: \"auto\",\r\n mainLang: null,\r\n policyUrl: \"/cerez-politikasi\",\r\n policyVersion: \"1.0\",\r\n auditEndpoint: null,\r\n position: \"bottom-center\",\r\n theme: \"auto\",\r\n accent: \"#3E5C3A\",\r\n presets: null,\r\n tcf: \"false\",\r\n cmpId: \"0\",\r\n ccpa: \"auto\",\r\n gpc: \"respect\",\r\n dnt: \"respect\",\r\n statusUrl: CDN_BASE + \"/status.json\",\r\n statusEnabled: true,\r\n};\r\n\r\nexport const getScriptEl = () => {\r\n if (document.currentScript) return document.currentScript;\r\n const all = document.getElementsByTagName(\"script\");\r\n return all[all.length - 1] || null;\r\n};\r\n\r\nexport const readConfig = (scriptEl) => {\r\n const el = scriptEl || getScriptEl();\r\n const attr = (name, fallback) => {\r\n if (!el) return fallback;\r\n const v = el.getAttribute(name);\r\n return v == null ? fallback : v;\r\n };\r\n return {\r\n locale: attr(\"data-blakfy-locale\", DEFAULTS.locale),\r\n mainLang: attr(\"data-blakfy-main-lang\", DEFAULTS.mainLang),\r\n policyUrl: attr(\"data-blakfy-policy-url\", DEFAULTS.policyUrl),\r\n policyVersion: attr(\"data-blakfy-version\", DEFAULTS.policyVersion),\r\n auditEndpoint: attr(\"data-blakfy-audit-endpoint\", DEFAULTS.auditEndpoint),\r\n position: attr(\"data-blakfy-position\", DEFAULTS.position),\r\n theme: attr(\"data-blakfy-theme\", DEFAULTS.theme),\r\n accent: attr(\"data-blakfy-accent\", DEFAULTS.accent),\r\n presets: attr(\"data-blakfy-presets\", DEFAULTS.presets),\r\n tcf: attr(\"data-blakfy-tcf\", DEFAULTS.tcf),\r\n cmpId: attr(\"data-blakfy-cmp-id\", DEFAULTS.cmpId),\r\n ccpa: attr(\"data-blakfy-ccpa\", DEFAULTS.ccpa),\r\n gpc: attr(\"data-blakfy-gpc\", DEFAULTS.gpc),\r\n dnt: attr(\"data-blakfy-dnt\", DEFAULTS.dnt),\r\n statusUrl: attr(\"data-blakfy-status-url\", DEFAULTS.statusUrl),\r\n statusEnabled: attr(\"data-blakfy-status\", \"true\") !== \"false\",\r\n };\r\n};\r\n", "// blakfy-cookie/src/core/consent-store.js \u2014 cookie I/O and state shape (v2 schema, no lib-version re-consent)\r\n\r\nexport const COOKIE_NAME = \"blakfy_consent\";\r\nexport const COOKIE_TTL_DAYS = 365;\r\n\r\nexport const readCookie = (policyVersion) => {\r\n const match = document.cookie.match(new RegExp(\"(^| )\" + COOKIE_NAME + \"=([^;]+)\"));\r\n if (!match) return null;\r\n try {\r\n const s = JSON.parse(decodeURIComponent(match[2]));\r\n if (s.version !== policyVersion) return null;\r\n return s;\r\n } catch (e) {\r\n return null;\r\n }\r\n};\r\n\r\nexport const writeCookie = (state) => {\r\n const expires = new Date(Date.now() + COOKIE_TTL_DAYS * 86400000).toUTCString();\r\n const secure = window.location.protocol === \"https:\" ? \"; Secure\" : \"\";\r\n document.cookie =\r\n COOKIE_NAME + \"=\" + encodeURIComponent(JSON.stringify(state)) +\r\n \"; expires=\" + expires + \"; path=/; SameSite=Strict\" + secure;\r\n};\r\n\r\nconst newId = () => {\r\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\r\n return crypto.randomUUID();\r\n }\r\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\r\n const r = (Math.random() * 16) | 0;\r\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n};\r\n\r\nexport const buildState = ({\r\n prefs,\r\n currentLocale,\r\n mainLang,\r\n policyVersion,\r\n jurisdiction,\r\n tcString,\r\n uspString,\r\n prevId,\r\n}) => ({\r\n id: prevId || newId(),\r\n essential: true,\r\n analytics: !!(prefs && prefs.analytics),\r\n marketing: !!(prefs && prefs.marketing),\r\n functional: !!(prefs && prefs.functional),\r\n recording: !!(prefs && prefs.recording),\r\n timestamp: new Date().toISOString(),\r\n version: policyVersion,\r\n locale: currentLocale,\r\n mainLang: mainLang,\r\n jurisdiction: jurisdiction || \"default\",\r\n tcString: tcString || null,\r\n uspString: uspString || null,\r\n});\r\n", "// blakfy-cookie/src/core/events.js \u2014 minimal event emitter for state and category consent\r\n\r\nexport const createEmitter = () => {\r\n const listeners = Object.create(null);\r\n\r\n const on = (event, fn) => {\r\n if (typeof fn !== \"function\") return;\r\n if (!listeners[event]) listeners[event] = [];\r\n listeners[event].push(fn);\r\n };\r\n\r\n const off = (event, fn) => {\r\n const arr = listeners[event];\r\n if (!arr) return;\r\n const i = arr.indexOf(fn);\r\n if (i > -1) arr.splice(i, 1);\r\n };\r\n\r\n const emit = (event, ...args) => {\r\n const arr = listeners[event];\r\n if (!arr) return;\r\n for (let i = 0; i < arr.length; i++) {\r\n try { arr[i].apply(null, args); } catch (e) { /* swallow listener errors */ }\r\n }\r\n };\r\n\r\n return { on, off, emit };\r\n};\r\n", "// blakfy-cookie/src/i18n/detect.js \u2014 BCP47 locale detection and direction metadata\r\n\r\nexport const SUPPORTED_LOCALES = [\r\n \"tr\", \"en\", \"ar\", \"fa\", \"ur\",\r\n \"fr\", \"ru\", \"de\", \"he\", \"uk\",\r\n \"es\", \"it\", \"pt\", \"nl\", \"pl\", \"sv\", \"cs\",\r\n \"zh\", \"zh-TW\", \"ja\", \"ko\",\r\n \"id\", \"hi\"\r\n];\r\n\r\nexport const RTL_LOCALES = [\"ar\", \"he\", \"fa\", \"ur\"];\r\n\r\nexport const normalizeLocale = (raw, supported) => {\r\n if (!raw) return null;\r\n const list = supported || SUPPORTED_LOCALES;\r\n const lo = String(raw).toLowerCase();\r\n for (let i = 0; i < list.length; i++) {\r\n if (list[i].toLowerCase() === lo) return list[i];\r\n }\r\n const prefix = lo.substring(0, 2);\r\n for (let j = 0; j < list.length; j++) {\r\n if (list[j].toLowerCase() === prefix) return list[j];\r\n }\r\n return null;\r\n};\r\n\r\nexport const detectLocale = ({ configLocale, supported, defaultLocale }) => {\r\n const list = supported || SUPPORTED_LOCALES;\r\n const fallback = defaultLocale || \"tr\";\r\n if (configLocale && configLocale !== \"auto\") {\r\n return normalizeLocale(configLocale, list) || fallback;\r\n }\r\n try {\r\n const url = new URL(window.location.href);\r\n const qp = url.searchParams.get(\"lang\");\r\n if (qp) {\r\n const ql = normalizeLocale(qp, list);\r\n if (ql) return ql;\r\n }\r\n } catch (e) { /* ignore */ }\r\n const htmlLang = document.documentElement.lang;\r\n if (htmlLang) {\r\n const hl = normalizeLocale(htmlLang, list);\r\n if (hl) return hl;\r\n }\r\n const navLang = navigator.language || (navigator.languages && navigator.languages[0]) || \"\";\r\n if (navLang) {\r\n const nl = normalizeLocale(navLang, list);\r\n if (nl) return nl;\r\n }\r\n return fallback;\r\n};\r\n\r\nexport const detectMainLang = ({ configMainLang, supported, defaultLocale }) => {\r\n const list = supported || SUPPORTED_LOCALES;\r\n const fallback = defaultLocale || \"tr\";\r\n if (configMainLang) {\r\n const ml = normalizeLocale(configMainLang, list);\r\n if (ml) return ml;\r\n }\r\n const htmlLang = normalizeLocale(document.documentElement.lang, list);\r\n if (htmlLang) return htmlLang;\r\n return fallback;\r\n};\r\n", "// blakfy-cookie/src/i18n/translations/tr.js \u2014 Turkish translations\r\n\r\nexport default {\r\n title: \"\u00C7erez Tercihleri\",\r\n intro: \"Bu site, deneyiminizi geli\u015Ftirmek i\u00E7in \u00E7erezler kullan\u0131r. Detaylar i\u00E7in \u00C7erez Politikam\u0131z\u0131 inceleyin.\",\r\n policyLink: \"\u00C7erez Politikas\u0131\",\r\n acceptAll: \"T\u00FCm\u00FCn\u00FC Kabul Et\",\r\n rejectAll: \"T\u00FCm\u00FCn\u00FC Reddet\",\r\n preferences: \"Tercihler\",\r\n save: \"Se\u00E7imleri Kaydet\",\r\n close: \"Kapat\",\r\n cat: {\r\n essential: { title: \"Zorunlu \u00C7erezler\", desc: \"Sitenin temel i\u015Flevleri i\u00E7in gerekli, devre d\u0131\u015F\u0131 b\u0131rak\u0131lamaz.\", always: \"Her zaman aktif\" },\r\n analytics: { title: \"Analitik \u00C7erezler\", desc: \"Anonim ziyaret istatistikleri toplama amac\u0131yla kullan\u0131l\u0131r.\" },\r\n marketing: { title: \"Pazarlama \u00C7erezleri\",desc: \"Ki\u015Fiselle\u015Ftirilmi\u015F reklam ve yeniden hedefleme i\u00E7in kullan\u0131l\u0131r.\" },\r\n functional: { title: \"Fonksiyonel \u00C7erezler\",desc: \"Dil, tema, b\u00F6lge gibi tercihlerinizi hat\u0131rlamak i\u00E7in kullan\u0131l\u0131r.\" }\r\n },\r\n placeholder: {\r\n title: \"\u0130\u00E7erik engellendi\",\r\n desc: \"Bu i\u00E7eri\u011Fi g\u00F6rmek i\u00E7in {category} \u00E7erezlerine izin vermeniz gerekiyor.\",\r\n cta: \"\u0130zin ver\"\r\n },\r\n tabs: {\r\n categories: \"Kategoriler\",\r\n services: \"Hizmetler\",\r\n about: \"Hakk\u0131nda\"\r\n },\r\n service: {\r\n description: \"A\u00E7\u0131klama\",\r\n processor: \"Veri \u0130\u015Fleyici\",\r\n address: \"Adres\",\r\n dpo: \"VKO \u0130leti\u015Fim\",\r\n purposes: \"Ama\u00E7lar\",\r\n technologies: \"Kullan\u0131lan Teknolojiler\",\r\n dataCollected: \"Toplanan Veriler\",\r\n legalBasis: \"Hukuki Dayanak\",\r\n retention: \"Saklama S\u00FCresi\",\r\n transferCountries: \"Aktar\u0131m \u00DClkeleri\",\r\n privacyPolicy: \"Gizlilik Politikas\u0131\",\r\n cookiePolicy: \"\u00C7erez Politikas\u0131\",\r\n legalBasisValues: {\r\n consent: \"A\u00E7\u0131k R\u0131za (GDPR Madde 6/1-a)\",\r\n legitimate_interest: \"Me\u015Fru Menfaat (GDPR Madde 6/1-f)\"\r\n },\r\n noServices: \"Bu site i\u00E7in hen\u00FCz hizmet yap\u0131land\u0131r\u0131lmam\u0131\u015F.\"\r\n },\r\n svcAbout: {\r\n title: \"Bu CMP Hakk\u0131nda\",\r\n description: \"Bu web sitesi; GDPR, KVKK, CCPA ve di\u011Fer ge\u00E7erli gizlilik mevzuatlar\u0131na uyum sa\u011Flamak amac\u0131yla r\u0131za tercihlerinizi y\u00F6netmek i\u00E7in Blakfy \u00C7erez Y\u00F6netim Platformu'nu (CMP) kullanmaktad\u0131r.\",\r\n version: \"S\u00FCr\u00FCm\",\r\n learnMore: \"blakfy.com'da daha fazla bilgi\"\r\n }\r\n};\r\n", "// blakfy-cookie/src/i18n/translations/en.js \u2014 English translations\r\n\r\nexport default {\r\n title: \"Cookie Preferences\",\r\n intro: \"This site uses cookies to enhance your experience. See our Cookie Policy for details.\",\r\n policyLink: \"Cookie Policy\",\r\n acceptAll: \"Accept All\",\r\n rejectAll: \"Reject All\",\r\n preferences: \"Preferences\",\r\n save: \"Save Choices\",\r\n close: \"Close\",\r\n cat: {\r\n essential: { title: \"Essential Cookies\", desc: \"Required for the site to function. Cannot be disabled.\", always: \"Always active\" },\r\n analytics: { title: \"Analytics Cookies\", desc: \"Used to collect anonymous visit statistics.\" },\r\n marketing: { title: \"Marketing Cookies\", desc: \"Used for personalized advertising and retargeting.\" },\r\n functional: { title: \"Functional Cookies\", desc: \"Used to remember preferences like language, theme, region.\" }\r\n },\r\n placeholder: {\r\n title: \"Content blocked\",\r\n desc: \"You need to allow {category} cookies to view this content.\",\r\n cta: \"Allow\"\r\n },\r\n tabs: {\r\n categories: \"Categories\",\r\n services: \"Services\",\r\n about: \"About\"\r\n },\r\n service: {\r\n description: \"Description\",\r\n processor: \"Data Processor\",\r\n address: \"Address\",\r\n dpo: \"DPO Contact\",\r\n purposes: \"Purposes\",\r\n technologies: \"Technologies Used\",\r\n dataCollected: \"Data Collected\",\r\n legalBasis: \"Legal Basis\",\r\n retention: \"Retention Period\",\r\n transferCountries: \"Transfer Countries\",\r\n privacyPolicy: \"Privacy Policy\",\r\n cookiePolicy: \"Cookie Policy\",\r\n legalBasisValues: {\r\n consent: \"Consent (Art. 6 para. 1 s. 1 lit. a GDPR)\",\r\n legitimate_interest: \"Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)\"\r\n },\r\n noServices: \"No services are configured for this site.\"\r\n },\r\n svcAbout: {\r\n title: \"About this CMP\",\r\n description: \"This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.\",\r\n version: \"Version\",\r\n learnMore: \"Learn more at blakfy.com\"\r\n }\r\n};\r\n", "// blakfy-cookie/src/i18n/translations/ar.js \u2014 Arabic translations\r\n\r\nexport default {\r\n title: \"\u062A\u0641\u0636\u064A\u0644\u0627\u062A \u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637\",\r\n intro: \"\u064A\u0633\u062A\u062E\u062F\u0645 \u0647\u0630\u0627 \u0627\u0644\u0645\u0648\u0642\u0639 \u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637 \u0644\u062A\u062D\u0633\u064A\u0646 \u062A\u062C\u0631\u0628\u062A\u0643. \u0631\u0627\u062C\u0639 \u0633\u064A\u0627\u0633\u0629 \u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637 \u0644\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u062A\u0641\u0627\u0635\u064A\u0644.\",\r\n policyLink: \"\u0633\u064A\u0627\u0633\u0629 \u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637\",\r\n acceptAll: \"\u0642\u0628\u0648\u0644 \u0627\u0644\u0643\u0644\",\r\n rejectAll: \"\u0631\u0641\u0636 \u0627\u0644\u0643\u0644\",\r\n preferences: \"\u0627\u0644\u062A\u0641\u0636\u064A\u0644\u0627\u062A\",\r\n save: \"\u062D\u0641\u0638 \u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A\",\r\n close: \"\u0625\u063A\u0644\u0627\u0642\",\r\n cat: {\r\n essential: { title: \"\u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637 \u0627\u0644\u0623\u0633\u0627\u0633\u064A\u0629\", desc: \"\u0636\u0631\u0648\u0631\u064A\u0629 \u0644\u0639\u0645\u0644 \u0627\u0644\u0645\u0648\u0642\u0639. \u0644\u0627 \u064A\u0645\u0643\u0646 \u062A\u0639\u0637\u064A\u0644\u0647\u0627.\", always: \"\u0646\u0634\u0637 \u062F\u0627\u0626\u0645\u064B\u0627\" },\r\n analytics: { title: \"\u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637 \u0627\u0644\u062A\u062D\u0644\u064A\u0644\u064A\u0629\", desc: \"\u062A\u064F\u0633\u062A\u062E\u062F\u0645 \u0644\u062C\u0645\u0639 \u0625\u062D\u0635\u0627\u0626\u064A\u0627\u062A \u0627\u0644\u0632\u064A\u0627\u0631\u0627\u062A \u0627\u0644\u0645\u062C\u0647\u0648\u0644\u0629.\" },\r\n marketing: { title: \"\u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637 \u0627\u0644\u062A\u0633\u0648\u064A\u0642\u064A\u0629\",desc: \"\u062A\u064F\u0633\u062A\u062E\u062F\u0645 \u0644\u0644\u0625\u0639\u0644\u0627\u0646 \u0627\u0644\u0645\u062E\u0635\u0635 \u0648\u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u0627\u0633\u062A\u0647\u062F\u0627\u0641.\" },\r\n functional: { title: \"\u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637 \u0627\u0644\u0648\u0638\u064A\u0641\u064A\u0629\", desc: \"\u062A\u064F\u0633\u062A\u062E\u062F\u0645 \u0644\u062A\u0630\u0643\u0631 \u0627\u0644\u062A\u0641\u0636\u064A\u0644\u0627\u062A \u0645\u062B\u0644 \u0627\u0644\u0644\u063A\u0629 \u0648\u0627\u0644\u0633\u0645\u0629.\" }\r\n },\r\n placeholder: {\r\n title: \"\u062A\u0645 \u062D\u0638\u0631 \u0627\u0644\u0645\u062D\u062A\u0648\u0649\",\r\n desc: \"\u062A\u062D\u062A\u0627\u062C \u0625\u0644\u0649 \u0627\u0644\u0633\u0645\u0627\u062D \u0628\u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637 \u0644\u0640 {category} \u0644\u0639\u0631\u0636 \u0647\u0630\u0627 \u0627\u0644\u0645\u062D\u062A\u0648\u0649.\",\r\n cta: \"\u0627\u0644\u0633\u0645\u0627\u062D\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/fa.js \u2014 Persian translations\r\n\r\nexport default {\r\n title: \"\u062A\u0646\u0638\u06CC\u0645\u0627\u062A \u06A9\u0648\u06A9\u06CC\",\r\n intro: \"\u0627\u06CC\u0646 \u0633\u0627\u06CC\u062A \u0627\u0632 \u06A9\u0648\u06A9\u06CC\u200C\u0647\u0627 \u0628\u0631\u0627\u06CC \u0628\u0647\u0628\u0648\u062F \u062A\u062C\u0631\u0628\u0647 \u0634\u0645\u0627 \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0645\u06CC\u200C\u06A9\u0646\u062F. \u0628\u0631\u0627\u06CC \u062C\u0632\u0626\u06CC\u0627\u062A \u0628\u06CC\u0634\u062A\u0631 \u0633\u06CC\u0627\u0633\u062A \u06A9\u0648\u06A9\u06CC \u0645\u0627 \u0631\u0627 \u0645\u0637\u0627\u0644\u0639\u0647 \u06A9\u0646\u06CC\u062F.\",\r\n policyLink: \"\u0633\u06CC\u0627\u0633\u062A \u06A9\u0648\u06A9\u06CC\",\r\n acceptAll: \"\u067E\u0630\u06CC\u0631\u0634 \u0647\u0645\u0647\",\r\n rejectAll: \"\u0631\u062F \u0647\u0645\u0647\",\r\n preferences: \"\u062A\u0646\u0638\u06CC\u0645\u0627\u062A\",\r\n save: \"\u0630\u062E\u06CC\u0631\u0647 \u0627\u0646\u062A\u062E\u0627\u0628\u200C\u0647\u0627\",\r\n close: \"\u0628\u0633\u062A\u0646\",\r\n cat: {\r\n essential: { title: \"\u06A9\u0648\u06A9\u06CC\u200C\u0647\u0627\u06CC \u0636\u0631\u0648\u0631\u06CC\", desc: \"\u0628\u0631\u0627\u06CC \u0639\u0645\u0644\u06A9\u0631\u062F \u0627\u0635\u0644\u06CC \u0633\u0627\u06CC\u062A \u0644\u0627\u0632\u0645 \u0627\u0633\u062A. \u063A\u06CC\u0631\u0641\u0639\u0627\u0644 \u06A9\u0631\u062F\u0646 \u0622\u0646\u200C\u0647\u0627 \u0627\u0645\u06A9\u0627\u0646\u200C\u067E\u0630\u06CC\u0631 \u0646\u06CC\u0633\u062A.\", always: \"\u0647\u0645\u06CC\u0634\u0647 \u0641\u0639\u0627\u0644\" },\r\n analytics: { title: \"\u06A9\u0648\u06A9\u06CC\u200C\u0647\u0627\u06CC \u062A\u062D\u0644\u06CC\u0644\u06CC\", desc: \"\u0628\u0631\u0627\u06CC \u062C\u0645\u0639\u200C\u0622\u0648\u0631\u06CC \u0622\u0645\u0627\u0631 \u0646\u0627\u0634\u0646\u0627\u0633 \u0628\u0627\u0632\u062F\u06CC\u062F\u06A9\u0646\u0646\u062F\u06AF\u0627\u0646 \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0645\u06CC\u200C\u0634\u0648\u062F.\" },\r\n marketing: { title: \"\u06A9\u0648\u06A9\u06CC\u200C\u0647\u0627\u06CC \u0628\u0627\u0632\u0627\u0631\u06CC\u0627\u0628\u06CC\",desc: \"\u0628\u0631\u0627\u06CC \u062A\u0628\u0644\u06CC\u063A\u0627\u062A \u0634\u062E\u0635\u06CC\u200C\u0633\u0627\u0632\u06CC\u200C\u0634\u062F\u0647 \u0648 \u0647\u062F\u0641\u200C\u06AF\u0630\u0627\u0631\u06CC \u0645\u062C\u062F\u062F \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0645\u06CC\u200C\u0634\u0648\u062F.\" },\r\n functional: { title: \"\u06A9\u0648\u06A9\u06CC\u200C\u0647\u0627\u06CC \u0639\u0645\u0644\u06A9\u0631\u062F\u06CC\", desc: \"\u0628\u0631\u0627\u06CC \u0628\u0647 \u06CC\u0627\u062F\u0622\u0648\u0631\u06CC \u062A\u0646\u0638\u06CC\u0645\u0627\u062A\u06CC \u0645\u0627\u0646\u0646\u062F \u0632\u0628\u0627\u0646 \u0648 \u067E\u0648\u0633\u062A\u0647 \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0645\u06CC\u200C\u0634\u0648\u062F.\" }\r\n },\r\n placeholder: {\r\n title: \"\u0645\u062D\u062A\u0648\u0627 \u0645\u0633\u062F\u0648\u062F \u0634\u062F\",\r\n desc: \"\u0628\u0631\u0627\u06CC \u0645\u0634\u0627\u0647\u062F\u0647 \u0627\u06CC\u0646 \u0645\u062D\u062A\u0648\u0627 \u0628\u0627\u06CC\u062F \u06A9\u0648\u06A9\u06CC\u200C\u0647\u0627\u06CC {category} \u0631\u0627 \u0645\u062C\u0627\u0632 \u06A9\u0646\u06CC\u062F.\",\r\n cta: \"\u0627\u062C\u0627\u0632\u0647 \u062F\u0627\u062F\u0646\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/ur.js \u2014 Urdu translations\r\n\r\nexport default {\r\n title: \"\u06A9\u0648\u06A9\u06CC \u062A\u0631\u062C\u06CC\u062D\u0627\u062A\",\r\n intro: \"\u06CC\u06C1 \u0633\u0627\u0626\u0679 \u0622\u067E \u06A9\u06D2 \u062A\u062C\u0631\u0628\u06D2 \u06A9\u0648 \u0628\u06C1\u062A\u0631 \u0628\u0646\u0627\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u06A9\u0648\u06A9\u06CC\u0632 \u0627\u0633\u062A\u0639\u0645\u0627\u0644 \u06A9\u0631\u062A\u06CC \u06C1\u06D2\u06D4 \u062A\u0641\u0635\u06CC\u0644\u0627\u062A \u06A9\u06D2 \u0644\u06CC\u06D2 \u06C1\u0645\u0627\u0631\u06CC \u06A9\u0648\u06A9\u06CC \u067E\u0627\u0644\u06CC\u0633\u06CC \u062F\u06CC\u06A9\u06BE\u06CC\u06BA\u06D4\",\r\n policyLink: \"\u06A9\u0648\u06A9\u06CC \u067E\u0627\u0644\u06CC\u0633\u06CC\",\r\n acceptAll: \"\u0633\u0628 \u0642\u0628\u0648\u0644 \u06A9\u0631\u06CC\u06BA\",\r\n rejectAll: \"\u0633\u0628 \u0645\u0633\u062A\u0631\u062F \u06A9\u0631\u06CC\u06BA\",\r\n preferences: \"\u062A\u0631\u062C\u06CC\u062D\u0627\u062A\",\r\n save: \"\u0627\u0646\u062A\u062E\u0627\u0628 \u0645\u062D\u0641\u0648\u0638 \u06A9\u0631\u06CC\u06BA\",\r\n close: \"\u0628\u0646\u062F \u06A9\u0631\u06CC\u06BA\",\r\n cat: {\r\n essential: { title: \"\u0636\u0631\u0648\u0631\u06CC \u06A9\u0648\u06A9\u06CC\u0632\", desc: \"\u0633\u0627\u0626\u0679 \u06A9\u06D2 \u0628\u0646\u06CC\u0627\u062F\u06CC \u0627\u0641\u0639\u0627\u0644 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0636\u0631\u0648\u0631\u06CC \u06C1\u06CC\u06BA\u06D4 \u063A\u06CC\u0631 \u0641\u0639\u0627\u0644 \u0646\u06C1\u06CC\u06BA \u06A9\u06CC \u062C\u0627 \u0633\u06A9\u062A\u06CC\u06BA\u06D4\", always: \"\u06C1\u0645\u06CC\u0634\u06C1 \u0641\u0639\u0627\u0644\" },\r\n analytics: { title: \"\u062A\u062C\u0632\u06CC\u0627\u062A\u06CC \u06A9\u0648\u06A9\u06CC\u0632\",desc: \"\u06AF\u0645\u0646\u0627\u0645 \u0648\u0632\u0679 \u06A9\u06D2 \u0627\u0639\u062F\u0627\u062F \u0648 \u0634\u0645\u0627\u0631 \u062C\u0645\u0639 \u06A9\u0631\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0627\u0633\u062A\u0639\u0645\u0627\u0644 \u06C1\u0648\u062A\u06CC \u06C1\u06CC\u06BA\u06D4\" },\r\n marketing: { title: \"\u0645\u0627\u0631\u06A9\u06CC\u0679\u0646\u06AF \u06A9\u0648\u06A9\u06CC\u0632\",desc: \"\u0630\u0627\u062A\u06CC \u0646\u0648\u0639\u06CC\u062A \u06A9\u06CC \u0627\u0634\u062A\u06C1\u0627\u0631\u0628\u0627\u0632\u06CC \u0627\u0648\u0631 \u0631\u06CC \u0679\u0627\u0631\u06AF\u06CC\u0679\u0646\u06AF \u06A9\u06D2 \u0644\u06CC\u06D2 \u0627\u0633\u062A\u0639\u0645\u0627\u0644 \u06C1\u0648\u062A\u06CC \u06C1\u06CC\u06BA\u06D4\" },\r\n functional: { title: \"\u0641\u0639\u0644\u06CC\u0627\u062A\u06CC \u06A9\u0648\u06A9\u06CC\u0632\", desc: \"\u0632\u0628\u0627\u0646 \u0627\u0648\u0631 \u062A\u06BE\u06CC\u0645 \u062C\u06CC\u0633\u06CC \u062A\u0631\u062C\u06CC\u062D\u0627\u062A \u06CC\u0627\u062F \u0631\u06A9\u06BE\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0627\u0633\u062A\u0639\u0645\u0627\u0644 \u06C1\u0648\u062A\u06CC \u06C1\u06CC\u06BA\u06D4\" }\r\n },\r\n placeholder: {\r\n title: \"\u0645\u0648\u0627\u062F \u0628\u0644\u0627\u06A9 \u06C1\u06D2\",\r\n desc: \"\u0627\u0633 \u0645\u0648\u0627\u062F \u06A9\u0648 \u062F\u06CC\u06A9\u06BE\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0622\u067E \u06A9\u0648 {category} \u06A9\u0648\u06A9\u06CC\u0632 \u06A9\u06CC \u0627\u062C\u0627\u0632\u062A \u062F\u06CC\u0646\u06CC \u06C1\u0648\u06AF\u06CC\u06D4\",\r\n cta: \"\u0627\u062C\u0627\u0632\u062A \u062F\u06CC\u06BA\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/fr.js \u2014 French translations\r\n\r\nexport default {\r\n title: \"Pr\u00E9f\u00E9rences des Cookies\",\r\n intro: \"Ce site utilise des cookies pour am\u00E9liorer votre exp\u00E9rience. Consultez notre Politique de Cookies pour plus de d\u00E9tails.\",\r\n policyLink: \"Politique de Cookies\",\r\n acceptAll: \"Tout Accepter\",\r\n rejectAll: \"Tout Refuser\",\r\n preferences: \"Pr\u00E9f\u00E9rences\",\r\n save: \"Enregistrer\",\r\n close: \"Fermer\",\r\n cat: {\r\n essential: { title: \"Cookies Essentiels\", desc: \"N\u00E9cessaires au fonctionnement du site. Ne peuvent pas \u00EAtre d\u00E9sactiv\u00E9s.\", always: \"Toujours actif\" },\r\n analytics: { title: \"Cookies Analytiques\", desc: \"Utilis\u00E9s pour collecter des statistiques de visite anonymes.\" },\r\n marketing: { title: \"Cookies Marketing\", desc: \"Utilis\u00E9s pour la publicit\u00E9 personnalis\u00E9e et le reciblage.\" },\r\n functional: { title: \"Cookies Fonctionnels\",desc: \"Utilis\u00E9s pour m\u00E9moriser vos pr\u00E9f\u00E9rences.\" }\r\n },\r\n placeholder: {\r\n title: \"Contenu bloqu\u00E9\",\r\n desc: \"Vous devez autoriser les cookies {category} pour voir ce contenu.\",\r\n cta: \"Autoriser\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/ru.js \u2014 Russian translations\r\n\r\nexport default {\r\n title: \"\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0444\u0430\u0439\u043B\u043E\u0432 cookie\",\r\n intro: \"\u042D\u0442\u043E\u0442 \u0441\u0430\u0439\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442 \u0444\u0430\u0439\u043B\u044B cookie \u0434\u043B\u044F \u0443\u043B\u0443\u0447\u0448\u0435\u043D\u0438\u044F \u0432\u0430\u0448\u0435\u0433\u043E \u043E\u043F\u044B\u0442\u0430. \u041F\u043E\u0434\u0440\u043E\u0431\u043D\u043E\u0441\u0442\u0438 \u0432 \u041F\u043E\u043B\u0438\u0442\u0438\u043A\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F cookie.\",\r\n policyLink: \"\u041F\u043E\u043B\u0438\u0442\u0438\u043A\u0430 cookie\",\r\n acceptAll: \"\u041F\u0440\u0438\u043D\u044F\u0442\u044C \u0432\u0441\u0435\",\r\n rejectAll: \"\u041E\u0442\u043A\u043B\u043E\u043D\u0438\u0442\u044C \u0432\u0441\u0435\",\r\n preferences: \"\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438\",\r\n save: \"\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0432\u044B\u0431\u043E\u0440\",\r\n close: \"\u0417\u0430\u043A\u0440\u044B\u0442\u044C\",\r\n cat: {\r\n essential: { title: \"\u041E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0444\u0430\u0439\u043B\u044B cookie\", desc: \"\u041D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u044B \u0434\u043B\u044F \u0440\u0430\u0431\u043E\u0442\u044B \u0441\u0430\u0439\u0442\u0430. \u041D\u0435 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u043E\u0442\u043A\u043B\u044E\u0447\u0435\u043D\u044B.\", always: \"\u0412\u0441\u0435\u0433\u0434\u0430 \u0430\u043A\u0442\u0438\u0432\u043D\u044B\" },\r\n analytics: { title: \"\u0410\u043D\u0430\u043B\u0438\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0435 cookie\", desc: \"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u044E\u0442\u0441\u044F \u0434\u043B\u044F \u0441\u0431\u043E\u0440\u0430 \u0430\u043D\u043E\u043D\u0438\u043C\u043D\u043E\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0438 \u043F\u043E\u0441\u0435\u0449\u0435\u043D\u0438\u0439.\" },\r\n marketing: { title: \"\u041C\u0430\u0440\u043A\u0435\u0442\u0438\u043D\u0433\u043E\u0432\u044B\u0435 cookie\", desc: \"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u044E\u0442\u0441\u044F \u0434\u043B\u044F \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0439 \u0440\u0435\u043A\u043B\u0430\u043C\u044B \u0438 \u0440\u0435\u0442\u0430\u0440\u0433\u0435\u0442\u0438\u043D\u0433\u0430.\" },\r\n functional: { title: \"\u0424\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0435 cookie\", desc: \"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u044E\u0442\u0441\u044F \u0434\u043B\u044F \u0437\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u043D\u0438\u044F \u0432\u0430\u0448\u0438\u0445 \u043F\u0440\u0435\u0434\u043F\u043E\u0447\u0442\u0435\u043D\u0438\u0439.\" }\r\n },\r\n placeholder: {\r\n title: \"\u041A\u043E\u043D\u0442\u0435\u043D\u0442 \u0437\u0430\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043D\",\r\n desc: \"\u0427\u0442\u043E\u0431\u044B \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u044D\u0442\u043E\u0442 \u043A\u043E\u043D\u0442\u0435\u043D\u0442, \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u0435 \u0444\u0430\u0439\u043B\u044B cookie \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u0438 {category}.\",\r\n cta: \"\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/de.js \u2014 German translations\r\n\r\nexport default {\r\n title: \"Cookie-Einstellungen\",\r\n intro: \"Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Weitere Informationen in unserer Cookie-Richtlinie.\",\r\n policyLink: \"Cookie-Richtlinie\",\r\n acceptAll: \"Alle akzeptieren\",\r\n rejectAll: \"Alle ablehnen\",\r\n preferences: \"Einstellungen\",\r\n save: \"Auswahl speichern\",\r\n close: \"Schlie\u00DFen\",\r\n cat: {\r\n essential: { title: \"Notwendige Cookies\", desc: \"F\u00FCr die Grundfunktionen der Website erforderlich. K\u00F6nnen nicht deaktiviert werden.\", always: \"Immer aktiv\" },\r\n analytics: { title: \"Analyse-Cookies\", desc: \"Werden verwendet, um anonyme Besuchsstatistiken zu sammeln.\" },\r\n marketing: { title: \"Marketing-Cookies\", desc: \"Werden f\u00FCr personalisierte Werbung und Retargeting verwendet.\" },\r\n functional: { title: \"Funktionale Cookies\",desc: \"Werden verwendet, um Einstellungen wie Sprache und Theme zu speichern.\" }\r\n },\r\n placeholder: {\r\n title: \"Inhalt blockiert\",\r\n desc: \"Sie m\u00FCssen {category}-Cookies erlauben, um diesen Inhalt anzuzeigen.\",\r\n cta: \"Erlauben\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/he.js \u2014 Hebrew translations\r\n\r\nexport default {\r\n title: \"\u05D4\u05E2\u05D3\u05E4\u05D5\u05EA \u05E2\u05D5\u05D2\u05D9\u05D5\u05EA\",\r\n intro: \"\u05D0\u05EA\u05E8 \u05D6\u05D4 \u05DE\u05E9\u05EA\u05DE\u05E9 \u05D1\u05E2\u05D5\u05D2\u05D9\u05D5\u05EA \u05DC\u05E9\u05D9\u05E4\u05D5\u05E8 \u05D7\u05D5\u05D5\u05D9\u05EA\u05DA. \u05E8\u05D0\u05D4 \u05D0\u05EA \u05DE\u05D3\u05D9\u05E0\u05D9\u05D5\u05EA \u05D4\u05E2\u05D5\u05D2\u05D9\u05D5\u05EA \u05E9\u05DC\u05E0\u05D5 \u05DC\u05E4\u05E8\u05D8\u05D9\u05DD.\",\r\n policyLink: \"\u05DE\u05D3\u05D9\u05E0\u05D9\u05D5\u05EA \u05E2\u05D5\u05D2\u05D9\u05D5\u05EA\",\r\n acceptAll: \"\u05E7\u05D1\u05DC \u05D4\u05DB\u05DC\",\r\n rejectAll: \"\u05D3\u05D7\u05D4 \u05D4\u05DB\u05DC\",\r\n preferences: \"\u05D4\u05E2\u05D3\u05E4\u05D5\u05EA\",\r\n save: \"\u05E9\u05DE\u05D5\u05E8 \u05D1\u05D7\u05D9\u05E8\u05D5\u05EA\",\r\n close: \"\u05E1\u05D2\u05D5\u05E8\",\r\n cat: {\r\n essential: { title: \"\u05E2\u05D5\u05D2\u05D9\u05D5\u05EA \u05D7\u05D9\u05D5\u05E0\u05D9\u05D5\u05EA\", desc: \"\u05E0\u05D3\u05E8\u05E9\u05D5\u05EA \u05DC\u05EA\u05E4\u05E7\u05D5\u05D3 \u05D4\u05D0\u05EA\u05E8. \u05DC\u05D0 \u05E0\u05D9\u05EA\u05DF \u05DC\u05D4\u05E9\u05D1\u05D9\u05EA.\", always: \"\u05E4\u05E2\u05D9\u05DC \u05EA\u05DE\u05D9\u05D3\" },\r\n analytics: { title: \"\u05E2\u05D5\u05D2\u05D9\u05D5\u05EA \u05E0\u05D9\u05EA\u05D5\u05D7\", desc: \"\u05DE\u05E9\u05DE\u05E9\u05D5\u05EA \u05DC\u05D0\u05D9\u05E1\u05D5\u05E3 \u05E1\u05D8\u05D8\u05D9\u05E1\u05D8\u05D9\u05E7\u05D5\u05EA \u05D1\u05D9\u05E7\u05D5\u05E8 \u05D0\u05E0\u05D5\u05E0\u05D9\u05DE\u05D9\u05D5\u05EA.\" },\r\n marketing: { title: \"\u05E2\u05D5\u05D2\u05D9\u05D5\u05EA \u05E9\u05D9\u05D5\u05D5\u05E7\", desc: \"\u05DE\u05E9\u05DE\u05E9\u05D5\u05EA \u05DC\u05E4\u05E8\u05E1\u05D5\u05DD \u05DE\u05D5\u05EA\u05D0\u05DD \u05D0\u05D9\u05E9\u05D9\u05EA \u05D5\u05E8\u05D9\u05DE\u05E8\u05E7\u05D8\u05D9\u05E0\u05D2.\" },\r\n functional: { title: \"\u05E2\u05D5\u05D2\u05D9\u05D5\u05EA \u05E4\u05D5\u05E0\u05E7\u05E6\u05D9\u05D5\u05E0\u05DC\u05D9\u05D5\u05EA\",desc: \"\u05DE\u05E9\u05DE\u05E9\u05D5\u05EA \u05DC\u05D6\u05DB\u05D9\u05E8\u05EA \u05D4\u05E2\u05D3\u05E4\u05D5\u05EA \u05DB\u05DE\u05D5 \u05E9\u05E4\u05D4 \u05D5\u05E2\u05D9\u05E6\u05D5\u05D1.\" }\r\n },\r\n placeholder: {\r\n title: \"\u05D4\u05EA\u05D5\u05DB\u05DF \u05D7\u05E1\u05D5\u05DD\",\r\n desc: \"\u05E2\u05DC\u05D9\u05DA \u05DC\u05D0\u05E9\u05E8 \u05E2\u05D5\u05D2\u05D9\u05D5\u05EA {category} \u05DB\u05D3\u05D9 \u05DC\u05E6\u05E4\u05D5\u05EA \u05D1\u05EA\u05D5\u05DB\u05DF \u05D6\u05D4.\",\r\n cta: \"\u05D0\u05E4\u05E9\u05E8\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/uk.js \u2014 Ukrainian translations\r\n\r\nexport default {\r\n title: \"\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0444\u0430\u0439\u043B\u0456\u0432 cookie\",\r\n intro: \"\u0426\u0435\u0439 \u0441\u0430\u0439\u0442 \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0454 \u0444\u0430\u0439\u043B\u0438 cookie \u0434\u043B\u044F \u043F\u043E\u043A\u0440\u0430\u0449\u0435\u043D\u043D\u044F \u0432\u0430\u0448\u043E\u0433\u043E \u0434\u043E\u0441\u0432\u0456\u0434\u0443. \u0414\u0438\u0432\u0456\u0442\u044C\u0441\u044F \u043D\u0430\u0448\u0443 \u041F\u043E\u043B\u0456\u0442\u0438\u043A\u0443 cookie.\",\r\n policyLink: \"\u041F\u043E\u043B\u0456\u0442\u0438\u043A\u0430 cookie\",\r\n acceptAll: \"\u041F\u0440\u0438\u0439\u043D\u044F\u0442\u0438 \u0432\u0441\u0456\",\r\n rejectAll: \"\u0412\u0456\u0434\u0445\u0438\u043B\u0438\u0442\u0438 \u0432\u0441\u0456\",\r\n preferences: \"\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F\",\r\n save: \"\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u0432\u0438\u0431\u0456\u0440\",\r\n close: \"\u0417\u0430\u043A\u0440\u0438\u0442\u0438\",\r\n cat: {\r\n essential: { title: \"\u041E\u0431\u043E\u0432'\u044F\u0437\u043A\u043E\u0432\u0456 cookie\", desc: \"\u041D\u0435\u043E\u0431\u0445\u0456\u0434\u043D\u0456 \u0434\u043B\u044F \u0440\u043E\u0431\u043E\u0442\u0438 \u0441\u0430\u0439\u0442\u0443. \u041D\u0435 \u043C\u043E\u0436\u0443\u0442\u044C \u0431\u0443\u0442\u0438 \u0432\u0438\u043C\u043A\u043D\u0435\u043D\u0456.\", always: \"\u0417\u0430\u0432\u0436\u0434\u0438 \u0430\u043A\u0442\u0438\u0432\u043D\u0456\" },\r\n analytics: { title: \"\u0410\u043D\u0430\u043B\u0456\u0442\u0438\u0447\u043D\u0456 cookie\", desc: \"\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u044E\u0442\u044C\u0441\u044F \u0434\u043B\u044F \u0437\u0431\u043E\u0440\u0443 \u0430\u043D\u043E\u043D\u0456\u043C\u043D\u043E\u0457 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0438 \u0432\u0456\u0434\u0432\u0456\u0434\u0443\u0432\u0430\u043D\u044C.\" },\r\n marketing: { title: \"\u041C\u0430\u0440\u043A\u0435\u0442\u0438\u043D\u0433\u043E\u0432\u0456 cookie\", desc: \"\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u044E\u0442\u044C\u0441\u044F \u0434\u043B\u044F \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u0456\u0437\u043E\u0432\u0430\u043D\u043E\u0457 \u0440\u0435\u043A\u043B\u0430\u043C\u0438 \u0442\u0430 \u0440\u0435\u0442\u0430\u0440\u0433\u0435\u0442\u0438\u043D\u0433\u0443.\" },\r\n functional: { title: \"\u0424\u0443\u043D\u043A\u0446\u0456\u043E\u043D\u0430\u043B\u044C\u043D\u0456 cookie\",desc: \"\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u044E\u0442\u044C\u0441\u044F \u0434\u043B\u044F \u0437\u0430\u043F\u0430\u043C'\u044F\u0442\u043E\u0432\u0443\u0432\u0430\u043D\u043D\u044F \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u044C \u043C\u043E\u0432\u0438, \u0442\u0435\u043C\u0438 \u0442\u043E\u0449\u043E.\" }\r\n },\r\n placeholder: {\r\n title: \"\u0412\u043C\u0456\u0441\u0442 \u0437\u0430\u0431\u043B\u043E\u043A\u043E\u0432\u0430\u043D\u043E\",\r\n desc: \"\u0429\u043E\u0431 \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u043D\u0443\u0442\u0438 \u0446\u0435\u0439 \u0432\u043C\u0456\u0441\u0442, \u0434\u043E\u0437\u0432\u043E\u043B\u044C\u0442\u0435 \u0444\u0430\u0439\u043B\u0438 cookie \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0456\u0457 {category}.\",\r\n cta: \"\u0414\u043E\u0437\u0432\u043E\u043B\u0438\u0442\u0438\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/es.js \u2014 Spanish translations\r\n\r\nexport default {\r\n title: \"Preferencias de Cookies\",\r\n intro: \"Este sitio usa cookies para mejorar tu experiencia. Consulta nuestra Pol\u00EDtica de Cookies.\",\r\n policyLink: \"Pol\u00EDtica de Cookies\",\r\n acceptAll: \"Aceptar todo\",\r\n rejectAll: \"Rechazar todo\",\r\n preferences: \"Preferencias\",\r\n save: \"Guardar opciones\",\r\n close: \"Cerrar\",\r\n cat: {\r\n essential: { title: \"Cookies esenciales\", desc: \"Necesarias para el funcionamiento del sitio. No se pueden desactivar.\", always: \"Siempre activo\" },\r\n analytics: { title: \"Cookies anal\u00EDticas\", desc: \"Usadas para recopilar estad\u00EDsticas de visita an\u00F3nimas.\" },\r\n marketing: { title: \"Cookies de marketing\",desc: \"Usadas para publicidad personalizada y retargeting.\" },\r\n functional: { title: \"Cookies funcionales\",desc: \"Usadas para recordar preferencias como idioma o tema.\" }\r\n },\r\n placeholder: {\r\n title: \"Contenido bloqueado\",\r\n desc: \"Necesitas permitir las cookies de {category} para ver este contenido.\",\r\n cta: \"Permitir\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/it.js \u2014 Italian translations\r\n\r\nexport default {\r\n title: \"Preferenze Cookie\",\r\n intro: \"Questo sito usa i cookie per migliorare la tua esperienza. Consulta la nostra Informativa sui Cookie.\",\r\n policyLink: \"Informativa sui Cookie\",\r\n acceptAll: \"Accetta tutti\",\r\n rejectAll: \"Rifiuta tutti\",\r\n preferences: \"Preferenze\",\r\n save: \"Salva scelte\",\r\n close: \"Chiudi\",\r\n cat: {\r\n essential: { title: \"Cookie essenziali\", desc: \"Necessari per il funzionamento del sito. Non disattivabili.\", always: \"Sempre attivo\" },\r\n analytics: { title: \"Cookie analitici\", desc: \"Usati per raccogliere statistiche di visita anonime.\" },\r\n marketing: { title: \"Cookie di marketing\",desc: \"Usati per pubblicit\u00E0 personalizzata e retargeting.\" },\r\n functional: { title: \"Cookie funzionali\", desc: \"Usati per ricordare preferenze come lingua e tema.\" }\r\n },\r\n placeholder: {\r\n title: \"Contenuto bloccato\",\r\n desc: \"Devi consentire i cookie {category} per visualizzare questo contenuto.\",\r\n cta: \"Consenti\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/pt.js \u2014 Portuguese translations\r\n\r\nexport default {\r\n title: \"Prefer\u00EAncias de Cookies\",\r\n intro: \"Este site usa cookies para melhorar sua experi\u00EAncia. Consulte nossa Pol\u00EDtica de Cookies.\",\r\n policyLink: \"Pol\u00EDtica de Cookies\",\r\n acceptAll: \"Aceitar todos\",\r\n rejectAll: \"Rejeitar todos\",\r\n preferences: \"Prefer\u00EAncias\",\r\n save: \"Salvar escolhas\",\r\n close: \"Fechar\",\r\n cat: {\r\n essential: { title: \"Cookies essenciais\", desc: \"Necess\u00E1rios para o funcionamento do site. N\u00E3o podem ser desativados.\", always: \"Sempre ativo\" },\r\n analytics: { title: \"Cookies anal\u00EDticos\", desc: \"Usados para coletar estat\u00EDsticas an\u00F4nimas de visitas.\" },\r\n marketing: { title: \"Cookies de marketing\",desc: \"Usados para publicidade personalizada e retargeting.\" },\r\n functional: { title: \"Cookies funcionais\", desc: \"Usados para lembrar prefer\u00EAncias como idioma e tema.\" }\r\n },\r\n placeholder: {\r\n title: \"Conte\u00FAdo bloqueado\",\r\n desc: \"Voc\u00EA precisa permitir cookies de {category} para ver este conte\u00FAdo.\",\r\n cta: \"Permitir\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/nl.js \u2014 Dutch translations\r\n\r\nexport default {\r\n title: \"Cookie-voorkeuren\",\r\n intro: \"Deze site gebruikt cookies om uw ervaring te verbeteren. Zie ons Cookiebeleid voor details.\",\r\n policyLink: \"Cookiebeleid\",\r\n acceptAll: \"Alles accepteren\",\r\n rejectAll: \"Alles weigeren\",\r\n preferences: \"Voorkeuren\",\r\n save: \"Keuzes opslaan\",\r\n close: \"Sluiten\",\r\n cat: {\r\n essential: { title: \"Essenti\u00EBle cookies\", desc: \"Noodzakelijk voor het functioneren van de site. Kunnen niet worden uitgeschakeld.\", always: \"Altijd actief\" },\r\n analytics: { title: \"Analytische cookies\", desc: \"Gebruikt voor het verzamelen van anonieme bezoekstatistieken.\" },\r\n marketing: { title: \"Marketingcookies\", desc: \"Gebruikt voor gepersonaliseerde advertenties en retargeting.\" },\r\n functional: { title: \"Functionele cookies\", desc: \"Gebruikt om voorkeuren zoals taal en thema te onthouden.\" }\r\n },\r\n placeholder: {\r\n title: \"Inhoud geblokkeerd\",\r\n desc: \"U moet {category}-cookies toestaan om deze inhoud te bekijken.\",\r\n cta: \"Toestaan\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/pl.js \u2014 Polish translations\r\n\r\nexport default {\r\n title: \"Preferencje plik\u00F3w cookie\",\r\n intro: \"Ta strona u\u017Cywa plik\u00F3w cookie, aby poprawi\u0107 Twoje do\u015Bwiadczenia. Zobacz nasz\u0105 Polityk\u0119 plik\u00F3w cookie.\",\r\n policyLink: \"Polityka plik\u00F3w cookie\",\r\n acceptAll: \"Akceptuj wszystkie\",\r\n rejectAll: \"Odrzu\u0107 wszystkie\",\r\n preferences: \"Preferencje\",\r\n save: \"Zapisz wybory\",\r\n close: \"Zamknij\",\r\n cat: {\r\n essential: { title: \"Niezb\u0119dne pliki cookie\", desc: \"Wymagane do dzia\u0142ania strony. Nie mo\u017Cna ich wy\u0142\u0105czy\u0107.\", always: \"Zawsze aktywne\" },\r\n analytics: { title: \"Analityczne pliki cookie\", desc: \"U\u017Cywane do zbierania anonimowych statystyk odwiedzin.\" },\r\n marketing: { title: \"Marketingowe pliki cookie\", desc: \"U\u017Cywane do spersonalizowanych reklam i retargetingu.\" },\r\n functional: { title: \"Funkcjonalne pliki cookie\", desc: \"U\u017Cywane do zapami\u0119tywania preferencji takich jak j\u0119zyk i motyw.\" }\r\n },\r\n placeholder: {\r\n title: \"Tre\u015B\u0107 zablokowana\",\r\n desc: \"Musisz zezwoli\u0107 na pliki cookie {category}, aby wy\u015Bwietli\u0107 t\u0119 tre\u015B\u0107.\",\r\n cta: \"Zezw\u00F3l\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/sv.js \u2014 Swedish translations\r\n\r\nexport default {\r\n title: \"Cookie-inst\u00E4llningar\",\r\n intro: \"Den h\u00E4r webbplatsen anv\u00E4nder cookies f\u00F6r att f\u00F6rb\u00E4ttra din upplevelse. Se v\u00E5r Cookie-policy.\",\r\n policyLink: \"Cookie-policy\",\r\n acceptAll: \"Acceptera alla\",\r\n rejectAll: \"Avvisa alla\",\r\n preferences: \"Inst\u00E4llningar\",\r\n save: \"Spara val\",\r\n close: \"St\u00E4ng\",\r\n cat: {\r\n essential: { title: \"N\u00F6dv\u00E4ndiga cookies\", desc: \"Kr\u00E4vs f\u00F6r att webbplatsen ska fungera. Kan inte inaktiveras.\", always: \"Alltid aktiv\" },\r\n analytics: { title: \"Analytiska cookies\", desc: \"Anv\u00E4nds f\u00F6r att samla in anonym bes\u00F6ksstatistik.\" },\r\n marketing: { title: \"Marknadsf\u00F6ringscookies\", desc: \"Anv\u00E4nds f\u00F6r personlig annonsering och \u00E5termarknadsf\u00F6ring.\" },\r\n functional: { title: \"Funktionella cookies\", desc: \"Anv\u00E4nds f\u00F6r att komma ih\u00E5g inst\u00E4llningar som spr\u00E5k och tema.\" }\r\n },\r\n placeholder: {\r\n title: \"Inneh\u00E5ll blockerat\",\r\n desc: \"Du m\u00E5ste till\u00E5ta {category}-cookies f\u00F6r att visa detta inneh\u00E5ll.\",\r\n cta: \"Till\u00E5t\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/cs.js \u2014 Czech translations\r\n\r\nexport default {\r\n title: \"P\u0159edvolby soubor\u016F cookie\",\r\n intro: \"Tento web pou\u017E\u00EDv\u00E1 soubory cookie ke zlep\u0161en\u00ED va\u0161eho z\u00E1\u017Eitku. Viz na\u0161e Z\u00E1sady soubor\u016F cookie.\",\r\n policyLink: \"Z\u00E1sady soubor\u016F cookie\",\r\n acceptAll: \"P\u0159ijmout v\u0161e\",\r\n rejectAll: \"Odm\u00EDtnout v\u0161e\",\r\n preferences: \"P\u0159edvolby\",\r\n save: \"Ulo\u017Eit volby\",\r\n close: \"Zav\u0159\u00EDt\",\r\n cat: {\r\n essential: { title: \"Nezbytn\u00E9 soubory cookie\", desc: \"Nutn\u00E9 pro fungov\u00E1n\u00ED webu. Nelze je deaktivovat.\", always: \"V\u017Edy aktivn\u00ED\" },\r\n analytics: { title: \"Analytick\u00E9 soubory cookie\", desc: \"Slou\u017E\u00ED ke shroma\u017E\u010Fov\u00E1n\u00ED anonymn\u00EDch statistik n\u00E1v\u0161t\u011Bv.\" },\r\n marketing: { title: \"Marketingov\u00E9 soubory cookie\",desc: \"Slou\u017E\u00ED k personalizovan\u00E9 reklam\u011B a retargetingu.\" },\r\n functional: { title: \"Funk\u010Dn\u00ED soubory cookie\", desc: \"Slou\u017E\u00ED k zapamatov\u00E1n\u00ED p\u0159edvoleb jako jazyk a t\u00E9ma.\" }\r\n },\r\n placeholder: {\r\n title: \"Obsah blokov\u00E1n\",\r\n desc: \"Pro zobrazen\u00ED tohoto obsahu mus\u00EDte povolit soubory cookie {category}.\",\r\n cta: \"Povolit\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/zh.js \u2014 Simplified Chinese translations\r\n\r\nexport default {\r\n title: \"Cookie \u504F\u597D\u8BBE\u7F6E\",\r\n intro: \"\u672C\u7F51\u7AD9\u4F7F\u7528 Cookie \u6765\u6539\u5584\u60A8\u7684\u4F53\u9A8C\u3002\u8BE6\u60C5\u8BF7\u67E5\u770B\u6211\u4EEC\u7684 Cookie \u653F\u7B56\u3002\",\r\n policyLink: \"Cookie \u653F\u7B56\",\r\n acceptAll: \"\u63A5\u53D7\u5168\u90E8\",\r\n rejectAll: \"\u62D2\u7EDD\u5168\u90E8\",\r\n preferences: \"\u504F\u597D\u8BBE\u7F6E\",\r\n save: \"\u4FDD\u5B58\u9009\u62E9\",\r\n close: \"\u5173\u95ED\",\r\n cat: {\r\n essential: { title: \"\u5FC5\u8981 Cookie\", desc: \"\u7F51\u7AD9\u57FA\u672C\u529F\u80FD\u6240\u5FC5\u9700\uFF0C\u65E0\u6CD5\u7981\u7528\u3002\", always: \"\u59CB\u7EC8\u542F\u7528\" },\r\n analytics: { title: \"\u5206\u6790 Cookie\", desc: \"\u7528\u4E8E\u6536\u96C6\u533F\u540D\u8BBF\u95EE\u7EDF\u8BA1\u6570\u636E\u3002\" },\r\n marketing: { title: \"\u8425\u9500 Cookie\", desc: \"\u7528\u4E8E\u4E2A\u6027\u5316\u5E7F\u544A\u548C\u518D\u8425\u9500\u3002\" },\r\n functional: { title: \"\u529F\u80FD Cookie\", desc: \"\u7528\u4E8E\u8BB0\u4F4F\u8BED\u8A00\u3001\u4E3B\u9898\u7B49\u504F\u597D\u8BBE\u7F6E\u3002\" }\r\n },\r\n placeholder: {\r\n title: \"\u5185\u5BB9\u5DF2\u88AB\u963B\u6B62\",\r\n desc: \"\u60A8\u9700\u8981\u5141\u8BB8 {category} Cookie \u624D\u80FD\u67E5\u770B\u6B64\u5185\u5BB9\u3002\",\r\n cta: \"\u5141\u8BB8\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/zh-TW.js \u2014 Traditional Chinese translations\r\n\r\nexport default {\r\n title: \"Cookie \u504F\u597D\u8A2D\u5B9A\",\r\n intro: \"\u672C\u7DB2\u7AD9\u4F7F\u7528 Cookie \u4F86\u6539\u5584\u60A8\u7684\u9AD4\u9A57\u3002\u8A73\u60C5\u8ACB\u67E5\u770B\u6211\u5011\u7684 Cookie \u653F\u7B56\u3002\",\r\n policyLink: \"Cookie \u653F\u7B56\",\r\n acceptAll: \"\u63A5\u53D7\u5168\u90E8\",\r\n rejectAll: \"\u62D2\u7D55\u5168\u90E8\",\r\n preferences: \"\u504F\u597D\u8A2D\u5B9A\",\r\n save: \"\u5132\u5B58\u9078\u64C7\",\r\n close: \"\u95DC\u9589\",\r\n cat: {\r\n essential: { title: \"\u5FC5\u8981 Cookie\", desc: \"\u7DB2\u7AD9\u57FA\u672C\u529F\u80FD\u6240\u5FC5\u9700\uFF0C\u7121\u6CD5\u505C\u7528\u3002\", always: \"\u59CB\u7D42\u555F\u7528\" },\r\n analytics: { title: \"\u5206\u6790 Cookie\", desc: \"\u7528\u65BC\u6536\u96C6\u533F\u540D\u8A2A\u554F\u7D71\u8A08\u8CC7\u6599\u3002\" },\r\n marketing: { title: \"\u884C\u92B7 Cookie\", desc: \"\u7528\u65BC\u500B\u4EBA\u5316\u5EE3\u544A\u548C\u518D\u884C\u92B7\u3002\" },\r\n functional: { title: \"\u529F\u80FD Cookie\", desc: \"\u7528\u65BC\u8A18\u4F4F\u8A9E\u8A00\u3001\u4E3B\u984C\u7B49\u504F\u597D\u8A2D\u5B9A\u3002\" }\r\n },\r\n placeholder: {\r\n title: \"\u5167\u5BB9\u5DF2\u88AB\u5C01\u9396\",\r\n desc: \"\u60A8\u9700\u8981\u5141\u8A31 {category} Cookie \u624D\u80FD\u6AA2\u8996\u6B64\u5167\u5BB9\u3002\",\r\n cta: \"\u5141\u8A31\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/ja.js \u2014 Japanese translations\r\n\r\nexport default {\r\n title: \"Cookie\u306E\u8A2D\u5B9A\",\r\n intro: \"\u3053\u306E\u30B5\u30A4\u30C8\u306F\u30A8\u30AF\u30B9\u30DA\u30EA\u30A8\u30F3\u30B9\u3092\u5411\u4E0A\u3055\u305B\u308B\u305F\u3081\u306BCookie\u3092\u4F7F\u7528\u3057\u307E\u3059\u3002\u8A73\u7D30\u306FCookie\u30DD\u30EA\u30B7\u30FC\u3092\u3054\u89A7\u304F\u3060\u3055\u3044\u3002\",\r\n policyLink: \"Cookie\u30DD\u30EA\u30B7\u30FC\",\r\n acceptAll: \"\u3059\u3079\u3066\u627F\u8A8D\",\r\n rejectAll: \"\u3059\u3079\u3066\u62D2\u5426\",\r\n preferences: \"\u8A2D\u5B9A\",\r\n save: \"\u9078\u629E\u3092\u4FDD\u5B58\",\r\n close: \"\u9589\u3058\u308B\",\r\n cat: {\r\n essential: { title: \"\u5FC5\u9808Cookie\", desc: \"\u30B5\u30A4\u30C8\u306E\u57FA\u672C\u6A5F\u80FD\u306B\u5FC5\u8981\u3067\u3059\u3002\u7121\u52B9\u306B\u3067\u304D\u307E\u305B\u3093\u3002\", always: \"\u5E38\u306B\u6709\u52B9\" },\r\n analytics: { title: \"\u5206\u6790Cookie\", desc: \"\u533F\u540D\u306E\u8A2A\u554F\u7D71\u8A08\u3092\u53CE\u96C6\u3059\u308B\u305F\u3081\u306B\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002\" },\r\n marketing: { title: \"\u30DE\u30FC\u30B1\u30C6\u30A3\u30F3\u30B0Cookie\",desc: \"\u30D1\u30FC\u30BD\u30CA\u30E9\u30A4\u30BA\u3055\u308C\u305F\u5E83\u544A\u3068\u30EA\u30BF\u30FC\u30B2\u30C6\u30A3\u30F3\u30B0\u306B\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002\" },\r\n functional: { title: \"\u6A5F\u80FDCookie\", desc: \"\u8A00\u8A9E\u3084\u30C6\u30FC\u30DE\u306A\u3069\u306E\u8A2D\u5B9A\u3092\u8A18\u61B6\u3059\u308B\u305F\u3081\u306B\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002\" }\r\n },\r\n placeholder: {\r\n title: \"\u30B3\u30F3\u30C6\u30F3\u30C4\u304C\u30D6\u30ED\u30C3\u30AF\u3055\u308C\u307E\u3057\u305F\",\r\n desc: \"\u3053\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u8868\u793A\u3059\u308B\u306B\u306F{category}Cookie\u3092\u8A31\u53EF\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\",\r\n cta: \"\u8A31\u53EF\u3059\u308B\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/ko.js \u2014 Korean translations\r\n\r\nexport default {\r\n title: \"\uCFE0\uD0A4 \uD658\uACBD\uC124\uC815\",\r\n intro: \"\uC774 \uC0AC\uC774\uD2B8\uB294 \uACBD\uD5D8\uC744 \uD5A5\uC0C1\uC2DC\uD0A4\uAE30 \uC704\uD574 \uCFE0\uD0A4\uB97C \uC0AC\uC6A9\uD569\uB2C8\uB2E4. \uC790\uC138\uD55C \uB0B4\uC6A9\uC740 \uCFE0\uD0A4 \uC815\uCC45\uC744 \uD655\uC778\uD558\uC138\uC694.\",\r\n policyLink: \"\uCFE0\uD0A4 \uC815\uCC45\",\r\n acceptAll: \"\uBAA8\uB450 \uC218\uB77D\",\r\n rejectAll: \"\uBAA8\uB450 \uAC70\uBD80\",\r\n preferences: \"\uD658\uACBD\uC124\uC815\",\r\n save: \"\uC120\uD0DD \uC800\uC7A5\",\r\n close: \"\uB2EB\uAE30\",\r\n cat: {\r\n essential: { title: \"\uD544\uC218 \uCFE0\uD0A4\", desc: \"\uC0AC\uC774\uD2B8 \uAE30\uB2A5\uC5D0 \uD544\uC694\uD558\uBA70 \uBE44\uD65C\uC131\uD654\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\", always: \"\uD56D\uC0C1 \uD65C\uC131\" },\r\n analytics: { title: \"\uBD84\uC11D \uCFE0\uD0A4\", desc: \"\uC775\uBA85 \uBC29\uBB38 \uD1B5\uACC4 \uC218\uC9D1\uC5D0 \uC0AC\uC6A9\uB429\uB2C8\uB2E4.\" },\r\n marketing: { title: \"\uB9C8\uCF00\uD305 \uCFE0\uD0A4\", desc: \"\uB9DE\uCDA4\uD615 \uAD11\uACE0 \uBC0F \uB9AC\uD0C0\uAC8C\uD305\uC5D0 \uC0AC\uC6A9\uB429\uB2C8\uB2E4.\" },\r\n functional: { title: \"\uAE30\uB2A5\uC131 \uCFE0\uD0A4\", desc: \"\uC5B8\uC5B4, \uD14C\uB9C8 \uB4F1\uC758 \uD658\uACBD\uC124\uC815\uC744 \uAE30\uC5B5\uD558\uB294 \uB370 \uC0AC\uC6A9\uB429\uB2C8\uB2E4.\" }\r\n },\r\n placeholder: {\r\n title: \"\uCF58\uD150\uCE20\uAC00 \uCC28\uB2E8\uB418\uC5C8\uC2B5\uB2C8\uB2E4\",\r\n desc: \"\uC774 \uCF58\uD150\uCE20\uB97C \uBCF4\uB824\uBA74 {category} \uCFE0\uD0A4\uB97C \uD5C8\uC6A9\uD574\uC57C \uD569\uB2C8\uB2E4.\",\r\n cta: \"\uD5C8\uC6A9\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/id.js \u2014 Indonesian translations\r\n\r\nexport default {\r\n title: \"Preferensi Cookie\",\r\n intro: \"Situs ini menggunakan cookie untuk meningkatkan pengalaman Anda. Lihat Kebijakan Cookie kami.\",\r\n policyLink: \"Kebijakan Cookie\",\r\n acceptAll: \"Terima Semua\",\r\n rejectAll: \"Tolak Semua\",\r\n preferences: \"Preferensi\",\r\n save: \"Simpan Pilihan\",\r\n close: \"Tutup\",\r\n cat: {\r\n essential: { title: \"Cookie Esensial\", desc: \"Diperlukan untuk fungsi dasar situs. Tidak dapat dinonaktifkan.\", always: \"Selalu aktif\" },\r\n analytics: { title: \"Cookie Analitik\", desc: \"Digunakan untuk mengumpulkan statistik kunjungan anonim.\" },\r\n marketing: { title: \"Cookie Pemasaran\",desc: \"Digunakan untuk iklan yang dipersonalisasi dan retargeting.\" },\r\n functional: { title: \"Cookie Fungsional\",desc: \"Digunakan untuk mengingat preferensi seperti bahasa dan tema.\" }\r\n },\r\n placeholder: {\r\n title: \"Konten diblokir\",\r\n desc: \"Anda harus mengizinkan cookie {category} untuk melihat konten ini.\",\r\n cta: \"Izinkan\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/hi.js \u2014 Hindi translations\r\n\r\nexport default {\r\n title: \"\u0915\u0941\u0915\u0940 \u092A\u094D\u0930\u093E\u0925\u092E\u093F\u0915\u0924\u093E\u090F\u0902\",\r\n intro: \"\u092F\u0939 \u0938\u093E\u0907\u091F \u0906\u092A\u0915\u0947 \u0905\u0928\u0941\u092D\u0935 \u0915\u094B \u092C\u0947\u0939\u0924\u0930 \u092C\u0928\u093E\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0915\u0941\u0915\u0940\u091C\u093C \u0915\u093E \u0909\u092A\u092F\u094B\u0917 \u0915\u0930\u0924\u0940 \u0939\u0948\u0964 \u0935\u093F\u0935\u0930\u0923 \u0915\u0947 \u0932\u093F\u090F \u0939\u092E\u093E\u0930\u0940 \u0915\u0941\u0915\u0940 \u0928\u0940\u0924\u093F \u0926\u0947\u0916\u0947\u0902\u0964\",\r\n policyLink: \"\u0915\u0941\u0915\u0940 \u0928\u0940\u0924\u093F\",\r\n acceptAll: \"\u0938\u092D\u0940 \u0938\u094D\u0935\u0940\u0915\u093E\u0930 \u0915\u0930\u0947\u0902\",\r\n rejectAll: \"\u0938\u092D\u0940 \u0905\u0938\u094D\u0935\u0940\u0915\u093E\u0930 \u0915\u0930\u0947\u0902\",\r\n preferences: \"\u092A\u094D\u0930\u093E\u0925\u092E\u093F\u0915\u0924\u093E\u090F\u0902\",\r\n save: \"\u0935\u093F\u0915\u0932\u094D\u092A \u0938\u0939\u0947\u091C\u0947\u0902\",\r\n close: \"\u092C\u0902\u0926 \u0915\u0930\u0947\u0902\",\r\n cat: {\r\n essential: { title: \"\u0906\u0935\u0936\u094D\u092F\u0915 \u0915\u0941\u0915\u0940\u091C\u093C\", desc: \"\u0938\u093E\u0907\u091F \u0915\u0947 \u0915\u093E\u0930\u094D\u092F \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0906\u0935\u0936\u094D\u092F\u0915\u0964 \u0905\u0915\u094D\u0937\u092E \u0928\u0939\u0940\u0902 \u0915\u0940 \u091C\u093E \u0938\u0915\u0924\u0940\u0902\u0964\", always: \"\u0939\u092E\u0947\u0936\u093E \u0938\u0915\u094D\u0930\u093F\u092F\" },\r\n analytics: { title: \"\u0935\u093F\u0936\u094D\u0932\u0947\u0937\u0923 \u0915\u0941\u0915\u0940\u091C\u093C\", desc: \"\u0905\u091C\u094D\u091E\u093E\u0924 \u0935\u093F\u091C\u093C\u093F\u091F \u0906\u0901\u0915\u0921\u093C\u0947 \u090F\u0915\u0924\u094D\u0930 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0909\u092A\u092F\u094B\u0917 \u0915\u0940 \u091C\u093E\u0924\u0940 \u0939\u0948\u0902\u0964\" },\r\n marketing: { title: \"\u092E\u093E\u0930\u094D\u0915\u0947\u091F\u093F\u0902\u0917 \u0915\u0941\u0915\u0940\u091C\u093C\", desc: \"\u0935\u0948\u092F\u0915\u094D\u0924\u093F\u0915\u0943\u0924 \u0935\u093F\u091C\u094D\u091E\u093E\u092A\u0928 \u0914\u0930 \u0930\u093F\u091F\u093E\u0930\u094D\u0917\u0947\u091F\u093F\u0902\u0917 \u0915\u0947 \u0932\u093F\u090F \u0909\u092A\u092F\u094B\u0917 \u0915\u0940 \u091C\u093E\u0924\u0940 \u0939\u0948\u0902\u0964\" },\r\n functional: { title: \"\u0915\u093E\u0930\u094D\u092F\u093E\u0924\u094D\u092E\u0915 \u0915\u0941\u0915\u0940\u091C\u093C\", desc: \"\u092D\u093E\u0937\u093E, \u0925\u0940\u092E \u091C\u0948\u0938\u0940 \u092A\u094D\u0930\u093E\u0925\u092E\u093F\u0915\u0924\u093E\u0913\u0902 \u0915\u094B \u092F\u093E\u0926 \u0930\u0916\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0909\u092A\u092F\u094B\u0917 \u0915\u0940 \u091C\u093E\u0924\u0940 \u0939\u0948\u0902\u0964\" }\r\n },\r\n placeholder: {\r\n title: \"\u0938\u093E\u092E\u0917\u094D\u0930\u0940 \u0905\u0935\u0930\u0941\u0926\u094D\u0927 \u0939\u0948\",\r\n desc: \"\u0907\u0938 \u0938\u093E\u092E\u0917\u094D\u0930\u0940 \u0915\u094B \u0926\u0947\u0916\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0906\u092A\u0915\u094B {category} \u0915\u0941\u0915\u0940\u091C\u093C \u0915\u0940 \u0905\u0928\u0941\u092E\u0924\u093F \u0926\u0947\u0928\u0940 \u0939\u094B\u0917\u0940\u0964\",\r\n cta: \"\u0905\u0928\u0941\u092E\u0924\u093F \u0926\u0947\u0902\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/index.js \u2014 aggregates 23 translation modules and exposes lookup with fallback\r\n\r\nimport tr from \"./translations/tr.js\";\r\nimport en from \"./translations/en.js\";\r\nimport ar from \"./translations/ar.js\";\r\nimport fa from \"./translations/fa.js\";\r\nimport ur from \"./translations/ur.js\";\r\nimport fr from \"./translations/fr.js\";\r\nimport ru from \"./translations/ru.js\";\r\nimport de from \"./translations/de.js\";\r\nimport he from \"./translations/he.js\";\r\nimport uk from \"./translations/uk.js\";\r\nimport es from \"./translations/es.js\";\r\nimport it from \"./translations/it.js\";\r\nimport pt from \"./translations/pt.js\";\r\nimport nl from \"./translations/nl.js\";\r\nimport pl from \"./translations/pl.js\";\r\nimport sv from \"./translations/sv.js\";\r\nimport cs from \"./translations/cs.js\";\r\nimport zh from \"./translations/zh.js\";\r\nimport zhTW from \"./translations/zh-TW.js\";\r\nimport ja from \"./translations/ja.js\";\r\nimport ko from \"./translations/ko.js\";\r\nimport id from \"./translations/id.js\";\r\nimport hi from \"./translations/hi.js\";\r\n\r\nexport const DEFAULT_LOCALE = \"tr\";\r\n\r\nexport const TRANSLATIONS = {\r\n tr, en, ar, fa, ur,\r\n fr, ru, de, he, uk,\r\n es, it, pt, nl, pl, sv, cs,\r\n zh, \"zh-TW\": zhTW, ja, ko,\r\n id, hi,\r\n};\r\n\r\nexport const getTranslation = (locale) =>\r\n TRANSLATIONS[locale] || TRANSLATIONS[DEFAULT_LOCALE];\r\n", "// blakfy-cookie/src/ui/styles.js \u2014 idempotent stylesheet injection for banner, modal, badge, status\r\n// Layout architecture is locked \u2014 only --blakfy-accent is overridable\r\n\r\nconst STYLE_ID = \"blakfy-cookie-styles\";\r\n\r\nconst RULES = [\r\n \"/* Layout architecture is locked \u2014 only --blakfy-accent is overridable */\",\r\n // Modal mode (centered, dimmed backdrop)\r\n \".blakfy-overlay.modal{position:fixed !important;inset:0;background:rgba(0,0,0,.4);z-index:2147483646 !important;display:flex !important;align-items:center;justify-content:center;padding:16px}\",\r\n // Widget mode (transparent, no backdrop)\r\n \".blakfy-overlay.widget{position:fixed !important;inset:auto;background:transparent;padding:0;display:block !important;z-index:2147483646 !important;pointer-events:none}\",\r\n \".blakfy-overlay.widget .blakfy-card{width:min(96vw,1100px);max-width:none;border-radius:8px;position:relative;pointer-events:auto;padding-bottom:40px}\",\r\n // Widget butonlar\u0131 kart geni\u015Fli\u011Fine e\u015Fit da\u011F\u0131l\u0131ml\u0131\r\n \".blakfy-overlay.widget .blakfy-actions{flex-wrap:nowrap}\",\r\n \".blakfy-overlay.widget .blakfy-actions .blakfy-btn{flex:1;min-width:0;min-height:36px;padding:8px 16px}\",\r\n // Position modifiers (widget)\r\n \".blakfy-overlay.widget.bottom-center{bottom:16px;left:50%;right:auto;top:auto;transform:translateX(-50%)}\",\r\n \".blakfy-overlay.widget.bottom-right{bottom:16px;right:16px;left:auto;top:auto}\",\r\n \".blakfy-overlay.widget.bottom-left{bottom:16px;left:16px;right:auto;top:auto}\",\r\n \".blakfy-overlay.widget.top-center{top:16px;left:50%;right:auto;bottom:auto;transform:translateX(-50%)}\",\r\n \".blakfy-overlay.widget.top-right{top:16px;right:16px;left:auto;bottom:auto}\",\r\n \".blakfy-overlay.widget.top-left{top:16px;left:16px;right:auto;bottom:auto}\",\r\n \".blakfy-overlay.widget.center{top:50%;left:50%;right:auto;bottom:auto;transform:translate(-50%,-50%)}\",\r\n // Card base (shared by banner + modal)\r\n \".blakfy-card{background:#fff;color:#222;border-radius:16px;max-width:560px;width:100%;padding:24px;border:3px solid var(--blakfy-accent,#3E5C3A);font-family:system-ui,-apple-system,sans-serif;line-height:1.5;position:relative}\",\r\n \".blakfy-card[dir=rtl]{text-align:right}\",\r\n \".blakfy-card h2{margin:0 0 8px;font-size:18px;font-weight:600}\",\r\n \".blakfy-card p{margin:0 0 16px;font-size:14px;color:#444}\",\r\n \".blakfy-card a{color:var(--blakfy-accent,#3E5C3A);text-decoration:underline}\",\r\n // Actions\r\n \".blakfy-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}\",\r\n // Buttons (3px radius per spec)\r\n \".blakfy-btn{flex:1;min-width:120px;min-height:44px;padding:12px 16px;border:1px solid #ddd;border-radius:3px;background:#fff;color:#222;font-size:14px;font-weight:500;cursor:pointer;transition:transform .1s,background .15s}\",\r\n \".blakfy-btn:hover{transform:translateY(-1px)}\",\r\n \".blakfy-btn-primary{background:var(--blakfy-accent,#3E5C3A);color:#fff;border-color:transparent}\",\r\n \".blakfy-cat{padding:12px 0;border-top:1px solid #eee;display:flex;align-items:flex-start;gap:12px}\",\r\n \".blakfy-cat:first-of-type{border-top:none}\",\r\n \".blakfy-cat-text{flex:1}\",\r\n \".blakfy-cat-text strong{display:block;font-size:14px;margin-bottom:2px}\",\r\n \".blakfy-cat-text span{font-size:13px;color:#666}\",\r\n // Switches (pill-shaped \u2014 UX standard)\r\n \".blakfy-switch{flex-shrink:0;width:44px;height:24px;border-radius:999px;background:#ccc;position:relative;cursor:pointer;border:none;padding:0}\",\r\n \".blakfy-switch[aria-checked=true]{background:var(--blakfy-accent,#3E5C3A)}\",\r\n \".blakfy-switch::after{content:'';position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;background:#fff;transition:transform .2s}\",\r\n \".blakfy-switch[aria-checked=true]::after{transform:translateX(20px)}\",\r\n \".blakfy-switch:disabled{opacity:.6;cursor:not-allowed}\",\r\n \".blakfy-close{position:absolute;top:12px;right:12px;background:none;border:none;font-size:20px;cursor:pointer;color:#666;width:32px;height:32px;border-radius:50%}\",\r\n \".blakfy-close:hover{background:#f3f3f3}\",\r\n \"[dir=rtl] .blakfy-close{right:auto;left:12px}\",\r\n \".blakfy-badge{position:absolute;bottom:8px;right:12px;font-size:11px;opacity:0.6;transition:opacity 0.2s;display:flex !important;pointer-events:auto !important;align-items:center;gap:4px;color:#666;text-decoration:none}\",\r\n \".blakfy-badge:hover{opacity:1}\",\r\n \"[dir=rtl] .blakfy-badge{right:auto;left:12px}\",\r\n \".blakfy-status{position:fixed;bottom:0;left:0;right:0;z-index:2147483645;display:flex;align-items:center;gap:12px;padding:10px 20px;font-family:system-ui,-apple-system,sans-serif;font-size:13px;line-height:1.5}\",\r\n \".blakfy-status-msg{flex:1}\",\r\n \".blakfy-status-dismiss{background:none;border:none;color:inherit;cursor:pointer;padding:4px 10px;border-radius:6px;font-size:16px;opacity:.8;line-height:1}\",\r\n \".blakfy-status-dismiss:hover{opacity:1;background:rgba(255,255,255,.2)}\",\r\n \"@media (prefers-reduced-motion:reduce){.blakfy-btn,.blakfy-switch::after{transition:none}}\",\r\n // Responsive\r\n \"@media (max-width:1024px){.blakfy-card{max-width:440px}}\",\r\n \"@media (max-width:768px){.blakfy-card{max-width:calc(100vw - 32px);padding:18px}.blakfy-card h2{font-size:16px}.blakfy-card p{font-size:13px}.blakfy-btn{flex:1 1 100%;min-height:44px;padding:10px 14px;font-size:13px}.blakfy-overlay.widget.bottom-center,.blakfy-overlay.widget.top-center{left:16px;right:16px;transform:none}.blakfy-overlay.widget .blakfy-card{width:100%}.blakfy-overlay.widget .blakfy-actions .blakfy-btn{flex:1 1 100%;min-width:0}}\",\r\n \"@media (max-width:480px){.blakfy-overlay.widget .blakfy-card{width:100%;max-width:calc(100vw - 32px)}}\",\r\n // Tab bar\r\n \".blakfy-tabs{display:flex;border-bottom:2px solid #eee;margin:12px 0 16px;gap:0}\",\r\n \".blakfy-tab-btn{flex:1;background:none;border:none;border-bottom:2px solid transparent;margin-bottom:-2px;padding:8px 10px;font-size:13px;font-weight:500;color:#666;cursor:pointer;transition:color .15s,border-color .15s;white-space:nowrap;font-family:inherit}\",\r\n \".blakfy-tab-btn:hover{color:#222}\",\r\n \".blakfy-tab-btn--active{color:var(--blakfy-accent,#3E5C3A);border-bottom-color:var(--blakfy-accent,#3E5C3A);font-weight:600}\",\r\n // Tab panels\r\n \".blakfy-tab-panel[aria-hidden=true]{display:none}\",\r\n \".blakfy-tab-panel[aria-hidden=false]{display:block}\",\r\n // Service list + cards\r\n \".blakfy-service-list{display:flex;flex-direction:column;gap:8px;max-height:420px;overflow-y:auto;padding-right:2px}\",\r\n \".blakfy-service-card{border:1px solid #eee;border-radius:6px;overflow:hidden}\",\r\n \".blakfy-service-card-header{display:flex;align-items:center;gap:8px;padding:10px 12px;cursor:pointer;background:#fafafa;user-select:none}\",\r\n \".blakfy-service-card-header:hover{background:#f3f3f3}\",\r\n \".blakfy-service-name{flex:1;font-size:13px;font-weight:600;color:#222}\",\r\n \".blakfy-service-cat{font-size:11px;padding:2px 8px;border-radius:999px;background:#eee;color:#555;text-transform:capitalize}\",\r\n \".blakfy-service-toggle{font-size:11px;color:#aaa;line-height:1}\",\r\n \".blakfy-service-body[aria-hidden=true]{display:none}\",\r\n \".blakfy-service-body[aria-hidden=false]{display:block;padding:12px;border-top:1px solid #eee}\",\r\n \".blakfy-service-dl{margin:0 0 10px;display:grid;grid-template-columns:auto 1fr;gap:4px 12px}\",\r\n \".blakfy-service-dt{font-size:11px;font-weight:600;color:#888;text-transform:uppercase;letter-spacing:.4px;white-space:nowrap}\",\r\n \".blakfy-service-dd{margin:0;font-size:12px;color:#444;word-break:break-word}\",\r\n \".blakfy-service-links{display:flex;gap:12px;margin-top:8px;flex-wrap:wrap}\",\r\n \".blakfy-service-links a{font-size:12px;color:var(--blakfy-accent,#3E5C3A);text-decoration:underline}\",\r\n \".blakfy-svc-empty{font-size:13px;color:#888;padding:16px 0}\",\r\n // About panel\r\n \".blakfy-about-panel{padding:4px 0}\",\r\n \".blakfy-about-brand{display:flex;align-items:center;gap:8px;margin-bottom:14px}\",\r\n \".blakfy-about-brand strong{font-size:15px;color:#222}\",\r\n \".blakfy-about-panel p{font-size:13px;color:#555;margin:0 0 10px;line-height:1.6}\",\r\n \".blakfy-about-panel a{font-size:13px;color:var(--blakfy-accent,#3E5C3A);text-decoration:underline}\",\r\n \".blakfy-about-meta{font-size:12px;color:#aaa;margin-top:12px}\",\r\n \"@media (max-width:480px){.blakfy-tab-btn{font-size:12px;padding:8px 6px}.blakfy-service-list{max-height:260px}}\",\r\n // \u2500\u2500 Themes: gray \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n \".blakfy-card[data-blakfy-theme=gray]{background:#f0f0f0}\",\r\n \".blakfy-card[data-blakfy-theme=gray] .blakfy-btn{background:#e4e4e4;border-color:#ccc}\",\r\n \".blakfy-card[data-blakfy-theme=gray] .blakfy-service-card-header{background:#e8e8e8}\",\r\n \".blakfy-card[data-blakfy-theme=gray] .blakfy-service-card-header:hover{background:#ddd}\",\r\n // \u2500\u2500 Themes: dark \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n \".blakfy-card[data-blakfy-theme=dark]{background:#1a1a1a;color:#f0f0f0;border-color:var(--blakfy-accent,#3E5C3A)}\",\r\n \".blakfy-card[data-blakfy-theme=dark] p{color:#aaa}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-cat-text span{color:#999}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-cat{border-top-color:#333}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-btn{background:#2a2a2a;color:#f0f0f0;border-color:#444}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-btn:hover{background:#333}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-switch{background:#444}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-close{color:#aaa}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-close:hover{background:#2a2a2a}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-tabs{border-bottom-color:#333}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-tab-btn{color:#888}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-tab-btn:hover{color:#f0f0f0}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-tab-btn--active{color:var(--blakfy-accent,#3E5C3A);border-bottom-color:var(--blakfy-accent,#3E5C3A)}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-service-card{border-color:#333}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-service-card-header{background:#252525}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-service-card-header:hover{background:#2e2e2e}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-service-body[aria-hidden=false]{border-top-color:#333}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-service-dt{color:#777}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-service-dd{color:#ccc}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-service-name{color:#f0f0f0}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-service-cat{background:#333;color:#aaa}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-badge{color:#777}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-about-brand strong{color:#f0f0f0}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-about-panel p{color:#aaa}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-about-meta{color:#666}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-svc-empty{color:#666}\",\r\n];\r\n\r\nexport const injectStyles = () => {\r\n if (document.getElementById(STYLE_ID)) return;\r\n const css = document.createElement(\"style\");\r\n css.id = STYLE_ID;\r\n css.textContent = RULES.join(\"\");\r\n document.head.appendChild(css);\r\n};\r\n", "// blakfy-cookie/src/ui/banner.js \u2014 first-visit consent banner DOM factory\r\n\r\nexport const createBanner = ({ t, isRTL, accent, theme, policyUrl, onAccept, onReject, onPrefs }) => {\r\n const card = document.createElement(\"div\");\r\n card.className = \"blakfy-card\";\r\n card.setAttribute(\"dir\", isRTL ? \"rtl\" : \"ltr\");\r\n card.setAttribute(\"role\", \"dialog\");\r\n card.setAttribute(\"aria-labelledby\", \"blakfy-title\");\r\n card.setAttribute(\"aria-describedby\", \"blakfy-desc\");\r\n card.style.cssText = \"--blakfy-accent:\" + accent;\r\n if (theme && theme !== \"light\") card.setAttribute(\"data-blakfy-theme\", theme);\r\n\r\n const h2 = document.createElement(\"h2\");\r\n h2.id = \"blakfy-title\";\r\n h2.textContent = t.title;\r\n card.appendChild(h2);\r\n\r\n const p = document.createElement(\"p\");\r\n p.id = \"blakfy-desc\";\r\n p.textContent = t.intro + \" \";\r\n const a = document.createElement(\"a\");\r\n a.href = policyUrl;\r\n a.textContent = t.policyLink;\r\n p.appendChild(a);\r\n card.appendChild(p);\r\n\r\n const actions = document.createElement(\"div\");\r\n actions.className = \"blakfy-actions\";\r\n\r\n const btnReject = document.createElement(\"button\");\r\n btnReject.className = \"blakfy-btn\";\r\n btnReject.setAttribute(\"data-act\", \"reject\");\r\n btnReject.textContent = t.rejectAll;\r\n btnReject.addEventListener(\"click\", () => { if (onReject) onReject(); });\r\n actions.appendChild(btnReject);\r\n\r\n const btnPrefs = document.createElement(\"button\");\r\n btnPrefs.className = \"blakfy-btn\";\r\n btnPrefs.setAttribute(\"data-act\", \"prefs\");\r\n btnPrefs.textContent = t.preferences;\r\n btnPrefs.addEventListener(\"click\", () => { if (onPrefs) onPrefs(); });\r\n actions.appendChild(btnPrefs);\r\n\r\n const btnAccept = document.createElement(\"button\");\r\n btnAccept.className = \"blakfy-btn blakfy-btn-primary\";\r\n btnAccept.setAttribute(\"data-act\", \"accept\");\r\n btnAccept.textContent = t.acceptAll;\r\n btnAccept.addEventListener(\"click\", () => { if (onAccept) onAccept(); });\r\n actions.appendChild(btnAccept);\r\n\r\n card.appendChild(actions);\r\n\r\n const badgeSlot = document.createElement(\"div\");\r\n badgeSlot.className = \"blakfy-badge-slot\";\r\n card.appendChild(badgeSlot);\r\n\r\n return card;\r\n};\r\n", "// blakfy-cookie/src/data/service-metadata.js \u2014 GDPR/KVKK disclosure data for each preset service\r\n\r\nexport const SERVICE_METADATA = {\r\n ga4: {\r\n displayName: \"Google Analytics 4\",\r\n category: \"analytics\",\r\n description: \"Website analytics service that collects and reports traffic data to help website owners understand how visitors interact with their site.\",\r\n processor: {\r\n name: \"Google Ireland Limited\",\r\n address: \"Gordon House, Barrow St, Dublin 4, Ireland\",\r\n dpo: \"https://support.google.com/policies/contact/general_privacy_form\"\r\n },\r\n purposes: [\"Analytics\", \"Performance measurement\", \"User behavior analysis\"],\r\n technologies: [\"Cookies\", \"JavaScript\"],\r\n dataCollected: [\"IP address\", \"Browser information\", \"Usage data\", \"Device information\", \"Geographic location\", \"Date and time of visit\", \"Pages visited\"],\r\n legalBasis: \"consent\",\r\n retention: \"14 months\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://policies.google.com/privacy\",\r\n cookiePolicyUrl: \"https://policies.google.com/technologies/cookies\"\r\n },\r\n\r\n gtm: {\r\n displayName: \"Google Tag Manager\",\r\n category: \"analytics\",\r\n description: \"Tag management system that allows website owners to manage and deploy marketing and analytics tags without modifying the website code.\",\r\n processor: {\r\n name: \"Google Ireland Limited\",\r\n address: \"Gordon House, Barrow St, Dublin 4, Ireland\",\r\n dpo: \"https://support.google.com/policies/contact/general_privacy_form\"\r\n },\r\n purposes: [\"Tag management\", \"Analytics\", \"Marketing\"],\r\n technologies: [\"Website tags\", \"JavaScript\"],\r\n dataCollected: [\"Aggregated tag firing data\", \"Diagnostic data\"],\r\n legalBasis: \"consent\",\r\n retention: \"14 days\",\r\n transferCountries: [\"United States of America\", \"Singapore\", \"Chile\", \"Taiwan\"],\r\n privacyUrl: \"https://business.safety.google/privacy/\",\r\n cookiePolicyUrl: \"https://policies.google.com/technologies/cookies\"\r\n },\r\n\r\n facebook: {\r\n displayName: \"Facebook Pixel\",\r\n category: \"marketing\",\r\n description: \"Tracking technology by Meta that measures ad effectiveness and enables retargeting of users who have visited the website.\",\r\n processor: {\r\n name: \"Meta Platforms Ireland Ltd.\",\r\n address: \"4 Grand Canal Square, Grand Canal Harbour, Dublin 2, Ireland\",\r\n dpo: \"https://www.facebook.com/help/contact/1650115808681298\"\r\n },\r\n purposes: [\"Analytics\", \"Marketing\", \"Retargeting\", \"Advertisement\", \"Conversion tracking\"],\r\n technologies: [\"Cookies\", \"Pixel\"],\r\n dataCollected: [\"IP address\", \"Browser information\", \"Device information\", \"Pages visited\", \"Pixel ID\", \"Ads viewed\", \"Usage behaviour\", \"Referrer URL\"],\r\n legalBasis: \"consent\",\r\n retention: \"180 days\",\r\n transferCountries: [\"United States of America\", \"Singapore\", \"United Kingdom\"],\r\n privacyUrl: \"https://www.facebook.com/privacy/explanation\",\r\n cookiePolicyUrl: \"https://www.facebook.com/policies/cookies\"\r\n },\r\n\r\n clarity: {\r\n displayName: \"Microsoft Clarity\",\r\n category: \"analytics\",\r\n description: \"Behavioral analytics tool that records user sessions and generates heatmaps to help understand how visitors interact with the website.\",\r\n processor: {\r\n name: \"Microsoft Ireland Operations Ltd.\",\r\n address: \"One Microsoft Place, South County Business Park, Leopardstown, Dublin 18, Ireland\",\r\n dpo: \"https://aka.ms/privacyresponse\"\r\n },\r\n purposes: [\"Analytics\", \"Heatmaps\", \"Session recording\"],\r\n technologies: [\"Cookies\", \"JavaScript\"],\r\n dataCollected: [\"IP address\", \"Mouse movements\", \"Clicks\", \"Scrolls\", \"Browser information\", \"Device information\", \"Referrer URL\"],\r\n legalBasis: \"consent\",\r\n retention: \"13 months\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://privacy.microsoft.com/en-us/privacystatement\",\r\n cookiePolicyUrl: \"\"\r\n },\r\n\r\n hotjar: {\r\n displayName: \"Hotjar\",\r\n category: \"analytics\",\r\n description: \"User experience analytics platform providing heatmaps, session recordings, and feedback tools to understand visitor behavior.\",\r\n processor: {\r\n name: \"Hotjar Ltd.\",\r\n address: \"Dragonara Business Centre, 5th Floor, Dragonara Road, St. Julian's STJ 3141, Malta\",\r\n dpo: \"privacy@hotjar.com\"\r\n },\r\n purposes: [\"Analytics\", \"Heatmaps\", \"User feedback\", \"Session recording\"],\r\n technologies: [\"Cookies\", \"Pixel\", \"JavaScript\"],\r\n dataCollected: [\"IP address\", \"Usage data\", \"Mouse movements\", \"Click behavior\", \"Device information\", \"Browser information\"],\r\n legalBasis: \"consent\",\r\n retention: \"365 days\",\r\n transferCountries: [],\r\n privacyUrl: \"https://www.hotjar.com/legal/policies/privacy/\",\r\n cookiePolicyUrl: \"https://www.hotjar.com/legal/policies/cookie/\"\r\n },\r\n\r\n youtube: {\r\n displayName: \"YouTube\",\r\n category: \"marketing\",\r\n description: \"Video hosting service by Google. When enabled, YouTube videos embedded on the website can be played and related cookies are set.\",\r\n processor: {\r\n name: \"Google Ireland Limited\",\r\n address: \"Gordon House, Barrow St, Dublin 4, Ireland\",\r\n dpo: \"https://support.google.com/policies/contact/general_privacy_form\"\r\n },\r\n purposes: [\"Marketing\", \"Video content delivery\", \"Personalisation\"],\r\n technologies: [\"Cookies\", \"Pixel\"],\r\n dataCollected: [\"IP address\", \"Browser information\", \"Usage data\", \"Video viewing data\", \"Device information\"],\r\n legalBasis: \"consent\",\r\n retention: \"180 days\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://policies.google.com/privacy\",\r\n cookiePolicyUrl: \"https://policies.google.com/technologies/cookies\"\r\n },\r\n\r\n vimeo: {\r\n displayName: \"Vimeo\",\r\n category: \"marketing\",\r\n description: \"Video hosting and sharing platform. When enabled, Vimeo videos embedded on the website can be played.\",\r\n processor: {\r\n name: \"Vimeo, Inc.\",\r\n address: \"555 West 18th Street, New York, NY 10011, USA\",\r\n dpo: \"privacy@vimeo.com\"\r\n },\r\n purposes: [\"Marketing\", \"Video content delivery\"],\r\n technologies: [\"Cookies\", \"JavaScript\"],\r\n dataCollected: [\"IP address\", \"Browser information\", \"Video viewing data\", \"Device information\"],\r\n legalBasis: \"consent\",\r\n retention: \"2 years\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://vimeo.com/privacy\",\r\n cookiePolicyUrl: \"https://vimeo.com/cookie_policy\"\r\n },\r\n\r\n linkedin: {\r\n displayName: \"LinkedIn Insight Tag\",\r\n category: \"marketing\",\r\n description: \"Analytics and retargeting tag by LinkedIn that enables conversion tracking and retargeting of website visitors through LinkedIn Ads.\",\r\n processor: {\r\n name: \"LinkedIn Ireland Unlimited Company\",\r\n address: \"Wilton Plaza, Wilton Place, Dublin 2, Ireland\",\r\n dpo: \"privacy@linkedin.com\"\r\n },\r\n purposes: [\"Marketing\", \"Analytics\", \"Retargeting\", \"Conversion tracking\"],\r\n technologies: [\"Cookies\", \"Pixel\"],\r\n dataCollected: [\"IP address\", \"Device information\", \"Pages visited\", \"Referrer URL\", \"Professional data\"],\r\n legalBasis: \"consent\",\r\n retention: \"90 days\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://www.linkedin.com/legal/privacy-policy\",\r\n cookiePolicyUrl: \"https://www.linkedin.com/legal/cookie-policy\"\r\n },\r\n\r\n yandex: {\r\n displayName: \"Yandex Metrica\",\r\n category: \"analytics\",\r\n description: \"Web analytics service that collects and evaluates statistical data on user behavior for optimization and marketing purposes.\",\r\n processor: {\r\n name: \"Yandex LLC\",\r\n address: \"16 Lva Tolstogo St., Moscow 119021, Russia\",\r\n dpo: \"\"\r\n },\r\n purposes: [\"Analytics\", \"Optimization\"],\r\n technologies: [\"Cookies\", \"Web beacons\", \"Pixel\"],\r\n dataCollected: [\"IP address\", \"Browser information\", \"Usage data\", \"Device information\", \"Date and time of visit\", \"Geographic location\"],\r\n legalBasis: \"consent\",\r\n retention: \"As long as necessary\",\r\n transferCountries: [\"Russia\"],\r\n privacyUrl: \"https://yandex.com/legal/confidential/\",\r\n cookiePolicyUrl: \"\"\r\n },\r\n\r\n bing: {\r\n displayName: \"Bing Ads UET\",\r\n category: \"marketing\",\r\n description: \"Universal Event Tracking tag by Microsoft Bing that enables conversion tracking and audience targeting for Bing Ads campaigns.\",\r\n processor: {\r\n name: \"Microsoft Corporation\",\r\n address: \"One Microsoft Way, Redmond, WA 98052, USA\",\r\n dpo: \"https://aka.ms/privacyresponse\"\r\n },\r\n purposes: [\"Marketing\", \"Conversion tracking\", \"Audience targeting\"],\r\n technologies: [\"Cookies\", \"Pixel\"],\r\n dataCollected: [\"IP address\", \"Browser information\", \"Conversion data\", \"Device information\"],\r\n legalBasis: \"consent\",\r\n retention: \"180 days\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://privacy.microsoft.com/en-us/privacystatement\",\r\n cookiePolicyUrl: \"\"\r\n },\r\n\r\n tiktok: {\r\n displayName: \"TikTok Pixel\",\r\n category: \"marketing\",\r\n description: \"Tracking pixel by TikTok that measures ad performance and enables retargeting for TikTok advertising campaigns.\",\r\n processor: {\r\n name: \"TikTok Information Technologies UK Limited\",\r\n address: \"6th Floor, One London Wall, London EC2Y 5EB, United Kingdom\",\r\n dpo: \"privacy@tiktok.com\"\r\n },\r\n purposes: [\"Marketing\", \"Retargeting\", \"Conversion tracking\"],\r\n technologies: [\"Cookies\", \"Pixel\"],\r\n dataCollected: [\"IP address\", \"Browser information\", \"Usage data\", \"Device information\", \"Pages visited\"],\r\n legalBasis: \"consent\",\r\n retention: \"13 months\",\r\n transferCountries: [\"United States of America\", \"Singapore\"],\r\n privacyUrl: \"https://www.tiktok.com/legal/page/row/privacy-policy/en\",\r\n cookiePolicyUrl: \"https://www.tiktok.com/legal/page/row/cookie-policy/en\"\r\n },\r\n\r\n pinterest: {\r\n displayName: \"Pinterest Tag\",\r\n category: \"marketing\",\r\n description: \"Analytics and retargeting tag by Pinterest that tracks conversions and enables targeting of website visitors through Pinterest Ads.\",\r\n processor: {\r\n name: \"Pinterest Europe Ltd.\",\r\n address: \"Palmerston House, 2nd Floor, Fenian Street, Dublin 2, Ireland\",\r\n dpo: \"privacy@pinterest.com\"\r\n },\r\n purposes: [\"Marketing\", \"Retargeting\", \"Conversion tracking\"],\r\n technologies: [\"Cookies\", \"Pixel\"],\r\n dataCollected: [\"IP address\", \"Browser information\", \"Usage data\", \"Device information\"],\r\n legalBasis: \"consent\",\r\n retention: \"1 year\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://policy.pinterest.com/en/privacy-policy\",\r\n cookiePolicyUrl: \"https://policy.pinterest.com/en/cookies\"\r\n },\r\n\r\n tawkto: {\r\n displayName: \"Tawk.to\",\r\n category: \"functional\",\r\n description: \"Live chat widget that allows website visitors to communicate in real time with website support agents.\",\r\n processor: {\r\n name: \"Tawk.to, Inc.\",\r\n address: \"2880 Zanker Road Suite 203, San Jose, CA 95134, USA\",\r\n dpo: \"privacy@tawk.to\"\r\n },\r\n purposes: [\"Functional\", \"Live chat\", \"Customer support\"],\r\n technologies: [\"Cookies\", \"JavaScript\"],\r\n dataCollected: [\"IP address\", \"Browser information\", \"Chat messages\", \"Usage data\", \"Device information\"],\r\n legalBasis: \"consent\",\r\n retention: \"2 years\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://www.tawk.to/privacy-policy/\",\r\n cookiePolicyUrl: \"\"\r\n },\r\n\r\n intercom: {\r\n displayName: \"Intercom\",\r\n category: \"functional\",\r\n description: \"Customer messaging platform providing live chat, in-app messaging, and customer support tools.\",\r\n processor: {\r\n name: \"Intercom R&D Unlimited Company\",\r\n address: \"2nd Floor, Stephen Court, 18-21 St. Stephen's Green, Dublin 2, Ireland\",\r\n dpo: \"privacy@intercom.io\"\r\n },\r\n purposes: [\"Functional\", \"Customer support\", \"Marketing\"],\r\n technologies: [\"Cookies\", \"JavaScript\"],\r\n dataCollected: [\"IP address\", \"Browser information\", \"Chat messages\", \"Usage data\", \"Device information\", \"Email address\"],\r\n legalBasis: \"consent\",\r\n retention: \"2 years\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://www.intercom.com/legal/privacy\",\r\n cookiePolicyUrl: \"\"\r\n },\r\n\r\n hubspot: {\r\n displayName: \"HubSpot\",\r\n category: \"marketing\",\r\n description: \"CRM and marketing automation platform. Tracks website visitor behavior to enable lead generation and marketing automation.\",\r\n processor: {\r\n name: \"HubSpot, Inc.\",\r\n address: \"25 First Street, Cambridge, MA 02141, USA\",\r\n dpo: \"privacy@hubspot.com\"\r\n },\r\n purposes: [\"Marketing\", \"Analytics\", \"CRM\", \"Lead generation\"],\r\n technologies: [\"Cookies\", \"Pixel\", \"JavaScript\"],\r\n dataCollected: [\"IP address\", \"Browser information\", \"Form submissions\", \"Pages visited\", \"Usage data\", \"Email address\"],\r\n legalBasis: \"consent\",\r\n retention: \"13 months\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://legal.hubspot.com/privacy-policy\",\r\n cookiePolicyUrl: \"https://legal.hubspot.com/cookie-policy\"\r\n },\r\n\r\n mailchimp: {\r\n displayName: \"Mailchimp\",\r\n category: \"marketing\",\r\n description: \"Email marketing and automation platform. Tracks email campaign interactions and website activity for subscriber management.\",\r\n processor: {\r\n name: \"The Rocket Science Group LLC (Mailchimp)\",\r\n address: \"675 Ponce de Leon Ave NE, Suite 5000, Atlanta, GA 30308, USA\",\r\n dpo: \"privacy@mailchimp.com\"\r\n },\r\n purposes: [\"Marketing\", \"Email campaigns\", \"Analytics\"],\r\n technologies: [\"Cookies\", \"Pixel\", \"Web beacons\"],\r\n dataCollected: [\"IP address\", \"Email behaviour\", \"Form submissions\", \"Device information\", \"Browser information\"],\r\n legalBasis: \"consent\",\r\n retention: \"2 years\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://mailchimp.com/legal/privacy/\",\r\n cookiePolicyUrl: \"https://mailchimp.com/legal/cookies/\"\r\n },\r\n\r\n maps: {\r\n displayName: \"Google Maps\",\r\n category: \"functional\",\r\n description: \"Interactive maps service by Google embedded on the website to display locations and provide directions.\",\r\n processor: {\r\n name: \"Google Ireland Limited\",\r\n address: \"Gordon House, Barrow St, Dublin 4, Ireland\",\r\n dpo: \"https://support.google.com/policies/contact/general_privacy_form\"\r\n },\r\n purposes: [\"Functional\", \"Maps display\", \"Location services\"],\r\n technologies: [\"Cookies\", \"JavaScript\"],\r\n dataCollected: [\"IP address\", \"Location data\", \"Usage data\", \"Device information\"],\r\n legalBasis: \"consent\",\r\n retention: \"6 months\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://policies.google.com/privacy\",\r\n cookiePolicyUrl: \"https://policies.google.com/technologies/cookies\"\r\n },\r\n\r\n recaptcha: {\r\n displayName: \"Google reCAPTCHA\",\r\n category: \"functional\",\r\n description: \"Bot detection and security service by Google that protects forms and interactive elements from automated abuse.\",\r\n processor: {\r\n name: \"Google Ireland Limited\",\r\n address: \"Gordon House, Barrow St, Dublin 4, Ireland\",\r\n dpo: \"https://support.google.com/policies/contact/general_privacy_form\"\r\n },\r\n purposes: [\"Functional\", \"Security\", \"Bot detection\"],\r\n technologies: [\"Cookies\", \"JavaScript\"],\r\n dataCollected: [\"IP address\", \"Browser fingerprint\", \"Usage data\", \"Device information\", \"Mouse behaviour\"],\r\n legalBasis: \"consent\",\r\n retention: \"6 months\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://policies.google.com/privacy\",\r\n cookiePolicyUrl: \"https://policies.google.com/technologies/cookies\"\r\n }\r\n};\r\n", "// blakfy-cookie/src/ui/modal.js \u2014 preferences modal: Categories | Services | About\r\n\r\nimport { SERVICE_METADATA } from \"../data/service-metadata.js\";\r\n\r\nconst CATEGORIES = [\"essential\", \"analytics\", \"marketing\", \"functional\"];\r\n\r\n// \u2500\u2500 helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nconst el = (tag, props) => {\r\n const node = document.createElement(tag);\r\n if (props) {\r\n for (const k in props) {\r\n if (k === \"text\") node.textContent = props[k];\r\n else if (k === \"html\") node.innerHTML = props[k];\r\n else if (k === \"class\") node.className = props[k];\r\n else node.setAttribute(k, props[k]);\r\n }\r\n }\r\n return node;\r\n};\r\n\r\nconst safeGet = (obj, path, fallback) => {\r\n let cur = obj;\r\n const parts = path.split(\".\");\r\n for (let i = 0; i < parts.length; i++) {\r\n if (cur == null) return fallback;\r\n cur = cur[parts[i]];\r\n }\r\n return cur != null ? cur : fallback;\r\n};\r\n\r\n// \u2500\u2500 Categories tab \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nconst buildCatRow = (key, t, alwaysOn, checked) => {\r\n const c = safeGet(t, \"cat.\" + key, {});\r\n const row = el(\"div\", { class: \"blakfy-cat\" });\r\n\r\n const text = el(\"div\", { class: \"blakfy-cat-text\" });\r\n const strong = el(\"strong\", { text: c.title || key });\r\n text.appendChild(strong);\r\n const span = el(\"span\", { text: (c.desc || \"\") + (alwaysOn ? \" (\" + (c.always || \"\") + \")\" : \"\") });\r\n text.appendChild(span);\r\n row.appendChild(text);\r\n\r\n const sw = el(\"button\", { class: \"blakfy-switch\", role: \"switch\", \"aria-checked\": checked ? \"true\" : \"false\", \"data-cat\": key });\r\n if (alwaysOn) sw.disabled = true;\r\n sw.addEventListener(\"click\", () => {\r\n if (sw.disabled) return;\r\n sw.setAttribute(\"aria-checked\", sw.getAttribute(\"aria-checked\") === \"true\" ? \"false\" : \"true\");\r\n });\r\n row.appendChild(sw);\r\n return row;\r\n};\r\n\r\nconst buildCategoriesPanel = (t, current, card, onSave, onAccept) => {\r\n const panel = el(\"div\", { class: \"blakfy-tab-panel\", \"data-panel\": \"categories\", \"aria-hidden\": \"false\" });\r\n\r\n panel.appendChild(buildCatRow(\"essential\", t, true, true));\r\n panel.appendChild(buildCatRow(\"analytics\", t, false, !!current.analytics));\r\n panel.appendChild(buildCatRow(\"marketing\", t, false, !!current.marketing));\r\n panel.appendChild(buildCatRow(\"functional\", t, false, !!current.functional));\r\n\r\n const actions = el(\"div\", { class: \"blakfy-actions\" });\r\n actions.style.marginTop = \"16px\";\r\n\r\n const btnSave = el(\"button\", { class: \"blakfy-btn\", \"data-act\": \"save\", text: t.save || \"Save\" });\r\n btnSave.addEventListener(\"click\", () => {\r\n const prefs = {};\r\n for (let i = 0; i < CATEGORIES.length; i++) {\r\n const k = CATEGORIES[i];\r\n if (k === \"essential\") continue;\r\n const sw = card.querySelector('[data-cat=\"' + k + '\"]');\r\n prefs[k] = sw ? sw.getAttribute(\"aria-checked\") === \"true\" : false;\r\n }\r\n if (onSave) onSave(prefs);\r\n });\r\n actions.appendChild(btnSave);\r\n\r\n const btnAccept = el(\"button\", { class: \"blakfy-btn blakfy-btn-primary\", \"data-act\": \"accept\", text: t.acceptAll || \"Accept All\" });\r\n btnAccept.addEventListener(\"click\", () => { if (onAccept) onAccept(); });\r\n actions.appendChild(btnAccept);\r\n\r\n panel.appendChild(actions);\r\n return panel;\r\n};\r\n\r\n// \u2500\u2500 Services tab \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nconst buildServiceCard = (presetKey, meta, t) => {\r\n const s = safeGet(t, \"service\", {});\r\n\r\n const card = el(\"div\", { class: \"blakfy-service-card\" });\r\n\r\n const header = el(\"div\", { class: \"blakfy-service-card-header\" });\r\n header.appendChild(el(\"span\", { class: \"blakfy-service-name\", text: meta.displayName }));\r\n header.appendChild(el(\"span\", { class: \"blakfy-service-cat\", text: meta.category }));\r\n const toggle = el(\"span\", { class: \"blakfy-service-toggle\", text: \"\u25B8\" });\r\n header.appendChild(toggle);\r\n card.appendChild(header);\r\n\r\n const body = el(\"div\", { class: \"blakfy-service-body\", \"aria-hidden\": \"true\" });\r\n\r\n const dl = el(\"dl\", { class: \"blakfy-service-dl\" });\r\n\r\n const addRow = (label, value) => {\r\n if (!value) return;\r\n const dt = el(\"dt\", { class: \"blakfy-service-dt\", text: label });\r\n const dd = el(\"dd\", { class: \"blakfy-service-dd\", text: value });\r\n dl.appendChild(dt);\r\n dl.appendChild(dd);\r\n };\r\n\r\n addRow(s.description || \"Description\", meta.description);\r\n addRow(s.processor || \"Data Processor\", meta.processor && meta.processor.name ? meta.processor.name : \"\");\r\n addRow(s.address || \"Address\", meta.processor && meta.processor.address ? meta.processor.address : \"\");\r\n if (meta.processor && meta.processor.dpo && meta.processor.dpo.indexOf(\"http\") !== 0) {\r\n addRow(s.dpo || \"DPO Contact\", meta.processor.dpo);\r\n }\r\n addRow(s.purposes || \"Purposes\", meta.purposes && meta.purposes.length ? meta.purposes.join(\", \") : \"\");\r\n addRow(s.technologies || \"Technologies Used\", meta.technologies && meta.technologies.length ? meta.technologies.join(\", \") : \"\");\r\n addRow(s.dataCollected || \"Data Collected\", meta.dataCollected && meta.dataCollected.length ? meta.dataCollected.join(\", \") : \"\");\r\n\r\n const lbv = safeGet(t, \"service.legalBasisValues\", {});\r\n const lbLabel = lbv[meta.legalBasis] || (s.legalBasisValues && s.legalBasisValues[meta.legalBasis]) || meta.legalBasis || \"\";\r\n addRow(s.legalBasis || \"Legal Basis\", lbLabel);\r\n\r\n addRow(s.retention || \"Retention Period\", meta.retention);\r\n addRow(s.transferCountries || \"Transfer Countries\", meta.transferCountries && meta.transferCountries.length ? meta.transferCountries.join(\", \") : \"\");\r\n\r\n body.appendChild(dl);\r\n\r\n if ((meta.privacyUrl && meta.privacyUrl.length) || (meta.cookiePolicyUrl && meta.cookiePolicyUrl.length)) {\r\n const links = el(\"div\", { class: \"blakfy-service-links\" });\r\n if (meta.privacyUrl) {\r\n const a = el(\"a\", { href: meta.privacyUrl, target: \"_blank\", rel: \"noopener noreferrer\", text: s.privacyPolicy || \"Privacy Policy\" });\r\n links.appendChild(a);\r\n }\r\n if (meta.cookiePolicyUrl) {\r\n const a = el(\"a\", { href: meta.cookiePolicyUrl, target: \"_blank\", rel: \"noopener noreferrer\", text: s.cookiePolicy || \"Cookie Policy\" });\r\n links.appendChild(a);\r\n }\r\n body.appendChild(links);\r\n }\r\n\r\n card.appendChild(body);\r\n\r\n header.addEventListener(\"click\", () => {\r\n const hidden = body.getAttribute(\"aria-hidden\") === \"true\";\r\n body.setAttribute(\"aria-hidden\", hidden ? \"false\" : \"true\");\r\n toggle.textContent = hidden ? \"\u25BE\" : \"\u25B8\";\r\n });\r\n\r\n return card;\r\n};\r\n\r\nconst buildServicesPanel = (activePresets, t) => {\r\n const panel = el(\"div\", { class: \"blakfy-tab-panel\", \"data-panel\": \"services\", \"aria-hidden\": \"true\" });\r\n const list = el(\"div\", { class: \"blakfy-service-list\" });\r\n\r\n if (!activePresets || activePresets.length === 0) {\r\n const empty = el(\"p\", { class: \"blakfy-svc-empty\", text: safeGet(t, \"service.noServices\", \"No services configured.\") });\r\n list.appendChild(empty);\r\n } else {\r\n for (let i = 0; i < activePresets.length; i++) {\r\n const { key, meta } = activePresets[i];\r\n if (meta) list.appendChild(buildServiceCard(key, meta, t));\r\n }\r\n }\r\n\r\n panel.appendChild(list);\r\n return panel;\r\n};\r\n\r\n// \u2500\u2500 About tab \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nconst buildAboutPanel = (t, version) => {\r\n const panel = el(\"div\", { class: \"blakfy-tab-panel\", \"data-panel\": \"about\", \"aria-hidden\": \"true\" });\r\n const content = el(\"div\", { class: \"blakfy-about-panel\" });\r\n\r\n const brand = el(\"div\", { class: \"blakfy-about-brand\" });\r\n brand.appendChild(el(\"strong\", { text: \"Blakfy Studio\" }));\r\n content.appendChild(brand);\r\n\r\n const ab = safeGet(t, \"svcAbout\", {});\r\n\r\n if (ab.title) content.appendChild(el(\"p\", { text: \"\" })).textContent = ab.title ? \"\" : \"\";\r\n\r\n const desc = el(\"p\", { text: ab.description || \"This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences.\" });\r\n content.appendChild(desc);\r\n\r\n const meta = el(\"p\", { class: \"blakfy-about-meta\" });\r\n meta.textContent = (ab.version || \"Version\") + \": \" + (version || \"\");\r\n content.appendChild(meta);\r\n\r\n const a = el(\"a\", { href: \"https://blakfy.com\", target: \"_blank\", rel: \"noopener noreferrer\", text: ab.learnMore || \"Learn more at blakfy.com\" });\r\n content.appendChild(a);\r\n\r\n panel.appendChild(content);\r\n return panel;\r\n};\r\n\r\n// \u2500\u2500 Tab switching \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nconst initTabs = (card) => {\r\n const btns = card.querySelectorAll(\".blakfy-tab-btn\");\r\n const panels = card.querySelectorAll(\".blakfy-tab-panel\");\r\n\r\n const switchTab = (target) => {\r\n for (let i = 0; i < btns.length; i++) {\r\n const active = btns[i].getAttribute(\"data-tab\") === target;\r\n btns[i].setAttribute(\"aria-selected\", active ? \"true\" : \"false\");\r\n if (active) btns[i].classList.add(\"blakfy-tab-btn--active\");\r\n else btns[i].classList.remove(\"blakfy-tab-btn--active\");\r\n }\r\n for (let i = 0; i < panels.length; i++) {\r\n panels[i].setAttribute(\"aria-hidden\", panels[i].getAttribute(\"data-panel\") === target ? \"false\" : \"true\");\r\n }\r\n };\r\n\r\n for (let i = 0; i < btns.length; i++) {\r\n btns[i].addEventListener(\"click\", function () { switchTab(this.getAttribute(\"data-tab\")); });\r\n }\r\n};\r\n\r\n// \u2500\u2500 Public factory \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nexport const createModal = ({ t, isRTL, accent, theme, currentState, presets, version, onSave, onAccept, onClose }) => {\r\n const current = currentState || { analytics: false, marketing: false, functional: false };\r\n\r\n const card = el(\"div\", { class: \"blakfy-card\", role: \"dialog\", \"aria-labelledby\": \"blakfy-mtitle\" });\r\n card.setAttribute(\"dir\", isRTL ? \"rtl\" : \"ltr\");\r\n card.style.cssText = \"--blakfy-accent:\" + accent + \";position:relative\";\r\n if (theme && theme !== \"light\") card.setAttribute(\"data-blakfy-theme\", theme);\r\n\r\n const closeBtn = el(\"button\", { class: \"blakfy-close\", \"aria-label\": t.close || \"Close\", \"data-act\": \"close\", text: \"\u00D7\" });\r\n closeBtn.addEventListener(\"click\", () => { if (onClose) onClose(); });\r\n card.appendChild(closeBtn);\r\n\r\n const h2 = el(\"h2\", { id: \"blakfy-mtitle\", text: t.title || \"Cookie Preferences\" });\r\n card.appendChild(h2);\r\n\r\n // Tab bar\r\n const tabs = safeGet(t, \"tabs\", { categories: \"Categories\", services: \"Services\", about: \"About\" });\r\n const tabBar = el(\"nav\", { class: \"blakfy-tabs\", role: \"tablist\" });\r\n\r\n const makeTabBtn = (id, label, active) => {\r\n const btn = el(\"button\", { class: \"blakfy-tab-btn\" + (active ? \" blakfy-tab-btn--active\" : \"\"), role: \"tab\", \"data-tab\": id, \"aria-selected\": active ? \"true\" : \"false\", text: label });\r\n return btn;\r\n };\r\n\r\n tabBar.appendChild(makeTabBtn(\"categories\", tabs.categories || \"Categories\", true));\r\n tabBar.appendChild(makeTabBtn(\"services\", tabs.services || \"Services\", false));\r\n tabBar.appendChild(makeTabBtn(\"about\", tabs.about || \"About\", false));\r\n card.appendChild(tabBar);\r\n\r\n // Enrich active presets with metadata\r\n const enriched = [];\r\n if (presets && presets.length) {\r\n for (let i = 0; i < presets.length; i++) {\r\n const key = typeof presets[i] === \"string\" ? presets[i] : presets[i].key;\r\n const meta = SERVICE_METADATA[key] || (typeof presets[i] === \"object\" ? presets[i].meta : null);\r\n if (meta) enriched.push({ key, meta });\r\n }\r\n }\r\n\r\n // Panels\r\n card.appendChild(buildCategoriesPanel(t, current, card, onSave, onAccept));\r\n card.appendChild(buildServicesPanel(enriched, t));\r\n card.appendChild(buildAboutPanel(t, version));\r\n\r\n // Badge slot\r\n card.appendChild(el(\"div\", { class: \"blakfy-badge-slot\" }));\r\n\r\n // Wire up tab switching after DOM is built\r\n initTabs(card);\r\n\r\n return card;\r\n};\r\n", "// blakfy-cookie/src/ui/badge.js \u2014 \"Powered by Blakfy Studio\" badge with 3-layer anti-tampering protection\r\n\r\nconst BADGE_HREF = \"https://blakfy.com\";\r\nconst BADGE_TEXT_PREFIX = \"Powered by \";\r\nconst BADGE_BRAND = \"Blakfy Studio\";\r\nconst BADGE_CLASS = \"blakfy-badge\";\r\nconst PROTECT_STYLE_ID = \"blakfy-badge-protect\";\r\n\r\nconst PROTECT_CSS = \".blakfy-badge{display:flex !important;visibility:visible !important;opacity:0.6 !important;pointer-events:auto !important;}.blakfy-badge:hover{opacity:1 !important;}.blakfy-badge[hidden]{display:flex !important;}\";\r\n\r\nconst mountedBadges = new Set();\r\nconst slotMap = new WeakMap();\r\nlet observer = null;\r\nlet intervalId = null;\r\nlet rootRef = null;\r\n\r\nexport const buildBadge = () => {\r\n const a = document.createElement(\"a\");\r\n a.href = BADGE_HREF;\r\n a.target = \"_blank\";\r\n a.rel = \"noopener noreferrer\";\r\n a.className = BADGE_CLASS;\r\n a.setAttribute(\"aria-label\", \"Powered by Blakfy Studio \u2014 opens in new tab\");\r\n\r\n const prefix = document.createTextNode(BADGE_TEXT_PREFIX);\r\n a.appendChild(prefix);\r\n\r\n const strong = document.createElement(\"strong\");\r\n strong.textContent = BADGE_BRAND;\r\n a.appendChild(strong);\r\n\r\n let cssText = \"display: flex !important; align-items: center; gap: 4px;\"\r\n + \"position: absolute; bottom: 8px; right: 12px;\"\r\n + \"font-size: 11px; font-family: system-ui, -apple-system, sans-serif;\"\r\n + \"color: inherit; text-decoration: none;\"\r\n + \"opacity: 0.6 !important; transition: opacity 0.2s;\"\r\n + \"pointer-events: auto !important;\"\r\n + \"z-index: 1;\";\r\n a.style.cssText = cssText;\r\n\r\n return a;\r\n};\r\n\r\nconst applyRTL = (badge) => {\r\n const rtlAncestor = badge.closest && badge.closest(\"[dir=rtl]\");\r\n if (rtlAncestor) {\r\n badge.style.right = \"auto\";\r\n badge.style.left = \"12px\";\r\n }\r\n};\r\n\r\nconst injectProtectStyle = () => {\r\n if (typeof document === \"undefined\") return;\r\n if (document.getElementById(PROTECT_STYLE_ID)) return;\r\n const style = document.createElement(\"style\");\r\n style.id = PROTECT_STYLE_ID;\r\n style.textContent = PROTECT_CSS;\r\n (document.head || document.documentElement).appendChild(style);\r\n};\r\n\r\nconst replaceBadge = (oldBadge) => {\r\n const slot = slotMap.get(oldBadge);\r\n const fresh = buildBadge();\r\n if (oldBadge.parentNode) {\r\n oldBadge.parentNode.replaceChild(fresh, oldBadge);\r\n } else if (slot && slot.isConnected) {\r\n slot.appendChild(fresh);\r\n } else if (rootRef) {\r\n rootRef.appendChild(fresh);\r\n }\r\n mountedBadges.delete(oldBadge);\r\n mountedBadges.add(fresh);\r\n if (slot) slotMap.set(fresh, slot);\r\n applyRTL(fresh);\r\n return fresh;\r\n};\r\n\r\nconst reAttachBadge = (badge) => {\r\n const slot = slotMap.get(badge);\r\n if (badge.isConnected) return badge;\r\n const fresh = buildBadge();\r\n if (slot && slot.isConnected) {\r\n slot.appendChild(fresh);\r\n } else if (rootRef) {\r\n rootRef.appendChild(fresh);\r\n } else {\r\n return badge;\r\n }\r\n mountedBadges.delete(badge);\r\n mountedBadges.add(fresh);\r\n if (slot) slotMap.set(fresh, slot);\r\n applyRTL(fresh);\r\n return fresh;\r\n};\r\n\r\nexport const mountBadges = (rootEl) => {\r\n if (!rootEl) return [];\r\n rootRef = rootEl;\r\n const slots = rootEl.querySelectorAll(\".blakfy-badge-slot\");\r\n const result = [];\r\n for (let i = 0; i < slots.length; i++) {\r\n const slot = slots[i];\r\n const existing = slot.querySelector(\".\" + BADGE_CLASS);\r\n if (existing) {\r\n mountedBadges.add(existing);\r\n slotMap.set(existing, slot);\r\n applyRTL(existing);\r\n result.push(existing);\r\n continue;\r\n }\r\n const badge = buildBadge();\r\n while (slot.firstChild) slot.removeChild(slot.firstChild);\r\n slot.appendChild(badge);\r\n mountedBadges.add(badge);\r\n slotMap.set(badge, slot);\r\n applyRTL(badge);\r\n result.push(badge);\r\n }\r\n return result;\r\n};\r\n\r\nconst verifyBadges = () => {\r\n if (typeof window === \"undefined\" || !window.getComputedStyle) return;\r\n const snapshot = Array.from(mountedBadges);\r\n for (let i = 0; i < snapshot.length; i++) {\r\n const badge = snapshot[i];\r\n if (!badge.isConnected) {\r\n reAttachBadge(badge);\r\n continue;\r\n }\r\n const cs = window.getComputedStyle(badge);\r\n const opacity = parseFloat(cs.opacity);\r\n if (\r\n (isFinite(opacity) && opacity < 0.5) ||\r\n cs.display === \"none\" ||\r\n cs.visibility === \"hidden\"\r\n ) {\r\n replaceBadge(badge);\r\n }\r\n }\r\n if (!document.getElementById(PROTECT_STYLE_ID)) {\r\n injectProtectStyle();\r\n }\r\n};\r\n\r\nconst handleMutations = (records) => {\r\n let needsStyleReinject = false;\r\n const removedBadges = [];\r\n const mutatedBadges = [];\r\n\r\n for (let i = 0; i < records.length; i++) {\r\n const rec = records[i];\r\n if (rec.type === \"childList\") {\r\n for (let j = 0; j < rec.removedNodes.length; j++) {\r\n const node = rec.removedNodes[j];\r\n if (!node || node.nodeType !== 1) continue;\r\n if (node.id === PROTECT_STYLE_ID) {\r\n needsStyleReinject = true;\r\n }\r\n if (mountedBadges.has(node)) {\r\n removedBadges.push(node);\r\n } else if (node.querySelector) {\r\n const inner = node.querySelector(\".\" + BADGE_CLASS);\r\n if (inner && mountedBadges.has(inner)) {\r\n removedBadges.push(inner);\r\n }\r\n }\r\n }\r\n } else if (rec.type === \"attributes\") {\r\n const target = rec.target;\r\n if (target && mountedBadges.has(target)) {\r\n mutatedBadges.push(target);\r\n }\r\n }\r\n }\r\n\r\n if (needsStyleReinject) {\r\n setTimeout(injectProtectStyle, 0);\r\n }\r\n\r\n if (removedBadges.length) {\r\n setTimeout(() => {\r\n for (let i = 0; i < removedBadges.length; i++) {\r\n reAttachBadge(removedBadges[i]);\r\n }\r\n }, 50);\r\n }\r\n\r\n for (let i = 0; i < mutatedBadges.length; i++) {\r\n replaceBadge(mutatedBadges[i]);\r\n }\r\n};\r\n\r\nexport const installAntiTamper = (rootEl) => {\r\n if (!rootEl || typeof MutationObserver === \"undefined\") return;\r\n rootRef = rootEl;\r\n\r\n injectProtectStyle();\r\n\r\n if (observer) observer.disconnect();\r\n observer = new MutationObserver(handleMutations);\r\n observer.observe(rootEl, {\r\n childList: true,\r\n attributes: true,\r\n subtree: true,\r\n attributeFilter: [\"style\", \"class\", \"hidden\"]\r\n });\r\n\r\n if (document.head) {\r\n observer.observe(document.head, { childList: true, subtree: false });\r\n }\r\n\r\n if (intervalId) clearInterval(intervalId);\r\n intervalId = setInterval(verifyBadges, 2000);\r\n};\r\n\r\nexport const disposeAntiTamper = () => {\r\n if (observer) {\r\n observer.disconnect();\r\n observer = null;\r\n }\r\n if (intervalId) {\r\n clearInterval(intervalId);\r\n intervalId = null;\r\n }\r\n mountedBadges.clear();\r\n rootRef = null;\r\n};\r\n", "// blakfy-cookie/src/ui/focus-trap.js \u2014 Tab/Shift+Tab cycling and Escape handling for any root element\r\n\r\nconst FOCUSABLE = 'button:not([disabled]),a[href],input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex=\"-1\"])';\r\n\r\nlet activeRoot = null;\r\nlet activeHandler = null;\r\nlet activeEscape = null;\r\n\r\nexport const installFocusTrap = (rootEl, options) => {\r\n removeFocusTrap();\r\n if (!rootEl) return;\r\n activeRoot = rootEl;\r\n activeEscape = options && options.onEscape;\r\n\r\n activeHandler = (e) => {\r\n if (!activeRoot) return;\r\n if (e.key === \"Escape\") {\r\n if (typeof activeEscape === \"function\") {\r\n e.preventDefault();\r\n activeEscape();\r\n }\r\n return;\r\n }\r\n if (e.key !== \"Tab\") return;\r\n const nodes = activeRoot.querySelectorAll(FOCUSABLE);\r\n if (!nodes.length) return;\r\n const first = nodes[0];\r\n const last = nodes[nodes.length - 1];\r\n if (e.shiftKey && document.activeElement === first) {\r\n e.preventDefault();\r\n last.focus();\r\n } else if (!e.shiftKey && document.activeElement === last) {\r\n e.preventDefault();\r\n first.focus();\r\n }\r\n };\r\n\r\n document.addEventListener(\"keydown\", activeHandler);\r\n\r\n const firstFocusable = rootEl.querySelector(FOCUSABLE);\r\n if (firstFocusable) firstFocusable.focus();\r\n};\r\n\r\nexport const removeFocusTrap = () => {\r\n if (activeHandler) {\r\n document.removeEventListener(\"keydown\", activeHandler);\r\n }\r\n activeRoot = null;\r\n activeHandler = null;\r\n activeEscape = null;\r\n};\r\n", "// blakfy-cookie/src/ui/status-bar.js \u2014 central status bar from status.json (XSS-safe via textContent)\r\n\r\nimport { RTL_LOCALES } from \"../i18n/detect.js\";\r\n\r\nconst STATUS_COLORS = {\r\n info: \"#1a56db\",\r\n warning: \"#b45309\",\r\n error: \"#dc2626\",\r\n success: \"#057a55\",\r\n maintenance: \"#6d28d9\",\r\n};\r\n\r\nlet statusRoot = null;\r\nlet statusData = null;\r\n\r\nconst resolveStatusMessage = (data, currentLocale, mainLang) => {\r\n const msgs = data && data.message;\r\n if (!msgs) return null;\r\n return msgs[currentLocale] ||\r\n msgs[mainLang] ||\r\n msgs[\"en\"] ||\r\n msgs[Object.keys(msgs)[0]] ||\r\n null;\r\n};\r\n\r\nconst dismissKey = (data) => \"blakfy_status_\" + ((data && data._id) || \"default\");\r\n\r\nexport const dismissStatus = () => {\r\n if (!statusRoot) return;\r\n try { sessionStorage.setItem(dismissKey(statusData), \"1\"); } catch (e) { /* ignore */ }\r\n if (statusRoot.parentNode) statusRoot.parentNode.removeChild(statusRoot);\r\n statusRoot = null;\r\n statusData = null;\r\n};\r\n\r\nexport const renderStatus = ({ data, currentLocale, mainLang }) => {\r\n const msg = resolveStatusMessage(data, currentLocale, mainLang);\r\n if (!msg) return;\r\n\r\n try {\r\n if (sessionStorage.getItem(dismissKey(data)) === \"1\") return;\r\n } catch (e) { /* ignore */ }\r\n\r\n const rtl = RTL_LOCALES.indexOf(currentLocale) > -1;\r\n const bg = STATUS_COLORS[data.type] || STATUS_COLORS.info;\r\n\r\n if (statusRoot && statusRoot.parentNode) {\r\n statusRoot.parentNode.removeChild(statusRoot);\r\n }\r\n\r\n const root = document.createElement(\"div\");\r\n root.className = \"blakfy-status\";\r\n root.setAttribute(\"role\", \"status\");\r\n root.setAttribute(\"dir\", rtl ? \"rtl\" : \"ltr\");\r\n root.style.cssText = \"background:\" + bg + \";color:#fff\";\r\n\r\n const span = document.createElement(\"span\");\r\n span.className = \"blakfy-status-msg\";\r\n span.textContent = msg;\r\n root.appendChild(span);\r\n\r\n const btn = document.createElement(\"button\");\r\n btn.className = \"blakfy-status-dismiss\";\r\n btn.setAttribute(\"aria-label\", \"close\");\r\n btn.textContent = \"\u2715\";\r\n btn.addEventListener(\"click\", dismissStatus);\r\n root.appendChild(btn);\r\n\r\n document.body.appendChild(root);\r\n statusRoot = root;\r\n statusData = data;\r\n};\r\n\r\nexport const fetchStatus = (url) => {\r\n if (!url) return Promise.resolve(null);\r\n return fetch(url + (url.indexOf(\"?\") > -1 ? \"&\" : \"?\") + \"_=\" + Date.now(), { cache: \"no-store\" })\r\n .then((r) => r.json())\r\n .then((data) => {\r\n if (!data || !data.active) return null;\r\n if (data.expires && new Date(data.expires) < new Date()) return null;\r\n data._id = (data.expires || \"\") + (data.type || \"\");\r\n return data;\r\n })\r\n .catch(() => null);\r\n};\r\n", "// blakfy-cookie/src/gating/script-unblocker.js \u2014 activates blocked <script type=\"text/plain\"> tags by category\r\n\r\nconst SKIP_ATTRS = { type: 1 };\r\n\r\nconst isSkippedAttr = (name) => {\r\n if (SKIP_ATTRS[name]) return true;\r\n if (name.indexOf(\"data-blakfy-\") === 0) return true;\r\n return false;\r\n};\r\n\r\nexport const unblockScripts = (category) => {\r\n if (typeof document === \"undefined\" || !category) return 0;\r\n const sel = 'script[type=\"text/plain\"][data-blakfy-category=\"' + category + '\"]:not([data-blakfy-unblocked=\"true\"])';\r\n const nodes = document.querySelectorAll(sel);\r\n let count = 0;\r\n\r\n for (let i = 0; i < nodes.length; i++) {\r\n const orig = nodes[i];\r\n const fresh = document.createElement(\"script\");\r\n\r\n const attrs = orig.attributes;\r\n for (let j = 0; j < attrs.length; j++) {\r\n const a = attrs[j];\r\n if (isSkippedAttr(a.name)) continue;\r\n try { fresh.setAttribute(a.name, a.value); } catch (e) { /* ignore */ }\r\n }\r\n\r\n const blakfySrc = orig.getAttribute(\"data-blakfy-src\");\r\n if (blakfySrc) {\r\n fresh.src = blakfySrc;\r\n } else {\r\n fresh.text = orig.textContent || \"\";\r\n }\r\n\r\n orig.setAttribute(\"data-blakfy-unblocked\", \"true\");\r\n\r\n if (orig.parentNode) {\r\n orig.parentNode.replaceChild(fresh, orig);\r\n count++;\r\n }\r\n }\r\n\r\n return count;\r\n};\r\n", "// blakfy-cookie/src/gating/placeholder.js \u2014 standalone consent-required iframe placeholder UI\r\n\r\nconst fmt = (tpl, vars) => {\r\n if (!tpl) return \"\";\r\n return tpl.replace(/\\{(\\w+)\\}/g, (_, k) => (vars && vars[k] != null ? vars[k] : \"{\" + k + \"}\"));\r\n};\r\n\r\nexport const createPlaceholder = ({ category, srcUrl, t, onAccept }) => {\r\n const ph = (t && t.placeholder) || {};\r\n const titleText = ph.title || \"Content blocked\";\r\n const descText = fmt(ph.desc || \"Allow {category} cookies to view this content.\", { category: category || \"\" });\r\n const ctaText = ph.cta || \"Allow\";\r\n\r\n const wrap = document.createElement(\"div\");\r\n wrap.className = \"blakfy-placeholder\";\r\n wrap.setAttribute(\"role\", \"region\");\r\n wrap.setAttribute(\"aria-label\", titleText);\r\n wrap.style.cssText = [\r\n \"box-sizing:border-box\",\r\n \"display:flex\",\r\n \"flex-direction:column\",\r\n \"align-items:center\",\r\n \"justify-content:center\",\r\n \"gap:12px\",\r\n \"padding:24px\",\r\n \"min-height:200px\",\r\n \"width:100%\",\r\n \"border:1px solid #d0d7de\",\r\n \"border-radius:12px\",\r\n \"background:#f6f8fa\",\r\n \"color:#1f2328\",\r\n \"font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif\",\r\n \"font-size:14px\",\r\n \"line-height:1.5\",\r\n \"text-align:center\"\r\n ].join(\";\");\r\n\r\n const icon = document.createElement(\"div\");\r\n icon.setAttribute(\"aria-hidden\", \"true\");\r\n icon.style.cssText = \"font-size:28px;line-height:1\";\r\n icon.textContent = \"\uD83D\uDD12\";\r\n wrap.appendChild(icon);\r\n\r\n const title = document.createElement(\"div\");\r\n title.style.cssText = \"font-weight:600;font-size:16px;color:#1f2328\";\r\n title.textContent = titleText;\r\n wrap.appendChild(title);\r\n\r\n const desc = document.createElement(\"div\");\r\n desc.style.cssText = \"max-width:420px;color:#57606a\";\r\n desc.textContent = descText;\r\n wrap.appendChild(desc);\r\n\r\n if (srcUrl) {\r\n const host = document.createElement(\"div\");\r\n host.style.cssText = \"font-size:12px;color:#8c959f;word-break:break-all\";\r\n try {\r\n const u = new URL(srcUrl);\r\n host.textContent = u.hostname;\r\n } catch (e) {\r\n host.textContent = srcUrl;\r\n }\r\n wrap.appendChild(host);\r\n }\r\n\r\n const cta = document.createElement(\"button\");\r\n cta.type = \"button\";\r\n cta.className = \"blakfy-placeholder-cta\";\r\n cta.textContent = ctaText;\r\n cta.style.cssText = [\r\n \"appearance:none\",\r\n \"border:0\",\r\n \"border-radius:8px\",\r\n \"padding:10px 18px\",\r\n \"background:#1f6feb\",\r\n \"color:#ffffff\",\r\n \"font-weight:600\",\r\n \"font-size:14px\",\r\n \"cursor:pointer\",\r\n \"margin-top:4px\"\r\n ].join(\";\");\r\n cta.addEventListener(\"click\", () => {\r\n if (typeof onAccept === \"function\") {\r\n try { onAccept(category); } catch (e) { /* swallow */ }\r\n }\r\n });\r\n wrap.appendChild(cta);\r\n\r\n return wrap;\r\n};\r\n", "// blakfy-cookie/src/gating/iframe-unblocker.js \u2014 activates blocked iframes and installs consent placeholders\r\n\r\nimport { createPlaceholder } from \"./placeholder.js\";\r\n\r\nexport const unblockIframes = (category) => {\r\n if (typeof document === \"undefined\" || !category) return 0;\r\n const sel = 'iframe[data-blakfy-src][data-blakfy-category=\"' + category + '\"]:not([data-blakfy-unblocked=\"true\"])';\r\n const nodes = document.querySelectorAll(sel);\r\n let count = 0;\r\n\r\n for (let i = 0; i < nodes.length; i++) {\r\n const ifr = nodes[i];\r\n const src = ifr.getAttribute(\"data-blakfy-src\");\r\n if (!src) continue;\r\n\r\n const phId = ifr.getAttribute(\"data-blakfy-placeholder-id\");\r\n if (phId) {\r\n const ph = document.getElementById(phId);\r\n if (ph && ph.parentNode) ph.parentNode.removeChild(ph);\r\n ifr.removeAttribute(\"data-blakfy-placeholder-id\");\r\n }\r\n\r\n ifr.src = src;\r\n ifr.style.display = \"\";\r\n ifr.setAttribute(\"data-blakfy-unblocked\", \"true\");\r\n count++;\r\n }\r\n\r\n return count;\r\n};\r\n\r\nexport const installPlaceholders = (t, onAccept) => {\r\n if (typeof document === \"undefined\") return 0;\r\n const sel = 'iframe[data-blakfy-src][data-blakfy-category][data-blakfy-placeholder=\"auto\"]:not([data-blakfy-unblocked=\"true\"]):not([data-blakfy-placeholder-installed=\"true\"])';\r\n const nodes = document.querySelectorAll(sel);\r\n let count = 0;\r\n\r\n for (let i = 0; i < nodes.length; i++) {\r\n const ifr = nodes[i];\r\n const category = ifr.getAttribute(\"data-blakfy-category\");\r\n const srcUrl = ifr.getAttribute(\"data-blakfy-src\") || \"\";\r\n\r\n const ph = createPlaceholder({\r\n category: category,\r\n srcUrl: srcUrl,\r\n t: t,\r\n onAccept: onAccept\r\n });\r\n\r\n const phId = \"blakfy-ph-\" + Math.random().toString(36).slice(2, 10);\r\n ph.id = phId;\r\n ifr.setAttribute(\"data-blakfy-placeholder-id\", phId);\r\n ifr.setAttribute(\"data-blakfy-placeholder-installed\", \"true\");\r\n ifr.style.display = \"none\";\r\n\r\n if (ifr.parentNode) {\r\n ifr.parentNode.insertBefore(ph, ifr);\r\n count++;\r\n }\r\n }\r\n\r\n return count;\r\n};\r\n", "// blakfy-cookie/src/gating/observer.js \u2014 MutationObserver that unblocks new tagged scripts/iframes when consent allows\r\n\r\nlet activeObserver = null;\r\n\r\nconst isBlockedScript = (node) => {\r\n return node && node.nodeType === 1 && node.tagName === \"SCRIPT\"\r\n && node.getAttribute && node.getAttribute(\"type\") === \"text/plain\"\r\n && node.getAttribute(\"data-blakfy-category\");\r\n};\r\n\r\nconst isBlockedIframe = (node) => {\r\n return node && node.nodeType === 1 && node.tagName === \"IFRAME\"\r\n && node.getAttribute && node.getAttribute(\"data-blakfy-src\")\r\n && node.getAttribute(\"data-blakfy-category\");\r\n};\r\n\r\nconst collectCategoriesFromNode = (node, set) => {\r\n if (!node || node.nodeType !== 1) return;\r\n if (isBlockedScript(node) || isBlockedIframe(node)) {\r\n set[node.getAttribute(\"data-blakfy-category\")] = 1;\r\n }\r\n if (node.querySelectorAll) {\r\n const inner = node.querySelectorAll('script[type=\"text/plain\"][data-blakfy-category], iframe[data-blakfy-src][data-blakfy-category]');\r\n for (let i = 0; i < inner.length; i++) {\r\n set[inner[i].getAttribute(\"data-blakfy-category\")] = 1;\r\n }\r\n }\r\n};\r\n\r\nexport const startObserver = ({ getConsent, onScan }) => {\r\n if (typeof document === \"undefined\" || typeof MutationObserver === \"undefined\") return null;\r\n if (activeObserver) stopObserver();\r\n\r\n const obs = new MutationObserver((mutations) => {\r\n const seen = Object.create(null);\r\n for (let i = 0; i < mutations.length; i++) {\r\n const m = mutations[i];\r\n if (m.type !== \"childList\") continue;\r\n const added = m.addedNodes;\r\n for (let j = 0; j < added.length; j++) {\r\n collectCategoriesFromNode(added[j], seen);\r\n }\r\n }\r\n for (const cat in seen) {\r\n if (typeof getConsent === \"function\" && getConsent(cat)) {\r\n if (typeof onScan === \"function\") {\r\n try { onScan(cat); } catch (e) { /* swallow */ }\r\n }\r\n }\r\n }\r\n });\r\n\r\n obs.observe(document.body || document.documentElement, { childList: true, subtree: true });\r\n activeObserver = obs;\r\n return obs;\r\n};\r\n\r\nexport const stopObserver = () => {\r\n if (activeObserver) {\r\n try { activeObserver.disconnect(); } catch (e) { /* ignore */ }\r\n activeObserver = null;\r\n }\r\n};\r\n\r\nexport const scanAll = ({ getConsent, categories }) => {\r\n if (typeof document === \"undefined\") return [];\r\n const list = Array.isArray(categories) && categories.length\r\n ? categories\r\n : [\"essential\", \"analytics\", \"marketing\", \"functional\", \"recording\"];\r\n const granted = [];\r\n for (let i = 0; i < list.length; i++) {\r\n const cat = list[i];\r\n if (typeof getConsent === \"function\" && getConsent(cat)) {\r\n granted.push(cat);\r\n }\r\n }\r\n return granted;\r\n};\r\n", "// blakfy-cookie/src/gating/cleaner.js \u2014 registry-driven cookie + localStorage cleanup per category\r\n\r\nconst rules = new Map();\r\n\r\nconst ensure = (category) => {\r\n if (!rules.has(category)) rules.set(category, []);\r\n return rules.get(category);\r\n};\r\n\r\nexport const registerCleanup = ({ category, cookies, storage }) => {\r\n if (!category) return;\r\n const list = ensure(category);\r\n list.push({\r\n cookies: Array.isArray(cookies) ? cookies.slice() : [],\r\n storage: Array.isArray(storage) ? storage.slice() : []\r\n });\r\n};\r\n\r\nconst getRootDomain = (host) => {\r\n if (!host) return \"\";\r\n const parts = host.split(\".\");\r\n if (parts.length <= 2) return host;\r\n return parts.slice(-2).join(\".\");\r\n};\r\n\r\nconst expireCookie = (name) => {\r\n if (typeof document === \"undefined\") return;\r\n const host = (typeof location !== \"undefined\" && location.hostname) || \"\";\r\n const root = getRootDomain(host);\r\n const past = \"Thu, 01 Jan 1970 00:00:00 GMT\";\r\n\r\n try { document.cookie = name + \"=; expires=\" + past + \"; path=/\"; } catch (e) {}\r\n if (host) {\r\n try { document.cookie = name + \"=; expires=\" + past + \"; path=/; domain=\" + host; } catch (e) {}\r\n try { document.cookie = name + \"=; expires=\" + past + \"; path=/; domain=.\" + host; } catch (e) {}\r\n }\r\n if (root && root !== host) {\r\n try { document.cookie = name + \"=; expires=\" + past + \"; path=/; domain=\" + root; } catch (e) {}\r\n try { document.cookie = name + \"=; expires=\" + past + \"; path=/; domain=.\" + root; } catch (e) {}\r\n }\r\n};\r\n\r\nconst readCookieNames = () => {\r\n if (typeof document === \"undefined\" || !document.cookie) return [];\r\n const out = [];\r\n const parts = document.cookie.split(\";\");\r\n for (let i = 0; i < parts.length; i++) {\r\n const eq = parts[i].indexOf(\"=\");\r\n const name = (eq === -1 ? parts[i] : parts[i].slice(0, eq)).trim();\r\n if (name) out.push(name);\r\n }\r\n return out;\r\n};\r\n\r\nexport const runCleanup = (category) => {\r\n const list = rules.get(category);\r\n if (!list || !list.length) return { cookies: 0, storage: 0 };\r\n\r\n const allNames = readCookieNames();\r\n let cookieCount = 0;\r\n let storageCount = 0;\r\n\r\n for (let i = 0; i < list.length; i++) {\r\n const rule = list[i];\r\n const cookieMatchers = rule.cookies || [];\r\n\r\n for (let m = 0; m < cookieMatchers.length; m++) {\r\n const matcher = cookieMatchers[m];\r\n if (matcher instanceof RegExp) {\r\n for (let n = 0; n < allNames.length; n++) {\r\n if (matcher.test(allNames[n])) {\r\n expireCookie(allNames[n]);\r\n cookieCount++;\r\n }\r\n }\r\n } else if (typeof matcher === \"string\") {\r\n expireCookie(matcher);\r\n cookieCount++;\r\n }\r\n }\r\n\r\n const storageKeys = rule.storage || [];\r\n for (let k = 0; k < storageKeys.length; k++) {\r\n try {\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.removeItem(storageKeys[k]);\r\n storageCount++;\r\n }\r\n } catch (e) { /* ignore */ }\r\n }\r\n }\r\n\r\n return { cookies: cookieCount, storage: storageCount };\r\n};\r\n\r\nexport const clearAllRules = () => {\r\n rules.clear();\r\n};\r\n", "// blakfy-cookie/src/presets/google-analytics.js \u2014 GA4 preset (analytics category)\r\n\r\nexport default {\r\n name: \"Google Analytics 4\",\r\n category: \"analytics\",\r\n cookies: [/^_ga/, \"_gid\", \"_gat\", /^_ga_/],\r\n storage: [],\r\n scriptHosts: [\"www.googletagmanager.com\", \"google-analytics.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/google-tag-manager.js \u2014 GTM preset (analytics category)\r\n\r\nexport default {\r\n name: \"Google Tag Manager\",\r\n category: \"analytics\",\r\n cookies: [\"_gtm\", /^_dc_gtm/],\r\n storage: [],\r\n scriptHosts: [\"www.googletagmanager.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/google-maps.js \u2014 Google Maps preset (functional category)\r\n\r\nexport default {\r\n name: \"Google Maps\",\r\n category: \"functional\",\r\n cookies: [],\r\n storage: [],\r\n scriptHosts: [\"maps.googleapis.com\", \"maps.gstatic.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/google-recaptcha.js \u2014 Google reCAPTCHA preset (functional category)\r\n\r\nexport default {\r\n name: \"Google reCAPTCHA\",\r\n category: \"functional\",\r\n cookies: [\"_GRECAPTCHA\"],\r\n storage: [],\r\n scriptHosts: [\"www.google.com/recaptcha\", \"www.gstatic.com/recaptcha\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/facebook-pixel.js \u2014 Meta/Facebook Pixel preset (marketing category)\r\n\r\nexport default {\r\n name: \"Facebook Pixel\",\r\n category: \"marketing\",\r\n cookies: [\"_fbp\", \"_fbc\"],\r\n storage: [],\r\n scriptHosts: [\"connect.facebook.net\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/youtube.js \u2014 YouTube embed preset (marketing category)\r\n\r\nexport default {\r\n name: \"YouTube\",\r\n category: \"marketing\",\r\n cookies: [],\r\n storage: [],\r\n scriptHosts: [\"www.youtube.com\", \"youtube-nocookie.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/vimeo.js \u2014 Vimeo player preset (marketing category)\r\n\r\nexport default {\r\n name: \"Vimeo\",\r\n category: \"marketing\",\r\n cookies: [],\r\n storage: [],\r\n scriptHosts: [\"player.vimeo.com\", \"vimeo.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/hotjar.js \u2014 Hotjar analytics preset (analytics category)\r\n\r\nexport default {\r\n name: \"Hotjar\",\r\n category: \"analytics\",\r\n cookies: [/^_hj/],\r\n storage: [],\r\n scriptHosts: [\"static.hotjar.com\", \"script.hotjar.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/microsoft-clarity.js \u2014 Microsoft Clarity preset (analytics category)\r\n\r\nexport default {\r\n name: \"Microsoft Clarity\",\r\n category: \"analytics\",\r\n cookies: [\"_clck\", \"_clsk\", \"CLID\", \"MR\", \"MUID\", \"SM\"],\r\n storage: [],\r\n scriptHosts: [\"www.clarity.ms\", \"c.clarity.ms\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/linkedin-insight.js \u2014 LinkedIn Insight Tag preset (marketing category)\r\n\r\nexport default {\r\n name: \"LinkedIn Insight Tag\",\r\n category: \"marketing\",\r\n cookies: [\"li_sugr\", \"bcookie\", \"lidc\", \"UserMatchHistory\", \"AnalyticsSyncHistory\"],\r\n storage: [],\r\n scriptHosts: [\"snap.licdn.com\", \"px.ads.linkedin.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/yandex-metrica.js \u2014 Yandex Metrica preset (analytics + recording sub-category for Webvisor)\r\n\r\nexport default {\r\n name: \"Yandex Metrica\",\r\n category: \"analytics\",\r\n subCategory: \"recording\",\r\n cookies: [/^_ym/, \"yandexuid\", \"yabs-frequency\"],\r\n storage: [],\r\n scriptHosts: [\"mc.yandex.ru\", \"mc.webvisor.com\", \"mc.yandex.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/bing-ads-uet.js \u2014 Bing Ads UET preset (marketing category)\r\n\r\nexport default {\r\n name: \"Bing Ads UET\",\r\n category: \"marketing\",\r\n cookies: [\"MUID\", \"_uetsid\", \"_uetvid\"],\r\n storage: [],\r\n scriptHosts: [\"bat.bing.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/tiktok-pixel.js \u2014 TikTok Pixel preset (marketing category)\r\n\r\nexport default {\r\n name: \"TikTok Pixel\",\r\n category: \"marketing\",\r\n cookies: [\"_ttp\"],\r\n storage: [],\r\n scriptHosts: [\"analytics.tiktok.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/pinterest-tag.js \u2014 Pinterest Tag preset (marketing category)\r\n\r\nexport default {\r\n name: \"Pinterest Tag\",\r\n category: \"marketing\",\r\n cookies: [\"_pinterest_ct\", \"_pinterest_sess\"],\r\n storage: [],\r\n scriptHosts: [\"s.pinimg.com\", \"ct.pinterest.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/tawk-to.js \u2014 Tawk.to live chat preset (functional category)\r\n\r\nexport default {\r\n name: \"Tawk.to\",\r\n category: \"functional\",\r\n cookies: [\"TawkConnectionTime\", /^__tawkuuid/, /^Tawk_/],\r\n storage: [],\r\n scriptHosts: [\"embed.tawk.to\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/intercom.js \u2014 Intercom messenger preset (functional category)\r\n\r\nexport default {\r\n name: \"Intercom\",\r\n category: \"functional\",\r\n cookies: [/^intercom-/],\r\n storage: [],\r\n scriptHosts: [\"widget.intercom.io\", \"js.intercomcdn.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/hubspot.js \u2014 HubSpot preset (marketing category)\r\n\r\nexport default {\r\n name: \"HubSpot\",\r\n category: \"marketing\",\r\n cookies: [\"__hstc\", \"__hssc\", \"__hssrc\", \"hubspotutk\", \"messagesUtk\"],\r\n storage: [],\r\n scriptHosts: [\"js.hs-scripts.com\", \"js.hs-analytics.net\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/mailchimp.js \u2014 Mailchimp preset (marketing category)\r\n\r\nexport default {\r\n name: \"Mailchimp\",\r\n category: \"marketing\",\r\n cookies: [/^_mcid/, \"ak_bmsc\", \"_mcvisit\"],\r\n storage: [],\r\n scriptHosts: [\"chimpstatic.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/_registry.js \u2014 central registry mapping short keys to preset modules\r\n\r\nimport ga4 from \"./google-analytics.js\";\r\nimport gtm from \"./google-tag-manager.js\";\r\nimport maps from \"./google-maps.js\";\r\nimport recaptcha from \"./google-recaptcha.js\";\r\nimport facebook from \"./facebook-pixel.js\";\r\nimport youtube from \"./youtube.js\";\r\nimport vimeo from \"./vimeo.js\";\r\nimport hotjar from \"./hotjar.js\";\r\nimport clarity from \"./microsoft-clarity.js\";\r\nimport linkedin from \"./linkedin-insight.js\";\r\nimport yandex from \"./yandex-metrica.js\";\r\nimport bing from \"./bing-ads-uet.js\";\r\nimport tiktok from \"./tiktok-pixel.js\";\r\nimport pinterest from \"./pinterest-tag.js\";\r\nimport tawkto from \"./tawk-to.js\";\r\nimport intercom from \"./intercom.js\";\r\nimport hubspot from \"./hubspot.js\";\r\nimport mailchimp from \"./mailchimp.js\";\r\n\r\nexport const PRESETS = {\r\n ga4,\r\n gtm,\r\n maps,\r\n recaptcha,\r\n facebook,\r\n youtube,\r\n vimeo,\r\n hotjar,\r\n clarity,\r\n linkedin,\r\n yandex,\r\n bing,\r\n tiktok,\r\n pinterest,\r\n tawkto,\r\n intercom,\r\n hubspot,\r\n mailchimp\r\n};\r\n\r\nexport const applyPreset = (name, { registerCleanup }) => {\r\n const preset = PRESETS[name];\r\n if (!preset) return null;\r\n if (typeof registerCleanup === \"function\") {\r\n registerCleanup({\r\n category: preset.category,\r\n cookies: preset.cookies || [],\r\n storage: preset.storage || []\r\n });\r\n if (preset.subCategory) {\r\n registerCleanup({\r\n category: preset.subCategory,\r\n cookies: preset.cookies || [],\r\n storage: preset.storage || []\r\n });\r\n }\r\n }\r\n return preset;\r\n};\r\n", "// blakfy-cookie/src/compliance/google-cmv2.js \u2014 Google Consent Mode v2 signals (gtag)\r\n\r\nlet defaultsInstalled = false;\r\n\r\nexport const installDefaults = () => {\r\n if (typeof window === \"undefined\") return;\r\n if (defaultsInstalled) return;\r\n defaultsInstalled = true;\r\n\r\n window.dataLayer = window.dataLayer || [];\r\n if (typeof window.gtag !== \"function\") {\r\n window.gtag = function () { window.dataLayer.push(arguments); };\r\n }\r\n\r\n window.gtag(\"consent\", \"default\", {\r\n ad_storage: \"denied\",\r\n ad_user_data: \"denied\",\r\n ad_personalization: \"denied\",\r\n analytics_storage: \"denied\",\r\n functionality_storage: \"denied\",\r\n personalization_storage: \"denied\",\r\n security_storage: \"granted\",\r\n wait_for_update: 500\r\n });\r\n};\r\n\r\nexport const pushGCM = (state) => {\r\n if (typeof window === \"undefined\") return;\r\n if (typeof window.gtag !== \"function\") return;\r\n const s = state || {};\r\n const m = s.marketing ? \"granted\" : \"denied\";\r\n const a = s.analytics ? \"granted\" : \"denied\";\r\n const f = s.functional ? \"granted\" : \"denied\";\r\n window.gtag(\"consent\", \"update\", {\r\n ad_storage: m,\r\n ad_user_data: m,\r\n ad_personalization: m,\r\n analytics_storage: a,\r\n functionality_storage: f,\r\n personalization_storage: f,\r\n security_storage: \"granted\"\r\n });\r\n};\r\n", "// blakfy-cookie/src/compliance/microsoft-uet.js \u2014 Microsoft UET / Clarity consent signals\r\n\r\nlet defaultsInstalled = false;\r\n\r\nexport const installDefaults = () => {\r\n if (typeof window === \"undefined\") return;\r\n if (defaultsInstalled) return;\r\n defaultsInstalled = true;\r\n\r\n window.uetq = window.uetq || [];\r\n window.uetq.push(\"consent\", \"default\", { ad_storage: \"denied\" });\r\n};\r\n\r\nexport const pushUET = (state) => {\r\n if (typeof window === \"undefined\") return;\r\n const s = state || {};\r\n window.uetq = window.uetq || [];\r\n window.uetq.push(\"consent\", \"update\", {\r\n ad_storage: s.marketing ? \"granted\" : \"denied\"\r\n });\r\n};\r\n", "// blakfy-cookie/src/compliance/yandex-metrica.js \u2014 Yandex Metrica gating layer (no native GCM-style API)\r\n\r\nlet defaultsInstalled = false;\r\n\r\nexport const installDefaults = () => {\r\n if (typeof window === \"undefined\") return;\r\n if (defaultsInstalled) return;\r\n defaultsInstalled = true;\r\n\r\n if (typeof window.ym !== \"function\") {\r\n window.ym = function () { /* swallow until consent */ };\r\n window.ym.__blakfyStub = true;\r\n }\r\n};\r\n\r\nexport const applyYandex = (state, ctx) => {\r\n const s = state || {};\r\n const unblock = ctx && ctx.unblock;\r\n if (typeof unblock !== \"function\") return;\r\n if (s.analytics === true) unblock(\"analytics\");\r\n if (s.recording === true) unblock(\"recording\");\r\n};\r\n\r\nexport const revokeYandex = (ctx) => {\r\n const runCleanup = ctx && ctx.runCleanup;\r\n if (typeof runCleanup !== \"function\") return;\r\n runCleanup(\"analytics\");\r\n runCleanup(\"recording\");\r\n};\r\n", "// blakfy-cookie/src/compliance/tcf-v2.js \u2014 IAB TCF v2.2 minimal CMP surface (preview-mode encoder)\r\n// Simplified TC string encoder \u2014 produces parseable but empty vendor consent v2.2 string. Production sites SHOULD wait for IAB Europe CMP audit.\r\n\r\nconst B64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\r\n\r\nlet lastTCString = \"\";\r\nlet vendorList = null;\r\n\r\nconst bitsToB64 = (bits) => {\r\n const pad = (6 - (bits.length % 6)) % 6;\r\n const padded = bits + \"0\".repeat(pad);\r\n let out = \"\";\r\n for (let i = 0; i < padded.length; i += 6) {\r\n out += B64.charAt(parseInt(padded.substr(i, 6), 2));\r\n }\r\n return out;\r\n};\r\n\r\nconst intToBits = (n, width) => {\r\n let s = (n >>> 0).toString(2);\r\n if (s.length > width) s = s.slice(-width);\r\n return s.padStart(width, \"0\");\r\n};\r\n\r\nconst bigIntToBits = (n, width) => {\r\n const v = BigInt(Math.max(0, Math.floor(Number(n) / 100)));\r\n let s = v.toString(2);\r\n if (s.length > width) s = s.slice(-width);\r\n return s.padStart(width, \"0\");\r\n};\r\n\r\nconst charToBits = (c) => intToBits(c.toUpperCase().charCodeAt(0) - 65, 6);\r\nconst langToBits = (lang) => charToBits((lang || \"EN\").charAt(0)) + charToBits((lang || \"EN\").charAt(1));\r\n\r\nconst buildPurposes = (state) => {\r\n const out = new Array(24).fill(0);\r\n out[0] = 1;\r\n if (state && state.analytics) { out[1] = 1; out[2] = 1; out[3] = 1; }\r\n if (state && state.marketing) { out[4] = 1; out[5] = 1; out[6] = 1; out[7] = 1; out[8] = 1; }\r\n if (state && state.functional) { out[9] = 1; }\r\n return out.join(\"\");\r\n};\r\n\r\nexport const buildTCString = (opts) => {\r\n const o = opts || {};\r\n const cmpId = o.cmpId | 0;\r\n const cmpVersion = o.cmpVersion | 0;\r\n const now = Date.now();\r\n const created = bigIntToBits(now, 36);\r\n const lastUpdated = bigIntToBits(now, 36);\r\n\r\n const purposesConsent = o.purposeConsents || buildPurposes(o.state);\r\n const purposesLI = \"0\".repeat(24);\r\n\r\n const core =\r\n intToBits(2, 6) +\r\n created +\r\n lastUpdated +\r\n intToBits(cmpId, 12) +\r\n intToBits(cmpVersion, 12) +\r\n intToBits(1, 6) +\r\n langToBits(o.consentLanguage || \"EN\") +\r\n intToBits(o.vendorListVersion || 300, 12) +\r\n intToBits(4, 6) +\r\n \"1\" +\r\n \"0\" +\r\n \"0\".repeat(12) +\r\n purposesConsent +\r\n purposesLI +\r\n \"0\" +\r\n charToBits(\"A\") + charToBits(\"A\") +\r\n intToBits(0, 16) +\r\n intToBits(0, 16) +\r\n \"1\" +\r\n intToBits(0, 12) +\r\n intToBits(0, 16) +\r\n intToBits(0, 16) +\r\n \"1\" +\r\n intToBits(0, 12);\r\n\r\n return bitsToB64(core);\r\n};\r\n\r\nexport const getTCString = () => lastTCString;\r\nexport const setVendorList = (vl) => { vendorList = vl; };\r\n\r\nconst buildPurposeMap = (state) => {\r\n const consents = {};\r\n const li = {};\r\n const s = state || {};\r\n for (let i = 1; i <= 11; i++) { consents[i] = false; li[i] = false; }\r\n consents[1] = true;\r\n if (s.analytics) { consents[2] = true; consents[3] = true; consents[4] = true; }\r\n if (s.marketing) { consents[5] = true; consents[6] = true; consents[7] = true; consents[8] = true; consents[9] = true; }\r\n if (s.functional) { consents[10] = true; }\r\n return { consents: consents, legitimateInterests: li };\r\n};\r\n\r\nexport const installTCFAPI = (opts) => {\r\n if (typeof window === \"undefined\") return;\r\n const o = opts || {};\r\n const cmpId = o.cmpId | 0;\r\n const cmpVersion = o.cmpVersion | 0;\r\n const getConsent = typeof o.getConsent === \"function\" ? o.getConsent : () => ({});\r\n const subscribe = typeof o.on === \"function\" ? o.on : null;\r\n\r\n const listeners = Object.create(null);\r\n let nextId = 1;\r\n let displayStatus = \"hidden\";\r\n let eventStatus = \"tcloaded\";\r\n\r\n const buildTCData = (listenerId) => {\r\n const state = getConsent() || {};\r\n const purposes = buildPurposeMap(state);\r\n lastTCString = buildTCString({ cmpId: cmpId, cmpVersion: cmpVersion, state: state });\r\n return {\r\n tcString: lastTCString,\r\n eventStatus: eventStatus,\r\n cmpId: cmpId,\r\n cmpVersion: cmpVersion,\r\n gdprApplies: true,\r\n listenerId: typeof listenerId === \"number\" ? listenerId : null,\r\n addtlConsent: \"\",\r\n purpose: purposes,\r\n vendor: { consents: {}, legitimateInterests: {} }\r\n };\r\n };\r\n\r\n const buildPing = () => ({\r\n gdprApplies: true,\r\n cmpLoaded: true,\r\n cmpStatus: \"loaded\",\r\n displayStatus: displayStatus,\r\n apiVersion: \"2.2\",\r\n cmpVersion: cmpVersion,\r\n cmpId: cmpId,\r\n gvlVersion: vendorList && vendorList.vendorListVersion ? vendorList.vendorListVersion : 0,\r\n tcfPolicyVersion: 4\r\n });\r\n\r\n const handle = (command, version, callback, parameter) => {\r\n if (typeof callback !== \"function\") return;\r\n if (command === \"ping\") { callback(buildPing(), true); return; }\r\n if (command === \"getTCData\") { callback(buildTCData(null), true); return; }\r\n if (command === \"addEventListener\") {\r\n const id = nextId++;\r\n listeners[id] = callback;\r\n callback(buildTCData(id), true);\r\n return;\r\n }\r\n if (command === \"removeEventListener\") {\r\n if (listeners[parameter]) { delete listeners[parameter]; callback(true, true); }\r\n else callback(false, true);\r\n return;\r\n }\r\n callback(null, false);\r\n };\r\n\r\n if (!window.__tcfapi || !window.__tcfapi.__blakfy) {\r\n window.__tcfapi = (cmd, ver, cb, param) => handle(cmd, ver, cb, param);\r\n window.__tcfapi.__blakfy = true;\r\n }\r\n\r\n if (typeof document !== \"undefined\" && !document.querySelector('iframe[name=\"__tcfapiLocator\"]')) {\r\n try {\r\n const iframe = document.createElement(\"iframe\");\r\n iframe.style.cssText = \"display:none;position:absolute;width:0;height:0;border:0\";\r\n iframe.name = \"__tcfapiLocator\";\r\n (document.body || document.documentElement).appendChild(iframe);\r\n } catch (e) { /* noop */ }\r\n }\r\n\r\n if (!window.__blakfyTcfMsg) {\r\n window.__blakfyTcfMsg = true;\r\n window.addEventListener(\"message\", (ev) => {\r\n const data = ev && ev.data;\r\n if (!data) return;\r\n const payload = typeof data === \"string\" ? safeParse(data) : data;\r\n if (!payload || !payload.__tcfapiCall) return;\r\n const call = payload.__tcfapiCall;\r\n handle(call.command, call.version, (returnValue, success) => {\r\n const msg = { __tcfapiReturn: { returnValue: returnValue, success: success, callId: call.callId } };\r\n try { ev.source && ev.source.postMessage(msg, ev.origin || \"*\"); } catch (e) { /* noop */ }\r\n }, call.parameter);\r\n });\r\n }\r\n\r\n const fireAll = () => {\r\n const ids = Object.keys(listeners);\r\n for (let i = 0; i < ids.length; i++) {\r\n const id = ids[i];\r\n try { listeners[id](buildTCData(parseInt(id, 10)), true); } catch (e) { /* noop */ }\r\n }\r\n };\r\n\r\n if (subscribe) {\r\n subscribe(\"change\", () => { eventStatus = \"useractioncomplete\"; fireAll(); });\r\n subscribe(\"display\", (visible) => { displayStatus = visible ? \"visible\" : \"hidden\"; fireAll(); });\r\n }\r\n\r\n return { fireAll: fireAll };\r\n};\r\n\r\nconst safeParse = (s) => { try { return JSON.parse(s); } catch (e) { return null; } };\r\n", "// blakfy-cookie/src/compliance/ccpa.js \u2014 CCPA / CPRA __uspapi + Do Not Sell link\r\n\r\nlet optedOutFlag = false;\r\nlet noticeGiven = true;\r\nlet cmpVersion = 1;\r\nlet listeners = [];\r\nlet installed = false;\r\n\r\nexport const buildUSPString = (opts) => {\r\n const o = opts || {};\r\n const version = o.version || 1;\r\n const notice = o.notice === false ? \"N\" : (o.notice === null ? \"-\" : \"Y\");\r\n const optOut = o.optedOut === true ? \"Y\" : (o.optedOut === null ? \"-\" : \"N\");\r\n const lspa = o.lspa === true ? \"Y\" : (o.lspa === null ? \"-\" : \"N\");\r\n return String(version) + notice + optOut + lspa;\r\n};\r\n\r\nconst currentString = () => buildUSPString({ version: cmpVersion, notice: noticeGiven, optedOut: optedOutFlag, lspa: false });\r\n\r\nconst fireListeners = () => {\r\n const data = { version: cmpVersion, uspString: currentString() };\r\n for (let i = 0; i < listeners.length; i++) {\r\n try { listeners[i].cb(data, true); } catch (e) { /* noop */ }\r\n }\r\n};\r\n\r\nexport const installUSP = (opts) => {\r\n if (typeof window === \"undefined\") return;\r\n const o = opts || {};\r\n if (typeof o.optedOut === \"boolean\") optedOutFlag = o.optedOut;\r\n if (typeof o.notice === \"boolean\") noticeGiven = o.notice;\r\n\r\n if (installed) return;\r\n installed = true;\r\n\r\n window.__uspapi = (command, version, callback) => {\r\n if (typeof callback !== \"function\") return;\r\n if (command === \"getUSPData\") {\r\n callback({ version: cmpVersion, uspString: currentString() }, true);\r\n return;\r\n }\r\n callback(null, false);\r\n };\r\n\r\n if (typeof document !== \"undefined\" && !document.querySelector('iframe[name=\"__uspapiLocator\"]')) {\r\n try {\r\n const iframe = document.createElement(\"iframe\");\r\n iframe.style.cssText = \"display:none;position:absolute;width:0;height:0;border:0\";\r\n iframe.name = \"__uspapiLocator\";\r\n (document.body || document.documentElement).appendChild(iframe);\r\n } catch (e) { /* noop */ }\r\n }\r\n};\r\n\r\nexport const optOut = () => {\r\n optedOutFlag = true;\r\n noticeGiven = true;\r\n fireListeners();\r\n if (typeof window !== \"undefined\") {\r\n try { window.dispatchEvent(new CustomEvent(\"blakfy:ccpa:optout\", { detail: { uspString: currentString() } })); } catch (e) { /* noop */ }\r\n }\r\n};\r\n\r\nexport const isOptedOut = () => optedOutFlag === true;\r\n\r\nexport const installDoNotSellLink = (opts) => {\r\n if (typeof document === \"undefined\") return null;\r\n const o = opts || {};\r\n const container = o.container || document.body;\r\n if (!container) return null;\r\n const existing = container.querySelector(\".blakfy-ccpa-link\");\r\n if (existing) return existing;\r\n\r\n const t = o.t || {};\r\n const label = (t.ccpa && t.ccpa.doNotSell) || \"Do Not Sell or Share My Personal Information\";\r\n\r\n const a = document.createElement(\"a\");\r\n a.className = \"blakfy-ccpa-link\";\r\n a.href = \"#\";\r\n a.setAttribute(\"role\", \"button\");\r\n a.textContent = label;\r\n a.addEventListener(\"click\", (e) => {\r\n e.preventDefault();\r\n optOut();\r\n });\r\n container.appendChild(a);\r\n return a;\r\n};\r\n", "// blakfy-cookie/src/compliance/gpc.js \u2014 Global Privacy Control detection and policy\r\n\r\nexport const getGPC = () => {\r\n if (typeof navigator !== \"undefined\" && navigator.globalPrivacyControl === true) return true;\r\n if (typeof document !== \"undefined\" && document.documentElement && document.documentElement.dataset && document.documentElement.dataset.gpc === \"1\") return true;\r\n return false;\r\n};\r\n\r\nexport const applyGPC = (opts) => {\r\n const o = opts || {};\r\n const mode = o.mode || \"respect\";\r\n const currentState = o.currentState || null;\r\n const setPrefs = typeof o.setPrefs === \"function\" ? o.setPrefs : null;\r\n\r\n if (mode !== \"respect\") return { applied: false, reason: \"mode-disabled\" };\r\n if (!getGPC()) return { applied: false, reason: \"no-gpc-signal\" };\r\n\r\n if (currentState && currentState.explicit === true) {\r\n return { applied: false, reason: \"user-already-consented\" };\r\n }\r\n\r\n if (setPrefs) setPrefs({ analytics: false, marketing: false });\r\n return { applied: true, reason: \"gpc-auto-deny\" };\r\n};\r\n", "// blakfy-cookie/src/compliance/dnt.js \u2014 Do Not Track detection and policy (weaker than GPC)\r\n\r\nexport const getDNT = () => {\r\n if (typeof navigator !== \"undefined\" && navigator.doNotTrack === \"1\") return true;\r\n if (typeof window !== \"undefined\" && window.doNotTrack === \"1\") return true;\r\n return false;\r\n};\r\n\r\nexport const applyDNT = (opts) => {\r\n const o = opts || {};\r\n const mode = o.mode || \"respect\";\r\n const setPrefs = typeof o.setPrefs === \"function\" ? o.setPrefs : null;\r\n\r\n if (!getDNT()) return { applied: false, reason: \"no-dnt-signal\" };\r\n\r\n if (mode === \"auto-deny\") {\r\n if (setPrefs) setPrefs({ analytics: false, marketing: false });\r\n return { applied: true, reason: \"dnt-auto-deny\" };\r\n }\r\n\r\n return { applied: false, reason: \"dnt-ui-hint-only\" };\r\n};\r\n", "// blakfy-cookie/src/geo/jurisdiction.js \u2014 jurisdiction detection (GDPR / CCPA / LGPD / default)\r\n\r\nexport const EU_COUNTRIES = [\r\n \"AT\",\"BE\",\"BG\",\"HR\",\"CY\",\"CZ\",\"DK\",\"EE\",\"FI\",\"FR\",\"DE\",\"GR\",\"HU\",\"IE\",\"IT\",\r\n \"LV\",\"LT\",\"LU\",\"MT\",\"NL\",\"PL\",\"PT\",\"RO\",\"SK\",\"SI\",\"ES\",\"SE\",\r\n \"NO\",\"IS\",\"LI\",\r\n \"GB\",\"UK\",\r\n \"CH\"\r\n];\r\n\r\nexport const mapCountryToJurisdiction = (country, region) => {\r\n if (!country) return \"default\";\r\n const c = String(country).toUpperCase();\r\n const r = region ? String(region).toUpperCase() : \"\";\r\n\r\n if (EU_COUNTRIES.indexOf(c) !== -1) return \"GDPR\";\r\n if (c === \"TR\") return \"GDPR\";\r\n if (c === \"BR\") return \"LGPD\";\r\n if (c === \"US\" && r === \"CA\") return \"CCPA\";\r\n return \"default\";\r\n};\r\n\r\nconst tzGuess = () => {\r\n try {\r\n const tz = Intl.DateTimeFormat().resolvedOptions().timeZone || \"\";\r\n if (tz.indexOf(\"Europe/\") === 0) return \"GDPR\";\r\n if (tz === \"America/Los_Angeles\" || tz === \"America/Tijuana\") return \"CCPA\";\r\n if (tz === \"America/Sao_Paulo\") return \"LGPD\";\r\n return \"default\";\r\n } catch (e) {\r\n return \"default\";\r\n }\r\n};\r\n\r\nexport const detectJurisdiction = async (opts) => {\r\n const o = opts || {};\r\n\r\n if (typeof document !== \"undefined\" && document.documentElement && document.documentElement.dataset && document.documentElement.dataset.jurisdiction) {\r\n const v = document.documentElement.dataset.jurisdiction;\r\n if (v === \"GDPR\" || v === \"CCPA\" || v === \"LGPD\" || v === \"default\") return v;\r\n }\r\n\r\n if (o.geoEndpoint && typeof fetch === \"function\") {\r\n try {\r\n const res = await fetch(o.geoEndpoint, { credentials: \"omit\" });\r\n if (res && res.ok) {\r\n const data = await res.json();\r\n return mapCountryToJurisdiction(data && data.country, data && data.region);\r\n }\r\n } catch (e) { /* fall through */ }\r\n }\r\n\r\n return tzGuess();\r\n};\r\n", "// blakfy-cookie/src/core/audit.js \u2014 fire-and-forget audit log POST per COMPLIANCE.md \u00A710\r\n\r\nexport const postAudit = (endpoint, payload) => {\r\n if (!endpoint) return;\r\n try {\r\n fetch(endpoint, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify(payload),\r\n keepalive: true,\r\n }).catch(() => {});\r\n } catch (e) {\r\n /* swallow */\r\n }\r\n};\r\n", "// blakfy-cookie/src/api.js \u2014 public window.BlakfyCookie surface (v1 contract preserved + v2 additions)\r\n\r\nimport { writeCookie, buildState } from \"./core/consent-store.js\";\r\nimport { postAudit } from \"./core/audit.js\";\r\nimport { getTranslation, DEFAULT_LOCALE } from \"./i18n/index.js\";\r\nimport { normalizeLocale, RTL_LOCALES } from \"./i18n/detect.js\";\r\nimport { scanAll } from \"./gating/observer.js\";\r\n\r\nconst VERSION = \"2.1.0\";\r\nconst CATEGORIES = [\"analytics\", \"marketing\", \"functional\", \"recording\"];\r\n\r\nexport const createAPI = (ctx) => {\r\n const { config, emitter, deps } = ctx;\r\n let state = ctx.state || null;\r\n let currentLocale = ctx.locale;\r\n let mainLang = ctx.mainLang;\r\n let jurisdiction = ctx.jurisdiction || \"default\";\r\n let t = getTranslation(currentLocale);\r\n\r\n let modalRoot = null;\r\n let bannerRoot = null;\r\n\r\n const setUI = (which, root) => {\r\n if (which === \"modal\") modalRoot = root;\r\n if (which === \"banner\") bannerRoot = root;\r\n };\r\n\r\n const closeUI = () => {\r\n if (typeof document !== \"undefined\") {\r\n const overlays = document.querySelectorAll(\".blakfy-overlay\");\r\n for (let i = 0; i < overlays.length; i++) {\r\n const o = overlays[i];\r\n if (o && o.parentNode) o.parentNode.removeChild(o);\r\n }\r\n }\r\n modalRoot = null;\r\n bannerRoot = null;\r\n if (deps && typeof deps.removeFocusTrap === \"function\") deps.removeFocusTrap();\r\n };\r\n\r\n const getConsent = (cat) => {\r\n if (cat === \"essential\") return true;\r\n return state ? !!state[cat] : false;\r\n };\r\n\r\n const grantedCategories = (s) => {\r\n const out = [];\r\n if (!s) return out;\r\n for (let i = 0; i < CATEGORIES.length; i++) {\r\n if (s[CATEGORIES[i]]) out.push(CATEGORIES[i]);\r\n }\r\n return out;\r\n };\r\n\r\n const commit = (prefs, action) => {\r\n const prevState = state;\r\n const prevGranted = grantedCategories(prevState);\r\n\r\n const next = buildState({\r\n prefs: prefs || {},\r\n currentLocale: currentLocale,\r\n mainLang: mainLang,\r\n policyVersion: config.policyVersion,\r\n jurisdiction: jurisdiction,\r\n tcString: deps && typeof deps.getTCString === \"function\" ? deps.getTCString() : null,\r\n uspString: null,\r\n prevId: prevState && prevState.id\r\n });\r\n\r\n state = next;\r\n\r\n try { writeCookie(state); } catch (e) { /* ignore */ }\r\n\r\n if (config.auditEndpoint) {\r\n postAudit(config.auditEndpoint, {\r\n id: state.id,\r\n action: action || \"save\",\r\n timestamp: state.timestamp,\r\n version: state.version,\r\n jurisdiction: state.jurisdiction,\r\n consent: {\r\n analytics: state.analytics,\r\n marketing: state.marketing,\r\n functional: state.functional,\r\n recording: state.recording\r\n }\r\n });\r\n }\r\n\r\n if (deps && typeof deps.pushGCM === \"function\") deps.pushGCM(state);\r\n if (deps && typeof deps.pushUET === \"function\") deps.pushUET(state);\r\n if (deps && typeof deps.applyYandex === \"function\") {\r\n deps.applyYandex(state, {\r\n unblock: (cat) => {\r\n if (deps.unblockScripts) deps.unblockScripts(cat);\r\n if (deps.unblockIframes) deps.unblockIframes(cat);\r\n },\r\n runCleanup: deps.runCleanup\r\n });\r\n }\r\n\r\n const nowGranted = grantedCategories(state);\r\n for (let i = 0; i < nowGranted.length; i++) {\r\n const cat = nowGranted[i];\r\n if (deps && deps.unblockScripts) deps.unblockScripts(cat);\r\n if (deps && deps.unblockIframes) deps.unblockIframes(cat);\r\n }\r\n\r\n for (let j = 0; j < prevGranted.length; j++) {\r\n const c = prevGranted[j];\r\n if (nowGranted.indexOf(c) === -1) {\r\n if (deps && typeof deps.runCleanup === \"function\") deps.runCleanup(c);\r\n }\r\n }\r\n\r\n emitter.emit(\"change\", state);\r\n for (let k = 0; k < CATEGORIES.length; k++) {\r\n const cat = CATEGORIES[k];\r\n const wasGranted = prevGranted.indexOf(cat) > -1;\r\n const isGranted = nowGranted.indexOf(cat) > -1;\r\n if (!wasGranted && isGranted) emitter.emit(\"consent:\" + cat, true);\r\n if (wasGranted && !isGranted) emitter.emit(\"consent:\" + cat, false);\r\n }\r\n\r\n closeUI();\r\n };\r\n\r\n const acceptAll = () => commit({ analytics: true, marketing: true, functional: true, recording: true }, \"accept_all\");\r\n const rejectAll = () => commit({ analytics: false, marketing: false, functional: false, recording: false }, \"reject_all\");\r\n\r\n const open = () => {\r\n if (deps && typeof deps.openModal === \"function\") deps.openModal({ commit: commit, t: t, currentLocale: currentLocale, state: state });\r\n };\r\n\r\n const onChange = (fn) => { emitter.on(\"change\", fn); };\r\n\r\n const onConsent = (category, fn) => {\r\n if (typeof fn !== \"function\") return;\r\n if (getConsent(category)) {\r\n try { fn(true); } catch (e) { /* swallow */ }\r\n }\r\n emitter.on(\"consent:\" + category, fn);\r\n };\r\n\r\n const setLocale = (loc) => {\r\n const resolved = normalizeLocale(loc);\r\n if (!resolved) return;\r\n currentLocale = resolved;\r\n t = getTranslation(resolved) || getTranslation(DEFAULT_LOCALE);\r\n emitter.emit(\"locale\", { locale: resolved, t: t, isRTL: RTL_LOCALES.indexOf(resolved) > -1 });\r\n };\r\n\r\n const getMainLang = () => mainLang;\r\n const getState = () => state;\r\n const getJurisdiction = () => jurisdiction;\r\n\r\n const unblock = (category) => {\r\n if (!deps) return;\r\n if (typeof deps.unblockScripts === \"function\") deps.unblockScripts(category);\r\n if (typeof deps.unblockIframes === \"function\") deps.unblockIframes(category);\r\n };\r\n\r\n const scan = () => {\r\n const granted = scanAll({ getConsent: getConsent });\r\n for (let i = 0; i < granted.length; i++) unblock(granted[i]);\r\n return granted;\r\n };\r\n\r\n const usePreset = (name) => {\r\n if (!deps || typeof deps.applyPreset !== \"function\") return null;\r\n return deps.applyPreset(name, { registerCleanup: deps.registerCleanup });\r\n };\r\n\r\n const registerCleanup = (opts) => {\r\n if (deps && typeof deps.registerCleanup === \"function\") deps.registerCleanup(opts);\r\n };\r\n\r\n const tcf = {\r\n getTCString: () => (deps && typeof deps.getTCString === \"function\" ? deps.getTCString() : \"\")\r\n };\r\n\r\n const ccpa = {\r\n optOut: () => { if (deps && typeof deps.optOutCCPA === \"function\") deps.optOutCCPA(); },\r\n isOptedOut: () => (deps && typeof deps.isOptedOutCCPA === \"function\" ? !!deps.isOptedOutCCPA() : false)\r\n };\r\n\r\n return {\r\n version: VERSION,\r\n open: open,\r\n acceptAll: acceptAll,\r\n rejectAll: rejectAll,\r\n getConsent: getConsent,\r\n getState: getState,\r\n onChange: onChange,\r\n setLocale: setLocale,\r\n getMainLang: getMainLang,\r\n onConsent: onConsent,\r\n registerCleanup: registerCleanup,\r\n unblock: unblock,\r\n scan: scan,\r\n usePreset: usePreset,\r\n tcf: tcf,\r\n ccpa: ccpa,\r\n getJurisdiction: getJurisdiction,\r\n __internal: { commit: commit, setUI: setUI, closeUI: closeUI }\r\n };\r\n};\r\n", "// blakfy-cookie/src/index.js \u2014 bootstrap entry; wires modules and assigns window.BlakfyCookie\r\n\r\nimport { getScriptEl, readConfig } from \"./core/config.js\";\r\nimport { readCookie } from \"./core/consent-store.js\";\r\nimport { createEmitter } from \"./core/events.js\";\r\nimport { detectLocale, detectMainLang, RTL_LOCALES } from \"./i18n/detect.js\";\r\nimport { getTranslation } from \"./i18n/index.js\";\r\nimport { injectStyles } from \"./ui/styles.js\";\r\nimport { createBanner } from \"./ui/banner.js\";\r\nimport { createModal } from \"./ui/modal.js\";\r\nimport { mountBadges, installAntiTamper } from \"./ui/badge.js\";\r\nimport { installFocusTrap, removeFocusTrap } from \"./ui/focus-trap.js\";\r\nimport { fetchStatus, renderStatus } from \"./ui/status-bar.js\";\r\nimport { unblockScripts } from \"./gating/script-unblocker.js\";\r\nimport { unblockIframes, installPlaceholders } from \"./gating/iframe-unblocker.js\";\r\nimport { startObserver, scanAll } from \"./gating/observer.js\";\r\nimport { runCleanup, registerCleanup } from \"./gating/cleaner.js\";\r\nimport { applyPreset } from \"./presets/_registry.js\";\r\nimport {\r\n installDefaults as installGCMDefaults,\r\n pushGCM\r\n} from \"./compliance/google-cmv2.js\";\r\nimport {\r\n installDefaults as installUETDefaults,\r\n pushUET\r\n} from \"./compliance/microsoft-uet.js\";\r\nimport {\r\n installDefaults as installYandexDefaults,\r\n applyYandex\r\n} from \"./compliance/yandex-metrica.js\";\r\nimport { installTCFAPI, getTCString } from \"./compliance/tcf-v2.js\";\r\nimport { installUSP, installDoNotSellLink, optOut as optOutCCPA, isOptedOut as isOptedOutCCPA } from \"./compliance/ccpa.js\";\r\nimport { getGPC, applyGPC } from \"./compliance/gpc.js\";\r\nimport { getDNT, applyDNT } from \"./compliance/dnt.js\";\r\nimport { detectJurisdiction } from \"./geo/jurisdiction.js\";\r\nimport { createAPI } from \"./api.js\";\r\n\r\nconst ROOT_OVERLAY_CLASS = \"blakfy-overlay\";\r\n\r\nconst bootstrap = async () => {\r\n if (typeof window === \"undefined\" || typeof document === \"undefined\") return;\r\n if (window.BlakfyCookie && window.BlakfyCookie.__bootstrapped) return;\r\n\r\n // 1. config\r\n const scriptEl = getScriptEl();\r\n const config = readConfig(scriptEl);\r\n\r\n // 2. locale + translations\r\n const currentLocale = detectLocale({ configLocale: config.locale });\r\n const mainLang = detectMainLang({ configMainLang: config.mainLang });\r\n let t = getTranslation(currentLocale);\r\n let isRTL = RTL_LOCALES.indexOf(currentLocale) > -1;\r\n\r\n // 2b. resolve theme: auto \u2192 light/dark via matchMedia; aliases white\u2192light, black\u2192dark\r\n const resolveTheme = (raw) => {\r\n if (raw === \"auto\") {\r\n try { return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\"; } catch (e) { return \"light\"; }\r\n }\r\n if (raw === \"black\") return \"dark\";\r\n if (raw === \"white\") return \"light\";\r\n return raw || \"light\";\r\n };\r\n const theme = resolveTheme(config.theme);\r\n\r\n // 3. styles\r\n injectStyles();\r\n\r\n // 4. emitter\r\n const emitter = createEmitter();\r\n\r\n // 5. jurisdiction\r\n let jurisdiction = \"default\";\r\n try { jurisdiction = await detectJurisdiction({}); } catch (e) { jurisdiction = \"default\"; }\r\n\r\n // 6. install compliance defaults (idempotent \u2014 cookie-defaults bundle may have already run)\r\n installGCMDefaults();\r\n installUETDefaults();\r\n installYandexDefaults();\r\n\r\n // 9. read cookie BEFORE TCF setup so getConsent reads accurate state\r\n let state = readCookie(config.policyVersion);\r\n\r\n // 7. TCF\r\n if (config.tcf === \"true\") {\r\n installTCFAPI({\r\n cmpId: parseInt(config.cmpId, 10) || 0,\r\n cmpVersion: 1,\r\n getConsent: () => state || {},\r\n on: emitter.on\r\n });\r\n }\r\n\r\n // 8. CCPA\r\n const ccpaOn = config.ccpa === \"true\" || (config.ccpa === \"auto\" && jurisdiction === \"CCPA\");\r\n if (ccpaOn) {\r\n installUSP({});\r\n installDoNotSellLink({ t: t });\r\n }\r\n\r\n // 10. DNT\r\n if (getDNT() && config.dnt === \"auto-deny\" && !state) {\r\n applyDNT({ mode: \"auto-deny\", setPrefs: () => { /* applied at banner default */ } });\r\n }\r\n\r\n // 11. GPC \u2014 only mutate defaults if user has not yet decided\r\n if (getGPC() && config.gpc === \"respect\" && !state) {\r\n applyGPC({ mode: \"respect\", currentState: null, setPrefs: () => { /* defaults remain denied */ } });\r\n }\r\n\r\n // 12. Apply presets (list kept in closure for Services tab)\r\n let activePresetList = [];\r\n if (config.presets) {\r\n activePresetList = String(config.presets).split(\",\").map((s) => s.trim()).filter(Boolean);\r\n for (let i = 0; i < activePresetList.length; i++) {\r\n try { applyPreset(activePresetList[i], { registerCleanup: registerCleanup }); } catch (e) { /* ignore */ }\r\n }\r\n }\r\n\r\n // 13. createAPI + window guard\r\n const api = createAPI({\r\n state: state,\r\n config: config,\r\n emitter: emitter,\r\n locale: currentLocale,\r\n mainLang: mainLang,\r\n jurisdiction: jurisdiction,\r\n deps: {\r\n unblockScripts: unblockScripts,\r\n unblockIframes: unblockIframes,\r\n runCleanup: runCleanup,\r\n registerCleanup: registerCleanup,\r\n applyPreset: applyPreset,\r\n pushGCM: pushGCM,\r\n pushUET: pushUET,\r\n applyYandex: applyYandex,\r\n getTCString: getTCString,\r\n optOutCCPA: optOutCCPA,\r\n isOptedOutCCPA: isOptedOutCCPA,\r\n removeFocusTrap: removeFocusTrap,\r\n openModal: (opts) => mountModal(opts)\r\n }\r\n });\r\n\r\n api.__bootstrapped = true;\r\n\r\n // Keep API state in sync after each commit\r\n emitter.on(\"change\", (s) => { state = s; });\r\n\r\n // Locale switching: re-render visible UI\r\n emitter.on(\"locale\", (info) => {\r\n t = info.t;\r\n isRTL = info.isRTL;\r\n });\r\n\r\n if (!window.BlakfyCookie) {\r\n window.BlakfyCookie = api;\r\n try {\r\n window.dispatchEvent(new CustomEvent(\"blakfy:ready\", { detail: { version: api.version } }));\r\n } catch (e) { /* CustomEvent unsupported in very old browsers */ }\r\n }\r\n\r\n // Helper: mount banner overlay\r\n const mountBanner = () => {\r\n const overlay = document.createElement(\"div\");\r\n overlay.className = ROOT_OVERLAY_CLASS + \" widget \" + (config.position || \"bottom-right\");\r\n const card = createBanner({\r\n t: t,\r\n isRTL: isRTL,\r\n accent: config.accent,\r\n theme: theme,\r\n policyUrl: config.policyUrl,\r\n onAccept: () => api.acceptAll(),\r\n onReject: () => api.rejectAll(),\r\n onPrefs: () => mountModal({ commit: api.__internal.commit, t: t, currentLocale: currentLocale, state: state })\r\n });\r\n overlay.appendChild(card);\r\n document.body.appendChild(overlay);\r\n api.__internal.setUI(\"banner\", overlay);\r\n mountBadges(card);\r\n installAntiTamper(card);\r\n installFocusTrap(card, { onEscape: () => { /* banner non-dismissible via ESC */ } });\r\n return overlay;\r\n };\r\n\r\n // Helper: mount modal overlay\r\n function mountModal(opts) {\r\n const existing = document.querySelectorAll(\".\" + ROOT_OVERLAY_CLASS + \".modal\");\r\n for (let i = 0; i < existing.length; i++) {\r\n if (existing[i].parentNode) existing[i].parentNode.removeChild(existing[i]);\r\n }\r\n const overlay = document.createElement(\"div\");\r\n overlay.className = ROOT_OVERLAY_CLASS + \" modal\";\r\n overlay.addEventListener(\"click\", (ev) => { if (ev.target === overlay) api.__internal.closeUI(); });\r\n const card = createModal({\r\n t: (opts && opts.t) || t,\r\n isRTL: isRTL,\r\n accent: config.accent,\r\n theme: theme,\r\n currentState: state,\r\n presets: activePresetList,\r\n version: api.version,\r\n onSave: (prefs) => api.__internal.commit(prefs, \"save\"),\r\n onAccept: () => api.acceptAll(),\r\n onClose: () => api.__internal.closeUI()\r\n });\r\n overlay.appendChild(card);\r\n document.body.appendChild(overlay);\r\n api.__internal.setUI(\"modal\", overlay);\r\n mountBadges(card);\r\n installAntiTamper(card);\r\n installFocusTrap(card, { onEscape: () => api.__internal.closeUI() });\r\n return overlay;\r\n }\r\n\r\n // 14./15. Branch on existing state\r\n if (state) {\r\n pushGCM(state);\r\n pushUET(state);\r\n applyYandex(state, {\r\n unblock: (cat) => { unblockScripts(cat); unblockIframes(cat); },\r\n runCleanup: runCleanup\r\n });\r\n const granted = scanAll({ getConsent: api.getConsent });\r\n for (let i = 0; i < granted.length; i++) {\r\n unblockScripts(granted[i]);\r\n unblockIframes(granted[i]);\r\n }\r\n installPlaceholders(t, (cat) => {\r\n mountModal({ commit: api.__internal.commit, t: t, currentLocale: currentLocale, state: state });\r\n });\r\n } else {\r\n mountBanner();\r\n installPlaceholders(t, () => {\r\n mountModal({ commit: api.__internal.commit, t: t, currentLocale: currentLocale, state: state });\r\n });\r\n }\r\n\r\n // 16. SPA observer\r\n startObserver({\r\n getConsent: api.getConsent,\r\n onScan: (cat) => {\r\n unblockScripts(cat);\r\n unblockIframes(cat);\r\n }\r\n });\r\n\r\n // 17. status bar\r\n if (config.statusEnabled && config.statusUrl) {\r\n fetchStatus(config.statusUrl).then((data) => {\r\n if (data) renderStatus({ data: data, currentLocale: currentLocale, mainLang: mainLang });\r\n });\r\n }\r\n};\r\n\r\nif (typeof document !== \"undefined\") {\r\n if (document.readyState === \"loading\") {\r\n document.addEventListener(\"DOMContentLoaded\", () => { bootstrap(); });\r\n } else {\r\n bootstrap();\r\n }\r\n}\r\n\r\nexport default bootstrap;\r\n"],
4
+ "sourcesContent": ["// blakfy-cookie/src/core/config.js \u2014 script tag attribute reader and v2 defaults\r\n\r\nexport const CDN_BASE = \"https://cdn.jsdelivr.net/npm/@blakfy/cookie@2\";\r\n\r\nexport const DEFAULTS = {\r\n locale: \"auto\",\r\n mainLang: null,\r\n policyUrl: \"/cerez-politikasi\",\r\n policyVersion: \"1.0\",\r\n auditEndpoint: null,\r\n position: \"bottom-center\",\r\n theme: \"auto\",\r\n accent: \"#3E5C3A\",\r\n presets: null,\r\n tcf: \"false\",\r\n cmpId: \"0\",\r\n ccpa: \"auto\",\r\n gpc: \"respect\",\r\n dnt: \"respect\",\r\n statusUrl: CDN_BASE + \"/status.json\",\r\n statusEnabled: true,\r\n};\r\n\r\nexport const getScriptEl = () => {\r\n if (document.currentScript) return document.currentScript;\r\n const all = document.getElementsByTagName(\"script\");\r\n return all[all.length - 1] || null;\r\n};\r\n\r\nexport const readConfig = (scriptEl) => {\r\n const el = scriptEl || getScriptEl();\r\n const attr = (name, fallback) => {\r\n if (!el) return fallback;\r\n const v = el.getAttribute(name);\r\n return v == null ? fallback : v;\r\n };\r\n return {\r\n locale: attr(\"data-blakfy-locale\", DEFAULTS.locale),\r\n mainLang: attr(\"data-blakfy-main-lang\", DEFAULTS.mainLang),\r\n policyUrl: attr(\"data-blakfy-policy-url\", DEFAULTS.policyUrl),\r\n policyVersion: attr(\"data-blakfy-version\", DEFAULTS.policyVersion),\r\n auditEndpoint: attr(\"data-blakfy-audit-endpoint\", DEFAULTS.auditEndpoint),\r\n position: attr(\"data-blakfy-position\", DEFAULTS.position),\r\n theme: attr(\"data-blakfy-theme\", DEFAULTS.theme),\r\n accent: attr(\"data-blakfy-accent\", DEFAULTS.accent),\r\n presets: attr(\"data-blakfy-presets\", DEFAULTS.presets),\r\n tcf: attr(\"data-blakfy-tcf\", DEFAULTS.tcf),\r\n cmpId: attr(\"data-blakfy-cmp-id\", DEFAULTS.cmpId),\r\n ccpa: attr(\"data-blakfy-ccpa\", DEFAULTS.ccpa),\r\n gpc: attr(\"data-blakfy-gpc\", DEFAULTS.gpc),\r\n dnt: attr(\"data-blakfy-dnt\", DEFAULTS.dnt),\r\n statusUrl: attr(\"data-blakfy-status-url\", DEFAULTS.statusUrl),\r\n statusEnabled: attr(\"data-blakfy-status\", \"true\") !== \"false\",\r\n };\r\n};\r\n", "// blakfy-cookie/src/core/consent-store.js \u2014 cookie I/O and state shape (v2 schema, no lib-version re-consent)\r\n\r\nexport const COOKIE_NAME = \"blakfy_consent\";\r\nexport const COOKIE_TTL_DAYS = 365;\r\n\r\nexport const readCookie = (policyVersion) => {\r\n const match = document.cookie.match(new RegExp(\"(^| )\" + COOKIE_NAME + \"=([^;]+)\"));\r\n if (!match) return null;\r\n try {\r\n const s = JSON.parse(decodeURIComponent(match[2]));\r\n if (s.version !== policyVersion) return null;\r\n return s;\r\n } catch (e) {\r\n return null;\r\n }\r\n};\r\n\r\nexport const writeCookie = (state) => {\r\n const expires = new Date(Date.now() + COOKIE_TTL_DAYS * 86400000).toUTCString();\r\n const secure = window.location.protocol === \"https:\" ? \"; Secure\" : \"\";\r\n document.cookie =\r\n COOKIE_NAME + \"=\" + encodeURIComponent(JSON.stringify(state)) +\r\n \"; expires=\" + expires + \"; path=/; SameSite=Strict\" + secure;\r\n};\r\n\r\nconst newId = () => {\r\n if (typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\") {\r\n return crypto.randomUUID();\r\n }\r\n return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, (c) => {\r\n const r = (Math.random() * 16) | 0;\r\n const v = c === \"x\" ? r : (r & 0x3) | 0x8;\r\n return v.toString(16);\r\n });\r\n};\r\n\r\nexport const buildState = ({\r\n prefs,\r\n currentLocale,\r\n mainLang,\r\n policyVersion,\r\n jurisdiction,\r\n tcString,\r\n uspString,\r\n prevId,\r\n}) => ({\r\n id: prevId || newId(),\r\n essential: true,\r\n analytics: !!(prefs && prefs.analytics),\r\n marketing: !!(prefs && prefs.marketing),\r\n functional: !!(prefs && prefs.functional),\r\n recording: !!(prefs && prefs.recording),\r\n timestamp: new Date().toISOString(),\r\n version: policyVersion,\r\n locale: currentLocale,\r\n mainLang: mainLang,\r\n jurisdiction: jurisdiction || \"default\",\r\n tcString: tcString || null,\r\n uspString: uspString || null,\r\n});\r\n", "// blakfy-cookie/src/core/events.js \u2014 minimal event emitter for state and category consent\r\n\r\nexport const createEmitter = () => {\r\n const listeners = Object.create(null);\r\n\r\n const on = (event, fn) => {\r\n if (typeof fn !== \"function\") return;\r\n if (!listeners[event]) listeners[event] = [];\r\n listeners[event].push(fn);\r\n };\r\n\r\n const off = (event, fn) => {\r\n const arr = listeners[event];\r\n if (!arr) return;\r\n const i = arr.indexOf(fn);\r\n if (i > -1) arr.splice(i, 1);\r\n };\r\n\r\n const emit = (event, ...args) => {\r\n const arr = listeners[event];\r\n if (!arr) return;\r\n for (let i = 0; i < arr.length; i++) {\r\n try { arr[i].apply(null, args); } catch (e) { /* swallow listener errors */ }\r\n }\r\n };\r\n\r\n return { on, off, emit };\r\n};\r\n", "// blakfy-cookie/src/i18n/detect.js \u2014 BCP47 locale detection and direction metadata\r\n\r\nexport const SUPPORTED_LOCALES = [\r\n \"tr\", \"en\", \"ar\", \"fa\", \"ur\",\r\n \"fr\", \"ru\", \"de\", \"he\", \"uk\",\r\n \"es\", \"it\", \"pt\", \"nl\", \"pl\", \"sv\", \"cs\",\r\n \"zh\", \"zh-TW\", \"ja\", \"ko\",\r\n \"id\", \"hi\"\r\n];\r\n\r\nexport const RTL_LOCALES = [\"ar\", \"he\", \"fa\", \"ur\"];\r\n\r\nexport const normalizeLocale = (raw, supported) => {\r\n if (!raw) return null;\r\n const list = supported || SUPPORTED_LOCALES;\r\n const lo = String(raw).toLowerCase();\r\n for (let i = 0; i < list.length; i++) {\r\n if (list[i].toLowerCase() === lo) return list[i];\r\n }\r\n const prefix = lo.substring(0, 2);\r\n for (let j = 0; j < list.length; j++) {\r\n if (list[j].toLowerCase() === prefix) return list[j];\r\n }\r\n return null;\r\n};\r\n\r\nexport const detectLocale = ({ configLocale, supported, defaultLocale }) => {\r\n const list = supported || SUPPORTED_LOCALES;\r\n const fallback = defaultLocale || \"tr\";\r\n if (configLocale && configLocale !== \"auto\") {\r\n return normalizeLocale(configLocale, list) || fallback;\r\n }\r\n try {\r\n const url = new URL(window.location.href);\r\n const qp = url.searchParams.get(\"lang\");\r\n if (qp) {\r\n const ql = normalizeLocale(qp, list);\r\n if (ql) return ql;\r\n }\r\n } catch (e) { /* ignore */ }\r\n const htmlLang = document.documentElement.lang;\r\n if (htmlLang) {\r\n const hl = normalizeLocale(htmlLang, list);\r\n if (hl) return hl;\r\n }\r\n const navLang = navigator.language || (navigator.languages && navigator.languages[0]) || \"\";\r\n if (navLang) {\r\n const nl = normalizeLocale(navLang, list);\r\n if (nl) return nl;\r\n }\r\n return fallback;\r\n};\r\n\r\nexport const detectMainLang = ({ configMainLang, supported, defaultLocale }) => {\r\n const list = supported || SUPPORTED_LOCALES;\r\n const fallback = defaultLocale || \"tr\";\r\n if (configMainLang) {\r\n const ml = normalizeLocale(configMainLang, list);\r\n if (ml) return ml;\r\n }\r\n const htmlLang = normalizeLocale(document.documentElement.lang, list);\r\n if (htmlLang) return htmlLang;\r\n return fallback;\r\n};\r\n", "// blakfy-cookie/src/i18n/translations/tr.js \u2014 Turkish translations\r\n\r\nexport default {\r\n title: \"\u00C7erez Tercihleri\",\r\n intro: \"Bu site, deneyiminizi geli\u015Ftirmek i\u00E7in \u00E7erezler kullan\u0131r. Detaylar i\u00E7in \u00C7erez Politikam\u0131z\u0131 inceleyin.\",\r\n policyLink: \"\u00C7erez Politikas\u0131\",\r\n acceptAll: \"T\u00FCm\u00FCn\u00FC Kabul Et\",\r\n rejectAll: \"T\u00FCm\u00FCn\u00FC Reddet\",\r\n preferences: \"Tercihler\",\r\n save: \"Se\u00E7imleri Kaydet\",\r\n close: \"Kapat\",\r\n cat: {\r\n essential: { title: \"Zorunlu \u00C7erezler\", desc: \"Sitenin temel i\u015Flevleri i\u00E7in gerekli, devre d\u0131\u015F\u0131 b\u0131rak\u0131lamaz.\", always: \"Her zaman aktif\" },\r\n analytics: { title: \"Analitik \u00C7erezler\", desc: \"Anonim ziyaret istatistikleri toplama amac\u0131yla kullan\u0131l\u0131r.\" },\r\n marketing: { title: \"Pazarlama \u00C7erezleri\",desc: \"Ki\u015Fiselle\u015Ftirilmi\u015F reklam ve yeniden hedefleme i\u00E7in kullan\u0131l\u0131r.\" },\r\n functional: { title: \"Fonksiyonel \u00C7erezler\",desc: \"Dil, tema, b\u00F6lge gibi tercihlerinizi hat\u0131rlamak i\u00E7in kullan\u0131l\u0131r.\" }\r\n },\r\n placeholder: {\r\n title: \"\u0130\u00E7erik engellendi\",\r\n desc: \"Bu i\u00E7eri\u011Fi g\u00F6rmek i\u00E7in {category} \u00E7erezlerine izin vermeniz gerekiyor.\",\r\n cta: \"\u0130zin ver\"\r\n },\r\n tabs: {\r\n categories: \"Kategoriler\",\r\n services: \"Hizmetler\",\r\n about: \"Hakk\u0131nda\"\r\n },\r\n service: {\r\n description: \"A\u00E7\u0131klama\",\r\n processor: \"Veri \u0130\u015Fleyici\",\r\n address: \"Adres\",\r\n dpo: \"VKO \u0130leti\u015Fim\",\r\n purposes: \"Ama\u00E7lar\",\r\n technologies: \"Kullan\u0131lan Teknolojiler\",\r\n dataCollected: \"Toplanan Veriler\",\r\n legalBasis: \"Hukuki Dayanak\",\r\n retention: \"Saklama S\u00FCresi\",\r\n transferCountries: \"Aktar\u0131m \u00DClkeleri\",\r\n privacyPolicy: \"Gizlilik Politikas\u0131\",\r\n cookiePolicy: \"\u00C7erez Politikas\u0131\",\r\n legalBasisValues: {\r\n consent: \"A\u00E7\u0131k R\u0131za (GDPR Madde 6/1-a)\",\r\n legitimate_interest: \"Me\u015Fru Menfaat (GDPR Madde 6/1-f)\"\r\n },\r\n noServices: \"Bu site i\u00E7in hen\u00FCz hizmet yap\u0131land\u0131r\u0131lmam\u0131\u015F.\"\r\n },\r\n svcAbout: {\r\n title: \"Bu CMP Hakk\u0131nda\",\r\n description: \"Bu web sitesi; GDPR, KVKK, CCPA ve di\u011Fer ge\u00E7erli gizlilik mevzuatlar\u0131na uyum sa\u011Flamak amac\u0131yla r\u0131za tercihlerinizi y\u00F6netmek i\u00E7in Blakfy \u00C7erez Y\u00F6netim Platformu'nu (CMP) kullanmaktad\u0131r.\",\r\n version: \"S\u00FCr\u00FCm\",\r\n learnMore: \"blakfy.com'da daha fazla bilgi\"\r\n }\r\n};\r\n", "// blakfy-cookie/src/i18n/translations/en.js \u2014 English translations\r\n\r\nexport default {\r\n title: \"Cookie Preferences\",\r\n intro: \"This site uses cookies to enhance your experience. See our Cookie Policy for details.\",\r\n policyLink: \"Cookie Policy\",\r\n acceptAll: \"Accept All\",\r\n rejectAll: \"Reject All\",\r\n preferences: \"Preferences\",\r\n save: \"Save Choices\",\r\n close: \"Close\",\r\n cat: {\r\n essential: { title: \"Essential Cookies\", desc: \"Required for the site to function. Cannot be disabled.\", always: \"Always active\" },\r\n analytics: { title: \"Analytics Cookies\", desc: \"Used to collect anonymous visit statistics.\" },\r\n marketing: { title: \"Marketing Cookies\", desc: \"Used for personalized advertising and retargeting.\" },\r\n functional: { title: \"Functional Cookies\", desc: \"Used to remember preferences like language, theme, region.\" }\r\n },\r\n placeholder: {\r\n title: \"Content blocked\",\r\n desc: \"You need to allow {category} cookies to view this content.\",\r\n cta: \"Allow\"\r\n },\r\n tabs: {\r\n categories: \"Categories\",\r\n services: \"Services\",\r\n about: \"About\"\r\n },\r\n service: {\r\n description: \"Description\",\r\n processor: \"Data Processor\",\r\n address: \"Address\",\r\n dpo: \"DPO Contact\",\r\n purposes: \"Purposes\",\r\n technologies: \"Technologies Used\",\r\n dataCollected: \"Data Collected\",\r\n legalBasis: \"Legal Basis\",\r\n retention: \"Retention Period\",\r\n transferCountries: \"Transfer Countries\",\r\n privacyPolicy: \"Privacy Policy\",\r\n cookiePolicy: \"Cookie Policy\",\r\n legalBasisValues: {\r\n consent: \"Consent (Art. 6 para. 1 s. 1 lit. a GDPR)\",\r\n legitimate_interest: \"Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)\"\r\n },\r\n noServices: \"No services are configured for this site.\"\r\n },\r\n svcAbout: {\r\n title: \"About this CMP\",\r\n description: \"This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.\",\r\n version: \"Version\",\r\n learnMore: \"Learn more at blakfy.com\"\r\n }\r\n};\r\n", "// blakfy-cookie/src/i18n/translations/ar.js \u2014 Arabic translations\r\n\r\nexport default {\r\n title: \"\u062A\u0641\u0636\u064A\u0644\u0627\u062A \u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637\",\r\n intro: \"\u064A\u0633\u062A\u062E\u062F\u0645 \u0647\u0630\u0627 \u0627\u0644\u0645\u0648\u0642\u0639 \u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637 \u0644\u062A\u062D\u0633\u064A\u0646 \u062A\u062C\u0631\u0628\u062A\u0643. \u0631\u0627\u062C\u0639 \u0633\u064A\u0627\u0633\u0629 \u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637 \u0644\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0627\u0644\u062A\u0641\u0627\u0635\u064A\u0644.\",\r\n policyLink: \"\u0633\u064A\u0627\u0633\u0629 \u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637\",\r\n acceptAll: \"\u0642\u0628\u0648\u0644 \u0627\u0644\u0643\u0644\",\r\n rejectAll: \"\u0631\u0641\u0636 \u0627\u0644\u0643\u0644\",\r\n preferences: \"\u0627\u0644\u062A\u0641\u0636\u064A\u0644\u0627\u062A\",\r\n save: \"\u062D\u0641\u0638 \u0627\u0644\u062E\u064A\u0627\u0631\u0627\u062A\",\r\n close: \"\u0625\u063A\u0644\u0627\u0642\",\r\n cat: {\r\n essential: { title: \"\u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637 \u0627\u0644\u0623\u0633\u0627\u0633\u064A\u0629\", desc: \"\u0636\u0631\u0648\u0631\u064A\u0629 \u0644\u0639\u0645\u0644 \u0627\u0644\u0645\u0648\u0642\u0639. \u0644\u0627 \u064A\u0645\u0643\u0646 \u062A\u0639\u0637\u064A\u0644\u0647\u0627.\", always: \"\u0646\u0634\u0637 \u062F\u0627\u0626\u0645\u064B\u0627\" },\r\n analytics: { title: \"\u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637 \u0627\u0644\u062A\u062D\u0644\u064A\u0644\u064A\u0629\", desc: \"\u062A\u064F\u0633\u062A\u062E\u062F\u0645 \u0644\u062C\u0645\u0639 \u0625\u062D\u0635\u0627\u0626\u064A\u0627\u062A \u0627\u0644\u0632\u064A\u0627\u0631\u0627\u062A \u0627\u0644\u0645\u062C\u0647\u0648\u0644\u0629.\" },\r\n marketing: { title: \"\u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637 \u0627\u0644\u062A\u0633\u0648\u064A\u0642\u064A\u0629\",desc: \"\u062A\u064F\u0633\u062A\u062E\u062F\u0645 \u0644\u0644\u0625\u0639\u0644\u0627\u0646 \u0627\u0644\u0645\u062E\u0635\u0635 \u0648\u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u0627\u0633\u062A\u0647\u062F\u0627\u0641.\" },\r\n functional: { title: \"\u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637 \u0627\u0644\u0648\u0638\u064A\u0641\u064A\u0629\", desc: \"\u062A\u064F\u0633\u062A\u062E\u062F\u0645 \u0644\u062A\u0630\u0643\u0631 \u0627\u0644\u062A\u0641\u0636\u064A\u0644\u0627\u062A \u0645\u062B\u0644 \u0627\u0644\u0644\u063A\u0629 \u0648\u0627\u0644\u0633\u0645\u0629.\" }\r\n },\r\n placeholder: {\r\n title: \"\u062A\u0645 \u062D\u0638\u0631 \u0627\u0644\u0645\u062D\u062A\u0648\u0649\",\r\n desc: \"\u062A\u062D\u062A\u0627\u062C \u0625\u0644\u0649 \u0627\u0644\u0633\u0645\u0627\u062D \u0628\u0645\u0644\u0641\u0627\u062A \u062A\u0639\u0631\u064A\u0641 \u0627\u0644\u0627\u0631\u062A\u0628\u0627\u0637 \u0644\u0640 {category} \u0644\u0639\u0631\u0636 \u0647\u0630\u0627 \u0627\u0644\u0645\u062D\u062A\u0648\u0649.\",\r\n cta: \"\u0627\u0644\u0633\u0645\u0627\u062D\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/fa.js \u2014 Persian translations\r\n\r\nexport default {\r\n title: \"\u062A\u0646\u0638\u06CC\u0645\u0627\u062A \u06A9\u0648\u06A9\u06CC\",\r\n intro: \"\u0627\u06CC\u0646 \u0633\u0627\u06CC\u062A \u0627\u0632 \u06A9\u0648\u06A9\u06CC\u200C\u0647\u0627 \u0628\u0631\u0627\u06CC \u0628\u0647\u0628\u0648\u062F \u062A\u062C\u0631\u0628\u0647 \u0634\u0645\u0627 \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0645\u06CC\u200C\u06A9\u0646\u062F. \u0628\u0631\u0627\u06CC \u062C\u0632\u0626\u06CC\u0627\u062A \u0628\u06CC\u0634\u062A\u0631 \u0633\u06CC\u0627\u0633\u062A \u06A9\u0648\u06A9\u06CC \u0645\u0627 \u0631\u0627 \u0645\u0637\u0627\u0644\u0639\u0647 \u06A9\u0646\u06CC\u062F.\",\r\n policyLink: \"\u0633\u06CC\u0627\u0633\u062A \u06A9\u0648\u06A9\u06CC\",\r\n acceptAll: \"\u067E\u0630\u06CC\u0631\u0634 \u0647\u0645\u0647\",\r\n rejectAll: \"\u0631\u062F \u0647\u0645\u0647\",\r\n preferences: \"\u062A\u0646\u0638\u06CC\u0645\u0627\u062A\",\r\n save: \"\u0630\u062E\u06CC\u0631\u0647 \u0627\u0646\u062A\u062E\u0627\u0628\u200C\u0647\u0627\",\r\n close: \"\u0628\u0633\u062A\u0646\",\r\n cat: {\r\n essential: { title: \"\u06A9\u0648\u06A9\u06CC\u200C\u0647\u0627\u06CC \u0636\u0631\u0648\u0631\u06CC\", desc: \"\u0628\u0631\u0627\u06CC \u0639\u0645\u0644\u06A9\u0631\u062F \u0627\u0635\u0644\u06CC \u0633\u0627\u06CC\u062A \u0644\u0627\u0632\u0645 \u0627\u0633\u062A. \u063A\u06CC\u0631\u0641\u0639\u0627\u0644 \u06A9\u0631\u062F\u0646 \u0622\u0646\u200C\u0647\u0627 \u0627\u0645\u06A9\u0627\u0646\u200C\u067E\u0630\u06CC\u0631 \u0646\u06CC\u0633\u062A.\", always: \"\u0647\u0645\u06CC\u0634\u0647 \u0641\u0639\u0627\u0644\" },\r\n analytics: { title: \"\u06A9\u0648\u06A9\u06CC\u200C\u0647\u0627\u06CC \u062A\u062D\u0644\u06CC\u0644\u06CC\", desc: \"\u0628\u0631\u0627\u06CC \u062C\u0645\u0639\u200C\u0622\u0648\u0631\u06CC \u0622\u0645\u0627\u0631 \u0646\u0627\u0634\u0646\u0627\u0633 \u0628\u0627\u0632\u062F\u06CC\u062F\u06A9\u0646\u0646\u062F\u06AF\u0627\u0646 \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0645\u06CC\u200C\u0634\u0648\u062F.\" },\r\n marketing: { title: \"\u06A9\u0648\u06A9\u06CC\u200C\u0647\u0627\u06CC \u0628\u0627\u0632\u0627\u0631\u06CC\u0627\u0628\u06CC\",desc: \"\u0628\u0631\u0627\u06CC \u062A\u0628\u0644\u06CC\u063A\u0627\u062A \u0634\u062E\u0635\u06CC\u200C\u0633\u0627\u0632\u06CC\u200C\u0634\u062F\u0647 \u0648 \u0647\u062F\u0641\u200C\u06AF\u0630\u0627\u0631\u06CC \u0645\u062C\u062F\u062F \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0645\u06CC\u200C\u0634\u0648\u062F.\" },\r\n functional: { title: \"\u06A9\u0648\u06A9\u06CC\u200C\u0647\u0627\u06CC \u0639\u0645\u0644\u06A9\u0631\u062F\u06CC\", desc: \"\u0628\u0631\u0627\u06CC \u0628\u0647 \u06CC\u0627\u062F\u0622\u0648\u0631\u06CC \u062A\u0646\u0638\u06CC\u0645\u0627\u062A\u06CC \u0645\u0627\u0646\u0646\u062F \u0632\u0628\u0627\u0646 \u0648 \u067E\u0648\u0633\u062A\u0647 \u0627\u0633\u062A\u0641\u0627\u062F\u0647 \u0645\u06CC\u200C\u0634\u0648\u062F.\" }\r\n },\r\n placeholder: {\r\n title: \"\u0645\u062D\u062A\u0648\u0627 \u0645\u0633\u062F\u0648\u062F \u0634\u062F\",\r\n desc: \"\u0628\u0631\u0627\u06CC \u0645\u0634\u0627\u0647\u062F\u0647 \u0627\u06CC\u0646 \u0645\u062D\u062A\u0648\u0627 \u0628\u0627\u06CC\u062F \u06A9\u0648\u06A9\u06CC\u200C\u0647\u0627\u06CC {category} \u0631\u0627 \u0645\u062C\u0627\u0632 \u06A9\u0646\u06CC\u062F.\",\r\n cta: \"\u0627\u062C\u0627\u0632\u0647 \u062F\u0627\u062F\u0646\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/ur.js \u2014 Urdu translations\r\n\r\nexport default {\r\n title: \"\u06A9\u0648\u06A9\u06CC \u062A\u0631\u062C\u06CC\u062D\u0627\u062A\",\r\n intro: \"\u06CC\u06C1 \u0633\u0627\u0626\u0679 \u0622\u067E \u06A9\u06D2 \u062A\u062C\u0631\u0628\u06D2 \u06A9\u0648 \u0628\u06C1\u062A\u0631 \u0628\u0646\u0627\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u06A9\u0648\u06A9\u06CC\u0632 \u0627\u0633\u062A\u0639\u0645\u0627\u0644 \u06A9\u0631\u062A\u06CC \u06C1\u06D2\u06D4 \u062A\u0641\u0635\u06CC\u0644\u0627\u062A \u06A9\u06D2 \u0644\u06CC\u06D2 \u06C1\u0645\u0627\u0631\u06CC \u06A9\u0648\u06A9\u06CC \u067E\u0627\u0644\u06CC\u0633\u06CC \u062F\u06CC\u06A9\u06BE\u06CC\u06BA\u06D4\",\r\n policyLink: \"\u06A9\u0648\u06A9\u06CC \u067E\u0627\u0644\u06CC\u0633\u06CC\",\r\n acceptAll: \"\u0633\u0628 \u0642\u0628\u0648\u0644 \u06A9\u0631\u06CC\u06BA\",\r\n rejectAll: \"\u0633\u0628 \u0645\u0633\u062A\u0631\u062F \u06A9\u0631\u06CC\u06BA\",\r\n preferences: \"\u062A\u0631\u062C\u06CC\u062D\u0627\u062A\",\r\n save: \"\u0627\u0646\u062A\u062E\u0627\u0628 \u0645\u062D\u0641\u0648\u0638 \u06A9\u0631\u06CC\u06BA\",\r\n close: \"\u0628\u0646\u062F \u06A9\u0631\u06CC\u06BA\",\r\n cat: {\r\n essential: { title: \"\u0636\u0631\u0648\u0631\u06CC \u06A9\u0648\u06A9\u06CC\u0632\", desc: \"\u0633\u0627\u0626\u0679 \u06A9\u06D2 \u0628\u0646\u06CC\u0627\u062F\u06CC \u0627\u0641\u0639\u0627\u0644 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0636\u0631\u0648\u0631\u06CC \u06C1\u06CC\u06BA\u06D4 \u063A\u06CC\u0631 \u0641\u0639\u0627\u0644 \u0646\u06C1\u06CC\u06BA \u06A9\u06CC \u062C\u0627 \u0633\u06A9\u062A\u06CC\u06BA\u06D4\", always: \"\u06C1\u0645\u06CC\u0634\u06C1 \u0641\u0639\u0627\u0644\" },\r\n analytics: { title: \"\u062A\u062C\u0632\u06CC\u0627\u062A\u06CC \u06A9\u0648\u06A9\u06CC\u0632\",desc: \"\u06AF\u0645\u0646\u0627\u0645 \u0648\u0632\u0679 \u06A9\u06D2 \u0627\u0639\u062F\u0627\u062F \u0648 \u0634\u0645\u0627\u0631 \u062C\u0645\u0639 \u06A9\u0631\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0627\u0633\u062A\u0639\u0645\u0627\u0644 \u06C1\u0648\u062A\u06CC \u06C1\u06CC\u06BA\u06D4\" },\r\n marketing: { title: \"\u0645\u0627\u0631\u06A9\u06CC\u0679\u0646\u06AF \u06A9\u0648\u06A9\u06CC\u0632\",desc: \"\u0630\u0627\u062A\u06CC \u0646\u0648\u0639\u06CC\u062A \u06A9\u06CC \u0627\u0634\u062A\u06C1\u0627\u0631\u0628\u0627\u0632\u06CC \u0627\u0648\u0631 \u0631\u06CC \u0679\u0627\u0631\u06AF\u06CC\u0679\u0646\u06AF \u06A9\u06D2 \u0644\u06CC\u06D2 \u0627\u0633\u062A\u0639\u0645\u0627\u0644 \u06C1\u0648\u062A\u06CC \u06C1\u06CC\u06BA\u06D4\" },\r\n functional: { title: \"\u0641\u0639\u0644\u06CC\u0627\u062A\u06CC \u06A9\u0648\u06A9\u06CC\u0632\", desc: \"\u0632\u0628\u0627\u0646 \u0627\u0648\u0631 \u062A\u06BE\u06CC\u0645 \u062C\u06CC\u0633\u06CC \u062A\u0631\u062C\u06CC\u062D\u0627\u062A \u06CC\u0627\u062F \u0631\u06A9\u06BE\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0627\u0633\u062A\u0639\u0645\u0627\u0644 \u06C1\u0648\u062A\u06CC \u06C1\u06CC\u06BA\u06D4\" }\r\n },\r\n placeholder: {\r\n title: \"\u0645\u0648\u0627\u062F \u0628\u0644\u0627\u06A9 \u06C1\u06D2\",\r\n desc: \"\u0627\u0633 \u0645\u0648\u0627\u062F \u06A9\u0648 \u062F\u06CC\u06A9\u06BE\u0646\u06D2 \u06A9\u06D2 \u0644\u06CC\u06D2 \u0622\u067E \u06A9\u0648 {category} \u06A9\u0648\u06A9\u06CC\u0632 \u06A9\u06CC \u0627\u062C\u0627\u0632\u062A \u062F\u06CC\u0646\u06CC \u06C1\u0648\u06AF\u06CC\u06D4\",\r\n cta: \"\u0627\u062C\u0627\u0632\u062A \u062F\u06CC\u06BA\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/fr.js \u2014 French translations\r\n\r\nexport default {\r\n title: \"Pr\u00E9f\u00E9rences des Cookies\",\r\n intro: \"Ce site utilise des cookies pour am\u00E9liorer votre exp\u00E9rience. Consultez notre Politique de Cookies pour plus de d\u00E9tails.\",\r\n policyLink: \"Politique de Cookies\",\r\n acceptAll: \"Tout Accepter\",\r\n rejectAll: \"Tout Refuser\",\r\n preferences: \"Pr\u00E9f\u00E9rences\",\r\n save: \"Enregistrer\",\r\n close: \"Fermer\",\r\n cat: {\r\n essential: { title: \"Cookies Essentiels\", desc: \"N\u00E9cessaires au fonctionnement du site. Ne peuvent pas \u00EAtre d\u00E9sactiv\u00E9s.\", always: \"Toujours actif\" },\r\n analytics: { title: \"Cookies Analytiques\", desc: \"Utilis\u00E9s pour collecter des statistiques de visite anonymes.\" },\r\n marketing: { title: \"Cookies Marketing\", desc: \"Utilis\u00E9s pour la publicit\u00E9 personnalis\u00E9e et le reciblage.\" },\r\n functional: { title: \"Cookies Fonctionnels\",desc: \"Utilis\u00E9s pour m\u00E9moriser vos pr\u00E9f\u00E9rences.\" }\r\n },\r\n placeholder: {\r\n title: \"Contenu bloqu\u00E9\",\r\n desc: \"Vous devez autoriser les cookies {category} pour voir ce contenu.\",\r\n cta: \"Autoriser\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/ru.js \u2014 Russian translations\r\n\r\nexport default {\r\n title: \"\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0444\u0430\u0439\u043B\u043E\u0432 cookie\",\r\n intro: \"\u042D\u0442\u043E\u0442 \u0441\u0430\u0439\u0442 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0435\u0442 \u0444\u0430\u0439\u043B\u044B cookie \u0434\u043B\u044F \u0443\u043B\u0443\u0447\u0448\u0435\u043D\u0438\u044F \u0432\u0430\u0448\u0435\u0433\u043E \u043E\u043F\u044B\u0442\u0430. \u041F\u043E\u0434\u0440\u043E\u0431\u043D\u043E\u0441\u0442\u0438 \u0432 \u041F\u043E\u043B\u0438\u0442\u0438\u043A\u0435 \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F cookie.\",\r\n policyLink: \"\u041F\u043E\u043B\u0438\u0442\u0438\u043A\u0430 cookie\",\r\n acceptAll: \"\u041F\u0440\u0438\u043D\u044F\u0442\u044C \u0432\u0441\u0435\",\r\n rejectAll: \"\u041E\u0442\u043A\u043B\u043E\u043D\u0438\u0442\u044C \u0432\u0441\u0435\",\r\n preferences: \"\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438\",\r\n save: \"\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u0432\u044B\u0431\u043E\u0440\",\r\n close: \"\u0417\u0430\u043A\u0440\u044B\u0442\u044C\",\r\n cat: {\r\n essential: { title: \"\u041E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0444\u0430\u0439\u043B\u044B cookie\", desc: \"\u041D\u0435\u043E\u0431\u0445\u043E\u0434\u0438\u043C\u044B \u0434\u043B\u044F \u0440\u0430\u0431\u043E\u0442\u044B \u0441\u0430\u0439\u0442\u0430. \u041D\u0435 \u043C\u043E\u0433\u0443\u0442 \u0431\u044B\u0442\u044C \u043E\u0442\u043A\u043B\u044E\u0447\u0435\u043D\u044B.\", always: \"\u0412\u0441\u0435\u0433\u0434\u0430 \u0430\u043A\u0442\u0438\u0432\u043D\u044B\" },\r\n analytics: { title: \"\u0410\u043D\u0430\u043B\u0438\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0435 cookie\", desc: \"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u044E\u0442\u0441\u044F \u0434\u043B\u044F \u0441\u0431\u043E\u0440\u0430 \u0430\u043D\u043E\u043D\u0438\u043C\u043D\u043E\u0439 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0438 \u043F\u043E\u0441\u0435\u0449\u0435\u043D\u0438\u0439.\" },\r\n marketing: { title: \"\u041C\u0430\u0440\u043A\u0435\u0442\u0438\u043D\u0433\u043E\u0432\u044B\u0435 cookie\", desc: \"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u044E\u0442\u0441\u044F \u0434\u043B\u044F \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u0438\u0437\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u043E\u0439 \u0440\u0435\u043A\u043B\u0430\u043C\u044B \u0438 \u0440\u0435\u0442\u0430\u0440\u0433\u0435\u0442\u0438\u043D\u0433\u0430.\" },\r\n functional: { title: \"\u0424\u0443\u043D\u043A\u0446\u0438\u043E\u043D\u0430\u043B\u044C\u043D\u044B\u0435 cookie\", desc: \"\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u044E\u0442\u0441\u044F \u0434\u043B\u044F \u0437\u0430\u043F\u043E\u043C\u0438\u043D\u0430\u043D\u0438\u044F \u0432\u0430\u0448\u0438\u0445 \u043F\u0440\u0435\u0434\u043F\u043E\u0447\u0442\u0435\u043D\u0438\u0439.\" }\r\n },\r\n placeholder: {\r\n title: \"\u041A\u043E\u043D\u0442\u0435\u043D\u0442 \u0437\u0430\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043D\",\r\n desc: \"\u0427\u0442\u043E\u0431\u044B \u043F\u0440\u043E\u0441\u043C\u043E\u0442\u0440\u0435\u0442\u044C \u044D\u0442\u043E\u0442 \u043A\u043E\u043D\u0442\u0435\u043D\u0442, \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u0435 \u0444\u0430\u0439\u043B\u044B cookie \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0438\u0438 {category}.\",\r\n cta: \"\u0420\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044C\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/de.js \u2014 German translations\r\n\r\nexport default {\r\n title: \"Cookie-Einstellungen\",\r\n intro: \"Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Weitere Informationen in unserer Cookie-Richtlinie.\",\r\n policyLink: \"Cookie-Richtlinie\",\r\n acceptAll: \"Alle akzeptieren\",\r\n rejectAll: \"Alle ablehnen\",\r\n preferences: \"Einstellungen\",\r\n save: \"Auswahl speichern\",\r\n close: \"Schlie\u00DFen\",\r\n cat: {\r\n essential: { title: \"Notwendige Cookies\", desc: \"F\u00FCr die Grundfunktionen der Website erforderlich. K\u00F6nnen nicht deaktiviert werden.\", always: \"Immer aktiv\" },\r\n analytics: { title: \"Analyse-Cookies\", desc: \"Werden verwendet, um anonyme Besuchsstatistiken zu sammeln.\" },\r\n marketing: { title: \"Marketing-Cookies\", desc: \"Werden f\u00FCr personalisierte Werbung und Retargeting verwendet.\" },\r\n functional: { title: \"Funktionale Cookies\",desc: \"Werden verwendet, um Einstellungen wie Sprache und Theme zu speichern.\" }\r\n },\r\n placeholder: {\r\n title: \"Inhalt blockiert\",\r\n desc: \"Sie m\u00FCssen {category}-Cookies erlauben, um diesen Inhalt anzuzeigen.\",\r\n cta: \"Erlauben\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/he.js \u2014 Hebrew translations\r\n\r\nexport default {\r\n title: \"\u05D4\u05E2\u05D3\u05E4\u05D5\u05EA \u05E2\u05D5\u05D2\u05D9\u05D5\u05EA\",\r\n intro: \"\u05D0\u05EA\u05E8 \u05D6\u05D4 \u05DE\u05E9\u05EA\u05DE\u05E9 \u05D1\u05E2\u05D5\u05D2\u05D9\u05D5\u05EA \u05DC\u05E9\u05D9\u05E4\u05D5\u05E8 \u05D7\u05D5\u05D5\u05D9\u05EA\u05DA. \u05E8\u05D0\u05D4 \u05D0\u05EA \u05DE\u05D3\u05D9\u05E0\u05D9\u05D5\u05EA \u05D4\u05E2\u05D5\u05D2\u05D9\u05D5\u05EA \u05E9\u05DC\u05E0\u05D5 \u05DC\u05E4\u05E8\u05D8\u05D9\u05DD.\",\r\n policyLink: \"\u05DE\u05D3\u05D9\u05E0\u05D9\u05D5\u05EA \u05E2\u05D5\u05D2\u05D9\u05D5\u05EA\",\r\n acceptAll: \"\u05E7\u05D1\u05DC \u05D4\u05DB\u05DC\",\r\n rejectAll: \"\u05D3\u05D7\u05D4 \u05D4\u05DB\u05DC\",\r\n preferences: \"\u05D4\u05E2\u05D3\u05E4\u05D5\u05EA\",\r\n save: \"\u05E9\u05DE\u05D5\u05E8 \u05D1\u05D7\u05D9\u05E8\u05D5\u05EA\",\r\n close: \"\u05E1\u05D2\u05D5\u05E8\",\r\n cat: {\r\n essential: { title: \"\u05E2\u05D5\u05D2\u05D9\u05D5\u05EA \u05D7\u05D9\u05D5\u05E0\u05D9\u05D5\u05EA\", desc: \"\u05E0\u05D3\u05E8\u05E9\u05D5\u05EA \u05DC\u05EA\u05E4\u05E7\u05D5\u05D3 \u05D4\u05D0\u05EA\u05E8. \u05DC\u05D0 \u05E0\u05D9\u05EA\u05DF \u05DC\u05D4\u05E9\u05D1\u05D9\u05EA.\", always: \"\u05E4\u05E2\u05D9\u05DC \u05EA\u05DE\u05D9\u05D3\" },\r\n analytics: { title: \"\u05E2\u05D5\u05D2\u05D9\u05D5\u05EA \u05E0\u05D9\u05EA\u05D5\u05D7\", desc: \"\u05DE\u05E9\u05DE\u05E9\u05D5\u05EA \u05DC\u05D0\u05D9\u05E1\u05D5\u05E3 \u05E1\u05D8\u05D8\u05D9\u05E1\u05D8\u05D9\u05E7\u05D5\u05EA \u05D1\u05D9\u05E7\u05D5\u05E8 \u05D0\u05E0\u05D5\u05E0\u05D9\u05DE\u05D9\u05D5\u05EA.\" },\r\n marketing: { title: \"\u05E2\u05D5\u05D2\u05D9\u05D5\u05EA \u05E9\u05D9\u05D5\u05D5\u05E7\", desc: \"\u05DE\u05E9\u05DE\u05E9\u05D5\u05EA \u05DC\u05E4\u05E8\u05E1\u05D5\u05DD \u05DE\u05D5\u05EA\u05D0\u05DD \u05D0\u05D9\u05E9\u05D9\u05EA \u05D5\u05E8\u05D9\u05DE\u05E8\u05E7\u05D8\u05D9\u05E0\u05D2.\" },\r\n functional: { title: \"\u05E2\u05D5\u05D2\u05D9\u05D5\u05EA \u05E4\u05D5\u05E0\u05E7\u05E6\u05D9\u05D5\u05E0\u05DC\u05D9\u05D5\u05EA\",desc: \"\u05DE\u05E9\u05DE\u05E9\u05D5\u05EA \u05DC\u05D6\u05DB\u05D9\u05E8\u05EA \u05D4\u05E2\u05D3\u05E4\u05D5\u05EA \u05DB\u05DE\u05D5 \u05E9\u05E4\u05D4 \u05D5\u05E2\u05D9\u05E6\u05D5\u05D1.\" }\r\n },\r\n placeholder: {\r\n title: \"\u05D4\u05EA\u05D5\u05DB\u05DF \u05D7\u05E1\u05D5\u05DD\",\r\n desc: \"\u05E2\u05DC\u05D9\u05DA \u05DC\u05D0\u05E9\u05E8 \u05E2\u05D5\u05D2\u05D9\u05D5\u05EA {category} \u05DB\u05D3\u05D9 \u05DC\u05E6\u05E4\u05D5\u05EA \u05D1\u05EA\u05D5\u05DB\u05DF \u05D6\u05D4.\",\r\n cta: \"\u05D0\u05E4\u05E9\u05E8\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/uk.js \u2014 Ukrainian translations\r\n\r\nexport default {\r\n title: \"\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0444\u0430\u0439\u043B\u0456\u0432 cookie\",\r\n intro: \"\u0426\u0435\u0439 \u0441\u0430\u0439\u0442 \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0454 \u0444\u0430\u0439\u043B\u0438 cookie \u0434\u043B\u044F \u043F\u043E\u043A\u0440\u0430\u0449\u0435\u043D\u043D\u044F \u0432\u0430\u0448\u043E\u0433\u043E \u0434\u043E\u0441\u0432\u0456\u0434\u0443. \u0414\u0438\u0432\u0456\u0442\u044C\u0441\u044F \u043D\u0430\u0448\u0443 \u041F\u043E\u043B\u0456\u0442\u0438\u043A\u0443 cookie.\",\r\n policyLink: \"\u041F\u043E\u043B\u0456\u0442\u0438\u043A\u0430 cookie\",\r\n acceptAll: \"\u041F\u0440\u0438\u0439\u043D\u044F\u0442\u0438 \u0432\u0441\u0456\",\r\n rejectAll: \"\u0412\u0456\u0434\u0445\u0438\u043B\u0438\u0442\u0438 \u0432\u0441\u0456\",\r\n preferences: \"\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F\",\r\n save: \"\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u0432\u0438\u0431\u0456\u0440\",\r\n close: \"\u0417\u0430\u043A\u0440\u0438\u0442\u0438\",\r\n cat: {\r\n essential: { title: \"\u041E\u0431\u043E\u0432'\u044F\u0437\u043A\u043E\u0432\u0456 cookie\", desc: \"\u041D\u0435\u043E\u0431\u0445\u0456\u0434\u043D\u0456 \u0434\u043B\u044F \u0440\u043E\u0431\u043E\u0442\u0438 \u0441\u0430\u0439\u0442\u0443. \u041D\u0435 \u043C\u043E\u0436\u0443\u0442\u044C \u0431\u0443\u0442\u0438 \u0432\u0438\u043C\u043A\u043D\u0435\u043D\u0456.\", always: \"\u0417\u0430\u0432\u0436\u0434\u0438 \u0430\u043A\u0442\u0438\u0432\u043D\u0456\" },\r\n analytics: { title: \"\u0410\u043D\u0430\u043B\u0456\u0442\u0438\u0447\u043D\u0456 cookie\", desc: \"\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u044E\u0442\u044C\u0441\u044F \u0434\u043B\u044F \u0437\u0431\u043E\u0440\u0443 \u0430\u043D\u043E\u043D\u0456\u043C\u043D\u043E\u0457 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0438 \u0432\u0456\u0434\u0432\u0456\u0434\u0443\u0432\u0430\u043D\u044C.\" },\r\n marketing: { title: \"\u041C\u0430\u0440\u043A\u0435\u0442\u0438\u043D\u0433\u043E\u0432\u0456 cookie\", desc: \"\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u044E\u0442\u044C\u0441\u044F \u0434\u043B\u044F \u043F\u0435\u0440\u0441\u043E\u043D\u0430\u043B\u0456\u0437\u043E\u0432\u0430\u043D\u043E\u0457 \u0440\u0435\u043A\u043B\u0430\u043C\u0438 \u0442\u0430 \u0440\u0435\u0442\u0430\u0440\u0433\u0435\u0442\u0438\u043D\u0433\u0443.\" },\r\n functional: { title: \"\u0424\u0443\u043D\u043A\u0446\u0456\u043E\u043D\u0430\u043B\u044C\u043D\u0456 cookie\",desc: \"\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u044E\u0442\u044C\u0441\u044F \u0434\u043B\u044F \u0437\u0430\u043F\u0430\u043C'\u044F\u0442\u043E\u0432\u0443\u0432\u0430\u043D\u043D\u044F \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u044C \u043C\u043E\u0432\u0438, \u0442\u0435\u043C\u0438 \u0442\u043E\u0449\u043E.\" }\r\n },\r\n placeholder: {\r\n title: \"\u0412\u043C\u0456\u0441\u0442 \u0437\u0430\u0431\u043B\u043E\u043A\u043E\u0432\u0430\u043D\u043E\",\r\n desc: \"\u0429\u043E\u0431 \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u043D\u0443\u0442\u0438 \u0446\u0435\u0439 \u0432\u043C\u0456\u0441\u0442, \u0434\u043E\u0437\u0432\u043E\u043B\u044C\u0442\u0435 \u0444\u0430\u0439\u043B\u0438 cookie \u043A\u0430\u0442\u0435\u0433\u043E\u0440\u0456\u0457 {category}.\",\r\n cta: \"\u0414\u043E\u0437\u0432\u043E\u043B\u0438\u0442\u0438\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/es.js \u2014 Spanish translations\r\n\r\nexport default {\r\n title: \"Preferencias de Cookies\",\r\n intro: \"Este sitio usa cookies para mejorar tu experiencia. Consulta nuestra Pol\u00EDtica de Cookies.\",\r\n policyLink: \"Pol\u00EDtica de Cookies\",\r\n acceptAll: \"Aceptar todo\",\r\n rejectAll: \"Rechazar todo\",\r\n preferences: \"Preferencias\",\r\n save: \"Guardar opciones\",\r\n close: \"Cerrar\",\r\n cat: {\r\n essential: { title: \"Cookies esenciales\", desc: \"Necesarias para el funcionamiento del sitio. No se pueden desactivar.\", always: \"Siempre activo\" },\r\n analytics: { title: \"Cookies anal\u00EDticas\", desc: \"Usadas para recopilar estad\u00EDsticas de visita an\u00F3nimas.\" },\r\n marketing: { title: \"Cookies de marketing\",desc: \"Usadas para publicidad personalizada y retargeting.\" },\r\n functional: { title: \"Cookies funcionales\",desc: \"Usadas para recordar preferencias como idioma o tema.\" }\r\n },\r\n placeholder: {\r\n title: \"Contenido bloqueado\",\r\n desc: \"Necesitas permitir las cookies de {category} para ver este contenido.\",\r\n cta: \"Permitir\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/it.js \u2014 Italian translations\r\n\r\nexport default {\r\n title: \"Preferenze Cookie\",\r\n intro: \"Questo sito usa i cookie per migliorare la tua esperienza. Consulta la nostra Informativa sui Cookie.\",\r\n policyLink: \"Informativa sui Cookie\",\r\n acceptAll: \"Accetta tutti\",\r\n rejectAll: \"Rifiuta tutti\",\r\n preferences: \"Preferenze\",\r\n save: \"Salva scelte\",\r\n close: \"Chiudi\",\r\n cat: {\r\n essential: { title: \"Cookie essenziali\", desc: \"Necessari per il funzionamento del sito. Non disattivabili.\", always: \"Sempre attivo\" },\r\n analytics: { title: \"Cookie analitici\", desc: \"Usati per raccogliere statistiche di visita anonime.\" },\r\n marketing: { title: \"Cookie di marketing\",desc: \"Usati per pubblicit\u00E0 personalizzata e retargeting.\" },\r\n functional: { title: \"Cookie funzionali\", desc: \"Usati per ricordare preferenze come lingua e tema.\" }\r\n },\r\n placeholder: {\r\n title: \"Contenuto bloccato\",\r\n desc: \"Devi consentire i cookie {category} per visualizzare questo contenuto.\",\r\n cta: \"Consenti\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/pt.js \u2014 Portuguese translations\r\n\r\nexport default {\r\n title: \"Prefer\u00EAncias de Cookies\",\r\n intro: \"Este site usa cookies para melhorar sua experi\u00EAncia. Consulte nossa Pol\u00EDtica de Cookies.\",\r\n policyLink: \"Pol\u00EDtica de Cookies\",\r\n acceptAll: \"Aceitar todos\",\r\n rejectAll: \"Rejeitar todos\",\r\n preferences: \"Prefer\u00EAncias\",\r\n save: \"Salvar escolhas\",\r\n close: \"Fechar\",\r\n cat: {\r\n essential: { title: \"Cookies essenciais\", desc: \"Necess\u00E1rios para o funcionamento do site. N\u00E3o podem ser desativados.\", always: \"Sempre ativo\" },\r\n analytics: { title: \"Cookies anal\u00EDticos\", desc: \"Usados para coletar estat\u00EDsticas an\u00F4nimas de visitas.\" },\r\n marketing: { title: \"Cookies de marketing\",desc: \"Usados para publicidade personalizada e retargeting.\" },\r\n functional: { title: \"Cookies funcionais\", desc: \"Usados para lembrar prefer\u00EAncias como idioma e tema.\" }\r\n },\r\n placeholder: {\r\n title: \"Conte\u00FAdo bloqueado\",\r\n desc: \"Voc\u00EA precisa permitir cookies de {category} para ver este conte\u00FAdo.\",\r\n cta: \"Permitir\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/nl.js \u2014 Dutch translations\r\n\r\nexport default {\r\n title: \"Cookie-voorkeuren\",\r\n intro: \"Deze site gebruikt cookies om uw ervaring te verbeteren. Zie ons Cookiebeleid voor details.\",\r\n policyLink: \"Cookiebeleid\",\r\n acceptAll: \"Alles accepteren\",\r\n rejectAll: \"Alles weigeren\",\r\n preferences: \"Voorkeuren\",\r\n save: \"Keuzes opslaan\",\r\n close: \"Sluiten\",\r\n cat: {\r\n essential: { title: \"Essenti\u00EBle cookies\", desc: \"Noodzakelijk voor het functioneren van de site. Kunnen niet worden uitgeschakeld.\", always: \"Altijd actief\" },\r\n analytics: { title: \"Analytische cookies\", desc: \"Gebruikt voor het verzamelen van anonieme bezoekstatistieken.\" },\r\n marketing: { title: \"Marketingcookies\", desc: \"Gebruikt voor gepersonaliseerde advertenties en retargeting.\" },\r\n functional: { title: \"Functionele cookies\", desc: \"Gebruikt om voorkeuren zoals taal en thema te onthouden.\" }\r\n },\r\n placeholder: {\r\n title: \"Inhoud geblokkeerd\",\r\n desc: \"U moet {category}-cookies toestaan om deze inhoud te bekijken.\",\r\n cta: \"Toestaan\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/pl.js \u2014 Polish translations\r\n\r\nexport default {\r\n title: \"Preferencje plik\u00F3w cookie\",\r\n intro: \"Ta strona u\u017Cywa plik\u00F3w cookie, aby poprawi\u0107 Twoje do\u015Bwiadczenia. Zobacz nasz\u0105 Polityk\u0119 plik\u00F3w cookie.\",\r\n policyLink: \"Polityka plik\u00F3w cookie\",\r\n acceptAll: \"Akceptuj wszystkie\",\r\n rejectAll: \"Odrzu\u0107 wszystkie\",\r\n preferences: \"Preferencje\",\r\n save: \"Zapisz wybory\",\r\n close: \"Zamknij\",\r\n cat: {\r\n essential: { title: \"Niezb\u0119dne pliki cookie\", desc: \"Wymagane do dzia\u0142ania strony. Nie mo\u017Cna ich wy\u0142\u0105czy\u0107.\", always: \"Zawsze aktywne\" },\r\n analytics: { title: \"Analityczne pliki cookie\", desc: \"U\u017Cywane do zbierania anonimowych statystyk odwiedzin.\" },\r\n marketing: { title: \"Marketingowe pliki cookie\", desc: \"U\u017Cywane do spersonalizowanych reklam i retargetingu.\" },\r\n functional: { title: \"Funkcjonalne pliki cookie\", desc: \"U\u017Cywane do zapami\u0119tywania preferencji takich jak j\u0119zyk i motyw.\" }\r\n },\r\n placeholder: {\r\n title: \"Tre\u015B\u0107 zablokowana\",\r\n desc: \"Musisz zezwoli\u0107 na pliki cookie {category}, aby wy\u015Bwietli\u0107 t\u0119 tre\u015B\u0107.\",\r\n cta: \"Zezw\u00F3l\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/sv.js \u2014 Swedish translations\r\n\r\nexport default {\r\n title: \"Cookie-inst\u00E4llningar\",\r\n intro: \"Den h\u00E4r webbplatsen anv\u00E4nder cookies f\u00F6r att f\u00F6rb\u00E4ttra din upplevelse. Se v\u00E5r Cookie-policy.\",\r\n policyLink: \"Cookie-policy\",\r\n acceptAll: \"Acceptera alla\",\r\n rejectAll: \"Avvisa alla\",\r\n preferences: \"Inst\u00E4llningar\",\r\n save: \"Spara val\",\r\n close: \"St\u00E4ng\",\r\n cat: {\r\n essential: { title: \"N\u00F6dv\u00E4ndiga cookies\", desc: \"Kr\u00E4vs f\u00F6r att webbplatsen ska fungera. Kan inte inaktiveras.\", always: \"Alltid aktiv\" },\r\n analytics: { title: \"Analytiska cookies\", desc: \"Anv\u00E4nds f\u00F6r att samla in anonym bes\u00F6ksstatistik.\" },\r\n marketing: { title: \"Marknadsf\u00F6ringscookies\", desc: \"Anv\u00E4nds f\u00F6r personlig annonsering och \u00E5termarknadsf\u00F6ring.\" },\r\n functional: { title: \"Funktionella cookies\", desc: \"Anv\u00E4nds f\u00F6r att komma ih\u00E5g inst\u00E4llningar som spr\u00E5k och tema.\" }\r\n },\r\n placeholder: {\r\n title: \"Inneh\u00E5ll blockerat\",\r\n desc: \"Du m\u00E5ste till\u00E5ta {category}-cookies f\u00F6r att visa detta inneh\u00E5ll.\",\r\n cta: \"Till\u00E5t\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/cs.js \u2014 Czech translations\r\n\r\nexport default {\r\n title: \"P\u0159edvolby soubor\u016F cookie\",\r\n intro: \"Tento web pou\u017E\u00EDv\u00E1 soubory cookie ke zlep\u0161en\u00ED va\u0161eho z\u00E1\u017Eitku. Viz na\u0161e Z\u00E1sady soubor\u016F cookie.\",\r\n policyLink: \"Z\u00E1sady soubor\u016F cookie\",\r\n acceptAll: \"P\u0159ijmout v\u0161e\",\r\n rejectAll: \"Odm\u00EDtnout v\u0161e\",\r\n preferences: \"P\u0159edvolby\",\r\n save: \"Ulo\u017Eit volby\",\r\n close: \"Zav\u0159\u00EDt\",\r\n cat: {\r\n essential: { title: \"Nezbytn\u00E9 soubory cookie\", desc: \"Nutn\u00E9 pro fungov\u00E1n\u00ED webu. Nelze je deaktivovat.\", always: \"V\u017Edy aktivn\u00ED\" },\r\n analytics: { title: \"Analytick\u00E9 soubory cookie\", desc: \"Slou\u017E\u00ED ke shroma\u017E\u010Fov\u00E1n\u00ED anonymn\u00EDch statistik n\u00E1v\u0161t\u011Bv.\" },\r\n marketing: { title: \"Marketingov\u00E9 soubory cookie\",desc: \"Slou\u017E\u00ED k personalizovan\u00E9 reklam\u011B a retargetingu.\" },\r\n functional: { title: \"Funk\u010Dn\u00ED soubory cookie\", desc: \"Slou\u017E\u00ED k zapamatov\u00E1n\u00ED p\u0159edvoleb jako jazyk a t\u00E9ma.\" }\r\n },\r\n placeholder: {\r\n title: \"Obsah blokov\u00E1n\",\r\n desc: \"Pro zobrazen\u00ED tohoto obsahu mus\u00EDte povolit soubory cookie {category}.\",\r\n cta: \"Povolit\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/zh.js \u2014 Simplified Chinese translations\r\n\r\nexport default {\r\n title: \"Cookie \u504F\u597D\u8BBE\u7F6E\",\r\n intro: \"\u672C\u7F51\u7AD9\u4F7F\u7528 Cookie \u6765\u6539\u5584\u60A8\u7684\u4F53\u9A8C\u3002\u8BE6\u60C5\u8BF7\u67E5\u770B\u6211\u4EEC\u7684 Cookie \u653F\u7B56\u3002\",\r\n policyLink: \"Cookie \u653F\u7B56\",\r\n acceptAll: \"\u63A5\u53D7\u5168\u90E8\",\r\n rejectAll: \"\u62D2\u7EDD\u5168\u90E8\",\r\n preferences: \"\u504F\u597D\u8BBE\u7F6E\",\r\n save: \"\u4FDD\u5B58\u9009\u62E9\",\r\n close: \"\u5173\u95ED\",\r\n cat: {\r\n essential: { title: \"\u5FC5\u8981 Cookie\", desc: \"\u7F51\u7AD9\u57FA\u672C\u529F\u80FD\u6240\u5FC5\u9700\uFF0C\u65E0\u6CD5\u7981\u7528\u3002\", always: \"\u59CB\u7EC8\u542F\u7528\" },\r\n analytics: { title: \"\u5206\u6790 Cookie\", desc: \"\u7528\u4E8E\u6536\u96C6\u533F\u540D\u8BBF\u95EE\u7EDF\u8BA1\u6570\u636E\u3002\" },\r\n marketing: { title: \"\u8425\u9500 Cookie\", desc: \"\u7528\u4E8E\u4E2A\u6027\u5316\u5E7F\u544A\u548C\u518D\u8425\u9500\u3002\" },\r\n functional: { title: \"\u529F\u80FD Cookie\", desc: \"\u7528\u4E8E\u8BB0\u4F4F\u8BED\u8A00\u3001\u4E3B\u9898\u7B49\u504F\u597D\u8BBE\u7F6E\u3002\" }\r\n },\r\n placeholder: {\r\n title: \"\u5185\u5BB9\u5DF2\u88AB\u963B\u6B62\",\r\n desc: \"\u60A8\u9700\u8981\u5141\u8BB8 {category} Cookie \u624D\u80FD\u67E5\u770B\u6B64\u5185\u5BB9\u3002\",\r\n cta: \"\u5141\u8BB8\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/zh-TW.js \u2014 Traditional Chinese translations\r\n\r\nexport default {\r\n title: \"Cookie \u504F\u597D\u8A2D\u5B9A\",\r\n intro: \"\u672C\u7DB2\u7AD9\u4F7F\u7528 Cookie \u4F86\u6539\u5584\u60A8\u7684\u9AD4\u9A57\u3002\u8A73\u60C5\u8ACB\u67E5\u770B\u6211\u5011\u7684 Cookie \u653F\u7B56\u3002\",\r\n policyLink: \"Cookie \u653F\u7B56\",\r\n acceptAll: \"\u63A5\u53D7\u5168\u90E8\",\r\n rejectAll: \"\u62D2\u7D55\u5168\u90E8\",\r\n preferences: \"\u504F\u597D\u8A2D\u5B9A\",\r\n save: \"\u5132\u5B58\u9078\u64C7\",\r\n close: \"\u95DC\u9589\",\r\n cat: {\r\n essential: { title: \"\u5FC5\u8981 Cookie\", desc: \"\u7DB2\u7AD9\u57FA\u672C\u529F\u80FD\u6240\u5FC5\u9700\uFF0C\u7121\u6CD5\u505C\u7528\u3002\", always: \"\u59CB\u7D42\u555F\u7528\" },\r\n analytics: { title: \"\u5206\u6790 Cookie\", desc: \"\u7528\u65BC\u6536\u96C6\u533F\u540D\u8A2A\u554F\u7D71\u8A08\u8CC7\u6599\u3002\" },\r\n marketing: { title: \"\u884C\u92B7 Cookie\", desc: \"\u7528\u65BC\u500B\u4EBA\u5316\u5EE3\u544A\u548C\u518D\u884C\u92B7\u3002\" },\r\n functional: { title: \"\u529F\u80FD Cookie\", desc: \"\u7528\u65BC\u8A18\u4F4F\u8A9E\u8A00\u3001\u4E3B\u984C\u7B49\u504F\u597D\u8A2D\u5B9A\u3002\" }\r\n },\r\n placeholder: {\r\n title: \"\u5167\u5BB9\u5DF2\u88AB\u5C01\u9396\",\r\n desc: \"\u60A8\u9700\u8981\u5141\u8A31 {category} Cookie \u624D\u80FD\u6AA2\u8996\u6B64\u5167\u5BB9\u3002\",\r\n cta: \"\u5141\u8A31\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/ja.js \u2014 Japanese translations\r\n\r\nexport default {\r\n title: \"Cookie\u306E\u8A2D\u5B9A\",\r\n intro: \"\u3053\u306E\u30B5\u30A4\u30C8\u306F\u30A8\u30AF\u30B9\u30DA\u30EA\u30A8\u30F3\u30B9\u3092\u5411\u4E0A\u3055\u305B\u308B\u305F\u3081\u306BCookie\u3092\u4F7F\u7528\u3057\u307E\u3059\u3002\u8A73\u7D30\u306FCookie\u30DD\u30EA\u30B7\u30FC\u3092\u3054\u89A7\u304F\u3060\u3055\u3044\u3002\",\r\n policyLink: \"Cookie\u30DD\u30EA\u30B7\u30FC\",\r\n acceptAll: \"\u3059\u3079\u3066\u627F\u8A8D\",\r\n rejectAll: \"\u3059\u3079\u3066\u62D2\u5426\",\r\n preferences: \"\u8A2D\u5B9A\",\r\n save: \"\u9078\u629E\u3092\u4FDD\u5B58\",\r\n close: \"\u9589\u3058\u308B\",\r\n cat: {\r\n essential: { title: \"\u5FC5\u9808Cookie\", desc: \"\u30B5\u30A4\u30C8\u306E\u57FA\u672C\u6A5F\u80FD\u306B\u5FC5\u8981\u3067\u3059\u3002\u7121\u52B9\u306B\u3067\u304D\u307E\u305B\u3093\u3002\", always: \"\u5E38\u306B\u6709\u52B9\" },\r\n analytics: { title: \"\u5206\u6790Cookie\", desc: \"\u533F\u540D\u306E\u8A2A\u554F\u7D71\u8A08\u3092\u53CE\u96C6\u3059\u308B\u305F\u3081\u306B\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002\" },\r\n marketing: { title: \"\u30DE\u30FC\u30B1\u30C6\u30A3\u30F3\u30B0Cookie\",desc: \"\u30D1\u30FC\u30BD\u30CA\u30E9\u30A4\u30BA\u3055\u308C\u305F\u5E83\u544A\u3068\u30EA\u30BF\u30FC\u30B2\u30C6\u30A3\u30F3\u30B0\u306B\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002\" },\r\n functional: { title: \"\u6A5F\u80FDCookie\", desc: \"\u8A00\u8A9E\u3084\u30C6\u30FC\u30DE\u306A\u3069\u306E\u8A2D\u5B9A\u3092\u8A18\u61B6\u3059\u308B\u305F\u3081\u306B\u4F7F\u7528\u3055\u308C\u307E\u3059\u3002\" }\r\n },\r\n placeholder: {\r\n title: \"\u30B3\u30F3\u30C6\u30F3\u30C4\u304C\u30D6\u30ED\u30C3\u30AF\u3055\u308C\u307E\u3057\u305F\",\r\n desc: \"\u3053\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u8868\u793A\u3059\u308B\u306B\u306F{category}Cookie\u3092\u8A31\u53EF\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\",\r\n cta: \"\u8A31\u53EF\u3059\u308B\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/ko.js \u2014 Korean translations\r\n\r\nexport default {\r\n title: \"\uCFE0\uD0A4 \uD658\uACBD\uC124\uC815\",\r\n intro: \"\uC774 \uC0AC\uC774\uD2B8\uB294 \uACBD\uD5D8\uC744 \uD5A5\uC0C1\uC2DC\uD0A4\uAE30 \uC704\uD574 \uCFE0\uD0A4\uB97C \uC0AC\uC6A9\uD569\uB2C8\uB2E4. \uC790\uC138\uD55C \uB0B4\uC6A9\uC740 \uCFE0\uD0A4 \uC815\uCC45\uC744 \uD655\uC778\uD558\uC138\uC694.\",\r\n policyLink: \"\uCFE0\uD0A4 \uC815\uCC45\",\r\n acceptAll: \"\uBAA8\uB450 \uC218\uB77D\",\r\n rejectAll: \"\uBAA8\uB450 \uAC70\uBD80\",\r\n preferences: \"\uD658\uACBD\uC124\uC815\",\r\n save: \"\uC120\uD0DD \uC800\uC7A5\",\r\n close: \"\uB2EB\uAE30\",\r\n cat: {\r\n essential: { title: \"\uD544\uC218 \uCFE0\uD0A4\", desc: \"\uC0AC\uC774\uD2B8 \uAE30\uB2A5\uC5D0 \uD544\uC694\uD558\uBA70 \uBE44\uD65C\uC131\uD654\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\", always: \"\uD56D\uC0C1 \uD65C\uC131\" },\r\n analytics: { title: \"\uBD84\uC11D \uCFE0\uD0A4\", desc: \"\uC775\uBA85 \uBC29\uBB38 \uD1B5\uACC4 \uC218\uC9D1\uC5D0 \uC0AC\uC6A9\uB429\uB2C8\uB2E4.\" },\r\n marketing: { title: \"\uB9C8\uCF00\uD305 \uCFE0\uD0A4\", desc: \"\uB9DE\uCDA4\uD615 \uAD11\uACE0 \uBC0F \uB9AC\uD0C0\uAC8C\uD305\uC5D0 \uC0AC\uC6A9\uB429\uB2C8\uB2E4.\" },\r\n functional: { title: \"\uAE30\uB2A5\uC131 \uCFE0\uD0A4\", desc: \"\uC5B8\uC5B4, \uD14C\uB9C8 \uB4F1\uC758 \uD658\uACBD\uC124\uC815\uC744 \uAE30\uC5B5\uD558\uB294 \uB370 \uC0AC\uC6A9\uB429\uB2C8\uB2E4.\" }\r\n },\r\n placeholder: {\r\n title: \"\uCF58\uD150\uCE20\uAC00 \uCC28\uB2E8\uB418\uC5C8\uC2B5\uB2C8\uB2E4\",\r\n desc: \"\uC774 \uCF58\uD150\uCE20\uB97C \uBCF4\uB824\uBA74 {category} \uCFE0\uD0A4\uB97C \uD5C8\uC6A9\uD574\uC57C \uD569\uB2C8\uB2E4.\",\r\n cta: \"\uD5C8\uC6A9\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/id.js \u2014 Indonesian translations\r\n\r\nexport default {\r\n title: \"Preferensi Cookie\",\r\n intro: \"Situs ini menggunakan cookie untuk meningkatkan pengalaman Anda. Lihat Kebijakan Cookie kami.\",\r\n policyLink: \"Kebijakan Cookie\",\r\n acceptAll: \"Terima Semua\",\r\n rejectAll: \"Tolak Semua\",\r\n preferences: \"Preferensi\",\r\n save: \"Simpan Pilihan\",\r\n close: \"Tutup\",\r\n cat: {\r\n essential: { title: \"Cookie Esensial\", desc: \"Diperlukan untuk fungsi dasar situs. Tidak dapat dinonaktifkan.\", always: \"Selalu aktif\" },\r\n analytics: { title: \"Cookie Analitik\", desc: \"Digunakan untuk mengumpulkan statistik kunjungan anonim.\" },\r\n marketing: { title: \"Cookie Pemasaran\",desc: \"Digunakan untuk iklan yang dipersonalisasi dan retargeting.\" },\r\n functional: { title: \"Cookie Fungsional\",desc: \"Digunakan untuk mengingat preferensi seperti bahasa dan tema.\" }\r\n },\r\n placeholder: {\r\n title: \"Konten diblokir\",\r\n desc: \"Anda harus mengizinkan cookie {category} untuk melihat konten ini.\",\r\n cta: \"Izinkan\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/translations/hi.js \u2014 Hindi translations\r\n\r\nexport default {\r\n title: \"\u0915\u0941\u0915\u0940 \u092A\u094D\u0930\u093E\u0925\u092E\u093F\u0915\u0924\u093E\u090F\u0902\",\r\n intro: \"\u092F\u0939 \u0938\u093E\u0907\u091F \u0906\u092A\u0915\u0947 \u0905\u0928\u0941\u092D\u0935 \u0915\u094B \u092C\u0947\u0939\u0924\u0930 \u092C\u0928\u093E\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0915\u0941\u0915\u0940\u091C\u093C \u0915\u093E \u0909\u092A\u092F\u094B\u0917 \u0915\u0930\u0924\u0940 \u0939\u0948\u0964 \u0935\u093F\u0935\u0930\u0923 \u0915\u0947 \u0932\u093F\u090F \u0939\u092E\u093E\u0930\u0940 \u0915\u0941\u0915\u0940 \u0928\u0940\u0924\u093F \u0926\u0947\u0916\u0947\u0902\u0964\",\r\n policyLink: \"\u0915\u0941\u0915\u0940 \u0928\u0940\u0924\u093F\",\r\n acceptAll: \"\u0938\u092D\u0940 \u0938\u094D\u0935\u0940\u0915\u093E\u0930 \u0915\u0930\u0947\u0902\",\r\n rejectAll: \"\u0938\u092D\u0940 \u0905\u0938\u094D\u0935\u0940\u0915\u093E\u0930 \u0915\u0930\u0947\u0902\",\r\n preferences: \"\u092A\u094D\u0930\u093E\u0925\u092E\u093F\u0915\u0924\u093E\u090F\u0902\",\r\n save: \"\u0935\u093F\u0915\u0932\u094D\u092A \u0938\u0939\u0947\u091C\u0947\u0902\",\r\n close: \"\u092C\u0902\u0926 \u0915\u0930\u0947\u0902\",\r\n cat: {\r\n essential: { title: \"\u0906\u0935\u0936\u094D\u092F\u0915 \u0915\u0941\u0915\u0940\u091C\u093C\", desc: \"\u0938\u093E\u0907\u091F \u0915\u0947 \u0915\u093E\u0930\u094D\u092F \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0906\u0935\u0936\u094D\u092F\u0915\u0964 \u0905\u0915\u094D\u0937\u092E \u0928\u0939\u0940\u0902 \u0915\u0940 \u091C\u093E \u0938\u0915\u0924\u0940\u0902\u0964\", always: \"\u0939\u092E\u0947\u0936\u093E \u0938\u0915\u094D\u0930\u093F\u092F\" },\r\n analytics: { title: \"\u0935\u093F\u0936\u094D\u0932\u0947\u0937\u0923 \u0915\u0941\u0915\u0940\u091C\u093C\", desc: \"\u0905\u091C\u094D\u091E\u093E\u0924 \u0935\u093F\u091C\u093C\u093F\u091F \u0906\u0901\u0915\u0921\u093C\u0947 \u090F\u0915\u0924\u094D\u0930 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0909\u092A\u092F\u094B\u0917 \u0915\u0940 \u091C\u093E\u0924\u0940 \u0939\u0948\u0902\u0964\" },\r\n marketing: { title: \"\u092E\u093E\u0930\u094D\u0915\u0947\u091F\u093F\u0902\u0917 \u0915\u0941\u0915\u0940\u091C\u093C\", desc: \"\u0935\u0948\u092F\u0915\u094D\u0924\u093F\u0915\u0943\u0924 \u0935\u093F\u091C\u094D\u091E\u093E\u092A\u0928 \u0914\u0930 \u0930\u093F\u091F\u093E\u0930\u094D\u0917\u0947\u091F\u093F\u0902\u0917 \u0915\u0947 \u0932\u093F\u090F \u0909\u092A\u092F\u094B\u0917 \u0915\u0940 \u091C\u093E\u0924\u0940 \u0939\u0948\u0902\u0964\" },\r\n functional: { title: \"\u0915\u093E\u0930\u094D\u092F\u093E\u0924\u094D\u092E\u0915 \u0915\u0941\u0915\u0940\u091C\u093C\", desc: \"\u092D\u093E\u0937\u093E, \u0925\u0940\u092E \u091C\u0948\u0938\u0940 \u092A\u094D\u0930\u093E\u0925\u092E\u093F\u0915\u0924\u093E\u0913\u0902 \u0915\u094B \u092F\u093E\u0926 \u0930\u0916\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0909\u092A\u092F\u094B\u0917 \u0915\u0940 \u091C\u093E\u0924\u0940 \u0939\u0948\u0902\u0964\" }\r\n },\r\n placeholder: {\r\n title: \"\u0938\u093E\u092E\u0917\u094D\u0930\u0940 \u0905\u0935\u0930\u0941\u0926\u094D\u0927 \u0939\u0948\",\r\n desc: \"\u0907\u0938 \u0938\u093E\u092E\u0917\u094D\u0930\u0940 \u0915\u094B \u0926\u0947\u0916\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u0906\u092A\u0915\u094B {category} \u0915\u0941\u0915\u0940\u091C\u093C \u0915\u0940 \u0905\u0928\u0941\u092E\u0924\u093F \u0926\u0947\u0928\u0940 \u0939\u094B\u0917\u0940\u0964\",\r\n cta: \"\u0905\u0928\u0941\u092E\u0924\u093F \u0926\u0947\u0902\"\r\n }\r\n,\r\n tabs: {\r\n categories: 'Categories',\r\n services: 'Services',\r\n about: 'About'\r\n },\r\n service: {\r\n description: 'Description',\r\n processor: 'Data Processor',\r\n address: 'Address',\r\n dpo: 'DPO Contact',\r\n purposes: 'Purposes',\r\n technologies: 'Technologies Used',\r\n dataCollected: 'Data Collected',\r\n legalBasis: 'Legal Basis',\r\n retention: 'Retention Period',\r\n transferCountries: 'Transfer Countries',\r\n privacyPolicy: 'Privacy Policy',\r\n cookiePolicy: 'Cookie Policy',\r\n legalBasisValues: {\r\n consent: 'Consent (Art. 6 para. 1 s. 1 lit. a GDPR)',\r\n legitimate_interest: 'Legitimate Interest (Art. 6 para. 1 s. 1 lit. f GDPR)'\r\n },\r\n noServices: 'No services are configured for this site.'\r\n },\r\n svcAbout: {\r\n title: 'About this CMP',\r\n description: 'This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences in compliance with GDPR, KVKK, CCPA and other applicable privacy regulations.',\r\n version: 'Version',\r\n learnMore: 'Learn more at blakfy.com'\r\n }\r\n};", "// blakfy-cookie/src/i18n/index.js \u2014 aggregates 23 translation modules and exposes lookup with fallback\r\n\r\nimport tr from \"./translations/tr.js\";\r\nimport en from \"./translations/en.js\";\r\nimport ar from \"./translations/ar.js\";\r\nimport fa from \"./translations/fa.js\";\r\nimport ur from \"./translations/ur.js\";\r\nimport fr from \"./translations/fr.js\";\r\nimport ru from \"./translations/ru.js\";\r\nimport de from \"./translations/de.js\";\r\nimport he from \"./translations/he.js\";\r\nimport uk from \"./translations/uk.js\";\r\nimport es from \"./translations/es.js\";\r\nimport it from \"./translations/it.js\";\r\nimport pt from \"./translations/pt.js\";\r\nimport nl from \"./translations/nl.js\";\r\nimport pl from \"./translations/pl.js\";\r\nimport sv from \"./translations/sv.js\";\r\nimport cs from \"./translations/cs.js\";\r\nimport zh from \"./translations/zh.js\";\r\nimport zhTW from \"./translations/zh-TW.js\";\r\nimport ja from \"./translations/ja.js\";\r\nimport ko from \"./translations/ko.js\";\r\nimport id from \"./translations/id.js\";\r\nimport hi from \"./translations/hi.js\";\r\n\r\nexport const DEFAULT_LOCALE = \"tr\";\r\n\r\nexport const TRANSLATIONS = {\r\n tr, en, ar, fa, ur,\r\n fr, ru, de, he, uk,\r\n es, it, pt, nl, pl, sv, cs,\r\n zh, \"zh-TW\": zhTW, ja, ko,\r\n id, hi,\r\n};\r\n\r\nexport const getTranslation = (locale) =>\r\n TRANSLATIONS[locale] || TRANSLATIONS[DEFAULT_LOCALE];\r\n", "// blakfy-cookie/src/ui/styles.js \u2014 idempotent stylesheet injection for banner, modal, badge, status\r\n// Layout architecture is locked \u2014 only --blakfy-accent is overridable\r\n\r\nconst STYLE_ID = \"blakfy-cookie-styles\";\r\n\r\nconst RULES = [\r\n \"/* Layout architecture is locked \u2014 only --blakfy-accent is overridable */\",\r\n // Modal mode (centered, dimmed backdrop)\r\n \".blakfy-overlay.modal{position:fixed !important;inset:0;background:rgba(0,0,0,.4);z-index:2147483646 !important;display:flex !important;align-items:center;justify-content:center;padding:16px}\",\r\n // Widget mode (transparent, no backdrop)\r\n \".blakfy-overlay.widget{position:fixed !important;inset:auto;background:transparent;padding:0;display:block !important;z-index:2147483646 !important;pointer-events:none}\",\r\n \".blakfy-overlay.widget .blakfy-card{width:min(96vw,1100px);max-width:none;border-radius:8px;position:relative;pointer-events:auto;padding-bottom:40px}\",\r\n // Widget butonlar\u0131 kart geni\u015Fli\u011Fine e\u015Fit da\u011F\u0131l\u0131ml\u0131\r\n \".blakfy-overlay.widget .blakfy-actions{flex-wrap:nowrap}\",\r\n \".blakfy-overlay.widget .blakfy-actions .blakfy-btn{flex:1;min-width:0;min-height:36px;padding:8px 16px}\",\r\n // Position modifiers (widget)\r\n \".blakfy-overlay.widget.bottom-center{bottom:16px;left:50%;right:auto;top:auto;transform:translateX(-50%)}\",\r\n \".blakfy-overlay.widget.bottom-right{bottom:16px;right:16px;left:auto;top:auto}\",\r\n \".blakfy-overlay.widget.bottom-left{bottom:16px;left:16px;right:auto;top:auto}\",\r\n \".blakfy-overlay.widget.top-center{top:16px;left:50%;right:auto;bottom:auto;transform:translateX(-50%)}\",\r\n \".blakfy-overlay.widget.top-right{top:16px;right:16px;left:auto;bottom:auto}\",\r\n \".blakfy-overlay.widget.top-left{top:16px;left:16px;right:auto;bottom:auto}\",\r\n \".blakfy-overlay.widget.center{top:50%;left:50%;right:auto;bottom:auto;transform:translate(-50%,-50%)}\",\r\n // Card base (shared by banner + modal)\r\n \".blakfy-card{background:#fff;color:#222;border-radius:16px;max-width:560px;width:100%;padding:24px;border:3px solid var(--blakfy-accent,#3E5C3A);font-family:system-ui,-apple-system,sans-serif;line-height:1.5;position:relative}\",\r\n \".blakfy-card[dir=rtl]{text-align:right}\",\r\n \".blakfy-card h2{margin:0 0 8px;font-size:18px;font-weight:600}\",\r\n \".blakfy-card p{margin:0 0 16px;font-size:14px;color:#444}\",\r\n \".blakfy-card a{color:var(--blakfy-accent,#3E5C3A);text-decoration:underline}\",\r\n // Actions\r\n \".blakfy-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}\",\r\n // Buttons (3px radius per spec)\r\n \".blakfy-btn{flex:1;min-width:120px;min-height:44px;padding:12px 16px;border:1px solid #ddd;border-radius:3px;background:#fff;color:#222;font-size:14px;font-weight:500;cursor:pointer;transition:transform .1s,background .15s}\",\r\n \".blakfy-btn:hover{transform:translateY(-1px)}\",\r\n \".blakfy-btn-primary{background:var(--blakfy-accent,#3E5C3A);color:#fff;border-color:transparent}\",\r\n \".blakfy-cat{padding:12px 0;border-top:1px solid #eee;display:flex;align-items:flex-start;gap:12px}\",\r\n \".blakfy-cat:first-of-type{border-top:none}\",\r\n \".blakfy-cat-text{flex:1}\",\r\n \".blakfy-cat-text strong{display:block;font-size:14px;margin-bottom:2px}\",\r\n \".blakfy-cat-text span{font-size:13px;color:#666}\",\r\n // Switches (pill-shaped \u2014 UX standard)\r\n \".blakfy-switch{flex-shrink:0;width:44px;height:24px;border-radius:999px;background:#ccc;position:relative;cursor:pointer;border:none;padding:0}\",\r\n \".blakfy-switch[aria-checked=true]{background:var(--blakfy-accent,#3E5C3A)}\",\r\n \".blakfy-switch::after{content:'';position:absolute;top:2px;left:2px;width:20px;height:20px;border-radius:50%;background:#fff;transition:transform .2s}\",\r\n \".blakfy-switch[aria-checked=true]::after{transform:translateX(20px)}\",\r\n \".blakfy-switch:disabled{opacity:.6;cursor:not-allowed}\",\r\n \".blakfy-close{position:absolute;top:12px;right:12px;background:none;border:none;font-size:20px;cursor:pointer;color:#666;width:32px;height:32px;border-radius:50%}\",\r\n \".blakfy-close:hover{background:#f3f3f3}\",\r\n \"[dir=rtl] .blakfy-close{right:auto;left:12px}\",\r\n \".blakfy-badge{position:absolute;bottom:8px;right:12px;font-size:11px;opacity:0.6;transition:opacity 0.2s;display:flex !important;pointer-events:auto !important;align-items:center;gap:4px;color:#666;text-decoration:none}\",\r\n \".blakfy-badge:hover{opacity:1}\",\r\n \"[dir=rtl] .blakfy-badge{right:auto;left:12px}\",\r\n \".blakfy-status{position:fixed;bottom:0;left:0;right:0;z-index:2147483645;display:flex;align-items:center;gap:12px;padding:10px 20px;font-family:system-ui,-apple-system,sans-serif;font-size:13px;line-height:1.5}\",\r\n \".blakfy-status-msg{flex:1}\",\r\n \".blakfy-status-dismiss{background:none;border:none;color:inherit;cursor:pointer;padding:4px 10px;border-radius:6px;font-size:16px;opacity:.8;line-height:1}\",\r\n \".blakfy-status-dismiss:hover{opacity:1;background:rgba(255,255,255,.2)}\",\r\n \"@media (prefers-reduced-motion:reduce){.blakfy-btn,.blakfy-switch::after{transition:none}}\",\r\n // Responsive\r\n \"@media (max-width:1024px){.blakfy-card{max-width:440px}}\",\r\n \"@media (max-width:768px){.blakfy-card{max-width:calc(100vw - 32px);padding:18px}.blakfy-card h2{font-size:16px}.blakfy-card p{font-size:13px}.blakfy-btn{flex:1 1 100%;min-height:44px;padding:10px 14px;font-size:13px}.blakfy-overlay.widget.bottom-center,.blakfy-overlay.widget.top-center{left:16px;right:16px;transform:none}.blakfy-overlay.widget .blakfy-card{width:100%}.blakfy-overlay.widget .blakfy-actions .blakfy-btn{flex:1 1 100%;min-width:0}}\",\r\n \"@media (max-width:480px){.blakfy-overlay.widget .blakfy-card{width:100%;max-width:calc(100vw - 32px)}}\",\r\n // Tab bar\r\n \".blakfy-tabs{display:flex;border-bottom:2px solid #eee;margin:12px 0 16px;gap:0}\",\r\n \".blakfy-tab-btn{flex:1;background:none;border:none;border-bottom:2px solid transparent;margin-bottom:-2px;padding:8px 10px;font-size:13px;font-weight:500;color:#666;cursor:pointer;transition:color .15s,border-color .15s;white-space:nowrap;font-family:inherit}\",\r\n \".blakfy-tab-btn:hover{color:#222}\",\r\n \".blakfy-tab-btn--active{color:var(--blakfy-accent,#3E5C3A);border-bottom-color:var(--blakfy-accent,#3E5C3A);font-weight:600}\",\r\n // Tab panels\r\n \".blakfy-tab-panel[aria-hidden=true]{display:none}\",\r\n \".blakfy-tab-panel[aria-hidden=false]{display:block}\",\r\n // Service list + cards\r\n \".blakfy-service-list{display:flex;flex-direction:column;gap:8px;max-height:420px;overflow-y:auto;padding-right:2px}\",\r\n \".blakfy-service-card{border:1px solid #eee;border-radius:6px;overflow:hidden}\",\r\n \".blakfy-service-card-header{display:flex;align-items:center;gap:8px;padding:10px 12px;cursor:pointer;background:#fafafa;user-select:none}\",\r\n \".blakfy-service-card-header:hover{background:#f3f3f3}\",\r\n \".blakfy-service-name{flex:1;font-size:13px;font-weight:600;color:#222}\",\r\n \".blakfy-service-cat{font-size:11px;padding:2px 8px;border-radius:999px;background:#eee;color:#555;text-transform:capitalize}\",\r\n \".blakfy-service-toggle{font-size:11px;color:#aaa;line-height:1}\",\r\n \".blakfy-service-body[aria-hidden=true]{display:none}\",\r\n \".blakfy-service-body[aria-hidden=false]{display:block;padding:12px;border-top:1px solid #eee}\",\r\n \".blakfy-service-dl{margin:0 0 10px;display:grid;grid-template-columns:auto 1fr;gap:4px 12px}\",\r\n \".blakfy-service-dt{font-size:11px;font-weight:600;color:#888;text-transform:uppercase;letter-spacing:.4px;white-space:nowrap}\",\r\n \".blakfy-service-dd{margin:0;font-size:12px;color:#444;word-break:break-word}\",\r\n \".blakfy-service-links{display:flex;gap:12px;margin-top:8px;flex-wrap:wrap}\",\r\n \".blakfy-service-links a{font-size:12px;color:var(--blakfy-accent,#3E5C3A);text-decoration:underline}\",\r\n \".blakfy-svc-empty{font-size:13px;color:#888;padding:16px 0}\",\r\n // About panel\r\n \".blakfy-about-panel{padding:4px 0}\",\r\n \".blakfy-about-brand{display:flex;align-items:center;gap:8px;margin-bottom:14px}\",\r\n \".blakfy-about-brand strong{font-size:15px;color:#222}\",\r\n \".blakfy-about-panel p{font-size:13px;color:#555;margin:0 0 10px;line-height:1.6}\",\r\n \".blakfy-about-panel a{font-size:13px;color:var(--blakfy-accent,#3E5C3A);text-decoration:underline}\",\r\n \".blakfy-about-meta{font-size:12px;color:#aaa;margin-top:12px}\",\r\n \"@media (max-width:480px){.blakfy-tab-btn{font-size:12px;padding:8px 6px}.blakfy-service-list{max-height:260px}}\",\r\n // \u2500\u2500 Themes: gray \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n \".blakfy-card[data-blakfy-theme=gray]{background:#f0f0f0}\",\r\n \".blakfy-card[data-blakfy-theme=gray] .blakfy-btn{background:#e4e4e4;border-color:#ccc}\",\r\n \".blakfy-card[data-blakfy-theme=gray] .blakfy-service-card-header{background:#e8e8e8}\",\r\n \".blakfy-card[data-blakfy-theme=gray] .blakfy-service-card-header:hover{background:#ddd}\",\r\n // \u2500\u2500 Themes: dark \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n \".blakfy-card[data-blakfy-theme=dark]{background:#1a1a1a;color:#f0f0f0;border-color:var(--blakfy-accent,#3E5C3A)}\",\r\n \".blakfy-card[data-blakfy-theme=dark] p{color:#aaa}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-cat-text span{color:#999}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-cat{border-top-color:#333}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-btn{background:#2a2a2a;color:#f0f0f0;border-color:#444}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-btn:hover{background:#333}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-switch{background:#444}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-close{color:#aaa}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-close:hover{background:#2a2a2a}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-tabs{border-bottom-color:#333}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-tab-btn{color:#888}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-tab-btn:hover{color:#f0f0f0}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-tab-btn--active{color:var(--blakfy-accent,#3E5C3A);border-bottom-color:var(--blakfy-accent,#3E5C3A)}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-service-card{border-color:#333}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-service-card-header{background:#252525}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-service-card-header:hover{background:#2e2e2e}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-service-body[aria-hidden=false]{border-top-color:#333}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-service-dt{color:#777}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-service-dd{color:#ccc}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-service-name{color:#f0f0f0}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-service-cat{background:#333;color:#aaa}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-badge{color:#777}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-about-brand strong{color:#f0f0f0}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-about-panel p{color:#aaa}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-about-meta{color:#666}\",\r\n \".blakfy-card[data-blakfy-theme=dark] .blakfy-svc-empty{color:#666}\",\r\n];\r\n\r\nexport const injectStyles = () => {\r\n if (document.getElementById(STYLE_ID)) return;\r\n const css = document.createElement(\"style\");\r\n css.id = STYLE_ID;\r\n css.textContent = RULES.join(\"\");\r\n document.head.appendChild(css);\r\n};\r\n", "// blakfy-cookie/src/ui/banner.js \u2014 first-visit consent banner DOM factory\r\n\r\nexport const createBanner = ({ t, isRTL, accent, theme, policyUrl, onAccept, onReject, onPrefs }) => {\r\n const card = document.createElement(\"div\");\r\n card.className = \"blakfy-card\";\r\n card.setAttribute(\"dir\", isRTL ? \"rtl\" : \"ltr\");\r\n card.setAttribute(\"role\", \"dialog\");\r\n card.setAttribute(\"aria-labelledby\", \"blakfy-title\");\r\n card.setAttribute(\"aria-describedby\", \"blakfy-desc\");\r\n card.style.cssText = \"--blakfy-accent:\" + accent;\r\n if (theme && theme !== \"light\") card.setAttribute(\"data-blakfy-theme\", theme);\r\n\r\n const h2 = document.createElement(\"h2\");\r\n h2.id = \"blakfy-title\";\r\n h2.textContent = t.title;\r\n card.appendChild(h2);\r\n\r\n const p = document.createElement(\"p\");\r\n p.id = \"blakfy-desc\";\r\n p.textContent = t.intro + \" \";\r\n const a = document.createElement(\"a\");\r\n a.href = policyUrl;\r\n a.textContent = t.policyLink;\r\n p.appendChild(a);\r\n card.appendChild(p);\r\n\r\n const actions = document.createElement(\"div\");\r\n actions.className = \"blakfy-actions\";\r\n\r\n const btnReject = document.createElement(\"button\");\r\n btnReject.className = \"blakfy-btn\";\r\n btnReject.setAttribute(\"data-act\", \"reject\");\r\n btnReject.textContent = t.rejectAll;\r\n btnReject.addEventListener(\"click\", () => { if (onReject) onReject(); });\r\n actions.appendChild(btnReject);\r\n\r\n const btnPrefs = document.createElement(\"button\");\r\n btnPrefs.className = \"blakfy-btn\";\r\n btnPrefs.setAttribute(\"data-act\", \"prefs\");\r\n btnPrefs.textContent = t.preferences;\r\n btnPrefs.addEventListener(\"click\", () => { if (onPrefs) onPrefs(); });\r\n actions.appendChild(btnPrefs);\r\n\r\n const btnAccept = document.createElement(\"button\");\r\n btnAccept.className = \"blakfy-btn blakfy-btn-primary\";\r\n btnAccept.setAttribute(\"data-act\", \"accept\");\r\n btnAccept.textContent = t.acceptAll;\r\n btnAccept.addEventListener(\"click\", () => { if (onAccept) onAccept(); });\r\n actions.appendChild(btnAccept);\r\n\r\n card.appendChild(actions);\r\n\r\n const badgeSlot = document.createElement(\"div\");\r\n badgeSlot.className = \"blakfy-badge-slot\";\r\n card.appendChild(badgeSlot);\r\n\r\n return card;\r\n};\r\n", "// blakfy-cookie/src/data/service-metadata.js \u2014 GDPR/KVKK disclosure data for each preset service\r\n\r\nexport const SERVICE_METADATA = {\r\n ga4: {\r\n displayName: \"Google Analytics 4\",\r\n category: \"analytics\",\r\n description: \"Website analytics service that collects and reports traffic data to help website owners understand how visitors interact with their site.\",\r\n processor: {\r\n name: \"Google Ireland Limited\",\r\n address: \"Gordon House, Barrow St, Dublin 4, Ireland\",\r\n dpo: \"https://support.google.com/policies/contact/general_privacy_form\"\r\n },\r\n purposes: [\"Analytics\", \"Performance measurement\", \"User behavior analysis\"],\r\n technologies: [\"Cookies\", \"JavaScript\"],\r\n dataCollected: [\"IP address\", \"Browser information\", \"Usage data\", \"Device information\", \"Geographic location\", \"Date and time of visit\", \"Pages visited\"],\r\n legalBasis: \"consent\",\r\n retention: \"14 months\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://policies.google.com/privacy\",\r\n cookiePolicyUrl: \"https://policies.google.com/technologies/cookies\"\r\n },\r\n\r\n gtm: {\r\n displayName: \"Google Tag Manager\",\r\n category: \"analytics\",\r\n description: \"Tag management system that allows website owners to manage and deploy marketing and analytics tags without modifying the website code.\",\r\n processor: {\r\n name: \"Google Ireland Limited\",\r\n address: \"Gordon House, Barrow St, Dublin 4, Ireland\",\r\n dpo: \"https://support.google.com/policies/contact/general_privacy_form\"\r\n },\r\n purposes: [\"Tag management\", \"Analytics\", \"Marketing\"],\r\n technologies: [\"Website tags\", \"JavaScript\"],\r\n dataCollected: [\"Aggregated tag firing data\", \"Diagnostic data\"],\r\n legalBasis: \"consent\",\r\n retention: \"14 days\",\r\n transferCountries: [\"United States of America\", \"Singapore\", \"Chile\", \"Taiwan\"],\r\n privacyUrl: \"https://business.safety.google/privacy/\",\r\n cookiePolicyUrl: \"https://policies.google.com/technologies/cookies\"\r\n },\r\n\r\n facebook: {\r\n displayName: \"Facebook Pixel\",\r\n category: \"marketing\",\r\n description: \"Tracking technology by Meta that measures ad effectiveness and enables retargeting of users who have visited the website.\",\r\n processor: {\r\n name: \"Meta Platforms Ireland Ltd.\",\r\n address: \"4 Grand Canal Square, Grand Canal Harbour, Dublin 2, Ireland\",\r\n dpo: \"https://www.facebook.com/help/contact/1650115808681298\"\r\n },\r\n purposes: [\"Analytics\", \"Marketing\", \"Retargeting\", \"Advertisement\", \"Conversion tracking\"],\r\n technologies: [\"Cookies\", \"Pixel\"],\r\n dataCollected: [\"IP address\", \"Browser information\", \"Device information\", \"Pages visited\", \"Pixel ID\", \"Ads viewed\", \"Usage behaviour\", \"Referrer URL\"],\r\n legalBasis: \"consent\",\r\n retention: \"180 days\",\r\n transferCountries: [\"United States of America\", \"Singapore\", \"United Kingdom\"],\r\n privacyUrl: \"https://www.facebook.com/privacy/explanation\",\r\n cookiePolicyUrl: \"https://www.facebook.com/policies/cookies\"\r\n },\r\n\r\n clarity: {\r\n displayName: \"Microsoft Clarity\",\r\n category: \"analytics\",\r\n description: \"Behavioral analytics tool that records user sessions and generates heatmaps to help understand how visitors interact with the website.\",\r\n processor: {\r\n name: \"Microsoft Ireland Operations Ltd.\",\r\n address: \"One Microsoft Place, South County Business Park, Leopardstown, Dublin 18, Ireland\",\r\n dpo: \"https://aka.ms/privacyresponse\"\r\n },\r\n purposes: [\"Analytics\", \"Heatmaps\", \"Session recording\"],\r\n technologies: [\"Cookies\", \"JavaScript\"],\r\n dataCollected: [\"IP address\", \"Mouse movements\", \"Clicks\", \"Scrolls\", \"Browser information\", \"Device information\", \"Referrer URL\"],\r\n legalBasis: \"consent\",\r\n retention: \"13 months\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://privacy.microsoft.com/en-us/privacystatement\",\r\n cookiePolicyUrl: \"\"\r\n },\r\n\r\n hotjar: {\r\n displayName: \"Hotjar\",\r\n category: \"analytics\",\r\n description: \"User experience analytics platform providing heatmaps, session recordings, and feedback tools to understand visitor behavior.\",\r\n processor: {\r\n name: \"Hotjar Ltd.\",\r\n address: \"Dragonara Business Centre, 5th Floor, Dragonara Road, St. Julian's STJ 3141, Malta\",\r\n dpo: \"privacy@hotjar.com\"\r\n },\r\n purposes: [\"Analytics\", \"Heatmaps\", \"User feedback\", \"Session recording\"],\r\n technologies: [\"Cookies\", \"Pixel\", \"JavaScript\"],\r\n dataCollected: [\"IP address\", \"Usage data\", \"Mouse movements\", \"Click behavior\", \"Device information\", \"Browser information\"],\r\n legalBasis: \"consent\",\r\n retention: \"365 days\",\r\n transferCountries: [],\r\n privacyUrl: \"https://www.hotjar.com/legal/policies/privacy/\",\r\n cookiePolicyUrl: \"https://www.hotjar.com/legal/policies/cookie/\"\r\n },\r\n\r\n youtube: {\r\n displayName: \"YouTube\",\r\n category: \"marketing\",\r\n description: \"Video hosting service by Google. When enabled, YouTube videos embedded on the website can be played and related cookies are set.\",\r\n processor: {\r\n name: \"Google Ireland Limited\",\r\n address: \"Gordon House, Barrow St, Dublin 4, Ireland\",\r\n dpo: \"https://support.google.com/policies/contact/general_privacy_form\"\r\n },\r\n purposes: [\"Marketing\", \"Video content delivery\", \"Personalisation\"],\r\n technologies: [\"Cookies\", \"Pixel\"],\r\n dataCollected: [\"IP address\", \"Browser information\", \"Usage data\", \"Video viewing data\", \"Device information\"],\r\n legalBasis: \"consent\",\r\n retention: \"180 days\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://policies.google.com/privacy\",\r\n cookiePolicyUrl: \"https://policies.google.com/technologies/cookies\"\r\n },\r\n\r\n vimeo: {\r\n displayName: \"Vimeo\",\r\n category: \"marketing\",\r\n description: \"Video hosting and sharing platform. When enabled, Vimeo videos embedded on the website can be played.\",\r\n processor: {\r\n name: \"Vimeo, Inc.\",\r\n address: \"555 West 18th Street, New York, NY 10011, USA\",\r\n dpo: \"privacy@vimeo.com\"\r\n },\r\n purposes: [\"Marketing\", \"Video content delivery\"],\r\n technologies: [\"Cookies\", \"JavaScript\"],\r\n dataCollected: [\"IP address\", \"Browser information\", \"Video viewing data\", \"Device information\"],\r\n legalBasis: \"consent\",\r\n retention: \"2 years\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://vimeo.com/privacy\",\r\n cookiePolicyUrl: \"https://vimeo.com/cookie_policy\"\r\n },\r\n\r\n linkedin: {\r\n displayName: \"LinkedIn Insight Tag\",\r\n category: \"marketing\",\r\n description: \"Analytics and retargeting tag by LinkedIn that enables conversion tracking and retargeting of website visitors through LinkedIn Ads.\",\r\n processor: {\r\n name: \"LinkedIn Ireland Unlimited Company\",\r\n address: \"Wilton Plaza, Wilton Place, Dublin 2, Ireland\",\r\n dpo: \"privacy@linkedin.com\"\r\n },\r\n purposes: [\"Marketing\", \"Analytics\", \"Retargeting\", \"Conversion tracking\"],\r\n technologies: [\"Cookies\", \"Pixel\"],\r\n dataCollected: [\"IP address\", \"Device information\", \"Pages visited\", \"Referrer URL\", \"Professional data\"],\r\n legalBasis: \"consent\",\r\n retention: \"90 days\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://www.linkedin.com/legal/privacy-policy\",\r\n cookiePolicyUrl: \"https://www.linkedin.com/legal/cookie-policy\"\r\n },\r\n\r\n yandex: {\r\n displayName: \"Yandex Metrica\",\r\n category: \"analytics\",\r\n description: \"Web analytics service that collects and evaluates statistical data on user behavior for optimization and marketing purposes.\",\r\n processor: {\r\n name: \"Yandex LLC\",\r\n address: \"16 Lva Tolstogo St., Moscow 119021, Russia\",\r\n dpo: \"\"\r\n },\r\n purposes: [\"Analytics\", \"Optimization\"],\r\n technologies: [\"Cookies\", \"Web beacons\", \"Pixel\"],\r\n dataCollected: [\"IP address\", \"Browser information\", \"Usage data\", \"Device information\", \"Date and time of visit\", \"Geographic location\"],\r\n legalBasis: \"consent\",\r\n retention: \"As long as necessary\",\r\n transferCountries: [\"Russia\"],\r\n privacyUrl: \"https://yandex.com/legal/confidential/\",\r\n cookiePolicyUrl: \"\"\r\n },\r\n\r\n bing: {\r\n displayName: \"Bing Ads UET\",\r\n category: \"marketing\",\r\n description: \"Universal Event Tracking tag by Microsoft Bing that enables conversion tracking and audience targeting for Bing Ads campaigns.\",\r\n processor: {\r\n name: \"Microsoft Corporation\",\r\n address: \"One Microsoft Way, Redmond, WA 98052, USA\",\r\n dpo: \"https://aka.ms/privacyresponse\"\r\n },\r\n purposes: [\"Marketing\", \"Conversion tracking\", \"Audience targeting\"],\r\n technologies: [\"Cookies\", \"Pixel\"],\r\n dataCollected: [\"IP address\", \"Browser information\", \"Conversion data\", \"Device information\"],\r\n legalBasis: \"consent\",\r\n retention: \"180 days\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://privacy.microsoft.com/en-us/privacystatement\",\r\n cookiePolicyUrl: \"\"\r\n },\r\n\r\n tiktok: {\r\n displayName: \"TikTok Pixel\",\r\n category: \"marketing\",\r\n description: \"Tracking pixel by TikTok that measures ad performance and enables retargeting for TikTok advertising campaigns.\",\r\n processor: {\r\n name: \"TikTok Information Technologies UK Limited\",\r\n address: \"6th Floor, One London Wall, London EC2Y 5EB, United Kingdom\",\r\n dpo: \"privacy@tiktok.com\"\r\n },\r\n purposes: [\"Marketing\", \"Retargeting\", \"Conversion tracking\"],\r\n technologies: [\"Cookies\", \"Pixel\"],\r\n dataCollected: [\"IP address\", \"Browser information\", \"Usage data\", \"Device information\", \"Pages visited\"],\r\n legalBasis: \"consent\",\r\n retention: \"13 months\",\r\n transferCountries: [\"United States of America\", \"Singapore\"],\r\n privacyUrl: \"https://www.tiktok.com/legal/page/row/privacy-policy/en\",\r\n cookiePolicyUrl: \"https://www.tiktok.com/legal/page/row/cookie-policy/en\"\r\n },\r\n\r\n pinterest: {\r\n displayName: \"Pinterest Tag\",\r\n category: \"marketing\",\r\n description: \"Analytics and retargeting tag by Pinterest that tracks conversions and enables targeting of website visitors through Pinterest Ads.\",\r\n processor: {\r\n name: \"Pinterest Europe Ltd.\",\r\n address: \"Palmerston House, 2nd Floor, Fenian Street, Dublin 2, Ireland\",\r\n dpo: \"privacy@pinterest.com\"\r\n },\r\n purposes: [\"Marketing\", \"Retargeting\", \"Conversion tracking\"],\r\n technologies: [\"Cookies\", \"Pixel\"],\r\n dataCollected: [\"IP address\", \"Browser information\", \"Usage data\", \"Device information\"],\r\n legalBasis: \"consent\",\r\n retention: \"1 year\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://policy.pinterest.com/en/privacy-policy\",\r\n cookiePolicyUrl: \"https://policy.pinterest.com/en/cookies\"\r\n },\r\n\r\n tawkto: {\r\n displayName: \"Tawk.to\",\r\n category: \"functional\",\r\n description: \"Live chat widget that allows website visitors to communicate in real time with website support agents.\",\r\n processor: {\r\n name: \"Tawk.to, Inc.\",\r\n address: \"2880 Zanker Road Suite 203, San Jose, CA 95134, USA\",\r\n dpo: \"privacy@tawk.to\"\r\n },\r\n purposes: [\"Functional\", \"Live chat\", \"Customer support\"],\r\n technologies: [\"Cookies\", \"JavaScript\"],\r\n dataCollected: [\"IP address\", \"Browser information\", \"Chat messages\", \"Usage data\", \"Device information\"],\r\n legalBasis: \"consent\",\r\n retention: \"2 years\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://www.tawk.to/privacy-policy/\",\r\n cookiePolicyUrl: \"\"\r\n },\r\n\r\n intercom: {\r\n displayName: \"Intercom\",\r\n category: \"functional\",\r\n description: \"Customer messaging platform providing live chat, in-app messaging, and customer support tools.\",\r\n processor: {\r\n name: \"Intercom R&D Unlimited Company\",\r\n address: \"2nd Floor, Stephen Court, 18-21 St. Stephen's Green, Dublin 2, Ireland\",\r\n dpo: \"privacy@intercom.io\"\r\n },\r\n purposes: [\"Functional\", \"Customer support\", \"Marketing\"],\r\n technologies: [\"Cookies\", \"JavaScript\"],\r\n dataCollected: [\"IP address\", \"Browser information\", \"Chat messages\", \"Usage data\", \"Device information\", \"Email address\"],\r\n legalBasis: \"consent\",\r\n retention: \"2 years\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://www.intercom.com/legal/privacy\",\r\n cookiePolicyUrl: \"\"\r\n },\r\n\r\n hubspot: {\r\n displayName: \"HubSpot\",\r\n category: \"marketing\",\r\n description: \"CRM and marketing automation platform. Tracks website visitor behavior to enable lead generation and marketing automation.\",\r\n processor: {\r\n name: \"HubSpot, Inc.\",\r\n address: \"25 First Street, Cambridge, MA 02141, USA\",\r\n dpo: \"privacy@hubspot.com\"\r\n },\r\n purposes: [\"Marketing\", \"Analytics\", \"CRM\", \"Lead generation\"],\r\n technologies: [\"Cookies\", \"Pixel\", \"JavaScript\"],\r\n dataCollected: [\"IP address\", \"Browser information\", \"Form submissions\", \"Pages visited\", \"Usage data\", \"Email address\"],\r\n legalBasis: \"consent\",\r\n retention: \"13 months\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://legal.hubspot.com/privacy-policy\",\r\n cookiePolicyUrl: \"https://legal.hubspot.com/cookie-policy\"\r\n },\r\n\r\n mailchimp: {\r\n displayName: \"Mailchimp\",\r\n category: \"marketing\",\r\n description: \"Email marketing and automation platform. Tracks email campaign interactions and website activity for subscriber management.\",\r\n processor: {\r\n name: \"The Rocket Science Group LLC (Mailchimp)\",\r\n address: \"675 Ponce de Leon Ave NE, Suite 5000, Atlanta, GA 30308, USA\",\r\n dpo: \"privacy@mailchimp.com\"\r\n },\r\n purposes: [\"Marketing\", \"Email campaigns\", \"Analytics\"],\r\n technologies: [\"Cookies\", \"Pixel\", \"Web beacons\"],\r\n dataCollected: [\"IP address\", \"Email behaviour\", \"Form submissions\", \"Device information\", \"Browser information\"],\r\n legalBasis: \"consent\",\r\n retention: \"2 years\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://mailchimp.com/legal/privacy/\",\r\n cookiePolicyUrl: \"https://mailchimp.com/legal/cookies/\"\r\n },\r\n\r\n maps: {\r\n displayName: \"Google Maps\",\r\n category: \"functional\",\r\n description: \"Interactive maps service by Google embedded on the website to display locations and provide directions.\",\r\n processor: {\r\n name: \"Google Ireland Limited\",\r\n address: \"Gordon House, Barrow St, Dublin 4, Ireland\",\r\n dpo: \"https://support.google.com/policies/contact/general_privacy_form\"\r\n },\r\n purposes: [\"Functional\", \"Maps display\", \"Location services\"],\r\n technologies: [\"Cookies\", \"JavaScript\"],\r\n dataCollected: [\"IP address\", \"Location data\", \"Usage data\", \"Device information\"],\r\n legalBasis: \"consent\",\r\n retention: \"6 months\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://policies.google.com/privacy\",\r\n cookiePolicyUrl: \"https://policies.google.com/technologies/cookies\"\r\n },\r\n\r\n recaptcha: {\r\n displayName: \"Google reCAPTCHA\",\r\n category: \"functional\",\r\n description: \"Bot detection and security service by Google that protects forms and interactive elements from automated abuse.\",\r\n processor: {\r\n name: \"Google Ireland Limited\",\r\n address: \"Gordon House, Barrow St, Dublin 4, Ireland\",\r\n dpo: \"https://support.google.com/policies/contact/general_privacy_form\"\r\n },\r\n purposes: [\"Functional\", \"Security\", \"Bot detection\"],\r\n technologies: [\"Cookies\", \"JavaScript\"],\r\n dataCollected: [\"IP address\", \"Browser fingerprint\", \"Usage data\", \"Device information\", \"Mouse behaviour\"],\r\n legalBasis: \"consent\",\r\n retention: \"6 months\",\r\n transferCountries: [\"United States of America\"],\r\n privacyUrl: \"https://policies.google.com/privacy\",\r\n cookiePolicyUrl: \"https://policies.google.com/technologies/cookies\"\r\n }\r\n};\r\n", "// blakfy-cookie/src/ui/modal.js \u2014 preferences modal: Categories | Services | About\r\n\r\nimport { SERVICE_METADATA } from \"../data/service-metadata.js\";\r\n\r\nconst CATEGORIES = [\"essential\", \"analytics\", \"marketing\", \"functional\"];\r\n\r\n// \u2500\u2500 helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nconst el = (tag, props) => {\r\n const node = document.createElement(tag);\r\n if (props) {\r\n for (const k in props) {\r\n if (k === \"text\") node.textContent = props[k];\r\n else if (k === \"html\") node.innerHTML = props[k];\r\n else if (k === \"class\") node.className = props[k];\r\n else node.setAttribute(k, props[k]);\r\n }\r\n }\r\n return node;\r\n};\r\n\r\nconst safeGet = (obj, path, fallback) => {\r\n let cur = obj;\r\n const parts = path.split(\".\");\r\n for (let i = 0; i < parts.length; i++) {\r\n if (cur == null) return fallback;\r\n cur = cur[parts[i]];\r\n }\r\n return cur != null ? cur : fallback;\r\n};\r\n\r\n// \u2500\u2500 Categories tab \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nconst buildCatRow = (key, t, alwaysOn, checked) => {\r\n const c = safeGet(t, \"cat.\" + key, {});\r\n const row = el(\"div\", { class: \"blakfy-cat\" });\r\n\r\n const text = el(\"div\", { class: \"blakfy-cat-text\" });\r\n const strong = el(\"strong\", { text: c.title || key });\r\n text.appendChild(strong);\r\n const span = el(\"span\", { text: (c.desc || \"\") + (alwaysOn ? \" (\" + (c.always || \"\") + \")\" : \"\") });\r\n text.appendChild(span);\r\n row.appendChild(text);\r\n\r\n const sw = el(\"button\", { class: \"blakfy-switch\", role: \"switch\", \"aria-checked\": checked ? \"true\" : \"false\", \"data-cat\": key });\r\n if (alwaysOn) sw.disabled = true;\r\n sw.addEventListener(\"click\", () => {\r\n if (sw.disabled) return;\r\n sw.setAttribute(\"aria-checked\", sw.getAttribute(\"aria-checked\") === \"true\" ? \"false\" : \"true\");\r\n });\r\n row.appendChild(sw);\r\n return row;\r\n};\r\n\r\nconst buildCategoriesPanel = (t, current, card, onSave, onAccept) => {\r\n const panel = el(\"div\", { class: \"blakfy-tab-panel\", \"data-panel\": \"categories\", \"aria-hidden\": \"false\" });\r\n\r\n panel.appendChild(buildCatRow(\"essential\", t, true, true));\r\n panel.appendChild(buildCatRow(\"analytics\", t, false, !!current.analytics));\r\n panel.appendChild(buildCatRow(\"marketing\", t, false, !!current.marketing));\r\n panel.appendChild(buildCatRow(\"functional\", t, false, !!current.functional));\r\n\r\n const actions = el(\"div\", { class: \"blakfy-actions\" });\r\n actions.style.marginTop = \"16px\";\r\n\r\n const btnSave = el(\"button\", { class: \"blakfy-btn\", \"data-act\": \"save\", text: t.save || \"Save\" });\r\n btnSave.addEventListener(\"click\", () => {\r\n const prefs = {};\r\n for (let i = 0; i < CATEGORIES.length; i++) {\r\n const k = CATEGORIES[i];\r\n if (k === \"essential\") continue;\r\n const sw = card.querySelector('[data-cat=\"' + k + '\"]');\r\n prefs[k] = sw ? sw.getAttribute(\"aria-checked\") === \"true\" : false;\r\n }\r\n if (onSave) onSave(prefs);\r\n });\r\n actions.appendChild(btnSave);\r\n\r\n const btnAccept = el(\"button\", { class: \"blakfy-btn blakfy-btn-primary\", \"data-act\": \"accept\", text: t.acceptAll || \"Accept All\" });\r\n btnAccept.addEventListener(\"click\", () => { if (onAccept) onAccept(); });\r\n actions.appendChild(btnAccept);\r\n\r\n panel.appendChild(actions);\r\n return panel;\r\n};\r\n\r\n// \u2500\u2500 Services tab \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nconst buildServiceCard = (presetKey, meta, t) => {\r\n const s = safeGet(t, \"service\", {});\r\n\r\n const card = el(\"div\", { class: \"blakfy-service-card\" });\r\n\r\n const header = el(\"div\", { class: \"blakfy-service-card-header\" });\r\n header.appendChild(el(\"span\", { class: \"blakfy-service-name\", text: meta.displayName }));\r\n header.appendChild(el(\"span\", { class: \"blakfy-service-cat\", text: meta.category }));\r\n const toggle = el(\"span\", { class: \"blakfy-service-toggle\", text: \"\u25B8\" });\r\n header.appendChild(toggle);\r\n card.appendChild(header);\r\n\r\n const body = el(\"div\", { class: \"blakfy-service-body\", \"aria-hidden\": \"true\" });\r\n\r\n const dl = el(\"dl\", { class: \"blakfy-service-dl\" });\r\n\r\n const addRow = (label, value) => {\r\n if (!value) return;\r\n const dt = el(\"dt\", { class: \"blakfy-service-dt\", text: label });\r\n const dd = el(\"dd\", { class: \"blakfy-service-dd\", text: value });\r\n dl.appendChild(dt);\r\n dl.appendChild(dd);\r\n };\r\n\r\n addRow(s.description || \"Description\", meta.description);\r\n addRow(s.processor || \"Data Processor\", meta.processor && meta.processor.name ? meta.processor.name : \"\");\r\n addRow(s.address || \"Address\", meta.processor && meta.processor.address ? meta.processor.address : \"\");\r\n if (meta.processor && meta.processor.dpo && meta.processor.dpo.indexOf(\"http\") !== 0) {\r\n addRow(s.dpo || \"DPO Contact\", meta.processor.dpo);\r\n }\r\n addRow(s.purposes || \"Purposes\", meta.purposes && meta.purposes.length ? meta.purposes.join(\", \") : \"\");\r\n addRow(s.technologies || \"Technologies Used\", meta.technologies && meta.technologies.length ? meta.technologies.join(\", \") : \"\");\r\n addRow(s.dataCollected || \"Data Collected\", meta.dataCollected && meta.dataCollected.length ? meta.dataCollected.join(\", \") : \"\");\r\n\r\n const lbv = safeGet(t, \"service.legalBasisValues\", {});\r\n const lbLabel = lbv[meta.legalBasis] || (s.legalBasisValues && s.legalBasisValues[meta.legalBasis]) || meta.legalBasis || \"\";\r\n addRow(s.legalBasis || \"Legal Basis\", lbLabel);\r\n\r\n addRow(s.retention || \"Retention Period\", meta.retention);\r\n addRow(s.transferCountries || \"Transfer Countries\", meta.transferCountries && meta.transferCountries.length ? meta.transferCountries.join(\", \") : \"\");\r\n\r\n body.appendChild(dl);\r\n\r\n if ((meta.privacyUrl && meta.privacyUrl.length) || (meta.cookiePolicyUrl && meta.cookiePolicyUrl.length)) {\r\n const links = el(\"div\", { class: \"blakfy-service-links\" });\r\n if (meta.privacyUrl) {\r\n const a = el(\"a\", { href: meta.privacyUrl, target: \"_blank\", rel: \"noopener noreferrer\", text: s.privacyPolicy || \"Privacy Policy\" });\r\n links.appendChild(a);\r\n }\r\n if (meta.cookiePolicyUrl) {\r\n const a = el(\"a\", { href: meta.cookiePolicyUrl, target: \"_blank\", rel: \"noopener noreferrer\", text: s.cookiePolicy || \"Cookie Policy\" });\r\n links.appendChild(a);\r\n }\r\n body.appendChild(links);\r\n }\r\n\r\n card.appendChild(body);\r\n\r\n header.addEventListener(\"click\", () => {\r\n const hidden = body.getAttribute(\"aria-hidden\") === \"true\";\r\n body.setAttribute(\"aria-hidden\", hidden ? \"false\" : \"true\");\r\n toggle.textContent = hidden ? \"\u25BE\" : \"\u25B8\";\r\n });\r\n\r\n return card;\r\n};\r\n\r\nconst buildServicesPanel = (activePresets, t) => {\r\n const panel = el(\"div\", { class: \"blakfy-tab-panel\", \"data-panel\": \"services\", \"aria-hidden\": \"true\" });\r\n const list = el(\"div\", { class: \"blakfy-service-list\" });\r\n\r\n if (!activePresets || activePresets.length === 0) {\r\n const empty = el(\"p\", { class: \"blakfy-svc-empty\", text: safeGet(t, \"service.noServices\", \"No services configured.\") });\r\n list.appendChild(empty);\r\n } else {\r\n for (let i = 0; i < activePresets.length; i++) {\r\n const { key, meta } = activePresets[i];\r\n if (meta) list.appendChild(buildServiceCard(key, meta, t));\r\n }\r\n }\r\n\r\n panel.appendChild(list);\r\n return panel;\r\n};\r\n\r\n// \u2500\u2500 About tab \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nconst buildAboutPanel = (t, version) => {\r\n const panel = el(\"div\", { class: \"blakfy-tab-panel\", \"data-panel\": \"about\", \"aria-hidden\": \"true\" });\r\n const content = el(\"div\", { class: \"blakfy-about-panel\" });\r\n\r\n const brand = el(\"div\", { class: \"blakfy-about-brand\" });\r\n brand.appendChild(el(\"strong\", { text: \"Blakfy Studio\" }));\r\n content.appendChild(brand);\r\n\r\n const ab = safeGet(t, \"svcAbout\", {});\r\n\r\n if (ab.title) content.appendChild(el(\"p\", { text: \"\" })).textContent = ab.title ? \"\" : \"\";\r\n\r\n const desc = el(\"p\", { text: ab.description || \"This website uses Blakfy Cookie Management Platform (CMP) to manage your consent preferences.\" });\r\n content.appendChild(desc);\r\n\r\n const meta = el(\"p\", { class: \"blakfy-about-meta\" });\r\n meta.textContent = (ab.version || \"Version\") + \": \" + (version || \"\");\r\n content.appendChild(meta);\r\n\r\n const a = el(\"a\", { href: \"https://blakfy.com\", target: \"_blank\", rel: \"noopener noreferrer\", text: ab.learnMore || \"Learn more at blakfy.com\" });\r\n content.appendChild(a);\r\n\r\n panel.appendChild(content);\r\n return panel;\r\n};\r\n\r\n// \u2500\u2500 Tab switching \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nconst initTabs = (card) => {\r\n const btns = card.querySelectorAll(\".blakfy-tab-btn\");\r\n const panels = card.querySelectorAll(\".blakfy-tab-panel\");\r\n\r\n const switchTab = (target) => {\r\n for (let i = 0; i < btns.length; i++) {\r\n const active = btns[i].getAttribute(\"data-tab\") === target;\r\n btns[i].setAttribute(\"aria-selected\", active ? \"true\" : \"false\");\r\n if (active) btns[i].classList.add(\"blakfy-tab-btn--active\");\r\n else btns[i].classList.remove(\"blakfy-tab-btn--active\");\r\n }\r\n for (let i = 0; i < panels.length; i++) {\r\n panels[i].setAttribute(\"aria-hidden\", panels[i].getAttribute(\"data-panel\") === target ? \"false\" : \"true\");\r\n }\r\n };\r\n\r\n for (let i = 0; i < btns.length; i++) {\r\n btns[i].addEventListener(\"click\", function () { switchTab(this.getAttribute(\"data-tab\")); });\r\n }\r\n};\r\n\r\n// \u2500\u2500 Public factory \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n\r\nexport const createModal = ({ t, isRTL, accent, theme, currentState, presets, version, onSave, onAccept, onClose }) => {\r\n const current = currentState || { analytics: false, marketing: false, functional: false };\r\n\r\n const card = el(\"div\", { class: \"blakfy-card\", role: \"dialog\", \"aria-labelledby\": \"blakfy-mtitle\" });\r\n card.setAttribute(\"dir\", isRTL ? \"rtl\" : \"ltr\");\r\n card.style.cssText = \"--blakfy-accent:\" + accent + \";position:relative\";\r\n if (theme && theme !== \"light\") card.setAttribute(\"data-blakfy-theme\", theme);\r\n\r\n const closeBtn = el(\"button\", { class: \"blakfy-close\", \"aria-label\": t.close || \"Close\", \"data-act\": \"close\", text: \"\u00D7\" });\r\n closeBtn.addEventListener(\"click\", () => { if (onClose) onClose(); });\r\n card.appendChild(closeBtn);\r\n\r\n const h2 = el(\"h2\", { id: \"blakfy-mtitle\", text: t.title || \"Cookie Preferences\" });\r\n card.appendChild(h2);\r\n\r\n // Tab bar\r\n const tabs = safeGet(t, \"tabs\", { categories: \"Categories\", services: \"Services\", about: \"About\" });\r\n const tabBar = el(\"nav\", { class: \"blakfy-tabs\", role: \"tablist\" });\r\n\r\n const makeTabBtn = (id, label, active) => {\r\n const btn = el(\"button\", { class: \"blakfy-tab-btn\" + (active ? \" blakfy-tab-btn--active\" : \"\"), role: \"tab\", \"data-tab\": id, \"aria-selected\": active ? \"true\" : \"false\", text: label });\r\n return btn;\r\n };\r\n\r\n tabBar.appendChild(makeTabBtn(\"categories\", tabs.categories || \"Categories\", true));\r\n tabBar.appendChild(makeTabBtn(\"services\", tabs.services || \"Services\", false));\r\n tabBar.appendChild(makeTabBtn(\"about\", tabs.about || \"About\", false));\r\n card.appendChild(tabBar);\r\n\r\n // Enrich active presets with metadata\r\n const enriched = [];\r\n if (presets && presets.length) {\r\n for (let i = 0; i < presets.length; i++) {\r\n const key = typeof presets[i] === \"string\" ? presets[i] : presets[i].key;\r\n const meta = SERVICE_METADATA[key] || (typeof presets[i] === \"object\" ? presets[i].meta : null);\r\n if (meta) enriched.push({ key, meta });\r\n }\r\n }\r\n\r\n // Panels\r\n card.appendChild(buildCategoriesPanel(t, current, card, onSave, onAccept));\r\n card.appendChild(buildServicesPanel(enriched, t));\r\n card.appendChild(buildAboutPanel(t, version));\r\n\r\n // Badge slot\r\n card.appendChild(el(\"div\", { class: \"blakfy-badge-slot\" }));\r\n\r\n // Wire up tab switching after DOM is built\r\n initTabs(card);\r\n\r\n return card;\r\n};\r\n", "// blakfy-cookie/src/ui/badge.js \u2014 \"Powered by Blakfy Studio\" badge with 3-layer anti-tampering protection\r\n\r\nconst BADGE_HREF = \"https://blakfy.com\";\r\nconst BADGE_TEXT_PREFIX = \"Powered by \";\r\nconst BADGE_BRAND = \"Blakfy Studio\";\r\nconst BADGE_CLASS = \"blakfy-badge\";\r\nconst PROTECT_STYLE_ID = \"blakfy-badge-protect\";\r\n\r\nconst PROTECT_CSS = \".blakfy-badge{display:flex !important;visibility:visible !important;opacity:0.6 !important;pointer-events:auto !important;}.blakfy-badge:hover{opacity:1 !important;}.blakfy-badge[hidden]{display:flex !important;}\";\r\n\r\nconst mountedBadges = new Set();\r\nconst slotMap = new WeakMap();\r\nlet observer = null;\r\nlet intervalId = null;\r\nlet rootRef = null;\r\n\r\nexport const buildBadge = () => {\r\n const a = document.createElement(\"a\");\r\n a.href = BADGE_HREF;\r\n a.target = \"_blank\";\r\n a.rel = \"noopener noreferrer\";\r\n a.className = BADGE_CLASS;\r\n a.setAttribute(\"aria-label\", \"Powered by Blakfy Studio \u2014 opens in new tab\");\r\n\r\n const prefix = document.createTextNode(BADGE_TEXT_PREFIX);\r\n a.appendChild(prefix);\r\n\r\n const strong = document.createElement(\"strong\");\r\n strong.textContent = BADGE_BRAND;\r\n a.appendChild(strong);\r\n\r\n let cssText = \"display: flex !important; align-items: center; gap: 4px;\"\r\n + \"position: absolute; bottom: 8px; right: 12px;\"\r\n + \"font-size: 11px; font-family: system-ui, -apple-system, sans-serif;\"\r\n + \"color: inherit; text-decoration: none;\"\r\n + \"opacity: 0.6 !important; transition: opacity 0.2s;\"\r\n + \"pointer-events: auto !important;\"\r\n + \"z-index: 1;\";\r\n a.style.cssText = cssText;\r\n\r\n return a;\r\n};\r\n\r\nconst applyRTL = (badge) => {\r\n const rtlAncestor = badge.closest && badge.closest(\"[dir=rtl]\");\r\n if (rtlAncestor) {\r\n badge.style.right = \"auto\";\r\n badge.style.left = \"12px\";\r\n }\r\n};\r\n\r\nconst injectProtectStyle = () => {\r\n if (typeof document === \"undefined\") return;\r\n if (document.getElementById(PROTECT_STYLE_ID)) return;\r\n const style = document.createElement(\"style\");\r\n style.id = PROTECT_STYLE_ID;\r\n style.textContent = PROTECT_CSS;\r\n (document.head || document.documentElement).appendChild(style);\r\n};\r\n\r\nconst replaceBadge = (oldBadge) => {\r\n const slot = slotMap.get(oldBadge);\r\n const fresh = buildBadge();\r\n if (oldBadge.parentNode) {\r\n oldBadge.parentNode.replaceChild(fresh, oldBadge);\r\n } else if (slot && slot.isConnected) {\r\n slot.appendChild(fresh);\r\n } else if (rootRef) {\r\n rootRef.appendChild(fresh);\r\n }\r\n mountedBadges.delete(oldBadge);\r\n mountedBadges.add(fresh);\r\n if (slot) slotMap.set(fresh, slot);\r\n applyRTL(fresh);\r\n return fresh;\r\n};\r\n\r\nconst reAttachBadge = (badge) => {\r\n const slot = slotMap.get(badge);\r\n if (badge.isConnected) return badge;\r\n const fresh = buildBadge();\r\n if (slot && slot.isConnected) {\r\n slot.appendChild(fresh);\r\n } else if (rootRef) {\r\n rootRef.appendChild(fresh);\r\n } else {\r\n return badge;\r\n }\r\n mountedBadges.delete(badge);\r\n mountedBadges.add(fresh);\r\n if (slot) slotMap.set(fresh, slot);\r\n applyRTL(fresh);\r\n return fresh;\r\n};\r\n\r\nexport const mountBadges = (rootEl) => {\r\n if (!rootEl) return [];\r\n rootRef = rootEl;\r\n const slots = rootEl.querySelectorAll(\".blakfy-badge-slot\");\r\n const result = [];\r\n for (let i = 0; i < slots.length; i++) {\r\n const slot = slots[i];\r\n const existing = slot.querySelector(\".\" + BADGE_CLASS);\r\n if (existing) {\r\n mountedBadges.add(existing);\r\n slotMap.set(existing, slot);\r\n applyRTL(existing);\r\n result.push(existing);\r\n continue;\r\n }\r\n const badge = buildBadge();\r\n while (slot.firstChild) slot.removeChild(slot.firstChild);\r\n slot.appendChild(badge);\r\n mountedBadges.add(badge);\r\n slotMap.set(badge, slot);\r\n applyRTL(badge);\r\n result.push(badge);\r\n }\r\n return result;\r\n};\r\n\r\nconst verifyBadges = () => {\r\n if (typeof window === \"undefined\" || !window.getComputedStyle) return;\r\n const snapshot = Array.from(mountedBadges);\r\n for (let i = 0; i < snapshot.length; i++) {\r\n const badge = snapshot[i];\r\n if (!badge.isConnected) {\r\n reAttachBadge(badge);\r\n continue;\r\n }\r\n const cs = window.getComputedStyle(badge);\r\n const opacity = parseFloat(cs.opacity);\r\n if (\r\n (isFinite(opacity) && opacity < 0.5) ||\r\n cs.display === \"none\" ||\r\n cs.visibility === \"hidden\"\r\n ) {\r\n replaceBadge(badge);\r\n }\r\n }\r\n if (!document.getElementById(PROTECT_STYLE_ID)) {\r\n injectProtectStyle();\r\n }\r\n};\r\n\r\nconst handleMutations = (records) => {\r\n let needsStyleReinject = false;\r\n const removedBadges = [];\r\n const mutatedBadges = [];\r\n\r\n for (let i = 0; i < records.length; i++) {\r\n const rec = records[i];\r\n if (rec.type === \"childList\") {\r\n for (let j = 0; j < rec.removedNodes.length; j++) {\r\n const node = rec.removedNodes[j];\r\n if (!node || node.nodeType !== 1) continue;\r\n if (node.id === PROTECT_STYLE_ID) {\r\n needsStyleReinject = true;\r\n }\r\n if (mountedBadges.has(node)) {\r\n removedBadges.push(node);\r\n } else if (node.querySelector) {\r\n const inner = node.querySelector(\".\" + BADGE_CLASS);\r\n if (inner && mountedBadges.has(inner)) {\r\n removedBadges.push(inner);\r\n }\r\n }\r\n }\r\n } else if (rec.type === \"attributes\") {\r\n const target = rec.target;\r\n if (target && mountedBadges.has(target)) {\r\n mutatedBadges.push(target);\r\n }\r\n }\r\n }\r\n\r\n if (needsStyleReinject) {\r\n setTimeout(injectProtectStyle, 0);\r\n }\r\n\r\n if (removedBadges.length) {\r\n setTimeout(() => {\r\n for (let i = 0; i < removedBadges.length; i++) {\r\n reAttachBadge(removedBadges[i]);\r\n }\r\n }, 50);\r\n }\r\n\r\n for (let i = 0; i < mutatedBadges.length; i++) {\r\n replaceBadge(mutatedBadges[i]);\r\n }\r\n};\r\n\r\nexport const installAntiTamper = (rootEl) => {\r\n if (!rootEl || typeof MutationObserver === \"undefined\") return;\r\n rootRef = rootEl;\r\n\r\n injectProtectStyle();\r\n\r\n if (observer) observer.disconnect();\r\n observer = new MutationObserver(handleMutations);\r\n observer.observe(rootEl, {\r\n childList: true,\r\n attributes: true,\r\n subtree: true,\r\n attributeFilter: [\"style\", \"class\", \"hidden\"]\r\n });\r\n\r\n if (document.head) {\r\n observer.observe(document.head, { childList: true, subtree: false });\r\n }\r\n\r\n if (intervalId) clearInterval(intervalId);\r\n intervalId = setInterval(verifyBadges, 2000);\r\n};\r\n\r\nexport const disposeAntiTamper = () => {\r\n if (observer) {\r\n observer.disconnect();\r\n observer = null;\r\n }\r\n if (intervalId) {\r\n clearInterval(intervalId);\r\n intervalId = null;\r\n }\r\n mountedBadges.clear();\r\n rootRef = null;\r\n};\r\n", "// blakfy-cookie/src/ui/focus-trap.js \u2014 Tab/Shift+Tab cycling and Escape handling for any root element\r\n\r\nconst FOCUSABLE = 'button:not([disabled]),a[href],input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex=\"-1\"])';\r\n\r\nlet activeRoot = null;\r\nlet activeHandler = null;\r\nlet activeEscape = null;\r\n\r\nexport const installFocusTrap = (rootEl, options) => {\r\n removeFocusTrap();\r\n if (!rootEl) return;\r\n activeRoot = rootEl;\r\n activeEscape = options && options.onEscape;\r\n\r\n activeHandler = (e) => {\r\n if (!activeRoot) return;\r\n if (e.key === \"Escape\") {\r\n if (typeof activeEscape === \"function\") {\r\n e.preventDefault();\r\n activeEscape();\r\n }\r\n return;\r\n }\r\n if (e.key !== \"Tab\") return;\r\n const nodes = activeRoot.querySelectorAll(FOCUSABLE);\r\n if (!nodes.length) return;\r\n const first = nodes[0];\r\n const last = nodes[nodes.length - 1];\r\n if (e.shiftKey && document.activeElement === first) {\r\n e.preventDefault();\r\n last.focus();\r\n } else if (!e.shiftKey && document.activeElement === last) {\r\n e.preventDefault();\r\n first.focus();\r\n }\r\n };\r\n\r\n document.addEventListener(\"keydown\", activeHandler);\r\n\r\n const firstFocusable = rootEl.querySelector(FOCUSABLE);\r\n if (firstFocusable) firstFocusable.focus();\r\n};\r\n\r\nexport const removeFocusTrap = () => {\r\n if (activeHandler) {\r\n document.removeEventListener(\"keydown\", activeHandler);\r\n }\r\n activeRoot = null;\r\n activeHandler = null;\r\n activeEscape = null;\r\n};\r\n", "// blakfy-cookie/src/ui/status-bar.js \u2014 central status bar from status.json (XSS-safe via textContent)\r\n\r\nimport { RTL_LOCALES } from \"../i18n/detect.js\";\r\n\r\nconst STATUS_COLORS = {\r\n info: \"#1a56db\",\r\n warning: \"#b45309\",\r\n error: \"#dc2626\",\r\n success: \"#057a55\",\r\n maintenance: \"#6d28d9\",\r\n};\r\n\r\nlet statusRoot = null;\r\nlet statusData = null;\r\n\r\nconst resolveStatusMessage = (data, currentLocale, mainLang) => {\r\n const msgs = data && data.message;\r\n if (!msgs) return null;\r\n return msgs[currentLocale] ||\r\n msgs[mainLang] ||\r\n msgs[\"en\"] ||\r\n msgs[Object.keys(msgs)[0]] ||\r\n null;\r\n};\r\n\r\nconst dismissKey = (data) => \"blakfy_status_\" + ((data && data._id) || \"default\");\r\n\r\nexport const dismissStatus = () => {\r\n if (!statusRoot) return;\r\n try { sessionStorage.setItem(dismissKey(statusData), \"1\"); } catch (e) { /* ignore */ }\r\n if (statusRoot.parentNode) statusRoot.parentNode.removeChild(statusRoot);\r\n statusRoot = null;\r\n statusData = null;\r\n};\r\n\r\nexport const renderStatus = ({ data, currentLocale, mainLang }) => {\r\n const msg = resolveStatusMessage(data, currentLocale, mainLang);\r\n if (!msg) return;\r\n\r\n try {\r\n if (sessionStorage.getItem(dismissKey(data)) === \"1\") return;\r\n } catch (e) { /* ignore */ }\r\n\r\n const rtl = RTL_LOCALES.indexOf(currentLocale) > -1;\r\n const bg = STATUS_COLORS[data.type] || STATUS_COLORS.info;\r\n\r\n if (statusRoot && statusRoot.parentNode) {\r\n statusRoot.parentNode.removeChild(statusRoot);\r\n }\r\n\r\n const root = document.createElement(\"div\");\r\n root.className = \"blakfy-status\";\r\n root.setAttribute(\"role\", \"status\");\r\n root.setAttribute(\"dir\", rtl ? \"rtl\" : \"ltr\");\r\n root.style.cssText = \"background:\" + bg + \";color:#fff\";\r\n\r\n const span = document.createElement(\"span\");\r\n span.className = \"blakfy-status-msg\";\r\n span.textContent = msg;\r\n root.appendChild(span);\r\n\r\n const btn = document.createElement(\"button\");\r\n btn.className = \"blakfy-status-dismiss\";\r\n btn.setAttribute(\"aria-label\", \"close\");\r\n btn.textContent = \"\u2715\";\r\n btn.addEventListener(\"click\", dismissStatus);\r\n root.appendChild(btn);\r\n\r\n document.body.appendChild(root);\r\n statusRoot = root;\r\n statusData = data;\r\n};\r\n\r\nexport const fetchStatus = (url) => {\r\n if (!url) return Promise.resolve(null);\r\n return fetch(url + (url.indexOf(\"?\") > -1 ? \"&\" : \"?\") + \"_=\" + Date.now(), { cache: \"no-store\" })\r\n .then((r) => r.json())\r\n .then((data) => {\r\n if (!data || !data.active) return null;\r\n if (data.expires && new Date(data.expires) < new Date()) return null;\r\n data._id = (data.expires || \"\") + (data.type || \"\");\r\n return data;\r\n })\r\n .catch(() => null);\r\n};\r\n", "// blakfy-cookie/src/gating/script-unblocker.js \u2014 activates blocked <script type=\"text/plain\"> tags by category\r\n\r\nconst SKIP_ATTRS = { type: 1 };\r\n\r\nconst isSkippedAttr = (name) => {\r\n if (SKIP_ATTRS[name]) return true;\r\n if (name.indexOf(\"data-blakfy-\") === 0) return true;\r\n return false;\r\n};\r\n\r\nexport const unblockScripts = (category) => {\r\n if (typeof document === \"undefined\" || !category) return 0;\r\n const sel = 'script[type=\"text/plain\"][data-blakfy-category=\"' + category + '\"]:not([data-blakfy-unblocked=\"true\"])';\r\n const nodes = document.querySelectorAll(sel);\r\n let count = 0;\r\n\r\n for (let i = 0; i < nodes.length; i++) {\r\n const orig = nodes[i];\r\n const fresh = document.createElement(\"script\");\r\n\r\n const attrs = orig.attributes;\r\n for (let j = 0; j < attrs.length; j++) {\r\n const a = attrs[j];\r\n if (isSkippedAttr(a.name)) continue;\r\n try { fresh.setAttribute(a.name, a.value); } catch (e) { /* ignore */ }\r\n }\r\n\r\n const blakfySrc = orig.getAttribute(\"data-blakfy-src\");\r\n if (blakfySrc) {\r\n fresh.src = blakfySrc;\r\n } else {\r\n fresh.text = orig.textContent || \"\";\r\n }\r\n\r\n orig.setAttribute(\"data-blakfy-unblocked\", \"true\");\r\n\r\n if (orig.parentNode) {\r\n orig.parentNode.replaceChild(fresh, orig);\r\n count++;\r\n }\r\n }\r\n\r\n return count;\r\n};\r\n", "// blakfy-cookie/src/gating/placeholder.js \u2014 standalone consent-required iframe placeholder UI\r\n\r\nconst fmt = (tpl, vars) => {\r\n if (!tpl) return \"\";\r\n return tpl.replace(/\\{(\\w+)\\}/g, (_, k) => (vars && vars[k] != null ? vars[k] : \"{\" + k + \"}\"));\r\n};\r\n\r\nexport const createPlaceholder = ({ category, srcUrl, t, onAccept }) => {\r\n const ph = (t && t.placeholder) || {};\r\n const titleText = ph.title || \"Content blocked\";\r\n const descText = fmt(ph.desc || \"Allow {category} cookies to view this content.\", { category: category || \"\" });\r\n const ctaText = ph.cta || \"Allow\";\r\n\r\n const wrap = document.createElement(\"div\");\r\n wrap.className = \"blakfy-placeholder\";\r\n wrap.setAttribute(\"role\", \"region\");\r\n wrap.setAttribute(\"aria-label\", titleText);\r\n wrap.style.cssText = [\r\n \"box-sizing:border-box\",\r\n \"display:flex\",\r\n \"flex-direction:column\",\r\n \"align-items:center\",\r\n \"justify-content:center\",\r\n \"gap:12px\",\r\n \"padding:24px\",\r\n \"min-height:200px\",\r\n \"width:100%\",\r\n \"border:1px solid #d0d7de\",\r\n \"border-radius:12px\",\r\n \"background:#f6f8fa\",\r\n \"color:#1f2328\",\r\n \"font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif\",\r\n \"font-size:14px\",\r\n \"line-height:1.5\",\r\n \"text-align:center\"\r\n ].join(\";\");\r\n\r\n const icon = document.createElement(\"div\");\r\n icon.setAttribute(\"aria-hidden\", \"true\");\r\n icon.style.cssText = \"font-size:28px;line-height:1\";\r\n icon.textContent = \"\uD83D\uDD12\";\r\n wrap.appendChild(icon);\r\n\r\n const title = document.createElement(\"div\");\r\n title.style.cssText = \"font-weight:600;font-size:16px;color:#1f2328\";\r\n title.textContent = titleText;\r\n wrap.appendChild(title);\r\n\r\n const desc = document.createElement(\"div\");\r\n desc.style.cssText = \"max-width:420px;color:#57606a\";\r\n desc.textContent = descText;\r\n wrap.appendChild(desc);\r\n\r\n if (srcUrl) {\r\n const host = document.createElement(\"div\");\r\n host.style.cssText = \"font-size:12px;color:#8c959f;word-break:break-all\";\r\n try {\r\n const u = new URL(srcUrl);\r\n host.textContent = u.hostname;\r\n } catch (e) {\r\n host.textContent = srcUrl;\r\n }\r\n wrap.appendChild(host);\r\n }\r\n\r\n const cta = document.createElement(\"button\");\r\n cta.type = \"button\";\r\n cta.className = \"blakfy-placeholder-cta\";\r\n cta.textContent = ctaText;\r\n cta.style.cssText = [\r\n \"appearance:none\",\r\n \"border:0\",\r\n \"border-radius:8px\",\r\n \"padding:10px 18px\",\r\n \"background:#1f6feb\",\r\n \"color:#ffffff\",\r\n \"font-weight:600\",\r\n \"font-size:14px\",\r\n \"cursor:pointer\",\r\n \"margin-top:4px\"\r\n ].join(\";\");\r\n cta.addEventListener(\"click\", () => {\r\n if (typeof onAccept === \"function\") {\r\n try { onAccept(category); } catch (e) { /* swallow */ }\r\n }\r\n });\r\n wrap.appendChild(cta);\r\n\r\n return wrap;\r\n};\r\n", "// blakfy-cookie/src/gating/iframe-unblocker.js \u2014 activates blocked iframes and installs consent placeholders\r\n\r\nimport { createPlaceholder } from \"./placeholder.js\";\r\n\r\nexport const unblockIframes = (category) => {\r\n if (typeof document === \"undefined\" || !category) return 0;\r\n const sel = 'iframe[data-blakfy-src][data-blakfy-category=\"' + category + '\"]:not([data-blakfy-unblocked=\"true\"])';\r\n const nodes = document.querySelectorAll(sel);\r\n let count = 0;\r\n\r\n for (let i = 0; i < nodes.length; i++) {\r\n const ifr = nodes[i];\r\n const src = ifr.getAttribute(\"data-blakfy-src\");\r\n if (!src) continue;\r\n\r\n const phId = ifr.getAttribute(\"data-blakfy-placeholder-id\");\r\n if (phId) {\r\n const ph = document.getElementById(phId);\r\n if (ph && ph.parentNode) ph.parentNode.removeChild(ph);\r\n ifr.removeAttribute(\"data-blakfy-placeholder-id\");\r\n }\r\n\r\n ifr.src = src;\r\n ifr.style.display = \"\";\r\n ifr.setAttribute(\"data-blakfy-unblocked\", \"true\");\r\n count++;\r\n }\r\n\r\n return count;\r\n};\r\n\r\nexport const installPlaceholders = (t, onAccept) => {\r\n if (typeof document === \"undefined\") return 0;\r\n const sel = 'iframe[data-blakfy-src][data-blakfy-category][data-blakfy-placeholder=\"auto\"]:not([data-blakfy-unblocked=\"true\"]):not([data-blakfy-placeholder-installed=\"true\"])';\r\n const nodes = document.querySelectorAll(sel);\r\n let count = 0;\r\n\r\n for (let i = 0; i < nodes.length; i++) {\r\n const ifr = nodes[i];\r\n const category = ifr.getAttribute(\"data-blakfy-category\");\r\n const srcUrl = ifr.getAttribute(\"data-blakfy-src\") || \"\";\r\n\r\n const ph = createPlaceholder({\r\n category: category,\r\n srcUrl: srcUrl,\r\n t: t,\r\n onAccept: onAccept\r\n });\r\n\r\n const phId = \"blakfy-ph-\" + Math.random().toString(36).slice(2, 10);\r\n ph.id = phId;\r\n ifr.setAttribute(\"data-blakfy-placeholder-id\", phId);\r\n ifr.setAttribute(\"data-blakfy-placeholder-installed\", \"true\");\r\n ifr.style.display = \"none\";\r\n\r\n if (ifr.parentNode) {\r\n ifr.parentNode.insertBefore(ph, ifr);\r\n count++;\r\n }\r\n }\r\n\r\n return count;\r\n};\r\n", "// blakfy-cookie/src/gating/observer.js \u2014 MutationObserver that unblocks new tagged scripts/iframes when consent allows\r\n\r\nlet activeObserver = null;\r\n\r\nconst isBlockedScript = (node) => {\r\n return node && node.nodeType === 1 && node.tagName === \"SCRIPT\"\r\n && node.getAttribute && node.getAttribute(\"type\") === \"text/plain\"\r\n && node.getAttribute(\"data-blakfy-category\");\r\n};\r\n\r\nconst isBlockedIframe = (node) => {\r\n return node && node.nodeType === 1 && node.tagName === \"IFRAME\"\r\n && node.getAttribute && node.getAttribute(\"data-blakfy-src\")\r\n && node.getAttribute(\"data-blakfy-category\");\r\n};\r\n\r\nconst collectCategoriesFromNode = (node, set) => {\r\n if (!node || node.nodeType !== 1) return;\r\n if (isBlockedScript(node) || isBlockedIframe(node)) {\r\n set[node.getAttribute(\"data-blakfy-category\")] = 1;\r\n }\r\n if (node.querySelectorAll) {\r\n const inner = node.querySelectorAll('script[type=\"text/plain\"][data-blakfy-category], iframe[data-blakfy-src][data-blakfy-category]');\r\n for (let i = 0; i < inner.length; i++) {\r\n set[inner[i].getAttribute(\"data-blakfy-category\")] = 1;\r\n }\r\n }\r\n};\r\n\r\nexport const startObserver = ({ getConsent, onScan }) => {\r\n if (typeof document === \"undefined\" || typeof MutationObserver === \"undefined\") return null;\r\n if (activeObserver) stopObserver();\r\n\r\n const obs = new MutationObserver((mutations) => {\r\n const seen = Object.create(null);\r\n for (let i = 0; i < mutations.length; i++) {\r\n const m = mutations[i];\r\n if (m.type !== \"childList\") continue;\r\n const added = m.addedNodes;\r\n for (let j = 0; j < added.length; j++) {\r\n collectCategoriesFromNode(added[j], seen);\r\n }\r\n }\r\n for (const cat in seen) {\r\n if (typeof getConsent === \"function\" && getConsent(cat)) {\r\n if (typeof onScan === \"function\") {\r\n try { onScan(cat); } catch (e) { /* swallow */ }\r\n }\r\n }\r\n }\r\n });\r\n\r\n obs.observe(document.body || document.documentElement, { childList: true, subtree: true });\r\n activeObserver = obs;\r\n return obs;\r\n};\r\n\r\nexport const stopObserver = () => {\r\n if (activeObserver) {\r\n try { activeObserver.disconnect(); } catch (e) { /* ignore */ }\r\n activeObserver = null;\r\n }\r\n};\r\n\r\nexport const scanAll = ({ getConsent, categories }) => {\r\n if (typeof document === \"undefined\") return [];\r\n const list = Array.isArray(categories) && categories.length\r\n ? categories\r\n : [\"essential\", \"analytics\", \"marketing\", \"functional\", \"recording\"];\r\n const granted = [];\r\n for (let i = 0; i < list.length; i++) {\r\n const cat = list[i];\r\n if (typeof getConsent === \"function\" && getConsent(cat)) {\r\n granted.push(cat);\r\n }\r\n }\r\n return granted;\r\n};\r\n", "// blakfy-cookie/src/gating/cleaner.js \u2014 registry-driven cookie + localStorage cleanup per category\r\n\r\nconst rules = new Map();\r\n\r\nconst ensure = (category) => {\r\n if (!rules.has(category)) rules.set(category, []);\r\n return rules.get(category);\r\n};\r\n\r\nexport const registerCleanup = ({ category, cookies, storage }) => {\r\n if (!category) return;\r\n const list = ensure(category);\r\n list.push({\r\n cookies: Array.isArray(cookies) ? cookies.slice() : [],\r\n storage: Array.isArray(storage) ? storage.slice() : []\r\n });\r\n};\r\n\r\nconst getRootDomain = (host) => {\r\n if (!host) return \"\";\r\n const parts = host.split(\".\");\r\n if (parts.length <= 2) return host;\r\n return parts.slice(-2).join(\".\");\r\n};\r\n\r\nconst expireCookie = (name) => {\r\n if (typeof document === \"undefined\") return;\r\n const host = (typeof location !== \"undefined\" && location.hostname) || \"\";\r\n const root = getRootDomain(host);\r\n const past = \"Thu, 01 Jan 1970 00:00:00 GMT\";\r\n\r\n try { document.cookie = name + \"=; expires=\" + past + \"; path=/\"; } catch (e) {}\r\n if (host) {\r\n try { document.cookie = name + \"=; expires=\" + past + \"; path=/; domain=\" + host; } catch (e) {}\r\n try { document.cookie = name + \"=; expires=\" + past + \"; path=/; domain=.\" + host; } catch (e) {}\r\n }\r\n if (root && root !== host) {\r\n try { document.cookie = name + \"=; expires=\" + past + \"; path=/; domain=\" + root; } catch (e) {}\r\n try { document.cookie = name + \"=; expires=\" + past + \"; path=/; domain=.\" + root; } catch (e) {}\r\n }\r\n};\r\n\r\nconst readCookieNames = () => {\r\n if (typeof document === \"undefined\" || !document.cookie) return [];\r\n const out = [];\r\n const parts = document.cookie.split(\";\");\r\n for (let i = 0; i < parts.length; i++) {\r\n const eq = parts[i].indexOf(\"=\");\r\n const name = (eq === -1 ? parts[i] : parts[i].slice(0, eq)).trim();\r\n if (name) out.push(name);\r\n }\r\n return out;\r\n};\r\n\r\nexport const runCleanup = (category) => {\r\n const list = rules.get(category);\r\n if (!list || !list.length) return { cookies: 0, storage: 0 };\r\n\r\n const allNames = readCookieNames();\r\n let cookieCount = 0;\r\n let storageCount = 0;\r\n\r\n for (let i = 0; i < list.length; i++) {\r\n const rule = list[i];\r\n const cookieMatchers = rule.cookies || [];\r\n\r\n for (let m = 0; m < cookieMatchers.length; m++) {\r\n const matcher = cookieMatchers[m];\r\n if (matcher instanceof RegExp) {\r\n for (let n = 0; n < allNames.length; n++) {\r\n if (matcher.test(allNames[n])) {\r\n expireCookie(allNames[n]);\r\n cookieCount++;\r\n }\r\n }\r\n } else if (typeof matcher === \"string\") {\r\n expireCookie(matcher);\r\n cookieCount++;\r\n }\r\n }\r\n\r\n const storageKeys = rule.storage || [];\r\n for (let k = 0; k < storageKeys.length; k++) {\r\n try {\r\n if (typeof localStorage !== \"undefined\") {\r\n localStorage.removeItem(storageKeys[k]);\r\n storageCount++;\r\n }\r\n } catch (e) { /* ignore */ }\r\n }\r\n }\r\n\r\n return { cookies: cookieCount, storage: storageCount };\r\n};\r\n\r\nexport const clearAllRules = () => {\r\n rules.clear();\r\n};\r\n", "// blakfy-cookie/src/presets/google-analytics.js \u2014 GA4 preset (analytics category)\r\n\r\nexport default {\r\n name: \"Google Analytics 4\",\r\n category: \"analytics\",\r\n cookies: [/^_ga/, \"_gid\", \"_gat\", /^_ga_/],\r\n storage: [],\r\n scriptHosts: [\"www.googletagmanager.com\", \"google-analytics.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/google-tag-manager.js \u2014 GTM preset (analytics category)\r\n\r\nexport default {\r\n name: \"Google Tag Manager\",\r\n category: \"analytics\",\r\n cookies: [\"_gtm\", /^_dc_gtm/],\r\n storage: [],\r\n scriptHosts: [\"www.googletagmanager.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/google-maps.js \u2014 Google Maps preset (functional category)\r\n\r\nexport default {\r\n name: \"Google Maps\",\r\n category: \"functional\",\r\n cookies: [],\r\n storage: [],\r\n scriptHosts: [\"maps.googleapis.com\", \"maps.gstatic.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/google-recaptcha.js \u2014 Google reCAPTCHA preset (functional category)\r\n\r\nexport default {\r\n name: \"Google reCAPTCHA\",\r\n category: \"functional\",\r\n cookies: [\"_GRECAPTCHA\"],\r\n storage: [],\r\n scriptHosts: [\"www.google.com/recaptcha\", \"www.gstatic.com/recaptcha\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/facebook-pixel.js \u2014 Meta/Facebook Pixel preset (marketing category)\r\n\r\nexport default {\r\n name: \"Facebook Pixel\",\r\n category: \"marketing\",\r\n cookies: [\"_fbp\", \"_fbc\"],\r\n storage: [],\r\n scriptHosts: [\"connect.facebook.net\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/youtube.js \u2014 YouTube embed preset (marketing category)\r\n\r\nexport default {\r\n name: \"YouTube\",\r\n category: \"marketing\",\r\n cookies: [],\r\n storage: [],\r\n scriptHosts: [\"www.youtube.com\", \"youtube-nocookie.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/vimeo.js \u2014 Vimeo player preset (marketing category)\r\n\r\nexport default {\r\n name: \"Vimeo\",\r\n category: \"marketing\",\r\n cookies: [],\r\n storage: [],\r\n scriptHosts: [\"player.vimeo.com\", \"vimeo.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/hotjar.js \u2014 Hotjar analytics preset (analytics category)\r\n\r\nexport default {\r\n name: \"Hotjar\",\r\n category: \"analytics\",\r\n cookies: [/^_hj/],\r\n storage: [],\r\n scriptHosts: [\"static.hotjar.com\", \"script.hotjar.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/microsoft-clarity.js \u2014 Microsoft Clarity preset (analytics category)\r\n\r\nexport default {\r\n name: \"Microsoft Clarity\",\r\n category: \"analytics\",\r\n cookies: [\"_clck\", \"_clsk\", \"CLID\", \"MR\", \"MUID\", \"SM\"],\r\n storage: [],\r\n scriptHosts: [\"www.clarity.ms\", \"c.clarity.ms\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/linkedin-insight.js \u2014 LinkedIn Insight Tag preset (marketing category)\r\n\r\nexport default {\r\n name: \"LinkedIn Insight Tag\",\r\n category: \"marketing\",\r\n cookies: [\"li_sugr\", \"bcookie\", \"lidc\", \"UserMatchHistory\", \"AnalyticsSyncHistory\"],\r\n storage: [],\r\n scriptHosts: [\"snap.licdn.com\", \"px.ads.linkedin.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/yandex-metrica.js \u2014 Yandex Metrica preset (analytics + recording sub-category for Webvisor)\r\n\r\nexport default {\r\n name: \"Yandex Metrica\",\r\n category: \"analytics\",\r\n subCategory: \"recording\",\r\n cookies: [/^_ym/, \"yandexuid\", \"yabs-frequency\"],\r\n storage: [],\r\n scriptHosts: [\"mc.yandex.ru\", \"mc.webvisor.com\", \"mc.yandex.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/bing-ads-uet.js \u2014 Bing Ads UET preset (marketing category)\r\n\r\nexport default {\r\n name: \"Bing Ads UET\",\r\n category: \"marketing\",\r\n cookies: [\"MUID\", \"_uetsid\", \"_uetvid\"],\r\n storage: [],\r\n scriptHosts: [\"bat.bing.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/tiktok-pixel.js \u2014 TikTok Pixel preset (marketing category)\r\n\r\nexport default {\r\n name: \"TikTok Pixel\",\r\n category: \"marketing\",\r\n cookies: [\"_ttp\"],\r\n storage: [],\r\n scriptHosts: [\"analytics.tiktok.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/pinterest-tag.js \u2014 Pinterest Tag preset (marketing category)\r\n\r\nexport default {\r\n name: \"Pinterest Tag\",\r\n category: \"marketing\",\r\n cookies: [\"_pinterest_ct\", \"_pinterest_sess\"],\r\n storage: [],\r\n scriptHosts: [\"s.pinimg.com\", \"ct.pinterest.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/tawk-to.js \u2014 Tawk.to live chat preset (functional category)\r\n\r\nexport default {\r\n name: \"Tawk.to\",\r\n category: \"functional\",\r\n cookies: [\"TawkConnectionTime\", /^__tawkuuid/, /^Tawk_/],\r\n storage: [],\r\n scriptHosts: [\"embed.tawk.to\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/intercom.js \u2014 Intercom messenger preset (functional category)\r\n\r\nexport default {\r\n name: \"Intercom\",\r\n category: \"functional\",\r\n cookies: [/^intercom-/],\r\n storage: [],\r\n scriptHosts: [\"widget.intercom.io\", \"js.intercomcdn.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/hubspot.js \u2014 HubSpot preset (marketing category)\r\n\r\nexport default {\r\n name: \"HubSpot\",\r\n category: \"marketing\",\r\n cookies: [\"__hstc\", \"__hssc\", \"__hssrc\", \"hubspotutk\", \"messagesUtk\"],\r\n storage: [],\r\n scriptHosts: [\"js.hs-scripts.com\", \"js.hs-analytics.net\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/mailchimp.js \u2014 Mailchimp preset (marketing category)\r\n\r\nexport default {\r\n name: \"Mailchimp\",\r\n category: \"marketing\",\r\n cookies: [/^_mcid/, \"ak_bmsc\", \"_mcvisit\"],\r\n storage: [],\r\n scriptHosts: [\"chimpstatic.com\"],\r\n onGrant: (state) => {},\r\n onRevoke: (state) => {}\r\n};\r\n", "// blakfy-cookie/src/presets/_registry.js \u2014 central registry mapping short keys to preset modules\r\n\r\nimport ga4 from \"./google-analytics.js\";\r\nimport gtm from \"./google-tag-manager.js\";\r\nimport maps from \"./google-maps.js\";\r\nimport recaptcha from \"./google-recaptcha.js\";\r\nimport facebook from \"./facebook-pixel.js\";\r\nimport youtube from \"./youtube.js\";\r\nimport vimeo from \"./vimeo.js\";\r\nimport hotjar from \"./hotjar.js\";\r\nimport clarity from \"./microsoft-clarity.js\";\r\nimport linkedin from \"./linkedin-insight.js\";\r\nimport yandex from \"./yandex-metrica.js\";\r\nimport bing from \"./bing-ads-uet.js\";\r\nimport tiktok from \"./tiktok-pixel.js\";\r\nimport pinterest from \"./pinterest-tag.js\";\r\nimport tawkto from \"./tawk-to.js\";\r\nimport intercom from \"./intercom.js\";\r\nimport hubspot from \"./hubspot.js\";\r\nimport mailchimp from \"./mailchimp.js\";\r\n\r\nexport const PRESETS = {\r\n ga4,\r\n gtm,\r\n maps,\r\n recaptcha,\r\n facebook,\r\n youtube,\r\n vimeo,\r\n hotjar,\r\n clarity,\r\n linkedin,\r\n yandex,\r\n bing,\r\n tiktok,\r\n pinterest,\r\n tawkto,\r\n intercom,\r\n hubspot,\r\n mailchimp\r\n};\r\n\r\nexport const applyPreset = (name, { registerCleanup }) => {\r\n const preset = PRESETS[name];\r\n if (!preset) return null;\r\n if (typeof registerCleanup === \"function\") {\r\n registerCleanup({\r\n category: preset.category,\r\n cookies: preset.cookies || [],\r\n storage: preset.storage || []\r\n });\r\n if (preset.subCategory) {\r\n registerCleanup({\r\n category: preset.subCategory,\r\n cookies: preset.cookies || [],\r\n storage: preset.storage || []\r\n });\r\n }\r\n }\r\n return preset;\r\n};\r\n", "// blakfy-cookie/src/compliance/google-cmv2.js \u2014 Google Consent Mode v2 signals (gtag)\r\n\r\nlet defaultsInstalled = false;\r\n\r\nexport const installDefaults = () => {\r\n if (typeof window === \"undefined\") return;\r\n if (defaultsInstalled) return;\r\n defaultsInstalled = true;\r\n\r\n window.dataLayer = window.dataLayer || [];\r\n if (typeof window.gtag !== \"function\") {\r\n window.gtag = function () { window.dataLayer.push(arguments); };\r\n }\r\n\r\n window.gtag(\"consent\", \"default\", {\r\n ad_storage: \"denied\",\r\n ad_user_data: \"denied\",\r\n ad_personalization: \"denied\",\r\n analytics_storage: \"denied\",\r\n functionality_storage: \"denied\",\r\n personalization_storage: \"denied\",\r\n security_storage: \"granted\",\r\n wait_for_update: 500\r\n });\r\n};\r\n\r\nexport const pushGCM = (state) => {\r\n if (typeof window === \"undefined\") return;\r\n if (typeof window.gtag !== \"function\") return;\r\n const s = state || {};\r\n const m = s.marketing ? \"granted\" : \"denied\";\r\n const a = s.analytics ? \"granted\" : \"denied\";\r\n const f = s.functional ? \"granted\" : \"denied\";\r\n window.gtag(\"consent\", \"update\", {\r\n ad_storage: m,\r\n ad_user_data: m,\r\n ad_personalization: m,\r\n analytics_storage: a,\r\n functionality_storage: f,\r\n personalization_storage: f,\r\n security_storage: \"granted\"\r\n });\r\n};\r\n", "// blakfy-cookie/src/compliance/microsoft-uet.js \u2014 Microsoft UET / Clarity consent signals\r\n\r\nlet defaultsInstalled = false;\r\n\r\nexport const installDefaults = () => {\r\n if (typeof window === \"undefined\") return;\r\n if (defaultsInstalled) return;\r\n defaultsInstalled = true;\r\n\r\n window.uetq = window.uetq || [];\r\n window.uetq.push(\"consent\", \"default\", { ad_storage: \"denied\" });\r\n};\r\n\r\nexport const pushUET = (state) => {\r\n if (typeof window === \"undefined\") return;\r\n const s = state || {};\r\n window.uetq = window.uetq || [];\r\n window.uetq.push(\"consent\", \"update\", {\r\n ad_storage: s.marketing ? \"granted\" : \"denied\"\r\n });\r\n};\r\n", "// blakfy-cookie/src/compliance/yandex-metrica.js \u2014 Yandex Metrica gating layer (no native GCM-style API)\r\n\r\nlet defaultsInstalled = false;\r\n\r\nexport const installDefaults = () => {\r\n if (typeof window === \"undefined\") return;\r\n if (defaultsInstalled) return;\r\n defaultsInstalled = true;\r\n\r\n if (typeof window.ym !== \"function\") {\r\n window.ym = function () { /* swallow until consent */ };\r\n window.ym.__blakfyStub = true;\r\n }\r\n};\r\n\r\nexport const applyYandex = (state, ctx) => {\r\n const s = state || {};\r\n const unblock = ctx && ctx.unblock;\r\n if (typeof unblock !== \"function\") return;\r\n if (s.analytics === true) unblock(\"analytics\");\r\n if (s.recording === true) unblock(\"recording\");\r\n};\r\n\r\nexport const revokeYandex = (ctx) => {\r\n const runCleanup = ctx && ctx.runCleanup;\r\n if (typeof runCleanup !== \"function\") return;\r\n runCleanup(\"analytics\");\r\n runCleanup(\"recording\");\r\n};\r\n", "// blakfy-cookie/src/compliance/tcf-v2.js \u2014 IAB TCF v2.2 minimal CMP surface (preview-mode encoder)\r\n// Simplified TC string encoder \u2014 produces parseable but empty vendor consent v2.2 string. Production sites SHOULD wait for IAB Europe CMP audit.\r\n\r\nconst B64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\r\n\r\nlet lastTCString = \"\";\r\nlet vendorList = null;\r\n\r\nconst bitsToB64 = (bits) => {\r\n const pad = (6 - (bits.length % 6)) % 6;\r\n const padded = bits + \"0\".repeat(pad);\r\n let out = \"\";\r\n for (let i = 0; i < padded.length; i += 6) {\r\n out += B64.charAt(parseInt(padded.substr(i, 6), 2));\r\n }\r\n return out;\r\n};\r\n\r\nconst intToBits = (n, width) => {\r\n let s = (n >>> 0).toString(2);\r\n if (s.length > width) s = s.slice(-width);\r\n return s.padStart(width, \"0\");\r\n};\r\n\r\nconst bigIntToBits = (n, width) => {\r\n const v = BigInt(Math.max(0, Math.floor(Number(n) / 100)));\r\n let s = v.toString(2);\r\n if (s.length > width) s = s.slice(-width);\r\n return s.padStart(width, \"0\");\r\n};\r\n\r\nconst charToBits = (c) => intToBits(c.toUpperCase().charCodeAt(0) - 65, 6);\r\nconst langToBits = (lang) => charToBits((lang || \"EN\").charAt(0)) + charToBits((lang || \"EN\").charAt(1));\r\n\r\nconst buildPurposes = (state) => {\r\n const out = new Array(24).fill(0);\r\n out[0] = 1;\r\n if (state && state.analytics) { out[1] = 1; out[2] = 1; out[3] = 1; }\r\n if (state && state.marketing) { out[4] = 1; out[5] = 1; out[6] = 1; out[7] = 1; out[8] = 1; }\r\n if (state && state.functional) { out[9] = 1; }\r\n return out.join(\"\");\r\n};\r\n\r\nexport const buildTCString = (opts) => {\r\n const o = opts || {};\r\n const cmpId = o.cmpId | 0;\r\n const cmpVersion = o.cmpVersion | 0;\r\n const now = Date.now();\r\n const created = bigIntToBits(now, 36);\r\n const lastUpdated = bigIntToBits(now, 36);\r\n\r\n const purposesConsent = o.purposeConsents || buildPurposes(o.state);\r\n const purposesLI = \"0\".repeat(24);\r\n\r\n const core =\r\n intToBits(2, 6) +\r\n created +\r\n lastUpdated +\r\n intToBits(cmpId, 12) +\r\n intToBits(cmpVersion, 12) +\r\n intToBits(1, 6) +\r\n langToBits(o.consentLanguage || \"EN\") +\r\n intToBits(o.vendorListVersion || 300, 12) +\r\n intToBits(4, 6) +\r\n \"1\" +\r\n \"0\" +\r\n \"0\".repeat(12) +\r\n purposesConsent +\r\n purposesLI +\r\n \"0\" +\r\n charToBits(\"A\") + charToBits(\"A\") +\r\n intToBits(0, 16) +\r\n intToBits(0, 16) +\r\n \"1\" +\r\n intToBits(0, 12) +\r\n intToBits(0, 16) +\r\n intToBits(0, 16) +\r\n \"1\" +\r\n intToBits(0, 12);\r\n\r\n return bitsToB64(core);\r\n};\r\n\r\nexport const getTCString = () => lastTCString;\r\nexport const setVendorList = (vl) => { vendorList = vl; };\r\n\r\nconst buildPurposeMap = (state) => {\r\n const consents = {};\r\n const li = {};\r\n const s = state || {};\r\n for (let i = 1; i <= 11; i++) { consents[i] = false; li[i] = false; }\r\n consents[1] = true;\r\n if (s.analytics) { consents[2] = true; consents[3] = true; consents[4] = true; }\r\n if (s.marketing) { consents[5] = true; consents[6] = true; consents[7] = true; consents[8] = true; consents[9] = true; }\r\n if (s.functional) { consents[10] = true; }\r\n return { consents: consents, legitimateInterests: li };\r\n};\r\n\r\nexport const installTCFAPI = (opts) => {\r\n if (typeof window === \"undefined\") return;\r\n const o = opts || {};\r\n const cmpId = o.cmpId | 0;\r\n const cmpVersion = o.cmpVersion | 0;\r\n const getConsent = typeof o.getConsent === \"function\" ? o.getConsent : () => ({});\r\n const subscribe = typeof o.on === \"function\" ? o.on : null;\r\n\r\n const listeners = Object.create(null);\r\n let nextId = 1;\r\n let displayStatus = \"hidden\";\r\n let eventStatus = \"tcloaded\";\r\n\r\n const buildTCData = (listenerId) => {\r\n const state = getConsent() || {};\r\n const purposes = buildPurposeMap(state);\r\n lastTCString = buildTCString({ cmpId: cmpId, cmpVersion: cmpVersion, state: state });\r\n return {\r\n tcString: lastTCString,\r\n eventStatus: eventStatus,\r\n cmpId: cmpId,\r\n cmpVersion: cmpVersion,\r\n gdprApplies: true,\r\n listenerId: typeof listenerId === \"number\" ? listenerId : null,\r\n addtlConsent: \"\",\r\n purpose: purposes,\r\n vendor: { consents: {}, legitimateInterests: {} }\r\n };\r\n };\r\n\r\n const buildPing = () => ({\r\n gdprApplies: true,\r\n cmpLoaded: true,\r\n cmpStatus: \"loaded\",\r\n displayStatus: displayStatus,\r\n apiVersion: \"2.2\",\r\n cmpVersion: cmpVersion,\r\n cmpId: cmpId,\r\n gvlVersion: vendorList && vendorList.vendorListVersion ? vendorList.vendorListVersion : 0,\r\n tcfPolicyVersion: 4\r\n });\r\n\r\n const handle = (command, version, callback, parameter) => {\r\n if (typeof callback !== \"function\") return;\r\n if (command === \"ping\") { callback(buildPing(), true); return; }\r\n if (command === \"getTCData\") { callback(buildTCData(null), true); return; }\r\n if (command === \"addEventListener\") {\r\n const id = nextId++;\r\n listeners[id] = callback;\r\n callback(buildTCData(id), true);\r\n return;\r\n }\r\n if (command === \"removeEventListener\") {\r\n if (listeners[parameter]) { delete listeners[parameter]; callback(true, true); }\r\n else callback(false, true);\r\n return;\r\n }\r\n callback(null, false);\r\n };\r\n\r\n if (!window.__tcfapi || !window.__tcfapi.__blakfy) {\r\n window.__tcfapi = (cmd, ver, cb, param) => handle(cmd, ver, cb, param);\r\n window.__tcfapi.__blakfy = true;\r\n }\r\n\r\n if (typeof document !== \"undefined\" && !document.querySelector('iframe[name=\"__tcfapiLocator\"]')) {\r\n try {\r\n const iframe = document.createElement(\"iframe\");\r\n iframe.style.cssText = \"display:none;position:absolute;width:0;height:0;border:0\";\r\n iframe.name = \"__tcfapiLocator\";\r\n (document.body || document.documentElement).appendChild(iframe);\r\n } catch (e) { /* noop */ }\r\n }\r\n\r\n if (!window.__blakfyTcfMsg) {\r\n window.__blakfyTcfMsg = true;\r\n window.addEventListener(\"message\", (ev) => {\r\n const data = ev && ev.data;\r\n if (!data) return;\r\n const payload = typeof data === \"string\" ? safeParse(data) : data;\r\n if (!payload || !payload.__tcfapiCall) return;\r\n const call = payload.__tcfapiCall;\r\n handle(call.command, call.version, (returnValue, success) => {\r\n const msg = { __tcfapiReturn: { returnValue: returnValue, success: success, callId: call.callId } };\r\n try { ev.source && ev.source.postMessage(msg, ev.origin || \"*\"); } catch (e) { /* noop */ }\r\n }, call.parameter);\r\n });\r\n }\r\n\r\n const fireAll = () => {\r\n const ids = Object.keys(listeners);\r\n for (let i = 0; i < ids.length; i++) {\r\n const id = ids[i];\r\n try { listeners[id](buildTCData(parseInt(id, 10)), true); } catch (e) { /* noop */ }\r\n }\r\n };\r\n\r\n if (subscribe) {\r\n subscribe(\"change\", () => { eventStatus = \"useractioncomplete\"; fireAll(); });\r\n subscribe(\"display\", (visible) => { displayStatus = visible ? \"visible\" : \"hidden\"; fireAll(); });\r\n }\r\n\r\n return { fireAll: fireAll };\r\n};\r\n\r\nconst safeParse = (s) => { try { return JSON.parse(s); } catch (e) { return null; } };\r\n", "// blakfy-cookie/src/compliance/ccpa.js \u2014 CCPA / CPRA __uspapi + Do Not Sell link\r\n\r\nlet optedOutFlag = false;\r\nlet noticeGiven = true;\r\nlet cmpVersion = 1;\r\nlet listeners = [];\r\nlet installed = false;\r\n\r\nexport const buildUSPString = (opts) => {\r\n const o = opts || {};\r\n const version = o.version || 1;\r\n const notice = o.notice === false ? \"N\" : (o.notice === null ? \"-\" : \"Y\");\r\n const optOut = o.optedOut === true ? \"Y\" : (o.optedOut === null ? \"-\" : \"N\");\r\n const lspa = o.lspa === true ? \"Y\" : (o.lspa === null ? \"-\" : \"N\");\r\n return String(version) + notice + optOut + lspa;\r\n};\r\n\r\nconst currentString = () => buildUSPString({ version: cmpVersion, notice: noticeGiven, optedOut: optedOutFlag, lspa: false });\r\n\r\nconst fireListeners = () => {\r\n const data = { version: cmpVersion, uspString: currentString() };\r\n for (let i = 0; i < listeners.length; i++) {\r\n try { listeners[i].cb(data, true); } catch (e) { /* noop */ }\r\n }\r\n};\r\n\r\nexport const installUSP = (opts) => {\r\n if (typeof window === \"undefined\") return;\r\n const o = opts || {};\r\n if (typeof o.optedOut === \"boolean\") optedOutFlag = o.optedOut;\r\n if (typeof o.notice === \"boolean\") noticeGiven = o.notice;\r\n\r\n if (installed) return;\r\n installed = true;\r\n\r\n window.__uspapi = (command, version, callback) => {\r\n if (typeof callback !== \"function\") return;\r\n if (command === \"getUSPData\") {\r\n callback({ version: cmpVersion, uspString: currentString() }, true);\r\n return;\r\n }\r\n callback(null, false);\r\n };\r\n\r\n if (typeof document !== \"undefined\" && !document.querySelector('iframe[name=\"__uspapiLocator\"]')) {\r\n try {\r\n const iframe = document.createElement(\"iframe\");\r\n iframe.style.cssText = \"display:none;position:absolute;width:0;height:0;border:0\";\r\n iframe.name = \"__uspapiLocator\";\r\n (document.body || document.documentElement).appendChild(iframe);\r\n } catch (e) { /* noop */ }\r\n }\r\n};\r\n\r\nexport const optOut = () => {\r\n optedOutFlag = true;\r\n noticeGiven = true;\r\n fireListeners();\r\n if (typeof window !== \"undefined\") {\r\n try { window.dispatchEvent(new CustomEvent(\"blakfy:ccpa:optout\", { detail: { uspString: currentString() } })); } catch (e) { /* noop */ }\r\n }\r\n};\r\n\r\nexport const isOptedOut = () => optedOutFlag === true;\r\n\r\nexport const installDoNotSellLink = (opts) => {\r\n if (typeof document === \"undefined\") return null;\r\n const o = opts || {};\r\n const container = o.container || document.body;\r\n if (!container) return null;\r\n const existing = container.querySelector(\".blakfy-ccpa-link\");\r\n if (existing) return existing;\r\n\r\n const t = o.t || {};\r\n const label = (t.ccpa && t.ccpa.doNotSell) || \"Do Not Sell or Share My Personal Information\";\r\n\r\n const a = document.createElement(\"a\");\r\n a.className = \"blakfy-ccpa-link\";\r\n a.href = \"#\";\r\n a.setAttribute(\"role\", \"button\");\r\n a.textContent = label;\r\n a.addEventListener(\"click\", (e) => {\r\n e.preventDefault();\r\n optOut();\r\n });\r\n container.appendChild(a);\r\n return a;\r\n};\r\n", "// blakfy-cookie/src/compliance/gpc.js \u2014 Global Privacy Control detection and policy\r\n\r\nexport const getGPC = () => {\r\n if (typeof navigator !== \"undefined\" && navigator.globalPrivacyControl === true) return true;\r\n if (typeof document !== \"undefined\" && document.documentElement && document.documentElement.dataset && document.documentElement.dataset.gpc === \"1\") return true;\r\n return false;\r\n};\r\n\r\nexport const applyGPC = (opts) => {\r\n const o = opts || {};\r\n const mode = o.mode || \"respect\";\r\n const currentState = o.currentState || null;\r\n const setPrefs = typeof o.setPrefs === \"function\" ? o.setPrefs : null;\r\n\r\n if (mode !== \"respect\") return { applied: false, reason: \"mode-disabled\" };\r\n if (!getGPC()) return { applied: false, reason: \"no-gpc-signal\" };\r\n\r\n if (currentState && currentState.explicit === true) {\r\n return { applied: false, reason: \"user-already-consented\" };\r\n }\r\n\r\n if (setPrefs) setPrefs({ analytics: false, marketing: false });\r\n return { applied: true, reason: \"gpc-auto-deny\" };\r\n};\r\n", "// blakfy-cookie/src/compliance/dnt.js \u2014 Do Not Track detection and policy (weaker than GPC)\r\n\r\nexport const getDNT = () => {\r\n if (typeof navigator !== \"undefined\" && navigator.doNotTrack === \"1\") return true;\r\n if (typeof window !== \"undefined\" && window.doNotTrack === \"1\") return true;\r\n return false;\r\n};\r\n\r\nexport const applyDNT = (opts) => {\r\n const o = opts || {};\r\n const mode = o.mode || \"respect\";\r\n const setPrefs = typeof o.setPrefs === \"function\" ? o.setPrefs : null;\r\n\r\n if (!getDNT()) return { applied: false, reason: \"no-dnt-signal\" };\r\n\r\n if (mode === \"auto-deny\") {\r\n if (setPrefs) setPrefs({ analytics: false, marketing: false });\r\n return { applied: true, reason: \"dnt-auto-deny\" };\r\n }\r\n\r\n return { applied: false, reason: \"dnt-ui-hint-only\" };\r\n};\r\n", "// blakfy-cookie/src/geo/jurisdiction.js \u2014 jurisdiction detection (GDPR / CCPA / LGPD / default)\r\n\r\nexport const EU_COUNTRIES = [\r\n \"AT\",\"BE\",\"BG\",\"HR\",\"CY\",\"CZ\",\"DK\",\"EE\",\"FI\",\"FR\",\"DE\",\"GR\",\"HU\",\"IE\",\"IT\",\r\n \"LV\",\"LT\",\"LU\",\"MT\",\"NL\",\"PL\",\"PT\",\"RO\",\"SK\",\"SI\",\"ES\",\"SE\",\r\n \"NO\",\"IS\",\"LI\",\r\n \"GB\",\"UK\",\r\n \"CH\"\r\n];\r\n\r\nexport const mapCountryToJurisdiction = (country, region) => {\r\n if (!country) return \"default\";\r\n const c = String(country).toUpperCase();\r\n const r = region ? String(region).toUpperCase() : \"\";\r\n\r\n if (EU_COUNTRIES.indexOf(c) !== -1) return \"GDPR\";\r\n if (c === \"TR\") return \"GDPR\";\r\n if (c === \"BR\") return \"LGPD\";\r\n if (c === \"US\" && r === \"CA\") return \"CCPA\";\r\n return \"default\";\r\n};\r\n\r\nconst tzGuess = () => {\r\n try {\r\n const tz = Intl.DateTimeFormat().resolvedOptions().timeZone || \"\";\r\n if (tz.indexOf(\"Europe/\") === 0) return \"GDPR\";\r\n if (tz === \"America/Los_Angeles\" || tz === \"America/Tijuana\") return \"CCPA\";\r\n if (tz === \"America/Sao_Paulo\") return \"LGPD\";\r\n return \"default\";\r\n } catch (e) {\r\n return \"default\";\r\n }\r\n};\r\n\r\nexport const detectJurisdiction = async (opts) => {\r\n const o = opts || {};\r\n\r\n if (typeof document !== \"undefined\" && document.documentElement && document.documentElement.dataset && document.documentElement.dataset.jurisdiction) {\r\n const v = document.documentElement.dataset.jurisdiction;\r\n if (v === \"GDPR\" || v === \"CCPA\" || v === \"LGPD\" || v === \"default\") return v;\r\n }\r\n\r\n if (o.geoEndpoint && typeof fetch === \"function\") {\r\n try {\r\n const res = await fetch(o.geoEndpoint, { credentials: \"omit\" });\r\n if (res && res.ok) {\r\n const data = await res.json();\r\n return mapCountryToJurisdiction(data && data.country, data && data.region);\r\n }\r\n } catch (e) { /* fall through */ }\r\n }\r\n\r\n return tzGuess();\r\n};\r\n", "// blakfy-cookie/src/core/audit.js \u2014 fire-and-forget audit log POST per COMPLIANCE.md \u00A710\r\n\r\nexport const postAudit = (endpoint, payload) => {\r\n if (!endpoint) return;\r\n try {\r\n fetch(endpoint, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify(payload),\r\n keepalive: true,\r\n }).catch(() => {});\r\n } catch (e) {\r\n /* swallow */\r\n }\r\n};\r\n", "// blakfy-cookie/src/api.js \u2014 public window.BlakfyCookie surface (v1 contract preserved + v2 additions)\r\n\r\nimport { writeCookie, buildState } from \"./core/consent-store.js\";\r\nimport { postAudit } from \"./core/audit.js\";\r\nimport { getTranslation, DEFAULT_LOCALE } from \"./i18n/index.js\";\r\nimport { normalizeLocale, RTL_LOCALES } from \"./i18n/detect.js\";\r\nimport { scanAll } from \"./gating/observer.js\";\r\n\r\nconst VERSION = \"2.1.2\";\r\nconst CATEGORIES = [\"analytics\", \"marketing\", \"functional\", \"recording\"];\r\n\r\nexport const createAPI = (ctx) => {\r\n const { config, emitter, deps } = ctx;\r\n let state = ctx.state || null;\r\n let currentLocale = ctx.locale;\r\n let mainLang = ctx.mainLang;\r\n let jurisdiction = ctx.jurisdiction || \"default\";\r\n let t = getTranslation(currentLocale);\r\n\r\n let modalRoot = null;\r\n let bannerRoot = null;\r\n\r\n const setUI = (which, root) => {\r\n if (which === \"modal\") modalRoot = root;\r\n if (which === \"banner\") bannerRoot = root;\r\n };\r\n\r\n const closeUI = () => {\r\n if (typeof document !== \"undefined\") {\r\n const overlays = document.querySelectorAll(\".blakfy-overlay\");\r\n for (let i = 0; i < overlays.length; i++) {\r\n const o = overlays[i];\r\n if (o && o.parentNode) o.parentNode.removeChild(o);\r\n }\r\n }\r\n modalRoot = null;\r\n bannerRoot = null;\r\n if (deps && typeof deps.removeFocusTrap === \"function\") deps.removeFocusTrap();\r\n };\r\n\r\n const getConsent = (cat) => {\r\n if (cat === \"essential\") return true;\r\n return state ? !!state[cat] : false;\r\n };\r\n\r\n const grantedCategories = (s) => {\r\n const out = [];\r\n if (!s) return out;\r\n for (let i = 0; i < CATEGORIES.length; i++) {\r\n if (s[CATEGORIES[i]]) out.push(CATEGORIES[i]);\r\n }\r\n return out;\r\n };\r\n\r\n const commit = (prefs, action) => {\r\n const prevState = state;\r\n const prevGranted = grantedCategories(prevState);\r\n\r\n const next = buildState({\r\n prefs: prefs || {},\r\n currentLocale: currentLocale,\r\n mainLang: mainLang,\r\n policyVersion: config.policyVersion,\r\n jurisdiction: jurisdiction,\r\n tcString: deps && typeof deps.getTCString === \"function\" ? deps.getTCString() : null,\r\n uspString: null,\r\n prevId: prevState && prevState.id\r\n });\r\n\r\n state = next;\r\n\r\n try { writeCookie(state); } catch (e) { /* ignore */ }\r\n\r\n if (config.auditEndpoint) {\r\n postAudit(config.auditEndpoint, {\r\n id: state.id,\r\n action: action || \"save\",\r\n timestamp: state.timestamp,\r\n version: state.version,\r\n jurisdiction: state.jurisdiction,\r\n consent: {\r\n analytics: state.analytics,\r\n marketing: state.marketing,\r\n functional: state.functional,\r\n recording: state.recording\r\n }\r\n });\r\n }\r\n\r\n if (deps && typeof deps.pushGCM === \"function\") deps.pushGCM(state);\r\n if (deps && typeof deps.pushUET === \"function\") deps.pushUET(state);\r\n if (deps && typeof deps.applyYandex === \"function\") {\r\n deps.applyYandex(state, {\r\n unblock: (cat) => {\r\n if (deps.unblockScripts) deps.unblockScripts(cat);\r\n if (deps.unblockIframes) deps.unblockIframes(cat);\r\n },\r\n runCleanup: deps.runCleanup\r\n });\r\n }\r\n\r\n const nowGranted = grantedCategories(state);\r\n for (let i = 0; i < nowGranted.length; i++) {\r\n const cat = nowGranted[i];\r\n if (deps && deps.unblockScripts) deps.unblockScripts(cat);\r\n if (deps && deps.unblockIframes) deps.unblockIframes(cat);\r\n }\r\n\r\n for (let j = 0; j < prevGranted.length; j++) {\r\n const c = prevGranted[j];\r\n if (nowGranted.indexOf(c) === -1) {\r\n if (deps && typeof deps.runCleanup === \"function\") deps.runCleanup(c);\r\n }\r\n }\r\n\r\n emitter.emit(\"change\", state);\r\n for (let k = 0; k < CATEGORIES.length; k++) {\r\n const cat = CATEGORIES[k];\r\n const wasGranted = prevGranted.indexOf(cat) > -1;\r\n const isGranted = nowGranted.indexOf(cat) > -1;\r\n if (!wasGranted && isGranted) emitter.emit(\"consent:\" + cat, true);\r\n if (wasGranted && !isGranted) emitter.emit(\"consent:\" + cat, false);\r\n }\r\n\r\n closeUI();\r\n };\r\n\r\n const acceptAll = () => commit({ analytics: true, marketing: true, functional: true, recording: true }, \"accept_all\");\r\n const rejectAll = () => commit({ analytics: false, marketing: false, functional: false, recording: false }, \"reject_all\");\r\n\r\n const open = () => {\r\n if (deps && typeof deps.openModal === \"function\") deps.openModal({ commit: commit, t: t, currentLocale: currentLocale, state: state });\r\n };\r\n\r\n const onChange = (fn) => { emitter.on(\"change\", fn); };\r\n\r\n const onConsent = (category, fn) => {\r\n if (typeof fn !== \"function\") return;\r\n if (getConsent(category)) {\r\n try { fn(true); } catch (e) { /* swallow */ }\r\n }\r\n emitter.on(\"consent:\" + category, fn);\r\n };\r\n\r\n const setLocale = (loc) => {\r\n const resolved = normalizeLocale(loc);\r\n if (!resolved) return;\r\n currentLocale = resolved;\r\n t = getTranslation(resolved) || getTranslation(DEFAULT_LOCALE);\r\n emitter.emit(\"locale\", { locale: resolved, t: t, isRTL: RTL_LOCALES.indexOf(resolved) > -1 });\r\n };\r\n\r\n const getMainLang = () => mainLang;\r\n const getState = () => state;\r\n const getJurisdiction = () => jurisdiction;\r\n\r\n const unblock = (category) => {\r\n if (!deps) return;\r\n if (typeof deps.unblockScripts === \"function\") deps.unblockScripts(category);\r\n if (typeof deps.unblockIframes === \"function\") deps.unblockIframes(category);\r\n };\r\n\r\n const scan = () => {\r\n const granted = scanAll({ getConsent: getConsent });\r\n for (let i = 0; i < granted.length; i++) unblock(granted[i]);\r\n return granted;\r\n };\r\n\r\n const usePreset = (name) => {\r\n if (!deps || typeof deps.applyPreset !== \"function\") return null;\r\n return deps.applyPreset(name, { registerCleanup: deps.registerCleanup });\r\n };\r\n\r\n const registerCleanup = (opts) => {\r\n if (deps && typeof deps.registerCleanup === \"function\") deps.registerCleanup(opts);\r\n };\r\n\r\n const tcf = {\r\n getTCString: () => (deps && typeof deps.getTCString === \"function\" ? deps.getTCString() : \"\")\r\n };\r\n\r\n const ccpa = {\r\n optOut: () => { if (deps && typeof deps.optOutCCPA === \"function\") deps.optOutCCPA(); },\r\n isOptedOut: () => (deps && typeof deps.isOptedOutCCPA === \"function\" ? !!deps.isOptedOutCCPA() : false)\r\n };\r\n\r\n return {\r\n version: VERSION,\r\n open: open,\r\n acceptAll: acceptAll,\r\n rejectAll: rejectAll,\r\n getConsent: getConsent,\r\n getState: getState,\r\n onChange: onChange,\r\n setLocale: setLocale,\r\n getMainLang: getMainLang,\r\n onConsent: onConsent,\r\n registerCleanup: registerCleanup,\r\n unblock: unblock,\r\n scan: scan,\r\n usePreset: usePreset,\r\n tcf: tcf,\r\n ccpa: ccpa,\r\n getJurisdiction: getJurisdiction,\r\n __internal: { commit: commit, setUI: setUI, closeUI: closeUI }\r\n };\r\n};\r\n", "// blakfy-cookie/src/index.js \u2014 bootstrap entry; wires modules and assigns window.BlakfyCookie\r\n\r\nimport { getScriptEl, readConfig } from \"./core/config.js\";\r\nimport { readCookie } from \"./core/consent-store.js\";\r\nimport { createEmitter } from \"./core/events.js\";\r\nimport { detectLocale, detectMainLang, RTL_LOCALES } from \"./i18n/detect.js\";\r\nimport { getTranslation } from \"./i18n/index.js\";\r\nimport { injectStyles } from \"./ui/styles.js\";\r\nimport { createBanner } from \"./ui/banner.js\";\r\nimport { createModal } from \"./ui/modal.js\";\r\nimport { mountBadges, installAntiTamper } from \"./ui/badge.js\";\r\nimport { installFocusTrap, removeFocusTrap } from \"./ui/focus-trap.js\";\r\nimport { fetchStatus, renderStatus } from \"./ui/status-bar.js\";\r\nimport { unblockScripts } from \"./gating/script-unblocker.js\";\r\nimport { unblockIframes, installPlaceholders } from \"./gating/iframe-unblocker.js\";\r\nimport { startObserver, scanAll } from \"./gating/observer.js\";\r\nimport { runCleanup, registerCleanup } from \"./gating/cleaner.js\";\r\nimport { applyPreset } from \"./presets/_registry.js\";\r\nimport {\r\n installDefaults as installGCMDefaults,\r\n pushGCM\r\n} from \"./compliance/google-cmv2.js\";\r\nimport {\r\n installDefaults as installUETDefaults,\r\n pushUET\r\n} from \"./compliance/microsoft-uet.js\";\r\nimport {\r\n installDefaults as installYandexDefaults,\r\n applyYandex\r\n} from \"./compliance/yandex-metrica.js\";\r\nimport { installTCFAPI, getTCString } from \"./compliance/tcf-v2.js\";\r\nimport { installUSP, installDoNotSellLink, optOut as optOutCCPA, isOptedOut as isOptedOutCCPA } from \"./compliance/ccpa.js\";\r\nimport { getGPC, applyGPC } from \"./compliance/gpc.js\";\r\nimport { getDNT, applyDNT } from \"./compliance/dnt.js\";\r\nimport { detectJurisdiction } from \"./geo/jurisdiction.js\";\r\nimport { createAPI } from \"./api.js\";\r\n\r\nconst ROOT_OVERLAY_CLASS = \"blakfy-overlay\";\r\n\r\nconst bootstrap = async () => {\r\n if (typeof window === \"undefined\" || typeof document === \"undefined\") return;\r\n if (window.BlakfyCookie && window.BlakfyCookie.__bootstrapped) return;\r\n\r\n // 1. config\r\n const scriptEl = getScriptEl();\r\n const config = readConfig(scriptEl);\r\n\r\n // 2. locale + translations\r\n const currentLocale = detectLocale({ configLocale: config.locale });\r\n const mainLang = detectMainLang({ configMainLang: config.mainLang });\r\n let t = getTranslation(currentLocale);\r\n let isRTL = RTL_LOCALES.indexOf(currentLocale) > -1;\r\n\r\n // 2b. resolve theme: auto \u2192 light/dark via matchMedia; aliases white\u2192light, black\u2192dark\r\n const resolveTheme = (raw) => {\r\n if (raw === \"auto\") {\r\n try { return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\"; } catch (e) { return \"light\"; }\r\n }\r\n if (raw === \"black\") return \"dark\";\r\n if (raw === \"white\") return \"light\";\r\n return raw || \"light\";\r\n };\r\n const theme = resolveTheme(config.theme);\r\n\r\n // 3. styles\r\n injectStyles();\r\n\r\n // 4. emitter\r\n const emitter = createEmitter();\r\n\r\n // 5. jurisdiction\r\n let jurisdiction = \"default\";\r\n try { jurisdiction = await detectJurisdiction({}); } catch (e) { jurisdiction = \"default\"; }\r\n\r\n // 6. install compliance defaults (idempotent \u2014 cookie-defaults bundle may have already run)\r\n installGCMDefaults();\r\n installUETDefaults();\r\n installYandexDefaults();\r\n\r\n // 9. read cookie BEFORE TCF setup so getConsent reads accurate state\r\n let state = readCookie(config.policyVersion);\r\n\r\n // 7. TCF\r\n if (config.tcf === \"true\") {\r\n installTCFAPI({\r\n cmpId: parseInt(config.cmpId, 10) || 0,\r\n cmpVersion: 1,\r\n getConsent: () => state || {},\r\n on: emitter.on\r\n });\r\n }\r\n\r\n // 8. CCPA\r\n const ccpaOn = config.ccpa === \"true\" || (config.ccpa === \"auto\" && jurisdiction === \"CCPA\");\r\n if (ccpaOn) {\r\n installUSP({});\r\n installDoNotSellLink({ t: t });\r\n }\r\n\r\n // 10. DNT\r\n if (getDNT() && config.dnt === \"auto-deny\" && !state) {\r\n applyDNT({ mode: \"auto-deny\", setPrefs: () => { /* applied at banner default */ } });\r\n }\r\n\r\n // 11. GPC \u2014 only mutate defaults if user has not yet decided\r\n if (getGPC() && config.gpc === \"respect\" && !state) {\r\n applyGPC({ mode: \"respect\", currentState: null, setPrefs: () => { /* defaults remain denied */ } });\r\n }\r\n\r\n // 12. Apply presets (list kept in closure for Services tab)\r\n let activePresetList = [];\r\n if (config.presets) {\r\n activePresetList = String(config.presets).split(\",\").map((s) => s.trim()).filter(Boolean);\r\n for (let i = 0; i < activePresetList.length; i++) {\r\n try { applyPreset(activePresetList[i], { registerCleanup: registerCleanup }); } catch (e) { /* ignore */ }\r\n }\r\n }\r\n\r\n // 13. createAPI + window guard\r\n const api = createAPI({\r\n state: state,\r\n config: config,\r\n emitter: emitter,\r\n locale: currentLocale,\r\n mainLang: mainLang,\r\n jurisdiction: jurisdiction,\r\n deps: {\r\n unblockScripts: unblockScripts,\r\n unblockIframes: unblockIframes,\r\n runCleanup: runCleanup,\r\n registerCleanup: registerCleanup,\r\n applyPreset: applyPreset,\r\n pushGCM: pushGCM,\r\n pushUET: pushUET,\r\n applyYandex: applyYandex,\r\n getTCString: getTCString,\r\n optOutCCPA: optOutCCPA,\r\n isOptedOutCCPA: isOptedOutCCPA,\r\n removeFocusTrap: removeFocusTrap,\r\n openModal: (opts) => mountModal(opts)\r\n }\r\n });\r\n\r\n api.__bootstrapped = true;\r\n\r\n // Keep API state in sync after each commit\r\n emitter.on(\"change\", (s) => { state = s; });\r\n\r\n // Locale switching: re-render visible UI\r\n emitter.on(\"locale\", (info) => {\r\n t = info.t;\r\n isRTL = info.isRTL;\r\n });\r\n\r\n if (!window.BlakfyCookie) {\r\n window.BlakfyCookie = api;\r\n try {\r\n window.dispatchEvent(new CustomEvent(\"blakfy:ready\", { detail: { version: api.version } }));\r\n } catch (e) { /* CustomEvent unsupported in very old browsers */ }\r\n }\r\n\r\n // Helper: mount banner overlay\r\n const mountBanner = () => {\r\n const overlay = document.createElement(\"div\");\r\n overlay.className = ROOT_OVERLAY_CLASS + \" widget \" + (config.position || \"bottom-right\");\r\n const card = createBanner({\r\n t: t,\r\n isRTL: isRTL,\r\n accent: config.accent,\r\n theme: theme,\r\n policyUrl: config.policyUrl,\r\n onAccept: () => api.acceptAll(),\r\n onReject: () => api.rejectAll(),\r\n onPrefs: () => mountModal({ commit: api.__internal.commit, t: t, currentLocale: currentLocale, state: state })\r\n });\r\n overlay.appendChild(card);\r\n document.body.appendChild(overlay);\r\n api.__internal.setUI(\"banner\", overlay);\r\n mountBadges(card);\r\n installAntiTamper(card);\r\n installFocusTrap(card, { onEscape: () => { /* banner non-dismissible via ESC */ } });\r\n return overlay;\r\n };\r\n\r\n // Helper: mount modal overlay\r\n function mountModal(opts) {\r\n const existing = document.querySelectorAll(\".\" + ROOT_OVERLAY_CLASS + \".modal\");\r\n for (let i = 0; i < existing.length; i++) {\r\n if (existing[i].parentNode) existing[i].parentNode.removeChild(existing[i]);\r\n }\r\n const overlay = document.createElement(\"div\");\r\n overlay.className = ROOT_OVERLAY_CLASS + \" modal\";\r\n overlay.addEventListener(\"click\", (ev) => { if (ev.target === overlay) api.__internal.closeUI(); });\r\n const card = createModal({\r\n t: (opts && opts.t) || t,\r\n isRTL: isRTL,\r\n accent: config.accent,\r\n theme: theme,\r\n currentState: state,\r\n presets: activePresetList,\r\n version: api.version,\r\n onSave: (prefs) => api.__internal.commit(prefs, \"save\"),\r\n onAccept: () => api.acceptAll(),\r\n onClose: () => api.__internal.closeUI()\r\n });\r\n overlay.appendChild(card);\r\n document.body.appendChild(overlay);\r\n api.__internal.setUI(\"modal\", overlay);\r\n mountBadges(card);\r\n installAntiTamper(card);\r\n installFocusTrap(card, { onEscape: () => api.__internal.closeUI() });\r\n return overlay;\r\n }\r\n\r\n // 14./15. Branch on existing state\r\n if (state) {\r\n pushGCM(state);\r\n pushUET(state);\r\n applyYandex(state, {\r\n unblock: (cat) => { unblockScripts(cat); unblockIframes(cat); },\r\n runCleanup: runCleanup\r\n });\r\n const granted = scanAll({ getConsent: api.getConsent });\r\n for (let i = 0; i < granted.length; i++) {\r\n unblockScripts(granted[i]);\r\n unblockIframes(granted[i]);\r\n }\r\n installPlaceholders(t, (cat) => {\r\n mountModal({ commit: api.__internal.commit, t: t, currentLocale: currentLocale, state: state });\r\n });\r\n } else {\r\n mountBanner();\r\n installPlaceholders(t, () => {\r\n mountModal({ commit: api.__internal.commit, t: t, currentLocale: currentLocale, state: state });\r\n });\r\n }\r\n\r\n // 16. SPA observer\r\n startObserver({\r\n getConsent: api.getConsent,\r\n onScan: (cat) => {\r\n unblockScripts(cat);\r\n unblockIframes(cat);\r\n }\r\n });\r\n\r\n // 17. status bar\r\n if (config.statusEnabled && config.statusUrl) {\r\n fetchStatus(config.statusUrl).then((data) => {\r\n if (data) renderStatus({ data: data, currentLocale: currentLocale, mainLang: mainLang });\r\n });\r\n }\r\n};\r\n\r\nif (typeof document !== \"undefined\") {\r\n if (document.readyState === \"loading\") {\r\n document.addEventListener(\"DOMContentLoaded\", () => { bootstrap(); });\r\n } else {\r\n bootstrap();\r\n }\r\n}\r\n\r\nexport default bootstrap;\r\n"],
5
5
  "mappings": "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",
6
6
  "names": ["el", "listeners", "registerCleanup", "defaultsInstalled", "installDefaults", "defaultsInstalled", "installDefaults", "cmpVersion", "cmpVersion", "listeners", "optOut", "CATEGORIES", "registerCleanup", "installDefaults"]
7
7
  }