{
  "version": 3,
  "sources": ["/cdn/shop/t/7/assets/leaflock-site-dose-v2.js?codex_verify=1784020129"],
  "sourcesContent": ["(function () {\n  var mappyListTouched = false;\n  var mapActiveTimer;\n\n  document.addEventListener('click', function (event) {\n    if (!event.target.closest('.store-list-button.show-on-mobile')) return;\n\n    if (document.body.classList.contains('leaflock-mappy-list-collapsed')) {\n      event.preventDefault();\n      event.stopImmediatePropagation();\n    }\n\n    mappyListTouched = true;\n    document.body.classList.remove('leaflock-mappy-list-collapsed');\n  }, true);\n\n  document.addEventListener('click', function (event) {\n    if (!event.target.closest('.leaflock-map-activate')) return;\n\n    event.preventDefault();\n    event.stopImmediatePropagation();\n    setMappyMapActive(true);\n  }, true);\n\n  document.addEventListener('click', function (event) {\n    var trigger = event.target.closest('[data-leaflock-shop-quick]');\n    if (!trigger) return;\n\n    var form = trigger.closest('form');\n    if (!form) return;\n\n    event.preventDefault();\n\n    var variantInput = form.querySelector('[name=\"id\"]');\n    var variantId = variantInput ? variantInput.value : '';\n    var quantityInput = form.querySelector('[name=\"quantity\"]');\n\n    if (!quantityInput && form.id) {\n      quantityInput = document.querySelector('[name=\"quantity\"][form=\"' + form.id + '\"]');\n    }\n\n    if (!quantityInput) {\n      var productInfo = trigger.closest('.hdt-product-info__list, .hdt-product-info, .hdt-product__info-container, .hdt-main-product');\n      quantityInput = productInfo ? productInfo.querySelector('[name=\"quantity\"]') : null;\n    }\n\n    var quantity = quantityInput ? parseInt(quantityInput.value, 10) : 1;\n    if (!variantId) {\n      form.requestSubmit();\n      return;\n    }\n\n    if (!quantity || quantity < 1) {\n      quantity = 1;\n    }\n\n    window.location.href = '/cart/' + encodeURIComponent(variantId) + ':' + encodeURIComponent(quantity) + '?checkout';\n  }, true);\n\n  function collapseMappyStoreListOnMobile() {\n    if (!window.matchMedia('(max-width: 749px)').matches || mappyListTouched) {\n      document.body.classList.remove('leaflock-mappy-list-collapsed');\n      return;\n    }\n\n    var list = document.querySelector('#bss-map-search-box');\n    if (list) {\n      document.body.classList.add('leaflock-mappy-list-collapsed');\n    }\n  }\n\n  function bindMappyStoreListButton() {\n    var button = document.querySelector('.store-list-button.show-on-mobile');\n    if (!button || button.dataset.leaflockBound === 'true') return;\n\n    button.dataset.leaflockBound = 'true';\n    button.addEventListener('pointerdown', function () {}, true);\n  }\n\n  function tuneMappyStoreList() {\n    bindMappyStoreListButton();\n    collapseMappyStoreListOnMobile();\n    tuneMappyMapTouch();\n  }\n\n  function setMappyMapActive(active) {\n    document.body.classList.toggle('leaflock-mappy-map-active', active);\n    document.body.classList.toggle('leaflock-mappy-map-passive', !active);\n\n    if (mapActiveTimer) {\n      window.clearTimeout(mapActiveTimer);\n    }\n\n    if (active) {\n      mapActiveTimer = window.setTimeout(function () {\n        setMappyMapActive(false);\n      }, 12000);\n    }\n  }\n\n  function tuneMappyMapTouch() {\n    var map = document.querySelector('#store-locator-page-parent');\n    if (!map) return;\n\n    if (!map.querySelector('.leaflock-map-activate')) {\n      var overlay = document.createElement('button');\n      overlay.type = 'button';\n      overlay.className = 'leaflock-map-activate';\n      overlay.textContent = 'Tap to use map';\n      map.appendChild(overlay);\n    }\n\n    if (window.matchMedia('(max-width: 749px)').matches) {\n      if (!document.body.classList.contains('leaflock-mappy-map-active')) {\n        document.body.classList.add('leaflock-mappy-map-passive');\n      }\n    } else {\n      document.body.classList.remove('leaflock-mappy-map-passive', 'leaflock-mappy-map-active');\n    }\n\n    if (map.dataset.leaflockMapBound === 'true') return;\n\n    map.dataset.leaflockMapBound = 'true';\n    map.addEventListener('pointerdown', function () {}, true);\n  }\n\n  function watchMappyStoreList() {\n    var observer = new MutationObserver(tuneMappyStoreList);\n    observer.observe(document.body, {\n      childList: true,\n      subtree: true\n    });\n\n    for (var i = 1; i <= 8; i += 1) {\n      setTimeout(tuneMappyStoreList, i * 700);\n    }\n  }\n\n  function formatMoney(cents) {\n    var currency = window.Shopify && Shopify.currency && Shopify.currency.active ? Shopify.currency.active : 'AUD';\n    return new Intl.NumberFormat(undefined, {\n      style: 'currency',\n      currency: currency\n    }).format((Number(cents) || 0) / 100);\n  }\n\n  function updateSmartBundle(bundle) {\n    var total = 0;\n\n    bundle.querySelectorAll('[data-leaflock-smart-bundle-item]').forEach(function (item) {\n      var checkbox = item.querySelector('[data-leaflock-smart-bundle-check]');\n      var selector = item.querySelector('[data-leaflock-smart-bundle-select]');\n      var selected = selector && selector.options ? selector.options[selector.selectedIndex] : selector;\n      var price = selected ? Number(selected.dataset.price || 0) : 0;\n      var comparePrice = selected ? Number(selected.dataset.comparePrice || 0) : 0;\n      var priceNode = item.querySelector('[data-leaflock-smart-bundle-price]');\n      var compareNode = item.querySelector('[data-leaflock-smart-bundle-compare]');\n\n      if (priceNode) priceNode.textContent = formatMoney(price);\n      if (compareNode) {\n        compareNode.textContent = comparePrice > price ? formatMoney(comparePrice) : '';\n        compareNode.hidden = comparePrice <= price;\n      }\n\n      item.classList.toggle('is-unchecked', checkbox && !checkbox.checked);\n      if (!checkbox || checkbox.checked) total += price;\n    });\n\n    var totalNode = bundle.querySelector('[data-leaflock-smart-bundle-total]');\n    if (totalNode) totalNode.textContent = formatMoney(total);\n  }\n\n  function bindSmartBundle(bundle) {\n    if (bundle.dataset.leaflockBound === 'true') return;\n    bundle.dataset.leaflockBound = 'true';\n\n    bundle.addEventListener('change', function () {\n      updateSmartBundle(bundle);\n    });\n\n    bundle.addEventListener('submit', function (event) {\n      event.preventDefault();\n\n      var button = bundle.querySelector('.leaflock-smart-bundle__button');\n      var message = bundle.querySelector('[data-leaflock-smart-bundle-message]');\n      var items = [];\n\n      bundle.querySelectorAll('[data-leaflock-smart-bundle-item]').forEach(function (item) {\n        var checkbox = item.querySelector('[data-leaflock-smart-bundle-check]');\n        var selector = item.querySelector('[data-leaflock-smart-bundle-select]');\n        if (checkbox && !checkbox.checked) return;\n        if (!selector || !selector.value) return;\n\n        items.push({\n          id: Number(selector.value),\n          quantity: 1\n        });\n      });\n\n      if (!items.length) return;\n      if (button) button.setAttribute('aria-busy', 'true');\n      if (message) message.textContent = '';\n\n      fetch('/cart/add.js', {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          'Accept': 'application/json'\n        },\n        body: JSON.stringify({ items: items })\n      }).then(function (response) {\n        if (!response.ok) throw new Error('Cart add failed');\n        return response.json();\n      }).then(function () {\n        if (message) message.textContent = window.LeafLockSmartBundleAdded || 'Selected products added to cart.';\n        document.dispatchEvent(new CustomEvent('cart:refresh'));\n      }).catch(function () {\n        if (message) message.textContent = window.LeafLockSmartBundleError || 'Something went wrong. Please try again.';\n      }).finally(function () {\n        if (button) button.removeAttribute('aria-busy');\n      });\n    });\n\n    updateSmartBundle(bundle);\n  }\n\n  function initSmartBundles() {\n    document.querySelectorAll('[data-leaflock-smart-bundle-form]').forEach(bindSmartBundle);\n  }\n\n  function initCartUpsells() {\n    if (window.leaflockCartUpsellBound) return;\n    window.leaflockCartUpsellBound = true;\n\n    document.addEventListener('change', function (event) {\n      var selector = event.target.closest('[data-leaflock-cart-upsell-select]');\n      if (!selector) return;\n\n      var card = selector.closest('.leaflock-cart-upsell__card');\n      var button = card ? card.querySelector('[data-leaflock-cart-upsell-add]') : null;\n      var price = card ? card.querySelector('[data-leaflock-cart-upsell-price]') : null;\n      var selected = selector.options ? selector.options[selector.selectedIndex] : selector;\n\n      if (button) button.dataset.variantId = selector.value;\n      if (price && selected && selected.dataset.price) price.textContent = formatMoney(selected.dataset.price);\n    });\n\n    document.addEventListener('click', function (event) {\n      var button = event.target.closest('[data-leaflock-cart-upsell-add]');\n      if (!button) return;\n\n      event.preventDefault();\n\n      var card = button.closest('.leaflock-cart-upsell__card');\n      var root = button.closest('[data-leaflock-cart-upsell]');\n      var selector = card ? card.querySelector('[data-leaflock-cart-upsell-select]') : null;\n      var message = root ? root.querySelector('[data-leaflock-cart-upsell-message]') : null;\n      var variantId = selector && selector.value ? selector.value : button.dataset.variantId;\n\n      if (!variantId) return;\n\n      button.setAttribute('aria-busy', 'true');\n      button.disabled = true;\n      if (message) message.textContent = '';\n\n      fetch('/cart/add.js', {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'application/json',\n          'Accept': 'application/json'\n        },\n        body: JSON.stringify({\n          items: [\n            {\n              id: Number(variantId),\n              quantity: 1\n            }\n          ]\n        })\n      }).then(function (response) {\n        if (!response.ok) throw new Error('Cart add failed');\n        return response.json();\n      }).then(function () {\n        if (message) message.textContent = root && root.dataset.addedText ? root.dataset.addedText : 'Added to cart.';\n        document.dispatchEvent(new CustomEvent('cart:refresh'));\n        document.dispatchEvent(new CustomEvent('cart:updated'));\n      }).catch(function () {\n        if (message) message.textContent = root && root.dataset.errorText ? root.dataset.errorText : 'Something went wrong. Please try again.';\n      }).finally(function () {\n        button.removeAttribute('aria-busy');\n        button.disabled = false;\n      });\n    });\n  }\n\n  function getWishlistShareText(trigger) {\n    var baseText = 'I built my LeafLock wishlist. Tagging @leaflockofficial and @leaflockstore for the wishlist draw.';\n    var shareUrl = trigger.dataset.shareUrl || window.location.origin || window.location.href;\n    var titles = Array.prototype.slice.call(document.querySelectorAll('.hdt-main-wishlist .hdt-card-product__title'))\n      .map(function (title) {\n        return title.textContent.trim().replace(/\\s+/g, ' ');\n      })\n      .filter(Boolean);\n\n    if (titles.length) {\n      baseText += '\\nMy wishlist picks: ' + titles.slice(0, 5).join(', ');\n      if (titles.length > 5) baseText += ' +' + (titles.length - 5) + ' more';\n    }\n\n    return baseText + '\\n' + shareUrl;\n  }\n\n  function enhanceWishlistSharingPanel() {\n    var panel = document.querySelector('.leaflock-wishlist-social');\n    if (!panel) return;\n\n    var drawCopy = panel.querySelector('.leaflock-wishlist-draw-copy');\n    if (drawCopy) {\n      drawCopy.textContent = 'Screenshot your wishlist, post it to Instagram, Facebook or TikTok, tag @leaflockofficial and @leaflockstore, and keep the LeafLock link in your caption so we can find random wishlist draw entries.';\n    }\n\n    if (!panel.querySelector('.leaflock-wishlist-shot-card')) {\n      var textWrap = panel.firstElementChild;\n      if (textWrap) {\n        var shotCard = document.createElement('div');\n        shotCard.className = 'leaflock-wishlist-shot-card';\n        shotCard.innerHTML = '<span>Screenshot-ready wishlist</span><small>Copy the caption, screenshot this wishlist page, then post and tag both LeafLock accounts so we can find your entry.</small>';\n        textWrap.appendChild(shotCard);\n      }\n    }\n\n    panel.querySelectorAll('[data-leaflock-wishlist-share], [data-leaflock-wishlist-copy]').forEach(function (trigger) {\n      trigger.dataset.shareText = 'I built my LeafLock wishlist. Tagging @leaflockofficial and @leaflockstore for the wishlist draw.';\n      trigger.dataset.shareUrl = window.location.origin || trigger.dataset.shareUrl || window.location.href;\n      trigger.dataset.shareSuccess = 'Wishlist caption copied. Screenshot this page and tag both LeafLock accounts when you post.';\n    });\n\n    var actions = panel.querySelector('.leaflock-social-actions');\n    if (actions && !actions.querySelector('[href*=\"leaflockofficial\"]')) {\n      var officialLink = document.createElement('a');\n      officialLink.href = 'https://www.instagram.com/leaflockofficial/';\n      officialLink.target = '_blank';\n      officialLink.rel = 'noopener';\n      officialLink.className = 'leaflock-social-link leaflock-social-link--ghost';\n      officialLink.textContent = '@leaflockofficial';\n      actions.appendChild(officialLink);\n    }\n  }\n\n  function writeWishlistStatus(trigger, message) {\n    var wrapper = trigger.closest('.leaflock-wishlist-social');\n    var status = wrapper ? wrapper.querySelector('[data-leaflock-wishlist-status]') : null;\n    if (status) status.textContent = message || '';\n  }\n\n  function copyWishlistCaption(trigger) {\n    var text = getWishlistShareText(trigger);\n    var success = trigger.dataset.shareSuccess || 'Wishlist caption copied.';\n\n    if (navigator.clipboard && navigator.clipboard.writeText) {\n      navigator.clipboard.writeText(text).then(function () {\n        writeWishlistStatus(trigger, success);\n      }).catch(function () {\n        writeWishlistStatus(trigger, text);\n      });\n      return;\n    }\n\n    writeWishlistStatus(trigger, text);\n  }\n\n  function shareWishlist(trigger) {\n    copyWishlistCaption(trigger);\n  }\n\n  function bindWishlistSharing() {\n    document.addEventListener('click', function (event) {\n      var shareTrigger = event.target.closest('[data-leaflock-wishlist-share]');\n      var copyTrigger = event.target.closest('[data-leaflock-wishlist-copy]');\n\n      if (shareTrigger) {\n        event.preventDefault();\n        shareWishlist(shareTrigger);\n      }\n\n      if (copyTrigger) {\n        event.preventDefault();\n        copyWishlistCaption(copyTrigger);\n      }\n    });\n  }\n\n  function initDoseCalculator() {\n    ensureDoseCalculatorMarkup();\n    ensureDoseCalculatorLaunchers();\n\n    var modal = document.getElementById('leaflock-dose-modal');\n    if (!modal || modal.dataset.leaflockBound === 'true') return;\n\n    modal.dataset.leaflockBound = 'true';\n\n    var panel = modal.querySelector('.leaflock-dose-modal__panel');\n    var lock = modal.querySelector('[data-leaflock-dose-lock]');\n    var calculator = modal.querySelector('[data-leaflock-dose-calculator]');\n    if (calculator && calculator.dataset.leaflockSimpleLayout !== 'true') {\n      var logoImage = calculator.querySelector('.leaflock-dose-logo');\n      var calculatorLogoUrl = logoImage && logoImage.getAttribute('src') ? logoImage.getAttribute('src') : '/cdn/shop/t/7/assets/leaflock-logo-main.png';\n      calculator.innerHTML = buildDoseCalculatorHtml(calculatorLogoUrl);\n      calculator.dataset.leaflockSimpleLayout = 'true';\n    }\n\n    var codeForm = modal.querySelector('[data-leaflock-dose-code-form]');\n    var codeInput = modal.querySelector('#leaflock-dose-code');\n    var codeError = modal.querySelector('[data-leaflock-dose-code-error]');\n    var status = modal.querySelector('[data-leaflock-dose-status]');\n    var warning = modal.querySelector('[data-leaflock-dose-warning]');\n    var warningTitle = modal.querySelector('[data-leaflock-dose-warning-title]');\n    var warningCopy = modal.querySelector('[data-leaflock-dose-warning-copy]');\n    var range = modal.querySelector('[data-leaflock-dose-range]');\n    var copyStatus = modal.querySelector('[data-leaflock-dose-copy-status]');\n    var countWasEdited = false;\n    var lastFocused = null;\n\n    function ensureDoseCalculatorLaunchers() {\n      var stockistLink = document.querySelector('.hdt-social-leaflock-stockist');\n      if (stockistLink && stockistLink.closest('ul') && !stockistLink.closest('ul').querySelector('.hdt-social-leaflock-calculator')) {\n        var item = document.createElement('li');\n        item.className = 'hdt-socials__item hdt-inline-block';\n        item.innerHTML = '<button type=\"button\" class=\"hdt-social-leaflock-calculator hdt-flex hdt-align-center hdt-justify-center leaflock-dose-open\" aria-label=\"LeafLock calculator\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M6 2h12a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2Zm0 2v4h12V4H6Zm2 7v2h2v-2H8Zm4 0v2h2v-2h-2Zm4 0v2h2v-2h-2Zm-8 4v2h2v-2H8Zm4 0v2h2v-2h-2Zm4 0v5h2v-5h-2Zm-8 4v1h6v-1H8Z\"/></svg><span class=\"sr-only\">LeafLock calculator</span></button>';\n        stockistLink.closest('li').insertAdjacentElement('afterend', item);\n      }\n\n      var stockistLounge = document.querySelector('.hdt-footer-lounge-icon-stockist');\n      if (stockistLounge && stockistLounge.closest('ul') && !stockistLounge.closest('ul').querySelector('.leaflock-footer-calculator')) {\n        var loungeItem = document.createElement('li');\n        loungeItem.innerHTML = '<button type=\"button\" class=\"hdt-footer-menu_item hdt-footer-lounge-item hdt-s-text2 leaflock-footer-calculator leaflock-dose-open\"><span class=\"hdt-footer-lounge-icon hdt-footer-lounge-icon-calculator\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M6 2h12a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2Zm0 2v4h12V4H6Zm2 7v2h2v-2H8Zm4 0v2h2v-2h-2Zm4 0v2h2v-2h-2Zm-8 4v2h2v-2H8Zm4 0v2h2v-2h-2Zm4 0v5h2v-5h-2Zm-8 4v1h6v-1H8Z\"/></svg></span><span>LeafLock calculator</span></button>';\n        stockistLounge.closest('li').insertAdjacentElement('afterend', loungeItem);\n      }\n    }\n\n    function ensureDoseCalculatorMarkup() {\n      if (document.getElementById('leaflock-dose-modal')) return;\n\n      var logoUrl = '/cdn/shop/t/7/assets/leaflock-logo-main.png';\n      var wrapper = document.createElement('div');\n      wrapper.innerHTML = '<div class=\"leaflock-dose-modal\" id=\"leaflock-dose-modal\" hidden><div class=\"leaflock-dose-modal__backdrop\" data-leaflock-dose-close></div><section class=\"leaflock-dose-modal__panel\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"leaflock-dose-title\" tabindex=\"-1\"><button class=\"leaflock-dose-modal__close\" type=\"button\" data-leaflock-dose-close aria-label=\"Close calculator\"><svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M18.4 4.2 12 10.6 5.6 4.2 4.2 5.6l6.4 6.4-6.4 6.4 1.4 1.4 6.4-6.4 6.4 6.4 1.4-1.4-6.4-6.4 6.4-6.4-1.4-1.4Z\"/></svg></button><div class=\"leaflock-dose-lock\" data-leaflock-dose-lock><img class=\"leaflock-dose-logo\" src=\"' + logoUrl + '\" alt=\"LeafLock\" width=\"260\" height=\"90\" loading=\"lazy\"><p class=\"leaflock-dose-kicker\">Private LeafLock tool</p><h2 id=\"leaflock-dose-title\">Gummy batch calculator</h2><p class=\"leaflock-dose-copy\">Enter the access code to open the calculator.</p><form class=\"leaflock-dose-code-form\" data-leaflock-dose-code-form><label class=\"sr-only\" for=\"leaflock-dose-code\">Access code</label><input id=\"leaflock-dose-code\" type=\"password\" inputmode=\"numeric\" autocomplete=\"off\" placeholder=\"Access code\"><button type=\"submit\">Unlock</button></form><p class=\"leaflock-dose-code-hint\">Code: 420420</p><p class=\"leaflock-dose-code-error\" data-leaflock-dose-code-error role=\"status\" aria-live=\"polite\"></p></div><div class=\"leaflock-dose-calculator\" data-leaflock-dose-calculator hidden><header class=\"leaflock-dose-head\"><div><img class=\"leaflock-dose-logo leaflock-dose-logo--small\" src=\"' + logoUrl + '\" alt=\"LeafLock\" width=\"190\" height=\"66\" loading=\"lazy\"><p class=\"leaflock-dose-kicker\">Recipe batch estimate</p><h2>Gummy batch calculator</h2></div><p>Educational estimate only. For lawful ingredients only. Follow product labels and local laws; this is not medical, legal, or safety advice.</p></header><div class=\"leaflock-dose-grid\"><form class=\"leaflock-dose-form\" data-leaflock-dose-form><div class=\"leaflock-dose-field\"><label for=\"leaflock-dose-oil-strength\">Oil strength</label><div class=\"leaflock-dose-input\"><input id=\"leaflock-dose-oil-strength\" data-leaflock-dose-field=\"oilStrength\" type=\"number\" value=\"100\" min=\"0\" step=\"1\" inputmode=\"decimal\"><span>mg/mL</span></div><div class=\"leaflock-dose-quick\"><button type=\"button\" data-leaflock-dose-preset=\"oilStrength\" data-value=\"25\">25</button><button type=\"button\" data-leaflock-dose-preset=\"oilStrength\" data-value=\"50\">50</button><button type=\"button\" data-leaflock-dose-preset=\"oilStrength\" data-value=\"100\" class=\"is-active\">100</button></div></div><div class=\"leaflock-dose-field\"><label for=\"leaflock-dose-bottle-size\">Bottle size</label><div class=\"leaflock-dose-input\"><input id=\"leaflock-dose-bottle-size\" data-leaflock-dose-field=\"bottleSize\" type=\"number\" value=\"30\" min=\"0\" step=\"1\" inputmode=\"decimal\"><span>mL</span></div></div><div class=\"leaflock-dose-field\"><label for=\"leaflock-dose-target\">Target per piece</label><div class=\"leaflock-dose-input\"><input id=\"leaflock-dose-target\" data-leaflock-dose-field=\"desiredPerGummy\" type=\"number\" value=\"10\" min=\"0\" step=\"1\" inputmode=\"decimal\"><span>mg</span></div><div class=\"leaflock-dose-quick\"><button type=\"button\" data-leaflock-dose-preset=\"desiredPerGummy\" data-value=\"5\">5</button><button type=\"button\" data-leaflock-dose-preset=\"desiredPerGummy\" data-value=\"10\" class=\"is-active\">10</button><button type=\"button\" data-leaflock-dose-preset=\"desiredPerGummy\" data-value=\"25\">25</button></div></div><div class=\"leaflock-dose-field\"><label for=\"leaflock-dose-volume\">Mould cavity</label><div class=\"leaflock-dose-input\"><input id=\"leaflock-dose-volume\" data-leaflock-dose-field=\"gummyVolume\" type=\"number\" value=\"2\" min=\"0\" step=\"0.1\" inputmode=\"decimal\"><span>mL</span></div><div class=\"leaflock-dose-quick\"><button type=\"button\" data-leaflock-dose-preset=\"gummyVolume\" data-value=\"2\" class=\"is-active\">2</button><button type=\"button\" data-leaflock-dose-preset=\"gummyVolume\" data-value=\"3\">3</button><button type=\"button\" data-leaflock-dose-preset=\"gummyVolume\" data-value=\"5\">5</button></div></div><div class=\"leaflock-dose-field\"><label for=\"leaflock-dose-count\">Finished pieces</label><div class=\"leaflock-dose-input\"><input id=\"leaflock-dose-count\" data-leaflock-dose-field=\"gummyCount\" type=\"number\" value=\"80\" min=\"1\" step=\"1\" inputmode=\"numeric\"><span>pcs</span></div></div><div class=\"leaflock-dose-field\"><label for=\"leaflock-dose-total-oil\">Final oil blend</label><div class=\"leaflock-dose-input\"><input id=\"leaflock-dose-total-oil\" data-leaflock-dose-field=\"totalOilVol\" type=\"number\" value=\"30\" min=\"0\" max=\"40\" step=\"1\" inputmode=\"decimal\"><span>mL</span></div><div class=\"leaflock-dose-quick\"><button type=\"button\" data-leaflock-dose-preset=\"totalOilVol\" data-value=\"20\">20</button><button type=\"button\" data-leaflock-dose-preset=\"totalOilVol\" data-value=\"30\" class=\"is-active\">30</button><button type=\"button\" data-leaflock-dose-preset=\"totalOilVol\" data-value=\"40\">40</button></div></div></form><aside class=\"leaflock-dose-results\" aria-live=\"polite\"><div class=\"leaflock-dose-status\" data-leaflock-dose-status>Ready to calculate</div><div class=\"leaflock-dose-result-main\"><small>Oil volume to add</small><strong><span data-leaflock-dose-output=\"ingredientOilMl\">8.00</span> mL</strong></div><div class=\"leaflock-dose-metrics\"><div><small>Carrier oil to add</small><strong><span data-leaflock-dose-output=\"carrierMl\">22.00</span> mL</strong></div><div><small>Total active amount</small><strong><span data-leaflock-dose-output=\"totalActiveMg\">800</span> mg</strong></div><div><small>Bottle used</small><strong><span data-leaflock-dose-output=\"bottlePercent\">26.7</span>%</strong></div><div><small>Bottles required</small><strong><span data-leaflock-dose-output=\"bottlesRequired\">0.27</span></strong></div><div><small>Blend strength</small><strong><span data-leaflock-dose-output=\"blendStrength\">26.7</span> mg/mL</strong></div><div><small>One bottle estimate</small><strong><span data-leaflock-dose-output=\"maxPerBottle\">37.5</span> mg</strong></div></div><p class=\"leaflock-dose-range\" data-leaflock-dose-range>Expected range: roughly 60-90 gummies using a 2 mL mould.</p><div class=\"leaflock-dose-warning\" data-leaflock-dose-warning hidden><strong data-leaflock-dose-warning-title></strong><span data-leaflock-dose-warning-copy></span></div><p class=\"leaflock-dose-disclaimer\">Educational estimate only. For lawful ingredients only. Not medical, legal, or safety advice. Follow product labels and local laws, label finished items clearly, and keep finished items away from children.</p><div class=\"leaflock-dose-actions\"><button type=\"button\" data-leaflock-dose-copy>Copy result</button><button type=\"button\" data-leaflock-dose-reset>Reset</button></div><p class=\"leaflock-dose-copy-status\" data-leaflock-dose-copy-status aria-live=\"polite\"></p></aside></div></div></section></div>';\n      document.body.appendChild(wrapper.firstElementChild);\n    }\n\n    function buildDoseCalculatorHtml(logoUrl) {\n      return '<header class=\"leaflock-dose-head\"><div><img class=\"leaflock-dose-logo leaflock-dose-logo--small\" src=\"' + logoUrl + '\" alt=\"LeafLock\" width=\"190\" height=\"66\" loading=\"lazy\"><p class=\"leaflock-dose-kicker\">Batch estimate tool</p><h2>Gummy batch calculator</h2></div><p>Use this for general recipe math with lawful ingredients only. It estimates batch amounts from label strength and bottle size.</p></header><div class=\"leaflock-dose-grid\"><form class=\"leaflock-dose-form\" data-leaflock-dose-form><section class=\"leaflock-dose-card\"><div class=\"leaflock-dose-card__head\"><span>Step 1</span><h3>Label details</h3><p>Use the strength printed on your bottle or ingredient label.</p></div><div class=\"leaflock-dose-field-grid\"><div class=\"leaflock-dose-field\"><label for=\"leaflock-dose-oil-strength\">Label strength</label><div class=\"leaflock-dose-input\"><input id=\"leaflock-dose-oil-strength\" data-leaflock-dose-field=\"oilStrength\" type=\"number\" value=\"100\" min=\"0\" step=\"1\" inputmode=\"decimal\"><span>mg/mL</span></div><div class=\"leaflock-dose-quick\"><button type=\"button\" data-leaflock-dose-preset=\"oilStrength\" data-value=\"25\">25</button><button type=\"button\" data-leaflock-dose-preset=\"oilStrength\" data-value=\"50\">50</button><button type=\"button\" data-leaflock-dose-preset=\"oilStrength\" data-value=\"100\" class=\"is-active\">100</button></div></div><div class=\"leaflock-dose-field\"><label for=\"leaflock-dose-bottle-size\">Bottle size</label><div class=\"leaflock-dose-input\"><input id=\"leaflock-dose-bottle-size\" data-leaflock-dose-field=\"bottleSize\" type=\"number\" value=\"30\" min=\"0\" step=\"1\" inputmode=\"decimal\"><span>mL</span></div></div></div></section><section class=\"leaflock-dose-card\"><div class=\"leaflock-dose-card__head\"><span>Calculator 1</span><h3>What is in my batch?</h3><p>Use this when you already know the amount of oil added to the batch.</p></div><div class=\"leaflock-dose-field-grid\"><div class=\"leaflock-dose-field\"><label for=\"leaflock-dose-oil-used\">Oil added to the batch</label><div class=\"leaflock-dose-input\"><input id=\"leaflock-dose-oil-used\" data-leaflock-dose-field=\"oilUsed\" type=\"number\" value=\"8\" min=\"0\" step=\"0.1\" inputmode=\"decimal\"><span>mL</span></div><div class=\"leaflock-dose-quick\"><button type=\"button\" data-leaflock-dose-preset=\"oilUsed\" data-value=\"5\">5</button><button type=\"button\" data-leaflock-dose-preset=\"oilUsed\" data-value=\"8\" class=\"is-active\">8</button><button type=\"button\" data-leaflock-dose-preset=\"oilUsed\" data-value=\"10\">10</button></div></div><div class=\"leaflock-dose-field\"><label for=\"leaflock-dose-count\">How many pieces are you making?</label><div class=\"leaflock-dose-input\"><input id=\"leaflock-dose-count\" data-leaflock-dose-field=\"gummyCount\" type=\"number\" value=\"80\" min=\"1\" step=\"1\" inputmode=\"numeric\"><span>pcs</span></div></div></div></section><section class=\"leaflock-dose-card\"><div class=\"leaflock-dose-card__head\"><span>Calculator 2</span><h3>Target amount per piece</h3><p>Enter the amount per piece you are calculating for. The result estimates the matching oil volume.</p></div><div class=\"leaflock-dose-field\"><label for=\"leaflock-dose-target\">Target amount per piece</label><div class=\"leaflock-dose-input\"><input id=\"leaflock-dose-target\" data-leaflock-dose-field=\"desiredPerGummy\" type=\"number\" value=\"10\" min=\"0\" step=\"1\" inputmode=\"decimal\"><span>mg</span></div><div class=\"leaflock-dose-quick\"><button type=\"button\" data-leaflock-dose-preset=\"desiredPerGummy\" data-value=\"5\">5</button><button type=\"button\" data-leaflock-dose-preset=\"desiredPerGummy\" data-value=\"10\" class=\"is-active\">10</button><button type=\"button\" data-leaflock-dose-preset=\"desiredPerGummy\" data-value=\"25\">25</button></div></div></section></form><aside class=\"leaflock-dose-results\" aria-live=\"polite\"><div class=\"leaflock-dose-status\" data-leaflock-dose-status>Ready to calculate</div><div class=\"leaflock-dose-result-main\"><small>Oil volume for target amount</small><strong><span data-leaflock-dose-output=\"ingredientOilMl\">8.00</span> mL</strong></div><div class=\"leaflock-dose-metrics\"><div><small>Oil you entered</small><strong><span data-leaflock-dose-output=\"oilUsedOutput\">8.00</span> mL</strong></div><div><small>Estimated amount each</small><strong><span data-leaflock-dose-output=\"usePerGummy\">10.0</span> mg</strong></div><div><small>Total active amount</small><strong><span data-leaflock-dose-output=\"useTotalMg\">800</span> mg</strong></div><div><small>Bottle used</small><strong><span data-leaflock-dose-output=\"bottlePercent\">26.7</span>%</strong></div><div><small>Bottles required</small><strong><span data-leaflock-dose-output=\"bottlesRequired\">0.27</span></strong></div><div><small>Bottle left</small><strong><span data-leaflock-dose-output=\"remainingBottle\">22.00</span> mL</strong></div></div><p class=\"leaflock-dose-range\" data-leaflock-dose-range>Calculator 1 estimates what is in the batch. Calculator 2 estimates the oil volume for a target amount.</p><div class=\"leaflock-dose-warning\" data-leaflock-dose-warning hidden><strong data-leaflock-dose-warning-title></strong><span data-leaflock-dose-warning-copy></span></div><p class=\"leaflock-dose-disclaimer\">Educational estimate only. For lawful ingredients only. Not medical, legal, or safety advice. Follow product labels and local laws, label finished items clearly, and keep finished items away from children.</p><div class=\"leaflock-dose-actions\"><button type=\"button\" data-leaflock-dose-copy>Copy result</button><button type=\"button\" data-leaflock-dose-reset>Reset</button></div><p class=\"leaflock-dose-copy-status\" data-leaflock-dose-copy-status aria-live=\"polite\"></p></aside></div>';\n    }\n\n    function value(name) {\n      var field = modal.querySelector('[data-leaflock-dose-field=\"' + name + '\"]');\n      return field ? Number(field.value) || 0 : 0;\n    }\n\n    function output(name, text) {\n      var node = modal.querySelector('[data-leaflock-dose-output=\"' + name + '\"]');\n      if (node) node.textContent = text;\n    }\n\n    function estimateYield(volume) {\n      if (!volume) return 80;\n      return Math.max(1, Math.round(160 / volume));\n    }\n\n    function setStatus(text, isWarning) {\n      if (!status) return;\n      status.textContent = text;\n      status.classList.toggle('is-warning', Boolean(isWarning));\n    }\n\n    function setWarning(title, copy) {\n      if (!warning || !warningTitle || !warningCopy) return;\n      warningTitle.textContent = title || '';\n      warningCopy.textContent = copy || '';\n      warning.hidden = !title && !copy;\n    }\n\n    function updatePresetState(fieldName, selectedValue) {\n      modal.querySelectorAll('[data-leaflock-dose-preset=\"' + fieldName + '\"]').forEach(function (button) {\n        button.classList.toggle('is-active', Number(button.dataset.value) === Number(selectedValue));\n      });\n    }\n\n    function calculateDose() {\n      var oilStrength = value('oilStrength');\n      var bottleSize = value('bottleSize');\n      var desiredPerGummy = value('desiredPerGummy');\n      var gummyCount = Math.round(value('gummyCount'));\n      var oilUsed = value('oilUsed');\n      var outputs = ['ingredientOilMl', 'oilUsedOutput', 'usePerGummy', 'useTotalMg', 'bottlePercent', 'bottlesRequired', 'remainingBottle'];\n\n      setWarning('', '');\n\n      if (oilStrength <= 0 || bottleSize <= 0 || desiredPerGummy <= 0 || gummyCount <= 0 || oilUsed <= 0) {\n        outputs.forEach(function (name) {\n          output(name, '-');\n        });\n        if (range) range.textContent = 'Enter valid numbers to calculate your batch.';\n        setStatus('Check inputs', true);\n        return;\n      }\n\n      var useTotalMg = oilStrength * oilUsed;\n      var usePerGummy = useTotalMg / gummyCount;\n      var desiredTotalMg = desiredPerGummy * gummyCount;\n      var oilNeeded = desiredTotalMg / oilStrength;\n      var bottlesRequired = oilNeeded / bottleSize;\n      var bottlePercent = bottlesRequired * 100;\n      var remainingBottle = Math.max(0, bottleSize - oilNeeded);\n\n      output('ingredientOilMl', oilNeeded.toFixed(2));\n      output('oilUsedOutput', oilUsed.toFixed(2));\n      output('usePerGummy', usePerGummy.toFixed(1));\n      output('useTotalMg', useTotalMg.toFixed(0));\n      output('bottlePercent', bottlePercent.toFixed(1));\n      output('bottlesRequired', bottlesRequired.toFixed(2));\n      output('remainingBottle', remainingBottle.toFixed(2));\n\n      if (range) {\n        range.textContent = 'If you use ' + oilUsed.toFixed(2) + ' mL, each gummy is about ' + usePerGummy.toFixed(1) + ' mg. For ' + desiredPerGummy.toFixed(1) + ' mg each, use ' + oilNeeded.toFixed(2) + ' mL.';\n      }\n\n      setStatus('Ready to calculate', false);\n\n      if (oilUsed > bottleSize) {\n        setWarning('Oil amount is bigger than one bottle.', 'You entered ' + oilUsed.toFixed(2) + ' mL, but the bottle size is ' + bottleSize.toFixed(2) + ' mL. Check the oil amount or bottle size.');\n        setStatus('Check bottle size', true);\n        return;\n      }\n\n      if (bottlesRequired > 1) {\n        setWarning('More than one bottle is required.', 'For the target amount, this estimates ' + oilNeeded.toFixed(2) + ' mL, equal to ' + bottlesRequired.toFixed(2) + ' bottles of ' + bottleSize.toFixed(0) + ' mL.');\n        setStatus('Needs more than 1 bottle', true);\n        return;\n      }\n    }\n\n    function showCalculator() {\n      modal.dataset.unlocked = 'true';\n      if (lock) lock.hidden = true;\n      if (calculator) calculator.hidden = false;\n      window.sessionStorage.setItem('leaflockDoseUnlocked', 'true');\n      calculateDose();\n    }\n\n    function openModal() {\n      lastFocused = document.activeElement;\n      modal.hidden = false;\n      document.body.classList.add('leaflock-dose-open');\n\n      if (window.sessionStorage.getItem('leaflockDoseUnlocked') === 'true') {\n        showCalculator();\n      } else {\n        if (lock) lock.hidden = false;\n        if (calculator) calculator.hidden = true;\n        if (codeInput) {\n          codeInput.value = '';\n          window.setTimeout(function () {\n            codeInput.focus();\n          }, 50);\n        }\n      }\n\n      if (panel) {\n        window.setTimeout(function () {\n          panel.focus();\n        }, 60);\n      }\n    }\n\n    function closeModal() {\n      modal.hidden = true;\n      document.body.classList.remove('leaflock-dose-open');\n      if (codeError) codeError.textContent = '';\n      if (copyStatus) copyStatus.textContent = '';\n      if (lastFocused && lastFocused.focus) lastFocused.focus();\n    }\n\n    function resetDose() {\n      var defaults = {\n        oilStrength: 100,\n        bottleSize: 30,\n        oilUsed: 8,\n        gummyCount: 80,\n        desiredPerGummy: 10\n      };\n\n      Object.keys(defaults).forEach(function (name) {\n        var field = modal.querySelector('[data-leaflock-dose-field=\"' + name + '\"]');\n        if (field) field.value = defaults[name];\n        updatePresetState(name, defaults[name]);\n      });\n\n      countWasEdited = false;\n      if (copyStatus) copyStatus.textContent = '';\n      calculateDose();\n    }\n\n    function copyDose() {\n      var text = 'LeafLock gummy batch estimate\\n' +\n        'Oil strength: ' + value('oilStrength') + ' mg/mL\\n' +\n        'Bottle size: ' + value('bottleSize') + ' mL\\n' +\n        'Pieces: ' + value('gummyCount') + '\\n' +\n        'Oil added: ' + value('oilUsed') + ' mL\\n' +\n        'Estimated amount each: ' + (modal.querySelector('[data-leaflock-dose-output=\"usePerGummy\"]') || {}).textContent + ' mg\\n' +\n        'Target amount each: ' + value('desiredPerGummy') + ' mg\\n' +\n        'Oil volume estimate: ' + (modal.querySelector('[data-leaflock-dose-output=\"ingredientOilMl\"]') || {}).textContent + ' mL\\n' +\n        'Educational estimate only. For lawful ingredients only. Not medical, legal, or safety advice.\\n' +\n        window.location.origin;\n\n      if (navigator.clipboard && navigator.clipboard.writeText) {\n        navigator.clipboard.writeText(text).then(function () {\n          if (copyStatus) copyStatus.textContent = 'Result copied.';\n        }).catch(function () {\n          if (copyStatus) copyStatus.textContent = text;\n        });\n      } else if (copyStatus) {\n        copyStatus.textContent = text;\n      }\n    }\n\n    document.addEventListener('click', function (event) {\n      var trigger = event.target.closest('.leaflock-dose-open');\n      if (!trigger) return;\n\n      event.preventDefault();\n      openModal();\n    });\n\n    modal.addEventListener('click', function (event) {\n      if (event.target.closest('[data-leaflock-dose-close]')) {\n        event.preventDefault();\n        closeModal();\n      }\n\n      var preset = event.target.closest('[data-leaflock-dose-preset]');\n      if (preset) {\n        var fieldName = preset.dataset.leaflockDosePreset;\n        var field = modal.querySelector('[data-leaflock-dose-field=\"' + fieldName + '\"]');\n        if (field) {\n          field.value = preset.dataset.value;\n          updatePresetState(fieldName, preset.dataset.value);\n          if (fieldName === 'gummyVolume') {\n            var countField = modal.querySelector('[data-leaflock-dose-field=\"gummyCount\"]');\n            if (countField && !countWasEdited) countField.value = estimateYield(Number(preset.dataset.value));\n          }\n          calculateDose();\n        }\n      }\n\n      if (event.target.closest('[data-leaflock-dose-reset]')) {\n        event.preventDefault();\n        resetDose();\n      }\n\n      if (event.target.closest('[data-leaflock-dose-copy]')) {\n        event.preventDefault();\n        copyDose();\n      }\n    });\n\n    modal.querySelectorAll('[data-leaflock-dose-field]').forEach(function (field) {\n      field.addEventListener('input', function () {\n        if (field.dataset.leaflockDoseField === 'gummyCount') countWasEdited = true;\n        updatePresetState(field.dataset.leaflockDoseField, field.value);\n        calculateDose();\n      });\n    });\n\n    if (codeForm) {\n      codeForm.addEventListener('submit', function (event) {\n        event.preventDefault();\n        var normalized = codeInput ? codeInput.value.replace(/\\D/g, '') : '';\n\n        if (normalized.indexOf('420') !== -1) {\n          if (codeError) codeError.textContent = '';\n          showCalculator();\n          return;\n        }\n\n        if (codeError) codeError.textContent = 'That code did not unlock the calculator.';\n      });\n\n      var unlockButton = codeForm.querySelector('button');\n      if (unlockButton) {\n        unlockButton.addEventListener('click', function (event) {\n          event.preventDefault();\n          if (codeForm.requestSubmit) {\n            codeForm.requestSubmit();\n          } else {\n            codeForm.dispatchEvent(new Event('submit', { bubbles: true, cancelable: true }));\n          }\n        });\n      }\n    }\n\n    document.addEventListener('keydown', function (event) {\n      if (modal.hidden || event.key !== 'Escape') return;\n      closeModal();\n    });\n\n    calculateDose();\n  }\n\n  function initNativeInstagramShare() {\n    if (window.__leaflockInstagramShareReady) return;\n    window.__leaflockInstagramShareReady = true;\n\n    function absoluteAssetUrl(url) {\n      if (!url) return '';\n      if (url.indexOf('//') === 0) return window.location.protocol + url;\n      if (url.indexOf('/') === 0) return window.location.origin + url;\n      return url;\n    }\n\n    function copyShareText(text) {\n      if (!navigator.clipboard || !navigator.clipboard.writeText) return Promise.resolve();\n      return navigator.clipboard.writeText(text).catch(function () {});\n    }\n\n    function writeInstagramStatus(trigger, message, isError) {\n      var scope = trigger.closest('.hdt-popover__inner') || trigger.closest('.hdt-article-tags-dk') || trigger.closest('.hdt-article-social');\n      var status = scope ? scope.querySelector('[data-leaflock-instagram-status]') : null;\n\n      if (!status && scope) {\n        status = document.createElement('p');\n        status.className = 'leaflock-instagram-share-status';\n        status.setAttribute('data-leaflock-instagram-status', '');\n        status.setAttribute('aria-live', 'polite');\n        scope.appendChild(status);\n      }\n\n      if (!status) return;\n      status.textContent = message || '';\n      status.classList.toggle('is-error', Boolean(isError));\n    }\n\n    function loadStoryImage(url) {\n      return new Promise(function (resolve, reject) {\n        if (!url) {\n          reject(new Error('Missing image URL'));\n          return;\n        }\n\n        var image = new Image();\n        image.crossOrigin = 'anonymous';\n        image.onload = function () {\n          resolve(image);\n        };\n        image.onerror = function () {\n          reject(new Error('Image failed to load'));\n        };\n        image.src = absoluteAssetUrl(url);\n      });\n    }\n\n    function drawCover(ctx, image, x, y, width, height) {\n      var scale = Math.max(width / image.naturalWidth, height / image.naturalHeight);\n      var drawWidth = image.naturalWidth * scale;\n      var drawHeight = image.naturalHeight * scale;\n      var drawX = x + (width - drawWidth) / 2;\n      var drawY = y + (height - drawHeight) / 2;\n\n      ctx.drawImage(image, drawX, drawY, drawWidth, drawHeight);\n    }\n\n    function roundRect(ctx, x, y, width, height, radius) {\n      ctx.beginPath();\n      ctx.moveTo(x + radius, y);\n      ctx.lineTo(x + width - radius, y);\n      ctx.quadraticCurveTo(x + width, y, x + width, y + radius);\n      ctx.lineTo(x + width, y + height - radius);\n      ctx.quadraticCurveTo(x + width, y + height, x + width - radius, y + height);\n      ctx.lineTo(x + radius, y + height);\n      ctx.quadraticCurveTo(x, y + height, x, y + height - radius);\n      ctx.lineTo(x, y + radius);\n      ctx.quadraticCurveTo(x, y, x + radius, y);\n      ctx.closePath();\n    }\n\n    function wrapCanvasText(ctx, text, x, y, maxWidth, lineHeight, maxLines) {\n      var words = text.split(/\\s+/);\n      var line = '';\n      var lines = [];\n      var i;\n\n      for (i = 0; i < words.length; i += 1) {\n        var testLine = line ? line + ' ' + words[i] : words[i];\n\n        if (ctx.measureText(testLine).width > maxWidth && line) {\n          lines.push(line);\n          line = words[i];\n          if (lines.length === maxLines) break;\n        } else {\n          line = testLine;\n        }\n      }\n\n      if (line && lines.length < maxLines) lines.push(line);\n\n      if (lines.length === maxLines && i < words.length) {\n        lines[maxLines - 1] = lines[maxLines - 1].replace(/[.,;:!?-]*$/, '') + '...';\n      }\n\n      lines.forEach(function (textLine, index) {\n        ctx.fillText(textLine, x, y + (index * lineHeight));\n      });\n\n      return y + (lines.length * lineHeight);\n    }\n\n    function canvasToBlob(canvas) {\n      return new Promise(function (resolve, reject) {\n        try {\n          canvas.toBlob(function (blob) {\n            if (blob) {\n              resolve(blob);\n              return;\n            }\n            reject(new Error('Story image could not be created'));\n          }, 'image/png');\n        } catch (error) {\n          reject(error);\n        }\n      });\n    }\n\n    function buildInstagramStoryFile(trigger) {\n      var title = trigger.dataset.shareTitle || document.title;\n      var imageUrl = trigger.dataset.shareImage;\n      var logoUrl = trigger.dataset.storyLogo;\n\n      return Promise.all([\n        loadStoryImage(imageUrl),\n        loadStoryImage(logoUrl).catch(function () {\n          return null;\n        })\n      ]).then(function (images) {\n        var featuredImage = images[0];\n        var logoImage = images[1];\n        var canvas = document.createElement('canvas');\n        var ctx = canvas.getContext('2d');\n        var gradient;\n        var footerGradient;\n        var file;\n\n        canvas.width = 1080;\n        canvas.height = 1920;\n\n        ctx.fillStyle = '#060806';\n        ctx.fillRect(0, 0, canvas.width, canvas.height);\n        drawCover(ctx, featuredImage, 0, 0, canvas.width, 1320);\n\n        gradient = ctx.createLinearGradient(0, 0, 0, 1320);\n        gradient.addColorStop(0, 'rgba(0, 0, 0, 0.66)');\n        gradient.addColorStop(0.38, 'rgba(0, 0, 0, 0.08)');\n        gradient.addColorStop(1, 'rgba(0, 0, 0, 0.88)');\n        ctx.fillStyle = gradient;\n        ctx.fillRect(0, 0, canvas.width, 1320);\n\n        footerGradient = ctx.createLinearGradient(0, 950, 0, canvas.height);\n        footerGradient.addColorStop(0, 'rgba(4, 7, 5, 0)');\n        footerGradient.addColorStop(0.38, 'rgba(4, 7, 5, 0.92)');\n        footerGradient.addColorStop(1, '#080d0a');\n        ctx.fillStyle = footerGradient;\n        ctx.fillRect(0, 920, canvas.width, 1000);\n\n        if (logoImage) {\n          var logoWidth = 430;\n          var logoHeight = logoWidth * (logoImage.naturalHeight / logoImage.naturalWidth);\n          ctx.drawImage(logoImage, (canvas.width - logoWidth) / 2, 110, logoWidth, logoHeight);\n        } else {\n          ctx.fillStyle = '#ffffff';\n          ctx.font = '900 78px system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif';\n          ctx.textAlign = 'center';\n          ctx.fillText('LeafLock', canvas.width / 2, 178);\n          ctx.textAlign = 'left';\n        }\n\n        roundRect(ctx, 72, 1115, 936, 520, 36);\n        ctx.fillStyle = 'rgba(13, 18, 14, 0.88)';\n        ctx.fill();\n        ctx.strokeStyle = 'rgba(147, 217, 87, 0.74)';\n        ctx.lineWidth = 4;\n        ctx.stroke();\n\n        ctx.fillStyle = '#93d957';\n        ctx.font = '800 32px system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif';\n        ctx.fillText('LEAFLOCK BLOG', 122, 1194);\n\n        ctx.fillStyle = '#ffffff';\n        ctx.font = '900 66px system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif';\n        wrapCanvasText(ctx, title, 122, 1292, 836, 76, 4);\n\n        ctx.fillStyle = '#dce8d6';\n        ctx.font = '700 38px system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif';\n        wrapCanvasText(ctx, 'Read more at leaflock.com.au.', 122, 1560, 836, 52, 2);\n\n        ctx.fillStyle = '#93d957';\n        roundRect(ctx, 122, 1692, 320, 6, 3);\n        ctx.fill();\n\n        return canvasToBlob(canvas).then(function (blob) {\n          file = new File([blob], 'leaflock-blog-instagram-story.png', { type: 'image/png' });\n          return file;\n        });\n      });\n    }\n\n    document.addEventListener('click', function (event) {\n      var trigger = event.target.closest('[data-leaflock-instagram-share]');\n      if (!trigger) return;\n\n      event.preventDefault();\n\n      var title = trigger.dataset.shareTitle || document.title;\n      var url = trigger.dataset.shareUrl || window.location.href;\n      var instagramUrl = trigger.dataset.instagramUrl || 'https://www.instagram.com/leaflockstore/';\n\n      writeInstagramStatus(trigger, 'Building Instagram Story image...');\n\n      copyShareText(url);\n\n      buildInstagramStoryFile(trigger).then(function (file) {\n        var shareData = {\n          title: title,\n          files: [file]\n        };\n\n        if (navigator.canShare && !navigator.canShare(shareData)) {\n          writeInstagramStatus(trigger, \"Link copied\u2014add it to your Story using Instagram\u2019s Link sticker. Your browser cannot share the Story image file from here.\", true);\n          window.open(instagramUrl, '_blank', 'noopener,noreferrer');\n          return;\n        }\n\n        if (!navigator.share) {\n          writeInstagramStatus(trigger, \"Link copied\u2014add it to your Story using Instagram\u2019s Link sticker. Open Instagram and upload the Story image manually.\", true);\n          window.open(instagramUrl, '_blank', 'noopener,noreferrer');\n          return;\n        }\n\n        navigator.share(shareData).then(function () {\n          writeInstagramStatus(trigger, \"Link copied\u2014add it to your Story using Instagram\u2019s Link sticker.\");\n        }).catch(function (error) {\n          if (error && error.name === 'AbortError') {\n            writeInstagramStatus(trigger, \"Link copied\u2014add it to your Story using Instagram\u2019s Link sticker.\");\n            return;\n          }\n          writeInstagramStatus(trigger, \"Link copied\u2014add it to your Story using Instagram\u2019s Link sticker. Instagram may need you to choose Story after the share panel opens.\", true);\n          window.open(instagramUrl, '_blank', 'noopener,noreferrer');\n        });\n      }).catch(function () {\n        writeInstagramStatus(trigger, \"Link copied\u2014add it to your Story using Instagram\u2019s Link sticker. The Story image could not be generated on this browser.\", true);\n        window.open(instagramUrl, '_blank', 'noopener,noreferrer');\n      });\n    });\n  }\n\n  window.addEventListener('load', function () {\n    tuneMappyStoreList();\n    watchMappyStoreList();\n    initSmartBundles();\n    initCartUpsells();\n    enhanceWishlistSharingPanel();\n    bindWishlistSharing();\n    initNativeInstagramShare();\n    initDoseCalculator();\n  });\n})();\n"],
  "mappings": "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",
  "names": []
}
