{
  "version": 3,
  "sources": ["/cdn/shop/t/34/assets/gs-glimpse.js?nc=31698"],
  "sourcesContent": ["/* GS-COM Black Friday \"glimpse\": before the sale, on pages with a group of products, the products glitch twice\n   (prices flash to their 10%-off price), everything looks normal for a few seconds, then they glitch again and the\n   sale prices stay on for a moment, then the BLACK FRIDAY / CYBER MONDAY logo flickers in while every product shows its sale price, a sale badge and a red\n   Add to cart button, then everything glitches back to normal.\n   Plays at most a few times per session: the first eligible page always plays, later pages by chance.\n   Purely visual: real prices, cart and checkout never change.\n   Settings come from the root [data-gs-glimpse] element rendered by sections/gs-bf-glimpse.liquid. */\n(function () {\n  var root = document.querySelector('[data-gs-glimpse]');\n  if (!root || window.gsGlimpseRan) return;\n  window.gsGlimpseRan = true;\n\n  var d = root.dataset;\n  var teaserStart = Date.parse(d.teaserStart);\n  var saleStart = Date.parse(d.saleStart);\n  var now = Date.now();\n  var maxPlays = parseInt(d.maxPlays, 10) || 3;\n  var chance = Math.min(100, Math.max(0, parseFloat(d.chance) || 0)) / 100;\n  var COUNT_KEY = 'gs-glimpse-count';\n  var forced = /[?&]gs_glimpse=1/.test(location.search); /* preview link for testing */\n  function plays() { try { return parseInt(sessionStorage.getItem(COUNT_KEY), 10) || 0; } catch (e) { return 0; } }\n  if (!forced) {\n    if (isNaN(teaserStart) || isNaN(saleStart) || now < teaserStart || now >= saleStart) return;\n    if (window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches) return;\n    var played = plays();\n    if (played >= maxPlays) return;\n    if (played > 0 && Math.random() >= chance) return; /* first play is certain, later ones by chance */\n  }\n\n  var pct = Math.min(90, Math.max(1, parseFloat(d.percent) || 10));\n  var delay = Math.max(0, parseFloat(d.delay) || 6) * 1000;\n  var pause = Math.max(0, parseFloat(d.pause) || 0) * 1000;\n  var flicker = Math.max(0, parseFloat(d.flicker) || 0) * 1000;\n  var soak = Math.max(0, parseFloat(d.soak) || 0) * 1000;\n  var hold = Math.max(1, parseFloat(d.duration) || 4) * 1000;\n  var minItems = parseInt(d.minItems, 10) || 4;\n\n  var MONEY = /([\\d][\\d,]*(?:\\.\\d+)?)/;\n  function money(text, factor) {\n    var m = text.match(MONEY);\n    if (!m) return null;\n    var value = parseFloat(m[1].replace(/,/g, '')) * factor;\n    var decimals = (m[1].split('.')[1] || '').length;\n    var formatted = value.toLocaleString('en-US', { minimumFractionDigits: decimals, maximumFractionDigits: decimals });\n    return text.replace(m[1], formatted);\n  }\n\n  var undo = [];\n  var on = false;\n\n  function swapCard(card) {\n    var box = card.querySelector('.price-box');\n    var btn = card.querySelector('.add-to-cart-btn');\n    if (!box || btn && /sold out/i.test(btn.textContent)) return;\n    /* Current selling price: Ella's sale price, Ella's regular price, or Boost's regular price. */\n    var cur = box.querySelector('.special-price') || box.querySelector('.price-regular span') || box.querySelector('.regular-product span') ||\n      [].filter.call(box.querySelectorAll('span'), function (sp) { return !sp.closest('s, del, .old-price, [class*=\"compare\"]') && !sp.querySelector('span'); }).pop() || box;\n    var html = cur.innerHTML.trim();\n    var prefix = '';\n    var em = cur.querySelector('em');\n    if (em) { prefix = em.outerHTML; html = html.replace(em.outerHTML, '').trim(); }\n    var oldText = html.replace(/<[^>]+>/g, '').trim();\n    var newText = money(oldText, 1 - pct / 100);\n    if (!newText) return;\n\n    var saved = box.innerHTML;\n    box.innerHTML = '<div class=\"price-sale\"><span class=\"old-price\">' + oldText + '</span> <span class=\"special-price\">' + prefix + newText + '</span></div>';\n    box.classList.add('gs-glimpse-price');\n    undo.push(function () { box.innerHTML = saved; box.classList.remove('gs-glimpse-price'); });\n\n    var top = card.querySelector('.product-top') || card;\n    var label = top.querySelector('.product-label');\n    var created = false;\n    if (!label) { label = document.createElement('div'); label.className = 'product-label'; top.appendChild(label); created = true; }\n    var badge = document.createElement('strong');\n    badge.className = 'label sale-label gs-glimpse-badge';\n    badge.textContent = '-' + pct + '%';\n    var hidden = [].slice.call(label.querySelectorAll('.sale-label:not(.gs-glimpse-badge)'));\n    hidden.forEach(function (h) { h.style.display = 'none'; });\n    label.insertBefore(badge, label.firstChild);\n    undo.push(function () {\n      hidden.forEach(function (h) { h.style.display = ''; });\n      if (created) label.remove(); else badge.remove();\n    });\n\n    if (btn) { btn.classList.add('gs-glimpse-red'); undo.push(function () { btn.classList.remove('gs-glimpse-red'); }); }\n  }\n\n  /* Cards are looked up each time: filter apps (Boost) can redraw the grid while the glimpse runs. */\n  function cards() { return [].slice.call(document.querySelectorAll('.product-item')); }\n  function saleOn() {\n    if (on) return;\n    on = true;\n    cards().forEach(function (c) { c.classList.add('gs-glimpse-t'); try { swapCard(c); } catch (e) {} });\n  }\n  function saleOff() {\n    if (!on) return;\n    on = false;\n    while (undo.length) { try { undo.pop()(); } catch (e) {} }\n  }\n\n  function burst(ms) {\n    document.documentElement.classList.add('gs-glitching');\n    setTimeout(function () { document.documentElement.classList.remove('gs-glitching'); }, ms);\n  }\n\n  function run() {\n    var found = cards();\n    if (found.length < minItems) return;\n    try { sessionStorage.setItem(COUNT_KEY, String(plays() + 1)); } catch (e) {}\n    found.forEach(function (c) { c.classList.add('gs-glimpse-t'); });\n    var overlay = root.querySelector('.gs-glimpse__overlay');\n\n    /* 1. Two quick glitches: sale prices flash on, then snap back. */\n    [0, 900].forEach(function (when) {\n      setTimeout(function () { burst(220); saleOn(); }, when);\n      setTimeout(saleOff, when + 350);\n    });\n\n    /* 2. A pause where everything looks normal, then prices flicker on and off with short glitches.\n          Each on/off pair lasts at least ~0.6 s, so it stays under 3 flashes per second. */\n    var at = 1250 + pause;\n    var end = at + flicker;\n    var steps = [450, 320, 600, 260, 520, 380];\n    var i = 0;\n    while (at < end) {\n      (function (show, when) {\n        setTimeout(function () { burst(220); show ? saleOn() : saleOff(); }, when);\n      })(i % 2 === 0, at);\n      at += steps[i % steps.length];\n      i++;\n    }\n\n    /* 3. The sale prices settle and stay on so shoppers can take in the deals. */\n    setTimeout(function () { saleOn(); }, at);\n    at += soak;\n\n    /* 4. The big glitch: logo in, sale prices held on. */\n    setTimeout(function () {\n      burst(700);\n      setTimeout(function () {\n        saleOn();\n        document.documentElement.classList.add('gs-glimpse-on');\n        if (overlay) overlay.hidden = false;\n      }, 250);\n    }, at);\n\n    /* 5. Glitch back to normal. */\n    setTimeout(function () {\n      burst(600);\n      setTimeout(function () {\n        saleOff();\n        document.documentElement.classList.remove('gs-glimpse-on');\n        if (overlay) overlay.hidden = true;\n      }, 300);\n    }, at + 250 + hold);\n  }\n\n  function schedule() {\n    setTimeout(function () {\n      if (document.visibilityState === 'hidden') {\n        document.addEventListener('visibilitychange', function onVis() {\n          if (document.visibilityState === 'visible') { document.removeEventListener('visibilitychange', onVis); setTimeout(run, 1200); }\n        });\n      } else run();\n    }, delay);\n  }\n\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', schedule);\n  else schedule();\n})();\n"],
  "mappings": "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",
  "names": []
}
