@freshjuice/zest 2.0.0 → 2.2.0

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.
Files changed (53) hide show
  1. package/dist/zest.d.ts +247 -0
  2. package/dist/zest.de.js +107 -3
  3. package/dist/zest.de.js.map +1 -1
  4. package/dist/zest.de.min.js +1 -1
  5. package/dist/zest.en.js +107 -3
  6. package/dist/zest.en.js.map +1 -1
  7. package/dist/zest.en.min.js +1 -1
  8. package/dist/zest.es.js +107 -3
  9. package/dist/zest.es.js.map +1 -1
  10. package/dist/zest.es.min.js +1 -1
  11. package/dist/zest.esm.js +107 -3
  12. package/dist/zest.esm.js.map +1 -1
  13. package/dist/zest.esm.min.js +1 -1
  14. package/dist/zest.fr.js +107 -3
  15. package/dist/zest.fr.js.map +1 -1
  16. package/dist/zest.fr.min.js +1 -1
  17. package/dist/zest.headless.d.ts +211 -0
  18. package/dist/zest.headless.esm.js +107 -3
  19. package/dist/zest.headless.esm.js.map +1 -1
  20. package/dist/zest.headless.esm.min.js +1 -1
  21. package/dist/zest.it.js +107 -3
  22. package/dist/zest.it.js.map +1 -1
  23. package/dist/zest.it.min.js +1 -1
  24. package/dist/zest.ja.js +107 -3
  25. package/dist/zest.ja.js.map +1 -1
  26. package/dist/zest.ja.min.js +1 -1
  27. package/dist/zest.js +107 -3
  28. package/dist/zest.js.map +1 -1
  29. package/dist/zest.min.js +1 -1
  30. package/dist/zest.nl.js +107 -3
  31. package/dist/zest.nl.js.map +1 -1
  32. package/dist/zest.nl.min.js +1 -1
  33. package/dist/zest.pl.js +107 -3
  34. package/dist/zest.pl.js.map +1 -1
  35. package/dist/zest.pl.min.js +1 -1
  36. package/dist/zest.pt.js +107 -3
  37. package/dist/zest.pt.js.map +1 -1
  38. package/dist/zest.pt.min.js +1 -1
  39. package/dist/zest.ru.js +107 -3
  40. package/dist/zest.ru.js.map +1 -1
  41. package/dist/zest.ru.min.js +1 -1
  42. package/dist/zest.uk.js +107 -3
  43. package/dist/zest.uk.js.map +1 -1
  44. package/dist/zest.uk.min.js +1 -1
  45. package/dist/zest.zh.js +107 -3
  46. package/dist/zest.zh.js.map +1 -1
  47. package/dist/zest.zh.min.js +1 -1
  48. package/package.json +9 -2
  49. package/src/config/defaults.js +48 -0
  50. package/src/core/pattern-matcher.js +37 -0
  51. package/src/core-lifecycle.js +23 -4
  52. package/src/types/zest.d.ts +247 -0
  53. package/src/types/zest.headless.d.ts +211 -0
@@ -1 +1 @@
1
- {"version":3,"file":"zest.es.js","sources":["../src/core/security.js","../src/core/pattern-matcher.js","../src/core/cookie-interceptor.js","../src/core/storage-interceptor.js","../src/core/known-trackers.js","../src/core/script-blocker.js","../src/core/categories.js","../src/core/dnt.js","../src/integrations/consent-signals.js","../src/i18n/single/lang-es.js","../src/config/defaults.js","../src/config/parser.js","../src/storage/consent-store.js","../src/storage/events.js","../src/core-lifecycle.js","../src/ui/styles.js","../src/ui/banner.js","../src/ui/modal.js","../src/ui/widget.js","../src/index.js"],"sourcesContent":["/**\n * Security utilities - escaping, validation, and safe parsing helpers\n *\n * These helpers are used across UI components, URL/CSS validation, and\n * consent-cookie parsing to provide defense-in-depth against untrusted\n * config (CMS-driven, i18n-loaded, or attacker-supplied).\n */\n\nconst HTML_ESCAPE_MAP = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n '`': '&#96;'\n};\n\n/**\n * Escape a value for safe embedding in HTML text nodes and attribute values.\n * Accepts any value — non-strings are stringified first. null/undefined -> ''.\n */\nexport function escapeHTML(value) {\n if (value === null || value === undefined) return '';\n const str = typeof value === 'string' ? value : String(value);\n return str.replace(/[&<>\"'`]/g, (ch) => HTML_ESCAPE_MAP[ch]);\n}\n\n/**\n * Validate a URL — return the URL if it uses http:/https:/mailto:/tel:,\n * otherwise return null. Blocks javascript:, data:, vbscript:, file:, etc.\n */\nexport function safeUrl(url) {\n if (typeof url !== 'string' || url.length === 0) return null;\n const trimmed = url.trim();\n if (trimmed.length === 0) return null;\n\n // Relative URLs (no protocol) are safe — treat as same-origin path\n if (/^[/?#]/.test(trimmed)) return trimmed;\n\n // Check protocol explicitly, do NOT rely on URL parsing alone —\n // attackers may use whitespace/control characters to confuse parsers.\n const match = trimmed.match(/^([a-z][a-z0-9+.-]*):/i);\n if (!match) {\n // No protocol — treat as relative\n return trimmed;\n }\n\n const protocol = match[1].toLowerCase();\n if (protocol === 'http' || protocol === 'https' || protocol === 'mailto' || protocol === 'tel') {\n return trimmed;\n }\n return null;\n}\n\n/**\n * Validate a CSS color value. Accepts #rgb/#rrggbb/#rrggbbaa and a\n * small allowlist of CSS named colors and rgb()/rgba()/hsl()/hsla()\n * functional forms with numeric-only arguments.\n */\nconst NAMED_COLORS = new Set([\n 'transparent', 'black', 'white', 'red', 'green', 'blue', 'yellow',\n 'orange', 'purple', 'pink', 'gray', 'grey', 'brown', 'cyan', 'magenta',\n 'silver', 'gold', 'navy', 'teal', 'maroon', 'olive', 'lime', 'aqua',\n 'fuchsia', 'indigo', 'violet', 'crimson', 'coral', 'salmon', 'tomato'\n]);\n\nexport function safeColor(color) {\n if (typeof color !== 'string') return null;\n const trimmed = color.trim();\n\n if (/^#[0-9a-fA-F]{3,8}$/.test(trimmed)) return trimmed;\n if (NAMED_COLORS.has(trimmed.toLowerCase())) return trimmed;\n\n // Functional notations: only digits, dots, commas, %, whitespace between parens\n if (/^(rgb|rgba|hsl|hsla)\\(\\s*[\\d.,%\\s/]+\\s*\\)$/i.test(trimmed)) return trimmed;\n\n return null;\n}\n\n/**\n * Validate a regex pattern string. Rejects patterns that contain known\n * catastrophic-backtracking shapes (nested quantifiers). Compiles with\n * try/catch.\n *\n * Returns a RegExp on success, null on failure.\n */\nconst REDOS_PATTERNS = [\n /(\\([^)]*[+*][^)]*\\)|\\[[^\\]]*\\]|\\\\w|\\\\d|\\\\s)\\s*[+*]/, // nested quantifier\n /\\(\\?[=!][^)]*[+*][^)]*\\)[+*]/, // lookahead with quantifier, then quantifier\n];\n\nexport function safeRegExp(pattern, flags) {\n if (pattern instanceof RegExp) return pattern;\n if (typeof pattern !== 'string') return null;\n\n // Cap pattern length to limit compiled-regex state\n if (pattern.length > 500) return null;\n\n // Heuristic: reject obviously dangerous patterns\n for (const bad of REDOS_PATTERNS) {\n if (bad.test(pattern)) return null;\n }\n\n try {\n return new RegExp(pattern, flags);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Sanitize a consent-cookie payload. Only known category keys with\n * boolean values survive; prototype-polluting keys are stripped.\n */\nconst FORBIDDEN_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\n\nexport function sanitizeConsentPayload(raw, knownCategoryIds) {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return null;\n\n const result = {\n version: typeof raw.version === 'string' ? raw.version : null,\n timestamp: typeof raw.timestamp === 'number' && Number.isFinite(raw.timestamp) ? raw.timestamp : null,\n categories: {}\n };\n\n const cats = raw.categories;\n if (!cats || typeof cats !== 'object' || Array.isArray(cats)) return null;\n\n for (const key of knownCategoryIds) {\n if (FORBIDDEN_KEYS.has(key)) continue;\n if (Object.prototype.hasOwnProperty.call(cats, key)) {\n result.categories[key] = cats[key] === true;\n }\n }\n\n // essential is always true regardless of stored value\n if (knownCategoryIds.includes('essential')) {\n result.categories.essential = true;\n }\n\n return result;\n}\n\n/**\n * Invoke a user-supplied callback, swallowing and logging exceptions so\n * a misbehaving callback can't break the consent flow.\n */\nexport function safeInvoke(fn, ...args) {\n if (typeof fn !== 'function') return undefined;\n try {\n return fn(...args);\n } catch (e) {\n try {\n console.error('[Zest] User callback threw:', e);\n } catch (_) {\n /* no-op */\n }\n return undefined;\n }\n}\n\n/**\n * Strip comments and selector-level content from a customStyles string\n * while still allowing property/value declarations scoped under the\n * component selectors the author is targeting. We cannot fully sandbox\n * CSS without a parser, but we can at least neutralise the most\n * dangerous clickjacking vector (rules targeting Zest's own buttons).\n *\n * Returns the sanitized CSS string (possibly empty).\n */\nexport function sanitizeCustomStyles(css) {\n if (typeof css !== 'string' || css.length === 0) return '';\n\n // Hard cap on size to avoid runaway payloads\n if (css.length > 20000) return '';\n\n // Remove CSS comments (can hide payloads)\n let out = css.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n\n // Block at-rules that can load external resources or alter behavior\n out = out.replace(/@import\\s+[^;]+;?/gi, '');\n out = out.replace(/@charset\\s+[^;]+;?/gi, '');\n\n // Block url() values pointing outside of data: or https:\n out = out.replace(/url\\(\\s*(['\"]?)([^)'\"]+)\\1\\s*\\)/gi, (match, quote, value) => {\n const v = value.trim().toLowerCase();\n if (v.startsWith('https:') || v.startsWith('data:image/') || v.startsWith('/') || v.startsWith('#')) {\n return match;\n }\n return 'url(#)';\n });\n\n // Block selectors that target the built-in reject button, which could\n // be used to hide it for clickjacking consent bypass.\n out = out.replace(/\\.zest-btn--secondary\\s*\\{[^}]*\\}/gi, '');\n out = out.replace(/\\[data-action\\s*=\\s*[\"']reject-all[\"']\\]\\s*\\{[^}]*\\}/gi, '');\n out = out.replace(/\\[data-action\\s*=\\s*[\"']accept-all[\"']\\]\\s*\\{[^}]*\\}/gi, '');\n\n // Block expression() (ancient IE) and -moz-binding (ancient FF)\n out = out.replace(/expression\\s*\\([^)]*\\)/gi, '');\n out = out.replace(/-moz-binding\\s*:[^;}]*/gi, '');\n\n return out;\n}\n","/**\n * Pattern Matcher - Categorizes cookies and storage keys by pattern\n */\n\nimport { safeRegExp } from './security.js';\n\n/**\n * Default patterns for each category\n */\nexport const DEFAULT_PATTERNS = {\n essential: [\n /^zest_/,\n /^csrf/i,\n /^xsrf/i,\n /^session/i,\n /^__host-/i,\n /^__secure-/i\n ],\n functional: [\n /^lang/i,\n /^locale/i,\n /^theme/i,\n /^preferences/i,\n /^ui_/i\n ],\n analytics: [\n /^_ga/,\n /^_gid/,\n /^_gat/,\n /^_utm/,\n /^__utm/,\n /^plausible/i,\n /^_pk_/,\n /^matomo/i,\n /^_hj/,\n /^ajs_/\n ],\n marketing: [\n /^_fbp/,\n /^_fbc/,\n /^_gcl/,\n /^_ttp/,\n /^ads/i,\n /^doubleclick/i,\n /^__gads/,\n /^__gpi/,\n /^_pin_/,\n /^li_/\n ]\n};\n\nlet patterns = { ...DEFAULT_PATTERNS };\n\n/**\n * Set custom patterns. User-supplied strings are validated with safeRegExp,\n * which rejects catastrophic-backtracking shapes and syntax errors.\n * Invalid patterns are silently dropped with a console warning.\n */\nexport function setPatterns(customPatterns) {\n patterns = { ...DEFAULT_PATTERNS };\n if (!customPatterns || typeof customPatterns !== 'object') return;\n\n for (const [category, regexList] of Object.entries(customPatterns)) {\n if (!Array.isArray(regexList)) continue;\n\n const compiled = [];\n for (const p of regexList) {\n const re = safeRegExp(p);\n if (re) {\n compiled.push(re);\n } else {\n try {\n console.warn('[Zest] Rejected unsafe pattern:', p);\n } catch (_) { /* no-op */ }\n }\n }\n patterns[category] = compiled;\n }\n}\n\n/**\n * Get current patterns\n */\nexport function getPatterns() {\n return { ...patterns };\n}\n\n/**\n * Determine category for a cookie/storage key name\n * @param {string} name - Cookie or storage key name\n * @returns {string} Category ID (defaults to 'marketing' for unknown)\n */\nexport function getCategoryForName(name) {\n for (const [category, regexList] of Object.entries(patterns)) {\n if (regexList.some(regex => regex.test(name))) {\n return category;\n }\n }\n // Unknown items default to marketing (strictest)\n return 'marketing';\n}\n\n/**\n * Parse cookie string to extract name\n * @param {string} cookieString - Full cookie string (e.g., \"name=value; path=/\")\n * @returns {string|null} Cookie name or null\n */\nexport function parseCookieName(cookieString) {\n const match = cookieString.match(/^([^=]+)/);\n return match ? match[1].trim() : null;\n}\n","/**\n * Cookie Interceptor - Intercepts document.cookie operations\n */\n\nimport { getCategoryForName, parseCookieName } from './pattern-matcher.js';\n\n// Store original descriptor\nlet originalCookieDescriptor = null;\n\n// Upper bound on the number of queued cookies awaiting consent replay.\n// An unbounded queue is a memory-exhaustion DoS vector — a hostile\n// script could flood it with document.cookie writes.\nconst MAX_QUEUE_SIZE = 100;\n\n// Queue for blocked cookies\nconst cookieQueue = [];\n\n// Reference to consent checker function\nlet checkConsent = () => false;\n\n/**\n * Set the consent checker function\n */\nexport function setConsentChecker(fn) {\n checkConsent = fn;\n}\n\n/**\n * Get the original cookie descriptor\n */\nexport function getOriginalCookieDescriptor() {\n return originalCookieDescriptor;\n}\n\n/**\n * Get queued cookies\n */\nexport function getCookieQueue() {\n return [...cookieQueue];\n}\n\n/**\n * Clear the cookie queue\n */\nexport function clearCookieQueue() {\n cookieQueue.length = 0;\n}\n\n/**\n * Replay queued cookies for allowed categories\n */\nexport function replayCookies(allowedCategories) {\n const remaining = [];\n\n for (const item of cookieQueue) {\n if (allowedCategories.includes(item.category)) {\n // Set the cookie using original setter\n if (originalCookieDescriptor?.set) {\n originalCookieDescriptor.set.call(document, item.value);\n }\n } else {\n remaining.push(item);\n }\n }\n\n cookieQueue.length = 0;\n cookieQueue.push(...remaining);\n}\n\n/**\n * Start intercepting cookies\n */\nexport function interceptCookies() {\n // Store original\n originalCookieDescriptor = Object.getOwnPropertyDescriptor(Document.prototype, 'cookie');\n\n if (!originalCookieDescriptor) {\n console.warn('[Zest] Could not get cookie descriptor');\n return false;\n }\n\n Object.defineProperty(document, 'cookie', {\n get() {\n // Always allow reading\n return originalCookieDescriptor.get.call(document);\n },\n set(value) {\n const name = parseCookieName(value);\n if (!name) {\n return;\n }\n\n const category = getCategoryForName(name);\n\n if (checkConsent(category)) {\n // Consent given - set cookie\n originalCookieDescriptor.set.call(document, value);\n } else if (cookieQueue.length < MAX_QUEUE_SIZE) {\n // No consent - queue for later (capped to prevent DoS)\n cookieQueue.push({\n value,\n name,\n category,\n timestamp: Date.now()\n });\n }\n },\n // configurable: false prevents a later-loaded script from\n // overriding our descriptor and bypassing the interceptor.\n configurable: false\n });\n\n return true;\n}\n\n/**\n * Restore original cookie behavior.\n *\n * Note: after interceptCookies() has locked the descriptor with\n * configurable:false, this call will throw. The lock is intentional —\n * it stops a later-loaded script from unwinding the interceptor. If you\n * need a reset, call this before the first interceptCookies() call.\n */\nexport function restoreCookies() {\n if (!originalCookieDescriptor) return;\n try {\n Object.defineProperty(document, 'cookie', originalCookieDescriptor);\n } catch (_) {\n // Descriptor is locked; nothing we can do.\n }\n}\n","/**\n * Storage Interceptor - Intercepts localStorage and sessionStorage operations\n */\n\nimport { getCategoryForName } from './pattern-matcher.js';\n\n// Upper bound on queued operations awaiting consent replay — unbounded\n// growth would be a memory-exhaustion DoS vector.\nconst MAX_QUEUE_SIZE = 200;\n\n// Store originals\nlet originalLocalStorage = null;\nlet originalSessionStorage = null;\n\n// Queues for blocked operations\nconst localStorageQueue = [];\nconst sessionStorageQueue = [];\n\n// Reference to consent checker function\nlet checkConsent = () => false;\n\n/**\n * Set the consent checker function\n */\nexport function setConsentChecker(fn) {\n checkConsent = fn;\n}\n\n/**\n * Get original localStorage\n */\nexport function getOriginalLocalStorage() {\n return originalLocalStorage;\n}\n\n/**\n * Get original sessionStorage\n */\nexport function getOriginalSessionStorage() {\n return originalSessionStorage;\n}\n\n/**\n * Get queued localStorage operations\n */\nexport function getLocalStorageQueue() {\n return [...localStorageQueue];\n}\n\n/**\n * Get queued sessionStorage operations\n */\nexport function getSessionStorageQueue() {\n return [...sessionStorageQueue];\n}\n\n/**\n * Clear storage queues\n */\nexport function clearStorageQueues() {\n localStorageQueue.length = 0;\n sessionStorageQueue.length = 0;\n}\n\n/**\n * Create a proxy for storage API\n */\nfunction createStorageProxy(storage, queue, storageName) {\n return new Proxy(storage, {\n get(target, prop) {\n if (prop === 'setItem') {\n return (key, value) => {\n const category = getCategoryForName(key);\n\n if (checkConsent(category)) {\n target.setItem(key, value);\n } else if (queue.length < MAX_QUEUE_SIZE) {\n queue.push({\n key,\n value,\n category,\n timestamp: Date.now()\n });\n }\n };\n }\n\n // Allow all other operations\n const val = target[prop];\n return typeof val === 'function' ? val.bind(target) : val;\n }\n });\n}\n\n/**\n * Replay queued storage operations for allowed categories\n */\nexport function replayStorage(allowedCategories) {\n // Replay localStorage\n const remainingLocal = [];\n for (const item of localStorageQueue) {\n if (allowedCategories.includes(item.category)) {\n originalLocalStorage?.setItem(item.key, item.value);\n } else {\n remainingLocal.push(item);\n }\n }\n localStorageQueue.length = 0;\n localStorageQueue.push(...remainingLocal);\n\n // Replay sessionStorage\n const remainingSession = [];\n for (const item of sessionStorageQueue) {\n if (allowedCategories.includes(item.category)) {\n originalSessionStorage?.setItem(item.key, item.value);\n } else {\n remainingSession.push(item);\n }\n }\n sessionStorageQueue.length = 0;\n sessionStorageQueue.push(...remainingSession);\n}\n\n/**\n * Start intercepting storage APIs\n */\nexport function interceptStorage() {\n try {\n originalLocalStorage = window.localStorage;\n originalSessionStorage = window.sessionStorage;\n\n Object.defineProperty(window, 'localStorage', {\n value: createStorageProxy(originalLocalStorage, localStorageQueue, 'localStorage'),\n configurable: true,\n writable: false\n });\n\n Object.defineProperty(window, 'sessionStorage', {\n value: createStorageProxy(originalSessionStorage, sessionStorageQueue, 'sessionStorage'),\n configurable: true,\n writable: false\n });\n\n return true;\n } catch (e) {\n console.warn('[Zest] Could not intercept storage APIs:', e);\n return false;\n }\n}\n\n/**\n * Restore original storage APIs\n */\nexport function restoreStorage() {\n try {\n if (originalLocalStorage) {\n Object.defineProperty(window, 'localStorage', {\n value: originalLocalStorage,\n configurable: true,\n writable: false\n });\n }\n if (originalSessionStorage) {\n Object.defineProperty(window, 'sessionStorage', {\n value: originalSessionStorage,\n configurable: true,\n writable: false\n });\n }\n } catch (e) {\n console.warn('[Zest] Could not restore storage APIs:', e);\n }\n}\n","/**\n * Known Trackers - Lists of known tracking script domains by category\n */\n\n/**\n * Safe mode - Major, well-known trackers only\n */\nexport const SAFE_TRACKERS = {\n analytics: [\n 'google-analytics.com',\n 'www.google-analytics.com',\n 'analytics.google.com',\n 'googletagmanager.com',\n 'www.googletagmanager.com',\n 'plausible.io',\n 'cloudflareinsights.com',\n 'static.cloudflareinsights.com'\n ],\n marketing: [\n 'connect.facebook.net',\n 'www.facebook.com/tr',\n 'ads.google.com',\n 'www.googleadservices.com',\n 'googleads.g.doubleclick.net',\n 'pagead2.googlesyndication.com'\n ]\n};\n\n/**\n * Strict mode - Extended list including less common trackers\n */\nexport const STRICT_TRACKERS = {\n analytics: [\n ...SAFE_TRACKERS.analytics,\n 'analytics.tiktok.com',\n 'matomo.', // partial match\n 'hotjar.com',\n 'static.hotjar.com',\n 'script.hotjar.com',\n 'clarity.ms',\n 'www.clarity.ms',\n 'heapanalytics.com',\n 'cdn.heapanalytics.com',\n 'mixpanel.com',\n 'cdn.mxpnl.com',\n 'segment.com',\n 'cdn.segment.com',\n 'api.segment.io',\n 'fullstory.com',\n 'rs.fullstory.com',\n 'amplitude.com',\n 'cdn.amplitude.com',\n 'mouseflow.com',\n 'cdn.mouseflow.com',\n 'luckyorange.com',\n 'cdn.luckyorange.net',\n 'crazyegg.com',\n 'script.crazyegg.com'\n ],\n marketing: [\n ...SAFE_TRACKERS.marketing,\n 'snap.licdn.com',\n 'px.ads.linkedin.com',\n 'ads.linkedin.com',\n 'analytics.twitter.com',\n 'static.ads-twitter.com',\n 't.co',\n 'analytics.tiktok.com',\n 'ads.tiktok.com',\n 'sc-static.net', // Snapchat\n 'tr.snapchat.com',\n 'ct.pinterest.com',\n 'pintrk.com',\n 's.pinimg.com',\n 'widgets.pinterest.com',\n 'bat.bing.com',\n 'ads.yahoo.com',\n 'sp.analytics.yahoo.com',\n 'amazon-adsystem.com',\n 'z-na.amazon-adsystem.com',\n 'criteo.com',\n 'static.criteo.net',\n 'dis.criteo.com',\n 'taboola.com',\n 'cdn.taboola.com',\n 'trc.taboola.com',\n 'outbrain.com',\n 'widgets.outbrain.com',\n 'adroll.com',\n 's.adroll.com'\n ],\n functional: [\n 'cdn.onesignal.com',\n 'onesignal.com',\n 'pusher.com',\n 'js.pusher.com',\n 'intercom.io',\n 'widget.intercom.io',\n 'js.intercomcdn.com',\n 'crisp.chat',\n 'client.crisp.chat',\n 'cdn.livechatinc.com',\n 'livechatinc.com',\n 'tawk.to',\n 'embed.tawk.to',\n 'zendesk.com',\n 'static.zdassets.com'\n ]\n};\n\n/**\n * Check if a URL matches any tracker in the list.\n *\n * Matching is restricted to hostname (and, when the list entry contains\n * a path, the URL path prefix). A naive `fullUrl.includes(domain)` was\n * previously used, which would false-positive on e.g.\n * https://mysite.com/page?ref=google-analytics.com\n */\nexport function matchesTrackerList(url, trackerList) {\n let urlObj;\n try {\n urlObj = new URL(url);\n } catch (e) {\n return false;\n }\n const hostname = urlObj.hostname.toLowerCase();\n const path = urlObj.pathname.toLowerCase();\n\n for (const rawEntry of trackerList) {\n if (typeof rawEntry !== 'string') continue;\n const entry = rawEntry.toLowerCase();\n\n // Partial-prefix match on hostname (entry ends with a dot),\n // e.g. \"matomo.\" matches \"analytics.matomo.cloud\"\n if (entry.endsWith('.')) {\n const needle = entry.slice(0, -1);\n const segments = hostname.split('.');\n if (segments.some(seg => seg === needle) || hostname.startsWith(entry)) {\n return true;\n }\n continue;\n }\n\n // Entries containing a slash specify hostname + path prefix\n const slashIdx = entry.indexOf('/');\n if (slashIdx !== -1) {\n const entryHost = entry.slice(0, slashIdx);\n const entryPath = entry.slice(slashIdx);\n if ((hostname === entryHost || hostname.endsWith('.' + entryHost)) &&\n path.startsWith(entryPath)) {\n return true;\n }\n continue;\n }\n\n // Plain hostname: exact or subdomain match only\n if (hostname === entry || hostname.endsWith('.' + entry)) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Get category for a script URL based on tracker lists\n */\nexport function getCategoryForScript(url, mode = 'safe') {\n const trackers = mode === 'strict' ? STRICT_TRACKERS : SAFE_TRACKERS;\n\n for (const [category, domains] of Object.entries(trackers)) {\n if (matchesTrackerList(url, domains)) {\n return category;\n }\n }\n\n return null;\n}\n\n/**\n * Check if URL is third-party (different domain)\n */\nexport function isThirdParty(url) {\n try {\n const scriptHost = new URL(url).hostname;\n const pageHost = window.location.hostname;\n\n // Remove www. for comparison\n const normalizeHost = (h) => h.replace(/^www\\./, '');\n\n return normalizeHost(scriptHost) !== normalizeHost(pageHost);\n } catch (e) {\n return false;\n }\n}\n","/**\n * Script Blocker - Blocks and manages consent-gated scripts\n *\n * Modes:\n * - manual: Only blocks scripts with data-consent-category attribute\n * - safe: Manual + known major trackers (Google, Facebook, etc.)\n * - strict: Safe + extended tracker list (Hotjar, Mixpanel, etc.)\n * - doomsday: Block ALL third-party scripts\n */\n\nimport { getCategoryForScript, isThirdParty } from './known-trackers.js';\n\n// Categories the author has declared blockable. A script can self-label\n// into one of these, but not into 'essential' (a common bypass).\nconst BLOCKABLE_CATEGORIES = new Set(['functional', 'analytics', 'marketing']);\n\n// Upper bound on queued scripts awaiting consent replay — prevents a\n// hostile page from flooding the queue with <script> nodes.\nconst MAX_QUEUE_SIZE = 500;\n\n// Queue for blocked scripts — the authoritative source for replay,\n// snapshotting src/inline BEFORE any DOM mutation so later tampering\n// cannot hijack what gets executed.\nconst scriptQueue = [];\n\n// MutationObserver instance\nlet observer = null;\n\n// Current blocking mode\nlet blockingMode = 'safe';\n\n// Custom blocked domains (user-defined)\nlet customBlockedDomains = [];\n\n// Reference to consent checker function\nlet checkConsent = () => false;\n\n/**\n * Set the consent checker function\n */\nexport function setConsentChecker(fn) {\n checkConsent = fn;\n}\n\n/**\n * Set blocking mode\n */\nexport function setBlockingMode(mode) {\n blockingMode = mode;\n}\n\n/**\n * Set custom blocked domains\n */\nexport function setCustomBlockedDomains(domains) {\n customBlockedDomains = domains || [];\n}\n\n/**\n * Get queued scripts\n */\nexport function getScriptQueue() {\n return [...scriptQueue];\n}\n\n/**\n * Clear the script queue\n */\nexport function clearScriptQueue() {\n scriptQueue.length = 0;\n}\n\n/**\n * Check if script URL matches custom blocked domains\n */\nfunction matchesCustomDomains(url) {\n if (!url || customBlockedDomains.length === 0) return null;\n\n try {\n const hostname = new URL(url).hostname.toLowerCase();\n\n for (const entry of customBlockedDomains) {\n const domain = typeof entry === 'string' ? entry : entry.domain;\n const category = typeof entry === 'string' ? 'marketing' : (entry.category || 'marketing');\n\n if (hostname === domain || hostname.endsWith('.' + domain)) {\n return category;\n }\n }\n } catch (e) {\n // Invalid URL\n }\n\n return null;\n}\n\n/**\n * Determine if a script should be blocked and get its category.\n *\n * A self-applied 'essential' label is ignored — only explicit blockable\n * categories are accepted. That prevents a third-party script from\n * stamping itself with data-consent-category=\"essential\" to slip past\n * mode-based blocking.\n */\nfunction getScriptBlockCategory(script) {\n // Skip if script has data-zest-allow attribute (opt-out)\n if (script.hasAttribute('data-zest-allow')) {\n return null;\n }\n\n // 1. Check for explicit data-consent-category attribute.\n // Only honor values from the blockable set; 'essential' and unknown\n // values fall through to the other checks.\n const explicitCategory = script.getAttribute('data-consent-category');\n const explicitBlockable = explicitCategory && BLOCKABLE_CATEGORIES.has(explicitCategory)\n ? explicitCategory\n : null;\n\n const src = script.src;\n\n // No src = inline script, only block if explicitly tagged (blockable only)\n if (!src) {\n return explicitBlockable;\n }\n\n // 2. Check custom blocked domains\n const customCategory = matchesCustomDomains(src);\n\n // 3. Mode-based blocking\n let modeCategory = null;\n switch (blockingMode) {\n case 'manual':\n break;\n\n case 'safe':\n case 'strict':\n modeCategory = getCategoryForScript(src, blockingMode);\n break;\n\n case 'doomsday':\n if (isThirdParty(src)) {\n modeCategory = getCategoryForScript(src, 'strict') || 'marketing';\n }\n break;\n\n default:\n break;\n }\n\n // Use the strictest category among explicit/custom/mode decisions.\n // We collect all categories the script matches and pick the first\n // that appears in the blockable set (any match wins — but we prefer\n // the mode-assigned one since it's authoritative for third-party\n // trackers that try to self-label as 'functional').\n return modeCategory || customCategory || explicitBlockable;\n}\n\n/**\n * Block a script element\n */\nfunction blockScript(script) {\n // Skip already processed scripts\n if (script.hasAttribute('data-zest-processed')) {\n return false;\n }\n\n const category = getScriptBlockCategory(script);\n\n if (!category) {\n script.setAttribute('data-zest-processed', 'allowed');\n return false;\n }\n\n if (checkConsent(category)) {\n // Consent already given - allow script\n script.setAttribute('data-zest-processed', 'allowed');\n return false;\n }\n\n // Store script info for later execution. Snapshot the src/text BEFORE\n // mutating the DOM — this snapshot is the authoritative replay source\n // so later DOM tampering cannot hijack the replayed script URL.\n const scriptInfo = {\n category,\n src: script.src || '',\n inline: script.textContent,\n type: script.type,\n async: script.async,\n defer: script.defer,\n element: script,\n timestamp: Date.now()\n };\n\n // Mark as processed\n script.setAttribute('data-zest-processed', 'blocked');\n script.setAttribute('data-consent-category', category);\n\n // Disable the script\n script.type = 'text/plain';\n\n // Remove src to prevent loading. We no longer stash it on the element\n // (data-blocked-src was a tampering vector); scriptQueue is the single\n // source of truth for replay.\n if (script.src) {\n script.removeAttribute('src');\n }\n\n if (scriptQueue.length < MAX_QUEUE_SIZE) {\n scriptQueue.push(scriptInfo);\n }\n return true;\n}\n\n/**\n * Replay queued scripts for allowed categories.\n *\n * scriptQueue is the single source of truth for src and inline body —\n * we never re-read data-* attributes from the DOM (which an attacker\n * could have rewritten in the intervening time).\n */\nexport function replayScripts(allowedCategories) {\n const remaining = [];\n\n for (const scriptInfo of scriptQueue) {\n if (!allowedCategories.includes(scriptInfo.category)) {\n remaining.push(scriptInfo);\n continue;\n }\n\n const newScript = document.createElement('script');\n if (scriptInfo.src) {\n newScript.src = scriptInfo.src;\n } else if (scriptInfo.inline) {\n newScript.textContent = scriptInfo.inline;\n }\n if (scriptInfo.async) newScript.async = true;\n if (scriptInfo.defer) newScript.defer = true;\n if (scriptInfo.type && scriptInfo.type !== 'text/plain') {\n newScript.type = scriptInfo.type;\n }\n newScript.setAttribute('data-zest-processed', 'executed');\n newScript.setAttribute('data-consent-executed', 'true');\n\n // If the original element is still in the DOM, replace it in place\n // so execution order is preserved. Otherwise append to <head>.\n const original = scriptInfo.element;\n if (original && original.isConnected && original.parentNode) {\n original.parentNode.replaceChild(newScript, original);\n } else {\n document.head.appendChild(newScript);\n }\n }\n\n scriptQueue.length = 0;\n scriptQueue.push(...remaining);\n}\n\n/**\n * Process existing scripts in the DOM\n */\nfunction processExistingScripts() {\n const scripts = document.querySelectorAll('script:not([data-zest-processed])');\n scripts.forEach(blockScript);\n}\n\n/**\n * Handle mutations (new scripts added to DOM)\n */\nfunction handleMutations(mutations) {\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (node.nodeName === 'SCRIPT' && !node.hasAttribute('data-zest-processed')) {\n blockScript(node);\n }\n\n // Check child scripts\n if (node.querySelectorAll) {\n const scripts = node.querySelectorAll('script:not([data-zest-processed])');\n scripts.forEach(blockScript);\n }\n }\n }\n}\n\n/**\n * Start observing for new scripts\n */\nexport function startScriptBlocking(mode = 'safe', customDomains = []) {\n blockingMode = mode;\n customBlockedDomains = customDomains;\n\n // Process existing scripts\n processExistingScripts();\n\n // Watch for new scripts\n observer = new MutationObserver(handleMutations);\n\n observer.observe(document.documentElement, {\n childList: true,\n subtree: true\n });\n\n return true;\n}\n\n/**\n * Stop observing for new scripts\n */\nexport function stopScriptBlocking() {\n if (observer) {\n observer.disconnect();\n observer = null;\n }\n}\n","/**\n * Default consent categories\n */\nexport const DEFAULT_CATEGORIES = {\n essential: {\n id: 'essential',\n label: 'Essential',\n description: 'Required for the website to function properly. Cannot be disabled.',\n required: true,\n default: true\n },\n functional: {\n id: 'functional',\n label: 'Functional',\n description: 'Enable personalized features like language preferences and themes.',\n required: false,\n default: false\n },\n analytics: {\n id: 'analytics',\n label: 'Analytics',\n description: 'Help us understand how visitors interact with our website.',\n required: false,\n default: false\n },\n marketing: {\n id: 'marketing',\n label: 'Marketing',\n description: 'Used to deliver relevant advertisements and track campaign performance.',\n required: false,\n default: false\n }\n};\n\n/**\n * Default consent state\n */\nexport function getDefaultConsent() {\n return {\n essential: true,\n functional: false,\n analytics: false,\n marketing: false\n };\n}\n\n/**\n * Get all category IDs\n */\nexport function getCategoryIds() {\n return Object.keys(DEFAULT_CATEGORIES);\n}\n","/**\n * Do Not Track (DNT) Detection\n *\n * Detects browser DNT/GPC signals for privacy compliance\n */\n\n/**\n * Check if Do Not Track is enabled\n * Checks both DNT header and Global Privacy Control (GPC)\n */\nexport function isDoNotTrackEnabled() {\n if (typeof navigator === 'undefined') {\n return false;\n }\n\n // Check DNT (Do Not Track)\n // Values: \"1\" = enabled, \"0\" = disabled, null/undefined = not set\n const dnt = navigator.doNotTrack ||\n window.doNotTrack ||\n navigator.msDoNotTrack;\n\n if (dnt === '1' || dnt === 'yes' || dnt === true) {\n return true;\n }\n\n // Check GPC (Global Privacy Control) - newer standard\n // https://globalprivacycontrol.org/\n if (navigator.globalPrivacyControl === true) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Get DNT signal details for logging/debugging\n */\nexport function getDNTDetails() {\n if (typeof navigator === 'undefined') {\n return { enabled: false, source: null };\n }\n\n const dnt = navigator.doNotTrack ||\n window.doNotTrack ||\n navigator.msDoNotTrack;\n\n if (dnt === '1' || dnt === 'yes' || dnt === true) {\n return { enabled: true, source: 'dnt' };\n }\n\n if (navigator.globalPrivacyControl === true) {\n return { enabled: true, source: 'gpc' };\n }\n\n return { enabled: false, source: null };\n}\n","/**\n * Consent Signals - Optional vendor consent mode integrations\n *\n * Pushes consent state to Google Consent Mode v2 and/or Microsoft UET\n * Consent Mode when enabled via config.\n */\n\n/**\n * Map Zest consent state to Google Consent Mode v2 signals\n */\nfunction toGoogleSignals(consent) {\n const g = (val) => val ? 'granted' : 'denied';\n return {\n ad_storage: g(consent.marketing),\n ad_user_data: g(consent.marketing),\n ad_personalization: g(consent.marketing),\n analytics_storage: g(consent.analytics),\n functionality_storage: 'granted', // essential is always true\n personalization_storage: g(consent.functional)\n };\n}\n\n/**\n * Push consent signal to Google via gtag or dataLayer fallback.\n * Uses a local function to preserve the `arguments` object shape\n * that gtag/dataLayer expects (not an array).\n */\nfunction pushGoogle(type, signals) {\n window.dataLayer = window.dataLayer || [];\n if (typeof window.gtag === 'function') {\n window.gtag('consent', type, signals);\n } else {\n function gtagFallback() { window.dataLayer.push(arguments); }\n gtagFallback('consent', type, signals);\n }\n}\n\n/**\n * Map Zest consent state to Microsoft UET signal.\n * Microsoft UET only exposes ad_storage.\n */\nfunction toMicrosoftSignals(consent) {\n return { ad_storage: consent.marketing ? 'granted' : 'denied' };\n}\n\n/**\n * Push consent signal to Microsoft UET\n */\nfunction pushMicrosoft(type, signals) {\n window.uetq = window.uetq || [];\n window.uetq.push('consent', type, signals);\n}\n\n/**\n * Apply consent signals to enabled vendor integrations.\n *\n * @param {Object} consent Current Zest consent state\n * @param {Object} config Merged Zest config\n * @param {boolean} isDefault true on first call (pushes 'default'), false for updates\n */\nexport function applyConsentSignals(consent, config, isDefault) {\n const type = isDefault ? 'default' : 'update';\n\n if (config.consentModeGoogle) {\n pushGoogle(type, toGoogleSignals(consent));\n }\n\n if (config.consentModeMicrosoft) {\n pushMicrosoft(type, toMicrosoftSignals(consent));\n }\n}\n","/**\n * ES only translation - auto-generated\n * Do not edit manually, run: npm run build\n */\nexport const translations = {\n es: {\n \"labels\": {\n \"banner\": {\n \"title\": \"Valoramos tu privacidad\",\n \"description\": \"Utilizamos cookies para mejorar tu experiencia de navegación, ofrecer contenido personalizado y analizar nuestro tráfico. Al hacer clic en \\\"Aceptar todo\\\", consientes el uso de cookies.\",\n \"acceptAll\": \"Aceptar todo\",\n \"rejectAll\": \"Rechazar todo\",\n \"settings\": \"Configuración\"\n },\n \"modal\": {\n \"title\": \"Configuración de privacidad\",\n \"description\": \"Gestiona tus preferencias de cookies. Puedes activar o desactivar diferentes tipos de cookies a continuación.\",\n \"save\": \"Guardar preferencias\",\n \"acceptAll\": \"Aceptar todo\",\n \"rejectAll\": \"Rechazar todo\"\n },\n \"widget\": {\n \"label\": \"Configuración de cookies\"\n }\n },\n \"categories\": {\n \"essential\": {\n \"label\": \"Esenciales\",\n \"description\": \"Necesarias para el funcionamiento del sitio web. No se pueden desactivar.\"\n },\n \"functional\": {\n \"label\": \"Funcionales\",\n \"description\": \"Permiten funciones personalizadas como preferencias de idioma y temas.\"\n },\n \"analytics\": {\n \"label\": \"Analíticas\",\n \"description\": \"Nos ayudan a entender cómo los visitantes interactúan con nuestro sitio web.\"\n },\n \"marketing\": {\n \"label\": \"Marketing\",\n \"description\": \"Se utilizan para mostrar anuncios relevantes y medir el rendimiento de las campañas.\"\n }\n }\n }\n};\n\nexport const supportedLanguages = ['es'];\n\nexport function detectLanguage() {\n return 'es';\n}\n\nexport function getTranslation() {\n return translations.es;\n}\n","/**\n * Default configuration values\n */\n\nimport { DEFAULT_CATEGORIES } from '../core/categories.js';\nimport { detectLanguage, getTranslation } from '../i18n/translations.js';\n\nexport const DEFAULTS = {\n // Language: 'auto' | 'en' | 'de' | 'es' | 'fr' | 'it' | 'pt' | 'nl' | 'pl' | 'uk' | 'ru' | 'ja' | 'zh'\n lang: 'auto',\n\n // UI positioning\n position: 'bottom', // 'bottom' | 'bottom-left' | 'bottom-right' | 'top'\n\n // Theming\n theme: 'auto', // 'light' | 'dark' | 'auto'\n accentColor: '#0071e3',\n\n // Categories\n categories: DEFAULT_CATEGORIES,\n\n // UI Labels\n labels: {\n banner: {\n title: 'We value your privacy',\n description: 'We use cookies to enhance your browsing experience, serve personalized content, and analyze our traffic. By clicking \"Accept All\", you consent to our use of cookies.',\n acceptAll: 'Accept All',\n rejectAll: 'Reject All',\n settings: 'Settings'\n },\n modal: {\n title: 'Privacy Settings',\n description: 'Manage your cookie preferences. You can enable or disable different types of cookies below.',\n save: 'Save Preferences',\n acceptAll: 'Accept All',\n rejectAll: 'Reject All'\n },\n widget: {\n label: 'Cookie Settings'\n }\n },\n\n // Behavior\n autoInit: true,\n showWidget: true,\n expiration: 365,\n\n // Do Not Track / Global Privacy Control\n // respectDNT: true = respect DNT/GPC signals\n // dntBehavior: 'reject' | 'preselect' | 'ignore'\n // - 'reject': auto-reject non-essential, don't show banner\n // - 'preselect': show banner with non-essential unchecked (same as normal)\n // - 'ignore': ignore DNT completely\n respectDNT: true,\n dntBehavior: 'reject',\n\n // Custom styles to inject into Shadow DOM\n customStyles: '',\n\n // Vendor consent mode integrations (optional)\n consentModeGoogle: false,\n consentModeMicrosoft: false,\n\n // Blocking mode: 'manual' | 'safe' | 'strict' | 'doomsday'\n mode: 'safe',\n\n // Custom domains to block (in addition to mode-based blocking)\n blockedDomains: [], // days\n\n // Links\n policyUrl: null,\n imprintUrl: null,\n\n // Callbacks\n callbacks: {\n onAccept: null,\n onReject: null,\n onChange: null,\n onReady: null\n }\n};\n\n/**\n * Merge user config with defaults (deep merge)\n */\nexport function mergeConfig(userConfig) {\n const config = { ...DEFAULTS };\n\n if (!userConfig) {\n userConfig = {};\n }\n\n // Simple properties\n const simpleKeys = ['lang', 'position', 'theme', 'accentColor', 'autoInit', 'showWidget', 'expiration', 'policyUrl', 'imprintUrl', 'customStyles', 'mode', 'blockedDomains', 'respectDNT', 'dntBehavior', 'consentModeGoogle', 'consentModeMicrosoft'];\n for (const key of simpleKeys) {\n if (userConfig[key] !== undefined) {\n config[key] = userConfig[key];\n }\n }\n\n // Detect language and get translations\n const detectedLang = detectLanguage(config.lang);\n config.lang = detectedLang;\n const translation = getTranslation(detectedLang);\n\n // Deep merge labels (translation < user config)\n const translationLabels = translation.labels || {};\n const userLabels = userConfig.labels || {};\n config.labels = {\n banner: {\n ...DEFAULTS.labels.banner,\n ...translationLabels.banner,\n ...userLabels.banner\n },\n modal: {\n ...DEFAULTS.labels.modal,\n ...translationLabels.modal,\n ...userLabels.modal\n },\n widget: {\n ...DEFAULTS.labels.widget,\n ...translationLabels.widget,\n ...userLabels.widget\n }\n };\n\n // Deep merge categories (translation < user config)\n const translationCategories = translation.categories || {};\n const userCategories = userConfig.categories || {};\n config.categories = { ...DEFAULTS.categories };\n for (const key of Object.keys(DEFAULTS.categories)) {\n config.categories[key] = {\n ...DEFAULTS.categories[key],\n ...translationCategories[key],\n ...userCategories[key]\n };\n }\n\n // Merge callbacks\n if (userConfig.callbacks) {\n config.callbacks = { ...DEFAULTS.callbacks, ...userConfig.callbacks };\n }\n\n // Patterns (for pattern matcher)\n if (userConfig.patterns) {\n config.patterns = userConfig.patterns;\n }\n\n return config;\n}\n","/**\n * Configuration Parser - Reads config from various sources\n */\n\nimport { mergeConfig } from './defaults.js';\n\n/**\n * Parse data attributes from script tag\n */\nfunction parseDataAttributes() {\n // Find the Zest script tag\n const script = document.currentScript ||\n document.querySelector('script[data-zest]') ||\n document.querySelector('script[src*=\"zest\"]');\n\n if (!script) {\n return {};\n }\n\n const config = {};\n\n // Position\n const position = script.getAttribute('data-position');\n if (position) config.position = position;\n\n // Theme\n const theme = script.getAttribute('data-theme');\n if (theme) config.theme = theme;\n\n // Accent color\n const accent = script.getAttribute('data-accent') || script.getAttribute('data-accent-color');\n if (accent) config.accentColor = accent;\n\n // Policy URL\n const policyUrl = script.getAttribute('data-policy-url') || script.getAttribute('data-privacy-url');\n if (policyUrl) config.policyUrl = policyUrl;\n\n // Imprint URL\n const imprintUrl = script.getAttribute('data-imprint-url');\n if (imprintUrl) config.imprintUrl = imprintUrl;\n\n // Show widget\n const showWidget = script.getAttribute('data-show-widget');\n if (showWidget !== null) config.showWidget = showWidget !== 'false';\n\n // Auto init\n const autoInit = script.getAttribute('data-auto-init');\n if (autoInit !== null) config.autoInit = autoInit !== 'false';\n\n // Expiration\n const expiration = script.getAttribute('data-expiration');\n if (expiration) config.expiration = parseInt(expiration, 10);\n\n // Consent mode integrations\n const consentModeGoogle = script.getAttribute('data-consent-mode-google');\n if (consentModeGoogle !== null) config.consentModeGoogle = consentModeGoogle !== 'false';\n\n const consentModeMicrosoft = script.getAttribute('data-consent-mode-microsoft');\n if (consentModeMicrosoft !== null) config.consentModeMicrosoft = consentModeMicrosoft !== 'false';\n\n return config;\n}\n\n/**\n * Parse window.ZestConfig object\n */\nfunction parseWindowConfig() {\n if (typeof window !== 'undefined' && window.ZestConfig) {\n return window.ZestConfig;\n }\n return {};\n}\n\n/**\n * Get final merged configuration\n * Priority: data attributes > window.ZestConfig > defaults\n */\nexport function getConfig() {\n const windowConfig = parseWindowConfig();\n const dataConfig = parseDataAttributes();\n\n // Merge: defaults < windowConfig < dataConfig\n return mergeConfig({\n ...windowConfig,\n ...dataConfig\n });\n}\n\n/**\n * Update configuration at runtime\n */\nlet currentConfig = null;\n\nexport function setConfig(config) {\n currentConfig = mergeConfig(config);\n return currentConfig;\n}\n\nexport function getCurrentConfig() {\n if (!currentConfig) {\n currentConfig = getConfig();\n }\n return currentConfig;\n}\n","/**\n * Consent Store - Manages consent state persistence\n */\n\nimport { getDefaultConsent, getCategoryIds } from '../core/categories.js';\nimport { getOriginalCookieDescriptor } from '../core/cookie-interceptor.js';\nimport { sanitizeConsentPayload } from '../core/security.js';\n\nconst COOKIE_NAME = 'zest_consent';\nconst CONSENT_VERSION = '1.0';\n\n/**\n * Return the Secure flag fragment when running over HTTPS, empty otherwise.\n * On HTTPS sites, omitting Secure lets the cookie leak over plain HTTP.\n */\nfunction secureAttribute() {\n try {\n return typeof location !== 'undefined' && location.protocol === 'https:'\n ? '; Secure'\n : '';\n } catch (_) {\n return '';\n }\n}\n\n// Current consent state\nlet consent = null;\n\n/**\n * Get the original cookie setter (bypasses interception)\n */\nfunction setRawCookie(value) {\n const descriptor = getOriginalCookieDescriptor();\n if (descriptor?.set) {\n descriptor.set.call(document, value);\n } else {\n // Fallback if interceptor not initialized yet\n document.cookie = value;\n }\n}\n\n/**\n * Get the original cookie getter\n */\nfunction getRawCookie() {\n const descriptor = getOriginalCookieDescriptor();\n if (descriptor?.get) {\n return descriptor.get.call(document);\n }\n return document.cookie;\n}\n\n/**\n * Load consent from cookie.\n *\n * The parsed cookie is validated against the expected schema via\n * sanitizeConsentPayload — only known category keys with boolean values\n * survive, so a tampered cookie can't inject prototype-polluting props\n * or unexpected category shapes.\n */\nexport function loadConsent() {\n try {\n const cookies = getRawCookie();\n const match = cookies.match(new RegExp(`${COOKIE_NAME}=([^;]+)`));\n\n if (match) {\n const raw = JSON.parse(decodeURIComponent(match[1]));\n const clean = sanitizeConsentPayload(raw, getCategoryIds());\n if (clean && clean.categories) {\n consent = { ...getDefaultConsent(), ...clean.categories };\n return { ...consent };\n }\n }\n } catch (e) {\n // Invalid or missing cookie\n }\n\n consent = getDefaultConsent();\n return { ...consent };\n}\n\n/**\n * Save consent to cookie\n */\nexport function saveConsent(expirationDays = 365) {\n if (!consent) {\n consent = getDefaultConsent();\n }\n\n const data = {\n version: CONSENT_VERSION,\n timestamp: Date.now(),\n categories: consent\n };\n\n const expires = new Date(Date.now() + expirationDays * 24 * 60 * 60 * 1000).toUTCString();\n const cookieValue = `${COOKIE_NAME}=${encodeURIComponent(JSON.stringify(data))}; expires=${expires}; path=/; SameSite=Lax${secureAttribute()}`;\n\n setRawCookie(cookieValue);\n}\n\n/**\n * Get current consent state\n */\nexport function getConsent() {\n if (!consent) {\n consent = loadConsent();\n }\n return { ...consent };\n}\n\n/**\n * Update consent state\n */\nexport function updateConsent(newConsent, expirationDays = 365) {\n const previous = consent ? { ...consent } : getDefaultConsent();\n\n consent = {\n essential: true, // Always true\n functional: !!newConsent.functional,\n analytics: !!newConsent.analytics,\n marketing: !!newConsent.marketing\n };\n\n saveConsent(expirationDays);\n\n return { current: { ...consent }, previous };\n}\n\n/**\n * Check if specific category is allowed\n */\nexport function hasConsent(category) {\n if (!consent) {\n consent = loadConsent();\n }\n return consent[category] === true;\n}\n\n/**\n * Accept all categories\n */\nexport function acceptAll(expirationDays = 365) {\n return updateConsent({\n essential: true,\n functional: true,\n analytics: true,\n marketing: true\n }, expirationDays);\n}\n\n/**\n * Reject all (except essential)\n */\nexport function rejectAll(expirationDays = 365) {\n return updateConsent({\n essential: true,\n functional: false,\n analytics: false,\n marketing: false\n }, expirationDays);\n}\n\n/**\n * Reset consent (clear cookie)\n */\nexport function resetConsent() {\n setRawCookie(`${COOKIE_NAME}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; SameSite=Lax${secureAttribute()}`);\n consent = null;\n}\n\n/**\n * Check if consent has been given (any decision made)\n */\nexport function hasConsentDecision() {\n try {\n const cookies = getRawCookie();\n return cookies.includes(COOKIE_NAME);\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Get consent proof for compliance\n */\nexport function getConsentProof() {\n try {\n const cookies = getRawCookie();\n const match = cookies.match(new RegExp(`${COOKIE_NAME}=([^;]+)`));\n\n if (match) {\n const raw = JSON.parse(decodeURIComponent(match[1]));\n return sanitizeConsentPayload(raw, getCategoryIds());\n }\n } catch (e) {\n // Invalid cookie\n }\n\n return null;\n}\n","/**\n * Events - Custom event dispatching for consent changes\n */\n\n// Event names\nexport const EVENTS = {\n READY: 'zest:ready',\n CONSENT: 'zest:consent',\n REJECT: 'zest:reject',\n CHANGE: 'zest:change',\n SHOW: 'zest:show',\n HIDE: 'zest:hide'\n};\n\n/**\n * Dispatch a custom event\n */\nexport function emit(eventName, detail = {}) {\n const event = new CustomEvent(eventName, {\n detail,\n bubbles: true,\n cancelable: true\n });\n\n document.dispatchEvent(event);\n return event;\n}\n\n/**\n * Emit ready event\n */\nexport function emitReady(consent) {\n return emit(EVENTS.READY, { consent });\n}\n\n/**\n * Emit consent event (user accepted)\n */\nexport function emitConsent(consent, previous) {\n return emit(EVENTS.CONSENT, { consent, previous });\n}\n\n/**\n * Emit reject event (user rejected all)\n */\nexport function emitReject(consent) {\n return emit(EVENTS.REJECT, { consent });\n}\n\n/**\n * Emit change event (any consent change)\n */\nexport function emitChange(consent, previous) {\n return emit(EVENTS.CHANGE, { consent, previous });\n}\n\n/**\n * Emit show event (banner/modal shown)\n */\nexport function emitShow(type = 'banner') {\n return emit(EVENTS.SHOW, { type });\n}\n\n/**\n * Emit hide event (banner/modal hidden)\n */\nexport function emitHide(type = 'banner') {\n return emit(EVENTS.HIDE, { type });\n}\n\n/**\n * Subscribe to an event\n */\nexport function on(eventName, callback) {\n document.addEventListener(eventName, callback);\n return () => document.removeEventListener(eventName, callback);\n}\n\n/**\n * Subscribe to an event once\n */\nexport function once(eventName, callback) {\n document.addEventListener(eventName, callback, { once: true });\n}\n","/**\n * Core lifecycle - UI-agnostic initialization and consent actions.\n *\n * This module contains everything the main entry (with UI) and the\n * headless entry (no UI) share: interceptor setup, consent load/save,\n * replay, DNT handling, and the events/callbacks fan-out. It intentionally\n * does NOT import anything from `./ui/*` so tree-shakers can drop the UI\n * bundle entirely when only the headless API is used.\n */\n\nimport { interceptCookies, setConsentChecker as setCookieChecker, replayCookies } from './core/cookie-interceptor.js';\nimport { interceptStorage, setConsentChecker as setStorageChecker, replayStorage } from './core/storage-interceptor.js';\nimport { startScriptBlocking, setConsentChecker as setScriptChecker, replayScripts } from './core/script-blocker.js';\nimport { setPatterns } from './core/pattern-matcher.js';\nimport { getCategoryIds } from './core/categories.js';\nimport { isDoNotTrackEnabled } from './core/dnt.js';\nimport { safeInvoke } from './core/security.js';\n\nimport { applyConsentSignals } from './integrations/consent-signals.js';\n\nimport { setConfig } from './config/parser.js';\n\nimport {\n loadConsent,\n hasConsent,\n updateConsent,\n acceptAll as storeAcceptAll,\n rejectAll as storeRejectAll,\n resetConsent,\n hasConsentDecision\n} from './storage/consent-store.js';\nimport { emitReady, emitConsent, emitReject, emitChange } from './storage/events.js';\n\nlet initialized = false;\nlet currentConfig = null;\n\nfunction checkConsent(category) {\n return hasConsent(category);\n}\n\nfunction replayAll(categories) {\n replayCookies(categories);\n replayStorage(categories);\n replayScripts(categories);\n}\n\n/**\n * Run the non-UI half of init. Returns a snapshot the caller (UI or\n * headless) can use to decide what to do next.\n */\nexport function coreInit(userConfig = {}) {\n if (initialized) {\n return {\n alreadyInitialized: true,\n config: currentConfig,\n consent: loadConsent(),\n hasDecision: hasConsentDecision(),\n dntApplied: false\n };\n }\n\n currentConfig = setConfig(userConfig);\n\n // Push default-denied state to vendor consent mode APIs BEFORE any\n // third-party script has a chance to fire.\n applyConsentSignals(\n { essential: true, functional: false, analytics: false, marketing: false },\n currentConfig,\n true\n );\n\n if (currentConfig.patterns) {\n setPatterns(currentConfig.patterns);\n }\n\n setCookieChecker(checkConsent);\n setStorageChecker(checkConsent);\n setScriptChecker(checkConsent);\n\n interceptCookies();\n interceptStorage();\n startScriptBlocking(currentConfig.mode, currentConfig.blockedDomains);\n\n const consent = loadConsent();\n initialized = true;\n\n if (hasConsentDecision()) {\n applyConsentSignals(consent, currentConfig, false);\n }\n\n // DNT / GPC handling — if the user signalled opt-out at the browser\n // level and the site opts to respect it, auto-reject before the UI\n // layer ever runs.\n const dntEnabled = isDoNotTrackEnabled();\n let dntApplied = false;\n\n if (dntEnabled && currentConfig.respectDNT && currentConfig.dntBehavior !== 'ignore') {\n if (currentConfig.dntBehavior === 'reject' && !hasConsentDecision()) {\n const result = storeRejectAll(currentConfig.expiration);\n dntApplied = true;\n applyConsentSignals(result.current, currentConfig, false);\n emitReject(result.current);\n emitChange(result.current, result.previous);\n safeInvoke(currentConfig.callbacks?.onReject);\n safeInvoke(currentConfig.callbacks?.onChange, result.current);\n }\n }\n\n emitReady(consent);\n safeInvoke(currentConfig.callbacks?.onReady, consent);\n\n return {\n alreadyInitialized: false,\n config: currentConfig,\n consent,\n hasDecision: hasConsentDecision(),\n dntApplied\n };\n}\n\n/**\n * Accept all categories, replay queued items, fire events + callbacks.\n * Returns { current, previous } or null if not yet initialized.\n */\nexport function coreAcceptAll() {\n if (!initialized) return null;\n const result = storeAcceptAll(currentConfig.expiration);\n applyConsentSignals(result.current, currentConfig, false);\n replayAll(getCategoryIds());\n emitConsent(result.current, result.previous);\n emitChange(result.current, result.previous);\n safeInvoke(currentConfig.callbacks?.onAccept, result.current);\n safeInvoke(currentConfig.callbacks?.onChange, result.current);\n return result;\n}\n\n/**\n * Reject all non-essential categories, fire events + callbacks.\n */\nexport function coreRejectAll() {\n if (!initialized) return null;\n const result = storeRejectAll(currentConfig.expiration);\n applyConsentSignals(result.current, currentConfig, false);\n emitReject(result.current);\n emitChange(result.current, result.previous);\n safeInvoke(currentConfig.callbacks?.onReject);\n safeInvoke(currentConfig.callbacks?.onChange, result.current);\n return result;\n}\n\n/**\n * Save custom selections and replay only the newly-allowed categories.\n */\nexport function coreUpdateConsent(selections) {\n if (!initialized) return null;\n const result = updateConsent(selections, currentConfig.expiration);\n applyConsentSignals(result.current, currentConfig, false);\n\n const newlyAllowed = Object.keys(result.current).filter(\n (cat) => result.current[cat] && !result.previous[cat]\n );\n if (newlyAllowed.length > 0) {\n replayAll(newlyAllowed);\n }\n\n const hasNonEssential = Object.entries(selections || {}).some(\n ([cat, val]) => cat !== 'essential' && val\n );\n if (hasNonEssential) {\n emitConsent(result.current, result.previous);\n } else {\n emitReject(result.current);\n }\n emitChange(result.current, result.previous);\n safeInvoke(currentConfig.callbacks?.onChange, result.current);\n return result;\n}\n\n/**\n * Clear the consent cookie. The caller is responsible for any UI reset.\n */\nexport function coreReset() {\n resetConsent();\n}\n\nexport function isInitialized() {\n return initialized;\n}\n\nexport function getActiveConfig() {\n return currentConfig;\n}\n","/**\n * Styles - Shadow DOM encapsulated CSS with theming\n */\n\nimport { safeColor, sanitizeCustomStyles } from '../core/security.js';\n\nconst DEFAULT_ACCENT = '#4F46E5';\n\n/**\n * Generate CSS with custom properties\n */\nexport function generateStyles(config) {\n // Only accept colors that pass strict validation — an unvalidated\n // value is a CSS-injection vector (e.g. `red; } * { display:none; /*`).\n const accentColor = safeColor(config.accentColor) || DEFAULT_ACCENT;\n const customCss = sanitizeCustomStyles(config.customStyles);\n\n return `\n:host {\n --zest-accent: ${accentColor};\n --zest-accent-hover: ${adjustColor(accentColor, -15)};\n --zest-bg: #ffffff;\n --zest-bg-secondary: #f3f4f6;\n --zest-text: #1f2937;\n --zest-text-secondary: #6b7280;\n --zest-border: #e5e7eb;\n --zest-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);\n --zest-radius: 12px;\n --zest-radius-sm: 8px;\n --zest-font: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n\n font-family: var(--zest-font);\n font-size: 14px;\n line-height: 1.5;\n color: var(--zest-text);\n box-sizing: border-box;\n}\n\n:host([data-theme=\"dark\"]) {\n --zest-bg: #1f2937;\n --zest-bg-secondary: #374151;\n --zest-text: #f9fafb;\n --zest-text-secondary: #9ca3af;\n --zest-border: #4b5563;\n --zest-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.4), 0 8px 10px -6px rgba(0, 0, 0, 0.3);\n}\n\n@media (prefers-color-scheme: dark) {\n :host([data-theme=\"auto\"]) {\n --zest-bg: #1f2937;\n --zest-bg-secondary: #374151;\n --zest-text: #f9fafb;\n --zest-text-secondary: #9ca3af;\n --zest-border: #4b5563;\n --zest-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.4), 0 8px 10px -6px rgba(0, 0, 0, 0.3);\n }\n}\n\n*, *::before, *::after {\n box-sizing: border-box;\n}\n\n/* Banner */\n.zest-banner {\n position: fixed;\n z-index: 999999;\n max-width: 480px;\n padding: 20px;\n background: var(--zest-bg);\n border-radius: var(--zest-radius);\n box-shadow: var(--zest-shadow);\n animation: zest-slide-in 0.3s ease-out;\n}\n\n.zest-banner--bottom {\n bottom: 20px;\n left: 50%;\n transform: translateX(-50%);\n}\n\n.zest-banner--bottom-left {\n bottom: 20px;\n left: 20px;\n}\n\n.zest-banner--bottom-right {\n bottom: 20px;\n right: 20px;\n}\n\n.zest-banner--top {\n top: 20px;\n left: 50%;\n transform: translateX(-50%);\n}\n\n@keyframes zest-slide-in {\n from {\n opacity: 0;\n transform: translateX(-50%) translateY(20px);\n }\n to {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n }\n}\n\n.zest-banner--bottom-left {\n animation-name: zest-slide-in-left;\n}\n\n@keyframes zest-slide-in-left {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.zest-banner--bottom-right {\n animation-name: zest-slide-in-right;\n}\n\n@keyframes zest-slide-in-right {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .zest-banner,\n .zest-modal {\n animation: none;\n }\n}\n\n.zest-banner__title {\n margin: 0 0 8px 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--zest-text);\n}\n\n.zest-banner__description {\n margin: 0 0 16px 0;\n font-size: 14px;\n color: var(--zest-text-secondary);\n}\n\n.zest-banner__buttons {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n/* Buttons */\n.zest-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 10px 16px;\n font-size: 14px;\n font-weight: 500;\n font-family: inherit;\n border: none;\n border-radius: var(--zest-radius-sm);\n cursor: pointer;\n transition: background-color 0.15s ease, transform 0.1s ease;\n}\n\n.zest-btn:hover {\n transform: translateY(-1px);\n}\n\n.zest-btn:active {\n transform: translateY(0);\n}\n\n.zest-btn:focus-visible {\n outline: 2px solid var(--zest-accent);\n outline-offset: 2px;\n}\n\n.zest-btn--primary {\n background: var(--zest-accent);\n color: #ffffff;\n}\n\n.zest-btn--primary:hover {\n background: var(--zest-accent-hover);\n}\n\n.zest-btn--secondary {\n background: var(--zest-bg-secondary);\n color: var(--zest-text);\n}\n\n.zest-btn--secondary:hover {\n background: var(--zest-border);\n}\n\n.zest-btn--ghost {\n background: transparent;\n color: var(--zest-text-secondary);\n}\n\n.zest-btn--ghost:hover {\n background: var(--zest-bg-secondary);\n color: var(--zest-text);\n}\n\n/* Modal */\n.zest-modal-overlay {\n position: fixed;\n inset: 0;\n z-index: 999998;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px;\n background: rgba(0, 0, 0, 0.5);\n animation: zest-fade-in 0.2s ease-out;\n}\n\n@keyframes zest-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.zest-modal {\n width: 100%;\n max-width: 500px;\n max-height: 90vh;\n overflow-y: auto;\n background: var(--zest-bg);\n border-radius: var(--zest-radius);\n box-shadow: var(--zest-shadow);\n animation: zest-modal-in 0.3s ease-out;\n}\n\n@keyframes zest-modal-in {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n.zest-modal__header {\n padding: 20px 20px 0;\n}\n\n.zest-modal__title {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--zest-text);\n}\n\n.zest-modal__description {\n margin: 0;\n font-size: 14px;\n color: var(--zest-text-secondary);\n}\n\n.zest-modal__body {\n padding: 20px;\n}\n\n.zest-modal__footer {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding: 0 20px 20px;\n}\n\n/* Categories */\n.zest-category {\n padding: 16px;\n margin-bottom: 12px;\n background: var(--zest-bg-secondary);\n border-radius: var(--zest-radius-sm);\n}\n\n.zest-category:last-child {\n margin-bottom: 0;\n}\n\n.zest-category__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n}\n\n.zest-category__info {\n flex: 1;\n}\n\n.zest-category__label {\n display: block;\n font-size: 14px;\n font-weight: 600;\n color: var(--zest-text);\n}\n\n.zest-category__description {\n margin: 4px 0 0;\n font-size: 13px;\n color: var(--zest-text-secondary);\n}\n\n/* Toggle Switch */\n.zest-toggle {\n position: relative;\n width: 44px;\n height: 24px;\n flex-shrink: 0;\n}\n\n.zest-toggle__input {\n position: absolute;\n opacity: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n margin: 0;\n}\n\n.zest-toggle__input:disabled {\n cursor: not-allowed;\n}\n\n.zest-toggle__slider {\n position: absolute;\n inset: 0;\n background: var(--zest-border);\n border-radius: 12px;\n transition: background-color 0.2s ease;\n pointer-events: none;\n}\n\n.zest-toggle__slider::before {\n content: '';\n position: absolute;\n top: 2px;\n left: 2px;\n width: 20px;\n height: 20px;\n background: #ffffff;\n border-radius: 50%;\n transition: transform 0.2s ease;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\n}\n\n.zest-toggle__input:checked + .zest-toggle__slider {\n background: var(--zest-accent);\n}\n\n.zest-toggle__input:checked + .zest-toggle__slider::before {\n transform: translateX(20px);\n}\n\n.zest-toggle__input:focus-visible + .zest-toggle__slider {\n outline: 2px solid var(--zest-accent);\n outline-offset: 2px;\n}\n\n.zest-toggle__input:disabled + .zest-toggle__slider {\n opacity: 0.6;\n}\n\n/* Widget */\n.zest-widget {\n position: fixed;\n z-index: 999997;\n bottom: 20px;\n left: 20px;\n}\n\n.zest-widget__btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n padding: 0;\n background: var(--zest-bg);\n border: 1px solid var(--zest-border);\n border-radius: 50%;\n box-shadow: var(--zest-shadow);\n cursor: pointer;\n transition: transform 0.2s ease, box-shadow 0.2s ease;\n}\n\n.zest-widget__btn:hover {\n transform: scale(1.05);\n box-shadow: 0 12px 28px -5px rgba(0, 0, 0, 0.15);\n}\n\n.zest-widget__btn:focus-visible {\n outline: 2px solid var(--zest-accent);\n outline-offset: 2px;\n}\n\n.zest-widget__icon {\n width: 24px;\n height: 24px;\n fill: var(--zest-text);\n}\n\n/* Link */\n.zest-link {\n color: var(--zest-accent);\n text-decoration: none;\n}\n\n.zest-link:hover {\n text-decoration: underline;\n}\n\n/* Mobile */\n@media (max-width: 480px) {\n .zest-banner {\n left: 10px;\n right: 10px;\n max-width: none;\n transform: none;\n }\n\n .zest-banner--bottom,\n .zest-banner--bottom-left,\n .zest-banner--bottom-right {\n bottom: 10px;\n }\n\n .zest-banner--top {\n top: 10px;\n transform: none;\n }\n\n @keyframes zest-slide-in {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n .zest-banner__buttons {\n flex-direction: column;\n }\n\n .zest-btn {\n width: 100%;\n }\n\n .zest-modal-overlay {\n padding: 10px;\n }\n\n .zest-widget {\n bottom: 10px;\n left: 10px;\n }\n}\n\n/* Hidden utility */\n.zest-hidden {\n display: none !important;\n}\n${customCss}\n`;\n}\n\n/**\n * Adjust color brightness. Falls back to the default accent if the input\n * cannot be parsed as a hex color (non-hex inputs pass safeColor but\n * can't be brightness-shifted mathematically).\n */\nfunction adjustColor(hex, percent) {\n if (typeof hex !== 'string' || !/^#[0-9a-fA-F]{3,8}$/.test(hex.trim())) {\n hex = DEFAULT_ACCENT;\n }\n let clean = hex.trim().replace('#', '');\n // Expand 3-digit form to 6\n if (clean.length === 3) {\n clean = clean.split('').map(c => c + c).join('');\n }\n // Strip alpha if present\n if (clean.length === 8) clean = clean.slice(0, 6);\n if (clean.length !== 6) clean = DEFAULT_ACCENT.slice(1);\n\n const num = parseInt(clean, 16);\n const amt = Math.round(2.55 * percent);\n const R = Math.min(255, Math.max(0, (num >> 16) + amt));\n const G = Math.min(255, Math.max(0, ((num >> 8) & 0x00ff) + amt));\n const B = Math.min(255, Math.max(0, (num & 0x0000ff) + amt));\n return '#' + (0x1000000 + R * 0x10000 + G * 0x100 + B).toString(16).slice(1);\n}\n\n/**\n * Cookie icon SVG\n */\nexport const COOKIE_ICON = `<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10c0-.728-.078-1.437-.225-2.12a1 1 0 0 0-1.482-.63 3 3 0 0 1-4.086-3.72 1 1 0 0 0-.793-1.263A10.05 10.05 0 0 0 12 2zm0 2c.178 0 .354.006.528.017a5 5 0 0 0 5.955 5.955c.011.174.017.35.017.528 0 4.418-3.582 8-8 8s-8-3.582-8-8 3.582-8 8-8zm-4 6a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3zm5 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-2 4a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3z\"/></svg>`;\n","/**\n * Banner - Main consent banner component\n */\n\nimport { generateStyles } from './styles.js';\nimport { getCurrentConfig } from '../config/parser.js';\nimport { escapeHTML } from '../core/security.js';\n\nlet bannerElement = null;\nlet shadowRoot = null;\n\nconst SAFE_POSITIONS = new Set(['bottom', 'bottom-left', 'bottom-right', 'top']);\n\n/**\n * Create the banner HTML\n */\nfunction createBannerHTML(config) {\n const labels = config.labels.banner;\n const rawPosition = config.position || 'bottom';\n const position = SAFE_POSITIONS.has(rawPosition) ? rawPosition : 'bottom';\n\n return `\n <div class=\"zest-banner zest-banner--${position}\" role=\"dialog\" aria-modal=\"false\" aria-label=\"${escapeHTML(labels.title)}\">\n <h2 class=\"zest-banner__title\">${escapeHTML(labels.title)}</h2>\n <p class=\"zest-banner__description\">${escapeHTML(labels.description)}</p>\n <div class=\"zest-banner__buttons\">\n <button type=\"button\" class=\"zest-btn zest-btn--primary\" data-action=\"accept-all\">\n ${escapeHTML(labels.acceptAll)}\n </button>\n <button type=\"button\" class=\"zest-btn zest-btn--secondary\" data-action=\"reject-all\">\n ${escapeHTML(labels.rejectAll)}\n </button>\n <button type=\"button\" class=\"zest-btn zest-btn--ghost\" data-action=\"settings\">\n ${escapeHTML(labels.settings)}\n </button>\n </div>\n </div>\n `;\n}\n\n/**\n * Create and mount the banner\n */\nexport function createBanner(callbacks = {}) {\n if (bannerElement) {\n return bannerElement;\n }\n\n const config = getCurrentConfig();\n\n // Create host element\n bannerElement = document.createElement('zest-banner');\n bannerElement.setAttribute('data-theme', config.theme || 'light');\n\n // Create shadow root\n shadowRoot = bannerElement.attachShadow({ mode: 'open' });\n\n // Add styles\n const styleEl = document.createElement('style');\n styleEl.textContent = generateStyles(config);\n shadowRoot.appendChild(styleEl);\n\n // Add banner HTML\n const container = document.createElement('div');\n container.innerHTML = createBannerHTML(config);\n shadowRoot.appendChild(container.firstElementChild);\n\n // Add event listeners\n const banner = shadowRoot.querySelector('.zest-banner');\n\n banner.addEventListener('click', (e) => {\n const action = e.target.dataset.action;\n if (!action) return;\n\n switch (action) {\n case 'accept-all':\n callbacks.onAcceptAll?.();\n break;\n case 'reject-all':\n callbacks.onRejectAll?.();\n break;\n case 'settings':\n callbacks.onSettings?.();\n break;\n }\n });\n\n // Keyboard handling\n banner.addEventListener('keydown', (e) => {\n if (e.key === 'Escape') {\n callbacks.onSettings?.();\n }\n });\n\n // Mount to document\n document.body.appendChild(bannerElement);\n\n // Focus first button for accessibility\n requestAnimationFrame(() => {\n const firstButton = shadowRoot.querySelector('button');\n firstButton?.focus();\n });\n\n return bannerElement;\n}\n\n/**\n * Show the banner\n */\nexport function showBanner(callbacks = {}) {\n if (!bannerElement) {\n createBanner(callbacks);\n } else {\n bannerElement.classList.remove('zest-hidden');\n }\n}\n\n/**\n * Hide the banner\n */\nexport function hideBanner() {\n if (bannerElement) {\n bannerElement.remove();\n bannerElement = null;\n shadowRoot = null;\n }\n}\n\n/**\n * Check if banner is visible\n */\nexport function isBannerVisible() {\n return bannerElement !== null && document.body.contains(bannerElement);\n}\n","/**\n * Modal - Settings modal component for category toggles\n */\n\nimport { generateStyles } from './styles.js';\nimport { getCurrentConfig } from '../config/parser.js';\nimport { DEFAULT_CATEGORIES } from '../core/categories.js';\nimport { escapeHTML, safeUrl } from '../core/security.js';\n\nlet modalElement = null;\nlet shadowRoot = null;\nlet currentSelections = {};\n\n/**\n * Create category toggle HTML\n */\nfunction createCategoryHTML(category, isChecked, isRequired) {\n const disabled = isRequired ? 'disabled' : '';\n const checked = isChecked ? 'checked' : '';\n const safeId = escapeHTML(category.id);\n const safeLabel = escapeHTML(category.label);\n\n return `\n <div class=\"zest-category\">\n <div class=\"zest-category__header\">\n <div class=\"zest-category__info\">\n <span class=\"zest-category__label\">${safeLabel}</span>\n <p class=\"zest-category__description\">${escapeHTML(category.description)}</p>\n </div>\n <label class=\"zest-toggle\">\n <input\n type=\"checkbox\"\n class=\"zest-toggle__input\"\n data-category=\"${safeId}\"\n ${checked}\n ${disabled}\n aria-label=\"${safeLabel}\"\n >\n <span class=\"zest-toggle__slider\"></span>\n </label>\n </div>\n </div>\n `;\n}\n\n/**\n * Create the modal HTML\n */\nfunction createModalHTML(config, consent) {\n const labels = config.labels.modal;\n const categories = config.categories || DEFAULT_CATEGORIES;\n\n const categoriesHTML = Object.values(categories)\n .map(cat => createCategoryHTML(\n cat,\n consent[cat.id] ?? cat.default,\n cat.required\n ))\n .join('');\n\n const validatedPolicyUrl = config.policyUrl ? safeUrl(config.policyUrl) : null;\n const policyLink = validatedPolicyUrl\n ? `<a href=\"${escapeHTML(validatedPolicyUrl)}\" class=\"zest-link\" target=\"_blank\" rel=\"noopener noreferrer\">Privacy Policy</a>`\n : '';\n\n return `\n <div class=\"zest-modal-overlay\" role=\"dialog\" aria-modal=\"true\" aria-label=\"${escapeHTML(labels.title)}\">\n <div class=\"zest-modal\">\n <div class=\"zest-modal__header\">\n <h2 class=\"zest-modal__title\">${escapeHTML(labels.title)}</h2>\n <p class=\"zest-modal__description\">${escapeHTML(labels.description)} ${policyLink}</p>\n </div>\n <div class=\"zest-modal__body\">\n ${categoriesHTML}\n </div>\n <div class=\"zest-modal__footer\">\n <button type=\"button\" class=\"zest-btn zest-btn--primary\" data-action=\"save\">\n ${escapeHTML(labels.save)}\n </button>\n <button type=\"button\" class=\"zest-btn zest-btn--secondary\" data-action=\"accept-all\">\n ${escapeHTML(labels.acceptAll)}\n </button>\n <button type=\"button\" class=\"zest-btn zest-btn--ghost\" data-action=\"reject-all\">\n ${escapeHTML(labels.rejectAll)}\n </button>\n </div>\n </div>\n </div>\n `;\n}\n\n/**\n * Get current selections from toggles\n */\nfunction getSelections() {\n if (!shadowRoot) return currentSelections;\n\n const toggles = shadowRoot.querySelectorAll('.zest-toggle__input');\n const selections = { essential: true };\n\n toggles.forEach(toggle => {\n const category = toggle.dataset.category;\n if (category && category !== 'essential') {\n selections[category] = toggle.checked;\n }\n });\n\n return selections;\n}\n\n/**\n * Create and show the modal\n */\nexport function showModal(consent = {}, callbacks = {}) {\n if (modalElement) {\n return modalElement;\n }\n\n const config = getCurrentConfig();\n currentSelections = { ...consent };\n\n // Create host element\n modalElement = document.createElement('zest-modal');\n modalElement.setAttribute('data-theme', config.theme || 'light');\n\n // Create shadow root\n shadowRoot = modalElement.attachShadow({ mode: 'open' });\n\n // Add styles\n const styleEl = document.createElement('style');\n styleEl.textContent = generateStyles(config);\n shadowRoot.appendChild(styleEl);\n\n // Add modal HTML\n const container = document.createElement('div');\n container.innerHTML = createModalHTML(config, consent);\n shadowRoot.appendChild(container.firstElementChild);\n\n // Add event listeners\n const modal = shadowRoot.querySelector('.zest-modal-overlay');\n\n // Button clicks\n modal.addEventListener('click', (e) => {\n const action = e.target.dataset.action;\n if (!action) {\n // Click on overlay background to close\n if (e.target === modal) {\n callbacks.onClose?.();\n }\n return;\n }\n\n switch (action) {\n case 'save':\n callbacks.onSave?.(getSelections());\n break;\n case 'accept-all':\n callbacks.onAcceptAll?.();\n break;\n case 'reject-all':\n callbacks.onRejectAll?.();\n break;\n }\n });\n\n // Keyboard handling\n modal.addEventListener('keydown', (e) => {\n if (e.key === 'Escape') {\n callbacks.onClose?.();\n }\n });\n\n // Track toggle changes\n shadowRoot.querySelectorAll('.zest-toggle__input').forEach(toggle => {\n toggle.addEventListener('change', () => {\n currentSelections = getSelections();\n });\n });\n\n // Mount to document\n document.body.appendChild(modalElement);\n\n // Trap focus\n requestAnimationFrame(() => {\n const firstButton = shadowRoot.querySelector('button');\n firstButton?.focus();\n });\n\n return modalElement;\n}\n\n/**\n * Hide the modal\n */\nexport function hideModal() {\n if (modalElement) {\n modalElement.remove();\n modalElement = null;\n shadowRoot = null;\n }\n}\n\n/**\n * Check if modal is visible\n */\nexport function isModalVisible() {\n return modalElement !== null && document.body.contains(modalElement);\n}\n\n/**\n * Get current modal selections\n */\nexport function getModalSelections() {\n return getSelections();\n}\n","/**\n * Widget - Minimal floating button to reopen settings\n */\n\nimport { generateStyles, COOKIE_ICON } from './styles.js';\nimport { getCurrentConfig } from '../config/parser.js';\nimport { escapeHTML } from '../core/security.js';\n\nlet widgetElement = null;\nlet shadowRoot = null;\n\n/**\n * Create the widget HTML\n */\nfunction createWidgetHTML(config) {\n const labels = config.labels.widget;\n const safeLabel = escapeHTML(labels.label);\n\n return `\n <div class=\"zest-widget\">\n <button type=\"button\" class=\"zest-widget__btn\" aria-label=\"${safeLabel}\" title=\"${safeLabel}\">\n <span class=\"zest-widget__icon\">${COOKIE_ICON}</span>\n </button>\n </div>\n `;\n}\n\n/**\n * Create and mount the widget\n */\nexport function createWidget(callbacks = {}) {\n if (widgetElement) {\n return widgetElement;\n }\n\n const config = getCurrentConfig();\n\n // Create host element\n widgetElement = document.createElement('zest-widget');\n widgetElement.setAttribute('data-theme', config.theme || 'light');\n\n // Create shadow root\n shadowRoot = widgetElement.attachShadow({ mode: 'open' });\n\n // Add styles\n const styleEl = document.createElement('style');\n styleEl.textContent = generateStyles(config);\n shadowRoot.appendChild(styleEl);\n\n // Add widget HTML\n const container = document.createElement('div');\n container.innerHTML = createWidgetHTML(config);\n shadowRoot.appendChild(container.firstElementChild);\n\n // Add event listener\n const button = shadowRoot.querySelector('.zest-widget__btn');\n button.addEventListener('click', () => {\n callbacks.onClick?.();\n });\n\n // Mount to document\n document.body.appendChild(widgetElement);\n\n return widgetElement;\n}\n\n/**\n * Show the widget\n */\nexport function showWidget(callbacks = {}) {\n if (!widgetElement) {\n createWidget(callbacks);\n } else {\n widgetElement.style.display = '';\n }\n}\n\n/**\n * Hide the widget\n */\nexport function hideWidget() {\n if (widgetElement) {\n widgetElement.style.display = 'none';\n }\n}\n\n/**\n * Remove the widget completely\n */\nexport function removeWidget() {\n if (widgetElement) {\n widgetElement.remove();\n widgetElement = null;\n shadowRoot = null;\n }\n}\n\n/**\n * Check if widget is visible\n */\nexport function isWidgetVisible() {\n return widgetElement !== null &&\n document.body.contains(widgetElement) &&\n widgetElement.style.display !== 'none';\n}\n","/**\n * Zest - Lightweight Cookie Consent Toolkit\n * Main entry (full build: logic + UI).\n *\n * For a logic-only build without any CSS / Shadow DOM mounting, import\n * from `@freshjuice/zest/headless` instead.\n */\n\n// Core lifecycle (UI-agnostic)\nimport {\n coreInit,\n coreAcceptAll,\n coreRejectAll,\n coreUpdateConsent,\n coreReset,\n isInitialized,\n getActiveConfig\n} from './core-lifecycle.js';\n\n// Consent store + events\nimport {\n getConsent,\n hasConsent,\n hasConsentDecision,\n getConsentProof\n} from './storage/consent-store.js';\nimport { emitShow, emitHide, EVENTS, on, once } from './storage/events.js';\n\n// DNT introspection\nimport { isDoNotTrackEnabled, getDNTDetails } from './core/dnt.js';\n\n// Config getters\nimport { getConfig, getCurrentConfig } from './config/parser.js';\n\n// UI\nimport { showBanner, hideBanner, isBannerVisible } from './ui/banner.js';\nimport { showModal, hideModal, isModalVisible } from './ui/modal.js';\nimport { showWidget, hideWidget, removeWidget, isWidgetVisible } from './ui/widget.js';\n\n/**\n * Handle accept all — delegates consent logic to core, handles UI swap.\n */\nfunction handleAcceptAll() {\n coreAcceptAll();\n const config = getActiveConfig();\n\n hideBanner();\n hideModal();\n\n if (config?.showWidget) {\n showWidget({ onClick: handleShowSettings });\n }\n}\n\n/**\n * Handle reject all.\n */\nfunction handleRejectAll() {\n coreRejectAll();\n const config = getActiveConfig();\n\n hideBanner();\n hideModal();\n\n if (config?.showWidget) {\n showWidget({ onClick: handleShowSettings });\n }\n}\n\n/**\n * Handle save preferences from modal.\n */\nfunction handleSavePreferences(selections) {\n coreUpdateConsent(selections);\n const config = getActiveConfig();\n\n hideModal();\n\n if (config?.showWidget) {\n showWidget({ onClick: handleShowSettings });\n }\n}\n\n/**\n * Open the settings modal.\n */\nfunction handleShowSettings() {\n hideBanner();\n hideWidget();\n\n showModal(getConsent(), {\n onSave: handleSavePreferences,\n onAcceptAll: handleAcceptAll,\n onRejectAll: handleRejectAll,\n onClose: handleCloseModal\n });\n\n emitShow('modal');\n}\n\n/**\n * Close the modal — either bring the widget back (decision made) or\n * fall back to the banner (no decision yet).\n */\nfunction handleCloseModal() {\n hideModal();\n emitHide('modal');\n\n const config = getActiveConfig();\n if (hasConsentDecision() && config?.showWidget) {\n showWidget({ onClick: handleShowSettings });\n } else {\n showBanner({\n onAcceptAll: handleAcceptAll,\n onRejectAll: handleRejectAll,\n onSettings: handleShowSettings\n });\n }\n}\n\n/**\n * Initialize Zest with UI.\n */\nfunction init(userConfig = {}) {\n const { alreadyInitialized, consent, hasDecision, dntApplied } = coreInit(userConfig);\n if (alreadyInitialized) {\n console.warn('[Zest] Already initialized');\n return Zest;\n }\n\n const config = getActiveConfig();\n\n if (!hasDecision && !dntApplied) {\n showBanner({\n onAcceptAll: handleAcceptAll,\n onRejectAll: handleRejectAll,\n onSettings: handleShowSettings\n });\n emitShow('banner');\n } else if (config?.showWidget) {\n showWidget({ onClick: handleShowSettings });\n }\n\n return Zest;\n}\n\nconst Zest = {\n init,\n\n // Banner control\n show() {\n if (!isInitialized()) {\n console.warn('[Zest] Not initialized. Call Zest.init() first.');\n return;\n }\n hideModal();\n hideWidget();\n showBanner({\n onAcceptAll: handleAcceptAll,\n onRejectAll: handleRejectAll,\n onSettings: handleShowSettings\n });\n emitShow('banner');\n },\n\n hide() {\n hideBanner();\n emitHide('banner');\n },\n\n // Settings modal\n showSettings() {\n if (!isInitialized()) {\n console.warn('[Zest] Not initialized. Call Zest.init() first.');\n return;\n }\n handleShowSettings();\n },\n\n hideSettings() {\n hideModal();\n emitHide('modal');\n },\n\n // Consent state\n getConsent,\n hasConsent,\n hasConsentDecision,\n getConsentProof,\n\n // DNT\n isDoNotTrackEnabled,\n getDNTDetails,\n\n // Programmatic accept / reject\n acceptAll() {\n if (!isInitialized()) {\n console.warn('[Zest] Not initialized. Call Zest.init() first.');\n return;\n }\n handleAcceptAll();\n },\n\n rejectAll() {\n if (!isInitialized()) {\n console.warn('[Zest] Not initialized. Call Zest.init() first.');\n return;\n }\n handleRejectAll();\n },\n\n // Reset everything and reshow the banner\n reset() {\n coreReset();\n hideModal();\n removeWidget();\n if (isInitialized()) {\n showBanner({\n onAcceptAll: handleAcceptAll,\n onRejectAll: handleRejectAll,\n onSettings: handleShowSettings\n });\n emitShow('banner');\n }\n },\n\n // Config introspection\n getConfig: getCurrentConfig,\n\n // Events\n on,\n once,\n EVENTS\n};\n\n// Auto-init if config present\nif (typeof window !== 'undefined') {\n // Make Zest available globally. defineProperty with writable:false +\n // configurable:false stops a later-loaded script from replacing the\n // global with a trojanned stand-in.\n try {\n Object.defineProperty(window, 'Zest', {\n value: Object.freeze(Zest),\n writable: false,\n configurable: false,\n enumerable: true\n });\n } catch (e) {\n window.Zest = Zest;\n }\n\n const autoInit = () => {\n const cfg = getConfig();\n if (cfg.autoInit !== false) {\n init(window.ZestConfig);\n }\n };\n\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', autoInit);\n } else {\n autoInit();\n }\n}\n\nexport default Zest;\n"],"names":["MAX_QUEUE_SIZE","checkConsent","setConsentChecker","currentConfig","setCookieChecker","setStorageChecker","setScriptChecker","storeRejectAll","storeAcceptAll","shadowRoot"],"mappings":"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ChC,EAAE,OAAO,WAAW;EACpB;;EAEO,SAAS,eAAe,GAAG;EAClC,EAAE,OAAO,aAAa;EACtB;;EC/LA;EACA;EACA;;;EAIA,MAAM,cAAc,GAAG,SAAS;;EAEhC;EACA;EACA;EACO,SAAS,cAAc,CAAC,MAAM,EAAE;EACvC;EACA;EACA,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,cAAc;EACrE,EAAE,MAAM,SAAS,GAAG,oBAAoB,CAAC,MAAM,CAAC,YAAY,CAAC;;EAE7D,EAAE,OAAO;AACT;AACA,iBAAiB,EAAE,WAAW,CAAC;AAC/B,uBAAuB,EAAE,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AAC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"}
1
+ {"version":3,"file":"zest.es.js","sources":["../src/core/security.js","../src/core/pattern-matcher.js","../src/core/cookie-interceptor.js","../src/core/storage-interceptor.js","../src/core/known-trackers.js","../src/core/script-blocker.js","../src/core/categories.js","../src/core/dnt.js","../src/integrations/consent-signals.js","../src/i18n/single/lang-es.js","../src/config/defaults.js","../src/config/parser.js","../src/storage/consent-store.js","../src/storage/events.js","../src/core-lifecycle.js","../src/ui/styles.js","../src/ui/banner.js","../src/ui/modal.js","../src/ui/widget.js","../src/index.js"],"sourcesContent":["/**\n * Security utilities - escaping, validation, and safe parsing helpers\n *\n * These helpers are used across UI components, URL/CSS validation, and\n * consent-cookie parsing to provide defense-in-depth against untrusted\n * config (CMS-driven, i18n-loaded, or attacker-supplied).\n */\n\nconst HTML_ESCAPE_MAP = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n '`': '&#96;'\n};\n\n/**\n * Escape a value for safe embedding in HTML text nodes and attribute values.\n * Accepts any value — non-strings are stringified first. null/undefined -> ''.\n */\nexport function escapeHTML(value) {\n if (value === null || value === undefined) return '';\n const str = typeof value === 'string' ? value : String(value);\n return str.replace(/[&<>\"'`]/g, (ch) => HTML_ESCAPE_MAP[ch]);\n}\n\n/**\n * Validate a URL — return the URL if it uses http:/https:/mailto:/tel:,\n * otherwise return null. Blocks javascript:, data:, vbscript:, file:, etc.\n */\nexport function safeUrl(url) {\n if (typeof url !== 'string' || url.length === 0) return null;\n const trimmed = url.trim();\n if (trimmed.length === 0) return null;\n\n // Relative URLs (no protocol) are safe — treat as same-origin path\n if (/^[/?#]/.test(trimmed)) return trimmed;\n\n // Check protocol explicitly, do NOT rely on URL parsing alone —\n // attackers may use whitespace/control characters to confuse parsers.\n const match = trimmed.match(/^([a-z][a-z0-9+.-]*):/i);\n if (!match) {\n // No protocol — treat as relative\n return trimmed;\n }\n\n const protocol = match[1].toLowerCase();\n if (protocol === 'http' || protocol === 'https' || protocol === 'mailto' || protocol === 'tel') {\n return trimmed;\n }\n return null;\n}\n\n/**\n * Validate a CSS color value. Accepts #rgb/#rrggbb/#rrggbbaa and a\n * small allowlist of CSS named colors and rgb()/rgba()/hsl()/hsla()\n * functional forms with numeric-only arguments.\n */\nconst NAMED_COLORS = new Set([\n 'transparent', 'black', 'white', 'red', 'green', 'blue', 'yellow',\n 'orange', 'purple', 'pink', 'gray', 'grey', 'brown', 'cyan', 'magenta',\n 'silver', 'gold', 'navy', 'teal', 'maroon', 'olive', 'lime', 'aqua',\n 'fuchsia', 'indigo', 'violet', 'crimson', 'coral', 'salmon', 'tomato'\n]);\n\nexport function safeColor(color) {\n if (typeof color !== 'string') return null;\n const trimmed = color.trim();\n\n if (/^#[0-9a-fA-F]{3,8}$/.test(trimmed)) return trimmed;\n if (NAMED_COLORS.has(trimmed.toLowerCase())) return trimmed;\n\n // Functional notations: only digits, dots, commas, %, whitespace between parens\n if (/^(rgb|rgba|hsl|hsla)\\(\\s*[\\d.,%\\s/]+\\s*\\)$/i.test(trimmed)) return trimmed;\n\n return null;\n}\n\n/**\n * Validate a regex pattern string. Rejects patterns that contain known\n * catastrophic-backtracking shapes (nested quantifiers). Compiles with\n * try/catch.\n *\n * Returns a RegExp on success, null on failure.\n */\nconst REDOS_PATTERNS = [\n /(\\([^)]*[+*][^)]*\\)|\\[[^\\]]*\\]|\\\\w|\\\\d|\\\\s)\\s*[+*]/, // nested quantifier\n /\\(\\?[=!][^)]*[+*][^)]*\\)[+*]/, // lookahead with quantifier, then quantifier\n];\n\nexport function safeRegExp(pattern, flags) {\n if (pattern instanceof RegExp) return pattern;\n if (typeof pattern !== 'string') return null;\n\n // Cap pattern length to limit compiled-regex state\n if (pattern.length > 500) return null;\n\n // Heuristic: reject obviously dangerous patterns\n for (const bad of REDOS_PATTERNS) {\n if (bad.test(pattern)) return null;\n }\n\n try {\n return new RegExp(pattern, flags);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Sanitize a consent-cookie payload. Only known category keys with\n * boolean values survive; prototype-polluting keys are stripped.\n */\nconst FORBIDDEN_KEYS = new Set(['__proto__', 'constructor', 'prototype']);\n\nexport function sanitizeConsentPayload(raw, knownCategoryIds) {\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return null;\n\n const result = {\n version: typeof raw.version === 'string' ? raw.version : null,\n timestamp: typeof raw.timestamp === 'number' && Number.isFinite(raw.timestamp) ? raw.timestamp : null,\n categories: {}\n };\n\n const cats = raw.categories;\n if (!cats || typeof cats !== 'object' || Array.isArray(cats)) return null;\n\n for (const key of knownCategoryIds) {\n if (FORBIDDEN_KEYS.has(key)) continue;\n if (Object.prototype.hasOwnProperty.call(cats, key)) {\n result.categories[key] = cats[key] === true;\n }\n }\n\n // essential is always true regardless of stored value\n if (knownCategoryIds.includes('essential')) {\n result.categories.essential = true;\n }\n\n return result;\n}\n\n/**\n * Invoke a user-supplied callback, swallowing and logging exceptions so\n * a misbehaving callback can't break the consent flow.\n */\nexport function safeInvoke(fn, ...args) {\n if (typeof fn !== 'function') return undefined;\n try {\n return fn(...args);\n } catch (e) {\n try {\n console.error('[Zest] User callback threw:', e);\n } catch (_) {\n /* no-op */\n }\n return undefined;\n }\n}\n\n/**\n * Strip comments and selector-level content from a customStyles string\n * while still allowing property/value declarations scoped under the\n * component selectors the author is targeting. We cannot fully sandbox\n * CSS without a parser, but we can at least neutralise the most\n * dangerous clickjacking vector (rules targeting Zest's own buttons).\n *\n * Returns the sanitized CSS string (possibly empty).\n */\nexport function sanitizeCustomStyles(css) {\n if (typeof css !== 'string' || css.length === 0) return '';\n\n // Hard cap on size to avoid runaway payloads\n if (css.length > 20000) return '';\n\n // Remove CSS comments (can hide payloads)\n let out = css.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\n\n // Block at-rules that can load external resources or alter behavior\n out = out.replace(/@import\\s+[^;]+;?/gi, '');\n out = out.replace(/@charset\\s+[^;]+;?/gi, '');\n\n // Block url() values pointing outside of data: or https:\n out = out.replace(/url\\(\\s*(['\"]?)([^)'\"]+)\\1\\s*\\)/gi, (match, quote, value) => {\n const v = value.trim().toLowerCase();\n if (v.startsWith('https:') || v.startsWith('data:image/') || v.startsWith('/') || v.startsWith('#')) {\n return match;\n }\n return 'url(#)';\n });\n\n // Block selectors that target the built-in reject button, which could\n // be used to hide it for clickjacking consent bypass.\n out = out.replace(/\\.zest-btn--secondary\\s*\\{[^}]*\\}/gi, '');\n out = out.replace(/\\[data-action\\s*=\\s*[\"']reject-all[\"']\\]\\s*\\{[^}]*\\}/gi, '');\n out = out.replace(/\\[data-action\\s*=\\s*[\"']accept-all[\"']\\]\\s*\\{[^}]*\\}/gi, '');\n\n // Block expression() (ancient IE) and -moz-binding (ancient FF)\n out = out.replace(/expression\\s*\\([^)]*\\)/gi, '');\n out = out.replace(/-moz-binding\\s*:[^;}]*/gi, '');\n\n return out;\n}\n","/**\n * Pattern Matcher - Categorizes cookies and storage keys by pattern\n */\n\nimport { safeRegExp } from './security.js';\n\n/**\n * Default patterns for each category\n */\nexport const DEFAULT_PATTERNS = {\n essential: [\n /^zest_/,\n /^csrf/i,\n /^xsrf/i,\n /^session/i,\n /^__host-/i,\n /^__secure-/i\n ],\n functional: [\n /^lang/i,\n /^locale/i,\n /^theme/i,\n /^preferences/i,\n /^ui_/i\n ],\n analytics: [\n /^_ga/,\n /^_gid/,\n /^_gat/,\n /^_utm/,\n /^__utm/,\n /^plausible/i,\n /^_pk_/,\n /^matomo/i,\n /^_hj/,\n /^ajs_/\n ],\n marketing: [\n /^_fbp/,\n /^_fbc/,\n /^_gcl/,\n /^_ttp/,\n /^ads/i,\n /^doubleclick/i,\n /^__gads/,\n /^__gpi/,\n /^_pin_/,\n /^li_/\n ]\n};\n\nlet patterns = { ...DEFAULT_PATTERNS };\n\n/** Escape a string so it can be embedded in a regex literal verbatim. */\nfunction escapeRegex(value) {\n return String(value).replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\n/**\n * Append patterns to a single category without replacing what's already\n * there. Used by `essentialKeys` and `essentialPatterns` config to extend\n * the strictly-necessary category with consumer-specific entries while\n * keeping the built-in defaults (zest_*, csrf*, xsrf*, etc.).\n *\n * `keys` is an array of exact storage/cookie names; each one is\n * compiled as a fully-anchored regex via `escapeRegex`.\n * `patternStrings` is an array of regex source strings, each validated\n * via `safeRegExp`. Invalid entries are dropped silently.\n */\nexport function appendPatternsToCategory(category, { keys = [], patternStrings = [] } = {}) {\n if (!patterns[category]) patterns[category] = [];\n\n for (const key of keys) {\n if (typeof key !== 'string' || !key) continue;\n const re = safeRegExp(`^${escapeRegex(key)}$`);\n if (re) patterns[category].push(re);\n }\n\n for (const p of patternStrings) {\n if (typeof p !== 'string' || !p) continue;\n const re = safeRegExp(p);\n if (re) patterns[category].push(re);\n }\n}\n\n/**\n * Set custom patterns. User-supplied strings are validated with safeRegExp,\n * which rejects catastrophic-backtracking shapes and syntax errors.\n * Invalid patterns are silently dropped with a console warning.\n *\n * Note: this REPLACES the patterns for any category present in\n * `customPatterns`. To extend the essential category without losing the\n * built-in defaults, use `appendPatternsToCategory()` (or pass\n * `essentialKeys` / `essentialPatterns` to `Zest.init()`).\n */\nexport function setPatterns(customPatterns) {\n patterns = { ...DEFAULT_PATTERNS };\n if (!customPatterns || typeof customPatterns !== 'object') return;\n\n for (const [category, regexList] of Object.entries(customPatterns)) {\n if (!Array.isArray(regexList)) continue;\n\n const compiled = [];\n for (const p of regexList) {\n const re = safeRegExp(p);\n if (re) {\n compiled.push(re);\n } else {\n try {\n console.warn('[Zest] Rejected unsafe pattern:', p);\n } catch (_) { /* no-op */ }\n }\n }\n patterns[category] = compiled;\n }\n}\n\n/**\n * Get current patterns\n */\nexport function getPatterns() {\n return { ...patterns };\n}\n\n/**\n * Determine category for a cookie/storage key name\n * @param {string} name - Cookie or storage key name\n * @returns {string} Category ID (defaults to 'marketing' for unknown)\n */\nexport function getCategoryForName(name) {\n for (const [category, regexList] of Object.entries(patterns)) {\n if (regexList.some(regex => regex.test(name))) {\n return category;\n }\n }\n // Unknown items default to marketing (strictest)\n return 'marketing';\n}\n\n/**\n * Parse cookie string to extract name\n * @param {string} cookieString - Full cookie string (e.g., \"name=value; path=/\")\n * @returns {string|null} Cookie name or null\n */\nexport function parseCookieName(cookieString) {\n const match = cookieString.match(/^([^=]+)/);\n return match ? match[1].trim() : null;\n}\n","/**\n * Cookie Interceptor - Intercepts document.cookie operations\n */\n\nimport { getCategoryForName, parseCookieName } from './pattern-matcher.js';\n\n// Store original descriptor\nlet originalCookieDescriptor = null;\n\n// Upper bound on the number of queued cookies awaiting consent replay.\n// An unbounded queue is a memory-exhaustion DoS vector — a hostile\n// script could flood it with document.cookie writes.\nconst MAX_QUEUE_SIZE = 100;\n\n// Queue for blocked cookies\nconst cookieQueue = [];\n\n// Reference to consent checker function\nlet checkConsent = () => false;\n\n/**\n * Set the consent checker function\n */\nexport function setConsentChecker(fn) {\n checkConsent = fn;\n}\n\n/**\n * Get the original cookie descriptor\n */\nexport function getOriginalCookieDescriptor() {\n return originalCookieDescriptor;\n}\n\n/**\n * Get queued cookies\n */\nexport function getCookieQueue() {\n return [...cookieQueue];\n}\n\n/**\n * Clear the cookie queue\n */\nexport function clearCookieQueue() {\n cookieQueue.length = 0;\n}\n\n/**\n * Replay queued cookies for allowed categories\n */\nexport function replayCookies(allowedCategories) {\n const remaining = [];\n\n for (const item of cookieQueue) {\n if (allowedCategories.includes(item.category)) {\n // Set the cookie using original setter\n if (originalCookieDescriptor?.set) {\n originalCookieDescriptor.set.call(document, item.value);\n }\n } else {\n remaining.push(item);\n }\n }\n\n cookieQueue.length = 0;\n cookieQueue.push(...remaining);\n}\n\n/**\n * Start intercepting cookies\n */\nexport function interceptCookies() {\n // Store original\n originalCookieDescriptor = Object.getOwnPropertyDescriptor(Document.prototype, 'cookie');\n\n if (!originalCookieDescriptor) {\n console.warn('[Zest] Could not get cookie descriptor');\n return false;\n }\n\n Object.defineProperty(document, 'cookie', {\n get() {\n // Always allow reading\n return originalCookieDescriptor.get.call(document);\n },\n set(value) {\n const name = parseCookieName(value);\n if (!name) {\n return;\n }\n\n const category = getCategoryForName(name);\n\n if (checkConsent(category)) {\n // Consent given - set cookie\n originalCookieDescriptor.set.call(document, value);\n } else if (cookieQueue.length < MAX_QUEUE_SIZE) {\n // No consent - queue for later (capped to prevent DoS)\n cookieQueue.push({\n value,\n name,\n category,\n timestamp: Date.now()\n });\n }\n },\n // configurable: false prevents a later-loaded script from\n // overriding our descriptor and bypassing the interceptor.\n configurable: false\n });\n\n return true;\n}\n\n/**\n * Restore original cookie behavior.\n *\n * Note: after interceptCookies() has locked the descriptor with\n * configurable:false, this call will throw. The lock is intentional —\n * it stops a later-loaded script from unwinding the interceptor. If you\n * need a reset, call this before the first interceptCookies() call.\n */\nexport function restoreCookies() {\n if (!originalCookieDescriptor) return;\n try {\n Object.defineProperty(document, 'cookie', originalCookieDescriptor);\n } catch (_) {\n // Descriptor is locked; nothing we can do.\n }\n}\n","/**\n * Storage Interceptor - Intercepts localStorage and sessionStorage operations\n */\n\nimport { getCategoryForName } from './pattern-matcher.js';\n\n// Upper bound on queued operations awaiting consent replay — unbounded\n// growth would be a memory-exhaustion DoS vector.\nconst MAX_QUEUE_SIZE = 200;\n\n// Store originals\nlet originalLocalStorage = null;\nlet originalSessionStorage = null;\n\n// Queues for blocked operations\nconst localStorageQueue = [];\nconst sessionStorageQueue = [];\n\n// Reference to consent checker function\nlet checkConsent = () => false;\n\n/**\n * Set the consent checker function\n */\nexport function setConsentChecker(fn) {\n checkConsent = fn;\n}\n\n/**\n * Get original localStorage\n */\nexport function getOriginalLocalStorage() {\n return originalLocalStorage;\n}\n\n/**\n * Get original sessionStorage\n */\nexport function getOriginalSessionStorage() {\n return originalSessionStorage;\n}\n\n/**\n * Get queued localStorage operations\n */\nexport function getLocalStorageQueue() {\n return [...localStorageQueue];\n}\n\n/**\n * Get queued sessionStorage operations\n */\nexport function getSessionStorageQueue() {\n return [...sessionStorageQueue];\n}\n\n/**\n * Clear storage queues\n */\nexport function clearStorageQueues() {\n localStorageQueue.length = 0;\n sessionStorageQueue.length = 0;\n}\n\n/**\n * Create a proxy for storage API\n */\nfunction createStorageProxy(storage, queue, storageName) {\n return new Proxy(storage, {\n get(target, prop) {\n if (prop === 'setItem') {\n return (key, value) => {\n const category = getCategoryForName(key);\n\n if (checkConsent(category)) {\n target.setItem(key, value);\n } else if (queue.length < MAX_QUEUE_SIZE) {\n queue.push({\n key,\n value,\n category,\n timestamp: Date.now()\n });\n }\n };\n }\n\n // Allow all other operations\n const val = target[prop];\n return typeof val === 'function' ? val.bind(target) : val;\n }\n });\n}\n\n/**\n * Replay queued storage operations for allowed categories\n */\nexport function replayStorage(allowedCategories) {\n // Replay localStorage\n const remainingLocal = [];\n for (const item of localStorageQueue) {\n if (allowedCategories.includes(item.category)) {\n originalLocalStorage?.setItem(item.key, item.value);\n } else {\n remainingLocal.push(item);\n }\n }\n localStorageQueue.length = 0;\n localStorageQueue.push(...remainingLocal);\n\n // Replay sessionStorage\n const remainingSession = [];\n for (const item of sessionStorageQueue) {\n if (allowedCategories.includes(item.category)) {\n originalSessionStorage?.setItem(item.key, item.value);\n } else {\n remainingSession.push(item);\n }\n }\n sessionStorageQueue.length = 0;\n sessionStorageQueue.push(...remainingSession);\n}\n\n/**\n * Start intercepting storage APIs\n */\nexport function interceptStorage() {\n try {\n originalLocalStorage = window.localStorage;\n originalSessionStorage = window.sessionStorage;\n\n Object.defineProperty(window, 'localStorage', {\n value: createStorageProxy(originalLocalStorage, localStorageQueue, 'localStorage'),\n configurable: true,\n writable: false\n });\n\n Object.defineProperty(window, 'sessionStorage', {\n value: createStorageProxy(originalSessionStorage, sessionStorageQueue, 'sessionStorage'),\n configurable: true,\n writable: false\n });\n\n return true;\n } catch (e) {\n console.warn('[Zest] Could not intercept storage APIs:', e);\n return false;\n }\n}\n\n/**\n * Restore original storage APIs\n */\nexport function restoreStorage() {\n try {\n if (originalLocalStorage) {\n Object.defineProperty(window, 'localStorage', {\n value: originalLocalStorage,\n configurable: true,\n writable: false\n });\n }\n if (originalSessionStorage) {\n Object.defineProperty(window, 'sessionStorage', {\n value: originalSessionStorage,\n configurable: true,\n writable: false\n });\n }\n } catch (e) {\n console.warn('[Zest] Could not restore storage APIs:', e);\n }\n}\n","/**\n * Known Trackers - Lists of known tracking script domains by category\n */\n\n/**\n * Safe mode - Major, well-known trackers only\n */\nexport const SAFE_TRACKERS = {\n analytics: [\n 'google-analytics.com',\n 'www.google-analytics.com',\n 'analytics.google.com',\n 'googletagmanager.com',\n 'www.googletagmanager.com',\n 'plausible.io',\n 'cloudflareinsights.com',\n 'static.cloudflareinsights.com'\n ],\n marketing: [\n 'connect.facebook.net',\n 'www.facebook.com/tr',\n 'ads.google.com',\n 'www.googleadservices.com',\n 'googleads.g.doubleclick.net',\n 'pagead2.googlesyndication.com'\n ]\n};\n\n/**\n * Strict mode - Extended list including less common trackers\n */\nexport const STRICT_TRACKERS = {\n analytics: [\n ...SAFE_TRACKERS.analytics,\n 'analytics.tiktok.com',\n 'matomo.', // partial match\n 'hotjar.com',\n 'static.hotjar.com',\n 'script.hotjar.com',\n 'clarity.ms',\n 'www.clarity.ms',\n 'heapanalytics.com',\n 'cdn.heapanalytics.com',\n 'mixpanel.com',\n 'cdn.mxpnl.com',\n 'segment.com',\n 'cdn.segment.com',\n 'api.segment.io',\n 'fullstory.com',\n 'rs.fullstory.com',\n 'amplitude.com',\n 'cdn.amplitude.com',\n 'mouseflow.com',\n 'cdn.mouseflow.com',\n 'luckyorange.com',\n 'cdn.luckyorange.net',\n 'crazyegg.com',\n 'script.crazyegg.com'\n ],\n marketing: [\n ...SAFE_TRACKERS.marketing,\n 'snap.licdn.com',\n 'px.ads.linkedin.com',\n 'ads.linkedin.com',\n 'analytics.twitter.com',\n 'static.ads-twitter.com',\n 't.co',\n 'analytics.tiktok.com',\n 'ads.tiktok.com',\n 'sc-static.net', // Snapchat\n 'tr.snapchat.com',\n 'ct.pinterest.com',\n 'pintrk.com',\n 's.pinimg.com',\n 'widgets.pinterest.com',\n 'bat.bing.com',\n 'ads.yahoo.com',\n 'sp.analytics.yahoo.com',\n 'amazon-adsystem.com',\n 'z-na.amazon-adsystem.com',\n 'criteo.com',\n 'static.criteo.net',\n 'dis.criteo.com',\n 'taboola.com',\n 'cdn.taboola.com',\n 'trc.taboola.com',\n 'outbrain.com',\n 'widgets.outbrain.com',\n 'adroll.com',\n 's.adroll.com'\n ],\n functional: [\n 'cdn.onesignal.com',\n 'onesignal.com',\n 'pusher.com',\n 'js.pusher.com',\n 'intercom.io',\n 'widget.intercom.io',\n 'js.intercomcdn.com',\n 'crisp.chat',\n 'client.crisp.chat',\n 'cdn.livechatinc.com',\n 'livechatinc.com',\n 'tawk.to',\n 'embed.tawk.to',\n 'zendesk.com',\n 'static.zdassets.com'\n ]\n};\n\n/**\n * Check if a URL matches any tracker in the list.\n *\n * Matching is restricted to hostname (and, when the list entry contains\n * a path, the URL path prefix). A naive `fullUrl.includes(domain)` was\n * previously used, which would false-positive on e.g.\n * https://mysite.com/page?ref=google-analytics.com\n */\nexport function matchesTrackerList(url, trackerList) {\n let urlObj;\n try {\n urlObj = new URL(url);\n } catch (e) {\n return false;\n }\n const hostname = urlObj.hostname.toLowerCase();\n const path = urlObj.pathname.toLowerCase();\n\n for (const rawEntry of trackerList) {\n if (typeof rawEntry !== 'string') continue;\n const entry = rawEntry.toLowerCase();\n\n // Partial-prefix match on hostname (entry ends with a dot),\n // e.g. \"matomo.\" matches \"analytics.matomo.cloud\"\n if (entry.endsWith('.')) {\n const needle = entry.slice(0, -1);\n const segments = hostname.split('.');\n if (segments.some(seg => seg === needle) || hostname.startsWith(entry)) {\n return true;\n }\n continue;\n }\n\n // Entries containing a slash specify hostname + path prefix\n const slashIdx = entry.indexOf('/');\n if (slashIdx !== -1) {\n const entryHost = entry.slice(0, slashIdx);\n const entryPath = entry.slice(slashIdx);\n if ((hostname === entryHost || hostname.endsWith('.' + entryHost)) &&\n path.startsWith(entryPath)) {\n return true;\n }\n continue;\n }\n\n // Plain hostname: exact or subdomain match only\n if (hostname === entry || hostname.endsWith('.' + entry)) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Get category for a script URL based on tracker lists\n */\nexport function getCategoryForScript(url, mode = 'safe') {\n const trackers = mode === 'strict' ? STRICT_TRACKERS : SAFE_TRACKERS;\n\n for (const [category, domains] of Object.entries(trackers)) {\n if (matchesTrackerList(url, domains)) {\n return category;\n }\n }\n\n return null;\n}\n\n/**\n * Check if URL is third-party (different domain)\n */\nexport function isThirdParty(url) {\n try {\n const scriptHost = new URL(url).hostname;\n const pageHost = window.location.hostname;\n\n // Remove www. for comparison\n const normalizeHost = (h) => h.replace(/^www\\./, '');\n\n return normalizeHost(scriptHost) !== normalizeHost(pageHost);\n } catch (e) {\n return false;\n }\n}\n","/**\n * Script Blocker - Blocks and manages consent-gated scripts\n *\n * Modes:\n * - manual: Only blocks scripts with data-consent-category attribute\n * - safe: Manual + known major trackers (Google, Facebook, etc.)\n * - strict: Safe + extended tracker list (Hotjar, Mixpanel, etc.)\n * - doomsday: Block ALL third-party scripts\n */\n\nimport { getCategoryForScript, isThirdParty } from './known-trackers.js';\n\n// Categories the author has declared blockable. A script can self-label\n// into one of these, but not into 'essential' (a common bypass).\nconst BLOCKABLE_CATEGORIES = new Set(['functional', 'analytics', 'marketing']);\n\n// Upper bound on queued scripts awaiting consent replay — prevents a\n// hostile page from flooding the queue with <script> nodes.\nconst MAX_QUEUE_SIZE = 500;\n\n// Queue for blocked scripts — the authoritative source for replay,\n// snapshotting src/inline BEFORE any DOM mutation so later tampering\n// cannot hijack what gets executed.\nconst scriptQueue = [];\n\n// MutationObserver instance\nlet observer = null;\n\n// Current blocking mode\nlet blockingMode = 'safe';\n\n// Custom blocked domains (user-defined)\nlet customBlockedDomains = [];\n\n// Reference to consent checker function\nlet checkConsent = () => false;\n\n/**\n * Set the consent checker function\n */\nexport function setConsentChecker(fn) {\n checkConsent = fn;\n}\n\n/**\n * Set blocking mode\n */\nexport function setBlockingMode(mode) {\n blockingMode = mode;\n}\n\n/**\n * Set custom blocked domains\n */\nexport function setCustomBlockedDomains(domains) {\n customBlockedDomains = domains || [];\n}\n\n/**\n * Get queued scripts\n */\nexport function getScriptQueue() {\n return [...scriptQueue];\n}\n\n/**\n * Clear the script queue\n */\nexport function clearScriptQueue() {\n scriptQueue.length = 0;\n}\n\n/**\n * Check if script URL matches custom blocked domains\n */\nfunction matchesCustomDomains(url) {\n if (!url || customBlockedDomains.length === 0) return null;\n\n try {\n const hostname = new URL(url).hostname.toLowerCase();\n\n for (const entry of customBlockedDomains) {\n const domain = typeof entry === 'string' ? entry : entry.domain;\n const category = typeof entry === 'string' ? 'marketing' : (entry.category || 'marketing');\n\n if (hostname === domain || hostname.endsWith('.' + domain)) {\n return category;\n }\n }\n } catch (e) {\n // Invalid URL\n }\n\n return null;\n}\n\n/**\n * Determine if a script should be blocked and get its category.\n *\n * A self-applied 'essential' label is ignored — only explicit blockable\n * categories are accepted. That prevents a third-party script from\n * stamping itself with data-consent-category=\"essential\" to slip past\n * mode-based blocking.\n */\nfunction getScriptBlockCategory(script) {\n // Skip if script has data-zest-allow attribute (opt-out)\n if (script.hasAttribute('data-zest-allow')) {\n return null;\n }\n\n // 1. Check for explicit data-consent-category attribute.\n // Only honor values from the blockable set; 'essential' and unknown\n // values fall through to the other checks.\n const explicitCategory = script.getAttribute('data-consent-category');\n const explicitBlockable = explicitCategory && BLOCKABLE_CATEGORIES.has(explicitCategory)\n ? explicitCategory\n : null;\n\n const src = script.src;\n\n // No src = inline script, only block if explicitly tagged (blockable only)\n if (!src) {\n return explicitBlockable;\n }\n\n // 2. Check custom blocked domains\n const customCategory = matchesCustomDomains(src);\n\n // 3. Mode-based blocking\n let modeCategory = null;\n switch (blockingMode) {\n case 'manual':\n break;\n\n case 'safe':\n case 'strict':\n modeCategory = getCategoryForScript(src, blockingMode);\n break;\n\n case 'doomsday':\n if (isThirdParty(src)) {\n modeCategory = getCategoryForScript(src, 'strict') || 'marketing';\n }\n break;\n\n default:\n break;\n }\n\n // Use the strictest category among explicit/custom/mode decisions.\n // We collect all categories the script matches and pick the first\n // that appears in the blockable set (any match wins — but we prefer\n // the mode-assigned one since it's authoritative for third-party\n // trackers that try to self-label as 'functional').\n return modeCategory || customCategory || explicitBlockable;\n}\n\n/**\n * Block a script element\n */\nfunction blockScript(script) {\n // Skip already processed scripts\n if (script.hasAttribute('data-zest-processed')) {\n return false;\n }\n\n const category = getScriptBlockCategory(script);\n\n if (!category) {\n script.setAttribute('data-zest-processed', 'allowed');\n return false;\n }\n\n if (checkConsent(category)) {\n // Consent already given - allow script\n script.setAttribute('data-zest-processed', 'allowed');\n return false;\n }\n\n // Store script info for later execution. Snapshot the src/text BEFORE\n // mutating the DOM — this snapshot is the authoritative replay source\n // so later DOM tampering cannot hijack the replayed script URL.\n const scriptInfo = {\n category,\n src: script.src || '',\n inline: script.textContent,\n type: script.type,\n async: script.async,\n defer: script.defer,\n element: script,\n timestamp: Date.now()\n };\n\n // Mark as processed\n script.setAttribute('data-zest-processed', 'blocked');\n script.setAttribute('data-consent-category', category);\n\n // Disable the script\n script.type = 'text/plain';\n\n // Remove src to prevent loading. We no longer stash it on the element\n // (data-blocked-src was a tampering vector); scriptQueue is the single\n // source of truth for replay.\n if (script.src) {\n script.removeAttribute('src');\n }\n\n if (scriptQueue.length < MAX_QUEUE_SIZE) {\n scriptQueue.push(scriptInfo);\n }\n return true;\n}\n\n/**\n * Replay queued scripts for allowed categories.\n *\n * scriptQueue is the single source of truth for src and inline body —\n * we never re-read data-* attributes from the DOM (which an attacker\n * could have rewritten in the intervening time).\n */\nexport function replayScripts(allowedCategories) {\n const remaining = [];\n\n for (const scriptInfo of scriptQueue) {\n if (!allowedCategories.includes(scriptInfo.category)) {\n remaining.push(scriptInfo);\n continue;\n }\n\n const newScript = document.createElement('script');\n if (scriptInfo.src) {\n newScript.src = scriptInfo.src;\n } else if (scriptInfo.inline) {\n newScript.textContent = scriptInfo.inline;\n }\n if (scriptInfo.async) newScript.async = true;\n if (scriptInfo.defer) newScript.defer = true;\n if (scriptInfo.type && scriptInfo.type !== 'text/plain') {\n newScript.type = scriptInfo.type;\n }\n newScript.setAttribute('data-zest-processed', 'executed');\n newScript.setAttribute('data-consent-executed', 'true');\n\n // If the original element is still in the DOM, replace it in place\n // so execution order is preserved. Otherwise append to <head>.\n const original = scriptInfo.element;\n if (original && original.isConnected && original.parentNode) {\n original.parentNode.replaceChild(newScript, original);\n } else {\n document.head.appendChild(newScript);\n }\n }\n\n scriptQueue.length = 0;\n scriptQueue.push(...remaining);\n}\n\n/**\n * Process existing scripts in the DOM\n */\nfunction processExistingScripts() {\n const scripts = document.querySelectorAll('script:not([data-zest-processed])');\n scripts.forEach(blockScript);\n}\n\n/**\n * Handle mutations (new scripts added to DOM)\n */\nfunction handleMutations(mutations) {\n for (const mutation of mutations) {\n for (const node of mutation.addedNodes) {\n if (node.nodeName === 'SCRIPT' && !node.hasAttribute('data-zest-processed')) {\n blockScript(node);\n }\n\n // Check child scripts\n if (node.querySelectorAll) {\n const scripts = node.querySelectorAll('script:not([data-zest-processed])');\n scripts.forEach(blockScript);\n }\n }\n }\n}\n\n/**\n * Start observing for new scripts\n */\nexport function startScriptBlocking(mode = 'safe', customDomains = []) {\n blockingMode = mode;\n customBlockedDomains = customDomains;\n\n // Process existing scripts\n processExistingScripts();\n\n // Watch for new scripts\n observer = new MutationObserver(handleMutations);\n\n observer.observe(document.documentElement, {\n childList: true,\n subtree: true\n });\n\n return true;\n}\n\n/**\n * Stop observing for new scripts\n */\nexport function stopScriptBlocking() {\n if (observer) {\n observer.disconnect();\n observer = null;\n }\n}\n","/**\n * Default consent categories\n */\nexport const DEFAULT_CATEGORIES = {\n essential: {\n id: 'essential',\n label: 'Essential',\n description: 'Required for the website to function properly. Cannot be disabled.',\n required: true,\n default: true\n },\n functional: {\n id: 'functional',\n label: 'Functional',\n description: 'Enable personalized features like language preferences and themes.',\n required: false,\n default: false\n },\n analytics: {\n id: 'analytics',\n label: 'Analytics',\n description: 'Help us understand how visitors interact with our website.',\n required: false,\n default: false\n },\n marketing: {\n id: 'marketing',\n label: 'Marketing',\n description: 'Used to deliver relevant advertisements and track campaign performance.',\n required: false,\n default: false\n }\n};\n\n/**\n * Default consent state\n */\nexport function getDefaultConsent() {\n return {\n essential: true,\n functional: false,\n analytics: false,\n marketing: false\n };\n}\n\n/**\n * Get all category IDs\n */\nexport function getCategoryIds() {\n return Object.keys(DEFAULT_CATEGORIES);\n}\n","/**\n * Do Not Track (DNT) Detection\n *\n * Detects browser DNT/GPC signals for privacy compliance\n */\n\n/**\n * Check if Do Not Track is enabled\n * Checks both DNT header and Global Privacy Control (GPC)\n */\nexport function isDoNotTrackEnabled() {\n if (typeof navigator === 'undefined') {\n return false;\n }\n\n // Check DNT (Do Not Track)\n // Values: \"1\" = enabled, \"0\" = disabled, null/undefined = not set\n const dnt = navigator.doNotTrack ||\n window.doNotTrack ||\n navigator.msDoNotTrack;\n\n if (dnt === '1' || dnt === 'yes' || dnt === true) {\n return true;\n }\n\n // Check GPC (Global Privacy Control) - newer standard\n // https://globalprivacycontrol.org/\n if (navigator.globalPrivacyControl === true) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Get DNT signal details for logging/debugging\n */\nexport function getDNTDetails() {\n if (typeof navigator === 'undefined') {\n return { enabled: false, source: null };\n }\n\n const dnt = navigator.doNotTrack ||\n window.doNotTrack ||\n navigator.msDoNotTrack;\n\n if (dnt === '1' || dnt === 'yes' || dnt === true) {\n return { enabled: true, source: 'dnt' };\n }\n\n if (navigator.globalPrivacyControl === true) {\n return { enabled: true, source: 'gpc' };\n }\n\n return { enabled: false, source: null };\n}\n","/**\n * Consent Signals - Optional vendor consent mode integrations\n *\n * Pushes consent state to Google Consent Mode v2 and/or Microsoft UET\n * Consent Mode when enabled via config.\n */\n\n/**\n * Map Zest consent state to Google Consent Mode v2 signals\n */\nfunction toGoogleSignals(consent) {\n const g = (val) => val ? 'granted' : 'denied';\n return {\n ad_storage: g(consent.marketing),\n ad_user_data: g(consent.marketing),\n ad_personalization: g(consent.marketing),\n analytics_storage: g(consent.analytics),\n functionality_storage: 'granted', // essential is always true\n personalization_storage: g(consent.functional)\n };\n}\n\n/**\n * Push consent signal to Google via gtag or dataLayer fallback.\n * Uses a local function to preserve the `arguments` object shape\n * that gtag/dataLayer expects (not an array).\n */\nfunction pushGoogle(type, signals) {\n window.dataLayer = window.dataLayer || [];\n if (typeof window.gtag === 'function') {\n window.gtag('consent', type, signals);\n } else {\n function gtagFallback() { window.dataLayer.push(arguments); }\n gtagFallback('consent', type, signals);\n }\n}\n\n/**\n * Map Zest consent state to Microsoft UET signal.\n * Microsoft UET only exposes ad_storage.\n */\nfunction toMicrosoftSignals(consent) {\n return { ad_storage: consent.marketing ? 'granted' : 'denied' };\n}\n\n/**\n * Push consent signal to Microsoft UET\n */\nfunction pushMicrosoft(type, signals) {\n window.uetq = window.uetq || [];\n window.uetq.push('consent', type, signals);\n}\n\n/**\n * Apply consent signals to enabled vendor integrations.\n *\n * @param {Object} consent Current Zest consent state\n * @param {Object} config Merged Zest config\n * @param {boolean} isDefault true on first call (pushes 'default'), false for updates\n */\nexport function applyConsentSignals(consent, config, isDefault) {\n const type = isDefault ? 'default' : 'update';\n\n if (config.consentModeGoogle) {\n pushGoogle(type, toGoogleSignals(consent));\n }\n\n if (config.consentModeMicrosoft) {\n pushMicrosoft(type, toMicrosoftSignals(consent));\n }\n}\n","/**\n * ES only translation - auto-generated\n * Do not edit manually, run: npm run build\n */\nexport const translations = {\n es: {\n \"labels\": {\n \"banner\": {\n \"title\": \"Valoramos tu privacidad\",\n \"description\": \"Utilizamos cookies para mejorar tu experiencia de navegación, ofrecer contenido personalizado y analizar nuestro tráfico. Al hacer clic en \\\"Aceptar todo\\\", consientes el uso de cookies.\",\n \"acceptAll\": \"Aceptar todo\",\n \"rejectAll\": \"Rechazar todo\",\n \"settings\": \"Configuración\"\n },\n \"modal\": {\n \"title\": \"Configuración de privacidad\",\n \"description\": \"Gestiona tus preferencias de cookies. Puedes activar o desactivar diferentes tipos de cookies a continuación.\",\n \"save\": \"Guardar preferencias\",\n \"acceptAll\": \"Aceptar todo\",\n \"rejectAll\": \"Rechazar todo\"\n },\n \"widget\": {\n \"label\": \"Configuración de cookies\"\n }\n },\n \"categories\": {\n \"essential\": {\n \"label\": \"Esenciales\",\n \"description\": \"Necesarias para el funcionamiento del sitio web. No se pueden desactivar.\"\n },\n \"functional\": {\n \"label\": \"Funcionales\",\n \"description\": \"Permiten funciones personalizadas como preferencias de idioma y temas.\"\n },\n \"analytics\": {\n \"label\": \"Analíticas\",\n \"description\": \"Nos ayudan a entender cómo los visitantes interactúan con nuestro sitio web.\"\n },\n \"marketing\": {\n \"label\": \"Marketing\",\n \"description\": \"Se utilizan para mostrar anuncios relevantes y medir el rendimiento de las campañas.\"\n }\n }\n }\n};\n\nexport const supportedLanguages = ['es'];\n\nexport function detectLanguage() {\n return 'es';\n}\n\nexport function getTranslation() {\n return translations.es;\n}\n","/**\n * Default configuration values\n */\n\nimport { DEFAULT_CATEGORIES } from '../core/categories.js';\nimport { detectLanguage, getTranslation } from '../i18n/translations.js';\n\nexport const DEFAULTS = {\n // Language: 'auto' | 'en' | 'de' | 'es' | 'fr' | 'it' | 'pt' | 'nl' | 'pl' | 'uk' | 'ru' | 'ja' | 'zh'\n lang: 'auto',\n\n // UI positioning\n position: 'bottom', // 'bottom' | 'bottom-left' | 'bottom-right' | 'top'\n\n // Theming\n theme: 'auto', // 'light' | 'dark' | 'auto'\n accentColor: '#0071e3',\n\n // Categories\n categories: DEFAULT_CATEGORIES,\n\n // UI Labels\n labels: {\n banner: {\n title: 'We value your privacy',\n description: 'We use cookies to enhance your browsing experience, serve personalized content, and analyze our traffic. By clicking \"Accept All\", you consent to our use of cookies.',\n acceptAll: 'Accept All',\n rejectAll: 'Reject All',\n settings: 'Settings'\n },\n modal: {\n title: 'Privacy Settings',\n description: 'Manage your cookie preferences. You can enable or disable different types of cookies below.',\n save: 'Save Preferences',\n acceptAll: 'Accept All',\n rejectAll: 'Reject All'\n },\n widget: {\n label: 'Cookie Settings'\n }\n },\n\n // Behavior\n autoInit: true,\n showWidget: true,\n expiration: 365,\n\n // Do Not Track / Global Privacy Control\n // respectDNT: true = respect DNT/GPC signals\n // dntBehavior: 'reject' | 'preselect' | 'ignore'\n // - 'reject': auto-reject non-essential, don't show banner\n // - 'preselect': show banner with non-essential unchecked (same as normal)\n // - 'ignore': ignore DNT completely\n respectDNT: true,\n dntBehavior: 'reject',\n\n // Custom styles to inject into Shadow DOM\n customStyles: '',\n\n // Vendor consent mode integrations (optional)\n consentModeGoogle: false,\n consentModeMicrosoft: false,\n\n // Blocking mode: 'manual' | 'safe' | 'strict' | 'doomsday'\n mode: 'safe',\n\n // Interceptor toggles. By default Zest installs cookie + storage\n // interceptors that route writes through the consent layer. Consumers\n // who manage gating themselves (typically headless mode with custom\n // analytics integrations) can opt out per channel.\n intercept: {\n cookies: true,\n storage: true,\n scripts: true\n },\n\n // Strictly-necessary declarations. Both fields *append* to whatever\n // the essential category already matches via the pattern matcher\n // defaults — they do not replace.\n //\n // - essentialKeys: array of exact storage / cookie names to treat\n // as strictly-necessary. Easiest case.\n // - essentialPatterns: array of regex source strings, validated via\n // safeRegExp. For prefix or family matches.\n //\n // Use these instead of `patterns.essential` when you only want to\n // ADD entries to the essential category without replacing the\n // built-in patterns (zest_*, csrf*, xsrf*, session*, __host-*,\n // __secure-*).\n essentialKeys: [],\n essentialPatterns: [],\n\n // Custom domains to block (in addition to mode-based blocking)\n blockedDomains: [], // days\n\n // Links\n policyUrl: null,\n imprintUrl: null,\n\n // Callbacks\n callbacks: {\n onAccept: null,\n onReject: null,\n onChange: null,\n onReady: null\n }\n};\n\n/**\n * Merge user config with defaults (deep merge)\n */\nexport function mergeConfig(userConfig) {\n const config = { ...DEFAULTS };\n\n if (!userConfig) {\n userConfig = {};\n }\n\n // Simple properties\n const simpleKeys = ['lang', 'position', 'theme', 'accentColor', 'autoInit', 'showWidget', 'expiration', 'policyUrl', 'imprintUrl', 'customStyles', 'mode', 'blockedDomains', 'respectDNT', 'dntBehavior', 'consentModeGoogle', 'consentModeMicrosoft'];\n for (const key of simpleKeys) {\n if (userConfig[key] !== undefined) {\n config[key] = userConfig[key];\n }\n }\n\n // Detect language and get translations\n const detectedLang = detectLanguage(config.lang);\n config.lang = detectedLang;\n const translation = getTranslation(detectedLang);\n\n // Deep merge labels (translation < user config)\n const translationLabels = translation.labels || {};\n const userLabels = userConfig.labels || {};\n config.labels = {\n banner: {\n ...DEFAULTS.labels.banner,\n ...translationLabels.banner,\n ...userLabels.banner\n },\n modal: {\n ...DEFAULTS.labels.modal,\n ...translationLabels.modal,\n ...userLabels.modal\n },\n widget: {\n ...DEFAULTS.labels.widget,\n ...translationLabels.widget,\n ...userLabels.widget\n }\n };\n\n // Deep merge categories (translation < user config)\n const translationCategories = translation.categories || {};\n const userCategories = userConfig.categories || {};\n config.categories = { ...DEFAULTS.categories };\n for (const key of Object.keys(DEFAULTS.categories)) {\n config.categories[key] = {\n ...DEFAULTS.categories[key],\n ...translationCategories[key],\n ...userCategories[key]\n };\n }\n\n // Merge callbacks\n if (userConfig.callbacks) {\n config.callbacks = { ...DEFAULTS.callbacks, ...userConfig.callbacks };\n }\n\n // Patterns (for pattern matcher)\n if (userConfig.patterns) {\n config.patterns = userConfig.patterns;\n }\n\n // Interceptor toggles — shallow-merge so consumers can pass partial\n // overrides like `intercept: { storage: false }` without losing the\n // other defaults.\n if (userConfig.intercept && typeof userConfig.intercept === 'object') {\n config.intercept = {\n ...DEFAULTS.intercept,\n ...userConfig.intercept\n };\n }\n\n // Strictly-necessary declarations\n if (Array.isArray(userConfig.essentialKeys)) {\n config.essentialKeys = userConfig.essentialKeys.filter(\n (k) => typeof k === 'string' && k.length > 0 && k.length <= 200\n );\n }\n if (Array.isArray(userConfig.essentialPatterns)) {\n config.essentialPatterns = userConfig.essentialPatterns.filter(\n (p) => typeof p === 'string' && p.length > 0 && p.length <= 500\n );\n }\n\n return config;\n}\n","/**\n * Configuration Parser - Reads config from various sources\n */\n\nimport { mergeConfig } from './defaults.js';\n\n/**\n * Parse data attributes from script tag\n */\nfunction parseDataAttributes() {\n // Find the Zest script tag\n const script = document.currentScript ||\n document.querySelector('script[data-zest]') ||\n document.querySelector('script[src*=\"zest\"]');\n\n if (!script) {\n return {};\n }\n\n const config = {};\n\n // Position\n const position = script.getAttribute('data-position');\n if (position) config.position = position;\n\n // Theme\n const theme = script.getAttribute('data-theme');\n if (theme) config.theme = theme;\n\n // Accent color\n const accent = script.getAttribute('data-accent') || script.getAttribute('data-accent-color');\n if (accent) config.accentColor = accent;\n\n // Policy URL\n const policyUrl = script.getAttribute('data-policy-url') || script.getAttribute('data-privacy-url');\n if (policyUrl) config.policyUrl = policyUrl;\n\n // Imprint URL\n const imprintUrl = script.getAttribute('data-imprint-url');\n if (imprintUrl) config.imprintUrl = imprintUrl;\n\n // Show widget\n const showWidget = script.getAttribute('data-show-widget');\n if (showWidget !== null) config.showWidget = showWidget !== 'false';\n\n // Auto init\n const autoInit = script.getAttribute('data-auto-init');\n if (autoInit !== null) config.autoInit = autoInit !== 'false';\n\n // Expiration\n const expiration = script.getAttribute('data-expiration');\n if (expiration) config.expiration = parseInt(expiration, 10);\n\n // Consent mode integrations\n const consentModeGoogle = script.getAttribute('data-consent-mode-google');\n if (consentModeGoogle !== null) config.consentModeGoogle = consentModeGoogle !== 'false';\n\n const consentModeMicrosoft = script.getAttribute('data-consent-mode-microsoft');\n if (consentModeMicrosoft !== null) config.consentModeMicrosoft = consentModeMicrosoft !== 'false';\n\n return config;\n}\n\n/**\n * Parse window.ZestConfig object\n */\nfunction parseWindowConfig() {\n if (typeof window !== 'undefined' && window.ZestConfig) {\n return window.ZestConfig;\n }\n return {};\n}\n\n/**\n * Get final merged configuration\n * Priority: data attributes > window.ZestConfig > defaults\n */\nexport function getConfig() {\n const windowConfig = parseWindowConfig();\n const dataConfig = parseDataAttributes();\n\n // Merge: defaults < windowConfig < dataConfig\n return mergeConfig({\n ...windowConfig,\n ...dataConfig\n });\n}\n\n/**\n * Update configuration at runtime\n */\nlet currentConfig = null;\n\nexport function setConfig(config) {\n currentConfig = mergeConfig(config);\n return currentConfig;\n}\n\nexport function getCurrentConfig() {\n if (!currentConfig) {\n currentConfig = getConfig();\n }\n return currentConfig;\n}\n","/**\n * Consent Store - Manages consent state persistence\n */\n\nimport { getDefaultConsent, getCategoryIds } from '../core/categories.js';\nimport { getOriginalCookieDescriptor } from '../core/cookie-interceptor.js';\nimport { sanitizeConsentPayload } from '../core/security.js';\n\nconst COOKIE_NAME = 'zest_consent';\nconst CONSENT_VERSION = '1.0';\n\n/**\n * Return the Secure flag fragment when running over HTTPS, empty otherwise.\n * On HTTPS sites, omitting Secure lets the cookie leak over plain HTTP.\n */\nfunction secureAttribute() {\n try {\n return typeof location !== 'undefined' && location.protocol === 'https:'\n ? '; Secure'\n : '';\n } catch (_) {\n return '';\n }\n}\n\n// Current consent state\nlet consent = null;\n\n/**\n * Get the original cookie setter (bypasses interception)\n */\nfunction setRawCookie(value) {\n const descriptor = getOriginalCookieDescriptor();\n if (descriptor?.set) {\n descriptor.set.call(document, value);\n } else {\n // Fallback if interceptor not initialized yet\n document.cookie = value;\n }\n}\n\n/**\n * Get the original cookie getter\n */\nfunction getRawCookie() {\n const descriptor = getOriginalCookieDescriptor();\n if (descriptor?.get) {\n return descriptor.get.call(document);\n }\n return document.cookie;\n}\n\n/**\n * Load consent from cookie.\n *\n * The parsed cookie is validated against the expected schema via\n * sanitizeConsentPayload — only known category keys with boolean values\n * survive, so a tampered cookie can't inject prototype-polluting props\n * or unexpected category shapes.\n */\nexport function loadConsent() {\n try {\n const cookies = getRawCookie();\n const match = cookies.match(new RegExp(`${COOKIE_NAME}=([^;]+)`));\n\n if (match) {\n const raw = JSON.parse(decodeURIComponent(match[1]));\n const clean = sanitizeConsentPayload(raw, getCategoryIds());\n if (clean && clean.categories) {\n consent = { ...getDefaultConsent(), ...clean.categories };\n return { ...consent };\n }\n }\n } catch (e) {\n // Invalid or missing cookie\n }\n\n consent = getDefaultConsent();\n return { ...consent };\n}\n\n/**\n * Save consent to cookie\n */\nexport function saveConsent(expirationDays = 365) {\n if (!consent) {\n consent = getDefaultConsent();\n }\n\n const data = {\n version: CONSENT_VERSION,\n timestamp: Date.now(),\n categories: consent\n };\n\n const expires = new Date(Date.now() + expirationDays * 24 * 60 * 60 * 1000).toUTCString();\n const cookieValue = `${COOKIE_NAME}=${encodeURIComponent(JSON.stringify(data))}; expires=${expires}; path=/; SameSite=Lax${secureAttribute()}`;\n\n setRawCookie(cookieValue);\n}\n\n/**\n * Get current consent state\n */\nexport function getConsent() {\n if (!consent) {\n consent = loadConsent();\n }\n return { ...consent };\n}\n\n/**\n * Update consent state\n */\nexport function updateConsent(newConsent, expirationDays = 365) {\n const previous = consent ? { ...consent } : getDefaultConsent();\n\n consent = {\n essential: true, // Always true\n functional: !!newConsent.functional,\n analytics: !!newConsent.analytics,\n marketing: !!newConsent.marketing\n };\n\n saveConsent(expirationDays);\n\n return { current: { ...consent }, previous };\n}\n\n/**\n * Check if specific category is allowed\n */\nexport function hasConsent(category) {\n if (!consent) {\n consent = loadConsent();\n }\n return consent[category] === true;\n}\n\n/**\n * Accept all categories\n */\nexport function acceptAll(expirationDays = 365) {\n return updateConsent({\n essential: true,\n functional: true,\n analytics: true,\n marketing: true\n }, expirationDays);\n}\n\n/**\n * Reject all (except essential)\n */\nexport function rejectAll(expirationDays = 365) {\n return updateConsent({\n essential: true,\n functional: false,\n analytics: false,\n marketing: false\n }, expirationDays);\n}\n\n/**\n * Reset consent (clear cookie)\n */\nexport function resetConsent() {\n setRawCookie(`${COOKIE_NAME}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; SameSite=Lax${secureAttribute()}`);\n consent = null;\n}\n\n/**\n * Check if consent has been given (any decision made)\n */\nexport function hasConsentDecision() {\n try {\n const cookies = getRawCookie();\n return cookies.includes(COOKIE_NAME);\n } catch (e) {\n return false;\n }\n}\n\n/**\n * Get consent proof for compliance\n */\nexport function getConsentProof() {\n try {\n const cookies = getRawCookie();\n const match = cookies.match(new RegExp(`${COOKIE_NAME}=([^;]+)`));\n\n if (match) {\n const raw = JSON.parse(decodeURIComponent(match[1]));\n return sanitizeConsentPayload(raw, getCategoryIds());\n }\n } catch (e) {\n // Invalid cookie\n }\n\n return null;\n}\n","/**\n * Events - Custom event dispatching for consent changes\n */\n\n// Event names\nexport const EVENTS = {\n READY: 'zest:ready',\n CONSENT: 'zest:consent',\n REJECT: 'zest:reject',\n CHANGE: 'zest:change',\n SHOW: 'zest:show',\n HIDE: 'zest:hide'\n};\n\n/**\n * Dispatch a custom event\n */\nexport function emit(eventName, detail = {}) {\n const event = new CustomEvent(eventName, {\n detail,\n bubbles: true,\n cancelable: true\n });\n\n document.dispatchEvent(event);\n return event;\n}\n\n/**\n * Emit ready event\n */\nexport function emitReady(consent) {\n return emit(EVENTS.READY, { consent });\n}\n\n/**\n * Emit consent event (user accepted)\n */\nexport function emitConsent(consent, previous) {\n return emit(EVENTS.CONSENT, { consent, previous });\n}\n\n/**\n * Emit reject event (user rejected all)\n */\nexport function emitReject(consent) {\n return emit(EVENTS.REJECT, { consent });\n}\n\n/**\n * Emit change event (any consent change)\n */\nexport function emitChange(consent, previous) {\n return emit(EVENTS.CHANGE, { consent, previous });\n}\n\n/**\n * Emit show event (banner/modal shown)\n */\nexport function emitShow(type = 'banner') {\n return emit(EVENTS.SHOW, { type });\n}\n\n/**\n * Emit hide event (banner/modal hidden)\n */\nexport function emitHide(type = 'banner') {\n return emit(EVENTS.HIDE, { type });\n}\n\n/**\n * Subscribe to an event\n */\nexport function on(eventName, callback) {\n document.addEventListener(eventName, callback);\n return () => document.removeEventListener(eventName, callback);\n}\n\n/**\n * Subscribe to an event once\n */\nexport function once(eventName, callback) {\n document.addEventListener(eventName, callback, { once: true });\n}\n","/**\n * Core lifecycle - UI-agnostic initialization and consent actions.\n *\n * This module contains everything the main entry (with UI) and the\n * headless entry (no UI) share: interceptor setup, consent load/save,\n * replay, DNT handling, and the events/callbacks fan-out. It intentionally\n * does NOT import anything from `./ui/*` so tree-shakers can drop the UI\n * bundle entirely when only the headless API is used.\n */\n\nimport { interceptCookies, setConsentChecker as setCookieChecker, replayCookies } from './core/cookie-interceptor.js';\nimport { interceptStorage, setConsentChecker as setStorageChecker, replayStorage } from './core/storage-interceptor.js';\nimport { startScriptBlocking, setConsentChecker as setScriptChecker, replayScripts } from './core/script-blocker.js';\nimport { setPatterns, appendPatternsToCategory } from './core/pattern-matcher.js';\nimport { getCategoryIds } from './core/categories.js';\nimport { isDoNotTrackEnabled } from './core/dnt.js';\nimport { safeInvoke } from './core/security.js';\n\nimport { applyConsentSignals } from './integrations/consent-signals.js';\n\nimport { setConfig } from './config/parser.js';\n\nimport {\n loadConsent,\n hasConsent,\n updateConsent,\n acceptAll as storeAcceptAll,\n rejectAll as storeRejectAll,\n resetConsent,\n hasConsentDecision\n} from './storage/consent-store.js';\nimport { emitReady, emitConsent, emitReject, emitChange } from './storage/events.js';\n\nlet initialized = false;\nlet currentConfig = null;\n\nfunction checkConsent(category) {\n return hasConsent(category);\n}\n\nfunction replayAll(categories) {\n replayCookies(categories);\n replayStorage(categories);\n replayScripts(categories);\n}\n\n/**\n * Run the non-UI half of init. Returns a snapshot the caller (UI or\n * headless) can use to decide what to do next.\n */\nexport function coreInit(userConfig = {}) {\n if (initialized) {\n return {\n alreadyInitialized: true,\n config: currentConfig,\n consent: loadConsent(),\n hasDecision: hasConsentDecision(),\n dntApplied: false\n };\n }\n\n currentConfig = setConfig(userConfig);\n\n // Push default-denied state to vendor consent mode APIs BEFORE any\n // third-party script has a chance to fire.\n applyConsentSignals(\n { essential: true, functional: false, analytics: false, marketing: false },\n currentConfig,\n true\n );\n\n if (currentConfig.patterns) {\n setPatterns(currentConfig.patterns);\n }\n\n // Append consumer-declared strictly-necessary entries on top of\n // whatever's already in the essential category. This is the friendly\n // alternative to overriding via `patterns.essential` directly.\n if (\n (Array.isArray(currentConfig.essentialKeys) && currentConfig.essentialKeys.length > 0) ||\n (Array.isArray(currentConfig.essentialPatterns) && currentConfig.essentialPatterns.length > 0)\n ) {\n appendPatternsToCategory('essential', {\n keys: currentConfig.essentialKeys,\n patternStrings: currentConfig.essentialPatterns\n });\n }\n\n setCookieChecker(checkConsent);\n setStorageChecker(checkConsent);\n setScriptChecker(checkConsent);\n\n // Interceptor toggles. By default everything is intercepted (back-compat\n // with v2.0 / v2.1). Consumers that gate scripts and storage themselves\n // can opt out per channel via `intercept: { storage: false, … }`.\n const intercept = currentConfig.intercept || { cookies: true, storage: true, scripts: true };\n if (intercept.cookies !== false) interceptCookies();\n if (intercept.storage !== false) interceptStorage();\n if (intercept.scripts !== false) {\n startScriptBlocking(currentConfig.mode, currentConfig.blockedDomains);\n }\n\n const consent = loadConsent();\n initialized = true;\n\n if (hasConsentDecision()) {\n applyConsentSignals(consent, currentConfig, false);\n }\n\n // DNT / GPC handling — if the user signalled opt-out at the browser\n // level and the site opts to respect it, auto-reject before the UI\n // layer ever runs.\n const dntEnabled = isDoNotTrackEnabled();\n let dntApplied = false;\n\n if (dntEnabled && currentConfig.respectDNT && currentConfig.dntBehavior !== 'ignore') {\n if (currentConfig.dntBehavior === 'reject' && !hasConsentDecision()) {\n const result = storeRejectAll(currentConfig.expiration);\n dntApplied = true;\n applyConsentSignals(result.current, currentConfig, false);\n emitReject(result.current);\n emitChange(result.current, result.previous);\n safeInvoke(currentConfig.callbacks?.onReject);\n safeInvoke(currentConfig.callbacks?.onChange, result.current);\n }\n }\n\n emitReady(consent);\n safeInvoke(currentConfig.callbacks?.onReady, consent);\n\n return {\n alreadyInitialized: false,\n config: currentConfig,\n consent,\n hasDecision: hasConsentDecision(),\n dntApplied\n };\n}\n\n/**\n * Accept all categories, replay queued items, fire events + callbacks.\n * Returns { current, previous } or null if not yet initialized.\n */\nexport function coreAcceptAll() {\n if (!initialized) return null;\n const result = storeAcceptAll(currentConfig.expiration);\n applyConsentSignals(result.current, currentConfig, false);\n replayAll(getCategoryIds());\n emitConsent(result.current, result.previous);\n emitChange(result.current, result.previous);\n safeInvoke(currentConfig.callbacks?.onAccept, result.current);\n safeInvoke(currentConfig.callbacks?.onChange, result.current);\n return result;\n}\n\n/**\n * Reject all non-essential categories, fire events + callbacks.\n */\nexport function coreRejectAll() {\n if (!initialized) return null;\n const result = storeRejectAll(currentConfig.expiration);\n applyConsentSignals(result.current, currentConfig, false);\n emitReject(result.current);\n emitChange(result.current, result.previous);\n safeInvoke(currentConfig.callbacks?.onReject);\n safeInvoke(currentConfig.callbacks?.onChange, result.current);\n return result;\n}\n\n/**\n * Save custom selections and replay only the newly-allowed categories.\n */\nexport function coreUpdateConsent(selections) {\n if (!initialized) return null;\n const result = updateConsent(selections, currentConfig.expiration);\n applyConsentSignals(result.current, currentConfig, false);\n\n const newlyAllowed = Object.keys(result.current).filter(\n (cat) => result.current[cat] && !result.previous[cat]\n );\n if (newlyAllowed.length > 0) {\n replayAll(newlyAllowed);\n }\n\n const hasNonEssential = Object.entries(selections || {}).some(\n ([cat, val]) => cat !== 'essential' && val\n );\n if (hasNonEssential) {\n emitConsent(result.current, result.previous);\n } else {\n emitReject(result.current);\n }\n emitChange(result.current, result.previous);\n safeInvoke(currentConfig.callbacks?.onChange, result.current);\n return result;\n}\n\n/**\n * Clear the consent cookie. The caller is responsible for any UI reset.\n */\nexport function coreReset() {\n resetConsent();\n}\n\nexport function isInitialized() {\n return initialized;\n}\n\nexport function getActiveConfig() {\n return currentConfig;\n}\n","/**\n * Styles - Shadow DOM encapsulated CSS with theming\n */\n\nimport { safeColor, sanitizeCustomStyles } from '../core/security.js';\n\nconst DEFAULT_ACCENT = '#4F46E5';\n\n/**\n * Generate CSS with custom properties\n */\nexport function generateStyles(config) {\n // Only accept colors that pass strict validation — an unvalidated\n // value is a CSS-injection vector (e.g. `red; } * { display:none; /*`).\n const accentColor = safeColor(config.accentColor) || DEFAULT_ACCENT;\n const customCss = sanitizeCustomStyles(config.customStyles);\n\n return `\n:host {\n --zest-accent: ${accentColor};\n --zest-accent-hover: ${adjustColor(accentColor, -15)};\n --zest-bg: #ffffff;\n --zest-bg-secondary: #f3f4f6;\n --zest-text: #1f2937;\n --zest-text-secondary: #6b7280;\n --zest-border: #e5e7eb;\n --zest-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);\n --zest-radius: 12px;\n --zest-radius-sm: 8px;\n --zest-font: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n\n font-family: var(--zest-font);\n font-size: 14px;\n line-height: 1.5;\n color: var(--zest-text);\n box-sizing: border-box;\n}\n\n:host([data-theme=\"dark\"]) {\n --zest-bg: #1f2937;\n --zest-bg-secondary: #374151;\n --zest-text: #f9fafb;\n --zest-text-secondary: #9ca3af;\n --zest-border: #4b5563;\n --zest-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.4), 0 8px 10px -6px rgba(0, 0, 0, 0.3);\n}\n\n@media (prefers-color-scheme: dark) {\n :host([data-theme=\"auto\"]) {\n --zest-bg: #1f2937;\n --zest-bg-secondary: #374151;\n --zest-text: #f9fafb;\n --zest-text-secondary: #9ca3af;\n --zest-border: #4b5563;\n --zest-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.4), 0 8px 10px -6px rgba(0, 0, 0, 0.3);\n }\n}\n\n*, *::before, *::after {\n box-sizing: border-box;\n}\n\n/* Banner */\n.zest-banner {\n position: fixed;\n z-index: 999999;\n max-width: 480px;\n padding: 20px;\n background: var(--zest-bg);\n border-radius: var(--zest-radius);\n box-shadow: var(--zest-shadow);\n animation: zest-slide-in 0.3s ease-out;\n}\n\n.zest-banner--bottom {\n bottom: 20px;\n left: 50%;\n transform: translateX(-50%);\n}\n\n.zest-banner--bottom-left {\n bottom: 20px;\n left: 20px;\n}\n\n.zest-banner--bottom-right {\n bottom: 20px;\n right: 20px;\n}\n\n.zest-banner--top {\n top: 20px;\n left: 50%;\n transform: translateX(-50%);\n}\n\n@keyframes zest-slide-in {\n from {\n opacity: 0;\n transform: translateX(-50%) translateY(20px);\n }\n to {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n }\n}\n\n.zest-banner--bottom-left {\n animation-name: zest-slide-in-left;\n}\n\n@keyframes zest-slide-in-left {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.zest-banner--bottom-right {\n animation-name: zest-slide-in-right;\n}\n\n@keyframes zest-slide-in-right {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .zest-banner,\n .zest-modal {\n animation: none;\n }\n}\n\n.zest-banner__title {\n margin: 0 0 8px 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--zest-text);\n}\n\n.zest-banner__description {\n margin: 0 0 16px 0;\n font-size: 14px;\n color: var(--zest-text-secondary);\n}\n\n.zest-banner__buttons {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n/* Buttons */\n.zest-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 10px 16px;\n font-size: 14px;\n font-weight: 500;\n font-family: inherit;\n border: none;\n border-radius: var(--zest-radius-sm);\n cursor: pointer;\n transition: background-color 0.15s ease, transform 0.1s ease;\n}\n\n.zest-btn:hover {\n transform: translateY(-1px);\n}\n\n.zest-btn:active {\n transform: translateY(0);\n}\n\n.zest-btn:focus-visible {\n outline: 2px solid var(--zest-accent);\n outline-offset: 2px;\n}\n\n.zest-btn--primary {\n background: var(--zest-accent);\n color: #ffffff;\n}\n\n.zest-btn--primary:hover {\n background: var(--zest-accent-hover);\n}\n\n.zest-btn--secondary {\n background: var(--zest-bg-secondary);\n color: var(--zest-text);\n}\n\n.zest-btn--secondary:hover {\n background: var(--zest-border);\n}\n\n.zest-btn--ghost {\n background: transparent;\n color: var(--zest-text-secondary);\n}\n\n.zest-btn--ghost:hover {\n background: var(--zest-bg-secondary);\n color: var(--zest-text);\n}\n\n/* Modal */\n.zest-modal-overlay {\n position: fixed;\n inset: 0;\n z-index: 999998;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px;\n background: rgba(0, 0, 0, 0.5);\n animation: zest-fade-in 0.2s ease-out;\n}\n\n@keyframes zest-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n.zest-modal {\n width: 100%;\n max-width: 500px;\n max-height: 90vh;\n overflow-y: auto;\n background: var(--zest-bg);\n border-radius: var(--zest-radius);\n box-shadow: var(--zest-shadow);\n animation: zest-modal-in 0.3s ease-out;\n}\n\n@keyframes zest-modal-in {\n from {\n opacity: 0;\n transform: scale(0.95);\n }\n to {\n opacity: 1;\n transform: scale(1);\n }\n}\n\n.zest-modal__header {\n padding: 20px 20px 0;\n}\n\n.zest-modal__title {\n margin: 0 0 8px 0;\n font-size: 18px;\n font-weight: 600;\n color: var(--zest-text);\n}\n\n.zest-modal__description {\n margin: 0;\n font-size: 14px;\n color: var(--zest-text-secondary);\n}\n\n.zest-modal__body {\n padding: 20px;\n}\n\n.zest-modal__footer {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n padding: 0 20px 20px;\n}\n\n/* Categories */\n.zest-category {\n padding: 16px;\n margin-bottom: 12px;\n background: var(--zest-bg-secondary);\n border-radius: var(--zest-radius-sm);\n}\n\n.zest-category:last-child {\n margin-bottom: 0;\n}\n\n.zest-category__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n}\n\n.zest-category__info {\n flex: 1;\n}\n\n.zest-category__label {\n display: block;\n font-size: 14px;\n font-weight: 600;\n color: var(--zest-text);\n}\n\n.zest-category__description {\n margin: 4px 0 0;\n font-size: 13px;\n color: var(--zest-text-secondary);\n}\n\n/* Toggle Switch */\n.zest-toggle {\n position: relative;\n width: 44px;\n height: 24px;\n flex-shrink: 0;\n}\n\n.zest-toggle__input {\n position: absolute;\n opacity: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n margin: 0;\n}\n\n.zest-toggle__input:disabled {\n cursor: not-allowed;\n}\n\n.zest-toggle__slider {\n position: absolute;\n inset: 0;\n background: var(--zest-border);\n border-radius: 12px;\n transition: background-color 0.2s ease;\n pointer-events: none;\n}\n\n.zest-toggle__slider::before {\n content: '';\n position: absolute;\n top: 2px;\n left: 2px;\n width: 20px;\n height: 20px;\n background: #ffffff;\n border-radius: 50%;\n transition: transform 0.2s ease;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);\n}\n\n.zest-toggle__input:checked + .zest-toggle__slider {\n background: var(--zest-accent);\n}\n\n.zest-toggle__input:checked + .zest-toggle__slider::before {\n transform: translateX(20px);\n}\n\n.zest-toggle__input:focus-visible + .zest-toggle__slider {\n outline: 2px solid var(--zest-accent);\n outline-offset: 2px;\n}\n\n.zest-toggle__input:disabled + .zest-toggle__slider {\n opacity: 0.6;\n}\n\n/* Widget */\n.zest-widget {\n position: fixed;\n z-index: 999997;\n bottom: 20px;\n left: 20px;\n}\n\n.zest-widget__btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 48px;\n height: 48px;\n padding: 0;\n background: var(--zest-bg);\n border: 1px solid var(--zest-border);\n border-radius: 50%;\n box-shadow: var(--zest-shadow);\n cursor: pointer;\n transition: transform 0.2s ease, box-shadow 0.2s ease;\n}\n\n.zest-widget__btn:hover {\n transform: scale(1.05);\n box-shadow: 0 12px 28px -5px rgba(0, 0, 0, 0.15);\n}\n\n.zest-widget__btn:focus-visible {\n outline: 2px solid var(--zest-accent);\n outline-offset: 2px;\n}\n\n.zest-widget__icon {\n width: 24px;\n height: 24px;\n fill: var(--zest-text);\n}\n\n/* Link */\n.zest-link {\n color: var(--zest-accent);\n text-decoration: none;\n}\n\n.zest-link:hover {\n text-decoration: underline;\n}\n\n/* Mobile */\n@media (max-width: 480px) {\n .zest-banner {\n left: 10px;\n right: 10px;\n max-width: none;\n transform: none;\n }\n\n .zest-banner--bottom,\n .zest-banner--bottom-left,\n .zest-banner--bottom-right {\n bottom: 10px;\n }\n\n .zest-banner--top {\n top: 10px;\n transform: none;\n }\n\n @keyframes zest-slide-in {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n }\n\n .zest-banner__buttons {\n flex-direction: column;\n }\n\n .zest-btn {\n width: 100%;\n }\n\n .zest-modal-overlay {\n padding: 10px;\n }\n\n .zest-widget {\n bottom: 10px;\n left: 10px;\n }\n}\n\n/* Hidden utility */\n.zest-hidden {\n display: none !important;\n}\n${customCss}\n`;\n}\n\n/**\n * Adjust color brightness. Falls back to the default accent if the input\n * cannot be parsed as a hex color (non-hex inputs pass safeColor but\n * can't be brightness-shifted mathematically).\n */\nfunction adjustColor(hex, percent) {\n if (typeof hex !== 'string' || !/^#[0-9a-fA-F]{3,8}$/.test(hex.trim())) {\n hex = DEFAULT_ACCENT;\n }\n let clean = hex.trim().replace('#', '');\n // Expand 3-digit form to 6\n if (clean.length === 3) {\n clean = clean.split('').map(c => c + c).join('');\n }\n // Strip alpha if present\n if (clean.length === 8) clean = clean.slice(0, 6);\n if (clean.length !== 6) clean = DEFAULT_ACCENT.slice(1);\n\n const num = parseInt(clean, 16);\n const amt = Math.round(2.55 * percent);\n const R = Math.min(255, Math.max(0, (num >> 16) + amt));\n const G = Math.min(255, Math.max(0, ((num >> 8) & 0x00ff) + amt));\n const B = Math.min(255, Math.max(0, (num & 0x0000ff) + amt));\n return '#' + (0x1000000 + R * 0x10000 + G * 0x100 + B).toString(16).slice(1);\n}\n\n/**\n * Cookie icon SVG\n */\nexport const COOKIE_ICON = `<svg viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><path d=\"M12 2C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10c0-.728-.078-1.437-.225-2.12a1 1 0 0 0-1.482-.63 3 3 0 0 1-4.086-3.72 1 1 0 0 0-.793-1.263A10.05 10.05 0 0 0 12 2zm0 2c.178 0 .354.006.528.017a5 5 0 0 0 5.955 5.955c.011.174.017.35.017.528 0 4.418-3.582 8-8 8s-8-3.582-8-8 3.582-8 8-8zm-4 6a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3zm5 0a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-2 4a1.5 1.5 0 1 0 0 3 1.5 1.5 0 0 0 0-3z\"/></svg>`;\n","/**\n * Banner - Main consent banner component\n */\n\nimport { generateStyles } from './styles.js';\nimport { getCurrentConfig } from '../config/parser.js';\nimport { escapeHTML } from '../core/security.js';\n\nlet bannerElement = null;\nlet shadowRoot = null;\n\nconst SAFE_POSITIONS = new Set(['bottom', 'bottom-left', 'bottom-right', 'top']);\n\n/**\n * Create the banner HTML\n */\nfunction createBannerHTML(config) {\n const labels = config.labels.banner;\n const rawPosition = config.position || 'bottom';\n const position = SAFE_POSITIONS.has(rawPosition) ? rawPosition : 'bottom';\n\n return `\n <div class=\"zest-banner zest-banner--${position}\" role=\"dialog\" aria-modal=\"false\" aria-label=\"${escapeHTML(labels.title)}\">\n <h2 class=\"zest-banner__title\">${escapeHTML(labels.title)}</h2>\n <p class=\"zest-banner__description\">${escapeHTML(labels.description)}</p>\n <div class=\"zest-banner__buttons\">\n <button type=\"button\" class=\"zest-btn zest-btn--primary\" data-action=\"accept-all\">\n ${escapeHTML(labels.acceptAll)}\n </button>\n <button type=\"button\" class=\"zest-btn zest-btn--secondary\" data-action=\"reject-all\">\n ${escapeHTML(labels.rejectAll)}\n </button>\n <button type=\"button\" class=\"zest-btn zest-btn--ghost\" data-action=\"settings\">\n ${escapeHTML(labels.settings)}\n </button>\n </div>\n </div>\n `;\n}\n\n/**\n * Create and mount the banner\n */\nexport function createBanner(callbacks = {}) {\n if (bannerElement) {\n return bannerElement;\n }\n\n const config = getCurrentConfig();\n\n // Create host element\n bannerElement = document.createElement('zest-banner');\n bannerElement.setAttribute('data-theme', config.theme || 'light');\n\n // Create shadow root\n shadowRoot = bannerElement.attachShadow({ mode: 'open' });\n\n // Add styles\n const styleEl = document.createElement('style');\n styleEl.textContent = generateStyles(config);\n shadowRoot.appendChild(styleEl);\n\n // Add banner HTML\n const container = document.createElement('div');\n container.innerHTML = createBannerHTML(config);\n shadowRoot.appendChild(container.firstElementChild);\n\n // Add event listeners\n const banner = shadowRoot.querySelector('.zest-banner');\n\n banner.addEventListener('click', (e) => {\n const action = e.target.dataset.action;\n if (!action) return;\n\n switch (action) {\n case 'accept-all':\n callbacks.onAcceptAll?.();\n break;\n case 'reject-all':\n callbacks.onRejectAll?.();\n break;\n case 'settings':\n callbacks.onSettings?.();\n break;\n }\n });\n\n // Keyboard handling\n banner.addEventListener('keydown', (e) => {\n if (e.key === 'Escape') {\n callbacks.onSettings?.();\n }\n });\n\n // Mount to document\n document.body.appendChild(bannerElement);\n\n // Focus first button for accessibility\n requestAnimationFrame(() => {\n const firstButton = shadowRoot.querySelector('button');\n firstButton?.focus();\n });\n\n return bannerElement;\n}\n\n/**\n * Show the banner\n */\nexport function showBanner(callbacks = {}) {\n if (!bannerElement) {\n createBanner(callbacks);\n } else {\n bannerElement.classList.remove('zest-hidden');\n }\n}\n\n/**\n * Hide the banner\n */\nexport function hideBanner() {\n if (bannerElement) {\n bannerElement.remove();\n bannerElement = null;\n shadowRoot = null;\n }\n}\n\n/**\n * Check if banner is visible\n */\nexport function isBannerVisible() {\n return bannerElement !== null && document.body.contains(bannerElement);\n}\n","/**\n * Modal - Settings modal component for category toggles\n */\n\nimport { generateStyles } from './styles.js';\nimport { getCurrentConfig } from '../config/parser.js';\nimport { DEFAULT_CATEGORIES } from '../core/categories.js';\nimport { escapeHTML, safeUrl } from '../core/security.js';\n\nlet modalElement = null;\nlet shadowRoot = null;\nlet currentSelections = {};\n\n/**\n * Create category toggle HTML\n */\nfunction createCategoryHTML(category, isChecked, isRequired) {\n const disabled = isRequired ? 'disabled' : '';\n const checked = isChecked ? 'checked' : '';\n const safeId = escapeHTML(category.id);\n const safeLabel = escapeHTML(category.label);\n\n return `\n <div class=\"zest-category\">\n <div class=\"zest-category__header\">\n <div class=\"zest-category__info\">\n <span class=\"zest-category__label\">${safeLabel}</span>\n <p class=\"zest-category__description\">${escapeHTML(category.description)}</p>\n </div>\n <label class=\"zest-toggle\">\n <input\n type=\"checkbox\"\n class=\"zest-toggle__input\"\n data-category=\"${safeId}\"\n ${checked}\n ${disabled}\n aria-label=\"${safeLabel}\"\n >\n <span class=\"zest-toggle__slider\"></span>\n </label>\n </div>\n </div>\n `;\n}\n\n/**\n * Create the modal HTML\n */\nfunction createModalHTML(config, consent) {\n const labels = config.labels.modal;\n const categories = config.categories || DEFAULT_CATEGORIES;\n\n const categoriesHTML = Object.values(categories)\n .map(cat => createCategoryHTML(\n cat,\n consent[cat.id] ?? cat.default,\n cat.required\n ))\n .join('');\n\n const validatedPolicyUrl = config.policyUrl ? safeUrl(config.policyUrl) : null;\n const policyLink = validatedPolicyUrl\n ? `<a href=\"${escapeHTML(validatedPolicyUrl)}\" class=\"zest-link\" target=\"_blank\" rel=\"noopener noreferrer\">Privacy Policy</a>`\n : '';\n\n return `\n <div class=\"zest-modal-overlay\" role=\"dialog\" aria-modal=\"true\" aria-label=\"${escapeHTML(labels.title)}\">\n <div class=\"zest-modal\">\n <div class=\"zest-modal__header\">\n <h2 class=\"zest-modal__title\">${escapeHTML(labels.title)}</h2>\n <p class=\"zest-modal__description\">${escapeHTML(labels.description)} ${policyLink}</p>\n </div>\n <div class=\"zest-modal__body\">\n ${categoriesHTML}\n </div>\n <div class=\"zest-modal__footer\">\n <button type=\"button\" class=\"zest-btn zest-btn--primary\" data-action=\"save\">\n ${escapeHTML(labels.save)}\n </button>\n <button type=\"button\" class=\"zest-btn zest-btn--secondary\" data-action=\"accept-all\">\n ${escapeHTML(labels.acceptAll)}\n </button>\n <button type=\"button\" class=\"zest-btn zest-btn--ghost\" data-action=\"reject-all\">\n ${escapeHTML(labels.rejectAll)}\n </button>\n </div>\n </div>\n </div>\n `;\n}\n\n/**\n * Get current selections from toggles\n */\nfunction getSelections() {\n if (!shadowRoot) return currentSelections;\n\n const toggles = shadowRoot.querySelectorAll('.zest-toggle__input');\n const selections = { essential: true };\n\n toggles.forEach(toggle => {\n const category = toggle.dataset.category;\n if (category && category !== 'essential') {\n selections[category] = toggle.checked;\n }\n });\n\n return selections;\n}\n\n/**\n * Create and show the modal\n */\nexport function showModal(consent = {}, callbacks = {}) {\n if (modalElement) {\n return modalElement;\n }\n\n const config = getCurrentConfig();\n currentSelections = { ...consent };\n\n // Create host element\n modalElement = document.createElement('zest-modal');\n modalElement.setAttribute('data-theme', config.theme || 'light');\n\n // Create shadow root\n shadowRoot = modalElement.attachShadow({ mode: 'open' });\n\n // Add styles\n const styleEl = document.createElement('style');\n styleEl.textContent = generateStyles(config);\n shadowRoot.appendChild(styleEl);\n\n // Add modal HTML\n const container = document.createElement('div');\n container.innerHTML = createModalHTML(config, consent);\n shadowRoot.appendChild(container.firstElementChild);\n\n // Add event listeners\n const modal = shadowRoot.querySelector('.zest-modal-overlay');\n\n // Button clicks\n modal.addEventListener('click', (e) => {\n const action = e.target.dataset.action;\n if (!action) {\n // Click on overlay background to close\n if (e.target === modal) {\n callbacks.onClose?.();\n }\n return;\n }\n\n switch (action) {\n case 'save':\n callbacks.onSave?.(getSelections());\n break;\n case 'accept-all':\n callbacks.onAcceptAll?.();\n break;\n case 'reject-all':\n callbacks.onRejectAll?.();\n break;\n }\n });\n\n // Keyboard handling\n modal.addEventListener('keydown', (e) => {\n if (e.key === 'Escape') {\n callbacks.onClose?.();\n }\n });\n\n // Track toggle changes\n shadowRoot.querySelectorAll('.zest-toggle__input').forEach(toggle => {\n toggle.addEventListener('change', () => {\n currentSelections = getSelections();\n });\n });\n\n // Mount to document\n document.body.appendChild(modalElement);\n\n // Trap focus\n requestAnimationFrame(() => {\n const firstButton = shadowRoot.querySelector('button');\n firstButton?.focus();\n });\n\n return modalElement;\n}\n\n/**\n * Hide the modal\n */\nexport function hideModal() {\n if (modalElement) {\n modalElement.remove();\n modalElement = null;\n shadowRoot = null;\n }\n}\n\n/**\n * Check if modal is visible\n */\nexport function isModalVisible() {\n return modalElement !== null && document.body.contains(modalElement);\n}\n\n/**\n * Get current modal selections\n */\nexport function getModalSelections() {\n return getSelections();\n}\n","/**\n * Widget - Minimal floating button to reopen settings\n */\n\nimport { generateStyles, COOKIE_ICON } from './styles.js';\nimport { getCurrentConfig } from '../config/parser.js';\nimport { escapeHTML } from '../core/security.js';\n\nlet widgetElement = null;\nlet shadowRoot = null;\n\n/**\n * Create the widget HTML\n */\nfunction createWidgetHTML(config) {\n const labels = config.labels.widget;\n const safeLabel = escapeHTML(labels.label);\n\n return `\n <div class=\"zest-widget\">\n <button type=\"button\" class=\"zest-widget__btn\" aria-label=\"${safeLabel}\" title=\"${safeLabel}\">\n <span class=\"zest-widget__icon\">${COOKIE_ICON}</span>\n </button>\n </div>\n `;\n}\n\n/**\n * Create and mount the widget\n */\nexport function createWidget(callbacks = {}) {\n if (widgetElement) {\n return widgetElement;\n }\n\n const config = getCurrentConfig();\n\n // Create host element\n widgetElement = document.createElement('zest-widget');\n widgetElement.setAttribute('data-theme', config.theme || 'light');\n\n // Create shadow root\n shadowRoot = widgetElement.attachShadow({ mode: 'open' });\n\n // Add styles\n const styleEl = document.createElement('style');\n styleEl.textContent = generateStyles(config);\n shadowRoot.appendChild(styleEl);\n\n // Add widget HTML\n const container = document.createElement('div');\n container.innerHTML = createWidgetHTML(config);\n shadowRoot.appendChild(container.firstElementChild);\n\n // Add event listener\n const button = shadowRoot.querySelector('.zest-widget__btn');\n button.addEventListener('click', () => {\n callbacks.onClick?.();\n });\n\n // Mount to document\n document.body.appendChild(widgetElement);\n\n return widgetElement;\n}\n\n/**\n * Show the widget\n */\nexport function showWidget(callbacks = {}) {\n if (!widgetElement) {\n createWidget(callbacks);\n } else {\n widgetElement.style.display = '';\n }\n}\n\n/**\n * Hide the widget\n */\nexport function hideWidget() {\n if (widgetElement) {\n widgetElement.style.display = 'none';\n }\n}\n\n/**\n * Remove the widget completely\n */\nexport function removeWidget() {\n if (widgetElement) {\n widgetElement.remove();\n widgetElement = null;\n shadowRoot = null;\n }\n}\n\n/**\n * Check if widget is visible\n */\nexport function isWidgetVisible() {\n return widgetElement !== null &&\n document.body.contains(widgetElement) &&\n widgetElement.style.display !== 'none';\n}\n","/**\n * Zest - Lightweight Cookie Consent Toolkit\n * Main entry (full build: logic + UI).\n *\n * For a logic-only build without any CSS / Shadow DOM mounting, import\n * from `@freshjuice/zest/headless` instead.\n */\n\n// Core lifecycle (UI-agnostic)\nimport {\n coreInit,\n coreAcceptAll,\n coreRejectAll,\n coreUpdateConsent,\n coreReset,\n isInitialized,\n getActiveConfig\n} from './core-lifecycle.js';\n\n// Consent store + events\nimport {\n getConsent,\n hasConsent,\n hasConsentDecision,\n getConsentProof\n} from './storage/consent-store.js';\nimport { emitShow, emitHide, EVENTS, on, once } from './storage/events.js';\n\n// DNT introspection\nimport { isDoNotTrackEnabled, getDNTDetails } from './core/dnt.js';\n\n// Config getters\nimport { getConfig, getCurrentConfig } from './config/parser.js';\n\n// UI\nimport { showBanner, hideBanner, isBannerVisible } from './ui/banner.js';\nimport { showModal, hideModal, isModalVisible } from './ui/modal.js';\nimport { showWidget, hideWidget, removeWidget, isWidgetVisible } from './ui/widget.js';\n\n/**\n * Handle accept all — delegates consent logic to core, handles UI swap.\n */\nfunction handleAcceptAll() {\n coreAcceptAll();\n const config = getActiveConfig();\n\n hideBanner();\n hideModal();\n\n if (config?.showWidget) {\n showWidget({ onClick: handleShowSettings });\n }\n}\n\n/**\n * Handle reject all.\n */\nfunction handleRejectAll() {\n coreRejectAll();\n const config = getActiveConfig();\n\n hideBanner();\n hideModal();\n\n if (config?.showWidget) {\n showWidget({ onClick: handleShowSettings });\n }\n}\n\n/**\n * Handle save preferences from modal.\n */\nfunction handleSavePreferences(selections) {\n coreUpdateConsent(selections);\n const config = getActiveConfig();\n\n hideModal();\n\n if (config?.showWidget) {\n showWidget({ onClick: handleShowSettings });\n }\n}\n\n/**\n * Open the settings modal.\n */\nfunction handleShowSettings() {\n hideBanner();\n hideWidget();\n\n showModal(getConsent(), {\n onSave: handleSavePreferences,\n onAcceptAll: handleAcceptAll,\n onRejectAll: handleRejectAll,\n onClose: handleCloseModal\n });\n\n emitShow('modal');\n}\n\n/**\n * Close the modal — either bring the widget back (decision made) or\n * fall back to the banner (no decision yet).\n */\nfunction handleCloseModal() {\n hideModal();\n emitHide('modal');\n\n const config = getActiveConfig();\n if (hasConsentDecision() && config?.showWidget) {\n showWidget({ onClick: handleShowSettings });\n } else {\n showBanner({\n onAcceptAll: handleAcceptAll,\n onRejectAll: handleRejectAll,\n onSettings: handleShowSettings\n });\n }\n}\n\n/**\n * Initialize Zest with UI.\n */\nfunction init(userConfig = {}) {\n const { alreadyInitialized, consent, hasDecision, dntApplied } = coreInit(userConfig);\n if (alreadyInitialized) {\n console.warn('[Zest] Already initialized');\n return Zest;\n }\n\n const config = getActiveConfig();\n\n if (!hasDecision && !dntApplied) {\n showBanner({\n onAcceptAll: handleAcceptAll,\n onRejectAll: handleRejectAll,\n onSettings: handleShowSettings\n });\n emitShow('banner');\n } else if (config?.showWidget) {\n showWidget({ onClick: handleShowSettings });\n }\n\n return Zest;\n}\n\nconst Zest = {\n init,\n\n // Banner control\n show() {\n if (!isInitialized()) {\n console.warn('[Zest] Not initialized. Call Zest.init() first.');\n return;\n }\n hideModal();\n hideWidget();\n showBanner({\n onAcceptAll: handleAcceptAll,\n onRejectAll: handleRejectAll,\n onSettings: handleShowSettings\n });\n emitShow('banner');\n },\n\n hide() {\n hideBanner();\n emitHide('banner');\n },\n\n // Settings modal\n showSettings() {\n if (!isInitialized()) {\n console.warn('[Zest] Not initialized. Call Zest.init() first.');\n return;\n }\n handleShowSettings();\n },\n\n hideSettings() {\n hideModal();\n emitHide('modal');\n },\n\n // Consent state\n getConsent,\n hasConsent,\n hasConsentDecision,\n getConsentProof,\n\n // DNT\n isDoNotTrackEnabled,\n getDNTDetails,\n\n // Programmatic accept / reject\n acceptAll() {\n if (!isInitialized()) {\n console.warn('[Zest] Not initialized. Call Zest.init() first.');\n return;\n }\n handleAcceptAll();\n },\n\n rejectAll() {\n if (!isInitialized()) {\n console.warn('[Zest] Not initialized. Call Zest.init() first.');\n return;\n }\n handleRejectAll();\n },\n\n // Reset everything and reshow the banner\n reset() {\n coreReset();\n hideModal();\n removeWidget();\n if (isInitialized()) {\n showBanner({\n onAcceptAll: handleAcceptAll,\n onRejectAll: handleRejectAll,\n onSettings: handleShowSettings\n });\n emitShow('banner');\n }\n },\n\n // Config introspection\n getConfig: getCurrentConfig,\n\n // Events\n on,\n once,\n EVENTS\n};\n\n// Auto-init if config present\nif (typeof window !== 'undefined') {\n // Make Zest available globally. defineProperty with writable:false +\n // configurable:false stops a later-loaded script from replacing the\n // global with a trojanned stand-in.\n try {\n Object.defineProperty(window, 'Zest', {\n value: Object.freeze(Zest),\n writable: false,\n configurable: false,\n enumerable: true\n });\n } catch (e) {\n window.Zest = Zest;\n }\n\n const autoInit = () => {\n const cfg = getConfig();\n if (cfg.autoInit !== false) {\n init(window.ZestConfig);\n }\n };\n\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', autoInit);\n } else {\n autoInit();\n }\n}\n\nexport default Zest;\n"],"names":["MAX_QUEUE_SIZE","checkConsent","setConsentChecker","currentConfig","setCookieChecker","setStorageChecker","setScriptChecker","storeRejectAll","storeAcceptAll","shadowRoot"],"mappings":"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AAE,OAAO,WAAW;EACpB;;EAEO,SAAS,eAAe,GAAG;EAClC,EAAE,OAAO,aAAa;EACtB;;EClNA;EACA;EACA;;;EAIA,MAAM,cAAc,GAAG,SAAS;;EAEhC;EACA;EACA;EACO,SAAS,cAAc,CAAC,MAAM,EAAE;EACvC;EACA;EACA,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,cAAc;EACrE,EAAE,MAAM,SAAS,GAAG,oBAAoB,CAAC,MAAM,CAAC,YAAY,CAAC;;EAE7D,EAAE,OAAO;AACT;AACA,iBAAiB,EAAE,WAAW,CAAC;AAC/B,uBAAuB,EAAE,WAAW,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AA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"}