{
  "version": 3,
  "sources": ["/cdn/shop/t/150/assets/sn-rudder-theme-sdk.js?sn_dtc=7c3609e5eba4"],
  "sourcesContent": ["// SN DTC - Theme Event SDK\n// INSTALL: Shopify admin -> Online Store -> Themes -> Edit code -> Assets.\n// Paste/upload this file as a theme asset and load it only where non-native\n// strategic events are needed. Native Shopify funnel events remain owned by\n// the installed SN-RudderStack Custom Pixel; do not replace that Pixel with the\n// Gateway-only migration candidate during this release.\n(function () {\n  \"use strict\";\n\n  var EVENT_GATEWAY_URL = \"https://ceg.snnc.cc\";\n  var ANON_KEY = \"sn_anon_id\";\n  var FIRST_TOUCH_KEY = \"sn_first_touch\";\n  var CAMPAIGN_CLICKED_KEY = \"sn_campaign_clicked\";\n  var PENDING_CAMPAIGN_KEY = \"sn_campaign_pending\";\n  var TRACKING_PLAN_VERSION = \"v2\";\n  var LIBRARY = { name: \"sn-theme-event-sdk\", version: \"2.0.0\" };\n  var CLICK_IDS = [\"gclid\", \"fbclid\", \"ttclid\", \"ScCid\", \"msclkid\", \"twclid\"];\n  var HASHED_KEYS = {\n    emailhash: true,\n    email_hash: true,\n    phonehash: true,\n    phone_hash: true,\n  };\n  var RESERVED_EVENT_INPUT_KEYS = {\n    event_id: true, event_key: true, event_name: true, event_class: true,\n    event_version: true, event_revision: true, tracking_plan_version: true,\n    store_id: true, shopify_domain: true, shopify_shop: true, environment: true, occurred_at: true,\n    collector: true, __sn_dtc_skip_rudder: true,\n  };\n  var DECLARATIVE_EVENTS = {\n    \"Navigation Clicked\": true,\n    \"Navigation Closed\": true,\n    \"Hero Displayed\": true,\n    \"Hero Viewed\": true,\n    \"Hero Clicked\": true,\n    \"Banner Viewed\": true,\n    \"Banner Clicked\": true,\n    \"Section Displayed\": true,\n    \"Section Viewed\": true,\n    \"Section Clicked\": true,\n    \"FAQ Displayed\": true,\n    \"FAQ Viewed\": true,\n    \"FAQ Item Displayed\": true,\n    \"FAQ Item Viewed\": true,\n    \"FAQ Item Clicked\": true,\n    \"Category Viewed\": true,\n    \"Category Clicked\": true,\n    \"Product Card Viewed\": true,\n    \"Product Card Clicked\": true,\n    \"Review Card Viewed\": true,\n    \"Review Card Clicked\": true,\n    \"Review Carousel Interaction\": true,\n    \"Video Card Viewed\": true,\n    \"Video Card Clicked\": true,\n    \"Cart Interaction\": true,\n    \"Accessory Viewed\": true,\n    \"Accessory Added\": true,\n    \"CTA Clicked\": true,\n    \"Email Subscribed\": true,\n    \"Financing Viewed\": true,\n    \"Promotion Viewed\": true,\n    \"Promotion Clicked\": true,\n    \"Reviews Viewed\": true,\n    \"SMS Subscribed\": true,\n    \"Chat Started\": true,\n    \"Product Option Viewed\": true,\n    \"Product Option Selected\": true,\n    \"Quiz Displayed\": true,\n    \"Quiz Viewed\": true,\n    \"Guide Clicked\": true,\n  };\n  var PII_KEY_PARTS = [\"email\", \"phone\", \"tel\", \"address\", \"street\", \"city\", \"zip\", \"postal\", \"firstname\", \"lastname\", \"fullname\", \"customer\", \"userid\", \"anonymous\", \"session\", \"identity\", \"password\", \"state\", \"country\", \"ip\"];\n  var BUSINESS_ID_KEYS = {\n    bannerid: true, categoryid: true, ctaid: true, faqid: true, heroid: true,\n    mediaid: true, productid: true, promoid: true, reviewid: true, sectionid: true,\n    videoid: true, variantid: true, collectionid: true,\n  };\n  var RAW_EMAIL_VALUE = /\\b[^\\s@]+@[^\\s@]+\\.[^\\s@]+\\b/;\n  var RAW_PHONE_VALUE = /^\\+?\\d[\\d ()-]{7,}\\d$/;\n  var CONTROL_CHARACTER = /[\\u0000-\\u001f\\u007f]/;\n  var UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n  var MAX_BUSINESS_ID_LENGTH = 256;\n  var MAX_PII_SCAN_DEPTH = 5;\n  var UTM_MAP = {\n    utm_source: \"source\",\n    utm_medium: \"medium\",\n    utm_campaign: \"name\",\n    utm_term: \"term\",\n    utm_content: \"content\",\n    utm_creator: \"creator\",\n  };\n  var runtimeCampaignClicked = {};\n  var ANALYTICS_CONFIG = window.SNDTCAnalyticsConfig || {};\n  var PRODUCT_MEDIA_CONFIG = window.SNDTCProductMediaConfig || {};\n  var CLIENT_EVENT_CONTRACT_FALLBACK = { events: [] };\n\n  // Read lazily: the contract now ships as its own cacheable asset, so it must not be\n  // captured at parse time or a load-order change would silently reject every event.\n  function clientEventContract() {\n    return window.SNDTCClientEventContract || CLIENT_EVENT_CONTRACT_FALLBACK;\n  }\n  var STORE_ID = ANALYTICS_CONFIG.store_id || \"novilla-us\";\n  var SHOPIFY_STORE_DOMAIN = ANALYTICS_CONFIG.shopify_domain || \"www.novillashop.com\";\n  var GA4_MEASUREMENT_ID = ANALYTICS_CONFIG.ga4_measurement_id || PRODUCT_MEDIA_CONFIG.ga4_measurement_id || \"G-J9MYNFFL5H\";\n\n  // Work queued before the consent handshake resolves. Shopify's consent API is async, so\n  // anything that runs synchronously at bootstrap would otherwise see analytics=false and be\n  // dropped for good (this is what silently killed all landing-page utm_* / click-id capture).\n  var pendingConsentTasks = [];\n\n  function consentAllows() {\n    return !!(window.__snConsent && window.__snConsent.analytics === true);\n  }\n\n  function whenConsentAllowed(task) {\n    if (typeof task !== \"function\") return;\n    if (consentAllows()) {\n      task();\n      return;\n    }\n    pendingConsentTasks.push(task);\n  }\n\n  function runPendingConsentTasks() {\n    if (!consentAllows() || !pendingConsentTasks.length) return;\n    var tasks = pendingConsentTasks.slice();\n    pendingConsentTasks.length = 0;\n    for (var i = 0; i < tasks.length; i += 1) {\n      try {\n        tasks[i]();\n      } catch (e) {}\n    }\n  }\n\n  function setAnalyticsConsent(allowed) {\n    window.__snConsent = window.__snConsent || {};\n    window.__snConsent.analytics = allowed === true;\n    if (window.__snConsent.analytics) runPendingConsentTasks();\n    return window.__snConsent.analytics;\n  }\n\n  function initializeCustomerPrivacy() {\n    if (!window.__snConsent || typeof window.__snConsent.analytics !== \"boolean\") setAnalyticsConsent(false);\n    function syncFromApi() {\n      try {\n        var api = window.Shopify && window.Shopify.customerPrivacy;\n        if (api && typeof api.analyticsProcessingAllowed === \"function\") {\n          setAnalyticsConsent(api.analyticsProcessingAllowed() === true);\n          return true;\n        }\n      } catch (e) {\n        setAnalyticsConsent(false);\n      }\n      return false;\n    }\n    if (!syncFromApi() && window.Shopify && typeof window.Shopify.loadFeatures === \"function\") {\n      try {\n        window.Shopify.loadFeatures([{ name: \"consent-tracking-api\", version: \"0.1\" }], function (error) {\n          if (error || !syncFromApi()) setAnalyticsConsent(false);\n        });\n      } catch (e) {\n        setAnalyticsConsent(false);\n      }\n    }\n    if (document && typeof document.addEventListener === \"function\") {\n      document.addEventListener(\"visitorConsentCollected\", function (event) {\n        setAnalyticsConsent(!!(event && event.detail && event.detail.analyticsAllowed === true));\n      });\n    }\n  }\n\n  function uuid() {\n    try {\n      if (window.crypto && window.crypto.randomUUID) {\n        var generated = window.crypto.randomUUID();\n        if (isValidUuid(generated)) return generated;\n      }\n    } catch (e) {}\n    return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n      var r = (Math.random() * 16) | 0;\n      return (c === \"x\" ? r : (r & 0x3) | 0x8).toString(16);\n    });\n  }\n\n  function isValidUuid(value) {\n    return typeof value === \"string\" && /^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value);\n  }\n\n  function cookieGet(name) {\n    var prefix = encodeURIComponent(name) + \"=\";\n    var parts = (document.cookie || \"\").split(\"; \");\n    for (var i = 0; i < parts.length; i += 1) {\n      if (parts[i].indexOf(prefix) === 0) {\n        return decodeURIComponent(parts[i].slice(prefix.length));\n      }\n    }\n    return \"\";\n  }\n\n  // Scope the cookie to the registrable domain so an apex -> www redirect does not mint a\n  // second anonymous id for the same visitor. Falls back to host-only when the current\n  // hostname is not under the configured storefront domain (preview/proxy hosts).\n  function cookieDomain() {\n    var host = String((window.location && window.location.hostname) || \"\");\n    var base = String(configuredShopifyDomain() || \"\").replace(/^www\\./i, \"\");\n    if (!host || !base) return \"\";\n    if (host === base || host.slice(-(base.length + 1)) === \".\" + base) return \"; domain=.\" + base;\n    return \"\";\n  }\n\n  function cookieSet(name, value) {\n    var expires = new Date(Date.now() + 365 * 24 * 60 * 60 * 1000).toUTCString();\n    document.cookie =\n      encodeURIComponent(name) +\n      \"=\" +\n      encodeURIComponent(value) +\n      \"; expires=\" +\n      expires +\n      cookieDomain() +\n      \"; path=/; SameSite=Lax; Secure\";\n  }\n\n  function storageGet(key) {\n    try {\n      return window.localStorage && window.localStorage.getItem(key);\n    } catch (e) {\n      return \"\";\n    }\n  }\n\n  function storageSet(key, value) {\n    try {\n      if (window.localStorage) window.localStorage.setItem(key, value);\n    } catch (e) {}\n  }\n\n  function sessionGet(key) {\n    try {\n      return window.sessionStorage && window.sessionStorage.getItem(key);\n    } catch (e) {\n      return \"\";\n    }\n  }\n\n  function sessionSet(key, value) {\n    try {\n      if (window.sessionStorage) window.sessionStorage.setItem(key, value);\n    } catch (e) {}\n  }\n\n  function sessionRemove(key) {\n    try {\n      if (window.sessionStorage) window.sessionStorage.removeItem(key);\n    } catch (e) {}\n  }\n\n  function getPersisted(key) {\n    return cookieGet(key) || storageGet(key) || \"\";\n  }\n\n  function setPersisted(key, value) {\n    cookieSet(key, value);\n    storageSet(key, value);\n  }\n\n  function getAnonymousId() {\n    var value = getPersisted(ANON_KEY);\n    if (!UUID_PATTERN.test(String(value || \"\"))) {\n      value = uuid();\n      setPersisted(ANON_KEY, value);\n    }\n    return value;\n  }\n\n  // GA4 identity lives in the browser's own cookies. Forwarding `anonymous_id` alone made the\n  // gateway mint a fresh GA4 user/session per event, which is why sessions arrived with no\n  // source and landed in Unassigned / (not set).\n  // _ga=GA1.1.<client_id>\n  function ga4ClientId() {\n    var match = /^GA\\d+\\.\\d+\\.(\\d+\\.\\d+)$/.exec(String(cookieGet(\"_ga\") || \"\"));\n    return match ? match[1] : \"\";\n  }\n\n  // _ga_<STREAM> is either GS1 (dot-delimited) or GS2 (`s<id>$o<number>$...`).\n  function ga4Session() {\n    var streamId = ga4MeasurementId().replace(/^G-/i, \"\");\n    var raw = streamId ? String(cookieGet(\"_ga_\" + streamId) || \"\") : \"\";\n    if (!raw) return null;\n    var sessionId = \"\";\n    var sessionNumber = \"\";\n    var taggedId = /[.$]s(\\d+)(?:[.$]|$)/.exec(raw);\n    var taggedNumber = /[.$]o(\\d+)(?:[.$]|$)/.exec(raw);\n    if (taggedId) {\n      sessionId = taggedId[1];\n      sessionNumber = taggedNumber ? taggedNumber[1] : \"\";\n    } else {\n      var parts = raw.split(\".\");\n      if (parts.length >= 4 && /^\\d+$/.test(parts[2]) && /^\\d+$/.test(parts[3])) {\n        sessionId = parts[2];\n        sessionNumber = parts[3];\n      }\n    }\n    if (!sessionId) return null;\n    return { session_id: sessionId, session_number: sessionNumber || \"1\" };\n  }\n\n  function currentUrl() {\n    return sanitizeUrl(window.location ? window.location.href : \"\");\n  }\n\n  function currentPage() {\n    return {\n      url: currentUrl(),\n      path: window.location ? window.location.pathname : \"\",\n      search: sanitizeSearch(window.location ? window.location.search : \"\"),\n      referrer: document.referrer || \"\",\n      title: document.title || \"\",\n    };\n  }\n\n  function parseQuery(search) {\n    var out = {};\n    var query = (search || \"\").replace(/^\\?/, \"\");\n    if (!query) return out;\n    var pairs = query.split(\"&\");\n    for (var i = 0; i < pairs.length; i += 1) {\n      if (!pairs[i]) continue;\n      var splitAt = pairs[i].indexOf(\"=\");\n      var rawKey = splitAt < 0 ? pairs[i] : pairs[i].slice(0, splitAt);\n      var rawValue = splitAt < 0 ? \"\" : pairs[i].slice(splitAt + 1);\n      try {\n        out[decodeURIComponent(rawKey)] = decodeURIComponent(rawValue.replace(/\\+/g, \" \"));\n      } catch (e) {\n        out[rawKey] = rawValue;\n      }\n    }\n    return out;\n  }\n\n  function encodeQueryValue(value) {\n    return encodeURIComponent(value).replace(/%20/g, \"+\");\n  }\n\n  function normalizedKey(key) {\n    return String(key || \"\").replace(/[^a-zA-Z0-9]/g, \"\").toLowerCase();\n  }\n\n  function isAllowedHashedKey(key) {\n    var normalized = normalizedKey(key);\n    return !!(HASHED_KEYS[normalized] || HASHED_KEYS[String(key || \"\").toLowerCase()]);\n  }\n\n  function isAllowedBusinessIdKey(key) {\n    return !!BUSINESS_ID_KEYS[normalizedKey(key)];\n  }\n\n  function isRawPiiKey(key) {\n    var normalized = normalizedKey(key);\n    if (!normalized || isAllowedHashedKey(key)) return false;\n    for (var i = 0; i < PII_KEY_PARTS.length; i += 1) {\n      if (normalized.indexOf(PII_KEY_PARTS[i]) !== -1) return true;\n    }\n    return false;\n  }\n\n  function decodePiiValue(value) {\n    try {\n      return decodeURIComponent(String(value || \"\").replace(/\\+/g, \" \"));\n    } catch (e) {\n      return String(value || \"\");\n    }\n  }\n\n  // Reject rather than strip PII from caller input. Stripping could let GA4\n  // observe an event that the Gateway would later reject.\n  function hasUnsafePii(value, seen, depth, key) {\n    var allowedHash;\n    var allowedBusinessId;\n    var childKey;\n    var decoded;\n    // Undefined optional fields are equivalent to absent fields. In\n    // particular, do this before key validation so an omitted optional PII\n    // field cannot turn an otherwise valid event into an unsafe one.\n    if (value === undefined) return false;\n    if (depth > MAX_PII_SCAN_DEPTH) return true;\n    if (key) {\n      allowedHash = isAllowedHashedKey(key);\n      if (isRawPiiKey(key)) return true;\n      if (allowedHash) return typeof value !== \"string\" || !/^[a-f0-9]{64}$/i.test(value);\n      allowedBusinessId = isAllowedBusinessIdKey(key);\n      if (allowedBusinessId && typeof value !== \"string\" && typeof value !== \"number\") return true;\n    }\n    if (value === null || typeof value === \"boolean\") return false;\n    if (typeof value === \"number\") return !isFinite(value);\n    if (typeof value === \"string\") {\n      decoded = decodePiiValue(value);\n      if (RAW_EMAIL_VALUE.test(decoded)) return true;\n      if (allowedBusinessId && (!decoded || decoded.length > MAX_BUSINESS_ID_LENGTH || CONTROL_CHARACTER.test(decoded))) return true;\n      if (allowedBusinessId && /^\\d+$/.test(decoded.trim())) return false;\n      return RAW_PHONE_VALUE.test(decoded.trim());\n    }\n    if (!value || typeof value !== \"object\") return true;\n    seen = seen || [];\n    if (seen.indexOf(value) !== -1) return true;\n    seen.push(value);\n    if (Object.prototype.toString.call(value) === \"[object Array]\") {\n      for (var i = 0; i < value.length; i += 1) {\n        if (hasUnsafePii(value[i], seen, depth + 1)) {\n          seen.pop();\n          return true;\n        }\n      }\n      seen.pop();\n      return false;\n    }\n    for (childKey in value) {\n      if (Object.prototype.hasOwnProperty.call(value, childKey) && hasUnsafePii(value[childKey], seen, depth + 1, childKey)) {\n        seen.pop();\n        return true;\n      }\n    }\n    seen.pop();\n    return false;\n  }\n\n  function hasUnsafeCustomInput(properties) {\n    var key;\n    properties = properties || {};\n    if (!properties || typeof properties !== \"object\" || Object.prototype.toString.call(properties) === \"[object Array]\") return hasUnsafePii(properties, [], 0);\n    for (key in properties) {\n      if (!Object.prototype.hasOwnProperty.call(properties, key) || RESERVED_EVENT_INPUT_KEYS[key]) continue;\n      if (hasUnsafePii(properties[key], [], 0, key)) return true;\n    }\n    return false;\n  }\n\n  function sanitizeSearch(search) {\n    var query = parseQuery(search);\n    var parts = [];\n    var key;\n    for (key in query) {\n      if (!Object.prototype.hasOwnProperty.call(query, key)) continue;\n      if (isRawPiiKey(key)) continue;\n      parts.push(encodeURIComponent(key) + \"=\" + encodeQueryValue(query[key]));\n    }\n    return parts.length ? \"?\" + parts.join(\"&\") : \"\";\n  }\n\n  function sanitizeUrl(url) {\n    var value = String(url || \"\");\n    var hashIndex = value.indexOf(\"#\");\n    var hash = hashIndex >= 0 ? value.slice(hashIndex) : \"\";\n    var withoutHash = hashIndex >= 0 ? value.slice(0, hashIndex) : value;\n    var queryIndex = withoutHash.indexOf(\"?\");\n    if (queryIndex < 0) return value;\n    return withoutHash.slice(0, queryIndex) + sanitizeSearch(withoutHash.slice(queryIndex)) + hash;\n  }\n\n  function parseCampaignFromLocation() {\n    var query = parseQuery(window.location ? window.location.search : \"\");\n    var campaign = {};\n    var clickIds = {};\n    var raw = {};\n    var key;\n\n    for (key in UTM_MAP) {\n      if (Object.prototype.hasOwnProperty.call(UTM_MAP, key) && query[key]) {\n        campaign[UTM_MAP[key]] = query[key];\n        raw[key] = query[key];\n      }\n    }\n    for (var i = 0; i < CLICK_IDS.length; i += 1) {\n      key = CLICK_IDS[i];\n      if (query[key]) {\n        var canonicalClickId = key === \"ScCid\" ? \"sc_cid\" : key;\n        clickIds[canonicalClickId] = query[key];\n        raw[canonicalClickId] = query[key];\n      }\n    }\n\n    return { campaign: campaign, clickIds: clickIds, raw: raw };\n  }\n\n  function hasAttribution(value) {\n    return !!(\n      value &&\n      (Object.keys(value.campaign || {}).length || Object.keys(value.clickIds || {}).length)\n    );\n  }\n\n  function getFirstTouch() {\n    var saved = getPersisted(FIRST_TOUCH_KEY);\n    if (saved) {\n      try {\n        return JSON.parse(saved);\n      } catch (e) {}\n    }\n\n    var current = parseCampaignFromLocation();\n    if (hasAttribution(current)) {\n      setPersisted(FIRST_TOUCH_KEY, JSON.stringify(current));\n    }\n    return current;\n  }\n\n  function context() {\n    var firstTouch = getFirstTouch();\n    var ctx = {\n      page: currentPage(),\n      campaign: firstTouch.campaign || {},\n      library: LIBRARY,\n      userAgent: navigator.userAgent,\n      locale: navigator.language,\n      store_id: STORE_ID,\n      shopify_shop: SHOPIFY_STORE_DOMAIN,\n      tracking_plan_version: TRACKING_PLAN_VERSION,\n    };\n    if (firstTouch.clickIds && Object.keys(firstTouch.clickIds).length) {\n      ctx.clickIds = firstTouch.clickIds;\n    }\n    return ctx;\n  }\n\n  function sanitizeProperties(value) {\n    var output;\n    var key;\n\n    if (!value || typeof value !== \"object\") return value;\n\n    if (Object.prototype.toString.call(value) === \"[object Array]\") {\n      output = [];\n      for (var i = 0; i < value.length; i += 1) {\n        output.push(sanitizeProperties(value[i]));\n      }\n      return output;\n    }\n\n    output = {};\n    for (key in value) {\n      if (!Object.prototype.hasOwnProperty.call(value, key)) continue;\n      if (value[key] === undefined) continue;\n      if (isRawPiiKey(key)) continue;\n      output[key] = sanitizeProperties(value[key]);\n    }\n    return output;\n  }\n\n  function gatewayUrl() {\n    var config = window.SNDTCAnalyticsConfig || {};\n    var mediaConfig = window.SNDTCProductMediaConfig || {};\n    return String(config.event_gateway_url || mediaConfig.event_gateway_url || EVENT_GATEWAY_URL || \"\");\n  }\n\n  function isPlaceholderConfiguration(value) {\n    return /^__[^_]+__$/.test(String(value || \"\").trim());\n  }\n\n  function isValidStoreId(value) {\n    return !isPlaceholderConfiguration(value) && /^[a-z0-9][a-z0-9_-]{0,63}$/i.test(String(value || \"\"));\n  }\n\n  function isValidShopifyDomain(value) {\n    return !isPlaceholderConfiguration(value) && /^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z]{2,63}$/i.test(String(value || \"\"));\n  }\n\n  function isValidGatewayUrl(value) {\n    var text = String(value || \"\");\n    var authority;\n    var hostname;\n    var portIndex;\n    var port;\n    if (isPlaceholderConfiguration(text) || !/^https:\\/\\/[^\\s/?#]+\\/?$/i.test(text)) return false;\n    authority = text.slice(8).replace(/\\/$/, \"\");\n    if (!authority || authority.indexOf(\"@\") !== -1) return false;\n    hostname = authority;\n    portIndex = authority.lastIndexOf(\":\");\n    if (portIndex !== -1) {\n      hostname = authority.slice(0, portIndex);\n      port = authority.slice(portIndex + 1);\n      if (!/^\\d{1,5}$/.test(port) || Number(port) < 1 || Number(port) > 65535) return false;\n    }\n    return isValidShopifyDomain(hostname);\n  }\n\n  function ga4MeasurementId() {\n    return String((window.SNDTCAnalyticsConfig || {}).ga4_measurement_id || (window.SNDTCProductMediaConfig || {}).ga4_measurement_id || GA4_MEASUREMENT_ID || \"\");\n  }\n\n  function configuredShopifyDomain() {\n    return String((window.SNDTCAnalyticsConfig || {}).shopify_domain || (window.SNDTCProductMediaConfig || {}).shopify_domain || SHOPIFY_STORE_DOMAIN || \"\");\n  }\n\n  function isValidGa4MeasurementId(value) {\n    return !isPlaceholderConfiguration(value) && /^G-[A-Z0-9]+$/i.test(String(value || \"\"));\n  }\n\n  // All destination prerequisites must pass before a UUID or envelope exists.\n  function deliveryConfiguration(storeId, shopifyDomain) {\n    if (!consentAllows()) return { skipped: true, reason: \"consent\" };\n    if (!isValidStoreId(storeId) || !isValidShopifyDomain(shopifyDomain)) return { skipped: true, reason: \"store_unconfigured\" };\n    if (!isValidGatewayUrl(gatewayUrl())) return { skipped: true, reason: \"gateway_unconfigured\" };\n    if (!isValidGa4MeasurementId(ga4MeasurementId())) return { skipped: true, reason: \"ga4_unconfigured\" };\n    if (typeof window.fetch !== \"function\") return { skipped: true, reason: \"fetch_unavailable\" };\n    return null;\n  }\n\n  function postGateway(envelope) {\n    if (!approvedClientEnvelope(envelope)) return { skipped: true, reason: \"client_contract\" };\n    if (!consentAllows()) return { skipped: true, reason: \"consent\" };\n    if (!window.fetch) return { skipped: true, reason: \"fetch_unavailable\" };\n    var url = gatewayUrl();\n    if (!isValidGatewayUrl(url)) return { skipped: true, reason: \"gateway_unconfigured\" };\n    return window.fetch(url.replace(/\\/$/, \"\") + \"/v1/events\", {\n      method: \"POST\",\n      keepalive: true,\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify(envelope),\n    });\n  }\n\n  function canonicalEventName(event) {\n    return String(event || \"\")\n      .trim()\n      .toLowerCase()\n      .replace(/[^a-z0-9]+/g, \"_\")\n      .replace(/^_+|_+$/g, \"\")\n      .slice(0, 40);\n  }\n\n  function contractEvent(eventKey) {\n    var events = clientEventContract().events;\n    var i;\n    if (!events || !Array.isArray(events)) return null;\n    for (i = 0; i < events.length; i += 1) {\n      if (events[i] && events[i].event_key === eventKey) return events[i];\n    }\n    return null;\n  }\n\n  function hasRequiredProperties(properties, required) {\n    var i;\n    var value;\n    if (!Array.isArray(required)) return false;\n    for (i = 0; i < required.length; i += 1) {\n      value = properties[required[i]];\n      if (value === undefined || value === null || value === \"\") return false;\n    }\n    return true;\n  }\n\n  function hasOnlyAllowedProperties(properties, allowed) {\n    var key;\n    if (!Array.isArray(allowed)) return false;\n    for (key in properties) {\n      if (Object.prototype.hasOwnProperty.call(properties, key) && allowed.indexOf(key) === -1) return false;\n    }\n    return true;\n  }\n\n  function approvedClientEnvelope(envelope) {\n    var definition = contractEvent(envelope && envelope.event_key);\n    var schemaVersion = Number(clientEventContract().schema_version);\n    return !!(Number.isInteger(schemaVersion) && schemaVersion > 0 && definition && definition.event_class === \"custom_browser\" && envelope && envelope.event_class === \"custom_browser\" &&\n      envelope.event_version === schemaVersion &&\n      envelope.tracking_plan_version === definition.tracking_plan_version &&\n      envelope.event_revision === definition.event_revision &&\n      hasRequiredProperties(envelope.properties || {}, definition.required_client_properties) &&\n      hasOnlyAllowedProperties(envelope.properties || {}, definition.allowed_client_properties));\n  }\n\n  // GA4 is owned by the GTM container (GTM-WKQBN8X), not by this page. `window.gtag` here is\n  // the stub from layout/theme.liquid:43, bootstrapped against an invalid `AW-` container, and\n  // no `gtag('config', 'G-...')` ever runs at page level. Sending `gtag('event', key,\n  // { send_to: <G- id> })` from the browser therefore wrote into a stream the page had never\n  // configured: on 2026-08-30, 75.9% of sessions lost their source and 72.3% lost their\n  // landing page while purchases were unaffected -- measurement damage, not a funnel change.\n  //\n  // Events reach GA4 through the gateway's Measurement Protocol instead, stitched with the\n  // client_id / session_id that emitCustom() reads off the browser's own _ga cookies.\n  //\n  // Do not restore a browser-side send without BOTH of these first: configure the stream on\n  // the page (or push a GTM-shaped `{ event: ... }` object and trigger a GA4 tag from it), and\n  // whitelist which events may be forwarded -- autoTrackBehavior() emits section, card and\n  // scroll-depth events by the dozen per session, which would swamp GA4 even when addressed\n  // to the right destination.\n  function publishGa4() {\n    return { skipped: true, reason: \"ga4_owned_by_gtm\" };\n  }\n\n  function contractSchemaVersion() {\n    var value = Number(clientEventContract().schema_version);\n    return Number.isInteger(value) && value > 0 ? value : 0;\n  }\n\n  function configuredEnvironment() {\n    var value = (window.SNDTCAnalyticsConfig || {}).environment || (window.SNDTCProductMediaConfig || {}).environment || \"production\";\n    return value === \"production\" || value === \"staging\" || value === \"development\" ? value : \"production\";\n  }\n\n  function customProperties(value) {\n    var output = {};\n    var reserved = RESERVED_EVENT_INPUT_KEYS;\n    var safe = sanitizeProperties(value || {});\n    var key;\n    for (key in safe) {\n      if (Object.prototype.hasOwnProperty.call(safe, key) && key !== \"properties\" && !reserved[key]) output[key] = safe[key];\n    }\n    if (safe.properties && typeof safe.properties === \"object\" && !Array.isArray(safe.properties)) {\n      for (key in safe.properties) {\n        if (Object.prototype.hasOwnProperty.call(safe.properties, key)) output[key] = safe.properties[key];\n      }\n    }\n    for (key in HASHED_KEYS) {\n      if (Object.prototype.hasOwnProperty.call(output, key) && !/^[a-f0-9]{64}$/i.test(String(output[key] || \"\"))) delete output[key];\n    }\n    return output;\n  }\n\n  // Landing attribution for the envelope: the stashed landing hit wins, then the live URL,\n  // then the persisted first touch. Without this the gateway had no campaign data at all.\n  function envelopeAttribution() {\n    var stashed = sessionGet(PENDING_CAMPAIGN_KEY);\n    var record = null;\n    if (stashed) {\n      try {\n        record = JSON.parse(stashed);\n      } catch (e) {\n        record = null;\n      }\n    }\n    if (record && record.raw && Object.keys(record.raw).length) return record.raw;\n    var current = parseCampaignFromLocation();\n    if (hasAttribution(current)) return current.raw || {};\n    var firstTouch = getFirstTouch();\n    return (firstTouch && firstTouch.raw) || {};\n  }\n\n  // This is the sole Theme-owned custom-event entrypoint. It creates one\n  // canonical envelope before either destination sees it.\n  function emitCustom(event, properties) {\n    if (hasUnsafeCustomInput(properties)) return { envelope: null, delivery: { skipped: true, reason: \"unsafe_pii\" } };\n    var input = sanitizeProperties(properties || {});\n    var configuredStoreId = (window.SNDTCAnalyticsConfig || {}).store_id || STORE_ID;\n    var shopifyDomain = configuredShopifyDomain();\n    var eventKey = canonicalEventName(event);\n    if (!eventKey) return { envelope: null, delivery: { skipped: true, reason: \"invalid_event_key\" } };\n    var definition = contractEvent(eventKey);\n    var custom = customProperties(input);\n    if (!definition || definition.event_class !== \"custom_browser\") return { envelope: null, delivery: { skipped: true, reason: \"client_contract\" } };\n    if (!hasRequiredProperties(custom, definition.required_client_properties)) return { envelope: null, delivery: { skipped: true, reason: \"missing_required_properties\" } };\n    if (!hasOnlyAllowedProperties(custom, definition.allowed_client_properties)) return { envelope: null, delivery: { skipped: true, reason: \"client_contract\" } };\n    var configuration = deliveryConfiguration(configuredStoreId, shopifyDomain);\n    if (configuration) return { envelope: null, delivery: configuration };\n    var clientId = ga4ClientId();\n    var session = ga4Session();\n    var attribution = envelopeAttribution();\n    var envelope = {\n      event_id: uuid(),\n      event_key: eventKey,\n      event_class: \"custom_browser\",\n      event_version: contractSchemaVersion(),\n      tracking_plan_version: definition.tracking_plan_version,\n      event_revision: definition.event_revision,\n      store_id: configuredStoreId,\n      shopify_domain: shopifyDomain,\n      environment: configuredEnvironment(),\n      occurred_at: new Date().toISOString(),\n      anonymous_id: getAnonymousId(),\n      properties: custom,\n    };\n    // GA4 stitching keys. The gateway must forward these to Measurement Protocol as\n    // client_id / session_id / session_number, otherwise every event opens a new sourceless\n    // session and reports as Unassigned / (not set).\n    if (clientId) envelope.client_id = clientId;\n    if (session) {\n      envelope.session_id = session.session_id;\n      envelope.session_number = session.session_number;\n    }\n    envelope.page_location = currentUrl();\n    envelope.page_referrer = document.referrer || \"\";\n    if (Object.keys(attribution).length) envelope.campaign = attribution;\n\n    var ga4 = publishGa4(envelope);\n    return {\n      envelope: envelope,\n      delivery: postGateway(envelope),\n      ga4: ga4,\n    };\n  }\n\n  // Compatibility surface: all legacy helpers still return the original\n  // delivery result, but their writes now pass through emitCustom().\n  function track(event, properties) {\n    return emitCustom(event, properties).delivery;\n  }\n\n  // Compatibility-only: identity never leaves the browser through this SDK.\n  function identify() {\n    return { skipped: true, reason: \"identity_not_supported\" };\n  }\n\n  function strategicProperties(properties) {\n    var output = {};\n    var key;\n    properties = properties || {};\n    for (key in properties) {\n      if (Object.prototype.hasOwnProperty.call(properties, key)) output[key] = properties[key];\n    }\n    return output;\n  }\n\n  function emailSubscribed(properties) {\n    properties = properties || {};\n    var output = strategicProperties(properties);\n    if (properties.emailHash) output.email_hash = properties.emailHash;\n    delete output.emailHash;\n    return track(\"Email Subscribed\", output);\n  }\n\n  function smsSubscribed(properties) {\n    properties = properties || {};\n    var output = strategicProperties(properties);\n    if (properties.phoneHash) output.phone_hash = properties.phoneHash;\n    delete output.phoneHash;\n    return track(\"SMS Subscribed\", output);\n  }\n\n  function chatStarted(properties) {\n    return track(\"Chat Started\", strategicProperties(properties));\n  }\n\n  function promotionViewed(properties) {\n    return track(\"Promotion Viewed\", strategicProperties(properties));\n  }\n\n  function promotionClicked(properties) {\n    return track(\"Promotion Clicked\", strategicProperties(properties));\n  }\n\n  function reviewsViewed(properties) {\n    return track(\"Reviews Viewed\", strategicProperties(properties));\n  }\n\n  function financingViewed(properties) {\n    return track(\"Financing Viewed\", strategicProperties(properties));\n  }\n\n  function accessoryViewed(properties) {\n    return track(\"Accessory Viewed\", strategicProperties(properties));\n  }\n\n  function accessoryAdded(properties) {\n    return track(\"Accessory Added\", strategicProperties(properties));\n  }\n\n  function numeric(value) {\n    var n = Number(value);\n    return isFinite(n) ? n : undefined;\n  }\n\n  function videoProperties(properties) {\n    var output = strategicProperties(properties || {});\n    if (output.duration_seconds != null) output.duration_seconds = numeric(output.duration_seconds);\n    if (output.position_seconds != null) output.position_seconds = numeric(output.position_seconds);\n    if (output.percent != null) output.percent = numeric(output.percent);\n    return output;\n  }\n\n  function videoPlaybackStarted(properties) {\n    return track(\"Video Playback Started\", videoProperties(properties));\n  }\n\n  function videoPlaybackProgressed(properties) {\n    return track(\"Video Playback Progressed\", videoProperties(properties));\n  }\n\n  function videoPlaybackPaused(properties) {\n    return track(\"Video Playback Paused\", videoProperties(properties));\n  }\n\n  function videoPlaybackCompleted(properties) {\n    return track(\"Video Playback Completed\", videoProperties(properties));\n  }\n\n  function pageEngaged(properties) {\n    return track(\"Page Engaged\", strategicProperties(properties));\n  }\n\n  function scrollDepthReached(properties) {\n    return track(\"Scroll Depth Reached\", strategicProperties(properties));\n  }\n\n  function sectionViewed(properties) {\n    return track(\"Section Viewed\", strategicProperties(properties));\n  }\n\n  function ctaClicked(properties) {\n    return track(\"CTA Clicked\", strategicProperties(properties));\n  }\n\n  // Variant option tracking is deliberately based on stable theme attributes.\n  // A theme can mark each option control with data-sn-option and avoid scanning\n  // the entire product form or sending events for mere hover/focus activity.\n  function productOptionViewed(properties) {\n    return track(\"Product Option Viewed\", strategicProperties(properties));\n  }\n\n  function productOptionSelected(properties) {\n    return track(\"Product Option Selected\", strategicProperties(properties));\n  }\n\n  function datasetProps(el, prefix) {\n    var output = {};\n    var data = el && el.dataset ? el.dataset : {};\n    var key;\n    for (key in data) {\n      if (!Object.prototype.hasOwnProperty.call(data, key)) continue;\n      if (key.indexOf(prefix) !== 0) continue;\n      var rawName = key.slice(prefix.length);\n      if (!rawName) continue;\n      var name = rawName.replace(/[A-Z]/g, function (m) { return \"_\" + m.toLowerCase(); });\n      name = name.replace(/^_+/, \"\");\n      output[name] = data[key];\n    }\n    return output;\n  }\n\n  function trackBehavior(eventName, properties) {\n    if (!DECLARATIVE_EVENTS[eventName]) return { skipped: true, reason: \"unknown_behavior_event\" };\n    return track(eventName, strategicProperties(properties));\n  }\n\n  // The two published themes share semantic class names but do not yet share\n  // tracking attributes. Add only stable, component-level markers here so the\n  // same SDK remains reusable for future stores without copying Liquid logic.\n  function addThemeMarker(node, name, value) {\n    if (!node || !node.getAttribute || !node.setAttribute || node.getAttribute(name)) return;\n    node.setAttribute(name, value);\n  }\n\n  function annotateThemeDom() {\n    if (typeof document === \"undefined\" || !document.querySelectorAll) return;\n    var sections = document.querySelectorAll('[id^=\"shopify-section-\"], main > section, main > div > section');\n    for (var i = 0; i < sections.length; i += 1) {\n      addThemeMarker(sections[i], \"data-sn-section\", sections[i].id || \"theme-section-\" + i);\n    }\n\n    var heroes = document.querySelectorAll(\".x-container-slideshow, .kik-image-banner-container, .video-hero, .kiks-modification-slideshow, .kiks-modification-image-banner\");\n    for (var j = 0; j < heroes.length; j += 1) {\n      addThemeMarker(heroes[j], \"data-sn-track-display\", \"Hero Displayed\");\n      addThemeMarker(heroes[j], \"data-sn-track-view\", \"Hero Viewed\");\n    }\n\n    var banners = document.querySelectorAll(\".promotion-banner, .promotion, .x-container-promotion-grid\");\n    for (var k = 0; k < banners.length; k += 1) {\n      addThemeMarker(banners[k], \"data-sn-track-display\", \"Banner Viewed\");\n      addThemeMarker(banners[k], \"data-sn-track-view\", \"Banner Viewed\");\n    }\n\n    var faqRoots = document.querySelectorAll(\".faq-container, .section-kik-smart-faqs\");\n    for (var f = 0; f < faqRoots.length; f += 1) {\n      addThemeMarker(faqRoots[f], \"data-sn-track-display\", \"FAQ Displayed\");\n      addThemeMarker(faqRoots[f], \"data-sn-track-view\", \"FAQ Viewed\");\n      var faqItems = faqRoots[f].querySelectorAll(\"button, summary, [role=button]\");\n      for (var fi = 0; fi < faqItems.length; fi += 1) {\n        addThemeMarker(faqItems[fi], \"data-sn-track-click\", \"FAQ Item Clicked\");\n        addThemeMarker(faqItems[fi], \"data-sn-click-target\", \"faq_item\");\n      }\n    }\n\n    var reviews = document.querySelectorAll(\".kik-review-card, .x-container-twm\");\n    for (var r = 0; r < reviews.length; r += 1) {\n      addThemeMarker(reviews[r], \"data-sn-track-view\", \"Review Card Viewed\");\n    }\n\n    var cards = document.querySelectorAll(\".card-product, .kik_product_card\");\n    for (var c = 0; c < cards.length; c += 1) {\n      addThemeMarker(cards[c], \"data-sn-track-view\", \"Product Card Viewed\");\n      addThemeMarker(cards[c], \"data-sn-track-click\", \"Product Card Clicked\");\n      addThemeMarker(cards[c], \"data-sn-click-target\", \"product_card\");\n    }\n\n    var navLinks = document.querySelectorAll(\"header a[href], .shopify-header a[href], [data-mobile-navigation] a[href]\");\n    for (var n = 0; n < navLinks.length; n += 1) {\n      addThemeMarker(navLinks[n], \"data-sn-track-click\", \"Navigation Clicked\");\n      addThemeMarker(navLinks[n], \"data-sn-click-target\", \"navigation\");\n    }\n\n    var ctas = document.querySelectorAll(\".x-container-slideshow a[href], .kik-image-banner-container a[href], .promotion-banner a[href], .promotion a[href]\");\n    for (var a = 0; a < ctas.length; a += 1) {\n      addThemeMarker(ctas[a], \"data-sn-track-click\", \"CTA Clicked\");\n      addThemeMarker(ctas[a], \"data-sn-cta-id\", ctas[a].id || \"theme-cta-\" + a);\n      addThemeMarker(ctas[a], \"data-sn-click-target\", \"cta\");\n    }\n\n    var options = document.querySelectorAll(\"[name^=option], [name^=options], .variant-radio, [data-option-name], select[name*=option]\");\n    for (var o = 0; o < options.length; o += 1) addThemeMarker(options[o], \"data-sn-option\", \"true\");\n\n    var videos = document.querySelectorAll(\".video-hero video, .video-with-text-wrapper video, .video-frame video, .section-kik-video-slider video, .kiks-modification-slideshow video, .kiks-modification-image-banner video, [data-video-id]\");\n    for (var v = 0; v < videos.length; v += 1) {\n      if (videos[v].getAttribute(\"data-sn-product-media-bound\") === \"true\") continue;\n      addThemeMarker(videos[v], \"data-sn-video-id\", videos[v].id || \"theme-video-\" + v);\n      addThemeMarker(videos[v], \"data-sn-video-source\", \"html5\");\n    }\n  }\n\n  function behaviorProperties(el) {\n    var output = datasetProps(el, \"sn\");\n    delete output.track_display;\n    delete output.track_view;\n    delete output.track_click;\n    if (!output.destination && el.href) output.destination = sanitizeUrl(el.href);\n    if (!output.click_target) output.click_target = el.getAttribute(\"data-sn-click-target\") || undefined;\n    return output;\n  }\n\n  function autoTrackDeclarativeBehavior() {\n    if (window.__sndtcDeclarativeBehaviorTracked) return;\n    window.__sndtcDeclarativeBehaviorTracked = true;\n    var viewObserver = null;\n\n    if (window.IntersectionObserver) {\n      viewObserver = new IntersectionObserver(function (entries) {\n        for (var i = 0; i < entries.length; i += 1) {\n          var entry = entries[i];\n          if (!entry.isIntersecting || entry.intersectionRatio < 0.5) continue;\n          var node = entry.target;\n          if (node.__sndtcDeclarativeViewed) continue;\n          node.__sndtcDeclarativeViewed = true;\n          trackBehavior(node.getAttribute(\"data-sn-track-view\"), behaviorProperties(node));\n          viewObserver.unobserve(node);\n        }\n      }, { threshold: [0.5] });\n    }\n\n    function nodes(root, selector) {\n      var output = [];\n      if (root && root.matches && root.matches(selector)) output.push(root);\n      if (root && root.querySelectorAll) {\n        var descendants = root.querySelectorAll(selector);\n        for (var i = 0; i < descendants.length; i += 1) output.push(descendants[i]);\n      }\n      return output;\n    }\n\n    function scan(root) {\n      var displayed = nodes(root, \"[data-sn-track-display]\");\n      for (var i = 0; i < displayed.length; i += 1) {\n        if (displayed[i].__sndtcDeclarativeDisplayed) continue;\n        displayed[i].__sndtcDeclarativeDisplayed = true;\n        trackBehavior(displayed[i].getAttribute(\"data-sn-track-display\"), behaviorProperties(displayed[i]));\n      }\n      if (viewObserver) {\n        var viewed = nodes(root, \"[data-sn-track-view]\");\n        for (var j = 0; j < viewed.length; j += 1) {\n          if (!viewed[j].__sndtcDeclarativeObserved) {\n            viewed[j].__sndtcDeclarativeObserved = true;\n            viewObserver.observe(viewed[j]);\n          }\n        }\n      }\n    }\n\n    document.addEventListener(\"click\", function (event) {\n      var node = event.target;\n      while (node && node !== document && !(node.getAttribute && node.getAttribute(\"data-sn-track-click\"))) node = node.parentNode;\n      if (!node || node === document) return;\n      trackBehavior(node.getAttribute(\"data-sn-track-click\"), behaviorProperties(node));\n    }, true);\n\n    scan(document);\n    if (window.MutationObserver && document.documentElement) {\n      new MutationObserver(function (mutations) {\n        for (var i = 0; i < mutations.length; i += 1) {\n          for (var j = 0; j < mutations[i].addedNodes.length; j += 1) scan(mutations[i].addedNodes[j]);\n        }\n      }).observe(document.documentElement, { childList: true, subtree: true });\n    }\n  }\n\n  function trackVideoElement(video, properties) {\n    if (!video || video.__sndtcVideoTracked) return;\n    video.__sndtcVideoTracked = true;\n\n    var base = strategicProperties(properties || {});\n    var milestones = [25, 50, 75, 90];\n    var seen = {};\n    var started = false;\n\n    function props(extra) {\n      var output = {};\n      var key;\n      for (key in base) output[key] = base[key];\n      for (key in extra) output[key] = extra[key];\n      output.duration_seconds = numeric(video.duration);\n      output.position_seconds = numeric(video.currentTime);\n      return output;\n    }\n\n    video.addEventListener(\"play\", function () {\n      if (started) return;\n      started = true;\n      videoPlaybackStarted(props({}));\n    });\n\n    video.addEventListener(\"timeupdate\", function () {\n      if (!video.duration || !isFinite(video.duration)) return;\n      var pct = Math.floor((video.currentTime / video.duration) * 100);\n      for (var i = 0; i < milestones.length; i += 1) {\n        var m = milestones[i];\n        if (pct >= m && !seen[m]) {\n          seen[m] = true;\n          videoPlaybackProgressed(props({ percent: m }));\n        }\n      }\n    });\n\n    video.addEventListener(\"pause\", function () {\n      if (video.ended) return;\n      videoPlaybackPaused(props({}));\n    });\n\n    video.addEventListener(\"ended\", function () {\n      videoPlaybackCompleted(props({ percent: 100 }));\n    });\n  }\n\n  function autoTrackVideos() {\n    var nodes = document.querySelectorAll(\"[data-sn-video-id]\");\n    for (var i = 0; i < nodes.length; i += 1) {\n      var node = nodes[i];\n      if (node.getAttribute && node.getAttribute(\"data-sn-product-media-bound\") === \"true\") continue;\n      trackVideoElement(node, datasetProps(node, \"sn\"));\n    }\n  }\n\n  function autoTrackScrollDepth() {\n    if (window.__sndtcScrollTracked) return;\n    window.__sndtcScrollTracked = true;\n    var milestones = [25, 50, 75, 90];\n    var seen = {};\n\n    function maxScrollPercent() {\n      var d = document.documentElement;\n      var b = document.body;\n      var scrollTop = window.pageYOffset || d.scrollTop || b.scrollTop || 0;\n      var height = Math.max(d.scrollHeight || 0, b.scrollHeight || 0) - window.innerHeight;\n      if (height <= 0) return 100;\n      return Math.min(100, Math.floor((scrollTop / height) * 100));\n    }\n\n    var scheduled = false;\n    var remaining = milestones.length;\n\n    function measure() {\n      scheduled = false;\n      var pct = maxScrollPercent();\n      for (var i = 0; i < milestones.length; i += 1) {\n        var m = milestones[i];\n        if (pct >= m && !seen[m]) {\n          seen[m] = true;\n          remaining -= 1;\n          scrollDepthReached({ percent: m, path: currentPage().path });\n        }\n      }\n      // Every milestone is one-shot, so stop touching layout once they have all fired.\n      if (remaining <= 0) {\n        window.removeEventListener(\"scroll\", check);\n        window.removeEventListener(\"resize\", check);\n      }\n    }\n\n    // maxScrollPercent() reads scrollHeight/innerHeight, which forces a synchronous layout.\n    // Running it straight off the scroll event thrashed layout on every frame; coalesce into\n    // one read per animation frame instead.\n    function check() {\n      if (scheduled) return;\n      scheduled = true;\n      if (typeof window.requestAnimationFrame === \"function\") window.requestAnimationFrame(measure);\n      else window.setTimeout(measure, 100);\n    }\n\n    window.addEventListener(\"scroll\", check, { passive: true });\n    window.addEventListener(\"resize\", check, { passive: true });\n    check();\n  }\n\n  function autoTrackSections() {\n    if (!window.IntersectionObserver) return;\n    var nodes = document.querySelectorAll(\"[data-sn-section]\");\n    var observer = new IntersectionObserver(function (entries) {\n      for (var i = 0; i < entries.length; i += 1) {\n        var entry = entries[i];\n        if (!entry.isIntersecting || entry.intersectionRatio < 0.5) continue;\n        var el = entry.target;\n        if (el.__sndtcSectionViewed) continue;\n        el.__sndtcSectionViewed = true;\n        sectionViewed(datasetProps(el, \"sn\"));\n        observer.unobserve(el);\n      }\n    }, { threshold: [0.5] });\n\n    for (var j = 0; j < nodes.length; j += 1) observer.observe(nodes[j]);\n  }\n\n  function autoTrackCtas() {\n    if (window.__sndtcCtaTracked) return;\n    window.__sndtcCtaTracked = true;\n    document.addEventListener(\"click\", function (event) {\n      var target = event.target;\n      while (target && target !== document) {\n        if (target.getAttribute && target.getAttribute(\"data-sn-cta-id\")) {\n          ctaClicked(datasetProps(target, \"sn\"));\n          return;\n        }\n        target = target.parentNode;\n      }\n    }, true);\n  }\n\n  function optionProperties(el) {\n    var output = datasetProps(el, \"sn\");\n    if (!output.option_name) output.option_name = el.getAttribute(\"name\") || el.getAttribute(\"data-option-name\") || undefined;\n    if (!output.option_value) output.option_value = el.value || el.getAttribute(\"data-option-value\") || undefined;\n    if (!output.product_id && window.SNDTCProduct && window.SNDTCProduct.id) output.product_id = window.SNDTCProduct.id;\n    output.page_type = output.page_type || \"product\";\n    return output;\n  }\n\n  function autoTrackProductOptions() {\n    if (window.__sndtcProductOptionsTracked) return;\n    window.__sndtcProductOptionsTracked = true;\n    var nodes = document.querySelectorAll(\"[data-sn-option]\");\n    if (!nodes.length) return;\n\n    if (window.IntersectionObserver) {\n      var observer = new IntersectionObserver(function (entries) {\n        for (var i = 0; i < entries.length; i += 1) {\n          var entry = entries[i];\n          if (!entry.isIntersecting || entry.intersectionRatio < 0.5) continue;\n          var node = entry.target;\n          if (node.__sndtcOptionViewed) continue;\n          node.__sndtcOptionViewed = true;\n          productOptionViewed(optionProperties(node));\n          observer.unobserve(node);\n        }\n      }, { threshold: [0.5] });\n      for (var i = 0; i < nodes.length; i += 1) observer.observe(nodes[i]);\n    }\n\n    document.addEventListener(\"change\", function (event) {\n      var node = event.target;\n      while (node && node !== document && !(node.getAttribute && node.getAttribute(\"data-sn-option\") !== null)) node = node.parentNode;\n      if (!node || node === document) return;\n      var props = optionProperties(node);\n      var value = props.option_value;\n      var key = (props.option_name || \"option\") + \":\" + (props.product_id || \"\") + \":\" + String(value || \"\");\n      if (node.__sndtcOptionLastValue === key) return;\n      node.__sndtcOptionLastValue = key;\n      productOptionSelected(props);\n    }, true);\n  }\n\n  function autoTrackEngagement() {\n    if (window.__sndtcEngagementTracked) return;\n    window.__sndtcEngagementTracked = true;\n    var startedAt = Date.now();\n    var visibleStartedAt = document.hidden ? 0 : startedAt;\n    var visibleMs = 0;\n    var fired = {};\n    var thresholds = [10, 30, 60, 120];\n\n    function currentVisibleMs() {\n      return visibleMs + (visibleStartedAt ? Date.now() - visibleStartedAt : 0);\n    }\n\n    function maxScrollPercent() {\n      var d = document.documentElement;\n      var b = document.body;\n      var scrollTop = window.pageYOffset || d.scrollTop || b.scrollTop || 0;\n      var height = Math.max(d.scrollHeight || 0, b.scrollHeight || 0) - window.innerHeight;\n      if (height <= 0) return 100;\n      return Math.min(100, Math.floor((scrollTop / height) * 100));\n    }\n\n    function emit(seconds, final) {\n      pageEngaged({\n        seconds: seconds,\n        path: currentPage().path,\n        max_scroll_percent: maxScrollPercent(),\n        final: Boolean(final),\n      });\n    }\n\n    var pending = thresholds.length;\n    var timer = 0;\n\n    function check() {\n      var seconds = Math.floor(currentVisibleMs() / 1000);\n      for (var i = 0; i < thresholds.length; i += 1) {\n        var t = thresholds[i];\n        if (seconds >= t && !fired[t]) {\n          fired[t] = true;\n          pending -= 1;\n          emit(t, false);\n        }\n      }\n      // The last threshold is 120s; keeping the poll alive past it just burns CPU and battery.\n      if (pending <= 0 && timer) {\n        window.clearInterval(timer);\n        timer = 0;\n      }\n    }\n\n    document.addEventListener(\"visibilitychange\", function () {\n      if (document.hidden && visibleStartedAt) {\n        visibleMs += Date.now() - visibleStartedAt;\n        visibleStartedAt = 0;\n        check();\n      } else if (!document.hidden && !visibleStartedAt) {\n        visibleStartedAt = Date.now();\n      }\n    });\n\n    window.addEventListener(\"pagehide\", function () {\n      var seconds = Math.floor(currentVisibleMs() / 1000);\n      if (seconds >= 5) emit(seconds, true);\n    });\n\n    timer = window.setInterval(function () {\n      if (document.hidden) return;\n      check();\n    }, 5000);\n  }\n\n  function autoTrackBehavior() {\n    if (typeof document === \"undefined\" || typeof window === \"undefined\") return;\n    annotateThemeDom();\n    autoTrackVideos();\n    autoTrackScrollDepth();\n    autoTrackSections();\n    autoTrackCtas();\n    autoTrackProductOptions();\n    autoTrackDeclarativeBehavior();\n    autoTrackEngagement();\n  }\n\n  function campaignDedupeId(attribution) {\n    var page = currentPage();\n    return JSON.stringify({\n      path: page.path,\n      search: page.search,\n      raw: attribution.raw || {},\n    });\n  }\n\n  function hasCampaignClicked(id) {\n    var key = CAMPAIGN_CLICKED_KEY + \":\" + id;\n    if (sessionGet(key)) return true;\n    return !!runtimeCampaignClicked[key];\n  }\n\n  function markCampaignClicked(id) {\n    var key = CAMPAIGN_CLICKED_KEY + \":\" + id;\n    runtimeCampaignClicked[key] = true;\n    sessionSet(key, \"1\");\n  }\n\n  // Capture the landing hit synchronously, before the consent handshake can resolve. Nothing\n  // is sent here; the record only survives long enough for fireCampaignClicked() to emit it\n  // once consent is known. Navigating away used to lose the utm_* params permanently.\n  function stashLandingAttribution() {\n    var current = parseCampaignFromLocation();\n    if (!hasAttribution(current)) return;\n    if (sessionGet(PENDING_CAMPAIGN_KEY)) return;\n    sessionSet(\n      PENDING_CAMPAIGN_KEY,\n      JSON.stringify({ raw: current.raw || {}, url: currentUrl(), dedupe_id: campaignDedupeId(current) })\n    );\n  }\n\n  function pendingCampaignRecord() {\n    var stashed = sessionGet(PENDING_CAMPAIGN_KEY);\n    var current;\n    if (stashed) {\n      try {\n        var parsed = JSON.parse(stashed);\n        if (parsed && parsed.dedupe_id) return parsed;\n      } catch (e) {}\n    }\n    current = parseCampaignFromLocation();\n    if (!hasAttribution(current)) return null;\n    return { raw: current.raw || {}, url: currentUrl(), dedupe_id: campaignDedupeId(current) };\n  }\n\n  function fireCampaignClicked() {\n    var record = pendingCampaignRecord();\n    var properties;\n\n    if (!record) return null;\n    if (!consentAllows()) return { skipped: true, reason: \"consent\" };\n    if (!window.fetch) return { skipped: true, reason: \"fetch_unavailable\" };\n    if (hasCampaignClicked(record.dedupe_id)) {\n      sessionRemove(PENDING_CAMPAIGN_KEY);\n      return { skipped: true, reason: \"campaign_clicked_dedupe\" };\n    }\n\n    properties = sanitizeProperties(record.raw || {});\n    properties.url = record.url || currentUrl();\n    markCampaignClicked(record.dedupe_id);\n    sessionRemove(PENDING_CAMPAIGN_KEY);\n    return track(\"Campaign Clicked\", properties);\n  }\n\n  window.SNDTC = {\n    emitCustom: emitCustom,\n    track: track,\n    identify: identify,\n    setAnalyticsConsent: setAnalyticsConsent,\n    emailSubscribed: emailSubscribed,\n    smsSubscribed: smsSubscribed,\n    chatStarted: chatStarted,\n    promotionViewed: promotionViewed,\n    promotionClicked: promotionClicked,\n    reviewsViewed: reviewsViewed,\n    financingViewed: financingViewed,\n    accessoryViewed: accessoryViewed,\n    accessoryAdded: accessoryAdded,\n    videoPlaybackStarted: videoPlaybackStarted,\n    videoPlaybackProgressed: videoPlaybackProgressed,\n    videoPlaybackPaused: videoPlaybackPaused,\n    videoPlaybackCompleted: videoPlaybackCompleted,\n    trackVideoElement: trackVideoElement,\n    pageEngaged: pageEngaged,\n    scrollDepthReached: scrollDepthReached,\n    sectionViewed: sectionViewed,\n    ctaClicked: ctaClicked,\n    productOptionViewed: productOptionViewed,\n    productOptionSelected: productOptionSelected,\n    trackBehavior: trackBehavior,\n    annotateThemeDom: annotateThemeDom,\n    autoTrackBehavior: autoTrackBehavior,\n    ga4ClientId: ga4ClientId,\n    ga4Session: ga4Session,\n  };\n\n  stashLandingAttribution();\n  initializeCustomerPrivacy();\n  whenConsentAllowed(fireCampaignClicked);\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", autoTrackBehavior);\n  } else {\n    autoTrackBehavior();\n  }\n})();\n"],
  "mappings": "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",
  "names": ["i"]
}
