{
  "version": 3,
  "sources": ["/cdn/shop/t/18/assets/popup.js?nbv=20260513-pills"],
  "sourcesContent": ["/* ============================================\n   NIMBA FOODS \u2014 Reveal Offer Popup\n   Desktop: 10s timer + exit-intent backup\n   Mobile:  10s timer + 40% scroll (first wins)\n   ============================================ */\n\n(function () {\n  'use strict';\n\n  var popupShown = false;\n  var submitted = sessionStorage.getItem('nb_email_submitted') === '1';\n  var popupDismissed = sessionStorage.getItem('nb_popup_dismissed') === '1';\n  var isMobile = window.innerWidth < 768;\n  var assetNode = document.getElementById('nb-asset-base');\n  var logoUrl = assetNode?.dataset.logo || '';\n  var popupProductUrl = assetNode?.dataset.popupProduct || '';\n\n  function normalizeOfferCopy() {\n    document.querySelectorAll('a, h2, p').forEach(function (el) {\n      if (el.textContent.indexOf('First Jar') !== -1) {\n        el.textContent = el.textContent.replace(/First Jar/g, 'First Order');\n      }\n      if (el.textContent.indexOf('first jar') !== -1) {\n        el.innerHTML = el.innerHTML.replace(/first jar/g, 'first order');\n      }\n    });\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', normalizeOfferCopy, { once: true });\n  } else {\n    normalizeOfferCopy();\n  }\n\n  var qrIntent = window.location.hash === '#process' || /[?&]utm_source=qr\\b/.test(window.location.search);\n  var forcePopup = /[?&]nb_popup=1\\b/.test(window.location.search) || window.location.hash === '#offer';\n\n  if (!forcePopup && (submitted || popupDismissed || qrIntent)) return;\n\n  function buildPopup() {\n    if (popupShown) return;\n    popupShown = true;\n\n    var overlay = document.createElement('div');\n    overlay.className = 'nb-popup-overlay';\n    overlay.innerHTML =\n      '<div class=\"nb-popup-card nb-popup-card--offer\">' +\n        '<button class=\"nb-popup-close\" aria-label=\"Close\">&times;</button>' +\n        '<div class=\"nb-popup-media\" style=\"background-image:url(' + popupProductUrl + ')\"></div>' +\n        '<div class=\"nb-popup-body\">' +\n          '<img class=\"nb-popup-logo\" src=\"' + logoUrl + '\" alt=\"Nimba Foods\">' +\n          '<h2 class=\"nb-popup-headline\">Reveal Your First Offer</h2>' +\n          '<p class=\"nb-popup-sub\">Scratch below to unlock 15% off your first Nimba order.</p>' +\n          '<div class=\"nb-scratch\" role=\"button\" tabindex=\"0\" aria-label=\"Scratch to reveal your offer\">' +\n            '<div class=\"nb-scratch__prize\">' +\n              '<span class=\"nb-scratch__eyebrow\">Unlocked</span>' +\n              '<strong>15% Off</strong>' +\n              '<span>Use code REAL15</span>' +\n            '</div>' +\n            '<canvas class=\"nb-scratch__canvas\" width=\"360\" height=\"180\"></canvas>' +\n          '</div>' +\n          '<form class=\"nb-popup-form\" hidden>' +\n            '<input type=\"email\" class=\"nb-popup-input\" placeholder=\"Your email address\" required />' +\n            '<div class=\"nb-popup-use-case\" role=\"radiogroup\" aria-label=\"What will you use it for?\">' +\n              '<p class=\"nb-popup-use-case__label\">What will you use it for?</p>' +\n              '<button type=\"button\" class=\"nb-popup-pill\" data-use-case=\"personal_ready_made\" aria-pressed=\"false\">Personal use - ready-made whipped</button>' +\n              '<button type=\"button\" class=\"nb-popup-pill\" data-use-case=\"diy_body_butter\" aria-pressed=\"false\">DIY Body Butter</button>' +\n              '<button type=\"button\" class=\"nb-popup-pill\" data-use-case=\"soap_lotion_maker\" aria-pressed=\"false\">Maker - soap, lotion, or balm</button>' +\n            '</div>' +\n            '<input type=\"hidden\" class=\"nb-popup-use-case-value\" value=\"\" />' +\n            '<p class=\"nb-popup-error\" hidden>Please choose an option.</p>' +\n            '<button type=\"submit\" class=\"nb-popup-btn\">Email My Code</button>' +\n            '<p class=\"nb-popup-fine\">No spam. Unsubscribe anytime.</p>' +\n          '</form>' +\n          '<p class=\"nb-popup-success\" hidden>Check your inbox. Use code <strong>REAL15</strong> at checkout.</p>' +\n        '</div>' +\n      '</div>';\n    document.body.appendChild(overlay);\n\n    var closeBtn = overlay.querySelector('.nb-popup-close');\n    var card = overlay.querySelector('.nb-popup-card');\n    var scratch = overlay.querySelector('.nb-scratch');\n    var canvas = overlay.querySelector('.nb-scratch__canvas');\n    var form = overlay.querySelector('.nb-popup-form');\n    var success = overlay.querySelector('.nb-popup-success');\n    var useCaseInput = overlay.querySelector('.nb-popup-use-case-value');\n    var useCasePills = overlay.querySelectorAll('.nb-popup-pill');\n    var useCaseError = overlay.querySelector('.nb-popup-error');\n\n    closeBtn.addEventListener('click', function () { closePopup(overlay); });\n    overlay.addEventListener('click', function (e) {\n      if (e.target === overlay) closePopup(overlay);\n    });\n\n    initScratch(canvas, scratch, function () {\n      form.hidden = false;\n      card.classList.add('nb-popup-card--revealed');\n      scratch.classList.add('nb-scratch--revealed');\n      if (typeof ntrack === 'function') ntrack('popup_offer_revealed', { offer: 'REAL15' });\n    });\n\n    scratch.addEventListener('keydown', function (e) {\n      if (e.key === 'Enter' || e.key === ' ') {\n        e.preventDefault();\n        revealScratch(canvas, scratch, form, card);\n      }\n    });\n\n    useCasePills.forEach(function (pill) {\n      pill.addEventListener('click', function () {\n        useCasePills.forEach(function (item) {\n          item.classList.remove('nb-popup-pill--selected');\n          item.setAttribute('aria-pressed', 'false');\n        });\n        pill.classList.add('nb-popup-pill--selected');\n        pill.setAttribute('aria-pressed', 'true');\n        useCaseInput.value = pill.dataset.useCase || '';\n        useCaseError.hidden = true;\n      });\n    });\n\n    form.addEventListener('submit', function (e) {\n      e.preventDefault();\n      var email = overlay.querySelector('.nb-popup-input').value.trim();\n      var useCase = useCaseInput.value;\n      if (!email) return;\n      if (!useCase) {\n        useCaseError.hidden = false;\n        return;\n      }\n      onEmailSubmit(email, useCase);\n      form.hidden = true;\n      success.hidden = false;\n      setTimeout(function () { closePopup(overlay); }, 6000);\n    });\n\n    requestAnimationFrame(function () {\n      overlay.classList.add('nb-popup--visible');\n    });\n  }\n\n  function initScratch(canvas, scratch, onReveal) {\n    var ctx = canvas.getContext('2d');\n    var revealed = false;\n    var drawing = false;\n    var lastCheck = 0;\n\n    function paintCover() {\n      var gradient = ctx.createLinearGradient(0, 0, canvas.width, canvas.height);\n      gradient.addColorStop(0, '#d8c6aa');\n      gradient.addColorStop(1, '#9f896c');\n      ctx.fillStyle = gradient;\n      ctx.fillRect(0, 0, canvas.width, canvas.height);\n      ctx.fillStyle = 'rgba(255,255,255,0.72)';\n      ctx.font = '700 34px Raleway, Arial, sans-serif';\n      ctx.textAlign = 'center';\n      ctx.textBaseline = 'middle';\n      ctx.fillText('SCRATCH HERE', canvas.width / 2, canvas.height / 2);\n    }\n\n    function pointFromEvent(e) {\n      var touch = e.touches && e.touches[0];\n      var rect = canvas.getBoundingClientRect();\n      return {\n        x: ((touch ? touch.clientX : e.clientX) - rect.left) * (canvas.width / rect.width),\n        y: ((touch ? touch.clientY : e.clientY) - rect.top) * (canvas.height / rect.height)\n      };\n    }\n\n    function scratchAt(e) {\n      if (revealed) return;\n      e.preventDefault();\n      var point = pointFromEvent(e);\n      ctx.globalCompositeOperation = 'destination-out';\n      ctx.beginPath();\n      ctx.arc(point.x, point.y, 22, 0, Math.PI * 2);\n      ctx.fill();\n      ctx.globalCompositeOperation = 'source-over';\n\n      var now = Date.now();\n      if (now - lastCheck > 180) {\n        lastCheck = now;\n        if (clearedPercent(ctx, canvas) > 0.55) reveal();\n      }\n    }\n\n    function reveal() {\n      if (revealed) return;\n      revealed = true;\n      ctx.clearRect(0, 0, canvas.width, canvas.height);\n      scratch.classList.add('nb-scratch--revealed');\n      onReveal();\n    }\n\n    paintCover();\n    canvas.addEventListener('mousedown', function (e) { drawing = true; scratchAt(e); });\n    canvas.addEventListener('mousemove', function (e) { if (drawing) scratchAt(e); });\n    window.addEventListener('mouseup', function () { drawing = false; });\n    canvas.addEventListener('touchstart', function (e) { drawing = true; scratchAt(e); }, { passive: false });\n    canvas.addEventListener('touchmove', function (e) { if (drawing) scratchAt(e); }, { passive: false });\n    window.addEventListener('touchend', function () { drawing = false; });\n  }\n\n  function clearedPercent(ctx, canvas) {\n    var pixels = ctx.getImageData(0, 0, canvas.width, canvas.height).data;\n    var clear = 0;\n    for (var i = 3; i < pixels.length; i += 16) {\n      if (pixels[i] === 0) clear++;\n    }\n    return clear / (pixels.length / 16);\n  }\n\n  function revealScratch(canvas, scratch, form, card) {\n    canvas.getContext('2d').clearRect(0, 0, canvas.width, canvas.height);\n    scratch.classList.add('nb-scratch--revealed');\n    if (card) card.classList.add('nb-popup-card--revealed');\n    form.hidden = false;\n  }\n\n  function closePopup(overlay) {\n    overlay.classList.remove('nb-popup--visible');\n    sessionStorage.setItem('nb_popup_dismissed', '1');\n    popupDismissed = true;\n    setTimeout(function () { overlay.remove(); }, 300);\n  }\n\n  function onEmailSubmit(email, useCase) {\n    sessionStorage.setItem('nb_email_submitted', '1');\n    submitted = true;\n    if (typeof ntrack === 'function') {\n      ntrack('popup_submit', {\n        cta_label: 'Email My Code',\n        signup_source: 'popup_reveal_offer',\n        use_case: useCase,\n        offer_code: 'REAL15'\n      });\n    }\n    if (typeof klaviyoSubscribe === 'function') {\n      klaviyoSubscribe(email, 'popup_reveal_offer', {\n        use_case: useCase,\n        offer_code: 'REAL15',\n        popup_variant: 'scratch_reveal_offer'\n      });\n    }\n  }\n\n  if (forcePopup) {\n    buildPopup();\n    return;\n  }\n\n  if (!isMobile) {\n    setTimeout(function () {\n      if (!popupShown && !submitted && !popupDismissed) buildPopup();\n    }, 10000);\n\n    document.addEventListener('mouseout', function handler(e) {\n      if (e.clientY < 0 && !popupShown && !submitted && !popupDismissed) {\n        buildPopup();\n        document.removeEventListener('mouseout', handler);\n      }\n    });\n  }\n\n  if (isMobile) {\n    setTimeout(function () {\n      if (!popupShown && !submitted && !popupDismissed) buildPopup();\n    }, 10000);\n\n    function onScroll() {\n      var scrollPct = window.scrollY / (document.documentElement.scrollHeight - window.innerHeight);\n      if (scrollPct >= 0.4 && !popupShown && !submitted && !popupDismissed) {\n        buildPopup();\n        window.removeEventListener('scroll', onScroll);\n      }\n    }\n    window.addEventListener('scroll', onScroll, { passive: true });\n  }\n})();\n"],
  "mappings": "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",
  "names": []
}
