{
  "version": 3,
  "sources": ["/cdn/shop/t/111/assets/mma-scratch-popup-control.js?mma_scratch_rev=20260819_capture_ab_control"],
  "sourcesContent": ["/**\n * MMA Warehouse custom scratch popup.\n * Preview: ?mma_scratch_popup=1&mma_scratch_popup_mock=1\n *\n * This is a custom onsite popup, not a Klaviyo form-renderer form. In live\n * mode, it must call couponClaimEndpoint so the server can generate/reserve\n * the unique code and write the same code to Klaviyo.\n */\n(function() {\n  'use strict';\n\n  var CHECKOUT_EMAIL_KEY = 'mma_capture_checkout_email';\n\n  var SHARED_CAPTURE_EVENT_MAP = {\n    mma_scratch_popup_armed: 'mma_capture_eligible',\n    mma_scratch_popup_open: 'mma_capture_open',\n    mma_scratch_popup_close: 'mma_capture_close',\n    mma_scratch_popup_shuffle_start: 'mma_capture_engage',\n    mma_scratch_popup_email_view: 'mma_capture_email_view',\n    mma_scratch_popup_email_focus: 'mma_capture_email_focus',\n    mma_scratch_popup_email_submit: 'mma_capture_email_submit',\n    mma_scratch_popup_email_success: 'mma_capture_email_success',\n    mma_scratch_popup_success_view: 'mma_capture_success_view',\n    mma_scratch_popup_shop_click: 'mma_capture_shop_click'\n  };\n\n  var RYBBIT_CAPTURE_EVENT_MAP = {\n    mma_capture_open: 'email_capture_open',\n    mma_capture_email_submit: 'email_capture_submit',\n    mma_capture_email_success: 'email_collected'\n  };\n\n  var DEFAULT_CONFIG = {\n    enabled: false,\n    previewParam: 'mma_scratch_popup',\n    mockSubmitParam: 'mma_scratch_popup_mock',\n    liveSubmitParam: 'mma_scratch_popup_live',\n    resetParam: 'mma_scratch_popup_reset',\n    companyId: 'hkAYkC',\n    listId: 'RbeYBs',\n    revision: '2026-08-03-pdp-no-capture-window',\n    popupId: 'mma_scratch_randomizer_202607',\n    popupName: 'MMA Warehouse Randomized Scratch Popup - July 2026',\n    source: 'MMA Warehouse mystery scratch popup',\n    popupTestName: '2026Q3_scratch_randomizer',\n    captureExperience: 'scratch_randomizer_control',\n    captureExperimentName: 'capture_challenger_2026q3',\n    captureExperimentVariant: 'scratch_control',\n    captureAllocationVersion: 'v1-50-50',\n    captureAssignmentId: '',\n    offerCode: 'scratch_15_off',\n    offerType: 'D15',\n    popupOfferVariant: 'D15',\n    couponName: '15_dollars_off',\n    couponCodePrefix: '15O',\n    couponClaimEndpoint: '',\n    requiresCouponClaimEndpoint: true,\n    mockCode: '15O-PREVIEW',\n    offerLabel: '$15 off $100+',\n    discountCode: '',\n    discountLabel: '$15 off $100+',\n    discountValue: 15,\n    discountType: 'fixed_amount',\n    discountCurrency: 'USD',\n    minimumSubtotal: 100,\n    assignmentTokenTtlSeconds: 1800,\n    assignArmAction: 'assign_arm',\n    claimAction: 'claim_offer',\n    offers: [\n      {\n        arm: 'D15',\n        offerCode: 'scratch_15_off',\n        offerType: 'D15',\n        popupOfferVariant: 'D15',\n        couponName: '15_dollars_off',\n        couponCodePrefix: '15O',\n        mockCode: '15O-PREVIEW',\n        offerLabel: '$15 off $100+',\n        rewardLabel: '$15 off',\n        rewardAmount: '$15 OFF',\n        rewardText: '',\n        discountValue: 15,\n        discountType: 'fixed_amount',\n        discountCurrency: 'USD',\n        armWeight: 47.5,\n        successValueCopy: 'your $15 code',\n        shortLabel: '$15 off'\n      },\n      {\n        arm: 'P10',\n        offerCode: 'scratch_10_percent_off',\n        offerType: 'P10',\n        popupOfferVariant: 'P10',\n        couponName: '10_percent_off',\n        couponCodePrefix: '10O',\n        mockCode: '10O-PREVIEW',\n        offerLabel: '10% off $100+',\n        rewardLabel: '10% off',\n        rewardAmount: '10% OFF',\n        rewardText: '',\n        discountValue: 10,\n        discountType: 'percentage',\n        discountCurrency: 'USD',\n        armWeight: 47.5,\n        successValueCopy: 'your 10% code',\n        shortLabel: '10% off'\n      },\n      {\n        arm: 'FSH',\n        offerCode: 'scratch_free_shorts',\n        offerType: 'FREE_SHORTS',\n        popupOfferVariant: 'FREE_SHORTS',\n        couponName: 'free_shorts',\n        couponCodePrefix: 'SHO',\n        mockCode: 'SHO-PREVIEW',\n        offerLabel: 'Free shorts $100+',\n        rewardLabel: 'Free shorts',\n        rewardAmount: 'FREE SHORTS',\n        rewardText: '',\n        discountValue: 100,\n        discountType: 'free_product',\n        discountCurrency: 'USD',\n        armWeight: 5,\n        successValueCopy: 'your free-shorts code',\n        shortLabel: 'Free shorts',\n        shortsCollectionUrl: '/collections/shorts'\n      }\n    ],\n    showCodeOnSuccess: true,\n    autoApplyDiscount: true,\n    redirectPath: '/collections/boxing-gloves',\n    pageType: '',\n    countryIso: '',\n    allowedCountries: [],\n    geoTraceEnabled: false,\n    geoTraceEndpoint: '/cdn-cgi/trace',\n    geoTraceTimeoutMs: 1200,\n    failClosedOnGeoUnknown: false,\n    allowedPageTypes: ['index', 'collection', 'product'],\n    pageTypeSuppressions: {},\n    customerKnownSubscriber: false,\n    pageContext: {},\n    showDelayMs: 13000,\n    previewDelayMs: 300,\n    cooldownDays: 2,\n    sessionSuppressAfterOpen: true,\n    cartAttributionEnabled: true,\n    exitIntentEnabled: true,\n    blockGloveProductPages: false,\n    isGloveProductPage: false,\n    suppressKnownKlaviyoProfiles: true,\n    klaviyoIdentityWaitMs: 2500,\n    ga4TrackingEnabled: true,\n    ga4MeasurementId: '',\n    ga4DebugMode: false,\n    scratchRevealThreshold: 0.34,\n    scratchRadius: 28,\n    shuffleDurationMs: 1900,\n    coverScratchText: 'SCRATCH TO REVEAL',\n    copy: {}\n  };\n\n  var GA4_EVENT_MAP = {\n    mma_scratch_popup_armed: 'scratch_popup_armed',\n    mma_scratch_popup_open: 'scratch_popup_open',\n    mma_scratch_popup_close: 'scratch_popup_close',\n    mma_scratch_popup_shuffle_start: 'scratch_popup_shuffle_start',\n    mma_scratch_popup_suppressed: 'scratch_popup_suppressed',\n    mma_scratch_popup_reveal: 'scratch_popup_reveal',\n    mma_scratch_popup_claim_click: 'scratch_popup_claim_click',\n    mma_scratch_popup_email_view: 'scratch_popup_email_view',\n    mma_scratch_popup_email_focus: 'scratch_popup_email_focus',\n    mma_scratch_popup_email_input_start: 'scratch_email_input_start',\n    mma_scratch_popup_email_submit: 'scratch_popup_email_submit',\n    mma_scratch_popup_email_success: 'scratch_popup_email_success',\n    mma_scratch_popup_email_invalid: 'scratch_popup_email_invalid',\n    mma_scratch_popup_email_error: 'scratch_popup_email_error',\n    mma_scratch_popup_client_klaviyo_error: 'scratch_popup_klaviyo_error',\n    mma_scratch_popup_cart_attribution_success: 'scratch_cart_attr_success',\n    mma_scratch_popup_cart_attribution_error: 'scratch_cart_attr_error',\n    mma_scratch_popup_cart_attribution_skipped: 'scratch_cart_attr_skipped',\n    mma_scratch_popup_discount_prime: 'scratch_popup_discount_prime',\n    mma_scratch_popup_success_view: 'scratch_popup_success_view',\n    mma_scratch_popup_variant_select: 'scratch_popup_variant_select',\n    mma_scratch_popup_add_to_cart_click: 'scratch_popup_atc_click',\n    mma_scratch_popup_add_to_cart_success: 'scratch_popup_atc_success',\n    mma_scratch_popup_add_to_cart_error: 'scratch_popup_atc_error',\n    mma_scratch_popup_cart_drawer_open: 'scratch_popup_cart_drawer_open',\n    mma_scratch_popup_copy_code: 'scratch_popup_copy_code',\n    mma_scratch_popup_shop_click: 'scratch_popup_shop_click',\n    generate_lead: 'generate_lead'\n  };\n\n  var COPY = {\n    closeAria: 'Close offer',\n    scratchCanvasAria: 'Scratch to reveal your MMA Warehouse offer',\n    scratchTitle: 'EVERY CARD WINS',\n    scratchCopy: 'Pick a card. We\\'ll shuffle them, then you scratch to reveal yours.',\n    scratchReadyTitle: 'SCRATCH TO REVEAL',\n    scratchReadyCopy: 'Scratch the gold card. Your reward is underneath.',\n    showcaseKicker: 'Possible rewards',\n    showcaseCopy: 'Rewards unlock at $100+.',\n    shuffleCta: 'Shuffle my card',\n    shuffleLoading: 'Shuffling...',\n    shuffleText: 'Shuffling your card...',\n    prizeSmall: 'Your code is worth',\n    prizeAmount: '$15 OFF',\n    prizeText: '',\n    hintBefore: 'Scratch to reveal it.',\n    hintWhile: 'Keep scratching.',\n    hintContinue: 'Scratch to reveal it.',\n    hintRevealed: '',\n    claimCta: 'Claim this code',\n    fallbackTitle: 'Reveal offer',\n    fallbackSub: 'Tap here if scratching is not working on this device.',\n    emailTitle: 'SEND ME MY CODE',\n    emailCopy: 'Enter your email. We will send the exact code and save it for checkout.',\n    emailLabel: 'Email address',\n    emailPlaceholder: 'you@example.com',\n    emailCta: 'Send my code',\n    emailLoading: 'Claiming...',\n    emailInvalid: 'Enter a valid email address.',\n    emailError: 'Something did not go through. Try again in a few seconds.',\n    emailLegal: '',\n    successTitle: 'YOUR CODE IS READY',\n    successCopy: 'It is in your inbox. Copy it now or add gear and use it at checkout.',\n    successTerms: 'One use per customer. $100+ cart required. Eligible product offers can combine. Shipping promos excluded.',\n    codePrefix: 'Code',\n    copyCode: 'Copy code',\n    copiedCode: 'Copied',\n    successExpiryPrefix: 'Code expires',\n    successExpiryFallback: 'Code expires 2 days after signup.',\n    productNextTitle: 'Finish the cart',\n    productNextCopy: 'Pick the exact option and add it now. Your code is ready for checkout.',\n    collectionNextTitle: 'Start with a top seller',\n    collectionNextCopy: 'Pick a proven item from this category. Your code is ready for checkout.',\n    homeNextTitle: 'Start with a best seller',\n    homeNextCopy: 'Pick current best-selling gear. Your code is ready for checkout.',\n    addCurrentCta: 'Add with code',\n    addRecommendationCta: 'Add with code',\n    productDetailsCta: 'View product details',\n    variantUnavailable: 'Unavailable',\n    shopCta: 'Shop with code',\n    addLoading: 'Adding...',\n    addError: 'Could not add it automatically. Open the product and the code will still be attached at checkout.'\n  };\n\n  var config = mergeConfig(DEFAULT_CONFIG, window.MMAScratchPopupConfig || {});\n  config.copy = Object.assign({}, COPY, config.copy || {});\n\n  var state = {\n    popup: null,\n    dialog: null,\n    card: null,\n    canvas: null,\n    ctx: null,\n    isDrawing: false,\n    isRevealed: false,\n    lastPoint: null,\n    lastFocused: null,\n    previousBodyPaddingRight: '',\n    resizeTimer: null,\n    mockSubmit: false,\n    claimedEmail: '',\n    claimedOffer: null,\n    assignedOffer: null,\n    armToken: '',\n    isOpening: false,\n    introTimer: null,\n    hasOpened: false,\n    triggerTimer: null,\n    exitIntentHandler: null,\n    visitorCountry: '',\n    visitorGeoAllowed: null,\n    emailFocusTracked: false,\n    emailInputTracked: false,\n    recommendationProducts: {}\n  };\n\n  function mergeConfig(base, override) {\n    var merged = Object.assign({}, base, override || {});\n    merged.copy = Object.assign({}, (base && base.copy) || {}, (override && override.copy) || {});\n    return merged;\n  }\n\n  function getParams() {\n    return new URLSearchParams(window.location.search || '');\n  }\n\n  function storageGet(key) {\n    try {\n      return window.localStorage.getItem(key);\n    } catch (error) {\n      return null;\n    }\n  }\n\n  function storageSet(key, value) {\n    try {\n      window.localStorage.setItem(key, value);\n    } catch (error) {}\n  }\n\n  function storageRemove(key) {\n    try {\n      window.localStorage.removeItem(key);\n    } catch (error) {}\n  }\n\n  function sessionGet(key) {\n    try {\n      return window.sessionStorage.getItem(key);\n    } catch (error) {\n      return null;\n    }\n  }\n\n  function sessionSet(key, value) {\n    try {\n      window.sessionStorage.setItem(key, value);\n    } catch (error) {}\n  }\n\n  function sessionRemove(key) {\n    try {\n      window.sessionStorage.removeItem(key);\n    } catch (error) {}\n  }\n\n  function compactObject(input) {\n    var output = {};\n    Object.keys(input || {}).forEach(function(key) {\n      var value = input[key];\n      if (value === undefined || value === null || value === '') return;\n      output[key] = value;\n    });\n    return output;\n  }\n\n  function escapeHtml(value) {\n    return String(value || '')\n      .replace(/&/g, '&amp;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;')\n      .replace(/\"/g, '&quot;')\n      .replace(/'/g, '&#039;');\n  }\n\n  function escapeAttr(value) {\n    return String(value || '')\n      .replace(/&/g, '&amp;')\n      .replace(/\"/g, '&quot;')\n      .replace(/</g, '&lt;');\n  }\n\n  function isLocalHost() {\n    return /^(localhost|127\\.0\\.0\\.1|0\\.0\\.0\\.0)$/i.test(window.location.hostname || '');\n  }\n\n  function isPreview() {\n    var params = getParams();\n    return params.has(config.previewParam) || (isLocalHost() && params.has(config.mockSubmitParam));\n  }\n\n  function isBlockedRoute() {\n    var path = String(window.location.pathname || '').toLowerCase();\n    var blockedPrefixes = [\n      '/cart',\n      '/account',\n      '/checkout',\n      '/challenge',\n      '/policies',\n      '/tools',\n      '/apps'\n    ];\n\n    if (config.blockGloveProductPages && config.isGloveProductPage) return true;\n    return blockedPrefixes.some(function(prefix) {\n      return path === prefix || path.indexOf(prefix + '/') === 0;\n    });\n  }\n\n  function getPageType() {\n    var configured = String(config.pageType || '').toLowerCase();\n    if (configured) return configured;\n\n    var path = String(window.location.pathname || '').toLowerCase();\n    if (path === '/' || path === '') return 'index';\n    if (path === '/collections' || path.indexOf('/collections/') === 0) return 'collection';\n    if (path.indexOf('/products/') === 0) return 'product';\n    return '';\n  }\n\n  function isEligibleRoutePage() {\n    var allowed = config.allowedPageTypes || [];\n    var pageType = getPageType();\n    return allowed.indexOf(pageType) !== -1;\n  }\n\n  function getActivePageTypeSuppression() {\n    var pageType = getPageType();\n    var suppressions = config.pageTypeSuppressions || {};\n    var rule = suppressions[pageType];\n    if (!rule) return null;\n\n    if (rule === true) {\n      return {\n        pageType: pageType,\n        reason: 'page_type_suppressed',\n        experimentId: '',\n        variant: 'no_capture',\n        startsAt: '',\n        endsAt: ''\n      };\n    }\n\n    var startsAt = String(rule.startsAt || '');\n    var endsAt = String(rule.endsAt || '');\n    var startsAtMs = Date.parse(startsAt);\n    var endsAtMs = Date.parse(endsAt);\n    var now = Date.now();\n\n    if (!isNaN(startsAtMs) && now < startsAtMs) return null;\n    if (!isNaN(endsAtMs) && now >= endsAtMs) return null;\n\n    return {\n      pageType: pageType,\n      reason: String(rule.reason || 'temporary_page_type_suppression'),\n      experimentId: String(rule.experimentId || ''),\n      variant: String(rule.variant || 'no_capture'),\n      startsAt: startsAt,\n      endsAt: endsAt\n    };\n  }\n\n  function allowedCountryList() {\n    var allowed = config.allowedCountries || [];\n    if (!allowed.length) return true;\n\n    return allowed.map(function(country) {\n      return String(country || '').trim().toUpperCase();\n    }).filter(Boolean);\n  }\n\n  function isAllowedCountryCode(iso) {\n    var allowed = allowedCountryList();\n    if (allowed === true || !allowed.length) return true;\n\n    var normalized = String(iso || '').trim().toUpperCase();\n    if (!normalized) return false;\n\n    return allowed.indexOf(normalized) !== -1;\n  }\n\n  function isAllowedCountry() {\n    return isAllowedCountryCode(config.countryIso);\n  }\n\n  function parseTraceCountry(traceText) {\n    var match = String(traceText || '').match(/(?:^|\\n)loc=([A-Za-z]{2})(?:\\n|$)/);\n    return match ? match[1].toUpperCase() : '';\n  }\n\n  async function resolveVisitorCountry() {\n    if (isPreview()) return String(config.countryIso || '').trim().toUpperCase();\n\n    var cached = sessionGet('mma_scratch_popup_visitor_country');\n    if (cached) return String(cached || '').trim().toUpperCase();\n\n    var endpoint = String(config.geoTraceEndpoint || '/cdn-cgi/trace').trim();\n    if (!endpoint || typeof window.fetch !== 'function') return '';\n\n    var controller = window.AbortController ? new AbortController() : null;\n    var timeout = null;\n    try {\n      if (controller) {\n        timeout = window.setTimeout(function() {\n          controller.abort();\n        }, Number(config.geoTraceTimeoutMs || 1200));\n      }\n\n      var response = await fetch(endpoint, {\n        method: 'GET',\n        credentials: 'same-origin',\n        cache: 'no-store',\n        signal: controller ? controller.signal : undefined\n      });\n\n      if (!response.ok) return '';\n      var country = parseTraceCountry(await response.text());\n      if (country) sessionSet('mma_scratch_popup_visitor_country', country);\n      return country;\n    } catch (error) {\n      return '';\n    } finally {\n      if (timeout) window.clearTimeout(timeout);\n    }\n  }\n\n  async function ensureVisitorGeoAllowed() {\n    state.visitorGeoAllowed = true;\n    state.visitorCountry = String(config.countryIso || '').trim().toUpperCase();\n    return true;\n  }\n\n  function resetStorageIfRequested() {\n    if (!getParams().has(config.resetParam)) return;\n    storageRemove('mma_scratch_popup_dismissed_at');\n    storageRemove('mma_scratch_popup_submitted_at');\n    sessionRemove('mma_scratch_popup_session_started_at');\n    sessionRemove('mma_scratch_popup_session_opened_at');\n    sessionRemove('mma_scratch_popup_visitor_country');\n    sessionRemove('mma_scratch_popup_landing_path');\n    sessionRemove('mma_scratch_popup_session_id');\n    sessionRemove('mma_scratch_popup_email_started');\n    sessionRemove('mma_scratch_claim_id');\n    sessionRemove(CHECKOUT_EMAIL_KEY);\n  }\n\n  function shouldRun() {\n    var forced = isPreview();\n    var activePageTypeSuppression = forced ? null : getActivePageTypeSuppression();\n    resetStorageIfRequested();\n\n    if (!forced && isBlockedRoute()) return false;\n    if (!forced && !isEligibleRoutePage()) return false;\n    if (activePageTypeSuppression) {\n      trackSuppression(activePageTypeSuppression.reason, {\n        experiment_id: activePageTypeSuppression.experimentId,\n        experiment_variant: activePageTypeSuppression.variant,\n        suppressed_page_type: activePageTypeSuppression.pageType,\n        suppression_starts_at: activePageTypeSuppression.startsAt,\n        suppression_ends_at: activePageTypeSuppression.endsAt\n      });\n      return false;\n    }\n    if (!forced && config.customerKnownSubscriber) return false;\n    if (!forced && config.requiresCouponClaimEndpoint !== false && !String(config.couponClaimEndpoint || '').trim()) return false;\n    if (!config.enabled && !forced) return false;\n    if (forced) return true;\n\n    if (storageGet('mma_scratch_popup_submitted_at')) return false;\n    if (config.sessionSuppressAfterOpen !== false && sessionGet('mma_scratch_popup_session_opened_at')) return false;\n\n    var dismissedAt = Number(storageGet('mma_scratch_popup_dismissed_at') || 0);\n    var cooldownMs = Number(config.cooldownDays || 2) * 24 * 60 * 60 * 1000;\n    if (dismissedAt > 0 && Date.now() - dismissedAt < cooldownMs) return false;\n\n    return true;\n  }\n\n  function suppressNativeKlaviyoForms() {\n    try {\n      document.documentElement.setAttribute('data-mma-scratch-native-suppressed', 'true');\n    } catch (error) {}\n\n    var selectors = [\n      '[data-testid^=\"klaviyo-form-\"]',\n      '[data-klaviyo-form-id]',\n      '[class*=\"klaviyo-form-\"]',\n      '[class*=\"kl-private-reset\"]',\n      'iframe[src*=\"klaviyo\"]'\n    ].join(',');\n\n    function hide(node) {\n      if (!node || !node.style) return;\n      node.setAttribute('aria-hidden', 'true');\n      node.style.setProperty('display', 'none', 'important');\n      node.style.setProperty('visibility', 'hidden', 'important');\n      node.style.setProperty('pointer-events', 'none', 'important');\n    }\n\n    function suppress(root) {\n      try {\n        var scope = root && root.querySelectorAll ? root : document;\n        scope.querySelectorAll(selectors).forEach(hide);\n        if (root && root.matches && root.matches(selectors)) hide(root);\n      } catch (error) {}\n    }\n\n    suppress(document);\n    window.addEventListener('klaviyoForms', function() {\n      window.setTimeout(function() { suppress(document); }, 0);\n    }, true);\n\n    try {\n      new MutationObserver(function(mutations) {\n        mutations.forEach(function(mutation) {\n          mutation.addedNodes.forEach(function(node) {\n            suppress(node);\n          });\n        });\n      }).observe(document.documentElement, { childList: true, subtree: true });\n    } catch (error) {}\n  }\n\n  function getDelayMs() {\n    if (isPreview()) return Number(config.previewDelayMs || 300);\n\n    var sessionStartedAt = Number(sessionGet('mma_scratch_popup_session_started_at') || 0);\n    if (!sessionStartedAt) {\n      sessionStartedAt = Date.now();\n      sessionSet('mma_scratch_popup_session_started_at', String(sessionStartedAt));\n    }\n\n    return Math.max(0, Number(config.showDelayMs || 13000) - (Date.now() - sessionStartedAt));\n  }\n\n  function getKlaviyoIdentifiedState() {\n    try {\n      if (!window.klaviyo || typeof window.klaviyo.isIdentified !== 'function') return null;\n      return window.klaviyo.isIdentified() === true;\n    } catch (error) {\n      return null;\n    }\n  }\n\n  function waitForKnownKlaviyoProfile() {\n    if (isPreview() || !config.suppressKnownKlaviyoProfiles) {\n      return Promise.resolve(false);\n    }\n\n    var deadline = Date.now() + Number(config.klaviyoIdentityWaitMs || 0);\n    return new Promise(function(resolve) {\n      function check() {\n        var identified = getKlaviyoIdentifiedState();\n        if (identified === true) {\n          resolve(true);\n          return;\n        }\n\n        if (identified === false || Date.now() >= deadline) {\n          resolve(false);\n          return;\n        }\n\n        window.setTimeout(check, 150);\n      }\n\n      check();\n    });\n  }\n\n  function shouldMockSubmit() {\n    var params = getParams();\n    if (params.has(config.liveSubmitParam)) return false;\n    if (params.has(config.mockSubmitParam)) return true;\n    return isLocalHost();\n  }\n\n  function getPopupStep(eventName) {\n    if (eventName.indexOf('_open') !== -1 || eventName.indexOf('_suppressed') !== -1) return 'open';\n    if (eventName.indexOf('_reveal') !== -1 || eventName.indexOf('_claim') !== -1) return 'scratch';\n    if (eventName.indexOf('_email') !== -1 || eventName.indexOf('_lead') !== -1) return 'email';\n    if (eventName.indexOf('_copy') !== -1 || eventName.indexOf('_shop') !== -1 || eventName.indexOf('_success') !== -1) return 'success';\n    if (eventName.indexOf('_close') !== -1) return 'close';\n    return 'popup';\n  }\n\n  function getAttributionProperties() {\n    var params = getParams();\n    return compactObject({\n      utm_source: params.get('utm_source'),\n      utm_medium: params.get('utm_medium'),\n      utm_campaign: params.get('utm_campaign'),\n      utm_content: params.get('utm_content'),\n      utm_term: params.get('utm_term'),\n      gclid: params.get('gclid'),\n      fbclid: params.get('fbclid')\n    });\n  }\n\n  function buildTrackingPayload(eventName, eventProps) {\n    var attribution = getAttributionProperties();\n    var props = eventProps || {};\n    var activeOffer = getActiveOffer();\n\n    return compactObject(Object.assign({\n      event: eventName,\n      event_name: eventName,\n      canonical_event: eventName,\n      popup_id: config.popupId,\n      popup_name: config.popupName,\n      popup_type: 'scratch_coupon',\n      capture_experience: config.captureExperience,\n      experiment_name: config.captureExperimentName,\n      experiment_variant: config.captureExperimentVariant,\n      allocation_version: config.captureAllocationVersion,\n      capture_assignment_id: config.captureAssignmentId,\n      popup_step: props.popup_step || getPopupStep(eventName),\n      popup_action: eventName.replace(/^mma_scratch_popup_/, ''),\n      offer_code: activeOffer.offerCode,\n      offer_type: activeOffer.offerType,\n      popup_offer_variant: activeOffer.popupOfferVariant,\n      offer_label: activeOffer.offerLabel,\n      reward_label: activeOffer.rewardLabel,\n      arm_weight: activeOffer.armWeight,\n      coupon_name: activeOffer.couponName,\n      coupon_prefix: activeOffer.couponCodePrefix,\n      discount_code: config.discountCode,\n      coupon_code: getActiveDiscountCode(),\n      discount_label: activeOffer.label,\n      discount_value: activeOffer.discountValue,\n      discount_type: activeOffer.discountType,\n      discount_currency: activeOffer.currency,\n      claim_id: state.claimedOffer && state.claimedOffer.claimId,\n      popup_session_id: getPopupSessionId(),\n      session_id: getPopupSessionId(),\n      list_id: config.listId,\n      visitor_country: state.visitorCountry || sessionGet('mma_scratch_popup_visitor_country'),\n      shopify_country: config.countryIso,\n      page_location: window.location.href,\n      page_path: window.location.pathname,\n      page_type: config.pageType || 'unknown',\n      utm_source: attribution.utm_source,\n      utm_medium: attribution.utm_medium,\n      utm_campaign: attribution.utm_campaign,\n      utm_content: attribution.utm_content,\n      utm_term: attribution.utm_term,\n      gclid: attribution.gclid,\n      fbclid: attribution.fbclid\n    }, props));\n  }\n\n  function getGa4MeasurementId() {\n    if (config.ga4TrackingEnabled === false) return '';\n\n    var configured = String(config.ga4MeasurementId || '').trim();\n    if (configured) return configured;\n\n    try {\n      var analyzifyId = String(window.analyzify_measurement_id || '').trim();\n      if (analyzifyId) return analyzifyId;\n    } catch (error) {}\n\n    try {\n      var ga4 = window.analyzify && window.analyzify.properties && window.analyzify.properties.GA4;\n      var propertyId = String((ga4 && (ga4.id || ga4.measurement_id)) || '').trim();\n      if (propertyId) return propertyId;\n    } catch (error) {}\n\n    return '';\n  }\n\n  function getGa4EventName(eventName) {\n    var mapped = GA4_EVENT_MAP[eventName];\n    if (mapped) return mapped;\n\n    var raw = String(eventName || '').replace(/[^a-z0-9_]+/gi, '_').toLowerCase();\n    if (raw.indexOf('mma_scratch_popup_') === 0) {\n      raw = 'scratch_popup_' + raw.replace(/^mma_scratch_popup_/, '');\n    } else if (raw.indexOf('mma_scratch_') === 0) {\n      raw = 'scratch_' + raw.replace(/^mma_scratch_/, '');\n    }\n\n    return raw.length <= 40 ? raw : raw.slice(0, 40).replace(/_+$/g, '');\n  }\n\n  function buildGa4Params(eventName, params) {\n    var measurementId = getGa4MeasurementId();\n    if (!measurementId) return null;\n\n    var ga4Params = Object.assign({}, params, {\n      send_to: measurementId,\n      scratch_event_name: eventName,\n      scratch_action: params.popup_action,\n      scratch_step: params.popup_step\n    });\n\n    if (config.ga4DebugMode === true || getParams().get('mma_scratch_ga_debug') === '1') {\n      ga4Params.debug_mode = true;\n    }\n\n    return compactObject(ga4Params);\n  }\n\n  function track(eventName, eventProps) {\n    var payload = buildTrackingPayload(eventName, eventProps);\n    var params = Object.assign({}, payload);\n    delete params.event;\n    delete params.event_name;\n\n    try {\n      if (typeof window.gtag === 'function') {\n        var ga4Params = buildGa4Params(eventName, params);\n        window.gtag('event', getGa4EventName(eventName), ga4Params || params);\n      }\n    } catch (error) {}\n\n    try {\n      window.dataLayer = window.dataLayer || [];\n      window.dataLayer.push(payload);\n    } catch (error) {}\n\n    try {\n      document.dispatchEvent(new CustomEvent('mma:scratch-popup', { detail: payload }));\n    } catch (error) {}\n\n    var sharedName = SHARED_CAPTURE_EVENT_MAP[eventName];\n    if (sharedName) {\n      var sharedPayload = Object.assign({}, payload, {\n        event: sharedName,\n        event_name: sharedName,\n        canonical_event: sharedName,\n        source_event_name: eventName\n      });\n      var sharedParams = Object.assign({}, sharedPayload);\n      delete sharedParams.event;\n      delete sharedParams.event_name;\n\n      try {\n        if (typeof window.gtag === 'function') {\n          window.gtag('event', sharedName, buildGa4Params(sharedName, sharedParams) || sharedParams);\n        }\n      } catch (error) {}\n\n      try {\n        window.dataLayer = window.dataLayer || [];\n        window.dataLayer.push(sharedPayload);\n      } catch (error) {}\n\n      try {\n        document.dispatchEvent(new CustomEvent(sharedName, { detail: sharedParams }));\n      } catch (error) {}\n\n      var rybbitEventName = RYBBIT_CAPTURE_EVENT_MAP[sharedName];\n      if (rybbitEventName && !state.mockSubmit && typeof window.ryb === 'function') {\n        window.ryb(rybbitEventName, {\n          source: 'scratch_popup',\n          capture_experience: sharedPayload.capture_experience,\n          experiment_name: sharedPayload.experiment_name,\n          experiment_variant: sharedPayload.experiment_variant,\n          allocation_version: sharedPayload.allocation_version,\n          page_type: sharedPayload.page_type,\n          page_path: sharedPayload.page_path,\n          offer_type: sharedPayload.offer_type\n        });\n      }\n    }\n  }\n\n  function trackSuppression(reason, eventProps) {\n    var normalizedReason = String(reason || 'unknown').replace(/[^a-z0-9_]+/gi, '_').toLowerCase();\n    var pageKey = String(window.location.pathname || '/').replace(/[^a-z0-9_]+/gi, '_').toLowerCase();\n    var dedupeKey = 'mma_scratch_popup_suppressed_' + normalizedReason + '_' + pageKey;\n    if (sessionGet(dedupeKey)) return;\n    sessionSet(dedupeKey, '1');\n    track('mma_scratch_popup_suppressed', Object.assign({\n      popup_step: 'open',\n      reason: reason || 'unknown'\n    }, eventProps || {}));\n  }\n\n  function getPopupSessionId() {\n    var existing = sessionGet('mma_scratch_popup_session_id');\n    if (existing) return existing;\n\n    var sessionId = 'mma-scratch-session-' + Date.now() + '-' + Math.random().toString(36).slice(2);\n    sessionSet('mma_scratch_popup_session_id', sessionId);\n    return sessionId;\n  }\n\n  function getLandingPath() {\n    var existing = sessionGet('mma_scratch_popup_landing_path');\n    if (existing) return existing;\n\n    var path = window.location.pathname || '/';\n    sessionSet('mma_scratch_popup_landing_path', path);\n    return path;\n  }\n\n  function buildClaimId() {\n    var existing = sessionGet('mma_scratch_claim_id');\n    if (existing) return existing;\n\n    var claimId = 'mma-scratch-' + Date.now() + '-' + Math.random().toString(36).slice(2);\n    sessionSet('mma_scratch_claim_id', claimId);\n    return claimId;\n  }\n\n  function validateEmail(email) {\n    return /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(String(email || '').trim());\n  }\n\n  function normalizeOffer(raw) {\n    var offer = Object.assign({}, raw || {});\n    var fallbackAmount = String(offer.rewardAmount || offer.discountLabel || offer.offerLabel || config.discountLabel || '').trim();\n    return compactObject({\n      arm: String(offer.arm || offer.offerType || config.offerType || 'D15').trim(),\n      offerCode: offer.offerCode || config.offerCode,\n      offerType: offer.offerType || offer.arm || config.offerType,\n      popupOfferVariant: offer.popupOfferVariant || offer.offerType || offer.arm || config.popupOfferVariant,\n      couponName: offer.couponName || config.couponName,\n      couponCodePrefix: offer.couponCodePrefix || config.couponCodePrefix,\n      mockCode: offer.mockCode || config.mockCode,\n      offerLabel: offer.offerLabel || offer.discountLabel || config.offerLabel,\n      rewardLabel: offer.rewardLabel || offer.offerLabel || config.offerLabel,\n      rewardAmount: offer.rewardAmount || fallbackAmount || '$15 OFF',\n      rewardText: offer.rewardText || '',\n      label: offer.discountLabel || offer.offerLabel || config.discountLabel,\n      discountValue: Number(offer.discountValue !== undefined ? offer.discountValue : config.discountValue),\n      discountType: offer.discountType || config.discountType,\n      currency: offer.discountCurrency || offer.currency || config.discountCurrency,\n      armWeight: Number(offer.armWeight !== undefined ? offer.armWeight : offer.weight || 0),\n      successValueCopy: offer.successValueCopy || String(offer.rewardLabel || offer.offerLabel || 'your code').toLowerCase(),\n      shortLabel: offer.shortLabel || offer.rewardLabel || offer.offerLabel,\n      shortsCollectionUrl: offer.shortsCollectionUrl || ''\n    });\n  }\n\n  function getOffers() {\n    var offers = Array.isArray(config.offers) ? config.offers : [];\n    if (!offers.length) offers = [config];\n    return offers.map(normalizeOffer).filter(function(offer) {\n      return offer && offer.arm;\n    });\n  }\n\n  function findOfferByArm(arm) {\n    var normalized = String(arm || '').trim().toUpperCase();\n    return getOffers().filter(function(offer) {\n      return String(offer.arm || '').trim().toUpperCase() === normalized\n        || String(offer.offerType || '').trim().toUpperCase() === normalized\n        || String(offer.popupOfferVariant || '').trim().toUpperCase() === normalized;\n    })[0] || null;\n  }\n\n  function getActiveOffer() {\n    return normalizeOffer(state.assignedOffer || findOfferByArm(config.offerType) || getOffers()[0] || config);\n  }\n\n  function getOfferValue(key, fallback) {\n    var offer = getActiveOffer();\n    return offer && offer[key] !== undefined && offer[key] !== null && offer[key] !== '' ? offer[key] : fallback;\n  }\n\n  function getForcedArm() {\n    var params = getParams();\n    return String(params.get('mma_scratch_popup_arm') || params.get('mma_scratch_arm') || '').trim().toUpperCase();\n  }\n\n  function pickWeightedOffer() {\n    var offers = getOffers();\n    var forced = getForcedArm();\n    if (isPreview() && forced) {\n      return findOfferByArm(forced) || offers[0];\n    }\n\n    var total = offers.reduce(function(sum, offer) {\n      return sum + Math.max(0, Number(offer.armWeight || 0));\n    }, 0);\n    if (!total) return offers[0];\n\n    var cursor = Math.random() * total;\n    for (var index = 0; index < offers.length; index += 1) {\n      cursor -= Math.max(0, Number(offers[index].armWeight || 0));\n      if (cursor <= 0) return offers[index];\n    }\n    return offers[offers.length - 1];\n  }\n\n  function prefersReducedMotion() {\n    try {\n      return window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n    } catch (error) {\n      return false;\n    }\n  }\n\n  async function assignScratchOfferArm() {\n    if (state.assignedOffer && state.armToken) return state.assignedOffer;\n\n    var claimId = buildClaimId();\n    if (shouldMockSubmit()) {\n      state.assignedOffer = pickWeightedOffer();\n      state.armToken = 'mock-' + claimId;\n      return state.assignedOffer;\n    }\n\n    var endpoint = String(config.couponClaimEndpoint || '').trim();\n    if (!endpoint) throw new Error('coupon_claim_endpoint_missing');\n\n    var payload = compactObject({\n      action: config.assignArmAction || 'assign_arm',\n      claimId: claimId,\n      sessionId: getPopupSessionId(),\n      popupId: config.popupId,\n      popupName: config.popupName,\n      source: config.source,\n      pageUrl: window.location.href,\n      pagePath: window.location.pathname,\n      pageType: getPageType(),\n      previewArm: isPreview() ? getForcedArm() : ''\n    });\n\n    var response = await fetch(endpoint, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(payload)\n    });\n\n    var data = null;\n    try {\n      data = await response.json();\n    } catch (error) {\n      data = null;\n    }\n\n    if (!response.ok || !data || !data.armToken || !data.offer) {\n      throw new Error((data && data.error) || 'Scratch reward assignment failed');\n    }\n\n    state.assignedOffer = normalizeOffer(data.offer);\n    state.armToken = String(data.armToken || '');\n    return state.assignedOffer;\n  }\n\n  function renderPrizeOffer() {\n    if (!state.popup) return;\n    var offer = getActiveOffer();\n    var small = state.popup.querySelector('[data-mma-scratch-prize-small]');\n    var amount = state.popup.querySelector('[data-mma-scratch-prize-amount]');\n    var text = state.popup.querySelector('[data-mma-scratch-prize-text]');\n    if (small) small.textContent = config.copy.prizeSmall || 'Your code is worth';\n    if (amount) amount.textContent = offer.rewardAmount || config.copy.prizeAmount || '';\n    if (text) text.textContent = offer.rewardText || config.copy.prizeText || '';\n  }\n\n  function getOfferSuccessValueCopy() {\n    return getOfferValue('successValueCopy', 'your code');\n  }\n\n  function getDynamicCopy(template, fallback) {\n    var value = String(template || fallback || '');\n    return value\n      .replace(/\\{\\{\\s*reward_label\\s*\\}\\}/g, getOfferValue('rewardLabel', 'your reward'))\n      .replace(/\\{\\{\\s*reward_amount\\s*\\}\\}/g, getOfferValue('rewardAmount', 'your reward'))\n      .replace(/\\{\\{\\s*success_value\\s*\\}\\}/g, getOfferSuccessValueCopy());\n  }\n\n  function buildOffer() {\n    var activeOffer = getActiveOffer();\n    return {\n      code: String(config.discountCode || '').trim(),\n      arm: activeOffer.arm,\n      offerCode: activeOffer.offerCode,\n      offerType: activeOffer.offerType,\n      popupOfferVariant: activeOffer.popupOfferVariant,\n      couponName: activeOffer.couponName,\n      couponCodePrefix: activeOffer.couponCodePrefix,\n      offerLabel: activeOffer.offerLabel,\n      rewardLabel: activeOffer.rewardLabel,\n      armWeight: activeOffer.armWeight,\n      label: activeOffer.label,\n      discountValue: activeOffer.discountValue,\n      discountType: activeOffer.discountType,\n      currency: activeOffer.currency,\n      claimId: buildClaimId()\n    };\n  }\n\n  function buildMockOffer() {\n    var activeOffer = getActiveOffer();\n    return {\n      code: String(activeOffer.mockCode || config.mockCode || '15O-PREVIEW').trim(),\n      arm: activeOffer.arm,\n      offerCode: activeOffer.offerCode,\n      offerType: activeOffer.offerType,\n      popupOfferVariant: activeOffer.popupOfferVariant,\n      couponName: activeOffer.couponName,\n      couponCodePrefix: activeOffer.couponCodePrefix,\n      offerLabel: activeOffer.offerLabel,\n      rewardLabel: activeOffer.rewardLabel,\n      armWeight: activeOffer.armWeight,\n      label: activeOffer.label,\n      discountValue: activeOffer.discountValue,\n      discountType: activeOffer.discountType,\n      currency: activeOffer.currency,\n      expiresAt: new Date(Date.now() + (2 * 24 * 60 * 60 * 1000)).toISOString(),\n      claimId: buildClaimId(),\n      mock: true\n    };\n  }\n\n  function getProfileProperties(offer) {\n    var attribution = getAttributionProperties();\n    var activeOffer = normalizeOffer(offer || getActiveOffer());\n    return compactObject({\n      mma_popup_id: config.popupId,\n      mma_popup_name: config.popupName,\n      mma_popup_type: 'scratch_coupon',\n      capture_experience: config.captureExperience,\n      capture_experiment_name: config.captureExperimentName,\n      capture_experiment_variant: config.captureExperimentVariant,\n      capture_allocation_version: config.captureAllocationVersion,\n      capture_assignment_id: config.captureAssignmentId,\n      mma_popup_offer_code: activeOffer.offerCode,\n      mma_popup_offer_type: activeOffer.offerType,\n      mma_popup_offer_variant: activeOffer.popupOfferVariant,\n      mma_popup_offer_label: activeOffer.offerLabel,\n      mma_popup_reward_label: activeOffer.rewardLabel,\n      mma_popup_coupon_name: activeOffer.couponName,\n      mma_popup_coupon_prefix: activeOffer.couponCodePrefix,\n      mma_popup_discount_code: offer.code,\n      mma_popup_discount_label: offer.label,\n      mma_popup_discount_value: offer.discountValue,\n      mma_popup_discount_type: offer.discountType,\n      mma_popup_claim_id: offer.claimId,\n      mma_popup_page_path: window.location.pathname,\n      mma_popup_source: config.source,\n      lead_source: 'scratch_popup',\n      welcome_entry_source: 'scratch_popup',\n      popup_test_name: config.popupTestName || '2026Q3_scratch_randomizer',\n      popup_offer_variant: activeOffer.popupOfferVariant,\n      offer_type: activeOffer.offerType,\n      scratch_offer_arm: activeOffer.arm,\n      reward_label: activeOffer.rewardLabel,\n      coupon_prefix: activeOffer.couponCodePrefix,\n      arm_weight: activeOffer.armWeight,\n      offer_active: true,\n      in_welcome_flow: true,\n      coupon_name: activeOffer.couponName,\n      klaviyo_coupon_name: activeOffer.couponName,\n      coupon_code: offer.code,\n      scratch_coupon_code: offer.code,\n      scratch_coupon_expires_at: offer.expiresAt,\n      last_scratch_coupon_code: offer.code,\n      last_scratch_coupon_expires_at: offer.expiresAt,\n      utm_source: attribution.utm_source,\n      utm_medium: attribution.utm_medium,\n      utm_campaign: attribution.utm_campaign,\n      utm_content: attribution.utm_content,\n      utm_term: attribution.utm_term\n    });\n  }\n\n  function storefrontRoute(path) {\n    var root = '/';\n    try {\n      root = window.Shopify && window.Shopify.routes && window.Shopify.routes.root\n        ? window.Shopify.routes.root\n        : '/';\n    } catch (error) {\n      root = '/';\n    }\n    return root.replace(/\\/?$/, '/') + String(path || '').replace(/^\\//, '');\n  }\n\n  function getCartAttributionAttributes(offer) {\n    var attribution = getAttributionProperties();\n    var claimedOffer = offer || state.claimedOffer || {};\n    var activeOffer = normalizeOffer(claimedOffer || getActiveOffer());\n    return compactObject({\n      mma_scratch_popup: '1',\n      mma_capture_experience: config.captureExperience,\n      mma_capture_experiment_name: config.captureExperimentName,\n      mma_capture_experiment_variant: config.captureExperimentVariant,\n      mma_capture_allocation_version: config.captureAllocationVersion,\n      mma_capture_assignment_id: config.captureAssignmentId,\n      mma_scratch_popup_id: config.popupId,\n      mma_scratch_popup_name: config.popupName,\n      mma_scratch_source: config.source,\n      mma_scratch_offer_code: activeOffer.offerCode,\n      mma_scratch_offer_type: activeOffer.offerType,\n      mma_scratch_offer_variant: activeOffer.popupOfferVariant,\n      mma_scratch_offer_arm: activeOffer.arm,\n      mma_scratch_offer_label: activeOffer.offerLabel,\n      mma_scratch_reward_label: activeOffer.rewardLabel,\n      mma_scratch_coupon_name: activeOffer.couponName,\n      mma_scratch_coupon_prefix: activeOffer.couponCodePrefix,\n      mma_scratch_arm_weight: activeOffer.armWeight,\n      mma_scratch_coupon_code: claimedOffer.code || getActiveDiscountCode(),\n      mma_scratch_claim_id: claimedOffer.claimId || buildClaimId(),\n      mma_scratch_landing_path: getLandingPath(),\n      mma_scratch_page_path: window.location.pathname,\n      mma_scratch_page_type: getPageType(),\n      mma_scratch_visitor_country: state.visitorCountry || sessionGet('mma_scratch_popup_visitor_country'),\n      mma_scratch_shopify_country: config.countryIso,\n      mma_scratch_session_id: getPopupSessionId(),\n      mma_scratch_utm_source: attribution.utm_source,\n      mma_scratch_utm_medium: attribution.utm_medium,\n      mma_scratch_utm_campaign: attribution.utm_campaign,\n      mma_scratch_utm_content: attribution.utm_content,\n      mma_scratch_utm_term: attribution.utm_term,\n      mma_scratch_gclid: attribution.gclid,\n      mma_scratch_fbclid: attribution.fbclid\n    });\n  }\n\n  async function persistCartAttribution(offer) {\n    if (config.cartAttributionEnabled === false || !offer || !offer.code) return false;\n    if (isLocalHost() && state.mockSubmit) {\n      track('mma_scratch_popup_cart_attribution_skipped', {\n        popup_step: 'success',\n        reason: 'local_mock',\n        coupon_code: offer.code\n      });\n      return false;\n    }\n\n    var attributes = getCartAttributionAttributes(offer);\n    var response = await fetch(storefrontRoute('/cart/update.js'), {\n      method: 'POST',\n      credentials: 'include',\n      headers: {\n        'Content-Type': 'application/json',\n        accept: 'application/json'\n      },\n      body: JSON.stringify({ attributes: attributes })\n    });\n\n    if (!response.ok) throw new Error('cart_attribution_failed');\n\n    track('mma_scratch_popup_cart_attribution_success', {\n      popup_step: 'success',\n      coupon_code: offer.code,\n      claim_id: offer.claimId\n    });\n\n    return true;\n  }\n\n  async function claimScratchOffer(email) {\n    var endpoint = String(config.couponClaimEndpoint || '').trim();\n    if (!endpoint) {\n      throw new Error('coupon_claim_endpoint_missing');\n    }\n\n    var attribution = getAttributionProperties();\n    var claimId = buildClaimId();\n    var activeOffer = getActiveOffer();\n    var payload = compactObject({\n      action: config.claimAction || 'claim_offer',\n      email: email,\n      claimId: claimId,\n      armToken: state.armToken,\n      sessionId: getPopupSessionId(),\n      pageUrl: window.location.href,\n      pagePath: window.location.pathname,\n      pageType: getPageType(),\n      popupId: config.popupId,\n      popupName: config.popupName,\n      source: config.source,\n      listId: config.listId,\n      offerCode: activeOffer.offerCode,\n      offerType: activeOffer.offerType,\n      popupOfferVariant: activeOffer.popupOfferVariant,\n      offerLabel: activeOffer.offerLabel,\n      rewardLabel: activeOffer.rewardLabel,\n      couponName: activeOffer.couponName,\n      couponCodePrefix: activeOffer.couponCodePrefix,\n      discountValue: activeOffer.discountValue,\n      discountType: activeOffer.discountType,\n      discountCurrency: activeOffer.currency,\n      armWeight: activeOffer.armWeight,\n      welcomeEntrySource: 'scratch_popup',\n      popupTestName: config.popupTestName || '2026Q3_scratch_randomizer',\n      utm_source: attribution.utm_source,\n      utm_medium: attribution.utm_medium,\n      utm_campaign: attribution.utm_campaign,\n      utm_content: attribution.utm_content,\n      utm_term: attribution.utm_term\n    });\n\n    var response = await fetch(endpoint, {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/json'\n      },\n      body: JSON.stringify(payload)\n    });\n\n    var data = null;\n    try {\n      data = await response.json();\n    } catch (error) {\n      data = null;\n    }\n\n    if (!response.ok || !data || !data.code) {\n      throw new Error((data && data.error) || 'Scratch coupon claim failed');\n    }\n\n    return Object.assign(buildOffer(), data, {\n      code: String(data.code || '').trim(),\n      claimId: data.claimId || claimId,\n      arm: data.arm || data.offerArm || activeOffer.arm,\n      offerCode: data.offerCode || activeOffer.offerCode,\n      offerType: data.offerType || activeOffer.offerType,\n      popupOfferVariant: data.popupOfferVariant || activeOffer.popupOfferVariant,\n      couponName: data.couponName || activeOffer.couponName,\n      couponCodePrefix: data.couponPrefix || data.couponCodePrefix || activeOffer.couponCodePrefix,\n      offerLabel: data.offerLabel || activeOffer.offerLabel,\n      rewardLabel: data.rewardLabel || activeOffer.rewardLabel,\n      armWeight: data.armWeight || activeOffer.armWeight,\n      discountValue: data.discountAmount || data.discountValue || activeOffer.discountValue,\n      discountType: data.discountType || activeOffer.discountType,\n      currency: data.currency || activeOffer.currency\n    });\n  }\n\n  async function subscribeKlaviyoClient(email, offer) {\n    var profileProperties = getProfileProperties(offer);\n    var payload = {\n      data: {\n        type: 'subscription',\n        attributes: {\n          custom_source: config.source,\n          profile: {\n            data: {\n              type: 'profile',\n              attributes: {\n                email: email,\n                properties: profileProperties,\n                subscriptions: {\n                  email: {\n                    marketing: {\n                      consent: 'SUBSCRIBED'\n                    }\n                  }\n                }\n              }\n            }\n          }\n        },\n        relationships: {\n          list: {\n            data: {\n              type: 'list',\n              id: config.listId\n            }\n          }\n        }\n      }\n    };\n\n    var response = await fetch('https://a.klaviyo.com/client/subscriptions?company_id=' + encodeURIComponent(config.companyId), {\n      method: 'POST',\n      headers: {\n        accept: 'application/vnd.api+json',\n        'content-type': 'application/vnd.api+json',\n        revision: config.revision\n      },\n      body: JSON.stringify(payload)\n    });\n\n    if (!response.ok) {\n      throw new Error('Klaviyo client subscription failed');\n    }\n\n    identifyAndTrackKlaviyo(email, offer, profileProperties);\n    return offer;\n  }\n\n  function identifyAndTrackKlaviyo(email, offer, profileProperties) {\n    var activeOffer = normalizeOffer(offer || getActiveOffer());\n    var eventProperties = compactObject({\n      popup_id: config.popupId,\n      popup_name: config.popupName,\n      source: config.source,\n      claim_id: offer.claimId,\n      coupon_code: offer.code,\n      coupon_name: activeOffer.couponName,\n      coupon_prefix: activeOffer.couponCodePrefix,\n      coupon_expires_at: offer.expiresAt,\n      discount_label: offer.label,\n      discount_value: offer.discountValue,\n      discount_type: offer.discountType,\n      offer_code: activeOffer.offerCode,\n      offer_type: activeOffer.offerType,\n      popup_offer_variant: activeOffer.popupOfferVariant,\n      offer_label: activeOffer.offerLabel,\n      reward_label: activeOffer.rewardLabel,\n      scratch_offer_arm: activeOffer.arm,\n      arm_weight: activeOffer.armWeight,\n      page_path: window.location.pathname,\n      page_url: window.location.href\n    });\n\n    try {\n      if (window.klaviyo && typeof window.klaviyo.identify === 'function') {\n        window.klaviyo.identify(Object.assign({ email: email }, profileProperties), function() {\n          if (window.klaviyo && typeof window.klaviyo.track === 'function') {\n            window.klaviyo.track('Scratch Coupon Claimed', eventProperties);\n          }\n        });\n        return;\n      }\n    } catch (error) {}\n\n    try {\n      window._learnq = window._learnq || [];\n      window._learnq.push(['identify', Object.assign({ '$email': email }, profileProperties)]);\n      window._learnq.push(['track', 'Scratch Coupon Claimed', eventProperties]);\n    } catch (error) {}\n  }\n\n  function trackLeadConversion(offer) {\n    track('generate_lead', {\n      popup_step: 'email',\n      lead_source: 'scratch_popup',\n      method: 'scratch_popup',\n      coupon_code: offer && offer.code,\n      mock_submit: state.mockSubmit\n    });\n  }\n\n  function trackTripleWhaleContact(email) {\n    try {\n      if (typeof window.TriplePixel === 'function') {\n        window.TriplePixel('Contact', { email: email });\n      }\n    } catch (error) {}\n  }\n\n  function getActiveDiscountCode() {\n    return String((state.claimedOffer && state.claimedOffer.code) || config.discountCode || '').trim();\n  }\n\n  function buildDiscountPath(redirectPath) {\n    var code = getActiveDiscountCode();\n    var destination = redirectPath || config.redirectPath || '/collections/boxing-gloves';\n    if (!code || config.autoApplyDiscount === false) return destination;\n\n    return '/discount/' + encodeURIComponent(code) + '?redirect=' + encodeURIComponent(destination);\n  }\n\n  function buildExpiryLine(offer) {\n    var expiresAt = offer && offer.expiresAt;\n    if (!expiresAt) return config.copy.successExpiryFallback || '';\n\n    var expires = new Date(expiresAt);\n    if (isNaN(expires.getTime())) return config.copy.successExpiryFallback || '';\n\n    var formatted = expires.toLocaleString(undefined, {\n      month: 'short',\n      day: 'numeric',\n      hour: 'numeric',\n      minute: '2-digit'\n    });\n    return (config.copy.successExpiryPrefix || 'Code expires') + ' ' + formatted + '.';\n  }\n\n  function goToDiscountPath(redirectPath) {\n    goToPath(buildDiscountPath(redirectPath));\n  }\n\n  function primeDiscountCode() {\n    var code = getActiveDiscountCode();\n    if (!code || config.autoApplyDiscount === false || (isLocalHost() && state.mockSubmit)) return;\n\n    var discountPath = buildDiscountPath('/cart');\n\n    try {\n      fetch(discountPath, {\n        method: 'GET',\n        credentials: 'include',\n        keepalive: true\n      }).catch(function() {});\n    } catch (error) {}\n\n    try {\n      var frame = document.createElement('iframe');\n      frame.hidden = true;\n      frame.setAttribute('aria-hidden', 'true');\n      frame.style.position = 'absolute';\n      frame.style.width = '1px';\n      frame.style.height = '1px';\n      frame.style.opacity = '0';\n      frame.src = discountPath;\n      document.body.appendChild(frame);\n      window.setTimeout(function() {\n        if (frame.parentNode) frame.parentNode.removeChild(frame);\n      }, 4000);\n    } catch (error) {}\n\n    track('mma_scratch_popup_discount_prime', {\n      popup_step: 'success',\n      coupon_code: code\n    });\n  }\n\n  function refreshSuccessLinks() {\n    if (!state.popup) return;\n\n    state.popup.querySelectorAll('[data-mma-scratch-shop], [data-mma-scratch-product-link]').forEach(function(node) {\n      var redirectPath = node.getAttribute('data-redirect-path') || node.getAttribute('href') || config.redirectPath;\n      if (node.tagName && node.tagName.toLowerCase() === 'a') {\n        node.setAttribute('href', buildDiscountPath(redirectPath));\n      }\n    });\n  }\n\n  function getPageContext() {\n    var context = config.pageContext || {};\n    var type = String(context.type || getPageType() || '').toLowerCase();\n    return Object.assign({}, context, { type: type });\n  }\n\n  function normalizeProducts(products, limit) {\n    var seen = {};\n    return (products || []).filter(function(product) {\n      if (!product || !product.title || !product.url) return false;\n      var key = String(product.id || product.url);\n      if (seen[key]) return false;\n      seen[key] = true;\n      return true;\n    }).slice(0, limit);\n  }\n\n  function getVariantOptions(variant) {\n    if (!variant) return [];\n    if (Array.isArray(variant.options)) return variant.options.map(function(option) {\n      return String(option || '');\n    });\n    return [variant.option1, variant.option2, variant.option3].map(function(option) {\n      return String(option || '');\n    });\n  }\n\n  function getProductVariants(product) {\n    var variants = Array.isArray(product && product.variants) ? product.variants : [];\n    variants = variants.map(function(variant) {\n      if (!variant || !variant.id) return null;\n      return {\n        id: String(variant.id),\n        title: String(variant.title || ''),\n        available: variant.available !== false,\n        options: getVariantOptions(variant),\n        price: variant.price || product.price || '',\n        image: variant.image || product.image || '',\n        url: variant.url || product.url || ''\n      };\n    }).filter(Boolean);\n\n    if (!variants.length && product && product.variantId) {\n      variants.push({\n        id: String(product.variantId),\n        title: '',\n        available: true,\n        options: [],\n        price: product.price || '',\n        image: product.image || '',\n        url: product.url || ''\n      });\n    }\n\n    return variants;\n  }\n\n  function getInitialVariant(product) {\n    var variants = getProductVariants(product);\n    var selectedId = String(product && product.variantId ? product.variantId : '');\n    var selectedVariant = variants.filter(function(variant) {\n      return variant.id === selectedId && variant.available;\n    })[0];\n\n    return selectedVariant || variants.filter(function(variant) {\n      return variant.available;\n    })[0] || variants[0] || null;\n  }\n\n  function getProductPath(product, variant) {\n    return (variant && variant.url) || (product && product.url) || config.redirectPath || '/collections/boxing-gloves';\n  }\n\n  function isDefaultOptionValue(value) {\n    var normalized = String(value || '').trim().toLowerCase();\n    return !normalized || normalized === 'default title' || normalized === 'title';\n  }\n\n  function normalizeOptionLabel(label) {\n    var normalized = String(label || '').trim();\n    if (normalized.toLowerCase() === 'accessory size') return 'Size';\n    return normalized;\n  }\n\n  function getOptionLabel(product, index) {\n    var names = Array.isArray(product && product.optionNames) ? product.optionNames : [];\n    var label = normalizeOptionLabel(names[index]);\n    return label && label.toLowerCase() !== 'title' ? label : 'Option';\n  }\n\n  function getOptionValues(product, index) {\n    var seen = {};\n    var values = [];\n    var variants = getProductVariants(product).filter(function(variant) {\n      return variant.available;\n    });\n\n    if (!variants.length) variants = getProductVariants(product);\n\n    variants.forEach(function(variant) {\n      var value = getVariantOptions(variant)[index];\n      var key = String(value || '').trim();\n      if (isDefaultOptionValue(key) || seen[key]) return;\n      seen[key] = true;\n      values.push(key);\n    });\n\n    return values;\n  }\n\n  function getSelectableOptionIndexes(product) {\n    var indexes = [];\n    [0, 1, 2].forEach(function(index) {\n      if (getOptionValues(product, index).length > 1) indexes.push(index);\n    });\n    return indexes;\n  }\n\n  function variantMatchesSelections(variant, selections) {\n    var options = getVariantOptions(variant);\n    return Object.keys(selections || {}).every(function(index) {\n      var selected = selections[index];\n      return !selected || options[Number(index)] === selected;\n    });\n  }\n\n  function findVariantForSelections(product, selections) {\n    return getProductVariants(product).filter(function(variant) {\n      return variant.available && variantMatchesSelections(variant, selections);\n    })[0] || null;\n  }\n\n  function findClosestVariantForSelections(product, selections) {\n    var variants = getProductVariants(product).filter(function(variant) {\n      return variant.available;\n    });\n\n    if (!variants.length) return null;\n\n    return variants.map(function(variant) {\n      var options = getVariantOptions(variant);\n      var score = Object.keys(selections || {}).reduce(function(total, index) {\n        return total + (selections[index] && options[Number(index)] === selections[index] ? 1 : 0);\n      }, 0);\n      return { variant: variant, score: score };\n    }).sort(function(a, b) {\n      return b.score - a.score;\n    })[0].variant;\n  }\n\n  function syncCardSelectionsToVariant(card, product, variant) {\n    var options = getVariantOptions(variant);\n    getSelectableOptionIndexes(product).forEach(function(index) {\n      var select = card.querySelector('[data-mma-scratch-option-index=\"' + index + '\"]');\n      if (select && options[index]) select.value = options[index];\n    });\n  }\n\n  function getInitialSelections(product, variant) {\n    var selectedOptions = getVariantOptions(variant);\n    var selections = {};\n    getSelectableOptionIndexes(product).forEach(function(index) {\n      selections[index] = selectedOptions[index] || getOptionValues(product, index)[0] || '';\n    });\n    return selections;\n  }\n\n  function getCardSelections(card) {\n    var selections = {};\n    if (!card) return selections;\n    card.querySelectorAll('[data-mma-scratch-option-index]').forEach(function(select) {\n      selections[select.getAttribute('data-mma-scratch-option-index')] = select.value;\n    });\n    return selections;\n  }\n\n  function buildVariantSelectorsMarkup(product, selectedVariant) {\n    var optionIndexes = getSelectableOptionIndexes(product);\n    if (!optionIndexes.length) return '';\n\n    var selections = getInitialSelections(product, selectedVariant);\n    return [\n      '<div class=\"mma-scratch-rec__options\" aria-label=\"Choose product options\">',\n      optionIndexes.map(function(index) {\n        var label = getOptionLabel(product, index);\n        var values = getOptionValues(product, index);\n        return [\n          '<label class=\"mma-scratch-rec__option\">',\n          '  <span>' + escapeHtml(label) + '</span>',\n          '  <select data-mma-scratch-option-index=\"' + index + '\" aria-label=\"' + escapeAttr(label) + '\">',\n          values.map(function(value) {\n            return '<option value=\"' + escapeAttr(value) + '\"' + (selections[index] === value ? ' selected' : '') + '>' + escapeHtml(value) + '</option>';\n          }).join(''),\n          '  </select>',\n          '</label>'\n        ].join('');\n      }).join(''),\n      '</div>'\n    ].join('');\n  }\n\n  function buildRewardShowcaseMarkup() {\n    var offers = getOffers();\n    var copy = config.copy || {};\n    return [\n      '<div class=\"mma-scratch-showcase\" data-mma-scratch-showcase>',\n      '  <p class=\"mma-scratch-showcase__kicker\">' + escapeHtml(copy.showcaseKicker || 'Every card wins') + '</p>',\n      '  <div class=\"mma-scratch-showcase__grid\" aria-label=\"Possible scratch rewards\">',\n      offers.map(function(offer) {\n        return [\n          '<div class=\"mma-scratch-reward-card\" data-mma-scratch-showcase-card>',\n          '  <strong>' + escapeHtml(offer.rewardAmount || offer.rewardLabel) + '</strong>',\n          '</div>'\n        ].join('');\n      }).join(''),\n      '  </div>',\n      '  <p class=\"mma-scratch-showcase__copy\" data-mma-scratch-showcase-copy>' + escapeHtml(copy.showcaseCopy || '') + '</p>',\n      '  <button class=\"mma-scratch-popup__button mma-scratch-showcase__button\" type=\"button\" data-mma-scratch-start>' + escapeHtml(copy.shuffleCta || 'Shuffle my card') + '</button>',\n      '</div>'\n    ].join('');\n  }\n\n  function getProductImageMarkup(product) {\n    if (!product || !product.image) {\n      return '<span class=\"mma-scratch-rec__image mma-scratch-rec__image--empty\" aria-hidden=\"true\"></span>';\n    }\n\n    return '<img class=\"mma-scratch-rec__image\" src=\"' + escapeAttr(product.image) + '\" alt=\"' + escapeAttr(product.title) + '\" loading=\"lazy\" decoding=\"async\">';\n  }\n\n  function buildProductRecommendationMarkup(product, index, isCurrentProduct) {\n    state.recommendationProducts[String(index)] = product;\n\n    var selectedVariant = getInitialVariant(product);\n    var variantId = selectedVariant && selectedVariant.id ? String(selectedVariant.id) : '';\n    var productPath = getProductPath(product, selectedVariant);\n    var buttonLabel = isCurrentProduct ? config.copy.addCurrentCta : config.copy.addRecommendationCta;\n    var buttonAttrs = ' type=\"button\" data-default-label=\"' + escapeAttr(buttonLabel) + '\"';\n    buttonAttrs += variantId\n      ? ' data-mma-scratch-add-variant=\"' + escapeAttr(variantId) + '\" data-redirect-path=\"' + escapeAttr(productPath) + '\"'\n      : ' disabled';\n    if (isCurrentProduct) buttonAttrs += ' data-mma-scratch-add-current-product';\n\n    return [\n      '<article class=\"mma-scratch-rec\" data-mma-scratch-rec=\"' + index + '\" data-mma-scratch-selected-variant=\"' + escapeAttr(variantId) + '\">',\n      '  <a class=\"mma-scratch-rec__media\" href=\"' + escapeAttr(productPath) + '\" data-mma-scratch-product-link data-redirect-path=\"' + escapeAttr(productPath) + '\">',\n      getProductImageMarkup(product),\n      '  </a>',\n      '  <div class=\"mma-scratch-rec__body\">',\n      '    <a class=\"mma-scratch-rec__title\" href=\"' + escapeAttr(productPath) + '\" data-mma-scratch-product-link data-redirect-path=\"' + escapeAttr(productPath) + '\">' + escapeHtml(product.title) + '</a>',\n      selectedVariant && selectedVariant.price ? '    <p class=\"mma-scratch-rec__price\" data-mma-scratch-rec-price>' + escapeHtml(selectedVariant.price) + '</p>' : '',\n      buildVariantSelectorsMarkup(product, selectedVariant),\n      '    <button class=\"mma-scratch-rec__button\"' + buttonAttrs + '>' + escapeHtml(variantId ? buttonLabel : config.copy.variantUnavailable) + '</button>',\n      '    <a class=\"mma-scratch-rec__details\" href=\"' + escapeAttr(productPath) + '\" data-mma-scratch-product-link data-redirect-path=\"' + escapeAttr(productPath) + '\">' + escapeHtml(config.copy.productDetailsCta) + '</a>',\n      '  </div>',\n      '</article>'\n    ].join('');\n  }\n\n  function buildFallbackSuccessMarkup() {\n    return [\n      '<div class=\"mma-scratch-next-step mma-scratch-next-step--fallback\">',\n      '  <p class=\"mma-scratch-next-step__title\">' + escapeHtml(config.copy.homeNextTitle) + '</p>',\n      '  <p class=\"mma-scratch-next-step__copy\">' + escapeHtml(config.copy.homeNextCopy) + '</p>',\n      '  <a class=\"mma-scratch-popup__button\" href=\"' + escapeAttr(config.redirectPath || '/collections/boxing-gloves') + '\" data-mma-scratch-shop data-redirect-path=\"' + escapeAttr(config.redirectPath || '/collections/boxing-gloves') + '\">' + escapeHtml(config.copy.shopCta) + '</a>',\n      '</div>'\n    ].join('');\n  }\n\n  function buildSuccessNextStepMarkup() {\n    var context = getPageContext();\n    var products = normalizeProducts(context.products || [], context.type === 'collection' ? 2 : 3);\n    var copy = config.copy || {};\n    var offerLink = buildOfferSupplementalSuccessLink();\n\n    if (context.type === 'product' && products.length) {\n      return [\n        '<div class=\"mma-scratch-next-step\" data-mma-scratch-context=\"product\">',\n        '  <p class=\"mma-scratch-next-step__title\">' + escapeHtml(copy.productNextTitle) + '</p>',\n        '  <p class=\"mma-scratch-next-step__copy\">' + escapeHtml(copy.productNextCopy) + '</p>',\n        '  <div class=\"mma-scratch-rec-grid mma-scratch-rec-grid--single\">',\n        buildProductRecommendationMarkup(products[0], 0, true),\n        '  </div>',\n        offerLink,\n        '</div>'\n      ].join('');\n    }\n\n    if ((context.type === 'collection' || context.type === 'index') && products.length) {\n      var title = context.type === 'collection' ? copy.collectionNextTitle : copy.homeNextTitle;\n      var body = context.type === 'collection' ? copy.collectionNextCopy : copy.homeNextCopy;\n\n      return [\n        '<div class=\"mma-scratch-next-step\" data-mma-scratch-context=\"' + escapeAttr(context.type) + '\">',\n        '  <p class=\"mma-scratch-next-step__title\">' + escapeHtml(title) + '</p>',\n        '  <p class=\"mma-scratch-next-step__copy\">' + escapeHtml(body) + '</p>',\n        '  <div class=\"mma-scratch-rec-grid\" data-count=\"' + products.length + '\">',\n        products.map(function(product, index) {\n          return buildProductRecommendationMarkup(product, index, false);\n        }).join(''),\n        '  </div>',\n        offerLink,\n        '</div>'\n      ].join('');\n    }\n\n    return buildFallbackSuccessMarkup();\n  }\n\n  function buildOfferSupplementalSuccessLink() {\n    var activeOffer = getActiveOffer();\n    if (String(activeOffer.offerType || '').toUpperCase() !== 'FREE_SHORTS') return '';\n    var path = activeOffer.shortsCollectionUrl || '/collections/shorts';\n    return '<a class=\"mma-scratch-next-step__subtle-link\" href=\"' + escapeAttr(path) + '\" data-mma-scratch-product-link data-redirect-path=\"' + escapeAttr(path) + '\">Choose eligible shorts</a>';\n  }\n\n  function setRecommendationPath(card, path) {\n    if (!card || !path) return;\n\n    card.querySelectorAll('[data-mma-scratch-product-link]').forEach(function(node) {\n      node.setAttribute('data-redirect-path', path);\n      if (node.tagName && node.tagName.toLowerCase() === 'a') {\n        node.setAttribute('href', getActiveDiscountCode() ? buildDiscountPath(path) : path);\n      }\n    });\n\n    var button = card.querySelector('[data-mma-scratch-add-variant]');\n    if (button) button.setAttribute('data-redirect-path', path);\n  }\n\n  function updateOptionAvailability(card, product, selections) {\n    if (!card) return;\n\n    card.querySelectorAll('[data-mma-scratch-option-index]').forEach(function(select) {\n      var index = select.getAttribute('data-mma-scratch-option-index');\n      Array.prototype.forEach.call(select.options, function(option) {\n        var testSelections = Object.assign({}, selections);\n        testSelections[index] = option.value;\n        option.disabled = !findVariantForSelections(product, testSelections);\n      });\n    });\n  }\n\n  function updateRecommendationCard(card) {\n    if (!card) return;\n\n    var product = state.recommendationProducts[card.getAttribute('data-mma-scratch-rec')];\n    if (!product) return;\n\n    var selections = getCardSelections(card);\n    var variant = findVariantForSelections(product, selections);\n    var button = card.querySelector('[data-mma-scratch-add-variant], .mma-scratch-rec__button');\n    var price = card.querySelector('[data-mma-scratch-rec-price]');\n    var image = card.querySelector('.mma-scratch-rec__image:not(.mma-scratch-rec__image--empty)');\n    var defaultLabel = button && button.getAttribute('data-default-label') ? button.getAttribute('data-default-label') : config.copy.addRecommendationCta;\n\n    if (!variant) {\n      variant = findClosestVariantForSelections(product, selections);\n      if (variant) {\n        syncCardSelectionsToVariant(card, product, variant);\n        selections = getCardSelections(card);\n      }\n    }\n\n    updateOptionAvailability(card, product, selections);\n\n    if (!variant) {\n      card.setAttribute('data-mma-scratch-selected-variant', '');\n      if (button) {\n        button.removeAttribute('data-mma-scratch-add-variant');\n        button.disabled = true;\n        button.textContent = config.copy.variantUnavailable || 'Unavailable';\n      }\n      return;\n    }\n\n    card.setAttribute('data-mma-scratch-selected-variant', variant.id);\n    setRecommendationPath(card, getProductPath(product, variant));\n\n    if (button) {\n      button.setAttribute('data-mma-scratch-add-variant', variant.id);\n      if (!button.hasAttribute('data-mma-scratch-loading')) {\n        button.disabled = false;\n        button.textContent = defaultLabel;\n      }\n    }\n\n    if (price && variant.price) price.textContent = variant.price;\n    if (image && variant.image && image.getAttribute('src') !== variant.image) image.setAttribute('src', variant.image);\n  }\n\n  function wireVariantSelectors() {\n    state.popup.querySelectorAll('[data-mma-scratch-rec]').forEach(function(card) {\n      updateRecommendationCard(card);\n      card.querySelectorAll('[data-mma-scratch-option-index]').forEach(function(select) {\n        select.addEventListener('change', function() {\n          updateRecommendationCard(card);\n          track('mma_scratch_popup_variant_select', {\n            popup_step: 'success',\n            product_id: state.recommendationProducts[card.getAttribute('data-mma-scratch-rec')] && state.recommendationProducts[card.getAttribute('data-mma-scratch-rec')].id,\n            variant_id: card.getAttribute('data-mma-scratch-selected-variant'),\n            option_index: select.getAttribute('data-mma-scratch-option-index'),\n            option_value: select.value\n          });\n        });\n      });\n    });\n  }\n\n  function buildMarkup() {\n    var copy = config.copy || {};\n    var popup = document.createElement('section');\n    popup.className = 'mma-scratch-popup';\n    popup.hidden = true;\n    popup.setAttribute('aria-hidden', 'true');\n    popup.setAttribute('data-mma-scratch-modal', '');\n\n    popup.innerHTML = [\n      '<div class=\"mma-scratch-popup__overlay\" aria-hidden=\"true\"></div>',\n      '<div class=\"mma-scratch-popup__dialog\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"mmaScratchTitle\" aria-describedby=\"mmaScratchCopy\" tabindex=\"-1\">',\n      '  <button class=\"mma-scratch-popup__close\" type=\"button\" aria-label=\"' + escapeAttr(copy.closeAria) + '\" data-mma-scratch-close>',\n      '    <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" aria-hidden=\"true\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\"><path d=\"M18 6 6 18M6 6l12 12\"/></svg>',\n      '  </button>',\n      '  <div class=\"mma-scratch-popup__body\">',\n      '    <article class=\"mma-scratch-popup__screen\" data-screen=\"scratch\">',\n      '      <div class=\"mma-scratch-popup__copy-block\">',\n      '        <h2 class=\"mma-scratch-popup__title\" id=\"mmaScratchTitle\">' + escapeHtml(copy.scratchTitle) + '</h2>',\n      '        <p class=\"mma-scratch-popup__copy\" id=\"mmaScratchCopy\">' + escapeHtml(copy.scratchCopy) + '</p>',\n      '      </div>',\n      '      <div class=\"mma-scratch-popup__stage\">',\n      buildRewardShowcaseMarkup(),\n      '        <div class=\"mma-scratch-card\" data-mma-scratch-card hidden>',\n      '          <div class=\"mma-scratch-card__prize\" aria-live=\"polite\">',\n      '            <div>',\n      '              <p class=\"mma-scratch-prize__small\" data-mma-scratch-prize-small>' + escapeHtml(copy.prizeSmall) + '</p>',\n      '              <p class=\"mma-scratch-prize__amount\" data-mma-scratch-prize-amount>' + escapeHtml(copy.prizeAmount) + '</p>',\n      '              <p class=\"mma-scratch-prize__text\" data-mma-scratch-prize-text>' + escapeHtml(copy.prizeText) + '</p>',\n      '            </div>',\n      '          </div>',\n      '          <canvas class=\"mma-scratch-card__canvas\" data-mma-scratch-canvas aria-label=\"' + escapeAttr(copy.scratchCanvasAria) + '\"></canvas>',\n      '          <button class=\"mma-scratch-card__fallback\" type=\"button\" data-mma-scratch-reveal hidden>',\n      '            <strong>' + escapeHtml(copy.fallbackTitle) + '</strong>',\n      '            <span>' + escapeHtml(copy.fallbackSub) + '</span>',\n      '          </button>',\n      '        </div>',\n      '        <p class=\"mma-scratch-popup__hint\" data-mma-scratch-hint>' + escapeHtml(copy.hintBefore) + '</p>',\n      '        <button class=\"mma-scratch-popup__button mma-scratch-popup__claim\" type=\"button\" data-mma-scratch-claim hidden disabled>' + escapeHtml(copy.claimCta) + '</button>',\n      '      </div>',\n      '    </article>',\n      '    <article class=\"mma-scratch-popup__screen\" data-screen=\"email\" hidden>',\n      '      <h2 class=\"mma-scratch-popup__title\" data-mma-scratch-email-title>' + escapeHtml(copy.emailTitle) + '</h2>',\n      '      <p class=\"mma-scratch-popup__copy\" data-mma-scratch-email-copy>' + escapeHtml(copy.emailCopy) + '</p>',\n      '      <form class=\"mma-scratch-form\" data-mma-scratch-form novalidate>',\n      '        <label class=\"mma-scratch-form__label\" for=\"mmaScratchEmail\">' + escapeHtml(copy.emailLabel) + '</label>',\n      '        <input class=\"mma-scratch-form__input\" id=\"mmaScratchEmail\" name=\"email\" type=\"email\" inputmode=\"email\" autocomplete=\"email\" placeholder=\"' + escapeAttr(copy.emailPlaceholder) + '\" required>',\n      '        <p class=\"mma-scratch-popup__error\" data-mma-scratch-error aria-live=\"polite\"></p>',\n      '        <button class=\"mma-scratch-popup__button\" type=\"submit\" data-mma-scratch-submit>' + escapeHtml(copy.emailCta) + '</button>',\n      copy.emailLegal ? '        <p class=\"mma-scratch-form__legal\">' + escapeHtml(copy.emailLegal) + '</p>' : '',\n      '      </form>',\n      '    </article>',\n      '    <article class=\"mma-scratch-popup__screen\" data-screen=\"success\" hidden>',\n      '      <div class=\"mma-scratch-success\">',\n      '        <div class=\"mma-scratch-success__mark\" aria-hidden=\"true\">',\n      '          <svg width=\"23\" height=\"23\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.6\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m20 6-11 11-5-5\"/></svg>',\n      '        </div>',\n      '        <h2 class=\"mma-scratch-popup__title\" data-mma-scratch-success-title>' + escapeHtml(copy.successTitle) + '</h2>',\n      '        <p class=\"mma-scratch-popup__copy\" data-mma-scratch-success-copy>' + escapeHtml(copy.successCopy) + '</p>',\n      config.showCodeOnSuccess === false ? '' : [\n        '        <div class=\"mma-scratch-code\" aria-live=\"polite\">',\n        '          <span class=\"mma-scratch-code__label\">' + escapeHtml(copy.codePrefix) + '</span>',\n        '          <strong class=\"mma-scratch-code__value\" data-mma-scratch-code>' + escapeHtml(config.discountCode) + '</strong>',\n        '          <button class=\"mma-scratch-code__copy\" type=\"button\" data-mma-scratch-copy>' + escapeHtml(copy.copyCode) + '</button>',\n        '        </div>'\n      ].join(''),\n      '        <p class=\"mma-scratch-success__expiry\" data-mma-scratch-expiry></p>',\n      '        ' + buildSuccessNextStepMarkup(),\n      '        <p class=\"mma-scratch-success__terms\">' + escapeHtml(copy.successTerms || '') + '</p>',\n      '        <p class=\"mma-scratch-popup__status\" data-mma-scratch-status aria-live=\"polite\"></p>',\n      '      </div>',\n      '    </article>',\n      '  </div>',\n      '</div>'\n    ].join('');\n\n    document.body.appendChild(popup);\n    state.popup = popup;\n    state.dialog = popup.querySelector('.mma-scratch-popup__dialog');\n    state.card = popup.querySelector('[data-mma-scratch-card]');\n    state.canvas = popup.querySelector('[data-mma-scratch-canvas]');\n    state.ctx = state.canvas.getContext('2d', { willReadFrequently: true });\n    wireEvents();\n  }\n\n  function wireEvents() {\n    state.popup.querySelectorAll('[data-mma-scratch-close]').forEach(function(node) {\n      node.addEventListener('click', function() {\n        closePopup('dismiss');\n      });\n    });\n\n    var startButton = state.popup.querySelector('[data-mma-scratch-start]');\n    if (startButton) startButton.addEventListener('click', handleStartShuffle);\n\n    state.popup.querySelector('[data-mma-scratch-claim]').addEventListener('click', function() {\n      showScreen('email');\n      var email = state.popup.querySelector('#mmaScratchEmail');\n      if (email) email.focus();\n      track('mma_scratch_popup_claim_click');\n    });\n\n    state.popup.querySelector('[data-mma-scratch-reveal]').addEventListener('click', function() {\n      revealScratchCard(true);\n    });\n\n    state.popup.querySelector('[data-mma-scratch-form]').addEventListener('submit', handleSubmit);\n    var emailInput = state.popup.querySelector('#mmaScratchEmail');\n    if (emailInput) {\n      emailInput.addEventListener('focus', function() {\n        if (state.emailFocusTracked) return;\n        state.emailFocusTracked = true;\n        track('mma_scratch_popup_email_focus', { popup_step: 'email' });\n      });\n      emailInput.addEventListener('input', function() {\n        if (state.emailInputTracked || !String(emailInput.value || '').trim()) return;\n        state.emailInputTracked = true;\n        sessionSet('mma_scratch_popup_email_started', '1');\n        track('mma_scratch_popup_email_input_start', { popup_step: 'email' });\n      });\n    }\n    var copyCodeButton = state.popup.querySelector('[data-mma-scratch-copy]');\n    if (copyCodeButton) copyCodeButton.addEventListener('click', handleCodeCopy);\n    wireVariantSelectors();\n    state.popup.querySelectorAll('[data-mma-scratch-shop], [data-mma-scratch-product-link]').forEach(function(node) {\n      node.addEventListener('click', function(event) {\n        var redirectPath = node.getAttribute('data-redirect-path') || config.redirectPath;\n        track('mma_scratch_popup_shop_click', {\n          popup_step: 'success',\n          coupon_code: getActiveDiscountCode(),\n          redirect_path: redirectPath\n        });\n        if (getActiveDiscountCode()) {\n          event.preventDefault();\n          goToDiscountPath(redirectPath);\n        }\n      });\n    });\n    state.popup.querySelectorAll('[data-mma-scratch-add-variant]').forEach(function(node) {\n      node.addEventListener('click', handleAddWithCode);\n    });\n    state.popup.querySelectorAll('[data-mma-scratch-product-link]').forEach(function(node) {\n      node.addEventListener('click', function(event) {\n        if (node.tagName && node.tagName.toLowerCase() === 'button') {\n          event.preventDefault();\n          if (!getActiveDiscountCode()) {\n            goToPath(node.getAttribute('data-redirect-path') || config.redirectPath);\n          }\n        }\n      });\n    });\n    state.popup.querySelectorAll('.mma-scratch-rec__image').forEach(function(image) {\n      image.addEventListener('error', function() {\n        image.hidden = true;\n        image.style.display = 'none';\n        if (image.parentElement) image.parentElement.classList.add('mma-scratch-rec__media--empty');\n      });\n    });\n\n    state.canvas.addEventListener('pointerdown', handlePointerDown);\n    state.canvas.addEventListener('pointermove', handlePointerMove);\n    state.canvas.addEventListener('pointerup', handlePointerEnd);\n    state.canvas.addEventListener('pointercancel', handlePointerEnd);\n    state.canvas.addEventListener('lostpointercapture', handlePointerEnd);\n\n    document.addEventListener('keydown', handleKeydown);\n    window.addEventListener('resize', handleResize);\n  }\n\n  async function armPopupWhenEligible() {\n    if (!shouldRun()) return;\n\n    var geoAllowed = await ensureVisitorGeoAllowed();\n    if (!geoAllowed || !shouldRun()) return;\n\n    var knownProfile = await waitForKnownKlaviyoProfile();\n    if (knownProfile) {\n      trackSuppression('known_klaviyo_profile');\n      return;\n    }\n\n    armPopupTriggers();\n  }\n\n  function clearPopupTriggers() {\n    if (state.triggerTimer) {\n      window.clearTimeout(state.triggerTimer);\n      state.triggerTimer = null;\n    }\n\n    if (state.exitIntentHandler) {\n      document.documentElement.removeEventListener('mouseleave', state.exitIntentHandler);\n      state.exitIntentHandler = null;\n    }\n  }\n\n  function armPopupTriggers() {\n    if (state.hasOpened) return;\n\n    track('mma_scratch_popup_armed', {\n      popup_step: 'open',\n      delay_ms: getDelayMs()\n    });\n\n    state.triggerTimer = window.setTimeout(function() {\n      openPopupFromTrigger('delay_13s');\n    }, getDelayMs());\n\n    if (!isPreview() && config.exitIntentEnabled !== false) {\n      state.exitIntentHandler = function(event) {\n        if (state.hasOpened) return;\n        if (event.clientY > 8) return;\n        openPopupFromTrigger('exit_intent');\n      };\n      document.documentElement.addEventListener('mouseleave', state.exitIntentHandler);\n    }\n  }\n\n  async function openPopupFromTrigger(triggerName) {\n    if (state.hasOpened || state.isOpening || !shouldRun()) return;\n    state.isOpening = true;\n    try {\n      await assignScratchOfferArm();\n      if (state.hasOpened || !shouldRun()) return;\n      state.hasOpened = true;\n      sessionSet('mma_scratch_popup_session_opened_at', String(Date.now()));\n      clearPopupTriggers();\n      showPopup(triggerName);\n    } catch (error) {\n      trackSuppression('arm_assignment_failed', {\n        error_type: error && error.name ? error.name : 'assignment_failed'\n      });\n    } finally {\n      state.isOpening = false;\n    }\n  }\n\n  function showPopup(triggerName) {\n    if (!state.popup) buildMarkup();\n\n    state.mockSubmit = shouldMockSubmit();\n    state.lastFocused = document.activeElement;\n    state.previousBodyPaddingRight = document.body.style.paddingRight || '';\n\n    var scrollbarWidth = Math.max(0, window.innerWidth - document.documentElement.clientWidth);\n    if (scrollbarWidth) document.body.style.paddingRight = scrollbarWidth + 'px';\n\n    state.popup.hidden = false;\n    state.popup.setAttribute('aria-hidden', 'false');\n    document.documentElement.classList.add('mma-scratch-open');\n    showScreen('scratch');\n    state.dialog.focus();\n    startScratchIntro();\n\n    track('mma_scratch_popup_open', {\n      mock_submit: state.mockSubmit,\n      trigger: triggerName || 'unknown'\n    });\n  }\n\n  function startScratchIntro() {\n    if (!state.popup) return;\n\n    renderPrizeOffer();\n    var showcase = state.popup.querySelector('[data-mma-scratch-showcase]');\n    var scratchCard = state.popup.querySelector('[data-mma-scratch-card]');\n    var hint = state.popup.querySelector('[data-mma-scratch-hint]');\n    var claimButton = state.popup.querySelector('[data-mma-scratch-claim]');\n    var startButton = state.popup.querySelector('[data-mma-scratch-start]');\n    var title = state.popup.querySelector('#mmaScratchTitle');\n    var copyText = state.popup.querySelector('#mmaScratchCopy');\n\n    if (state.introTimer) {\n      window.clearTimeout(state.introTimer);\n      state.introTimer = null;\n    }\n\n    if (scratchCard) scratchCard.hidden = true;\n    if (hint) {\n      hint.hidden = true;\n      hint.textContent = '';\n    }\n    if (claimButton) {\n      claimButton.hidden = true;\n      claimButton.disabled = true;\n    }\n    if (title) title.textContent = config.copy.scratchTitle || '';\n    if (copyText) copyText.textContent = config.copy.scratchCopy || '';\n    if (startButton) {\n      startButton.hidden = false;\n      startButton.disabled = false;\n      startButton.textContent = config.copy.shuffleCta || 'Shuffle my card';\n    }\n\n    if (showcase) {\n      showcase.hidden = false;\n      showcase.classList.remove('is-shuffling');\n    }\n  }\n\n  function handleStartShuffle() {\n    if (!state.popup) return;\n\n    var showcase = state.popup.querySelector('[data-mma-scratch-showcase]');\n    var scratchCard = state.popup.querySelector('[data-mma-scratch-card]');\n    var hint = state.popup.querySelector('[data-mma-scratch-hint]');\n    var startButton = state.popup.querySelector('[data-mma-scratch-start]');\n    var title = state.popup.querySelector('#mmaScratchTitle');\n    var copyText = state.popup.querySelector('#mmaScratchCopy');\n    var reducedMotion = prefersReducedMotion();\n    var shuffleDelay = reducedMotion ? 0 : Number(config.shuffleDurationMs || 1900);\n\n    if (state.introTimer) {\n      window.clearTimeout(state.introTimer);\n      state.introTimer = null;\n    }\n\n    if (startButton) {\n      startButton.disabled = true;\n      startButton.textContent = config.copy.shuffleLoading || 'Shuffling...';\n    }\n    if (hint) {\n      hint.hidden = false;\n      hint.textContent = reducedMotion ? (config.copy.hintBefore || 'Scratch to reveal it.') : (config.copy.shuffleText || 'Shuffling your card...');\n    }\n    if (showcase && !reducedMotion) {\n      showcase.classList.add('is-shuffling');\n    }\n    track('mma_scratch_popup_shuffle_start', { popup_step: 'showcase' });\n\n    state.introTimer = window.setTimeout(function() {\n      if (showcase) {\n        showcase.classList.remove('is-shuffling');\n        showcase.hidden = true;\n      }\n      if (scratchCard) scratchCard.hidden = false;\n      if (hint) {\n        hint.hidden = false;\n        hint.textContent = config.copy.hintBefore || 'Scratch to reveal it.';\n      }\n      if (title) title.textContent = config.copy.scratchReadyTitle || config.copy.scratchTitle || '';\n      if (copyText) copyText.textContent = config.copy.scratchReadyCopy || config.copy.scratchCopy || '';\n      setupCanvas();\n      state.introTimer = null;\n    }, shuffleDelay);\n  }\n\n  function closePopup(reason) {\n    if (!state.popup || state.popup.hidden) return;\n\n    state.popup.hidden = true;\n    state.popup.setAttribute('aria-hidden', 'true');\n    document.documentElement.classList.remove('mma-scratch-open');\n    document.body.style.paddingRight = state.previousBodyPaddingRight;\n    clearPopupTriggers();\n    if (state.introTimer) {\n      window.clearTimeout(state.introTimer);\n      state.introTimer = null;\n    }\n\n    if (reason === 'dismiss') {\n      storageSet('mma_scratch_popup_dismissed_at', String(Date.now()));\n    }\n\n    if (state.lastFocused && typeof state.lastFocused.focus === 'function') {\n      try {\n        state.lastFocused.focus();\n      } catch (error) {}\n    }\n\n    track('mma_scratch_popup_close', { reason: reason || 'unknown' });\n  }\n\n  function showScreen(name) {\n    state.popup.setAttribute('data-active-screen', name);\n\n    state.popup.querySelectorAll('[data-screen]').forEach(function(screen) {\n      screen.hidden = screen.getAttribute('data-screen') !== name;\n    });\n\n    if (name === 'email') {\n      renderEmailScreenCopy();\n      track('mma_scratch_popup_email_view', { popup_step: 'email' });\n    }\n\n    if (name === 'success') {\n      renderSuccessScreenCopy();\n      renderClaimedOffer();\n      primeDiscountCode();\n      track('mma_scratch_popup_success_view', {\n        popup_step: 'success',\n        coupon_code: getActiveDiscountCode(),\n        coupon_expires_at: state.claimedOffer && state.claimedOffer.expiresAt\n      });\n    }\n  }\n\n  function renderEmailScreenCopy() {\n    var title = state.popup && state.popup.querySelector('[data-mma-scratch-email-title]');\n    var body = state.popup && state.popup.querySelector('[data-mma-scratch-email-copy]');\n    var button = state.popup && state.popup.querySelector('[data-mma-scratch-submit]');\n    if (title) title.textContent = getDynamicCopy(config.copy.emailTitle, 'CLAIM YOUR REWARD');\n    if (body) body.textContent = getDynamicCopy(config.copy.emailCopy, 'Enter your email and we will send the exact code there.');\n    if (button && !button.disabled) button.textContent = getDynamicCopy(config.copy.emailCta, 'Send my code');\n  }\n\n  function renderSuccessScreenCopy() {\n    var title = state.popup && state.popup.querySelector('[data-mma-scratch-success-title]');\n    var body = state.popup && state.popup.querySelector('[data-mma-scratch-success-copy]');\n    if (title) title.textContent = getDynamicCopy(config.copy.successTitle, 'YOUR CODE IS READY');\n    if (body) body.textContent = getDynamicCopy(config.copy.successCopy, 'We sent the code to your inbox and saved it for checkout. Add gear now, or copy the code and keep shopping.');\n  }\n\n  function setupCanvas() {\n    var rect = state.card.getBoundingClientRect();\n    var dpr = Math.min(window.devicePixelRatio || 1, 2);\n    state.canvas.width = Math.max(1, Math.round(rect.width * dpr));\n    state.canvas.height = Math.max(1, Math.round(rect.height * dpr));\n    state.canvas.style.width = rect.width + 'px';\n    state.canvas.style.height = rect.height + 'px';\n    state.ctx.setTransform(dpr, 0, 0, dpr, 0, 0);\n    drawScratchCover(rect.width, rect.height);\n    state.isRevealed = false;\n    state.card.classList.remove('is-revealed', 'is-scratching');\n\n    var claimButton = state.popup.querySelector('[data-mma-scratch-claim]');\n    claimButton.hidden = true;\n    claimButton.disabled = true;\n    var hint = state.popup.querySelector('[data-mma-scratch-hint]');\n    hint.hidden = false;\n    hint.textContent = config.copy.hintBefore || '';\n  }\n\n  function drawScratchCover(width, height) {\n    var ctx = state.ctx;\n    ctx.clearRect(0, 0, width, height);\n    ctx.globalCompositeOperation = 'source-over';\n\n    var gradient = ctx.createLinearGradient(0, 0, width, height);\n    gradient.addColorStop(0, '#c4a35a');\n    gradient.addColorStop(0.35, '#f2e4b8');\n    gradient.addColorStop(0.72, '#9b7d3e');\n    gradient.addColorStop(1, '#3a3a3a');\n\n    roundedRect(ctx, 0, 0, width, height, 8);\n    ctx.fillStyle = gradient;\n    ctx.fill();\n\n    ctx.save();\n    ctx.globalAlpha = 0.18;\n    ctx.strokeStyle = '#111111';\n    ctx.lineWidth = 1;\n    for (var x = -width; x < width * 2; x += 16) {\n      ctx.beginPath();\n      ctx.moveTo(x, height);\n      ctx.lineTo(x + height, 0);\n      ctx.stroke();\n    }\n    ctx.restore();\n\n    ctx.save();\n    ctx.fillStyle = 'rgba(13, 13, 13, 0.86)';\n    roundedRect(ctx, width * 0.15, height * 0.38, width * 0.7, height * 0.2, 6);\n    ctx.fill();\n    ctx.fillStyle = '#ffffff';\n    ctx.font = '900 ' + Math.max(15, width * 0.058) + 'px Impact, Arial Narrow, sans-serif';\n    ctx.textAlign = 'center';\n    ctx.textBaseline = 'middle';\n    ctx.fillText(config.coverScratchText || 'SCRATCH HERE', width / 2, height * 0.48);\n    ctx.restore();\n\n    setScratchProgressMask();\n  }\n\n  function roundedRect(ctx, x, y, width, height, radius) {\n    var r = Math.min(radius, width / 2, height / 2);\n    ctx.beginPath();\n    ctx.moveTo(x + r, y);\n    ctx.lineTo(x + width - r, y);\n    ctx.quadraticCurveTo(x + width, y, x + width, y + r);\n    ctx.lineTo(x + width, y + height - r);\n    ctx.quadraticCurveTo(x + width, y + height, x + width - r, y + height);\n    ctx.lineTo(x + r, y + height);\n    ctx.quadraticCurveTo(x, y + height, x, y + height - r);\n    ctx.lineTo(x, y + r);\n    ctx.quadraticCurveTo(x, y, x + r, y);\n    ctx.closePath();\n  }\n\n  function setScratchProgressMask() {\n    state.coverSampleAlphaIndexes = [];\n    try {\n      var pixels = state.ctx.getImageData(0, 0, state.canvas.width, state.canvas.height).data;\n      for (var i = 3; i < pixels.length; i += 16) {\n        if (pixels[i] > 24) state.coverSampleAlphaIndexes.push(i);\n      }\n    } catch (error) {\n      state.coverSampleAlphaIndexes = [];\n    }\n  }\n\n  function getCanvasPoint(event) {\n    var rect = state.canvas.getBoundingClientRect();\n    return {\n      x: event.clientX - rect.left,\n      y: event.clientY - rect.top\n    };\n  }\n\n  function scratchAt(point) {\n    if (state.isRevealed) return;\n    var ctx = state.ctx;\n    ctx.save();\n    ctx.globalCompositeOperation = 'destination-out';\n    ctx.beginPath();\n    ctx.arc(point.x, point.y, Number(config.scratchRadius || 28), 0, Math.PI * 2);\n    ctx.fill();\n    ctx.restore();\n  }\n\n  function scratchBetween(fromPoint, toPoint) {\n    if (state.isRevealed || !fromPoint || !toPoint) return;\n    var ctx = state.ctx;\n    ctx.save();\n    ctx.globalCompositeOperation = 'destination-out';\n    ctx.lineCap = 'round';\n    ctx.lineJoin = 'round';\n    ctx.lineWidth = Number(config.scratchRadius || 28) * 2.2;\n    ctx.beginPath();\n    ctx.moveTo(fromPoint.x, fromPoint.y);\n    ctx.lineTo(toPoint.x, toPoint.y);\n    ctx.stroke();\n    ctx.restore();\n  }\n\n  function handlePointerDown(event) {\n    if (state.isRevealed) return;\n    state.isDrawing = true;\n    state.card.classList.add('is-scratching');\n    try {\n      state.canvas.setPointerCapture(event.pointerId);\n    } catch (error) {}\n    state.lastPoint = getCanvasPoint(event);\n    scratchAt(state.lastPoint);\n    updateProgress();\n    event.preventDefault();\n  }\n\n  function handlePointerMove(event) {\n    if (!state.isDrawing || state.isRevealed) return;\n    var nextPoint = getCanvasPoint(event);\n    scratchBetween(state.lastPoint, nextPoint);\n    scratchAt(nextPoint);\n    state.lastPoint = nextPoint;\n    updateProgress();\n    event.preventDefault();\n  }\n\n  function handlePointerEnd() {\n    if (!state.isDrawing) return;\n    state.isDrawing = false;\n    state.lastPoint = null;\n    updateProgress();\n  }\n\n  function getScratchProgress() {\n    var pixels;\n    try {\n      pixels = state.ctx.getImageData(0, 0, state.canvas.width, state.canvas.height).data;\n    } catch (error) {\n      state.popup.querySelector('[data-mma-scratch-reveal]').hidden = false;\n      return 0;\n    }\n\n    var indexes = state.coverSampleAlphaIndexes || [];\n    if (!indexes.length) return 0;\n\n    var transparent = 0;\n    for (var index = 0; index < indexes.length; index += 1) {\n      if (pixels[indexes[index]] < 24) transparent += 1;\n    }\n\n    return transparent / indexes.length;\n  }\n\n  function updateProgress() {\n    if (state.isRevealed) return;\n\n    var progress = getScratchProgress();\n    if (progress >= Number(config.scratchRevealThreshold || 0.34)) {\n      revealScratchCard(false);\n      return;\n    }\n\n    var hint = state.popup.querySelector('[data-mma-scratch-hint]');\n    hint.hidden = false;\n    hint.textContent = progress > 0.12\n      ? (config.copy.hintWhile || '')\n      : (config.copy.hintContinue || config.copy.hintBefore || '');\n  }\n\n  function clearScratchCover() {\n    if (!state.ctx || !state.canvas) return;\n    state.ctx.save();\n    state.ctx.setTransform(1, 0, 0, 1, 0, 0);\n    state.ctx.clearRect(0, 0, state.canvas.width, state.canvas.height);\n    state.ctx.restore();\n  }\n\n  function revealScratchCard(fromFallback) {\n    if (state.isRevealed) return;\n    state.isRevealed = true;\n    state.card.classList.remove('is-scratching');\n    state.card.classList.add('is-revealed');\n    clearScratchCover();\n\n    var claimButton = state.popup.querySelector('[data-mma-scratch-claim]');\n    claimButton.hidden = false;\n    claimButton.disabled = false;\n    var hint = state.popup.querySelector('[data-mma-scratch-hint]');\n    var revealedHint = config.copy.hintRevealed || '';\n    hint.textContent = revealedHint;\n    hint.hidden = !revealedHint;\n    track('mma_scratch_popup_reveal', { fallback_reveal: !!fromFallback });\n  }\n\n  async function handleSubmit(event) {\n    event.preventDefault();\n\n    var form = event.currentTarget;\n    var input = form.querySelector('input[name=\"email\"]');\n    var error = form.querySelector('[data-mma-scratch-error]');\n    var button = form.querySelector('[data-mma-scratch-submit]');\n    var email = String(input.value || '').trim().toLowerCase();\n\n    error.textContent = '';\n    if (!validateEmail(email)) {\n      error.textContent = config.copy.emailInvalid || '';\n      input.focus();\n      track('mma_scratch_popup_email_invalid', { popup_step: 'email' });\n      return;\n    }\n\n    button.disabled = true;\n    button.textContent = config.copy.emailLoading || '';\n    track('mma_scratch_popup_email_submit', {\n      popup_step: 'email',\n      mock_submit: state.mockSubmit\n    });\n\n    try {\n      state.claimedEmail = email;\n      state.claimedOffer = state.mockSubmit ? buildMockOffer() : await claimScratchOffer(email);\n      storageSet('mma_scratch_popup_submitted_at', String(Date.now()));\n      if (window.MmaBlackjackCheckout && typeof window.MmaBlackjackCheckout.setEmail === 'function') {\n        window.MmaBlackjackCheckout.setEmail(email);\n      } else {\n        sessionSet(CHECKOUT_EMAIL_KEY, email);\n      }\n      if (state.claimedOffer && state.claimedOffer.klaviyoSubscribed === true) {\n        identifyAndTrackKlaviyo(email, state.claimedOffer, getProfileProperties(state.claimedOffer));\n      } else {\n        subscribeKlaviyoClient(email, state.claimedOffer).catch(function(errorResponse) {\n          identifyAndTrackKlaviyo(email, state.claimedOffer, getProfileProperties(state.claimedOffer));\n          track('mma_scratch_popup_client_klaviyo_error', {\n            popup_step: 'email',\n            coupon_code: state.claimedOffer && state.claimedOffer.code,\n            error_type: errorResponse && errorResponse.name ? errorResponse.name : 'client_klaviyo_failed'\n          });\n        });\n      }\n\n      track('mma_scratch_popup_email_success', {\n        popup_step: 'email',\n        mock_submit: state.mockSubmit,\n        coupon_code: state.claimedOffer.code,\n        coupon_expires_at: state.claimedOffer.expiresAt\n      });\n      trackLeadConversion(state.claimedOffer);\n      trackTripleWhaleContact(email);\n      await persistCartAttribution(state.claimedOffer).catch(function(errorResponse) {\n        track('mma_scratch_popup_cart_attribution_error', {\n          popup_step: 'success',\n          coupon_code: state.claimedOffer && state.claimedOffer.code,\n          error_type: errorResponse && errorResponse.name ? errorResponse.name : 'cart_attribution_failed'\n        });\n      });\n      showScreen('success');\n\n      var shopButton = state.popup.querySelector('[data-mma-scratch-shop]');\n      if (shopButton) shopButton.focus();\n    } catch (errorResponse) {\n      error.textContent = config.copy.emailError || '';\n      track('mma_scratch_popup_email_error', {\n        popup_step: 'email',\n        mock_submit: state.mockSubmit,\n        error_type: errorResponse && errorResponse.name ? errorResponse.name : 'submit_failed'\n      });\n    } finally {\n      button.disabled = false;\n      button.textContent = getDynamicCopy(config.copy.emailCta, 'Send my code');\n    }\n  }\n\n  function renderClaimedOffer() {\n    var offer = state.claimedOffer || (state.mockSubmit ? buildMockOffer() : buildOffer());\n    var codeNode = state.popup.querySelector('[data-mma-scratch-code]');\n    var expiryNode = state.popup.querySelector('[data-mma-scratch-expiry]');\n    if (codeNode) codeNode.textContent = offer.code;\n    if (expiryNode) expiryNode.textContent = buildExpiryLine(offer);\n    refreshSuccessLinks();\n  }\n\n  function getCurrentProductVariantId(fallbackVariantId) {\n    var selector = [\n      'form[action*=\"/cart/add\"] input[name=\"id\"]:not([disabled])',\n      'form[action*=\"/cart/add\"] select[name=\"id\"]',\n      'input[name=\"id\"][form]',\n      'select[name=\"id\"][form]'\n    ].join(',');\n\n    var field = document.querySelector(selector);\n    var value = field && field.value ? String(field.value).trim() : '';\n    return value || String(fallbackVariantId || '').trim();\n  }\n\n  function setStatus(message, isError) {\n    var status = state.popup && state.popup.querySelector('[data-mma-scratch-status]');\n    if (!status) return;\n    status.textContent = message || '';\n    status.classList.toggle('is-error', !!isError);\n  }\n\n  function goToPath(redirectPath) {\n    window.location.href = redirectPath || config.redirectPath || '/collections/boxing-gloves';\n  }\n\n  function openCartDrawer() {\n    try {\n      if (window.MMACartDrawer && typeof window.MMACartDrawer.open === 'function') {\n        window.MMACartDrawer.open();\n        return true;\n      }\n    } catch (error) {}\n\n    var opener = document.querySelector('[data-mma-cart-open]');\n    if (opener && typeof opener.click === 'function') {\n      opener.click();\n      return true;\n    }\n\n    var drawerRoot = document.querySelector('[data-mma-cart-drawer]');\n    if (drawerRoot) {\n      try {\n        document.dispatchEvent(new CustomEvent('ajaxProduct:added', {\n          detail: {\n            source: 'scratch_popup'\n          }\n        }));\n        return true;\n      } catch (error) {}\n    }\n\n    return false;\n  }\n\n  async function handleAddWithCode(event) {\n    event.preventDefault();\n\n    var button = event.currentTarget;\n    var originalText = button.textContent;\n    var fallbackVariantId = button.getAttribute('data-mma-scratch-add-variant');\n    var isCurrentProduct = button.hasAttribute('data-mma-scratch-add-current-product');\n    var productCard = button.closest('[data-mma-scratch-rec]');\n    var selectedVariantId = productCard && productCard.getAttribute('data-mma-scratch-selected-variant');\n    var hasPopupOptions = productCard && productCard.querySelector('[data-mma-scratch-option-index]');\n    var variantId = String(selectedVariantId || fallbackVariantId || '').trim();\n    if (isCurrentProduct && !hasPopupOptions) variantId = getCurrentProductVariantId(fallbackVariantId);\n    var productLink = productCard && productCard.querySelector('[data-mma-scratch-product-link]');\n    var fallbackPath = productLink && productLink.getAttribute('data-redirect-path');\n    var activeOffer = getActiveOffer();\n\n    if (!variantId) {\n      goToDiscountPath(fallbackPath || config.redirectPath);\n      return;\n    }\n\n    button.disabled = true;\n    button.setAttribute('data-mma-scratch-loading', 'true');\n    button.textContent = config.copy.addLoading || 'Adding...';\n    setStatus('');\n\n    track('mma_scratch_popup_add_to_cart_click', {\n      popup_step: 'success',\n      coupon_code: getActiveDiscountCode(),\n      variant_id: variantId,\n      current_product: !!isCurrentProduct\n    });\n\n    try {\n      if (isLocalHost() && state.mockSubmit) {\n        setStatus('Preview mode: live theme adds this to cart and carries the code into checkout.');\n        button.disabled = false;\n        button.removeAttribute('data-mma-scratch-loading');\n        button.textContent = originalText;\n        return;\n      }\n\n      var response = await fetch(storefrontRoute('/cart/add.js'), {\n        method: 'POST',\n        credentials: 'include',\n        headers: {\n          'Content-Type': 'application/json',\n          accept: 'application/json'\n        },\n        body: JSON.stringify({\n          id: Number(variantId) || variantId,\n          quantity: 1,\n          properties: compactObject({\n            _scratch_popup: '1',\n            _scratch_popup_code: getActiveDiscountCode(),\n            _scratch_popup_claim_id: state.claimedOffer && state.claimedOffer.claimId ? state.claimedOffer.claimId : buildClaimId(),\n            _scratch_popup_offer_type: activeOffer.offerType,\n            _scratch_popup_offer_variant: activeOffer.popupOfferVariant,\n            _scratch_popup_offer_arm: activeOffer.arm,\n            _scratch_popup_coupon_name: activeOffer.couponName,\n            _scratch_popup_coupon_prefix: activeOffer.couponCodePrefix,\n            _scratch_popup_source: config.source,\n            _scratch_popup_session_id: getPopupSessionId()\n          })\n        })\n      });\n\n      if (!response.ok) throw new Error('cart_add_failed');\n\n      track('mma_scratch_popup_add_to_cart_success', {\n        popup_step: 'success',\n        coupon_code: getActiveDiscountCode(),\n        variant_id: variantId\n      });\n\n      primeDiscountCode();\n\n      var drawerOpened = openCartDrawer();\n      track('mma_scratch_popup_cart_drawer_open', {\n        popup_step: 'success',\n        coupon_code: getActiveDiscountCode(),\n        variant_id: variantId,\n        opened: drawerOpened\n      });\n\n      if (drawerOpened) {\n        closePopup('cart_drawer');\n      } else {\n        goToDiscountPath('/cart');\n      }\n    } catch (error) {\n      setStatus(config.copy.addError || '', true);\n      track('mma_scratch_popup_add_to_cart_error', {\n        popup_step: 'success',\n        coupon_code: getActiveDiscountCode(),\n        variant_id: variantId,\n        error_type: error && error.name ? error.name : 'cart_add_failed'\n      });\n      button.disabled = false;\n      button.removeAttribute('data-mma-scratch-loading');\n      button.textContent = originalText;\n    }\n  }\n\n  function handleCodeCopy(event) {\n    var button = event.currentTarget;\n    var code = getActiveDiscountCode();\n\n    function markCopied() {\n      button.textContent = config.copy.copiedCode || 'Copied';\n      window.setTimeout(function() {\n        button.textContent = config.copy.copyCode || 'Copy code';\n      }, 1600);\n    }\n\n    if (navigator.clipboard && navigator.clipboard.writeText) {\n      navigator.clipboard.writeText(code).then(markCopied).catch(function() {});\n    } else {\n      var input = document.createElement('input');\n      input.value = code;\n      document.body.appendChild(input);\n      input.select();\n      try {\n        document.execCommand('copy');\n        markCopied();\n      } catch (error) {}\n      document.body.removeChild(input);\n    }\n\n    track('mma_scratch_popup_copy_code', {\n      popup_step: 'success',\n      coupon_code: code\n    });\n  }\n\n  function handleKeydown(event) {\n    if (!state.popup || state.popup.hidden) return;\n\n    if (event.key === 'Escape') {\n      event.preventDefault();\n      return;\n    }\n\n    if (event.key !== 'Tab') return;\n\n    var focusable = state.popup.querySelectorAll('a[href], button:not([disabled]), input:not([disabled]), [tabindex]:not([tabindex=\"-1\"])');\n    if (!focusable.length) return;\n\n    var first = focusable[0];\n    var last = focusable[focusable.length - 1];\n\n    if (event.shiftKey && document.activeElement === first) {\n      event.preventDefault();\n      last.focus();\n    } else if (!event.shiftKey && document.activeElement === last) {\n      event.preventDefault();\n      first.focus();\n    }\n  }\n\n  function handleResize() {\n    if (!state.popup || state.popup.hidden || !state.canvas) return;\n    window.clearTimeout(state.resizeTimer);\n    state.resizeTimer = window.setTimeout(function() {\n      if (state.card && state.card.hidden) return;\n      if (!state.isRevealed) setupCanvas();\n    }, 120);\n  }\n\n  function init() {\n    if (!shouldRun()) return;\n    getPopupSessionId();\n    getLandingPath();\n    suppressNativeKlaviyoForms();\n    armPopupWhenEligible();\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', init, { once: true });\n  } else {\n    init();\n  }\n})();\n"],
  "mappings": "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",
  "names": []
}
