{
  "version": 3,
  "sources": ["/cdn/shop/t/14/assets/lvb-sticky.js?t=1789693497263"],
  "sourcesContent": ["/* Levano \u00B7 sticky add-to-cart bar (product page only).\n   The button takes the shopper back up to the bundle offers so they can pick\n   one \u2014 it does not add anything to the cart by itself.\n   Bundle 2 is preselected on load unless the shopper picks another one first. */\n(function(){\n  var bar, imgEl, nameEl, priceEl, built = false, touched = false, bundleDone = false;\n\n  function q(s){return document.querySelector(s)}\n  function all(s){return [].slice.call(document.querySelectorAll(s))}\n  function visible(el){return !!(el && (el.offsetParent !== null || el.getClientRects().length) && el.getBoundingClientRect().height > 0)}\n\n  function mainCta(){\n    var list = all('.lvf-cta');\n    for (var i = 0; i < list.length; i++) if (visible(list[i])) return list[i];\n    return list[0] || null;\n  }\n\n  function productName(){\n    var n = q('.lvf-title') || q('.lvf-buy__title') || q('.product__title h1') || q('h1');\n    return n ? n.textContent.trim() : document.title;\n  }\n\n  function heroImage(){\n    var best = null, area = 0;\n    all('.lvf-gal img, .lvf-gal__main img, .product__media img').forEach(function(im){\n      var r = im.getBoundingClientRect();\n      var a = r.width * r.height;\n      if (a > area && (im.currentSrc || im.src)) { area = a; best = im; }\n    });\n    return best ? (best.currentSrc || best.src) : '';\n  }\n\n  function priceText(){\n    var lab = q('[data-lvf-cta-label]');\n    var m = (lab ? lab.textContent : '').match(/([\u20AC\u00A3$]\\s?[\\d.,]+)/);\n    if (m) return m[1];\n    var p = q('.lvf-price__now') || q('.price-item--regular');\n    return p ? p.textContent.trim() : '';\n  }\n\n  /* ---------- bundle 2 preselected ---------- */\n  function bundleBars(){ return all('.rapi-bundles__bar'); }\n\n  function selectSecondBundle(){\n    if (bundleDone || touched) return;\n    var bars = bundleBars();\n    if (bars.length < 2) return;\n    var input = bars[1].querySelector('input[type=\"radio\"]');\n    if (!input) return;\n    bundleDone = true;\n    if (input.checked) return;\n    var target = bars[1].querySelector('label') || bars[1].querySelector('.rapi-bundles__bar-container') || input;\n    target.click();\n    if (!input.checked) { input.checked = true; input.dispatchEvent(new Event('change', { bubbles: true })); }\n  }\n\n  document.addEventListener('click', function(e){\n    if (e.target.closest && e.target.closest('.rapi-bundles')) touched = true;\n  }, true);\n\n  /* ---------- the bar ---------- */\n  function build(){\n    bar = document.createElement('div');\n    bar.className = 'lvsb';\n    bar.innerHTML =\n      '<div class=\"lvsb__in\">' +\n        '<img class=\"lvsb__img\" alt=\"\" decoding=\"async\">' +\n        '<div class=\"lvsb__txt\">' +\n          '<span class=\"lvsb__name\"></span>' +\n          '<span class=\"lvsb__price\"></span>' +\n        '</div>' +\n        '<button type=\"button\" class=\"lvsb__btn\">Add to cart</button>' +\n      '</div>';\n    document.body.appendChild(bar);\n    imgEl = bar.querySelector('.lvsb__img');\n    nameEl = bar.querySelector('.lvsb__name');\n    priceEl = bar.querySelector('.lvsb__price');\n    nameEl.textContent = productName();\n    bar.querySelector('.lvsb__btn').addEventListener('click', toBundles);\n    built = true;\n    sync();\n  }\n\n  function sync(){\n    if (!built) return;\n    var src = heroImage();\n    if (src && imgEl.getAttribute('src') !== src) imgEl.setAttribute('src', src);\n    var p = priceText();\n    priceEl.innerHTML = p ? '<b>' + p + '</b>' : '';\n  }\n\n  /* ---------- scroll up to the offers ---------- */\n  /* the sticky header slides back in while scrolling up, so leave room for its\n     full height rather than reading where it happens to be right now */\n  function headerOffset(){\n    var h = q('.section-header') || q('header');\n    if (!h) return 14;\n    var pos = getComputedStyle(h).position;\n    return (pos === 'sticky' || pos === 'fixed' ? h.offsetHeight : 0) + 14;\n  }\n\n  /* the whole offer block, starting at its \"Choose your offer\" heading */\n  function bundleTarget(){\n    return q('[class*=\"rapi-bundle-content\"]') || q('.rapi-bundles') || q('.lvf-form') || mainCta();\n  }\n\n  function toBundles(e){\n    if (e) e.preventDefault();\n    var t = bundleTarget();\n    if (!t) return;\n    var se = document.scrollingElement || document.documentElement;\n    var from = se.scrollTop;\n    var y = Math.max(0, Math.round(from + t.getBoundingClientRect().top - headerOffset()));\n    try { window.scrollTo({ top: y, behavior: 'smooth' }); } catch (err) { window.scrollTo(0, y); }\n    /* some browsers swallow a smooth scroll \u2014 if the page never moved, jump */\n    setTimeout(function(){\n      if (Math.abs(se.scrollTop - from) < 2 && Math.abs(from - y) > 2) {\n        var prev = document.documentElement.style.scrollBehavior;\n        document.documentElement.style.scrollBehavior = 'auto';\n        window.scrollTo(0, y);\n        document.documentElement.style.scrollBehavior = prev;\n      }\n    }, 400);\n  }\n\n  function onScroll(){\n    var cta = mainCta();\n    if (!cta) return;\n    if (!built) build();\n    var r = cta.getBoundingClientRect();\n    var show = r.height > 0 && r.bottom < 64;\n    if (show) sync();\n    bar.classList.toggle('is-on', show);\n  }\n\n  function start(){\n    if (!q('.lvf-cta')) return;               /* product page only */\n    onScroll();\n    selectSecondBundle();\n    window.addEventListener('scroll', onScroll, { passive: true });\n    window.addEventListener('resize', onScroll);\n    document.addEventListener('shopify:section:load', onScroll);\n    /* the bundle widget and the price label render late */\n    var n = 0, t = setInterval(function(){\n      onScroll();\n      selectSecondBundle();\n      if (++n > 30) clearInterval(t);\n    }, 400);\n  }\n\n  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', start);\n  else start();\n})();\n"],
  "mappings": "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",
  "names": []
}
