{
  "version": 3,
  "sources": ["/cdn/shop/t/95/assets/discount-reminder-system.js?dr=20260722v14"],
  "sourcesContent": ["(function () {\r\n  'use strict';\r\n\r\n  if (window.Shopify && window.Shopify.designMode) return;\r\n\r\n  var LOG = '[Discount Reminder]';\r\n  var DR_VERSION = '2026-07-23-v17';\r\n  var SCROLL_THRESHOLD = 0.8;\r\n  var PROFILE_POLL_MS = 500;\r\n  var PROFILE_POLL_MAX = 30;\r\n  var GATE_REMOUNT_MAX = 2;\r\n\r\n  var CODE_PRIORITY = {\r\n    NEU5: 1,\r\n    CART5: 2,\r\n    DANKE5: 3,\r\n    WINBACK10: 4,\r\n    DANKE10: 5\r\n  };\r\n\r\n  var SCENARIO_2_CODES = { NEU5: true, CART5: true };\r\n  var SCENARIO_3_CODES = { DANKE5: true, DANKE10: true, WINBACK10: true };\r\n  var DISCOUNT_CODE_PATTERN = /\\b(NEU5|CART5|DANKE5|DANKE10|WINBACK10)%?\\b/i;\r\n\r\n  // All discount codes \u2192 theme setting key \u2192 optional known Klaviyo gate form IDs.\r\n  // Priority order within each scenario (highest first for S3).\r\n  var CODE_GATE_ENTRIES = [\r\n    { code: 'WINBACK10%', configKey: 'segment_gate_s3_winback10', scenario: 'scenario3', knownFormIds: ['UWLApA'] },\r\n    { code: 'DANKE10%', configKey: 'segment_gate_s3_danke10', scenario: 'scenario3', knownFormIds: ['RjTzgC'] },\r\n    { code: 'DANKE5%', configKey: 'segment_gate_s3_danke5', scenario: 'scenario3', knownFormIds: ['SM6rmH'] },\r\n    { code: 'CART5%', configKey: 'segment_gate_s2_cart5', scenario: 'scenario2', knownFormIds: ['VKgTPu'] },\r\n    // Do not map legacy generic S2 (WLvZ9b) \u2192 NEU5%; that blocks code changes.\r\n    { code: 'NEU5%', configKey: 'segment_gate_s2_neu5', scenario: 'scenario2', knownFormIds: ['TLSvAp'] }\r\n  ];\r\n\r\n  var GENERIC_GATE_KEYS = {\r\n    scenario1: 'segment_gate_scenario1',\r\n    scenario2: 'segment_gate_scenario2',\r\n    scenario3: 'segment_gate_scenario3'\r\n  };\r\n\r\n  var root = document.querySelector('[data-discount-reminder]');\r\n  if (!root) return;\r\n\r\n  var config = {};\r\n  try {\r\n    config = JSON.parse(root.dataset.config || '{}');\r\n  } catch (err) {\r\n    console.warn(LOG, 'Invalid config JSON');\r\n    return;\r\n  }\r\n\r\n  var reminderEnabled = config.enabled !== false;\r\n  var newVisitorDirectNeu5 = config.new_visitor_direct_neu5 === true;\r\n  var winback10PopupEnabled = config.winback10_popup_enabled === true;\r\n\r\n  var stickyWrap = root.querySelector('[data-dr-sticky]');\r\n  var stickyBtn = root.querySelector('[data-dr-sticky-btn]');\r\n  var flyout = root.querySelector('[data-dr-flyout]');\r\n  var backdrop = root.querySelector('[data-dr-backdrop]');\r\n  var closeBtn = root.querySelector('[data-dr-close]');\r\n  var headlineEl = root.querySelector('[data-dr-headline]');\r\n  var bodyEl = root.querySelector('[data-dr-body]');\r\n  var codeEl = root.querySelector('[data-dr-code]');\r\n  var codeWrap = root.querySelector('[data-dr-code-wrap]');\r\n  var ctaBtn = root.querySelector('[data-dr-cta]');\r\n  var formHost = root.querySelector('[data-dr-form]');\r\n  var successEl = root.querySelector('[data-dr-success]');\r\n  var emailFormView = root.querySelector('[data-dr-email-view]');\r\n  var customCopyView = root.querySelector('[data-dr-custom-copy]');\r\n  var profileProbeHost = root.querySelector('[data-dr-profile-probe-mount]');\r\n  var segmentGateHosts = {\r\n    scenario1: root.querySelector('[data-dr-segment-gate-mount=\"scenario1\"]'),\r\n    scenario2: root.querySelector('[data-dr-segment-gate-mount=\"scenario2\"]'),\r\n    scenario3: root.querySelector('[data-dr-segment-gate-mount=\"scenario3\"]')\r\n  };\r\n\r\n  var state = {\r\n    scenario: null,\r\n    segmentScenario: null,\r\n    segmentGateCode: '',\r\n    matchedGateFormId: '',\r\n    variant: null,\r\n    profile: null,\r\n    activeCode: '',\r\n    urlDiscountCode: '',\r\n    isOpen: false,\r\n    stickyDismissed: false,\r\n    lockedScrollY: 0,\r\n    ready: false,\r\n    profileLoaded: false,\r\n    eligibilitySettled: false\r\n  };\r\n\r\n  // formId \u2192 first-seen timestamp (used when multiple gates still have DOM content)\r\n  var gateActiveSince = {};\r\n  var gateRemountCount = 0;\r\n\r\n  function log() {\r\n    if (config.debug) {\r\n      console.log.apply(console, [LOG].concat(Array.prototype.slice.call(arguments)));\r\n    }\r\n  }\r\n\r\n  function normalizeCode(code) {\r\n    return String(code || '').trim().toUpperCase().replace(/%$/, '');\r\n  }\r\n\r\n  function formatCode(code) {\r\n    var base = normalizeCode(code);\r\n    return base ? base + '%' : '';\r\n  }\r\n\r\n  function buildFormIdCodeMap() {\r\n    var map = {};\r\n    var forms = config.form_ids || {};\r\n\r\n    function remember(formId, code) {\r\n      if (!formId || !code) return;\r\n      map[formId] = formatCode(code);\r\n    }\r\n\r\n    CODE_GATE_ENTRIES.forEach(function (entry) {\r\n      var code = formatCode(entry.code);\r\n      remember(forms[entry.configKey], code);\r\n      entry.knownFormIds.forEach(function (formId) {\r\n        if (!map[formId]) map[formId] = code;\r\n      });\r\n    });\r\n\r\n    return map;\r\n  }\r\n\r\n  var formIdCodeMap = buildFormIdCodeMap();\r\n\r\n  function getCodesForScenario(scenario) {\r\n    return CODE_GATE_ENTRIES\r\n      .filter(function (entry) { return entry.scenario === scenario; })\r\n      .map(function (entry) { return formatCode(entry.code); });\r\n  }\r\n\r\n  function isCodeInScenario(code, scenario) {\r\n    var base = normalizeCode(code);\r\n    if (scenario === 'scenario2') return Boolean(SCENARIO_2_CODES[base]);\r\n    if (scenario === 'scenario3') return Boolean(SCENARIO_3_CODES[base]);\r\n    return false;\r\n  }\r\n\r\n  function pickScenarioCode(candidates, scenario) {\r\n    var allowed = getCodesForScenario(scenario);\r\n    for (var i = 0; i < allowed.length; i++) {\r\n      if (candidates.indexOf(allowed[i]) !== -1) return allowed[i];\r\n    }\r\n    return '';\r\n  }\r\n\r\n  function getSegmentGateDefinitions() {\r\n    var forms = config.form_ids || {};\r\n    var gates = [];\r\n    var seen = {};\r\n\r\n    function addGate(formId, scenario, code, isGeneric) {\r\n      if (!formId) return;\r\n      var key = formId + '|' + scenario + '|' + (code || '');\r\n      if (seen[key]) return;\r\n      seen[key] = true;\r\n      gates.push({\r\n        formId: formId,\r\n        scenario: scenario,\r\n        code: code ? formatCode(code) : (formIdCodeMap[formId] || ''),\r\n        isGeneric: Boolean(isGeneric)\r\n      });\r\n    }\r\n\r\n    // Code-specific gates first (source of truth for discount code).\r\n    CODE_GATE_ENTRIES.forEach(function (entry) {\r\n      var formId = forms[entry.configKey];\r\n      if (!formId && entry.knownFormIds && entry.knownFormIds[0]) {\r\n        formId = entry.knownFormIds[0];\r\n      }\r\n      addGate(formId, entry.scenario, entry.code, false);\r\n    });\r\n\r\n    // Generic gates only for scenario detection \u2014 never for discount code.\r\n    addGate(forms.segment_gate_scenario3, 'scenario3', '', true);\r\n    addGate(forms.segment_gate_scenario2, 'scenario2', '', true);\r\n    addGate(forms.segment_gate_scenario1, 'scenario1', '', true);\r\n\r\n    return gates;\r\n  }\r\n\r\n  function resolveCodeForGateFormId(formId) {\r\n    if (!formId) return '';\r\n    return formIdCodeMap[formId] || '';\r\n  }\r\n\r\n  function pickHighestPriorityCode(codes) {\r\n    var best = '';\r\n    var bestPriority = -1;\r\n    (codes || []).forEach(function (code) {\r\n      var formatted = formatCode(code);\r\n      if (!formatted || !isKnownDiscountCode(normalizeCode(formatted))) return;\r\n      var priority = getCodePriority(formatted);\r\n      if (priority > bestPriority) {\r\n        bestPriority = priority;\r\n        best = formatted;\r\n      }\r\n    });\r\n    return best;\r\n  }\r\n\r\n  /** Active code-specific gates \u2192 prefer most recently activated (handles DANKE10%\u2192DANKE5%). */\r\n  function getActiveCodeFromGates() {\r\n    var bestMatch = null;\r\n    var bestScore = -1;\r\n    var activeCount = 0;\r\n\r\n    getSegmentGateDefinitions().forEach(function (gate) {\r\n      if (gate.isGeneric) return;\r\n      if (!gate.code) return;\r\n      if (isNeu5PopupPaused() && isNeu5Code(gate.code)) return;\r\n      if (isWinback10PopupPaused() && isWinback10Code(gate.code)) return;\r\n\r\n      var active = isGateFormActive(gate.formId, gate.scenario);\r\n      if (!active) {\r\n        delete gateActiveSince[gate.formId];\r\n        return;\r\n      }\r\n\r\n      activeCount += 1;\r\n      if (!gateActiveSince[gate.formId]) {\r\n        gateActiveSince[gate.formId] = Date.now();\r\n      }\r\n\r\n      // Newest activation wins (profile code change \u2192 new segment gate). Priority is tie-break only.\r\n      var score = (gateActiveSince[gate.formId] * 100) + getCodePriority(gate.code);\r\n      if (score > bestScore) {\r\n        bestScore = score;\r\n        bestMatch = {\r\n          scenario: gate.scenario,\r\n          formId: gate.formId,\r\n          code: formatCode(gate.code),\r\n          isGeneric: false\r\n        };\r\n      }\r\n    });\r\n\r\n    return {\r\n      code: bestMatch ? bestMatch.code : '',\r\n      match: bestMatch,\r\n      activeCount: activeCount\r\n    };\r\n  }\r\n\r\n  function remountCodeSpecificGates(reason) {\r\n    if (gateRemountCount >= GATE_REMOUNT_MAX) return false;\r\n    gateRemountCount += 1;\r\n    log('Remounting code gates (' + reason + ') attempt', gateRemountCount);\r\n\r\n    ['scenario2', 'scenario3'].forEach(function (scenario) {\r\n      var host = segmentGateHosts[scenario];\r\n      if (host) host.innerHTML = '';\r\n    });\r\n\r\n    gateActiveSince = {};\r\n    state.segmentGateCode = '';\r\n    state.matchedGateFormId = '';\r\n    mountSegmentGateForms();\r\n    return true;\r\n  }\r\n\r\n  function isKnownDiscountCode(codeBase) {\r\n    return Boolean(SCENARIO_2_CODES[codeBase] || SCENARIO_3_CODES[codeBase]);\r\n  }\r\n\r\n  function getCodePriority(code) {\r\n    return CODE_PRIORITY[normalizeCode(code)] || 0;\r\n  }\r\n\r\n  function safeDecodeUriComponent(value) {\r\n    try {\r\n      return decodeURIComponent(value);\r\n    } catch (err) {\r\n      // Codes like DANKE5% already come decoded from URLSearchParams;\r\n      // a second decodeURIComponent throws on the trailing \"%\".\r\n      return value;\r\n    }\r\n  }\r\n\r\n  function readDiscountCodeFromUrl() {\r\n    try {\r\n      var params = new URLSearchParams(window.location.search);\r\n      var raw = params.get('dc');\r\n      if (!raw) return '';\r\n      // URLSearchParams.get() already percent-decodes once (DANKE5%25 \u2192 DANKE5%).\r\n      var formatted = formatCode(safeDecodeUriComponent(String(raw).replace(/\\+/g, ' ')));\r\n      return isKnownDiscountCode(normalizeCode(formatted)) ? formatted : '';\r\n    } catch (err) {\r\n      return '';\r\n    }\r\n  }\r\n\r\n  function stripDiscountCodeFromUrl() {\r\n    try {\r\n      var url = new URL(window.location.href);\r\n      if (!url.searchParams.has('dc')) return;\r\n      url.searchParams.delete('dc');\r\n      var search = url.searchParams.toString();\r\n      var next = url.pathname + (search ? '?' + search : '') + url.hash;\r\n      window.history.replaceState({}, '', next);\r\n    } catch (err) {}\r\n  }\r\n\r\n  function pushKlaviyoIdentify(payload) {\r\n    window._learnq = window._learnq || [];\r\n    window._learnq.push(['identify', payload]);\r\n\r\n    if (window.klaviyo && typeof window.klaviyo.identify === 'function') {\r\n      try {\r\n        window.klaviyo.identify(payload);\r\n      } catch (err) {}\r\n    }\r\n  }\r\n\r\n  function applyUrlDiscountParam() {\r\n    var urlCode = readDiscountCodeFromUrl();\r\n    if (!urlCode) return;\r\n    if (isPopupPausedForCode(urlCode)) {\r\n      log('Popup paused for code \u2014 ignoring ?dc= for popup:', urlCode);\r\n      stripDiscountCodeFromUrl();\r\n      return;\r\n    }\r\n\r\n    if (isNeu5Code(urlCode) && isNeu5ReminderEnabled()) {\r\n      log('NEU5% ?dc= ignored \u2014 profile must already have NEU5% from Klaviyo');\r\n      stripDiscountCodeFromUrl();\r\n      return;\r\n    }\r\n\r\n    state.urlDiscountCode = urlCode;\r\n    mergeProfileProperties({ active_discount_code: urlCode });\r\n\r\n    var email = getShopifyEmail();\r\n    var payload = {\r\n      active_discount_code: urlCode,\r\n      discount_code_priority: String(getCodePriority(urlCode)),\r\n      has_converted_with_code: 'false'\r\n    };\r\n\r\n    if (email) payload.$email = email;\r\n\r\n    pushKlaviyoIdentify(payload);\r\n    stripDiscountCodeFromUrl();\r\n    log('Klaviyo identify from URL ?dc= (segment will update from profile):', urlCode);\r\n  }\r\n\r\n  function getAbVariant() {\r\n    return 'A';\r\n  }\r\n\r\n  function hasAktionUtm() {\r\n    try {\r\n      var params = new URLSearchParams(window.location.search);\r\n      var keys = params.keys();\r\n      var entry = keys.next();\r\n      while (!entry.done) {\r\n        var key = String(entry.value || '').toLowerCase();\r\n        var value = String(params.get(entry.value) || '').toLowerCase();\r\n        if (key.indexOf('aktion') !== -1 || value.indexOf('aktion') !== -1) return true;\r\n        entry = keys.next();\r\n      }\r\n    } catch (err) {}\r\n    return false;\r\n  }\r\n\r\n  function toBool(value) {\r\n    if (value === true || value === 'true' || value === 1 || value === '1') return true;\r\n    return false;\r\n  }\r\n\r\n  function isRecentAktionClick(dateValue) {\r\n    if (!dateValue) return false;\r\n    var ts = Date.parse(dateValue);\r\n    if (isNaN(ts)) return false;\r\n    return Date.now() - ts < 7 * 24 * 60 * 60 * 1000;\r\n  }\r\n\r\n  function isExcluded(profile) {\r\n    if (hasAktionUtm()) return true;\r\n    if (profile && isRecentAktionClick(profile.last_aktion_email_click)) return true;\r\n    if (profile && toBool(profile.has_converted_with_code)) return true;\r\n    return false;\r\n  }\r\n\r\n  function getShopifyEmail() {\r\n    return (config.customer && config.customer.email) || '';\r\n  }\r\n\r\n  function hasPurchased() {\r\n    return Boolean(config.customer && config.customer.has_purchased);\r\n  }\r\n\r\n  function resolveEmail(profile) {\r\n    return (profile && profile.email) || getShopifyEmail() || '';\r\n  }\r\n\r\n  /** Theme toggle ON = allow popup only for active_discount_code NEU5% on existing profiles. */\r\n  function isNeu5ReminderEnabled() {\r\n    return newVisitorDirectNeu5;\r\n  }\r\n\r\n  function isNewVisitorDirectNeu5() {\r\n    return isNeu5ReminderEnabled();\r\n  }\r\n\r\n  /** Switch OFF = no NEU5% popup (profile, segment gate, or ?dc=NEU5%). */\r\n  function isNeu5PopupPaused() {\r\n    return !isNeu5ReminderEnabled();\r\n  }\r\n\r\n  function profileHasOpenNeu5Code(profile) {\r\n    if (!profile || toBool(profile.has_converted_with_code)) return false;\r\n    return isNeu5Code(profile.active_discount_code);\r\n  }\r\n\r\n  function hasActiveNeu5GateSignal() {\r\n    if (isNeu5Code(state.segmentGateCode)) return true;\r\n    var fromGates = getActiveCodeFromGates();\r\n    return Boolean(fromGates.code && isNeu5Code(fromGates.code));\r\n  }\r\n\r\n  function isExistingNeu5Customer(profile) {\r\n    if (profileHasOpenNeu5Code(profile)) return true;\r\n    if (hasActiveNeu5GateSignal()) return true;\r\n    if (state.profile && profileHasOpenNeu5Code(state.profile)) return true;\r\n    return false;\r\n  }\r\n\r\n  function isNeu5Code(code) {\r\n    return normalizeCode(code) === 'NEU5';\r\n  }\r\n\r\n  function isWinback10Code(code) {\r\n    return normalizeCode(code) === 'WINBACK10';\r\n  }\r\n\r\n  function isWinback10PopupPaused() {\r\n    return !winback10PopupEnabled;\r\n  }\r\n\r\n  function isPopupPausedForCode(code) {\r\n    if (!code) return false;\r\n    if (isNeu5PopupPaused() && isNeu5Code(code)) return true;\r\n    if (isWinback10PopupPaused() && isWinback10Code(code)) return true;\r\n    return false;\r\n  }\r\n\r\n  function applyCodePopupPauses(scenario, profile) {\r\n    if (!scenario) return scenario;\r\n\r\n    var code = formatCode(\r\n      state.activeCode ||\r\n      (profile && profile.active_discount_code) ||\r\n      state.segmentGateCode ||\r\n      state.urlDiscountCode ||\r\n      ''\r\n    );\r\n\r\n    if (isNeu5PopupPaused() && (scenario === 'scenario1' || isNeu5Code(code))) {\r\n      log('NEU5% popup paused \u2014 switch OFF');\r\n      return null;\r\n    }\r\n\r\n    if (isNeu5ReminderEnabled() && scenario === 'scenario1') {\r\n      log('NEU5% enabled \u2014 no popup for new visitors (profile must have NEU5%)');\r\n      return null;\r\n    }\r\n\r\n    if (isWinback10PopupPaused() && isWinback10Code(code)) {\r\n      log('WINBACK10% popup paused \u2014 no popup or sticky button');\r\n      return null;\r\n    }\r\n\r\n    return scenario;\r\n  }\r\n\r\n  function assignDirectNeu5ToProfile() {\r\n    state.activeCode = 'NEU5%';\r\n    mergeProfileProperties({\r\n      active_discount_code: 'NEU5%',\r\n      has_converted_with_code: false\r\n    });\r\n\r\n    var payload = {\r\n      active_discount_code: 'NEU5%',\r\n      discount_code_priority: '1',\r\n      has_converted_with_code: 'false',\r\n      discount_profile_source: 'new_visitor_direct_neu5'\r\n    };\r\n    var email = getShopifyEmail();\r\n    if (email) payload.$email = email;\r\n    pushKlaviyoIdentify(payload);\r\n    log('Direct NEU5% assigned for new visitor (no newsletter form)');\r\n  }\r\n\r\n  function hasOpenProfileDiscountCode(profile) {\r\n    if (!profile) return false;\r\n    var code = profile.active_discount_code ? formatCode(profile.active_discount_code) : '';\r\n    if (!code || !isKnownDiscountCode(normalizeCode(code))) return false;\r\n    if (profile.has_converted_with_code) return false;\r\n    return true;\r\n  }\r\n\r\n  function resolveScenarioFromProfile(profile) {\r\n    var code = profile && profile.active_discount_code ? profile.active_discount_code : '';\r\n    var converted = profile ? profile.has_converted_with_code : false;\r\n    var codeBase = normalizeCode(code);\r\n    var email = resolveEmail(profile);\r\n\r\n    if (code && !converted) {\r\n      if (SCENARIO_2_CODES[codeBase]) {\r\n        if (isNeu5PopupPaused() && isNeu5Code(code)) return null;\r\n        return 'scenario2';\r\n      }\r\n      if (SCENARIO_3_CODES[codeBase]) {\r\n        if (isWinback10PopupPaused() && isWinback10Code(code)) return null;\r\n        return 'scenario3';\r\n      }\r\n    }\r\n\r\n    // New visitor / no open code: never show popup here (NEU5% requires profile update first).\r\n    if (!email && !code) {\r\n      return null;\r\n    }\r\n\r\n    if (email && !code && hasPurchased()) return null;\r\n\r\n    return null;\r\n  }\r\n\r\n  function scenarioFromCode(code) {\r\n    var base = normalizeCode(code);\r\n    if (SCENARIO_3_CODES[base]) return 'scenario3';\r\n    if (SCENARIO_2_CODES[base]) return 'scenario2';\r\n    return null;\r\n  }\r\n\r\n  function getScenarioPriority(scenario) {\r\n    if (scenario === 'scenario3') return 3;\r\n    if (scenario === 'scenario2') return 2;\r\n    if (scenario === 'scenario1') return 1;\r\n    return 0;\r\n  }\r\n\r\n  function resolveScenario(profile, segmentScenario) {\r\n    if (isExcluded(profile)) return null;\r\n\r\n    if (profile && toBool(profile.has_converted_with_code)) {\r\n      log('Purchase completed (has_converted_with_code) \u2014 no popup');\r\n      return null;\r\n    }\r\n\r\n    var profileScenario = resolveScenarioFromProfile(profile);\r\n    var hasProfileCode = hasOpenProfileDiscountCode(profile);\r\n    var hasUrlCode = Boolean(state.urlDiscountCode);\r\n    var resolved = null;\r\n\r\n    if (isNeu5PopupPaused()) {\r\n      var profileCode = profile && profile.active_discount_code ? formatCode(profile.active_discount_code) : '';\r\n      if (isNeu5Code(profileCode) || isNeu5Code(state.urlDiscountCode)) {\r\n        log('NEU5% popup paused \u2014 no popup (switch OFF, profile/URL NEU5% ignored)');\r\n        return null;\r\n      }\r\n      if (!hasProfileCode && !hasUrlCode) {\r\n        log('New visitor discount OFF \u2014 no popup');\r\n        return null;\r\n      }\r\n    }\r\n\r\n    if (isWinback10PopupPaused()) {\r\n      var winbackProfileCode = profile && profile.active_discount_code ? formatCode(profile.active_discount_code) : '';\r\n      if (isWinback10Code(winbackProfileCode) || isWinback10Code(state.urlDiscountCode)) {\r\n        log('WINBACK10% popup OFF \u2014 no popup or sticky button');\r\n        return null;\r\n      }\r\n    }\r\n\r\n    if (segmentScenario && profileScenario) {\r\n      if (getScenarioPriority(profileScenario) >= getScenarioPriority(segmentScenario)) {\r\n        log('Scenario from profile overrides segment gate:', profileScenario, '(segment was', segmentScenario + ')');\r\n        resolved = profileScenario;\r\n      } else {\r\n        log('Scenario from Klaviyo segment gate:', segmentScenario);\r\n        resolved = segmentScenario;\r\n      }\r\n    } else if (segmentScenario) {\r\n      log('Scenario from Klaviyo segment gate:', segmentScenario);\r\n      resolved = segmentScenario;\r\n    } else if (profileScenario) {\r\n      resolved = profileScenario;\r\n    } else if (hasSegmentGateForms()) {\r\n      log('Segment gates configured \u2014 no segment/profile match, no popup');\r\n      resolved = null;\r\n    } else {\r\n      resolved = resolveScenarioFromProfile(profile);\r\n    }\r\n\r\n    return validateNeu5ProfileRequirement(applyCodePopupPauses(resolved, profile), profile);\r\n  }\r\n\r\n  function validateNeu5ProfileRequirement(scenario, profile) {\r\n    if (!scenario || isNeu5PopupPaused()) return scenario;\r\n    if (scenario !== 'scenario2') return scenario;\r\n\r\n    var code = formatCode(\r\n      state.activeCode ||\r\n      (profile && profile.active_discount_code) ||\r\n      state.segmentGateCode ||\r\n      ''\r\n    );\r\n    // This toggle applies to NEU5% only \u2014 other codes pass through unchanged.\r\n    if (!isNeu5Code(code)) return scenario;\r\n\r\n    if (isExistingNeu5Customer(profile)) {\r\n      return scenario;\r\n    }\r\n\r\n    log('NEU5% blocked \u2014 new visitor without NEU5% on Klaviyo profile');\r\n    return null;\r\n  }\r\n\r\n  function walkShadowRoots(scope, visitor) {\r\n    if (!scope || !scope.querySelectorAll) return;\r\n    visitor(scope);\r\n    scope.querySelectorAll('*').forEach(function (el) {\r\n      if (el.shadowRoot) walkShadowRoots(el.shadowRoot, visitor);\r\n    });\r\n  }\r\n\r\n  function extractDiscountCodeFromText(text) {\r\n    var match = String(text || '').match(DISCOUNT_CODE_PATTERN);\r\n    return match ? formatCode(match[0]) : '';\r\n  }\r\n\r\n  function extractDiscountCodeFromScope(scope) {\r\n    if (!scope) return '';\r\n\r\n    var found = '';\r\n\r\n    walkShadowRoots(scope, function (node) {\r\n      if (found) return;\r\n\r\n      var codeNode = node.querySelector('[data-dr-profile-code]');\r\n      if (codeNode) {\r\n        found = formatCode(codeNode.textContent || '');\r\n        return;\r\n      }\r\n\r\n      node.querySelectorAll('[data-dr-profile-code]').forEach(function (el) {\r\n        if (!found) found = formatCode(el.textContent || '');\r\n      });\r\n      if (found) return;\r\n\r\n      node.querySelectorAll('input[type=\"hidden\"][name=\"active_discount_code\"], input[name=\"active_discount_code\"]').forEach(function (input) {\r\n        if (!found && input.value) found = formatCode(input.value);\r\n      });\r\n      if (found) return;\r\n\r\n      node.querySelectorAll('span, p, div, label, strong, b, em, h1, h2, h3, h4, h5, h6').forEach(function (el) {\r\n        if (found) return;\r\n        if (el.children && el.children.length > 0) return;\r\n        var text = (el.textContent || '').replace(/\\s+/g, ' ').trim();\r\n        if (!text || text === '.' || text.length > 32) return;\r\n        var code = extractDiscountCodeFromText(text);\r\n        if (code) found = code;\r\n      });\r\n    });\r\n\r\n    return found;\r\n  }\r\n\r\n  function readProfileFromScope(scope) {\r\n    if (!scope) return null;\r\n\r\n    var codeNode = null;\r\n    var convertedNode = null;\r\n    var aktionNode = null;\r\n    var emailNode = null;\r\n    var scannedCode = '';\r\n\r\n    walkShadowRoots(scope, function (node) {\r\n      if (!codeNode) codeNode = node.querySelector('[data-dr-profile-code]');\r\n      if (!convertedNode) convertedNode = node.querySelector('[data-dr-profile-converted]');\r\n      if (!aktionNode) {\r\n        aktionNode = node.querySelector('[data-dr-profile-aktion]') ||\r\n          node.querySelector('[data-dr-profile-last-aktion-email-click]');\r\n      }\r\n      if (!emailNode) emailNode = node.querySelector('[data-dr-profile-email]');\r\n    });\r\n\r\n    scannedCode = extractDiscountCodeFromScope(scope);\r\n\r\n    if (!codeNode && !convertedNode && !aktionNode && !emailNode && !scannedCode) return null;\r\n\r\n    return {\r\n      email: emailNode ? (emailNode.textContent || '').trim() : getShopifyEmail(),\r\n      active_discount_code: codeNode ? formatCode(codeNode.textContent || '') : scannedCode,\r\n      has_converted_with_code: convertedNode ? toBool((convertedNode.textContent || '').trim()) : false,\r\n      last_aktion_email_click: aktionNode ? (aktionNode.textContent || '').trim() : ''\r\n    };\r\n  }\r\n\r\n  function scenarioNeedsDiscountCode(scenario) {\r\n    return scenario === 'scenario2' || scenario === 'scenario3';\r\n  }\r\n\r\n  function collectProfileFromHosts(hosts) {\r\n    var merged = null;\r\n\r\n    hosts.forEach(function (host) {\r\n      if (!host) return;\r\n      var profile = readProfileFromScope(host);\r\n      if (!profile) return;\r\n\r\n      merged = merged || {\r\n        email: getShopifyEmail(),\r\n        active_discount_code: '',\r\n        has_converted_with_code: false,\r\n        last_aktion_email_click: ''\r\n      };\r\n\r\n      if (profile.email) merged.email = profile.email;\r\n      if (profile.active_discount_code) merged.active_discount_code = profile.active_discount_code;\r\n      if (profile.has_converted_with_code) merged.has_converted_with_code = profile.has_converted_with_code;\r\n      if (profile.last_aktion_email_click) merged.last_aktion_email_click = profile.last_aktion_email_click;\r\n    });\r\n\r\n    return merged;\r\n  }\r\n\r\n  function collectCodesFromHosts(hosts, scenario) {\r\n    var found = [];\r\n\r\n    function remember(code) {\r\n      var formatted = formatCode(code);\r\n      if (!formatted || !isCodeInScenario(formatted, scenario)) return;\r\n      if (found.indexOf(formatted) === -1) found.push(formatted);\r\n    }\r\n\r\n    hosts.forEach(function (host) {\r\n      if (!host) return;\r\n      var profile = readProfileFromScope(host);\r\n      if (profile && profile.active_discount_code) remember(profile.active_discount_code);\r\n      remember(extractDiscountCodeFromScope(host));\r\n    });\r\n\r\n    return found;\r\n  }\r\n\r\n  function readProfileFromMountedForms(segmentScenario) {\r\n    var formId = getProfileProbeFormId();\r\n    var probeSelector = formId ? '.klaviyo-form-' + formId : '';\r\n    var hosts = [];\r\n\r\n    if (profileProbeHost) hosts.push(profileProbeHost);\r\n    if (root.querySelector('[data-dr-profile-probe]')) {\r\n      hosts.push(root.querySelector('[data-dr-profile-probe]'));\r\n    }\r\n    if (probeSelector) {\r\n      document.querySelectorAll(probeSelector).forEach(function (node) {\r\n        if (hosts.indexOf(node) === -1) hosts.push(node);\r\n      });\r\n    }\r\n\r\n    getSegmentGateDefinitions().forEach(function (gate) {\r\n      if (gate.formId) {\r\n        document.querySelectorAll('.klaviyo-form-' + gate.formId).forEach(function (node) {\r\n          if (hosts.indexOf(node) === -1) hosts.push(node);\r\n        });\r\n      }\r\n      if (segmentGateHosts[gate.scenario] && hosts.indexOf(segmentGateHosts[gate.scenario]) === -1) {\r\n        hosts.push(segmentGateHosts[gate.scenario]);\r\n      }\r\n    });\r\n\r\n    if (segmentScenario && segmentGateHosts[segmentScenario]) {\r\n      if (hosts.indexOf(segmentGateHosts[segmentScenario]) === -1) {\r\n        hosts.push(segmentGateHosts[segmentScenario]);\r\n      }\r\n      var gateFormId = getSegmentGateFormId(segmentScenario);\r\n      if (gateFormId) {\r\n        document.querySelectorAll('.klaviyo-form-' + gateFormId).forEach(function (node) {\r\n          if (hosts.indexOf(node) === -1) hosts.push(node);\r\n        });\r\n      }\r\n    }\r\n\r\n    return collectProfileFromHosts(hosts);\r\n  }\r\n\r\n  function getSegmentGateFormId(scenario) {\r\n    var forms = config.form_ids || {};\r\n    if (scenario === 'scenario1') return forms.segment_gate_scenario1 || '';\r\n    if (scenario === 'scenario2') {\r\n      return forms.segment_gate_s2_neu5 ||\r\n        forms.segment_gate_s2_cart5 ||\r\n        forms.segment_gate_scenario2 ||\r\n        '';\r\n    }\r\n    if (scenario === 'scenario3') {\r\n      return forms.segment_gate_s3_danke5 ||\r\n        forms.segment_gate_s3_danke10 ||\r\n        forms.segment_gate_s3_winback10 ||\r\n        forms.segment_gate_scenario3 ||\r\n        '';\r\n    }\r\n    return '';\r\n  }\r\n\r\n  function hasSegmentGateForms() {\r\n    return getSegmentGateDefinitions().length > 0;\r\n  }\r\n\r\n  function hasSegmentGateFor(scenario) {\r\n    return Boolean(getSegmentGateFormId(scenario));\r\n  }\r\n\r\n  function getProfileProbeFormId() {\r\n    var forms = config.form_ids || {};\r\n    return forms.profile_probe || forms.reminder || forms.scenario2 || forms.scenario3 || '';\r\n  }\r\n\r\n  function mountKlaviyoForm(host, formId) {\r\n    if (!host || !formId) return;\r\n    host.innerHTML = '<div class=\"klaviyo-form-' + formId + '\"></div>';\r\n  }\r\n\r\n  function mountSegmentGateForms() {\r\n    var mounted = {};\r\n\r\n    getSegmentGateDefinitions().forEach(function (gate) {\r\n      if (mounted[gate.formId]) return;\r\n      mounted[gate.formId] = true;\r\n\r\n      var host = segmentGateHosts[gate.scenario];\r\n      if (!host) return;\r\n\r\n      var mount = document.createElement('div');\r\n      mount.setAttribute('data-dr-gate-form', gate.formId);\r\n      mount.innerHTML = '<div class=\"klaviyo-form-' + gate.formId + '\"></div>';\r\n      host.appendChild(mount);\r\n    });\r\n  }\r\n\r\n  function isGateFormActive(formId, scenario) {\r\n    if (!formId) return false;\r\n\r\n    // Only the specific form node \u2014 never the whole scenario host\r\n    // (host contains sibling code gates; shared host content caused false positives).\r\n    var roots = [];\r\n    document.querySelectorAll('.klaviyo-form-' + formId).forEach(function (node) {\r\n      roots.push(node);\r\n    });\r\n\r\n    var host = segmentGateHosts[scenario];\r\n    if (host) {\r\n      host.querySelectorAll('.klaviyo-form-' + formId).forEach(function (node) {\r\n        if (roots.indexOf(node) === -1) roots.push(node);\r\n      });\r\n      // Mount wrapper: <div data-dr-gate-form=\"ID\"><div class=\"klaviyo-form-ID\">\r\n      host.querySelectorAll('[data-dr-gate-form=\"' + formId + '\"]').forEach(function (node) {\r\n        if (roots.indexOf(node) === -1) roots.push(node);\r\n      });\r\n    }\r\n\r\n    for (var i = 0; i < roots.length; i++) {\r\n      if (hasKlaviyoFormContent(roots[i])) return true;\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  function resolveCodeFromActiveScenarioGates(scenario) {\r\n    if (!scenario) return '';\r\n\r\n    var best = '';\r\n    var bestScore = -1;\r\n\r\n    for (var i = 0; i < CODE_GATE_ENTRIES.length; i++) {\r\n      var entry = CODE_GATE_ENTRIES[i];\r\n      if (entry.scenario !== scenario) continue;\r\n\r\n      var forms = config.form_ids || {};\r\n      var formId = forms[entry.configKey];\r\n      if (!formId || !isGateFormActive(formId, scenario)) continue;\r\n\r\n      if (!gateActiveSince[formId]) gateActiveSince[formId] = Date.now();\r\n      var code = formatCode(entry.code);\r\n      var score = (gateActiveSince[formId] * 100) + getCodePriority(code);\r\n      if (score > bestScore) {\r\n        bestScore = score;\r\n        best = code;\r\n      }\r\n    }\r\n\r\n    return best;\r\n  }\r\n\r\n  function isGenericGateFormId(formId) {\r\n    if (!formId) return false;\r\n    var forms = config.form_ids || {};\r\n    return formId === forms.segment_gate_scenario1 ||\r\n      formId === forms.segment_gate_scenario2 ||\r\n      formId === forms.segment_gate_scenario3;\r\n  }\r\n\r\n  function resolveCodeForMatch(match, profile) {\r\n    if (!match) return '';\r\n\r\n    var code = match.code ||\r\n      resolveCodeForGateFormId(match.formId) ||\r\n      '';\r\n\r\n    if (!code) code = resolveCodeFromActiveScenarioGates(match.scenario);\r\n\r\n    if (!code && isGenericGateFormId(match.formId)) {\r\n      code = resolveCodeFromActiveScenarioGates(match.scenario);\r\n    }\r\n\r\n    if (!code) code = inferCodeForScenario(match.scenario, profile);\r\n\r\n    return code ? formatCode(code) : '';\r\n  }\r\n\r\n  function inferCodeForScenario(scenario, profile) {\r\n    if (!scenario) return '';\r\n\r\n    var candidates = [];\r\n\r\n    if (profile && profile.active_discount_code) {\r\n      candidates.push(formatCode(profile.active_discount_code));\r\n    }\r\n    if (state.urlDiscountCode) candidates.push(formatCode(state.urlDiscountCode));\r\n    if (state.segmentGateCode) candidates.push(formatCode(state.segmentGateCode));\r\n\r\n    var fromGateForm = resolveCodeForGateFormId(state.matchedGateFormId);\r\n    if (fromGateForm) candidates.push(fromGateForm);\r\n\r\n    var fromActiveGates = resolveCodeFromActiveScenarioGates(scenario);\r\n    if (fromActiveGates) candidates.push(fromActiveGates);\r\n\r\n    var hosts = [];\r\n    if (profileProbeHost) {\r\n      var probeRoot = root.querySelector('[data-dr-profile-probe]');\r\n      if (probeRoot) hosts.push(probeRoot);\r\n    }\r\n    if (segmentGateHosts[scenario]) hosts.push(segmentGateHosts[scenario]);\r\n    if (state.matchedGateFormId) {\r\n      document.querySelectorAll('.klaviyo-form-' + state.matchedGateFormId).forEach(function (node) {\r\n        if (hosts.indexOf(node) === -1) hosts.push(node);\r\n      });\r\n    }\r\n\r\n    candidates = candidates.concat(collectCodesFromHosts(hosts, scenario));\r\n\r\n    return pickScenarioCode(candidates, scenario);\r\n  }\r\n\r\n  function applySegmentGateMatch(match) {\r\n    if (!match) return;\r\n\r\n    var profile = state.profile || emptyProfile();\r\n    var fromGates = getActiveCodeFromGates();\r\n    var gateCode = (fromGates && fromGates.code) ||\r\n      resolveCodeForMatch(match, profile) ||\r\n      '';\r\n\r\n    var profileCode = profile.active_discount_code ? formatCode(profile.active_discount_code) : '';\r\n    var urlCode = state.urlDiscountCode ? formatCode(state.urlDiscountCode) : '';\r\n\r\n    // Prefer live code-specific gate (newest). Do not let a stale higher-priority code stick.\r\n    var winner = gateCode || profileCode || urlCode;\r\n\r\n    state.matchedGateFormId = (fromGates.match && fromGates.match.formId) || match.formId || '';\r\n    state.segmentScenario = winner\r\n      ? (scenarioFromCode(winner) || match.scenario)\r\n      : match.scenario;\r\n    state.segmentGateCode = winner || gateCode || '';\r\n\r\n    if (winner && state.profile) {\r\n      state.profile.active_discount_code = winner;\r\n    }\r\n\r\n    // If URL seed no longer matches live gate/profile, drop it so it cannot re-win later.\r\n    if (state.urlDiscountCode && winner && normalizeCode(state.urlDiscountCode) !== normalizeCode(winner)) {\r\n      state.urlDiscountCode = '';\r\n    }\r\n  }\r\n\r\n  function isSegmentGateActive(scenario) {\r\n    return getSegmentGateDefinitions().some(function (gate) {\r\n      return gate.scenario === scenario && isGateFormActive(gate.formId, gate.scenario);\r\n    });\r\n  }\r\n\r\n  function detectSegmentMatch() {\r\n    if (!hasSegmentGateForms()) return null;\r\n\r\n    // Prefer code-specific gates (dynamic discount code).\r\n    var fromGates = getActiveCodeFromGates();\r\n    if (fromGates.match) return fromGates.match;\r\n\r\n    // Fallback: generic scenario gates (eligibility only \u2014 no code).\r\n    var gates = getSegmentGateDefinitions();\r\n    var best = null;\r\n    var bestScore = -1;\r\n\r\n    for (var i = 0; i < gates.length; i++) {\r\n      if (!gates[i].isGeneric) continue;\r\n      if (!isGateFormActive(gates[i].formId, gates[i].scenario)) continue;\r\n\r\n      var score = getScenarioPriority(gates[i].scenario);\r\n      if (score > bestScore) {\r\n        bestScore = score;\r\n        best = {\r\n          scenario: gates[i].scenario,\r\n          formId: gates[i].formId,\r\n          code: '',\r\n          isGeneric: true\r\n        };\r\n      }\r\n    }\r\n\r\n    return best;\r\n  }\r\n\r\n  function resolveActiveCode(profile, segmentScenario) {\r\n    var fromGates = getActiveCodeFromGates();\r\n    if (fromGates.code) {\r\n      if (isPopupPausedForCode(fromGates.code)) {\r\n        // fall through \u2014 do not use paused codes from gate\r\n      } else {\r\n        state.segmentGateCode = fromGates.code;\r\n        if (fromGates.match) {\r\n          state.matchedGateFormId = fromGates.match.formId;\r\n          state.segmentScenario = fromGates.match.scenario;\r\n        }\r\n        return fromGates.code;\r\n      }\r\n    }\r\n\r\n    var code = pickHighestPriorityCode([\r\n      profile && profile.active_discount_code,\r\n      state.urlDiscountCode,\r\n      state.segmentGateCode,\r\n      resolveCodeForGateFormId(state.matchedGateFormId)\r\n    ]);\r\n    if (code && isPopupPausedForCode(code)) return '';\r\n    if (code) return code;\r\n\r\n    var scenario = segmentScenario || state.segmentScenario;\r\n    if (scenario) {\r\n      code = inferCodeForScenario(scenario, profile);\r\n      if (code && isPopupPausedForCode(code)) return '';\r\n      if (code) return code;\r\n    }\r\n\r\n    return '';\r\n  }\r\n\r\n  function detectSegmentScenario() {\r\n    var match = detectSegmentMatch();\r\n    return match ? match.scenario : null;\r\n  }\r\n\r\n  function hasKlaviyoFormContent(scope) {\r\n    if (!scope) return false;\r\n\r\n    var found = false;\r\n\r\n    walkShadowRoots(scope, function (node) {\r\n      if (found) return;\r\n\r\n      if (node.querySelector('input, button, form, iframe, [role=\"dialog\"]')) {\r\n        found = true;\r\n        return;\r\n      }\r\n\r\n      var text = (node.textContent || '').replace(/\\s+/g, ' ').trim();\r\n      if (text.length > 1 && text !== '.') found = true;\r\n    });\r\n\r\n    return found;\r\n  }\r\n\r\n  function identifyVisitor() {\r\n    var email = getShopifyEmail();\r\n    if (!email) return;\r\n\r\n    pushKlaviyoIdentify({ $email: email });\r\n  }\r\n\r\n  function emptyProfile() {\r\n    return {\r\n      email: getShopifyEmail(),\r\n      active_discount_code: '',\r\n      has_converted_with_code: false,\r\n      last_aktion_email_click: ''\r\n    };\r\n  }\r\n\r\n  function mergeProfileProperties(payload) {\r\n    if (!payload) return false;\r\n\r\n    var code = formatCode(payload.active_discount_code);\r\n    var changed = false;\r\n\r\n    state.profile = state.profile || emptyProfile();\r\n\r\n    if (code && isKnownDiscountCode(normalizeCode(code))) {\r\n      if (state.profile.active_discount_code !== code) {\r\n        state.profile.active_discount_code = code;\r\n        changed = true;\r\n      }\r\n    }\r\n\r\n    if (payload.has_converted_with_code !== undefined) {\r\n      var converted = toBool(payload.has_converted_with_code);\r\n      if (state.profile.has_converted_with_code !== converted) {\r\n        state.profile.has_converted_with_code = converted;\r\n        changed = true;\r\n      }\r\n    }\r\n\r\n    if (payload.$email || payload.email) {\r\n      var email = String(payload.$email || payload.email || '').trim();\r\n      if (email && state.profile.email !== email) {\r\n        state.profile.email = email;\r\n        changed = true;\r\n      }\r\n    }\r\n\r\n    return changed;\r\n  }\r\n\r\n  function refreshDiscountReminder(source) {\r\n    if (!state.profileLoaded || !state.eligibilitySettled) return;\r\n\r\n    refreshDiscountReminder.pendingSource = source || refreshDiscountReminder.pendingSource || 'unknown';\r\n    if (refreshDiscountReminder.timer) return;\r\n\r\n    refreshDiscountReminder.timer = window.setTimeout(function () {\r\n      refreshDiscountReminder.timer = null;\r\n      doRefreshDiscountReminder(refreshDiscountReminder.pendingSource);\r\n      refreshDiscountReminder.pendingSource = null;\r\n    }, 400);\r\n  }\r\n\r\n  function doRefreshDiscountReminder(source) {\r\n    if (!state.profileLoaded || !state.eligibilitySettled) return;\r\n    syncFromActiveGates(source || 'refresh');\r\n    updateScrollVisibility();\r\n  }\r\n\r\n  function installProfileListeners() {\r\n    // Only react to our custom event \u2014 do NOT hook _learnq.push\r\n    // (Klaviyo fires identify/track continuously and that caused refresh loops).\r\n    if (window.__DR_PROFILE_LISTENER__) return;\r\n    window.__DR_PROFILE_LISTENER__ = true;\r\n\r\n    window.addEventListener('dr:profile-update', function (event) {\r\n      var detail = (event && event.detail) || {};\r\n      var prevCode = state.activeCode || (state.profile && state.profile.active_discount_code) || '';\r\n      if (!mergeProfileProperties(detail)) return;\r\n\r\n      var nextCode = formatCode(detail.active_discount_code || (state.profile && state.profile.active_discount_code) || '');\r\n      if (nextCode && normalizeCode(nextCode) !== normalizeCode(prevCode)) {\r\n        state.urlDiscountCode = '';\r\n        state.segmentGateCode = '';\r\n        gateActiveSince = {};\r\n        remountCodeSpecificGates('profile-update');\r\n        window.setTimeout(function () {\r\n          syncFromActiveGates('profile-update');\r\n          refreshDiscountReminder('profile-update');\r\n        }, 1200);\r\n        return;\r\n      }\r\n\r\n      window.setTimeout(function () { refreshDiscountReminder('profile-update'); }, 200);\r\n    });\r\n  }\r\n\r\n  function seedProfileFromProbe() {\r\n    var probeCodeNode = root.querySelector('[data-dr-profile-code]');\r\n    if (!probeCodeNode) return;\r\n\r\n    var probeCode = formatCode((probeCodeNode.textContent || '').trim());\r\n    if (!probeCode || !isKnownDiscountCode(normalizeCode(probeCode))) return;\r\n\r\n    mergeProfileProperties({ active_discount_code: probeCode });\r\n  }\r\n\r\n  function loadEligibility(callback) {\r\n    mountSegmentGateForms();\r\n\r\n    var formId = getProfileProbeFormId();\r\n    if (formId && profileProbeHost) {\r\n      mountKlaviyoForm(profileProbeHost, formId);\r\n    }\r\n\r\n    var pollTimer = null;\r\n    var resolved = false;\r\n    var pollCount = 0;\r\n\r\n    function finish(profile, segmentScenario) {\r\n      if (resolved) return;\r\n      resolved = true;\r\n      state.eligibilitySettled = true;\r\n      if (pollTimer) {\r\n        window.clearTimeout(pollTimer);\r\n        pollTimer = null;\r\n      }\r\n      callback(profile || emptyProfile(), segmentScenario || null);\r\n    }\r\n\r\n    function readProbeProfile() {\r\n      return readProfileFromMountedForms(detectSegmentScenario());\r\n    }\r\n\r\n    // Timer-only polling \u2014 no MutationObserver (DOM mutations caused infinite loops).\r\n    function poll() {\r\n      if (resolved) return;\r\n\r\n      pollCount += 1;\r\n      var match = detectSegmentMatch();\r\n      var fromGates = getActiveCodeFromGates();\r\n      if (match) applySegmentGateMatch(match);\r\n\r\n      var profile = readProbeProfile();\r\n      if (profile && profile.active_discount_code) {\r\n        mergeProfileProperties(profile);\r\n      }\r\n\r\n      // Prefer code-specific gate (has discount code) \u2014 this is the dynamic update path.\r\n      if (fromGates.code) {\r\n        log('Code-specific gate active:', fromGates.code);\r\n        return finish(profile, fromGates.match ? fromGates.match.scenario : (match && match.scenario));\r\n      }\r\n\r\n      // Known profile/URL code \u2192 show that scenario immediately (dynamic).\r\n      var knownCode = pickHighestPriorityCode([\r\n        profile && profile.active_discount_code,\r\n        state.urlDiscountCode,\r\n        state.profile && state.profile.active_discount_code\r\n      ]);\r\n      if (knownCode) {\r\n        var knownScenario = scenarioFromCode(knownCode);\r\n        log('Using known profile/URL code:', knownCode);\r\n        state.segmentGateCode = knownCode;\r\n        return finish(profile, knownScenario || (match && match.scenario) || null);\r\n      }\r\n\r\n      // Generic gate only \u2014 keep polling for code-specific gate (segment may still be updating).\r\n      if (match && match.isGeneric && pollCount < PROFILE_POLL_MAX) {\r\n        pollTimer = window.setTimeout(poll, PROFILE_POLL_MS);\r\n        return;\r\n      }\r\n\r\n      if (match && !match.isGeneric) {\r\n        log('Segment gate matched:', match.scenario, 'Code:', match.code || '(pending)');\r\n        return finish(profile, match.scenario);\r\n      }\r\n\r\n      if (profile && profile.active_discount_code && !hasSegmentGateForms()) {\r\n        log('Profile loaded from Klaviyo probe (no segment gates configured):', profile);\r\n        return finish(profile, null);\r\n      }\r\n\r\n      if (pollCount >= PROFILE_POLL_MAX) {\r\n        if (match) {\r\n          log('Eligibility poll done with generic gate only:', match.scenario);\r\n          return finish(profile, match.scenario);\r\n        }\r\n        if (isNeu5ReminderEnabled() && (profileHasOpenNeu5Code(profile) || hasActiveNeu5GateSignal())) {\r\n          log('Eligibility poll done \u2014 existing NEU5% customer');\r\n          return finish(profile, 'scenario2');\r\n        }\r\n        log('Eligibility poll done \u2014 no segment gate match (v4)');\r\n        return finish(profile, null);\r\n      }\r\n\r\n      pollTimer = window.setTimeout(poll, PROFILE_POLL_MS);\r\n    }\r\n\r\n    poll();\r\n  }\r\n\r\n  function getCopy(scenario, code) {\r\n    var codeBase = normalizeCode(code || state.activeCode || '');\r\n    var byCode = config.copy_by_code || {};\r\n    if (codeBase && byCode[codeBase]) return byCode[codeBase];\r\n\r\n    var legacy = config.copy || {};\r\n    if (scenario && legacy[scenario]) return legacy[scenario];\r\n    return {};\r\n  }\r\n\r\n  function interpolate(text, code) {\r\n    return String(text || '').replace(/\\{\\{\\s*active_discount_code\\s*\\}\\}/g, code || '');\r\n  }\r\n\r\n  function getFormIdForScenario(scenario) {\r\n    var forms = config.form_ids || {};\r\n    if (scenario === 'scenario1') return forms.scenario1 || '';\r\n    if (scenario === 'scenario2') return forms.scenario2 || forms.reminder || '';\r\n    if (scenario === 'scenario3') return forms.scenario3 || forms.reminder || '';\r\n    return '';\r\n  }\r\n\r\n  function getScenario1FormId() {\r\n    return (config.form_ids && config.form_ids.scenario1) || 'UFAmFG';\r\n  }\r\n\r\n  function getCtaLink(copy) {\r\n    var link = copy && copy.cta_link ? String(copy.cta_link).trim() : '';\r\n    return link || config.shop_url || '/';\r\n  }\r\n\r\n  function applyCopy() {\r\n    var copy = getCopy(state.scenario, state.activeCode);\r\n    if (!copy) return;\r\n\r\n    var directNeu5 = state.scenario === 'scenario1' && isNewVisitorDirectNeu5();\r\n    if (directNeu5 && !state.activeCode) {\r\n      state.activeCode = 'NEU5%';\r\n    }\r\n\r\n    var code = state.activeCode || '';\r\n    var stickyText = interpolate(copy.sticky || '', code);\r\n    // Never show a wrong hardcoded code if we have no active code yet.\r\n    if (!code && /NEU5|CART5|DANKE5|DANKE10|WINBACK10/i.test(stickyText)) {\r\n      stickyText = (copy.sticky || '')\r\n        .replace(/\\{\\{\\s*active_discount_code\\s*\\}\\}/g, '')\r\n        .replace(/\\b(NEU5|CART5|DANKE5|DANKE10|WINBACK10)%?\\b/gi, '')\r\n        .replace(/\\s{2,}/g, ' ')\r\n        .trim() || 'Dein Rabatt wartet!';\r\n    }\r\n\r\n    if (stickyBtn) stickyBtn.textContent = stickyText;\r\n    if (headlineEl) headlineEl.textContent = interpolate(copy.headline || '', code);\r\n    if (bodyEl) bodyEl.textContent = interpolate(copy.body || '', code);\r\n\r\n    // Direct NEU5% mode: theme copy + code, never mount newsletter form.\r\n    var useKlaviyoFormOnly = !directNeu5 && Boolean(getFormIdForScenario(state.scenario));\r\n    if (customCopyView) {\r\n      customCopyView.hidden = useKlaviyoFormOnly && state.scenario !== 'scenario1';\r\n      if (directNeu5) customCopyView.hidden = false;\r\n    }\r\n\r\n    if (codeWrap) {\r\n      if ((!directNeu5 && state.scenario === 'scenario1') || useKlaviyoFormOnly || !code) {\r\n        codeWrap.hidden = true;\r\n        if (codeEl) codeEl.textContent = '';\r\n      } else {\r\n        codeWrap.hidden = false;\r\n        if (codeEl) codeEl.textContent = code;\r\n        var codeLabel = root.querySelector('[data-dr-code-label]');\r\n        if (codeLabel) codeLabel.textContent = interpolate(copy.code_label || 'Code:', code);\r\n        var conditionEl = root.querySelector('[data-dr-condition]');\r\n        if (conditionEl) {\r\n          if (copy.condition) {\r\n            conditionEl.textContent = copy.condition;\r\n            conditionEl.hidden = false;\r\n          } else {\r\n            conditionEl.hidden = true;\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (ctaBtn) {\r\n      ctaBtn.textContent = copy.cta || 'Weiter';\r\n      if ((!directNeu5 && state.scenario === 'scenario1') || useKlaviyoFormOnly) {\r\n        ctaBtn.hidden = true;\r\n      } else {\r\n        ctaBtn.hidden = false;\r\n        var ctaLink = getCtaLink(copy);\r\n        ctaBtn.onclick = function () {\r\n          window.location.href = ctaLink;\r\n        };\r\n      }\r\n    }\r\n\r\n    if (emailFormView) {\r\n      emailFormView.hidden = directNeu5 || (state.scenario !== 'scenario1' && !useKlaviyoFormOnly);\r\n    }\r\n    if (successEl) successEl.hidden = true;\r\n\r\n    if (!directNeu5 && (state.scenario === 'scenario1' || useKlaviyoFormOnly)) {\r\n      mountKlaviyoForm(formHost, getFormIdForScenario(state.scenario));\r\n    } else if (formHost) {\r\n      formHost.innerHTML = '';\r\n    }\r\n  }\r\n\r\n  function copyToClipboard(text) {\r\n    if (!text) return;\r\n    if (navigator.clipboard && navigator.clipboard.writeText) {\r\n      navigator.clipboard.writeText(text).catch(function () {});\r\n      return;\r\n    }\r\n    var input = document.createElement('input');\r\n    input.value = text;\r\n    document.body.appendChild(input);\r\n    input.select();\r\n    try { document.execCommand('copy'); } catch (err) {}\r\n    document.body.removeChild(input);\r\n  }\r\n\r\n  /** After newsletter signup: switch to NEU5% reminder (no separate success screen). */\r\n  function showSuccessState() {\r\n    state.scenario = 'scenario2';\r\n    state.segmentScenario = 'scenario2';\r\n    state.activeCode = 'NEU5%';\r\n    if (state.profile) {\r\n      state.profile.active_discount_code = 'NEU5%';\r\n      state.profile.has_converted_with_code = false;\r\n    }\r\n    if (successEl) successEl.hidden = true;\r\n    if (emailFormView) emailFormView.hidden = true;\r\n    if (customCopyView) customCopyView.hidden = false;\r\n    applyCopy();\r\n    copyToClipboard('NEU5%');\r\n  }\r\n\r\n  function lockScroll() {\r\n    state.lockedScrollY = window.scrollY || document.documentElement.scrollTop;\r\n    document.body.style.position = 'fixed';\r\n    document.body.style.top = '-' + state.lockedScrollY + 'px';\r\n    document.body.style.left = '0';\r\n    document.body.style.right = '0';\r\n    document.body.style.width = '100%';\r\n  }\r\n\r\n  function unlockScroll() {\r\n    document.body.style.position = '';\r\n    document.body.style.top = '';\r\n    document.body.style.left = '';\r\n    document.body.style.right = '';\r\n    document.body.style.width = '';\r\n    window.scrollTo(0, state.lockedScrollY);\r\n  }\r\n\r\n  function refreshActiveCode() {\r\n    var code = resolveActiveCode(state.profile, state.segmentScenario);\r\n    if (!code) return false;\r\n    state.activeCode = code;\r\n    applyCopy();\r\n    return true;\r\n  }\r\n\r\n  function scheduleActiveCodeRefresh() {\r\n    if (!scenarioNeedsDiscountCode(state.scenario)) return;\r\n    if (state.activeCode) return;\r\n\r\n    var delays = [800, 2000, 4000, 8000];\r\n    delays.forEach(function (delay) {\r\n      window.setTimeout(function () {\r\n        if (state.activeCode) return;\r\n        syncFromActiveGates('code-retry');\r\n      }, delay);\r\n    });\r\n  }\r\n\r\n  /** Re-read active code-specific gates and update popup if discount code changed. */\r\n  function syncFromActiveGates(source) {\r\n    var fromGates = getActiveCodeFromGates();\r\n\r\n    // Stale Klaviyo embeds can leave both DANKE10% + DANKE5% \"active\". Remount to force retarget.\r\n    if (fromGates.activeCount > 1 && remountCodeSpecificGates(source || 'multi-gate')) {\r\n      window.setTimeout(function () {\r\n        syncFromActiveGates((source || 'gates') + '-after-remount');\r\n      }, 1500);\r\n      return false;\r\n    }\r\n\r\n    var nextCode = fromGates.code ||\r\n      formatCode((state.profile && state.profile.active_discount_code) || '') ||\r\n      formatCode(state.urlDiscountCode || '');\r\n\r\n    if (!nextCode && !fromGates.match) return false;\r\n\r\n    if (fromGates.match) {\r\n      state.matchedGateFormId = fromGates.match.formId;\r\n      state.segmentScenario = fromGates.match.scenario;\r\n    }\r\n\r\n    if (nextCode) {\r\n      state.segmentGateCode = nextCode;\r\n      if (state.profile) state.profile.active_discount_code = nextCode;\r\n      if (state.urlDiscountCode && normalizeCode(state.urlDiscountCode) !== normalizeCode(nextCode)) {\r\n        state.urlDiscountCode = '';\r\n      }\r\n    }\r\n\r\n    var prevCode = state.activeCode;\r\n    var prevScenario = state.scenario;\r\n\r\n    state.scenario = resolveScenario(state.profile, state.segmentScenario);\r\n    state.activeCode = resolveActiveCode(state.profile, state.segmentScenario);\r\n\r\n    if (!state.scenario) {\r\n      root.hidden = true;\r\n      state.ready = false;\r\n      if (stickyWrap) stickyWrap.classList.remove('is-visible');\r\n      if (state.isOpen) closeFlyout();\r\n      return false;\r\n    }\r\n\r\n    root.hidden = false;\r\n    state.ready = true;\r\n\r\n    if (prevCode !== state.activeCode || prevScenario !== state.scenario) {\r\n      applyCopy();\r\n      log('Synced from', source || 'gates', '\u2192', state.activeCode, state.scenario);\r\n    }\r\n    return Boolean(state.activeCode);\r\n  }\r\n\r\n  function startDynamicGateSync() {\r\n    if (startDynamicGateSync.started) return;\r\n    startDynamicGateSync.started = true;\r\n\r\n    // Re-checks after Klaviyo segment membership updates (e.g. DANKE10% \u2192 DANKE5%).\r\n    var delays = [3000, 8000, 15000, 30000, 60000];\r\n    delays.forEach(function (delay) {\r\n      window.setTimeout(function () {\r\n        syncFromActiveGates('segment-sync');\r\n      }, delay);\r\n    });\r\n  }\r\n\r\n  function openFlyout() {\r\n    if (state.isOpen || !flyout) return;\r\n    applySegmentGateMatch(detectSegmentMatch());\r\n    refreshActiveCode();\r\n    state.isOpen = true;\r\n    state.stickyDismissed = true;\r\n    lockScroll();\r\n    root.classList.add('is-open');\r\n    flyout.setAttribute('aria-hidden', 'false');\r\n    if (backdrop) backdrop.hidden = false;\r\n    if (closeBtn) closeBtn.focus();\r\n  }\r\n\r\n  function closeFlyout() {\r\n    if (!state.isOpen || !flyout) return;\r\n    state.isOpen = false;\r\n    root.classList.remove('is-open');\r\n    flyout.setAttribute('aria-hidden', 'true');\r\n    if (backdrop) backdrop.hidden = true;\r\n    unlockScroll();\r\n  }\r\n\r\n  function revealSticky() {\r\n    if (!stickyWrap || state.stickyDismissed || !state.ready) return;\r\n    stickyWrap.classList.add('is-visible');\r\n  }\r\n\r\n  function updateScrollVisibility() {\r\n    var docHeight = document.documentElement.scrollHeight - window.innerHeight;\r\n    if (docHeight <= 0) return;\r\n    if ((window.scrollY / docHeight) >= SCROLL_THRESHOLD) revealSticky();\r\n  }\r\n\r\n  function bindEvents() {\r\n    if (stickyBtn) {\r\n      stickyBtn.addEventListener('click', function (event) {\r\n        event.preventDefault();\r\n        openFlyout();\r\n      });\r\n    }\r\n\r\n    if (closeBtn) closeBtn.addEventListener('click', closeFlyout);\r\n    if (backdrop) backdrop.addEventListener('click', closeFlyout);\r\n\r\n    document.addEventListener('keydown', function (event) {\r\n      if (event.key === 'Escape' && state.isOpen) closeFlyout();\r\n    });\r\n\r\n    window.addEventListener('scroll', updateScrollVisibility, { passive: true });\r\n    window.addEventListener('resize', updateScrollVisibility);\r\n\r\n    window.addEventListener('klaviyoForms', function (event) {\r\n      var detail = event.detail || {};\r\n      var scenario1FormId = getScenario1FormId();\r\n      var eventFormId = String(detail.formId || detail.form_id || '').replace('klaviyo-form-', '');\r\n\r\n      if (eventFormId && eventFormId !== scenario1FormId) return;\r\n\r\n      if (detail.type === 'success' || detail.type === 'redirectedToUrl') {\r\n        if (isNeu5PopupPaused()) return;\r\n        state.profile = Object.assign({}, state.profile || {}, {\r\n          active_discount_code: 'NEU5%',\r\n          has_converted_with_code: false\r\n        });\r\n        state.activeCode = 'NEU5%';\r\n        state.segmentScenario = 'scenario2';\r\n        if (reminderEnabled && state.scenario === 'scenario1') showSuccessState();\r\n      }\r\n    });\r\n  }\r\n\r\n  function scheduleNeu5ProfileRetry() {\r\n    if (!isNeu5ReminderEnabled() || state.scenario) return;\r\n\r\n    var delays = [1500, 4000, 8000, 15000, 25000];\r\n    delays.forEach(function (delay) {\r\n      window.setTimeout(function () {\r\n        if (!isNeu5ReminderEnabled() || state.scenario) return;\r\n\r\n        var profile = readProfileFromMountedForms(state.segmentScenario);\r\n        if (profile) mergeProfileProperties(profile);\r\n        syncFromActiveGates('neu5-profile-retry');\r\n\r\n        if (!state.scenario && isExistingNeu5Customer(state.profile || profile)) {\r\n          state.scenario = resolveScenario(state.profile, state.segmentScenario);\r\n          state.activeCode = resolveActiveCode(state.profile, state.segmentScenario);\r\n\r\n          if (state.scenario) {\r\n            root.hidden = false;\r\n            state.ready = true;\r\n            applyCopy();\r\n            updateScrollVisibility();\r\n            log('NEU5% popup unlocked after profile retry');\r\n          }\r\n        }\r\n      }, delay);\r\n    });\r\n  }\r\n\r\n  function bootstrapUI() {\r\n    if (!reminderEnabled) return;\r\n\r\n    state.variant = getAbVariant();\r\n    syncFromActiveGates('bootstrap');\r\n    state.scenario = resolveScenario(state.profile, state.segmentScenario);\r\n    state.activeCode = resolveActiveCode(state.profile, state.segmentScenario);\r\n\r\n    log('Profile:', state.profile, 'Segment:', state.segmentScenario, 'Scenario:', state.scenario, 'Variant:', state.variant, 'Code:', state.activeCode);\r\n\r\n    if (!state.scenario) {\r\n      root.hidden = true;\r\n      state.ready = false;\r\n      scheduleNeu5ProfileRetry();\r\n      return;\r\n    }\r\n\r\n    root.hidden = false;\r\n    applyCopy();\r\n    state.ready = true;\r\n    scheduleActiveCodeRefresh();\r\n    startDynamicGateSync();\r\n    updateScrollVisibility();\r\n  }\r\n\r\n  function init() {\r\n    if (window.__DR_INITIALIZED__) return;\r\n    window.__DR_INITIALIZED__ = true;\r\n\r\n    console.log(LOG, 'loaded', DR_VERSION);\r\n    installProfileListeners();\r\n    seedProfileFromProbe();\r\n    bindEvents();\r\n    identifyVisitor();\r\n    applyUrlDiscountParam();\r\n\r\n    // Public helper: force popup to a code (testing / theme integrations).\r\n    window.__DR_SET_DISCOUNT_CODE__ = function (code) {\r\n      var formatted = formatCode(code);\r\n      if (!isKnownDiscountCode(normalizeCode(formatted))) return false;\r\n      if (isPopupPausedForCode(formatted)) return false;\r\n      mergeProfileProperties({ active_discount_code: formatted });\r\n      state.urlDiscountCode = formatted;\r\n      state.segmentGateCode = formatted;\r\n      state.segmentScenario = scenarioFromCode(formatted);\r\n      state.profileLoaded = true;\r\n      state.eligibilitySettled = true;\r\n      state.scenario = resolveScenario(state.profile, state.segmentScenario);\r\n      state.activeCode = formatted;\r\n      root.hidden = false;\r\n      state.ready = true;\r\n      applyCopy();\r\n      log('Forced code via __DR_SET_DISCOUNT_CODE__:', formatted);\r\n      return true;\r\n    };\r\n\r\n    if (!reminderEnabled) return;\r\n\r\n    loadEligibility(function (profile, segmentScenario) {\r\n      state.profile = profile;\r\n      state.segmentScenario = segmentScenario;\r\n      state.profileLoaded = true;\r\n      bootstrapUI();\r\n    });\r\n  }\r\n\r\n  init();\r\n})();\r\n"],
  "mappings": "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",
  "names": []
}
