{
  "version": 3,
  "sources": ["/cdn/shop/t/70/assets/ho-pdp-snap.js?x=30323"],
  "sourcesContent": ["/* Handora PDP gallery, phones/tablets (<=1023px): native scroll-snap instead of Flickity.\r\n   Loaded (defer) after vendor.js and before theme.js. It wraps theme.Flickity so the\r\n   main product gallery and its thumbnail strip get a light controller instead of a\r\n   Flickity instance; every other carousel, and desktop, still gets real Flickity.\r\n   The controller keeps the parts of the Flickity API the theme and the Handora add-ons\r\n   call (select, on, data, options, isActive, cells...). */\r\n(function () {\r\n  var F = window.theme && window.theme.Flickity;\r\n  if (!F || F.__hoSnap) return;\r\n\r\n  var MQ = window.matchMedia('(max-width: 1023px)');\r\n  var SECTION = '[data-section-type=\"product-template\"]';\r\n\r\n  function el(x) { return typeof x === 'string' ? document.querySelector(x) : x; }\r\n  function isTarget(e) {\r\n    return !!(e && e.nodeType === 1 && MQ.matches && e.closest(SECTION) &&\r\n      !e.classList.contains('flickity-enabled') &&\r\n      (e.hasAttribute('data-product-single-media-slider') || e.hasAttribute('data-product-single-media-thumbs')));\r\n  }\r\n\r\n  function emitter(stub) {\r\n    var h = {};\r\n    stub.on = function (n, f) { (h[n] = h[n] || []).push(f); return stub; };\r\n    stub.once = stub.on;\r\n    stub.off = function (n, f) { if (h[n]) h[n] = h[n].filter(function (g) { return g !== f; }); return stub; };\r\n    stub.emit = function (n, args) { (h[n] || []).slice().forEach(function (f) { try { f.apply(stub, args || []); } catch (e) { console.warn(e); } }); };\r\n    stub.dispatchEvent = function (n, ev, args) { stub.emit(n, args); };\r\n    return stub;\r\n  }\r\n  function noop() {}\r\n  /* Flickity methods other scripts may call on the gallery; they have nothing to do here. */\r\n  var NOOPS = ['updateDraggable', 'resize', 'reposition', 'destroy', 'reloadCells', 'activate', 'deactivate',\r\n    'positionSliderAtSelected', 'setGallerySize', 'playPlayer', 'pausePlayer', 'stopPlayer', 'unpausePlayer',\r\n    'insert', 'append', 'prepend', 'remove', 'watchCSS', 'uiChange', 'childUIPointerDown', 'updateSelectedSlide'];\r\n  function addNoops(o) { NOOPS.forEach(function (k) { if (!o[k]) o[k] = noop; }); return o; }\r\n\r\n  /* Thumbnail strip stub: the gallery controller drives it. */\r\n  function thumbsStub(t) {\r\n    var s = addNoops(emitter({ isActive: false, element: t, options: { draggable: false, wrapAround: false, contain: true }, cells: [] }));\r\n    s.select = s.selectCell = noop;\r\n    s.getCellElements = function () { return Array.prototype.slice.call(t.children); };\r\n    s.viewport = s.slider = t; /* the theme adds a transitionend listener on .viewport */\r\n    t.__hoStub = s;\r\n    return s;\r\n  }\r\n\r\n  function galleryStub(slider) {\r\n    var section = slider.closest(SECTION);\r\n    var gallery = slider.parentNode;\r\n    var slides = Array.prototype.filter.call(slider.children, function (c) { return c.hasAttribute('data-product-single-media-wrapper'); });\r\n    var thumbsEl = section.querySelector('[data-product-single-media-thumbs]');\r\n    var idx = 0, settleTimer = null, settled = 0;\r\n\r\n    slider.__hosnap = true; /* the older Flickity-to-snap bridge leaves this slider alone */\r\n    if (!slider.hasAttribute('tabindex')) slider.setAttribute('tabindex', '0');\r\n\r\n    var s = emitter({\r\n      isActive: true, element: slider, options: { draggable: false, adaptiveHeight: false, wrapAround: false, contain: true },\r\n      cells: slides.map(function (e) { return { element: e }; }),\r\n      selectedIndex: 0\r\n    });\r\n    Object.defineProperty(s, 'selectedElement', { get: function () { return slides[idx]; } });\r\n    Object.defineProperty(s, 'selectedCell', { get: function () { return s.cells[idx]; } });\r\n    addNoops(s);\r\n    s.getCellElements = function () { return slides.slice(); };\r\n    s.slides = s.cells;\r\n    s.viewport = s.slider = slider;\r\n    s.select = function (i, wrap, instant) { go(i, !instant); };\r\n    s.selectCell = function (i, wrap, instant) { go(typeof i === 'number' ? i : slides.indexOf(el(i)), !instant); };\r\n    s.previous = function () { go(idx - 1, true); };\r\n    s.next = function () { go(idx + 1, true); };\r\n    slider.__hoStub = s;\r\n\r\n    function clamp(i) { return Math.max(0, Math.min(slides.length - 1, i | 0)); }\r\n\r\n    function eager(i) {\r\n      var c = slides[i];\r\n      if (!c) return;\r\n      c.querySelectorAll('img[loading=\"lazy\"]').forEach(function (img) { img.loading = 'eager'; });\r\n    }\r\n    function eagerAround(i) { eager(i); eager(i + 1); eager(i + 2); eager(i - 1); }\r\n\r\n    function thumbFor(i) {\r\n      if (!thumbsEl || !slides[i]) return null;\r\n      return thumbsEl.querySelector('[data-id=\"' + slides[i].getAttribute('data-id') + '\"]');\r\n    }\r\n    function showThumb(t) {\r\n      if (!t) return;\r\n      var l = t.offsetLeft, r = l + t.offsetWidth, vl = thumbsEl.scrollLeft, vr = vl + thumbsEl.clientWidth;\r\n      if (l < vl) thumbsEl.scrollTo({ left: l - 8, behavior: 'smooth' });\r\n      else if (r > vr) thumbsEl.scrollTo({ left: r - thumbsEl.clientWidth + 8, behavior: 'smooth' });\r\n    }\r\n\r\n    function setActive(i, quiet) {\r\n      i = clamp(i);\r\n      if (i === idx && slides[i].classList.contains('is-selected')) return;\r\n      idx = i;\r\n      s.selectedIndex = i;\r\n      slides.forEach(function (c, j) {\r\n        c.classList.toggle('is-selected', j === i);\r\n        c.setAttribute('aria-hidden', j === i ? 'false' : 'true');\r\n      });\r\n      if (thumbsEl) {\r\n        var t = thumbFor(i);\r\n        Array.prototype.forEach.call(thumbsEl.children, function (c) {\r\n          var on = c === t;\r\n          c.classList.toggle('is-nav-selected', on);\r\n          c.classList.toggle('is-selected', on);\r\n        });\r\n        showThumb(t);\r\n      }\r\n      if (!quiet) eagerAround(i);\r\n      s.emit('select', [i]);\r\n      s.emit('change', [i]);\r\n    }\r\n\r\n    /* Same job as the theme's switchMedia(): pause media that left, show the one that arrived\r\n       (a product video starts when the shopper swipes onto it, exactly as before). */\r\n    function settle() {\r\n      if (settled === idx + 1) return;\r\n      settled = idx + 1;\r\n      var cur = slides[idx];\r\n      slides.forEach(function (c) {\r\n        if (c === cur) return;\r\n        if (!c.classList.contains('media--hidden')) c.dispatchEvent(new CustomEvent('theme:media:hidden', { bubbles: true }));\r\n        c.classList.add('media--hidden');\r\n      });\r\n      cur.classList.remove('media--hidden');\r\n      slider.classList.remove('has-media-active');\r\n      cur.dispatchEvent(new CustomEvent('theme:media:visible', { bubbles: true }));\r\n      var dm = cur.querySelector('[data-deferred-media]');\r\n      if (dm && dm.getAttribute('loaded') !== 'true') {\r\n        var b = cur.querySelector('[data-deferred-media-button]');\r\n        if (b) b.dispatchEvent(new Event('click'));\r\n      }\r\n      s.emit('settle', [idx]);\r\n    }\r\n\r\n    function indexFromScroll() {\r\n      var w = slider.clientWidth;\r\n      return w ? clamp(Math.round(slider.scrollLeft / w)) : idx;\r\n    }\r\n\r\n    function go(i, smooth) {\r\n      i = clamp(i);\r\n      var x = slides[i].offsetLeft;\r\n      eagerAround(i);\r\n      if (Math.abs(slider.scrollLeft - x) < 2) { setActive(i); settle(); return; }\r\n      if (smooth && slider.scrollTo) slider.scrollTo({ left: x, behavior: 'smooth' });\r\n      else slider.scrollLeft = x;\r\n      setActive(i);\r\n      if (!smooth) settle();\r\n    }\r\n\r\n    var ticking = false;\r\n    slider.addEventListener('scroll', function () {\r\n      if (!ticking) {\r\n        ticking = true;\r\n        requestAnimationFrame(function () { ticking = false; setActive(indexFromScroll()); });\r\n      }\r\n      clearTimeout(settleTimer);\r\n      settleTimer = setTimeout(function () { setActive(indexFromScroll()); settle(); }, 140);\r\n    }, { passive: true });\r\n    if ('onscrollend' in window) {\r\n      slider.addEventListener('scrollend', function () { clearTimeout(settleTimer); setActive(indexFromScroll()); settle(); }, { passive: true });\r\n    }\r\n\r\n    /* Finger on the photos: the next two are needed now, not later. */\r\n    slider.addEventListener('touchstart', function () { eagerAround(idx); }, { passive: true });\r\n\r\n    slider.addEventListener('keydown', function (e) {\r\n      if (e.target !== slider) return;\r\n      if (e.key === 'ArrowRight') { e.preventDefault(); go(idx + 1, true); }\r\n      else if (e.key === 'ArrowLeft') { e.preventDefault(); go(idx - 1, true); }\r\n    });\r\n\r\n    if (thumbsEl) {\r\n      thumbsEl.addEventListener('click', function (e) {\r\n        var t = e.target.closest('.product-single__thumbnail');\r\n        if (!t || !thumbsEl.contains(t)) return;\r\n        e.preventDefault();\r\n        var id = t.getAttribute('data-id');\r\n        for (var j = 0; j < slides.length; j++) {\r\n          if (slides[j].getAttribute('data-id') === id) { go(j, true); break; }\r\n        }\r\n      });\r\n    }\r\n\r\n    /* The favourite heart is appended to the slider by another script; move it onto the\r\n       gallery so it does not scroll away with the photos. */\r\n    function placeHeart(h) {\r\n      if (h.parentNode !== gallery) gallery.appendChild(h);\r\n      if (getComputedStyle(gallery).position === 'static') gallery.style.position = 'relative';\r\n      var right = gallery.clientWidth - (slider.offsetLeft + slider.offsetWidth) + 14;\r\n      h.style.setProperty('top', (slider.offsetTop + 14) + 'px', 'important');\r\n      h.style.setProperty('right', right + 'px', 'important');\r\n    }\r\n    function findHeart() {\r\n      var h = slider.querySelector(':scope > .hog-fav') || gallery.querySelector(':scope > .hog-fav');\r\n      if (h) placeHeart(h);\r\n    }\r\n    new MutationObserver(findHeart).observe(slider, { childList: true });\r\n    /* Only re-align when the gallery width really changed (rotation), not when the iOS\r\n       address bar shows or hides during a scroll. */\r\n    var lastW = slider.clientWidth;\r\n    window.addEventListener('resize', function () {\r\n      findHeart();\r\n      var w = slider.clientWidth;\r\n      if (w === lastW) return;\r\n      lastW = w;\r\n      if (MQ.matches && !slider.classList.contains('flickity-enabled')) slider.scrollLeft = slides[idx].offsetLeft;\r\n    });\r\n\r\n    /* Initial state, then warm the second photo once the page has finished loading. */\r\n    var start = clamp(indexFromScroll());\r\n    idx = -1;\r\n    setActive(start, true);\r\n    settled = start + 1; /* first slide is already shown, nothing to switch */\r\n    function warm() { eager(start + 1); eager(start + 2); }\r\n    if (document.readyState === 'complete') setTimeout(warm, 1200);\r\n    else window.addEventListener('load', function () { setTimeout(warm, 1200); });\r\n\r\n    return s;\r\n  }\r\n\r\n  function Wrapped(target, opts) {\r\n    var e = el(target);\r\n    if (isTarget(e)) {\r\n      if (e.__hoStub) return e.__hoStub;\r\n      return e.hasAttribute('data-product-single-media-slider') ? galleryStub(e) : thumbsStub(e);\r\n    }\r\n    return new F(target, opts);\r\n  }\r\n  Object.setPrototypeOf(Wrapped, F);\r\n  Wrapped.prototype = F.prototype;\r\n  Wrapped.data = function (target) {\r\n    var e = el(target);\r\n    var real = F.data(target);\r\n    return real || (e && e.__hoStub) || undefined;\r\n  };\r\n  Wrapped.__hoSnap = true;\r\n  window.theme.Flickity = Wrapped;\r\n})();\r\n\r\n/* Animated photos (webp/gif \"motion\" clips, marked data-ho-anim by snippets/media.liquid).\r\n   The page shows a still first frame. The animation (0.9-1.6 MB) is fetched in the\r\n   background once the page has loaded, or earlier if the shopper touches the photos,\r\n   so it is usually ready by the time that photo is on screen. It plays only while that\r\n   photo is the one on screen and returns to the still frame when the shopper moves on,\r\n   so it never decodes in the background. The download is kept alive by its own Image\r\n   object, so swiping away before it finishes does not cancel it. */\r\n(function () {\r\n  if (window.__hoAnim) return;\r\n  window.__hoAnim = true;\r\n  var SECTION = '[data-section-type=\"product-template\"]';\r\n  var cache = {};\r\n  /* Phones get the 360px clip (~0.9 MB) instead of 540px (~1.6 MB): the photo is ~370px\r\n     wide there and the motion reads the same, it just arrives about twice as fast. */\r\n  var SMALL = window.matchMedia('(max-width: 1023px)').matches;\r\n  function animUrl(im) {\r\n    var u = im.getAttribute('data-ho-anim') || '';\r\n    return SMALL ? u.replace(/([?&]width=)\\d+/, '$1360') : u;\r\n  }\r\n\r\n  function animImg(slide) {\r\n    return slide && slide.querySelector ? slide.querySelector('img[data-ho-anim]') : null;\r\n  }\r\n  function fetchAnim(url, done) {\r\n    var c = cache[url];\r\n    if (!c) {\r\n      c = cache[url] = { img: new Image(), ready: false, cbs: [] };\r\n      c.img.decoding = 'async';\r\n      c.img.onload = function () {\r\n        c.ready = true;\r\n        var cbs = c.cbs; c.cbs = [];\r\n        cbs.forEach(function (f) { f(); });\r\n      };\r\n      c.img.src = url;\r\n    }\r\n    if (done) { if (c.ready) done(); else c.cbs.push(done); }\r\n    return c;\r\n  }\r\n  function prefetchAll() {\r\n    document.querySelectorAll(SECTION + ' img[data-ho-anim]').forEach(function (im) {\r\n      fetchAnim(animUrl(im));\r\n    });\r\n  }\r\n  /* Show the clip by putting the already-downloaded Image in place of the still <img>\r\n     (no second request, starts moving at once); put the still back when leaving. */\r\n  function play(slide) {\r\n    if (!slide || slide.__hoAnimOn) return;\r\n    var still = slide.__hoStillImg || animImg(slide);\r\n    if (!still) return;\r\n    slide.__hoStillImg = still;\r\n    slide.__hoAnimOn = true;\r\n    var url = animUrl(still);\r\n    var c = fetchAnim(url);\r\n    fetchAnim(url, function () {\r\n      if (!slide.__hoAnimOn || !still.parentNode) return;\r\n      var live = c.img;\r\n      live.className = still.className;\r\n      live.alt = still.alt;\r\n      ['width', 'height', 'style'].forEach(function (k) {\r\n        var v = still.getAttribute(k);\r\n        if (v != null) live.setAttribute(k, v);\r\n      });\r\n      live.setAttribute('data-ho-anim-live', '');\r\n      still.replaceWith(live);\r\n    });\r\n  }\r\n  function stop(slide) {\r\n    if (!slide || !slide.__hoAnimOn) return;\r\n    slide.__hoAnimOn = false;\r\n    var still = slide.__hoStillImg;\r\n    var live = slide.querySelector('img[data-ho-anim-live]');\r\n    if (still && live && !still.parentNode) live.replaceWith(still);\r\n  }\r\n  document.addEventListener('theme:media:visible', function (e) { play(e.target); }, true);\r\n  document.addEventListener('theme:media:hidden', function (e) { stop(e.target); }, true);\r\n\r\n  /* Start the download the moment the shopper shows interest in the photos. */\r\n  function onIntent(e) {\r\n    var t = e.target;\r\n    if (t && t.closest && t.closest(SECTION + ' [data-product-single-media-group], ' + SECTION + ' [data-product-single-media-thumbs]')) prefetchAll();\r\n  }\r\n  ['pointerdown', 'touchstart', 'mouseover'].forEach(function (n) {\r\n    document.addEventListener(n, onIntent, { capture: true, passive: true });\r\n  });\r\n  /* Phone scroller: start the clip as soon as its photo is the one mostly on screen,\r\n     without waiting for the swipe to fully settle (that can lag on a busy phone). */\r\n  var rafPending = false;\r\n  document.addEventListener('scroll', function (e) {\r\n    var t = e.target;\r\n    if (!(t && t.nodeType === 1 && t.hasAttribute('data-product-single-media-slider'))) return;\r\n    prefetchAll();\r\n    if (rafPending) return;\r\n    rafPending = true;\r\n    requestAnimationFrame(function () {\r\n      rafPending = false;\r\n      var w = t.clientWidth;\r\n      if (!w) return;\r\n      var slides = Array.prototype.filter.call(t.children, function (c) { return c.hasAttribute('data-product-single-media-wrapper'); });\r\n      var i = Math.round(t.scrollLeft / w);\r\n      slides.forEach(function (sl, j) { if (j === i) play(sl); else if (sl.__hoAnimOn) stop(sl); });\r\n    });\r\n  }, { capture: true, passive: true });\r\n\r\n  function afterLoad() {\r\n    /* A clip already on screen when the page opens starts now. */\r\n    var shown = document.querySelector(SECTION + ' [data-product-single-media-wrapper].is-selected') ||\r\n      document.querySelector(SECTION + ' [data-product-single-media-wrapper]:not(.media--hidden)');\r\n    if (shown) play(shown);\r\n    /* Once the page itself has loaded, get the clips ready in the background so the\r\n       motion starts as soon as the shopper swipes to it (skipped on Data Saver / 2G). */\r\n    var c = navigator.connection;\r\n    var skip = c && (c.saveData || /(^|-)2g$/.test(c.effectiveType || ''));\r\n    if (!skip && document.querySelector(SECTION + ' img[data-ho-anim]')) prefetchAll();\r\n  }\r\n  if (document.readyState === 'complete') setTimeout(afterLoad, 800);\r\n  else window.addEventListener('load', function () { setTimeout(afterLoad, 800); });\r\n})();\r\n\r\n/* Deferred app blocks (sections/apps.liquid wraps the Judge.me review widget and reviews\r\n   grid on product pages in <div data-ho-lazy-app><template>\u2026</template></div>).\r\n   Nothing of them is laid out, run or downloaded while the page loads. A few seconds after\r\n   the page has loaded (or earlier, when the shopper scrolls to within about one screen of\r\n   them or taps the star rating / a review link), the blocks go on the page, their inline data runs, and Judge.me's widget code is fetched the\r\n   same way its loader does it on a normal page load. The holder keeps the space the\r\n   reviews will take, so nothing below jumps when they appear. */\r\n(function () {\r\n  if (window.__hoLazyApp) return;\r\n  window.__hoLazyApp = true;\r\n\r\n  function hosts() { return Array.prototype.slice.call(document.querySelectorAll('[data-ho-lazy-app]')); }\r\n\r\n  /* Same steps as Judge.me's loader.js for widgets present at page load. */\r\n  var loadedEntry = {};\r\n  function manifestCss(base, key) {\r\n    return fetch(base + 'manifest.json?v=' + Date.now()).then(function (r) { return r.json(); }).then(function (m) {\r\n      var seen = {};\r\n      function add(href) {\r\n        var u = base + href;\r\n        if (document.querySelector('link[href=\"' + u + '\"]')) return;\r\n        var l = document.createElement('link'); l.rel = 'stylesheet'; l.href = u; document.head.appendChild(l);\r\n      }\r\n      function walk(k) {\r\n        if (seen[k]) return; seen[k] = true;\r\n        var c = m[k]; if (!c) return;\r\n        (c.css || []).forEach(add); (c.imports || []).forEach(walk);\r\n      }\r\n      var top = m[key]; if (!top) return;\r\n      (top.css || []).forEach(add); (top.imports || []).forEach(walk);\r\n    }).catch(function () {});\r\n  }\r\n  function startWidget(e) {\r\n    var J = window.jdgm || {}, S = window.jdgmSettings || {};\r\n    var base = J.CDN_BASE_URL, ep = e.dataset.entryPoint, key = e.dataset.entryKey;\r\n    if (!base || !ep || !key) return;\r\n    if (e.dataset.widget === 'review') {\r\n      var legacy = e.querySelector('.jdgm-legacy-widget-content');\r\n      var hasLegacy = !!(legacy && legacy.innerHTML.trim().length > 20);\r\n      var d = J.data && J.data.reviewWidget && J.data.reviewWidget[e.dataset.productId];\r\n      var hasRevamp = !!(d && d.reviews !== void 0);\r\n      var revamp = S.review_widget_revamp_enabled ? (hasRevamp || !hasLegacy) : (!hasLegacy && hasRevamp);\r\n      if (!revamp) {\r\n        if (legacy) legacy.style.display = '';\r\n        var s0 = e.querySelector('.jdgm-ssr-reviews'); if (s0) s0.remove();\r\n        return;\r\n      }\r\n    }\r\n    var src = base + ep;\r\n    var old = e.querySelector('.jdgm-rev-widg'); if (old) old.style.display = 'none';\r\n    var ssr = e.querySelector('.jdgm-ssr-reviews'); if (ssr) ssr.remove();\r\n    if (loadedEntry[src] || document.querySelector('script[src=\"' + src + '\"]')) return;\r\n    loadedEntry[src] = true;\r\n    manifestCss(base, key).then(function () {\r\n      var sc = document.createElement('script'); sc.type = 'module'; sc.src = src; document.head.appendChild(sc);\r\n    });\r\n  }\r\n\r\n  /* Space kept for each block before it is drawn: the height it had last time on a screen\r\n     of this width (remembered per visitor), else the stylesheet default. */\r\n  var KEY = 'ho-lazy-h';\r\n  function bucket() { return Math.round(window.innerWidth / 20) * 20; }\r\n  function remembered() { try { return JSON.parse(localStorage.getItem(KEY) || '{}'); } catch (e) { return {}; } }\r\n  function remember(kind, h) {\r\n    try { var m = remembered(); m[kind + '@' + bucket()] = h; localStorage.setItem(KEY, JSON.stringify(m)); } catch (e) {}\r\n  }\r\n  function contentHeight(host) {\r\n    var h = 0;\r\n    Array.prototype.forEach.call(host.children, function (c) { if (c.tagName !== 'TEMPLATE') h += c.offsetHeight; });\r\n    return h;\r\n  }\r\n\r\n  /* Once the reviews have drawn and stopped changing size, the holder takes their real\r\n     height. If the holder is above the screen (the shopper already scrolled past), the\r\n     page is scrolled by the same amount in the same frame, so nothing on screen moves. */\r\n  function release(host) {\r\n    var last = -1, still = 0, start = Date.now();\r\n    var timer = setInterval(function () {\r\n      if (Date.now() - start > 120000) { clearInterval(timer); return; }\r\n      if (!host.classList.contains('is-ready')) return;\r\n      var content = contentHeight(host);\r\n      still = (content === last && content > 0) ? still + 1 : 0; last = content;\r\n      if (still < 2) return;\r\n      clearInterval(timer);\r\n      remember(host.getAttribute('data-ho-lazy-app'), content);\r\n      var above = host.getBoundingClientRect().bottom <= 0;\r\n      var ref = host.closest('.shopify-section') || host;\r\n      var y0 = ref.getBoundingClientRect().bottom;\r\n      host.style.minHeight = '';\r\n      host.classList.add('is-live');\r\n      if (above) {\r\n        var moved = ref.getBoundingClientRect().bottom - y0; /* 0 if the browser already anchored */\r\n        if (moved) window.scrollBy(0, moved);\r\n      }\r\n    }, 300);\r\n  }\r\n\r\n  function open(host) {\r\n    if (host.__hoOpen) return;\r\n    host.__hoOpen = true;\r\n    var tpl = host.querySelector(':scope > template');\r\n    if (!tpl) return;\r\n    host.appendChild(document.importNode(tpl.content, true)); /* inline data scripts run here */\r\n    tpl.remove();\r\n    host.querySelectorAll('.jdgm-widget[data-entry-point]').forEach(startWidget);\r\n    if (typeof window.HoJdgmLoad === 'function') window.HoJdgmLoad();\r\n    host.classList.add('is-open');\r\n    reveal(host);\r\n    release(host);\r\n  }\r\n\r\n  /* The blocks stay invisible (space kept) until Judge.me has drawn them, then appear in\r\n     one go: no half-drawn widget jumping around in front of the shopper. */\r\n  var READY = { review: '.jm-review-widget-header, .jdgm-rev-widg__header, .jdgm-legacy-widget-content .jdgm-rev-widg', grid: '.jdgm-reviews-grid-widget [class*=\"card\"]' };\r\n  function reveal(host) {\r\n    var sel = READY[host.getAttribute('data-ho-lazy-app')] || '*';\r\n    var start = Date.now(), last = -1, stable = 0;\r\n    (function tick() {\r\n      var ok = !!host.querySelector(sel);\r\n      if (ok) { var h = host.scrollHeight; stable = (h === last) ? stable + 1 : 0; last = h; }\r\n      if ((ok && stable >= 2) || Date.now() - start > 10000) { host.classList.add('is-ready'); return; }\r\n      setTimeout(tick, 120);\r\n    })();\r\n  }\r\n\r\n  function scrollToReviews() {\r\n    var target = document.querySelector('[data-ho-lazy-app=\"review\"]') || document.querySelector('[data-ho-lazy-app]');\r\n    if (!target) return;\r\n    var header = document.querySelector('.site-header, [data-header-height]');\r\n    var off = header ? Math.min(header.getBoundingClientRect().height, 140) : 0;\r\n    var y = target.getBoundingClientRect().top + window.pageYOffset - off - 12;\r\n    window.scrollTo({ top: Math.max(0, y), behavior: 'smooth' });\r\n  }\r\n  function openAll() { hosts().forEach(open); }\r\n\r\n  function setup() {\r\n    var list = hosts();\r\n    if (!list.length) return;\r\n    var mem = remembered();\r\n    list.forEach(function (h) {\r\n      var v = mem[h.getAttribute('data-ho-lazy-app') + '@' + bucket()];\r\n      if (v > 0) h.style.minHeight = v + 'px';\r\n    });\r\n    /* Draw them anyway once the page has finished loading and the phone is idle, so they\r\n       are normally ready before the shopper gets there. */\r\n    var idleOpen = function () {\r\n      var go = function () { openAll(); };\r\n      if ('requestIdleCallback' in window) requestIdleCallback(go, { timeout: 3000 }); else go();\r\n    };\r\n    if (document.readyState === 'complete') setTimeout(idleOpen, 2500);\r\n    else window.addEventListener('load', function () { setTimeout(idleOpen, 2500); });\r\n    /* Arriving with #judgeme_product_reviews (e.g. from an email) shows them at once. */\r\n    if (/judgeme/.test(location.hash)) { openAll(); return; }\r\n    if ('IntersectionObserver' in window) {\r\n      var io = new IntersectionObserver(function (entries) {\r\n        if (entries.some(function (en) { return en.isIntersecting; })) { io.disconnect(); openAll(); }\r\n      }, { rootMargin: '100% 0px 100% 0px' }); /* one screen ahead, either direction */\r\n      list.forEach(function (h) { io.observe(h); });\r\n    } else {\r\n      openAll();\r\n    }\r\n    /* Star rating under the title / any \"see reviews\" link: open before the page scrolls. */\r\n    document.addEventListener('click', function (e) {\r\n      var t = e.target;\r\n      if (!(t && t.closest && t.closest('.jdgm-prev-badge, .jdgm-preview-badge, [data-ho-review-jump], a[href*=\"#judgeme\"]'))) return;\r\n      var wasClosed = hosts().some(function (h) { return !h.__hoOpen; });\r\n      openAll();\r\n      /* Judge.me's own \"jump to reviews\" is not wired up yet when the reviews were still\r\n         deferred, so do the jump here (space is already reserved, the spot will not move). */\r\n      if (wasClosed) { e.preventDefault(); scrollToReviews(); return; }\r\n      /* Already open: Judge.me jumps there itself; if it did not (still busy), we do. */\r\n      setTimeout(function () {\r\n        var r = document.querySelector('[data-ho-lazy-app=\"review\"]');\r\n        if (r && Math.abs(r.getBoundingClientRect().top) > 240) scrollToReviews();\r\n      }, 600);\r\n    }, true);\r\n  }\r\n  /* After DOMContentLoaded, i.e. after Judge.me's own loader has run for the page. */\r\n  if (document.readyState === 'complete') setup();\r\n  else document.addEventListener('DOMContentLoaded', function () { setTimeout(setup, 0); });\r\n})();\r\n"],
  "mappings": "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",
  "names": []
}
