{
  "version": 3,
  "sources": ["/cdn/shop/t/35/assets/gtm-events.js?cb=22285"],
  "sourcesContent": ["/* GTM interaction events for Treelogy. (r7 \u2014 PDP detail + atc_source site-wide)\n   Loaded (deferred) by snippets/gtm-head.liquid \u2014 only when a GTM container ID\n   is configured, so window.dataLayer always exists here.\n\n   Events pushed:\n   - consent_update   : bridges Shopify Customer Privacy -> Google Consent Mode v2\n   - add_to_cart      : GA4 ecommerce, via fetch/XHR intercept on /cart/add\n                        (also on quantity increases via /cart/change|update)\n   - remove_from_cart : quantity decreases/removals via /cart/change|update diff\n                        against a local cart-state cache. /cart/clear is\n                        deliberately ignored (buy-now replace flow = noise).\n   - view_cart        : mini-cart drawer opens (.mini-cart gains .active);\n                        cart page view_cart comes from gtm-head.liquid\n   - select_item      : click on any product link (item_handle + source section)\n   - whatsapp_click   : click on wa.me / api.whatsapp.com / whatsapp: links\n   - section_view     : a .shopify-section became >=40% visible (once per section)\n   - section_click    : click on a link/button inside a section (section attribution)\n   - select_variant   : product-page pack/variant card chosen (real clicks only \u2014\n                        the theme fires synthetic ones to bind its own handlers)\n   - pdp_gallery_view : a gallery slide past the first was actually looked at\n   - pdp_detail_expand: an accordion/detail block on a product page was opened\n\n   NOTE: every event name here must also exist in the GTM trigger regex\n   (\"CE - all tracked events\"), otherwise it stays in the dataLayer and never\n   reaches GA4. See claudedocs/gtm/TRACKING-MASTER.md \u00A73.\n*/\n(function () {\n  'use strict';\n\n  /* Prerender gate \u2014 mirrors gtm-head.liquid: Shopify speculation rules\n     prerender product/collection pages on hover; IntersectionObservers and\n     network intercepts must not run until the page is actually shown.\n     gtm-head's own prerenderingchange listener registers first, so __gtmCtx\n     is always seeded before this init runs. */\n  if (document.prerendering) {\n    document.addEventListener('prerenderingchange', init, { once: true });\n  } else {\n    init();\n  }\n\n  function init() {\n  var dl = (window.dataLayer = window.dataLayer || []);\n\n  function push(obj) {\n    dl.push(obj);\n  }\n\n  /* GTM's data layer model merges pushes recursively and PERSISTS values \u2014\n     without a reset, atc_source from one hero click would stick to every\n     later event on the page (an organic add_to_cart would be mislabeled as\n     hero-attributed), item_handle/section_id/etc. likewise. The GA4 tag reads\n     all 14 params on every event, so each event push is followed by a reset\n     of the ephemeral ones; null clears the model and null params are dropped\n     from the GA4 hit. Page-context params (page_locale, market_*, customer_*)\n     intentionally persist. */\n  var EPHEMERAL_RESET = {\n    section_id: null,\n    from_section: null,\n    item_handle: null,\n    link_url: null,\n    link_label: null,\n    channel: null,\n    hero_version: null,\n    atc_source: null,\n    cta_label: null,\n    cta_position: null,\n    variant_id: null\n  };\n  function pushEvent(obj) {\n    dl.push(obj);\n    dl.push(EPHEMERAL_RESET);\n  }\n\n  function gtag() {\n    dl.push(arguments);\n  }\n\n  var currency = (window.__gtmCtx && window.__gtmCtx.currency) || 'IDR';\n\n  /* ---------- Consent bridge: Shopify Customer Privacy -> Consent Mode v2 ---------- */\n\n  function applyConsent(analyticsAllowed, marketingAllowed) {\n    gtag('consent', 'update', {\n      analytics_storage: analyticsAllowed ? 'granted' : 'denied',\n      ad_storage: marketingAllowed ? 'granted' : 'denied',\n      ad_user_data: marketingAllowed ? 'granted' : 'denied',\n      ad_personalization: marketingAllowed ? 'granted' : 'denied'\n    });\n    push({\n      event: 'consent_update',\n      consent_analytics: !!analyticsAllowed,\n      consent_marketing: !!marketingAllowed\n    });\n  }\n\n  document.addEventListener('visitorConsentCollected', function (e) {\n    var c = e.detail || {};\n    applyConsent(c.analyticsAllowed, c.marketingAllowed);\n  });\n\n  if (window.Shopify && window.Shopify.loadFeatures) {\n    window.Shopify.loadFeatures(\n      [{ name: 'consent-tracking-api', version: '0.1' }],\n      function (error) {\n        if (error) return;\n        var cp = window.Shopify.customerPrivacy;\n        if (!cp || !cp.currentVisitorConsent) return;\n        var c = cp.currentVisitorConsent();\n        // '' means the visitor has not interacted with the banner yet \u2014 leave defaults.\n        if (!c || (c.analytics === '' && c.marketing === '')) return;\n        applyConsent(c.analytics === 'yes', c.marketing === 'yes');\n      }\n    );\n  }\n\n  /* ---------- add_to_cart via /cart/add network intercept ---------- */\n\n  function mapCartItem(i) {\n    return {\n      /* item_id priority MUST stay sku-then-VARIANT id: every other path\n         (view_item Liquid, checkout pixel, purchase backstop) resolves\n         sku || variant_id \u2014 product_id here would split one product into\n         different item_ids across the funnel for SKU-less variants. */\n      item_id: i.sku || String(i.variant_id || i.id || i.product_id || ''),\n      item_name: i.product_title || i.title || '',\n      item_variant: i.variant_title || undefined,\n      item_variant_id: String(i.variant_id || i.id || ''),\n      price: (i.final_price != null ? i.final_price : i.price || 0) / 100,\n      quantity: i.quantity || 1\n    };\n  }\n\n  /* Short-lived attribution stamp: which UI element initiated the add.\n     Set on click (e.g. hero protocol CTAs), consumed by the very next\n     successful /cart/add within 15s. */\n  var atcAttribution = null;\n  function stampAtcSource(source) {\n    atcAttribution = { source: source, t: Date.now() };\n  }\n  function consumeAtcSource() {\n    if (!atcAttribution) return '';\n    var src = Date.now() - atcAttribution.t < 15000 ? atcAttribution.source : '';\n    atcAttribution = null;\n    return src;\n  }\n\n  /* /cart/add.js returns each line's TOTAL quantity after merging with any\n     existing line (verified live: add 1 + add 1 => second response quantity: 2,\n     final_line_price = whole line). Reporting the response as-is over-counts\n     repeat adds \u2014 the true added amount is the delta vs our cached state. */\n  function pushAddToCart(data) {\n    if (!data) return;\n    var items = Array.isArray(data.items) ? data.items : [data];\n    if (!items.length || items[0].id == null) return;\n    var deltas = [];\n    var value = 0;\n    for (var k = 0; k < items.length; k++) {\n      var it = items[k];\n      var key = String(it.id);\n      var prevQ = cartState[key] ? cartState[key].quantity || 0 : 0;\n      var added = (it.quantity || 0) - prevQ;\n      cartState[key] = it;\n      if (added > 0) {\n        deltas.push(cloneWithQty(it, added));\n        value += ((it.final_price != null ? it.final_price : it.price) || 0) / 100 * added;\n      }\n    }\n    if (!deltas.length) return;\n    push({ ecommerce: null });\n    pushEvent({\n      event: 'add_to_cart',\n      atc_source: consumeAtcSource() || undefined,\n      ecommerce: {\n        currency: currency,\n        value: value,\n        items: deltas.map(mapCartItem)\n      }\n    });\n  }\n\n  /* ---------- cart-state cache: view_cart + remove_from_cart ---------- */\n  /* Seeded from Liquid ({{ cart.items }} via __gtmCtx.cartItems), kept in sync\n     from every cart endpoint response. Mutation endpoints (/cart/change,\n     /cart/update) return the FULL cart \u2014 diffing old vs new state yields\n     remove_from_cart (quantity down) and add_to_cart (quantity up, e.g. the\n     drawer's + button). /cart/add pushes add_to_cart directly (its response is\n     only the added lines), /cart.js refreshes silently, /cart/clear resets\n     silently (buy-now replace flow \u2014 events there would be noise). */\n\n  var cartState = {};\n  (function seed() {\n    var seedItems = (window.__gtmCtx && window.__gtmCtx.cartItems) || [];\n    for (var i = 0; i < seedItems.length; i++) {\n      cartState[String(seedItems[i].id)] = seedItems[i];\n    }\n  })();\n\n  function cloneWithQty(item, qty) {\n    var out = {};\n    for (var k in item) out[k] = item[k];\n    out.quantity = qty;\n    return out;\n  }\n\n  function pushCartDiffEvent(eventName, items) {\n    var value = 0;\n    for (var i = 0; i < items.length; i++) {\n      value += ((items[i].final_price != null ? items[i].final_price : items[i].price) || 0) / 100 * (items[i].quantity || 1);\n    }\n    push({ ecommerce: null });\n    pushEvent({\n      event: eventName,\n      ecommerce: { currency: currency, value: value, items: items.map(mapCartItem) }\n    });\n  }\n\n  function syncCartState(fullCart, silent) {\n    if (!fullCart || !Array.isArray(fullCart.items)) return;\n    var newState = {};\n    for (var i = 0; i < fullCart.items.length; i++) {\n      newState[String(fullCart.items[i].id)] = fullCart.items[i];\n    }\n    if (!silent) {\n      var removed = [];\n      var added = [];\n      var key;\n      for (key in cartState) {\n        var oldQ = cartState[key].quantity || 0;\n        var newQ = newState[key] ? newState[key].quantity || 0 : 0;\n        if (newQ < oldQ) removed.push(cloneWithQty(cartState[key], oldQ - newQ));\n      }\n      for (key in newState) {\n        var prevQ = cartState[key] ? cartState[key].quantity || 0 : 0;\n        var curQ = newState[key].quantity || 0;\n        if (curQ > prevQ) added.push(cloneWithQty(newState[key], curQ - prevQ));\n      }\n      if (removed.length) pushCartDiffEvent('remove_from_cart', removed);\n      if (added.length) pushCartDiffEvent('add_to_cart', added);\n    }\n    cartState = newState;\n  }\n\n  function cartEndpoint(url) {\n    if (typeof url !== 'string') return '';\n    if (url.indexOf('/cart/add') !== -1) return 'add';\n    if (url.indexOf('/cart/change') !== -1 || url.indexOf('/cart/update') !== -1) return 'mutate';\n    if (url.indexOf('/cart/clear') !== -1) return 'clear';\n    if (url.indexOf('/cart.js') !== -1) return 'refresh';\n    return '';\n  }\n\n  function handleCartResponse(kind, data) {\n    if (!data) return;\n    if (kind === 'add') {\n      pushAddToCart(data);\n    } else if (kind === 'mutate') {\n      syncCartState(data, false);\n    } else if (kind === 'refresh') {\n      syncCartState(data, true);\n    } else if (kind === 'clear') {\n      cartState = {};\n    }\n  }\n\n  var origFetch = window.fetch;\n  if (origFetch) {\n    window.fetch = function (input) {\n      var url = typeof input === 'string' ? input : (input && input.url) || '';\n      var kind = cartEndpoint(url);\n      var promise = origFetch.apply(this, arguments);\n      if (kind) {\n        promise\n          .then(function (res) {\n            if (!res.ok) return;\n            res\n              .clone()\n              .json()\n              .then(function (data) {\n                handleCartResponse(kind, data);\n              })\n              .catch(function () {});\n          })\n          .catch(function () {});\n      }\n      return promise;\n    };\n  }\n\n  var origOpen = XMLHttpRequest.prototype.open;\n  XMLHttpRequest.prototype.open = function (method, url) {\n    var kind = cartEndpoint(url);\n    if (kind) {\n      this.addEventListener('load', function () {\n        if (this.status < 200 || this.status >= 300) return;\n        try {\n          handleCartResponse(kind, JSON.parse(this.responseText));\n        } catch (e) {\n          /* non-JSON response \u2014 ignore */\n        }\n      });\n    }\n    return origOpen.apply(this, arguments);\n  };\n\n  /* ---------- cart re-sync: bfcache restore & tab refocus ---------- */\n  /* A bfcache-restored or refocused tab may hold a stale seed (cart changed\n     elsewhere) \u2014 the wrapped fetch classifies /cart.js as 'refresh' and\n     silently re-syncs the cache, so later diffs stay truthful. */\n\n  var lastCartSync = Date.now();\n  function resyncCartState() {\n    if (Date.now() - lastCartSync < 30000) return;\n    lastCartSync = Date.now();\n    try {\n      window.fetch('/cart.js', { headers: { Accept: 'application/json' } });\n    } catch (e) {\n      /* fetch unavailable \u2014 cache stays as-is */\n    }\n  }\n  window.addEventListener('pageshow', function (e) {\n    if (e.persisted) {\n      lastCartSync = 0;\n      resyncCartState();\n    }\n  });\n  document.addEventListener('visibilitychange', function () {\n    if (document.visibilityState === 'visible') resyncCartState();\n  });\n\n  /* ---------- view_cart: mini-cart drawer open ---------- */\n  /* The drawer opens optimistically before /cart/add responds \u2014 wait briefly,\n     then snapshot from a fresh /cart.js (which also re-syncs the cache via the\n     wrapped fetch). Falls back to the cache if the request fails. */\n\n  (function () {\n    var mini = document.querySelector('.mini-cart');\n    if (!mini || !('MutationObserver' in window)) return;\n\n    function pushViewCartFromCache() {\n      var items = [];\n      for (var key in cartState) items.push(cartState[key]);\n      if (items.length) pushCartDiffEvent('view_cart', items);\n    }\n\n    var wasOpen = mini.classList.contains('active');\n    new MutationObserver(function () {\n      var open = mini.classList.contains('active');\n      if (open && !wasOpen) {\n        setTimeout(function () {\n          lastCartSync = Date.now();\n          window\n            .fetch('/cart.js', { headers: { Accept: 'application/json' } })\n            .then(function (res) {\n              return res.json();\n            })\n            .then(function (cart) {\n              var items = (cart && cart.items) || [];\n              if (items.length) pushCartDiffEvent('view_cart', items);\n            })\n            .catch(pushViewCartFromCache);\n        }, 400);\n      }\n      wasOpen = open;\n    }).observe(mini, { attributes: true, attributeFilter: ['class'] });\n  })();\n\n  /* ---------- click delegation: select_item, whatsapp_click, section_click ---------- */\n\n  function sectionIdOf(el) {\n    var s = el.closest ? el.closest('.shopify-section') : null;\n    return s ? (s.id || '').replace('shopify-section-', '') : '';\n  }\n\n  document.addEventListener(\n    'click',\n    function (e) {\n      var t = e.target;\n      if (!t || !t.closest) return;\n\n      var productLink = t.closest('a[href*=\"/products/\"]');\n      if (productLink) {\n        var handle = (productLink.pathname.split('/products/')[1] || '')\n          .split('?')[0]\n          .split('/')[0];\n        if (handle) {\n          pushEvent({\n            event: 'select_item',\n            item_handle: handle,\n            from_section: sectionIdOf(productLink),\n            page_path: location.pathname\n          });\n        }\n      }\n\n      var waLink = t.closest(\n        'a[href*=\"wa.me/\"], a[href*=\"api.whatsapp.com\"], a[href^=\"whatsapp:\"]'\n      );\n      if (waLink) {\n        pushEvent({\n          event: 'whatsapp_click',\n          link_url: waLink.href,\n          from_section: sectionIdOf(waLink),\n          page_path: location.pathname\n        });\n      }\n\n      var actionable = t.closest('a[href], button[type=\"submit\"], [role=\"button\"]');\n      if (actionable) {\n        var sid = sectionIdOf(actionable);\n        if (sid) {\n          pushEvent({\n            event: 'section_click',\n            section_id: sid,\n            link_url: actionable.href || undefined,\n            page_path: location.pathname\n          });\n        }\n      }\n    },\n    { capture: true, passive: true }\n  );\n\n  /* ---------- featured hero: version-labeled funnel events ---------- */\n  /* hero_view / hero_cta_click / hero_image_click, all carrying hero_version\n     so different hero iterations can be compared over time in GA4.\n     Click listener sits on window WITH capture: the seamless ATC interceptor\n     (MiniCart, document-capture, registered earlier) calls\n     stopImmediatePropagation, which would silence any document-level listener\n     registered after it \u2014 window capture runs before document capture. */\n\n  (function () {\n    var hero = document.querySelector('[data-hero-version]');\n    if (!hero) return;\n    var heroVersion = hero.dataset.heroVersion;\n    var heroHandle = hero.dataset.heroProduct || '';\n\n    if ('IntersectionObserver' in window) {\n      var hio = new IntersectionObserver(\n        function (entries) {\n          entries.forEach(function (entry) {\n            if (!entry.isIntersecting) return;\n            pushEvent({\n              event: 'hero_view',\n              hero_version: heroVersion,\n              item_handle: heroHandle,\n              page_path: location.pathname\n            });\n            hio.disconnect();\n          });\n        },\n        { threshold: 0.4 }\n      );\n      hio.observe(hero);\n    }\n\n    window.addEventListener(\n      'click',\n      function (e) {\n        var t = e.target;\n        if (!t || !t.closest || !hero.contains(t)) return;\n\n        var cta = t.closest('.protocol-cta, .button-quick-add-cart');\n        if (cta && hero.contains(cta)) {\n          var ctas = hero.querySelectorAll('.protocol-cta, .button-quick-add-cart');\n          stampAtcSource('hero:' + heroVersion);\n          pushEvent({\n            event: 'hero_cta_click',\n            hero_version: heroVersion,\n            item_handle: heroHandle,\n            cta_label: (cta.textContent || '').trim(),\n            cta_position: Array.prototype.indexOf.call(ctas, cta) + 1,\n            variant_id: cta.dataset.variant || '',\n            page_path: location.pathname\n          });\n          return;\n        }\n\n        var imgLink = t.closest('.thumbnail a');\n        if (imgLink && hero.contains(imgLink)) {\n          pushEvent({\n            event: 'hero_image_click',\n            hero_version: heroVersion,\n            item_handle: heroHandle,\n            page_path: location.pathname\n          });\n        }\n      },\n      { capture: true, passive: true }\n    );\n  })();\n\n  /* ---------- add-to-cart surface attribution (site-wide) ---------- */\n  /* Before r7 only the collection hero stamped atc_source, so every add from a\n     product page, the variant popup or a direct-add card arrived unlabelled and\n     the cart could not be split by the surface that produced it. The stamp is\n     consumed by the next successful /cart/add within 15s (see consumeAtcSource).\n     Window-capture for the same reason as the hero listener: the seamless-ATC\n     interceptor calls stopImmediatePropagation on the click. */\n\n  window.addEventListener(\n    'click',\n    function (e) {\n      var t = e.target;\n      if (!t || !t.closest || !e.isTrusted) return;\n      var btn = t.closest('#AddToCart, #popup-variants-button-bag, .button-direct-add');\n      if (!btn) return;\n      /* the hero module already stamped a more specific source for its own CTAs\n         (it runs first: same window-capture phase, registered earlier) */\n      if (btn.closest('[data-hero-version]') && btn.matches('.protocol-cta, .button-quick-add-cart')) return;\n      var source =\n        btn.id === 'AddToCart'\n          ? 'pdp:main'\n          : btn.id === 'popup-variants-button-bag'\n            ? 'pdp:popup'\n            : 'card:direct';\n      stampAtcSource(source);\n    },\n    { capture: true, passive: true }\n  );\n\n  /* ---------- product detail page: pack choice, gallery, expandable copy ---------- */\n  /* The three decisions a PDP visitor makes before add_to_cart \u2014 which pack,\n     how much of the gallery they consumed, which detail they opened \u2014 were all\n     invisible: variant cards are <div>s (so not even section_click saw them),\n     gallery paging is a scroll container, accordions are <div class=\"button\">. */\n\n  (function () {\n    var pdp = document.querySelector('.product-detail-wrapper');\n    if (!pdp) return;\n\n    var handle = (location.pathname.split('/products/')[1] || '')\n      .split('?')[0]\n      .split('/')[0];\n\n    function label(el) {\n      return (el && el.textContent ? el.textContent : '').replace(/\\s+/g, ' ').trim().slice(0, 100);\n    }\n\n    /* --- select_variant --- */\n    /* section-product-single.js \"kickstarts\" the variant binding 500ms after\n       load by calling .click() on the other card and then back on the active one\n       (and app.bundle re-clicks too). Those are synthetic, so isTrusted is the\n       only thing separating a real pack choice from two phantom ones per view. */\n    var lastVariant = null;\n    var variantPushes = 0;\n\n    window.addEventListener(\n      'click',\n      function (e) {\n        var t = e.target;\n        if (!t || !t.closest || !e.isTrusted) return;\n        var card = t.closest('.checkbox-button[data-value], .protocol-variant-card[data-value]');\n        if (!card) return;\n        var vid = card.getAttribute('data-value') || '';\n        if (!vid || vid === lastVariant || variantPushes >= 20) return;\n        lastVariant = vid;\n        variantPushes++;\n\n        var group = card.parentElement\n          ? card.parentElement.querySelectorAll('.checkbox-button[data-value]')\n          : [card];\n        /* the page also renders variant cards for OTHER products (bundle and\n           cross-sell blocks); only cards inside the main product block describe\n           the product this URL is about \u2014 the rest carry from_section instead */\n        pushEvent({\n          event: 'select_variant',\n          item_handle: pdp.contains(card) ? handle : undefined,\n          variant_id: vid,\n          cta_label: label(card.querySelector('.pv-time')) || label(card.querySelector('.pv-desc')),\n          cta_position: Array.prototype.indexOf.call(group, card) + 1,\n          from_section: sectionIdOf(card),\n          page_path: location.pathname\n        });\n      },\n      { capture: true, passive: true }\n    );\n\n    /* --- pdp_gallery_view --- */\n    /* Observed against the scroll container itself, so a mobile swipe and a\n       desktop thumbnail click (which scrolls the same container) both resolve\n       to one event per slide, once each. */\n    var scroller = pdp.querySelector('.native-gallery__main-scroll');\n    if (scroller && 'IntersectionObserver' in window) {\n      var slidesSeen = {};\n      var gio = new IntersectionObserver(\n        function (entries) {\n          entries.forEach(function (entry) {\n            if (!entry.isIntersecting) return;\n            var idx = parseInt(entry.target.getAttribute('data-index'), 10);\n            if (isNaN(idx) || idx > 11 || slidesSeen[idx]) return;\n            slidesSeen[idx] = true;\n            /* slide 0 is on screen at load \u2014 that is view_item, not engagement */\n            if (idx === 0) return;\n            pushEvent({\n              event: 'pdp_gallery_view',\n              item_handle: handle,\n              cta_position: idx + 1,\n              section_id: sectionIdOf(scroller),\n              page_path: location.pathname\n            });\n          });\n        },\n        { root: scroller, threshold: 0.6 }\n      );\n      scroller.querySelectorAll('.native-gallery__slide').forEach(function (s) {\n        gio.observe(s);\n      });\n    }\n\n    /* --- pdp_detail_expand --- */\n    var expandsSeen = {};\n    window.addEventListener(\n      'click',\n      function (e) {\n        var t = e.target;\n        if (!t || !t.closest || !e.isTrusted) return;\n        /* two accordion flavours ship on PDPs: the description list\n           (.__accordion, app.bundle) and the duplicate blocks\n           (.ac-dup-*, accordion-duplicate.js) */\n        var head = t.closest('.__accordion-button, .ac-dup-header');\n        if (!head) return;\n        var wrapper = head.closest('.__accordion-wrapper, .ac-dup-item');\n        /* fires on open only; both scripts toggle .active on the wrapper in the\n           bubble phase, i.e. AFTER this capture-phase listener \u2014 so \"not active\n           yet\" is exactly the click that opens it */\n        if (wrapper && wrapper.classList.contains('active')) return;\n        var name = label(head);\n        if (!name || expandsSeen[name]) return;\n        expandsSeen[name] = true;\n        pushEvent({\n          event: 'pdp_detail_expand',\n          item_handle: handle,\n          link_label: name,\n          section_id: sectionIdOf(head),\n          page_path: location.pathname\n        });\n      },\n      { capture: true, passive: true }\n    );\n  })();\n\n  /* ---------- section_view via IntersectionObserver ---------- */\n\n  if ('IntersectionObserver' in window) {\n    var seen = {};\n    var io = new IntersectionObserver(\n      function (entries) {\n        entries.forEach(function (entry) {\n          if (!entry.isIntersecting) return;\n          var id = (entry.target.id || '').replace('shopify-section-', '');\n          if (id && !seen[id]) {\n            seen[id] = true;\n            pushEvent({ event: 'section_view', section_id: id, page_path: location.pathname });\n          }\n          io.unobserve(entry.target);\n        });\n      },\n      { threshold: 0.4 }\n    );\n\n    var initSections = function () {\n      document.querySelectorAll('.shopify-section').forEach(function (s) {\n        if (s.offsetHeight > 150) io.observe(s);\n      });\n    };\n    if (document.readyState === 'loading') {\n      document.addEventListener('DOMContentLoaded', initSections);\n    } else {\n      initSections();\n    }\n  }\n  }\n})();\n"],
  "mappings": "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",
  "names": []
}
