{
  "version": 3,
  "sources": ["/cdn/shop/t/19/assets/cm-newsletter-popup.js?cb=1778971787N"],
  "sourcesContent": ["/* ============================================================\n   Camera Market \u00B7 Newsletter popup \u00B7 v2\n   - Triggers: exit-intent + scroll % + delay\n   - Imagen: PDP usa src ya inyectado por Liquid; resto picks random\n     desde JSON #cm-popup-pool, opcional rotaci\u00F3n cada N ms\n   - Submit AJAX a /contact\n   ============================================================ */\n(function () {\n  'use strict';\n\n  const overlay = document.querySelector('.cm-popup-overlay[data-cm-popup]');\n  if (!overlay) return;\n\n  if (document.body.dataset.cmCustomerSubscribed === 'true') return;\n\n  const cfg = {\n    delay:      parseInt(overlay.dataset.delaySeconds || '25', 10) * 1000,\n    scrollPct:  parseInt(overlay.dataset.scrollThreshold || '60', 10),\n    cookieDays: parseInt(overlay.dataset.cookieDays || '14', 10),\n    rotateMs:   parseInt(overlay.dataset.rotateMs || '4000', 10),\n    cookieName: 'cm_popup_seen',\n  };\n\n  // \u2500\u2500 localStorage cooldown \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  function readSeen() {\n    try {\n      const v = localStorage.getItem(cfg.cookieName);\n      return v && parseInt(v, 10) > Date.now();\n    } catch (_) { return false; }\n  }\n  function markSeen() {\n    try {\n      localStorage.setItem(cfg.cookieName, String(Date.now() + cfg.cookieDays * 86400000));\n    } catch (_) {}\n  }\n\n  const params = new URLSearchParams(location.search);\n  if (params.get('utm_source') === 'email') return;\n  if (readSeen() && !params.has('cm_popup_force')) return;\n\n  // \u2500\u2500 Pool de im\u00E1genes \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const imgEl = overlay.querySelector('[data-popup-image]');\n  const tagEl = overlay.querySelector('[data-popup-tag]');\n  let pool = [];\n  let poolIdx = 0;\n  let rotationTimer = null;\n\n  const poolNode = document.getElementById('cm-popup-pool');\n  if (poolNode) {\n    try {\n      pool = JSON.parse(poolNode.textContent) || [];\n    } catch (_) { pool = []; }\n  }\n\n  function applyImage(item, animate) {\n    if (!item || !item.image || !imgEl) return;\n    if (animate) {\n      imgEl.style.transition = 'opacity .35s ease';\n      imgEl.style.opacity = '0';\n      setTimeout(() => {\n        imgEl.src = item.image;\n        if (item.label) imgEl.alt = item.label;\n        if (tagEl && item.label) tagEl.textContent = item.label;\n        imgEl.onload = () => { imgEl.style.opacity = '1'; };\n        // Failsafe: si no dispara onload en 600 ms, forzamos visible\n        setTimeout(() => { imgEl.style.opacity = '1'; }, 600);\n      }, 350);\n    } else {\n      imgEl.src = item.image;\n      if (item.label) imgEl.alt = item.label;\n      if (tagEl && item.label) tagEl.textContent = item.label;\n      imgEl.style.opacity = '1';\n    }\n  }\n\n  function pickRandomInitial() {\n    if (!pool.length) return;\n    poolIdx = Math.floor(Math.random() * pool.length);\n    applyImage(pool[poolIdx], false);\n  }\n\n  function startRotation() {\n    if (rotationTimer) return;\n    if (!pool.length || pool.length < 2 || cfg.rotateMs < 500) return;\n    rotationTimer = setInterval(() => {\n      poolIdx = (poolIdx + 1) % pool.length;\n      applyImage(pool[poolIdx], true);\n    }, cfg.rotateMs);\n  }\n  function stopRotation() {\n    if (rotationTimer) { clearInterval(rotationTimer); rotationTimer = null; }\n  }\n\n  // Si el img ya tiene src real (PDP), resp\u00E9talo. Si no, pickear del pool.\n  const hasRealImage = imgEl && imgEl.getAttribute('src') && imgEl.getAttribute('src').length > 4;\n  if (!hasRealImage) {\n    pickRandomInitial();\n  } else {\n    if (imgEl) imgEl.style.opacity = '1';\n  }\n\n  // \u2500\u2500 State machine \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const popup = overlay.querySelector('.cm-popup');\n  let lastFocus = null;\n  let opened = false;\n  let openedAt = 0;\n\n  // Grace period: ignoramos cualquier trigger durante los primeros BOOT_MS\n  // para evitar abrir el popup por scroll-restore, mouse fuera del viewport\n  // al cargar, o cualquier evento residual del page load.\n  const BOOT_MS = 1500;\n  const bootStart = Date.now();\n  const isBooting = () => (Date.now() - bootStart) < BOOT_MS;\n\n  // El user tiene que haber interactuado (mousemove / scroll real / touch)\n  // antes de que valoremos exit-intent o scroll-threshold.\n  let userInteracted = false;\n  ['mousemove', 'pointermove', 'touchstart', 'wheel', 'keydown'].forEach(evt => {\n    window.addEventListener(evt, () => { userInteracted = true; }, { once: true, passive: true });\n  });\n\n  function open(source) {\n    if (opened) return;\n    if (isBooting() && source !== 'force') return;\n    opened = true;\n    openedAt = Date.now();\n    lastFocus = document.activeElement;\n    // Display:flex primero (era display:none inline para evitar FOUC),\n    // luego en el siguiente frame el data-open dispara la transici\u00F3n.\n    overlay.style.display = 'flex';\n    requestAnimationFrame(() => {\n      overlay.setAttribute('data-open', 'true');\n      overlay.removeAttribute('aria-hidden');\n      document.documentElement.style.overflow = 'hidden';\n      if (!hasRealImage) startRotation();\n      const target = popup.querySelector('.cm-popup-input');\n      if (target) target.focus({ preventScroll: true });\n    });\n    cleanupTriggers();\n  }\n  function close() {\n    if (!opened) return;\n    if (Date.now() - openedAt < 400) return;\n    opened = false;\n    overlay.setAttribute('data-open', 'false');\n    overlay.setAttribute('aria-hidden', 'true');\n    document.documentElement.style.overflow = '';\n    stopRotation();\n    markSeen();\n    // Tras la transici\u00F3n (250ms), retiramos del flujo con display:none\n    setTimeout(() => {\n      if (!opened) overlay.style.display = 'none';\n    }, 300);\n    if (lastFocus && typeof lastFocus.focus === 'function') {\n      try { lastFocus.focus({ preventScroll: true }); } catch (_) {}\n    }\n  }\n\n  // \u2500\u2500 Triggers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const triggers = [];\n  function addTrigger(target, evt, handler, opts) {\n    target.addEventListener(evt, handler, opts);\n    triggers.push(() => target.removeEventListener(evt, handler, opts));\n  }\n  function cleanupTriggers() {\n    while (triggers.length) triggers.pop()();\n  }\n\n  // Exit intent solo en desktop con puntero fino y tras interacci\u00F3n real\n  if (window.matchMedia('(pointer: fine) and (min-width: 768px)').matches) {\n    addTrigger(document, 'mouseout', function (e) {\n      if (!userInteracted) return;\n      if (!e.relatedTarget && e.clientY < 10) open('exit');\n    });\n  }\n  // Scroll threshold \u2014 ignoramos hasta que haya interacci\u00F3n real\n  let firstScrollSeen = false;\n  addTrigger(window, 'scroll', function () {\n    if (!firstScrollSeen) { firstScrollSeen = true; return; }\n    if (!userInteracted) return;\n    const max = document.documentElement.scrollHeight - window.innerHeight;\n    if (max <= 0) return;\n    const pct = (window.scrollY / max) * 100;\n    if (pct >= cfg.scrollPct) open('scroll');\n  }, { passive: true });\n  // Time delay fallback\n  const delayTimer = setTimeout(() => open('delay'), cfg.delay);\n  triggers.push(() => clearTimeout(delayTimer));\n  // Force flag para debug\n  if (params.has('cm_popup_force')) setTimeout(() => open('force'), 200);\n\n  // \u2500\u2500 Close handlers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  overlay.querySelectorAll('[data-close]').forEach(el => {\n    el.addEventListener('click', close);\n  });\n  overlay.addEventListener('click', function (e) {\n    if (e.target === overlay) close();\n  });\n\n  // \u2500\u2500 ESC + focus trap \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  document.addEventListener('keydown', function (e) {\n    if (!opened) return;\n    if (e.key === 'Escape') { e.preventDefault(); close(); return; }\n    if (e.key === 'Tab') {\n      const focusables = popup.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])');\n      const visibles = Array.from(focusables).filter(el => el.offsetParent !== null && !el.disabled);\n      if (!visibles.length) return;\n      const first = visibles[0];\n      const last  = visibles[visibles.length - 1];\n      if (e.shiftKey && document.activeElement === first) { last.focus(); e.preventDefault(); }\n      else if (!e.shiftKey && document.activeElement === last) { first.focus(); e.preventDefault(); }\n    }\n  });\n\n  // \u2500\u2500 Submit AJAX a /contact \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n  const form = popup.querySelector('form[data-form]');\n  if (form) {\n    form.addEventListener('submit', async function (e) {\n      e.preventDefault();\n      const input = form.querySelector('input[type=\"email\"]');\n      const cta   = form.querySelector('.cm-popup-cta');\n      const email = (input.value || '').trim();\n\n      input.removeAttribute('aria-invalid');\n      popup.removeAttribute('data-state');\n      if (!email || !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(email)) {\n        input.setAttribute('aria-invalid', 'true');\n        popup.setAttribute('data-state', 'error');\n        input.focus();\n        return;\n      }\n\n      cta.disabled = true;\n      cta.dataset.label = cta.textContent;\n      cta.textContent = 'Enviando\u2026';\n\n      try {\n        const res = await fetch('/contact#contact_form', {\n          method: 'POST',\n          body: new FormData(form),\n          headers: { 'Accept': 'text/html' },\n          credentials: 'same-origin',\n        });\n        if (res.ok || (res.status >= 200 && res.status < 400)) {\n          const emailEl = popup.querySelector('[data-success-email]');\n          if (emailEl) emailEl.textContent = email;\n          popup.setAttribute('data-state', 'success');\n          stopRotation();\n          markSeen();\n        } else {\n          throw new Error('HTTP ' + res.status);\n        }\n      } catch (err) {\n        popup.setAttribute('data-state', 'error');\n        cta.disabled = false;\n        cta.textContent = cta.dataset.label;\n      }\n    });\n  }\n})();\n"],
  "mappings": "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",
  "names": []
}
