{
  "version": 3,
  "sources": ["/cdn/shop/t/42/assets/dg-offer-popup.js?dg=m5"],
  "sourcesContent": ["(function () {\r\n  if (window.__DG_OFFER_BOOTED) return;\r\n  window.__DG_OFFER_BOOTED = true;\r\n\r\n  const root = document.querySelector('[data-dg-offer]');\r\n  if (!root) return;\r\n\r\n  const overlay = root.querySelector('[data-dg-offer-overlay]');\r\n  const dialog = root.querySelector('[data-dg-offer-dialog]');\r\n  const form = root.querySelector('.dg-offer__form');\r\n  const emailInput = root.querySelector('[data-dg-offer-email]');\r\n  const errorEl = root.querySelector('[data-dg-offer-error]');\r\n  const captureView = root.querySelector('[data-dg-offer-capture]');\r\n  const successView = root.querySelector('[data-dg-offer-success]');\r\n  const bubble = root.querySelector('[data-dg-offer-bubble]');\r\n  const popupTimers = root.querySelectorAll('[data-dg-offer-countdown]');\r\n  const bubbleTime = root.querySelector('[data-dg-offer-bubble-time]');\r\n  const submitBtn = root.querySelector('.dg-offer__submit');\r\n\r\n  const delayMs = Number(root.dataset.delayMs || 8000);\r\n  const timerMs = Number(root.dataset.timerMs || 600000);\r\n  const code = (root.dataset.discountCode || '').trim();\r\n  const storageKey = root.dataset.storageKey || 'cb-offer-v1';\r\n  const sessionKey = storageKey + ':session';\r\n  const dismissDays = Number(root.dataset.dismissDays || 7);\r\n  const everyLoad = root.dataset.everyLoad === 'true';\r\n  const forceTest = /(?:\\?|&)cb_offer=1(?:&|$)/.test(window.location.search || '');\r\n  // Test modes ignore the session/claimed locks so a refresh always re-opens the popup.\r\n  const bypassSuppression = forceTest || everyLoad;\r\n  const coarsePointer = window.matchMedia && window.matchMedia('(pointer: coarse)').matches;\r\n  const page = (window.__DG_OFFER = window.__DG_OFFER || {});\r\n\r\n  let ticker = null;\r\n  let lastFocus = null;\r\n  let timeoutId = null;\r\n\r\n  function readState() {\r\n    try {\r\n      return JSON.parse(localStorage.getItem(storageKey) || '{}');\r\n    } catch (err) {\r\n      return {};\r\n    }\r\n  }\r\n\r\n  function writeState(next) {\r\n    try {\r\n      localStorage.setItem(storageKey, JSON.stringify(next));\r\n    } catch (err) {}\r\n  }\r\n\r\n  function readSessionDone() {\r\n    try {\r\n      return sessionStorage.getItem(sessionKey) === '1';\r\n    } catch (err) {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  function markSessionDone() {\r\n    try {\r\n      sessionStorage.setItem(sessionKey, '1');\r\n    } catch (err) {}\r\n    page.closed = true;\r\n    page.shown = true;\r\n  }\r\n\r\n  function pageLocked() {\r\n    return page.shown === true || page.closed === true || readSessionDone();\r\n  }\r\n\r\n  function lockPage() {\r\n    page.shown = true;\r\n  }\r\n\r\n  function clearOpenTimer() {\r\n    if (timeoutId) {\r\n      window.clearTimeout(timeoutId);\r\n      timeoutId = null;\r\n    }\r\n  }\r\n\r\n  function formatTime(ms) {\r\n    const total = Math.max(0, Math.ceil(ms / 1000));\r\n    const m = Math.floor(total / 60);\r\n    const s = total % 60;\r\n    return String(m).padStart(2, '0') + ':' + String(s).padStart(2, '0');\r\n  }\r\n\r\n  function remainingMs(state) {\r\n    if (!state.endsAt) return 0;\r\n    return state.endsAt - Date.now();\r\n  }\r\n\r\n  function expireBubble(state) {\r\n    hideBubble();\r\n    writeState(Object.assign(state || readState(), { bubbleHidden: true }));\r\n    if (ticker) {\r\n      clearInterval(ticker);\r\n      ticker = null;\r\n    }\r\n  }\r\n\r\n  function updateTimers(state) {\r\n    const left = remainingMs(state);\r\n    if (left <= 0 && state.claimed) {\r\n      popupTimers.forEach(function (el) {\r\n        el.textContent = '00:00';\r\n      });\r\n      expireBubble(state);\r\n      return;\r\n    }\r\n    const label = formatTime(left);\r\n    popupTimers.forEach(function (el) {\r\n      el.textContent = label;\r\n    });\r\n    if (bubbleTime) bubbleTime.textContent = label;\r\n  }\r\n\r\n  function startTicker(state) {\r\n    if (ticker) clearInterval(ticker);\r\n    updateTimers(state);\r\n    if (remainingMs(state) <= 0) return;\r\n    ticker = setInterval(function () {\r\n      updateTimers(readState());\r\n    }, 1000);\r\n  }\r\n\r\n  function openPopup(view) {\r\n    if (!overlay) return;\r\n    if (view === 'capture') lockPage();\r\n    lastFocus = document.activeElement;\r\n    overlay.hidden = false;\r\n    document.body.style.overflow = 'hidden';\r\n    if (view === 'success') {\r\n      captureView.hidden = true;\r\n      successView.hidden = false;\r\n      const continueBtn = dialog && dialog.querySelector('[data-dg-offer-continue]');\r\n      if (continueBtn) continueBtn.focus();\r\n      return;\r\n    }\r\n    captureView.hidden = false;\r\n    successView.hidden = true;\r\n    if (emailInput && !coarsePointer) emailInput.focus();\r\n  }\r\n\r\n  function closePopup() {\r\n    if (!overlay) return;\r\n    overlay.hidden = true;\r\n    document.body.style.overflow = '';\r\n    if (lastFocus && typeof lastFocus.focus === 'function') lastFocus.focus();\r\n  }\r\n\r\n  function showBubble() {\r\n    if (!bubble) return;\r\n    bubble.hidden = false;\r\n  }\r\n\r\n  function hideBubble() {\r\n    if (!bubble) return;\r\n    bubble.hidden = true;\r\n  }\r\n\r\n  async function applyDiscount() {\r\n    if (!code) return;\r\n    try {\r\n      await fetch('/discount/' + encodeURIComponent(code), {\r\n        credentials: 'same-origin',\r\n        redirect: 'manual',\r\n      });\r\n    } catch (err) {}\r\n    try {\r\n      await fetch('/cart/update.js', {\r\n        method: 'POST',\r\n        headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\r\n        credentials: 'same-origin',\r\n        body: JSON.stringify({ discount: code }),\r\n      });\r\n    } catch (err) {}\r\n    document.dispatchEvent(new CustomEvent('cart:refresh'));\r\n  }\r\n\r\n  async function submitEmail(event) {\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n    if (typeof event.stopImmediatePropagation === 'function') event.stopImmediatePropagation();\r\n    if (!form || !emailInput) return;\r\n    const email = emailInput.value.trim();\r\n    if (!email) {\r\n      if (errorEl) {\r\n        errorEl.hidden = false;\r\n        errorEl.textContent = 'Enter your email to unlock the discount.';\r\n      }\r\n      emailInput.focus();\r\n      return;\r\n    }\r\n    if (errorEl) errorEl.hidden = true;\r\n    if (submitBtn) submitBtn.disabled = true;\r\n\r\n    // Lock immediately so the modal cannot re-open while the request runs.\r\n    clearOpenTimer();\r\n    markSessionDone();\r\n\r\n    try {\r\n      const body = new FormData(form);\r\n      await fetch(form.action || '/contact', {\r\n        method: 'POST',\r\n        body: body,\r\n        credentials: 'same-origin',\r\n        headers: { Accept: 'application/json' },\r\n      });\r\n    } catch (err) {}\r\n\r\n    await applyDiscount();\r\n\r\n    const next = Object.assign(readState(), {\r\n      claimed: true,\r\n      claimedAt: Date.now(),\r\n      endsAt: Date.now() + timerMs,\r\n      bubbleHidden: false,\r\n      dismissedAt: Date.now(),\r\n    });\r\n    writeState(next);\r\n    startTicker(next);\r\n    openPopup('success');\r\n    if (submitBtn) submitBtn.disabled = false;\r\n  }\r\n\r\n  function dismissOffer() {\r\n    clearOpenTimer();\r\n    markSessionDone();\r\n    const state = readState();\r\n    if (!state.claimed) {\r\n      writeState(Object.assign(state, { dismissedAt: Date.now() }));\r\n    }\r\n    closePopup();\r\n    if (state.claimed && !state.bubbleHidden) showBubble();\r\n  }\r\n\r\n  function dismissBubble() {\r\n    writeState(Object.assign(readState(), { bubbleHidden: true }));\r\n    hideBubble();\r\n  }\r\n\r\n  function shouldShowPopup(state) {\r\n    // Test modes always allow one open; otherwise closed/signed-up never re-opens.\r\n    if (bypassSuppression) return true;\r\n    if (pageLocked()) return false;\r\n    if (readSessionDone()) return false;\r\n    if (state.claimed) return false;\r\n    if (!state.dismissedAt) return true;\r\n    return Date.now() - state.dismissedAt > dismissDays * 24 * 60 * 60 * 1000;\r\n  }\r\n\r\n  if (overlay) {\r\n    overlay.addEventListener('click', function (event) {\r\n      if (event.target === overlay) dismissOffer();\r\n    });\r\n  }\r\n  root.querySelectorAll('[data-dg-offer-close]').forEach(function (btn) {\r\n    btn.addEventListener('click', function (event) {\r\n      event.preventDefault();\r\n      event.stopPropagation();\r\n      dismissOffer();\r\n    });\r\n  });\r\n  if (form) {\r\n    form.addEventListener('submit', submitEmail);\r\n    form.setAttribute('novalidate', 'novalidate');\r\n  }\r\n  if (bubble) {\r\n    const closeBubble = bubble.querySelector('[data-dg-offer-bubble-close]');\r\n    if (closeBubble) closeBubble.addEventListener('click', dismissBubble);\r\n  }\r\n  document.addEventListener('keydown', function (event) {\r\n    if (event.key === 'Escape' && overlay && !overlay.hidden) dismissOffer();\r\n  });\r\n\r\n  const state = readState();\r\n  if (state.claimed && remainingMs(state) > 0 && !state.bubbleHidden) {\r\n    startTicker(state);\r\n    showBubble();\r\n  }\r\n  if (!shouldShowPopup(state)) return;\r\n\r\n  const wait = forceTest || (window.Shopify && Shopify.designMode) ? 400 : delayMs;\r\n  timeoutId = window.setTimeout(function () {\r\n    timeoutId = null;\r\n    if (!bypassSuppression && pageLocked()) return;\r\n    if (!bypassSuppression && readState().claimed) return;\r\n    if (!bypassSuppression && readSessionDone()) return;\r\n    lockPage();\r\n    openPopup('capture');\r\n  }, wait);\r\n})();\r\n"],
  "mappings": "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",
  "names": ["state"]
}
