{
  "version": 3,
  "sources": ["/cdn/shop/t/1/assets/gruns-custom.js?t=20260621-pdp-buybox-live-1"],
  "sourcesContent": ["(function () {\n  function clamp(value, min, max) {\n    return Math.min(Math.max(value, min), max);\n  }\n\n  function money(value) {\n    if (typeof value !== \"number\") return \"\";\n    return new Intl.NumberFormat(\"en-US\", {\n      style: \"currency\",\n      currency: \"USD\",\n      maximumFractionDigits: value % 1 === 0 ? 0 : 2,\n    }).format(value);\n  }\n\n  function normalizeMoneyValue(rawValue) {\n    const numeric = Number(rawValue || 0);\n    if (!Number.isFinite(numeric)) return 0;\n    if (Number.isInteger(numeric) && Math.abs(numeric) >= 1000) {\n      return numeric / 100;\n    }\n    return numeric;\n  }\n\n  function withWidth(url, width) {\n    if (!url) return \"\";\n    if (/([?&])width=\\d+/i.test(url)) {\n      return url.replace(/([?&])width=\\d+/i, `$1width=${width}`);\n    }\n    return `${url}${url.includes(\"?\") ? \"&\" : \"?\"}width=${width}`;\n  }\n\n  function buildHistoryUrl(basePath, variantId) {\n    const currentUrl = new URL(window.location.href);\n    const params = new URLSearchParams(currentUrl.search);\n    if (variantId) {\n      params.set(\"variant\", variantId);\n    } else {\n      params.delete(\"variant\");\n    }\n    const query = params.toString();\n    return `${basePath}${query ? `?${query}` : \"\"}`;\n  }\n\n  function setModalState(modal, shouldOpen) {\n    if (!modal) return;\n    modal.hidden = !shouldOpen;\n    modal.classList.toggle(\"is-open\", shouldOpen);\n    document.documentElement.classList.toggle(\"gruns-modal-open\", shouldOpen);\n    document.body.classList.toggle(\"gruns-modal-open\", shouldOpen);\n  }\n\n  function initAnnouncements(root) {\n    root.querySelectorAll(\"[data-gruns-announcement]\").forEach((carousel) => {\n      if (carousel.dataset.grunsInit === \"true\") return;\n      carousel.dataset.grunsInit = \"true\";\n      const items = Array.from(carousel.querySelectorAll(\"[data-gruns-announcement-item]\"));\n      if (!items.length) return;\n      let index = 0;\n      items[index].classList.add(\"is-active\");\n      if (items.length < 2) return;\n      window.setInterval(() => {\n        items[index].classList.remove(\"is-active\");\n        index = (index + 1) % items.length;\n        items[index].classList.add(\"is-active\");\n      }, 4500);\n    });\n  }\n\n  function initDrawer(root) {\n    const drawer = root.querySelector(\"[data-gruns-drawer]\");\n    if (!drawer || drawer.dataset.grunsInit === \"true\") return;\n    drawer.dataset.grunsInit = \"true\";\n    const openers = Array.from(root.querySelectorAll(\"[data-gruns-drawer-open]\"));\n    const closers = Array.from(root.querySelectorAll(\"[data-gruns-drawer-close]\"));\n    const close = () => drawer.classList.remove(\"is-open\");\n    openers.forEach((button) => button.addEventListener(\"click\", () => drawer.classList.add(\"is-open\")));\n    closers.forEach((button) => button.addEventListener(\"click\", close));\n    drawer.addEventListener(\"click\", (event) => {\n      if (event.target === drawer) close();\n    });\n    document.addEventListener(\"keydown\", (event) => {\n      if (event.key === \"Escape\") close();\n    });\n  }\n\n  function activateGallery(gallery, targetIndex, targetMediaId) {\n    const panels = Array.from(gallery.querySelectorAll(\"[data-gruns-gallery-panel]\"));\n    const thumbs = Array.from(gallery.querySelectorAll(\"[data-gruns-gallery-thumb]\"));\n    const track = gallery.querySelector(\"[data-gruns-gallery-track]\");\n    if (!panels.length || !thumbs.length) return;\n\n    let activePanelIndex = panels.findIndex((panel) => {\n      return targetMediaId\n        ? panel.dataset.mediaId === String(targetMediaId)\n        : panel.dataset.mediaIndex === String(targetIndex);\n    });\n\n    if (activePanelIndex < 0) {\n      activePanelIndex = 0;\n    }\n\n    gallery.dataset.grunsGalleryActive = String(activePanelIndex);\n\n    panels.forEach((panel, index) => {\n      panel.classList.toggle(\"is-active\", index === activePanelIndex);\n    });\n\n    thumbs.forEach((thumb) => {\n      const isActive = thumb.dataset.mediaIndex === panels[activePanelIndex].dataset.mediaIndex;\n      thumb.classList.toggle(\"is-active\", isActive);\n    });\n\n    if (track) {\n      track.style.transform = `translate3d(${-100 * activePanelIndex}%, 0, 0)`;\n    }\n  }\n\n  function initGalleries(root) {\n    root.querySelectorAll(\"[data-gruns-gallery]\").forEach((gallery) => {\n      if (gallery.dataset.grunsInit === \"true\") return;\n      gallery.dataset.grunsInit = \"true\";\n\n      const modal = gallery.querySelector(\"[data-gruns-nutrition-modal]\");\n      const closeModal = () => setModalState(modal, false);\n\n      gallery.querySelectorAll(\"[data-gruns-gallery-thumb]\").forEach((thumb) => {\n        thumb.addEventListener(\"click\", () => activateGallery(gallery, thumb.dataset.mediaIndex, thumb.dataset.mediaId));\n      });\n      gallery.querySelectorAll(\"[data-gruns-gallery-jump]\").forEach((button) => {\n        button.addEventListener(\"click\", () => activateGallery(gallery, button.dataset.grunsGalleryJump, null));\n      });\n\n      gallery.querySelectorAll(\"[data-gruns-gallery-prev]\").forEach((button) => {\n        button.addEventListener(\"click\", () => {\n          const panels = Array.from(gallery.querySelectorAll(\"[data-gruns-gallery-panel]\"));\n          const current = Number(gallery.dataset.grunsGalleryActive || 0);\n          const next = (current - 1 + panels.length) % panels.length;\n          activateGallery(gallery, panels[next].dataset.mediaIndex, panels[next].dataset.mediaId);\n        });\n      });\n\n      gallery.querySelectorAll(\"[data-gruns-gallery-next]\").forEach((button) => {\n        button.addEventListener(\"click\", () => {\n          const panels = Array.from(gallery.querySelectorAll(\"[data-gruns-gallery-panel]\"));\n          const current = Number(gallery.dataset.grunsGalleryActive || 0);\n          const next = (current + 1) % panels.length;\n          activateGallery(gallery, panels[next].dataset.mediaIndex, panels[next].dataset.mediaId);\n        });\n      });\n\n      gallery.querySelectorAll(\"[data-gruns-nutrition-open]\").forEach((button) => {\n        if (button.dataset.grunsNutritionInit === \"true\") return;\n        button.dataset.grunsNutritionInit = \"true\";\n        button.addEventListener(\"click\", () => setModalState(modal, true));\n      });\n\n      gallery.querySelectorAll(\"[data-gruns-nutrition-close]\").forEach((button) => {\n        if (button.dataset.grunsNutritionCloseInit === \"true\") return;\n        button.dataset.grunsNutritionCloseInit = \"true\";\n        button.addEventListener(\"click\", closeModal);\n      });\n\n      if (modal && modal.dataset.grunsEscInit !== \"true\") {\n        modal.dataset.grunsEscInit = \"true\";\n        document.addEventListener(\"keydown\", (event) => {\n          if (event.key === \"Escape\" && !modal.hidden) {\n            closeModal();\n          }\n        });\n      }\n    });\n  }\n\n  function initAccordions(root) {\n    root.querySelectorAll(\"[data-gruns-accordion]\").forEach((accordion) => {\n      accordion.querySelectorAll(\"[data-gruns-accordion-trigger]\").forEach((trigger) => {\n        if (trigger.dataset.grunsInit === \"true\") return;\n        trigger.dataset.grunsInit = \"true\";\n        trigger.addEventListener(\"click\", () => {\n          const item = trigger.closest(\".gruns-accordion__item\");\n          const expanded = trigger.getAttribute(\"aria-expanded\") === \"true\";\n          item.classList.toggle(\"is-open\", !expanded);\n          trigger.setAttribute(\"aria-expanded\", String(!expanded));\n          const icon = trigger.querySelector(\".gruns-accordion__icon\");\n          if (icon) {\n            if (icon.querySelector(\".gruns-accordion__icon-line--vertical\")) {\n              icon.classList.toggle(\"is-open\", !expanded);\n            } else {\n              icon.textContent = expanded ? \"+\" : \"-\";\n            }\n          }\n        });\n      });\n    });\n  }\n\n  function findVariant(product, selectedOptions) {\n    return product.variants.find((variant) =>\n      variant.options.every((value, optionIndex) => selectedOptions[optionIndex] === value),\n    );\n  }\n\n  function safeInteger(value, fallback = 1) {\n    const numeric = Number.parseInt(value, 10);\n    return Number.isFinite(numeric) && numeric > 0 ? numeric : fallback;\n  }\n\n  function initBuyboxes(root) {\n    root.querySelectorAll(\"[data-gruns-buybox]\").forEach((buybox) => {\n      if (buybox.dataset.grunsInit === \"true\") return;\n      buybox.dataset.grunsInit = \"true\";\n      const jsonNode = buybox.querySelector(\"[data-gruns-product-json]\");\n      if (!jsonNode) return;\n\n      let product;\n      try {\n        product = JSON.parse(jsonNode.textContent);\n      } catch {\n        return;\n      }\n\n      if (!product || !Array.isArray(product.variants)) return;\n      buybox.dataset.grunsProductHandle = product.handle || \"\";\n\n      const priceNode = buybox.querySelector(\"[data-gruns-price]\");\n      const compareNode = buybox.querySelector(\"[data-gruns-compare]\");\n      const offerPriceNodes = Array.from(buybox.querySelectorAll(\"[data-gruns-offer-price]\"));\n      const subscribePriceNode = buybox.querySelector(\"[data-gruns-subscribe-price]\");\n      const subscribeCompareNode = buybox.querySelector(\"[data-gruns-subscribe-compare]\");\n      const subscribeDailyNode = buybox.querySelector(\"[data-gruns-subscribe-daily]\");\n      const subscribeRibbonNode = buybox.querySelector(\"[data-gruns-subscribe-ribbon]\");\n      const subscribeSubtitleNode = buybox.querySelector(\"[data-gruns-subscribe-subtitle]\");\n      const oneTimeSubtitleNode = buybox.querySelector(\"[data-gruns-one-time-subtitle]\");\n      const oneTimeCompareNode = buybox.querySelector(\"[data-gruns-one-time-compare]\");\n      const oneTimeDailyNode = buybox.querySelector(\"[data-gruns-one-time-daily]\");\n      const purchaseCards = Array.from(buybox.querySelectorAll(\"[data-gruns-purchase-mode]\"));\n      const subscribeCopy = buybox.querySelector(\"[data-gruns-subscribe-copy]\");\n      const variantInput = buybox.querySelector(\"[data-gruns-variant-id]\");\n      const sellingPlanInput = buybox.querySelector(\"[data-gruns-selling-plan-input]\");\n      const submit = buybox.querySelector(\"[data-gruns-submit]\");\n      const form = buybox.querySelector(\".gruns-buybox__form\");\n      const feedbackNode = buybox.querySelector(\"[data-gruns-form-feedback]\");\n      const quantityInput = buybox.querySelector(\"[data-gruns-quantity-input]\");\n      const quantityBadge = buybox.querySelector(\"[data-gruns-quantity-badge]\");\n      const optionButtons = Array.from(buybox.querySelectorAll(\"[data-gruns-option]\"));\n      const productView = buybox.closest(\"[data-gruns-product-view]\");\n      const selectedOptions = [];\n      const submitDefaultLabel =\n        (submit && (submit.dataset.grunsSubmitDefault || submit.textContent || \"\").trim()) || \"Start Now\";\n      const subscribeCopyDefault = subscribeCopy ? subscribeCopy.textContent.trim() : \"\";\n      const getPurchaseCard = (mode) =>\n        purchaseCards.find((card) => card.dataset.grunsPurchaseMode === mode) || null;\n      const isUnavailablePurchaseMode = (card) => card?.dataset.grunsPlanUnavailable === \"true\";\n      const subscribeCard = getPurchaseCard(\"subscribe\");\n      const oneTimeCard = getPurchaseCard(\"one-time\");\n      const hasLiveSubscribePlan = Boolean(subscribeCard?.dataset.grunsSellingPlanId);\n      let purchaseMode = oneTimeCard?.classList.contains(\"is-active\")\n        ? \"one-time\"\n        : subscribeCard?.classList.contains(\"is-active\")\n          ? \"subscribe\"\n          : hasLiveSubscribePlan\n            ? \"subscribe\"\n            : \"one-time\";\n      let submitResetTimer = 0;\n\n      const clearSubmitReset = () => {\n        if (submitResetTimer) {\n          window.clearTimeout(submitResetTimer);\n          submitResetTimer = 0;\n        }\n      };\n\n      const setFeedback = (message, state = \"\") => {\n        if (!feedbackNode) return;\n        feedbackNode.textContent = message || \"\";\n        feedbackNode.dataset.state = state || \"\";\n      };\n\n      const setSubmitState = (state) => {\n        if (!submit) return;\n        submit.classList.remove(\"is-loading\", \"is-success\", \"is-error\");\n        if (state === \"loading\") {\n          submit.classList.add(\"is-loading\");\n          submit.textContent = \"Adding...\";\n          return;\n        }\n        if (state === \"success\") {\n          submit.classList.add(\"is-success\");\n          submit.textContent = \"Added to cart\";\n          return;\n        }\n        if (state === \"error\") {\n          submit.classList.add(\"is-error\");\n          submit.textContent = \"Try again\";\n          return;\n        }\n        submit.textContent = submitDefaultLabel;\n      };\n\n      const roundCurrency = (value) => Math.round((Number(value) || 0) * 100) / 100;\n\n      const syncPurchaseMode = (nextMode, config = {}) => {\n        purchaseMode = nextMode === \"subscribe\" ? \"subscribe\" : \"one-time\";\n        purchaseCards.forEach((card) => {\n          const isActive = card.dataset.grunsPurchaseMode === purchaseMode;\n          card.classList.toggle(\"is-active\", isActive);\n          card.classList.toggle(\"is-expanded\", isActive);\n          card.setAttribute(\"aria-pressed\", String(isActive));\n          card.setAttribute(\"aria-expanded\", String(isActive));\n        });\n\n        if (sellingPlanInput) {\n          const activeCard = purchaseCards.find((card) => card.classList.contains(\"is-active\"));\n          const sellingPlanId =\n            purchaseMode === \"subscribe\" && activeCard && !isUnavailablePurchaseMode(activeCard)\n              ? activeCard.dataset.grunsSellingPlanId || \"\"\n              : \"\";\n          sellingPlanInput.value = sellingPlanId;\n        }\n\n        if (config.clearFeedback !== false) {\n          const activeSubscribeCard = getPurchaseCard(\"subscribe\");\n          if (purchaseMode === \"subscribe\" && isUnavailablePurchaseMode(activeSubscribeCard)) {\n            if (config.showUnavailableNotice === true) {\n              setFeedback(\n                activeSubscribeCard?.dataset.grunsDisabledMessage ||\n                  \"Subscription plans are not yet published on this store.\",\n                \"notice\",\n              );\n            } else {\n              setFeedback(\"\", \"\");\n            }\n          } else {\n            setFeedback(\"\", \"\");\n          }\n        }\n      };\n\n      optionButtons.forEach((button) => {\n        const optionIndex = Number(button.dataset.optionIndex || 0);\n        if (!(optionIndex in selectedOptions)) {\n          selectedOptions[optionIndex] = button.dataset.optionValue || \"\";\n        }\n        if (button.classList.contains(\"is-active\")) {\n          selectedOptions[optionIndex] = button.dataset.optionValue || \"\";\n        }\n      });\n\n      const getOptionButtons = (optionIndex) =>\n        optionButtons.filter((candidate) => Number(candidate.dataset.optionIndex || 0) === optionIndex);\n\n      const setActiveOptionButton = (button) => {\n        if (!button) return false;\n        const optionIndex = Number(button.dataset.optionIndex || 0);\n        const siblings = getOptionButtons(optionIndex);\n        selectedOptions[optionIndex] = button.dataset.optionValue || \"\";\n        siblings.forEach((candidate) => {\n          const isActive = candidate === button;\n          candidate.classList.toggle(\"is-active\", isActive);\n          candidate.setAttribute(\"aria-pressed\", String(isActive));\n        });\n        return true;\n      };\n\n      const setOptionValue = (optionIndex, optionValue) => {\n        if (optionValue == null || optionValue === \"\") return false;\n        const match = getOptionButtons(optionIndex).find((candidate) => candidate.dataset.optionValue === optionValue);\n        return setActiveOptionButton(match);\n      };\n\n      const getActiveOptionValue = (className) => {\n        const activeButton = optionButtons.find(\n          (candidate) => candidate.classList.contains(className) && candidate.classList.contains(\"is-active\"),\n        );\n        return activeButton ? activeButton.dataset.optionValue || \"\" : \"\";\n      };\n\n      const getStateSnapshot = () => ({\n        optionValues: selectedOptions.slice(),\n        sugarValue: getActiveOptionValue(\"gruns-buybox__choice--sugar\"),\n        quantityValue: getActiveOptionValue(\"gruns-buybox__choice--quantity\"),\n        purchaseMode,\n        cartQuantity: quantityInput ? safeInteger(quantityInput.value || 1, 1) : 1,\n      });\n\n      const applyStateSnapshot = (snapshot, config = {}) => {\n        if (!snapshot || typeof snapshot !== \"object\") {\n          return syncVariant(config);\n        }\n\n        if (Array.isArray(snapshot.optionValues)) {\n          snapshot.optionValues.forEach((optionValue, optionIndex) => {\n            setOptionValue(optionIndex, optionValue);\n          });\n        }\n\n        if (snapshot.sugarValue) {\n          const sugarIndex = Number(\n            optionButtons.find((candidate) => candidate.classList.contains(\"gruns-buybox__choice--sugar\"))?.dataset\n              .optionIndex || -1,\n          );\n          if (sugarIndex >= 0) {\n            setOptionValue(sugarIndex, snapshot.sugarValue);\n          }\n        }\n\n        if (snapshot.quantityValue) {\n          const quantityIndex = Number(\n            optionButtons.find((candidate) => candidate.classList.contains(\"gruns-buybox__choice--quantity\"))?.dataset\n              .optionIndex || -1,\n          );\n          if (quantityIndex >= 0) {\n            setOptionValue(quantityIndex, snapshot.quantityValue);\n          }\n        }\n\n        if (quantityInput) {\n          quantityInput.value = String(safeInteger(snapshot.cartQuantity, 1));\n        }\n\n        if (snapshot.purchaseMode) {\n          syncPurchaseMode(snapshot.purchaseMode, { clearFeedback: false });\n        }\n\n        return syncVariant(config);\n      };\n\n      const syncVariant = (config = {}) => {\n        const replaceUrl =\n          config.replaceUrl ?? (!productView || productView.classList.contains(\"is-active\"));\n        const syncGallery = config.syncGallery ?? true;\n        const variant = findVariant(product, selectedOptions) || product.variants[0];\n        if (!variant) return;\n        buybox.dataset.grunsCurrentHandle = product.handle || \"\";\n        buybox.dataset.grunsCurrentVariantId = String(variant.id || \"\");\n        if (variantInput) variantInput.value = variant.id;\n        clearSubmitReset();\n        setSubmitState(\"idle\");\n        setFeedback(\"\", \"\");\n\n        const livePrice = normalizeMoneyValue(variant.price);\n        const compareAt = normalizeMoneyValue(variant.compare_at_price || variant.compareAtPrice || 0);\n        const variantTitle = String(variant.title || \"\");\n        const packs = /84/i.test(variantTitle) ? 84 : 28;\n        const isDouble = packs > 28;\n        const oneTimeDaily = packs ? livePrice / packs : 0;\n        const subscribeSubtitle = isDouble ? \"84 packs each 12 weeks\" : \"28 packs each 4 weeks\";\n        const oneTimeSubtitle = isDouble ? \"84 packs delivered once\" : \"28 packs delivered once\";\n        if (priceNode) priceNode.textContent = money(livePrice);\n        offerPriceNodes.forEach((node) => {\n          node.textContent = money(livePrice);\n        });\n        if (subscribePriceNode) subscribePriceNode.textContent = money(livePrice);\n        if (subscribeCompareNode) {\n          if (compareAt > livePrice) {\n            subscribeCompareNode.textContent = money(compareAt);\n            subscribeCompareNode.classList.remove(\"is-hidden\");\n          } else {\n            subscribeCompareNode.textContent = \"\";\n            subscribeCompareNode.classList.add(\"is-hidden\");\n          }\n        }\n        if (subscribeRibbonNode) {\n          subscribeRibbonNode.textContent = isDouble ? \"Most Popular: Get 52% Off\" : \"Most Popular: Get 49% Off\";\n        }\n        if (subscribeSubtitleNode) subscribeSubtitleNode.textContent = subscribeSubtitle;\n        if (oneTimeSubtitleNode) oneTimeSubtitleNode.textContent = oneTimeSubtitle;\n        if (oneTimeCompareNode) {\n          if (compareAt > livePrice) {\n            oneTimeCompareNode.textContent = money(compareAt);\n            oneTimeCompareNode.classList.remove(\"is-hidden\");\n          } else {\n            oneTimeCompareNode.textContent = \"\";\n            oneTimeCompareNode.classList.add(\"is-hidden\");\n          }\n        }\n        if (subscribeDailyNode) subscribeDailyNode.textContent = `$${oneTimeDaily.toFixed(2)}/day`;\n        if (oneTimeDailyNode) oneTimeDailyNode.textContent = `$${oneTimeDaily.toFixed(2)}/day`;\n\n        if (compareNode) {\n          if (compareAt > livePrice) {\n            compareNode.textContent = money(compareAt);\n            compareNode.classList.remove(\"is-hidden\");\n          } else {\n            compareNode.textContent = \"\";\n            compareNode.classList.add(\"is-hidden\");\n          }\n        }\n\n        if (submit) {\n          const available = Boolean(variant.available);\n          submit.disabled = !available;\n          submit.textContent = available ? submitDefaultLabel : \"Sold out\";\n        }\n\n        if (quantityBadge) {\n          const hasDoublePack =\n            Array.isArray(variant.options) && variant.options.some((value) => /84/.test(String(value || \"\")));\n          quantityBadge.classList.toggle(\"is-enabled\", Boolean(hasDoublePack));\n        }\n\n        if (subscribeCopy && subscribeCopyDefault && subscribeCopy.dataset.dynamicCopy === \"true\") {\n          subscribeCopy.textContent = subscribeCopyDefault.replace(\"{{ variant_title }}\", variant.title);\n        }\n\n        const parent =\n          buybox.closest(\".gruns-product-main__grid\") || buybox.closest(\".gruns-buybox-section__grid\") || null;\n        const gallery = parent ? parent.querySelector(\"[data-gruns-gallery]\") : null;\n        const mediaId =\n          variant.featured_media?.id ||\n          variant.featuredMedia?.id ||\n          variant.featured_image?.id ||\n          variant.featuredImage?.id;\n        const activeSugarButton = optionButtons.find(\n          (candidate) =>\n            candidate.classList.contains(\"is-active\") &&\n            candidate.classList.contains(\"gruns-buybox__choice--sugar\"),\n        );\n\n        if (gallery && activeSugarButton) {\n          const nutritionThumb = gallery.querySelector(\"[data-gruns-nutrition-thumb-image]\");\n          const nutritionDesktopImage = gallery.querySelector(\"[data-gruns-nutrition-desktop-image]\");\n          const nutritionMobileImage = gallery.querySelector(\"[data-gruns-nutrition-mobile-image]\");\n          const nutritionModalDesktopImage = gallery.querySelector(\"[data-gruns-nutrition-modal-desktop-image]\");\n          const nutritionModalMobileImage = gallery.querySelector(\"[data-gruns-nutrition-modal-mobile-image]\");\n          const heroImage = gallery.querySelector(\"[data-gruns-hero-image]\");\n          const heroThumbImage = gallery.querySelector(\"[data-gruns-hero-thumb-image]\");\n          const nutritionThumbUrl = activeSugarButton.dataset.grunsNutritionThumbUrl || \"\";\n          const nutritionDesktopUrl = activeSugarButton.dataset.grunsNutritionDesktopUrl || \"\";\n          const nutritionMobileUrl = activeSugarButton.dataset.grunsNutritionMobileUrl || \"\";\n          const heroImageUrl = activeSugarButton.dataset.grunsHeroImageUrl || \"\";\n          const heroThumbUrl = activeSugarButton.dataset.grunsHeroThumbUrl || \"\";\n\n          if (nutritionThumb && nutritionThumbUrl) {\n            nutritionThumb.src = nutritionThumbUrl;\n          }\n\n          if (heroImage && heroImageUrl) {\n            heroImage.src = withWidth(heroImageUrl, 1400);\n          }\n\n          if (heroThumbImage && heroThumbUrl) {\n            heroThumbImage.src = heroThumbUrl;\n          }\n\n          if (nutritionDesktopImage && nutritionDesktopUrl) {\n            nutritionDesktopImage.src = withWidth(nutritionDesktopUrl, 1400);\n          }\n\n          if (nutritionMobileImage && nutritionMobileUrl) {\n            nutritionMobileImage.src = withWidth(nutritionMobileUrl, 800);\n          }\n\n          if (nutritionModalDesktopImage && nutritionDesktopUrl) {\n            nutritionModalDesktopImage.src = withWidth(nutritionDesktopUrl, 1800);\n          }\n\n          if (nutritionModalMobileImage && nutritionMobileUrl) {\n            nutritionModalMobileImage.src = withWidth(nutritionMobileUrl, 900);\n          }\n        }\n\n        if (gallery && mediaId && syncGallery) {\n          activateGallery(gallery, null, mediaId);\n        }\n\n        const productMain = buybox.closest(\".gruns-product-main\");\n        if (\n          replaceUrl &&\n          !productMain &&\n          window.location.pathname.indexOf(\"/products/\") === 0 &&\n          window.history.replaceState\n        ) {\n          const routeBase = buybox.dataset.grunsProductUrl || window.location.pathname;\n          window.history.replaceState({}, \"\", buildHistoryUrl(routeBase, variant.id));\n        }\n\n        return variant;\n      };\n\n      optionButtons.forEach((button) => {\n        button.addEventListener(\"click\", () => {\n          setActiveOptionButton(button);\n          syncVariant();\n        });\n      });\n\n      buybox.querySelectorAll(\"[data-gruns-quantity-step]\").forEach((button) => {\n        button.addEventListener(\"click\", () => {\n          if (!quantityInput) return;\n          const step = Number(button.dataset.grunsQuantityStep || 0);\n          const current = Number(quantityInput.value || 1);\n          quantityInput.value = String(Math.max(1, current + step));\n        });\n      });\n\n      purchaseCards.forEach((card) => {\n        card.addEventListener(\"click\", () => {\n          syncPurchaseMode(card.dataset.grunsPurchaseMode || \"one-time\", {\n            showUnavailableNotice: card.dataset.grunsPurchaseMode === \"subscribe\",\n          });\n        });\n      });\n\n      if (form && submit && variantInput) {\n        form.addEventListener(\"submit\", async (event) => {\n          event.preventDefault();\n          if (submit.disabled) return;\n\n          const activeSubscribeCard = getPurchaseCard(\"subscribe\");\n          if (purchaseMode === \"subscribe\" && !sellingPlanInput?.value && isUnavailablePurchaseMode(activeSubscribeCard)) {\n            clearSubmitReset();\n            submit.disabled = false;\n            submit.classList.remove(\"is-loading\", \"is-success\");\n            submit.classList.add(\"is-error\");\n            submit.textContent = \"Not available\";\n            setFeedback(\n              activeSubscribeCard?.dataset.grunsDisabledMessage ||\n                \"Subscription plans are not yet published on this store.\",\n              \"notice\",\n            );\n            submitResetTimer = window.setTimeout(() => {\n              submit.disabled = false;\n              setSubmitState(\"idle\");\n            }, 2200);\n            return;\n          }\n\n          clearSubmitReset();\n          setFeedback(\"\", \"\");\n          setSubmitState(\"loading\");\n          submit.disabled = true;\n\n          try {\n            const formData = new FormData(form);\n            if (purchaseMode !== \"subscribe\" || !sellingPlanInput?.value) {\n              formData.delete(\"selling_plan\");\n            }\n\n            const response = await fetch(\"/cart/add.js\", {\n              method: \"POST\",\n              headers: {\n                Accept: \"application/json\",\n              },\n              body: formData,\n            });\n\n            let payload = null;\n            try {\n              payload = await response.json();\n            } catch {\n              payload = null;\n            }\n\n            if (!response.ok) {\n              const errorMessage =\n                payload?.description || payload?.message || \"Could not add this item right now.\";\n              throw new Error(errorMessage);\n            }\n\n            setSubmitState(\"success\");\n            setFeedback(\"Added to cart.\", \"success\");\n            window.dispatchEvent(\n              new CustomEvent(\"gruns:cart:add\", {\n                detail: {\n                  productHandle: product.handle,\n                  variantId: variantInput.value,\n                  quantity: quantityInput ? Number(quantityInput.value || 1) : 1,\n                  cartItem: payload,\n                },\n              }),\n            );\n            submitResetTimer = window.setTimeout(() => {\n              submit.disabled = false;\n              setSubmitState(\"idle\");\n            }, 2200);\n            return;\n          } catch (error) {\n            setSubmitState(\"error\");\n            setFeedback(error instanceof Error ? error.message : \"Could not add this item right now.\", \"error\");\n            submitResetTimer = window.setTimeout(() => {\n              submit.disabled = false;\n              setSubmitState(\"idle\");\n            }, 2200);\n            return;\n          }\n        });\n      }\n\n      buybox.__grunsSyncVariant = syncVariant;\n      buybox.__grunsGetStateSnapshot = getStateSnapshot;\n      buybox.__grunsApplyStateSnapshot = applyStateSnapshot;\n      buybox.__grunsSetPurchaseMode = syncPurchaseMode;\n      syncPurchaseMode(hasLiveSubscribePlan ? purchaseMode : \"one-time\", { clearFeedback: false });\n      syncVariant();\n    });\n  }\n\n  function setActiveProductView(section, handle) {\n    if (!section) return;\n\n    const views = Array.from(section.querySelectorAll(\"[data-gruns-product-view]\"));\n    if (!views.length) return;\n\n    const currentView = views.find((candidate) => candidate.classList.contains(\"is-active\")) || null;\n    const currentBuybox = currentView ? currentView.querySelector(\"[data-gruns-buybox]\") : null;\n    const currentState =\n      currentBuybox && typeof currentBuybox.__grunsGetStateSnapshot === \"function\"\n        ? currentBuybox.__grunsGetStateSnapshot()\n        : null;\n    const nextView = views.find((candidate) => candidate.dataset.productHandle === handle) || views[0];\n    if (!nextView) return;\n    const nextHandle = nextView.dataset.productHandle || handle || \"\";\n\n    views.forEach((candidate) => {\n      candidate.classList.toggle(\"is-active\", candidate === nextView);\n      const modal = candidate.querySelector(\"[data-gruns-nutrition-modal]\");\n      if (modal) {\n        setModalState(modal, false);\n      }\n    });\n\n    const activeBuybox = nextView.querySelector(\"[data-gruns-buybox]\");\n    const applyActiveState =\n      activeBuybox && typeof activeBuybox.__grunsApplyStateSnapshot === \"function\"\n        ? activeBuybox.__grunsApplyStateSnapshot\n        : null;\n    const syncActiveVariant =\n      activeBuybox && typeof activeBuybox.__grunsSyncVariant === \"function\"\n        ? activeBuybox.__grunsSyncVariant\n        : null;\n\n    if (applyActiveState && currentState) {\n      applyActiveState(currentState, { replaceUrl: false, syncGallery: true });\n    } else if (syncActiveVariant) {\n      syncActiveVariant({ replaceUrl: false, syncGallery: true });\n    }\n\n    if (section) {\n      section.dataset.grunsCurrentHandle = nextHandle;\n    }\n    if (activeBuybox) {\n      activeBuybox.dataset.grunsCurrentHandle = nextHandle;\n    }\n  }\n\n  function initProductViews(root) {\n    root.querySelectorAll(\".gruns-product-main\").forEach((section) => {\n      if (section.dataset.grunsProductMainInit !== \"true\") {\n        section.dataset.grunsProductMainInit = \"true\";\n      }\n\n      if (window.location.pathname.indexOf(\"/products/\") === 0 && !section.dataset.grunsRouteBase) {\n        section.dataset.grunsRouteBase = window.location.pathname;\n      }\n\n      section.querySelectorAll(\"[data-gruns-product-switch]\").forEach((trigger) => {\n        if (trigger.dataset.grunsProductSwitchInit === \"true\") return;\n        trigger.dataset.grunsProductSwitchInit = \"true\";\n        trigger.addEventListener(\"click\", (event) => {\n          const handle = trigger.dataset.grunsProductSwitch || \"\";\n          if (!handle) return;\n          event.preventDefault();\n          setActiveProductView(section, handle);\n        });\n      });\n\n      section.querySelectorAll(\"[data-gruns-product-view]\").forEach((view) => {\n        view.dataset.grunsProductViewInit = \"true\";\n      });\n\n      const pathnameHandleMatch = window.location.pathname.match(/\\/products\\/([^/?#]+)/);\n      const pathnameHandle = pathnameHandleMatch ? pathnameHandleMatch[1] : \"\";\n      const currentActiveView = section.querySelector(\"[data-gruns-product-view].is-active\");\n      const currentHandle =\n        pathnameHandle ||\n        (currentActiveView ? currentActiveView.dataset.productHandle || \"\" : \"\") ||\n        \"\";\n\n      setActiveProductView(section, currentHandle);\n\n      const activeBuybox = section.querySelector(\"[data-gruns-product-view].is-active [data-gruns-buybox]\");\n      const activeSubscribeCard = activeBuybox\n        ? activeBuybox.querySelector('[data-gruns-purchase-mode=\"subscribe\"]')\n        : null;\n      if (\n        activeBuybox &&\n        activeSubscribeCard &&\n        activeSubscribeCard.dataset.grunsPlanUnavailable === \"true\" &&\n        typeof activeBuybox.__grunsSetPurchaseMode === \"function\"\n      ) {\n        activeBuybox.__grunsSetPurchaseMode(\"one-time\", { clearFeedback: false });\n      }\n    });\n  }\n\n  function initStickyPdpCtas(root) {\n    root.querySelectorAll(\"[data-gruns-pdp-sticky-cta]\").forEach((bar) => {\n      if (bar.dataset.grunsStickyInit === \"true\") return;\n      bar.dataset.grunsStickyInit = \"true\";\n\n      const section =\n        bar.previousElementSibling && bar.previousElementSibling.classList.contains(\"gruns-product-main\")\n          ? bar.previousElementSibling\n          : document.querySelector(\".gruns-product-main\");\n      if (!section) return;\n\n      const mediaQuery = window.matchMedia(\"(max-width: 989px)\");\n      const anchorLink = bar.querySelector(\"[data-gruns-pdp-sticky-cta-link]\");\n\n      const update = () => {\n        const rect = section.getBoundingClientRect();\n        const shouldShow = mediaQuery.matches && rect.top < -180 && rect.bottom > 240;\n        bar.hidden = !shouldShow;\n        bar.classList.toggle(\"is-visible\", shouldShow);\n      };\n\n      if (anchorLink && anchorLink.dataset.grunsStickyLinkInit !== \"true\") {\n        anchorLink.dataset.grunsStickyLinkInit = \"true\";\n        anchorLink.addEventListener(\"click\", (event) => {\n          const targetId = anchorLink.getAttribute(\"href\");\n          if (!targetId || !targetId.startsWith(\"#\")) return;\n          const target = document.querySelector(targetId);\n          if (!target) return;\n          event.preventDefault();\n          target.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n        });\n      }\n\n      window.addEventListener(\"scroll\", update, { passive: true });\n      window.addEventListener(\"resize\", update);\n      if (mediaQuery.addEventListener) {\n        mediaQuery.addEventListener(\"change\", update);\n      } else if (mediaQuery.addListener) {\n        mediaQuery.addListener(update);\n      }\n      update();\n    });\n  }\n\n  function initInlineCarousels(root) {\n    root.querySelectorAll(\"[data-gruns-inline-carousel]\").forEach((carousel) => {\n      if (carousel.dataset.grunsInlineCarouselInit === \"true\") return;\n      carousel.dataset.grunsInlineCarouselInit = \"true\";\n\n      const track = carousel.querySelector(\"[data-gruns-inline-carousel-track]\");\n      if (!track) return;\n\n      const slides = Array.from(track.children);\n      if (!slides.length) return;\n\n      const move = (direction) => {\n        const slideWidth = slides[0].getBoundingClientRect().width;\n        if (!slideWidth) return;\n        track.scrollBy({\n          left: slideWidth * direction,\n          behavior: \"smooth\",\n        });\n      };\n\n      carousel.querySelectorAll(\"[data-gruns-inline-carousel-prev]\").forEach((button) => {\n        button.addEventListener(\"click\", () => move(-1));\n      });\n\n      carousel.querySelectorAll(\"[data-gruns-inline-carousel-next]\").forEach((button) => {\n        button.addEventListener(\"click\", () => move(1));\n      });\n    });\n  }\n\n  function initCountdowns(root) {\n    root.querySelectorAll(\"[data-gruns-countdown]\").forEach((countdown) => {\n      if (countdown.dataset.grunsInit === \"true\") return;\n      countdown.dataset.grunsInit = \"true\";\n      const valueNode = countdown.querySelector(\"[data-gruns-countdown-value]\");\n      const target = new Date(countdown.dataset.target || \"\");\n      if (!valueNode || Number.isNaN(target.getTime())) return;\n\n      const render = () => {\n        const diff = Math.max(0, target.getTime() - Date.now());\n        const hours = String(Math.floor(diff / 3600000) % 24).padStart(2, \"0\");\n        const minutes = String(Math.floor(diff / 60000) % 60).padStart(2, \"0\");\n        const seconds = String(Math.floor(diff / 1000) % 60).padStart(2, \"0\");\n        valueNode.textContent = `${hours}:${minutes}:${seconds}`;\n      };\n\n      render();\n      window.setInterval(render, 1000);\n    });\n  }\n\n  function initMembersFans(root) {\n    root.querySelectorAll(\"[data-gruns-members-fan]\").forEach((fan) => {\n      if (fan.dataset.grunsMembersInit === \"true\" || fan.__grunsMembersBooting === true) return;\n\n      const orbits = Array.from(fan.querySelectorAll(\"[data-gruns-members-orbit]\"));\n      if (!orbits.length) return;\n\n      fan.__grunsMembersBooting = true;\n      const mediaImages = Array.from(fan.querySelectorAll(\".gruns-members-band__media img\"));\n\n      const reducedMotionQuery = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n      const desktopQuery = window.matchMedia(\"(min-width: 992px)\");\n      const interval = Math.max(1.5, Number.parseFloat(fan.dataset.autoRotateInterval || \"3\"));\n      const state = {\n        phase: Math.max(0, Math.floor((Math.min(orbits.length, 5) - 1) / 2)),\n        rafId: 0,\n        lastFrame: 0,\n        playing: false,\n      };\n\n      const getRelativeIndex = (index) => {\n        let relative = index - (state.phase % orbits.length);\n\n        while (relative > orbits.length / 2) {\n          relative -= orbits.length;\n        }\n\n        while (relative < -(orbits.length / 2)) {\n          relative += orbits.length;\n        }\n\n        return relative;\n      };\n\n      const render = () => {\n        const step = desktopQuery.matches ? 18 : 15;\n        for (const [index, orbit] of orbits.entries()) {\n          orbit.style.transform = `translate3d(-50%, 0, 0) rotate(${(getRelativeIndex(index) * step).toFixed(3)}deg)`;\n          orbit.style.zIndex = String(index + 1);\n          orbit.style.opacity = \"1\";\n        }\n      };\n\n      const warmImages = () => {\n        for (const image of mediaImages) {\n          if (!image || !image.getAttribute(\"src\")) continue;\n          image.loading = \"eager\";\n          image.decoding = \"async\";\n          image.setAttribute(\"loading\", \"eager\");\n          image.setAttribute(\"decoding\", \"async\");\n          image.setAttribute(\"fetchpriority\", \"high\");\n\n          const preload = new Image();\n          preload.decoding = \"async\";\n          preload.src = image.currentSrc || image.src;\n\n          if (typeof image.decode === \"function\") {\n            image.decode().catch(() => {});\n          }\n        }\n      };\n\n      const stop = () => {\n        state.playing = false;\n        state.lastFrame = 0;\n        if (state.rafId) {\n          window.cancelAnimationFrame(state.rafId);\n          state.rafId = 0;\n        }\n      };\n\n      const tick = (time) => {\n        if (!state.playing) return;\n        if (!state.lastFrame) state.lastFrame = time;\n        const deltaSeconds = (time - state.lastFrame) / 1000;\n        state.lastFrame = time;\n        state.phase = (state.phase + deltaSeconds / interval) % orbits.length;\n        render();\n        state.rafId = window.requestAnimationFrame(tick);\n      };\n\n      const start = () => {\n        if (state.playing || reducedMotionQuery.matches || orbits.length <= 1) return;\n        state.playing = true;\n        state.lastFrame = 0;\n        state.rafId = window.requestAnimationFrame(tick);\n      };\n\n      const syncPlayback = () => {\n        render();\n        if (document.hidden || reducedMotionQuery.matches) {\n          stop();\n          return;\n        }\n\n        start();\n      };\n\n      const handleVisibilityChange = () => {\n        if (document.hidden) {\n          stop();\n        } else {\n          syncPlayback();\n        }\n      };\n\n      const handleMediaChange = () => {\n        render();\n      };\n\n      const handleMotionChange = () => {\n        syncPlayback();\n      };\n\n      document.addEventListener(\"visibilitychange\", handleVisibilityChange);\n      if (desktopQuery.addEventListener) {\n        desktopQuery.addEventListener(\"change\", handleMediaChange);\n      } else if (desktopQuery.addListener) {\n        desktopQuery.addListener(handleMediaChange);\n      }\n      if (reducedMotionQuery.addEventListener) {\n        reducedMotionQuery.addEventListener(\"change\", handleMotionChange);\n      } else if (reducedMotionQuery.addListener) {\n        reducedMotionQuery.addListener(handleMotionChange);\n      }\n\n      warmImages();\n      render();\n      syncPlayback();\n      fan.dataset.grunsMembersInit = \"true\";\n      delete fan.__grunsMembersBooting;\n\n      fan.__grunsMembersCleanup = () => {\n        stop();\n        document.removeEventListener(\"visibilitychange\", handleVisibilityChange);\n        if (desktopQuery.removeEventListener) {\n          desktopQuery.removeEventListener(\"change\", handleMediaChange);\n        } else if (desktopQuery.removeListener) {\n          desktopQuery.removeListener(handleMediaChange);\n        }\n        if (reducedMotionQuery.removeEventListener) {\n          reducedMotionQuery.removeEventListener(\"change\", handleMotionChange);\n        } else if (reducedMotionQuery.removeListener) {\n          reducedMotionQuery.removeListener(handleMotionChange);\n        }\n        delete fan.__grunsMembersCleanup;\n        delete fan.__grunsMembersBooting;\n        delete fan.dataset.grunsMembersInit;\n      };\n    });\n  }\n\n  function initBenefitsScroll(root) {\n    root.querySelectorAll(\"[data-gruns-benefits]\").forEach((section) => {\n      if (section.dataset.grunsBenefitsInit === \"true\") return;\n\n      const scene = section.querySelector(\"[data-gruns-benefits-scene]\");\n      const stack = section.querySelector(\"[data-gruns-benefits-stack]\");\n      const lines = Array.from(section.querySelectorAll(\"[data-gruns-benefits-line]\"));\n      const bear = section.querySelector(\"[data-gruns-benefits-bear]\");\n\n      if (!scene || !stack || !lines.length) return;\n\n      section.dataset.grunsBenefitsInit = \"true\";\n\n      const prefersReducedMotion = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n      const state = {\n        rafId: 0,\n      };\n      const easePower2Out = (value) => 1 - Math.pow(1 - value, 3);\n\n      const update = () => {\n        const sectionRect = section.getBoundingClientRect();\n        const sceneHeight = Math.max(state.sceneHeight || scene.offsetHeight || scene.getBoundingClientRect().height || 0, 1);\n        const scrollDistance = Math.max(state.scrollDistance || section.offsetHeight - scene.offsetHeight, 1);\n        const scrolled = clamp(-sectionRect.top, 0, scrollDistance);\n        const pinProgress = prefersReducedMotion.matches ? 1 : scrolled / scrollDistance;\n        const isMobile = window.innerWidth < 990;\n        const viewportHeight = window.innerHeight || document.documentElement.clientHeight || 1;\n        const revealStart = viewportHeight * (isMobile ? 0.55 : 0.2);\n        const entryProgress = clamp((revealStart - sectionRect.top) / Math.max(revealStart, 1), 0, 1);\n        const entryWeight = isMobile ? 0.24 : 0.32;\n        const pinWeight = isMobile ? 0.92 : 0.9;\n        const revealProgress = prefersReducedMotion.matches\n          ? 1\n          : clamp(entryProgress * entryWeight + pinProgress * pinWeight, 0, 1);\n        const lineTimings = isMobile\n          ? [\n              { start: 0, end: 0.18 },\n              { start: 0.18, end: 0.42 },\n              { start: 0.42, end: 0.64 },\n              { start: 0.66, end: 0.88 },\n            ]\n          : lines.map((line, index) => ({\n              start: index / Math.max(lines.length, 1),\n              end: (index + 1) / Math.max(lines.length, 1),\n            }));\n        const finalLineTiming = lineTimings[Math.max(lineTimings.length - 1, 0)] || { start: 0.75, end: 1 };\n        const accentThreshold = isMobile ? 0.72 : 0.8;\n        const accentTravel = isMobile\n          ? Math.max(finalLineTiming.end - accentThreshold, 0.12)\n          : 0.16;\n        const accentProgress = clamp((revealProgress - accentThreshold) / accentTravel, 0, 1);\n        const accentEase = easePower2Out(accentProgress);\n\n        section.style.setProperty(\"--gruns-benefits-progress\", pinProgress.toFixed(4));\n        stack.style.transform = \"translate3d(0, 0, 0)\";\n\n        lines.forEach((line, index) => {\n          const timing = lineTimings[index] || finalLineTiming;\n          const localProgress = clamp(\n            (revealProgress - timing.start) / Math.max(timing.end - timing.start, 0.001),\n            0,\n            1,\n          );\n          const easedProgress = easePower2Out(localProgress);\n          const translatePercent = (1 - easedProgress) * 100;\n\n          line.style.transform = `translate3d(0, ${translatePercent}%, 0)`;\n          line.classList.toggle(\"is-active\", localProgress > 0.01);\n\n          if (index === lines.length - 1) {\n            const greenChannel = Math.round(255 + (205 - 255) * accentEase);\n            const blueChannel = Math.round(255 + (47 - 255) * accentEase);\n            const alpha = 0.95 + 0.05 * accentEase;\n            line.style.color = `rgba(255, ${greenChannel}, ${blueChannel}, ${alpha.toFixed(3)})`;\n            line.classList.toggle(\"is-accent\", accentProgress > 0);\n          } else {\n            line.style.color = \"\";\n            line.classList.remove(\"is-accent\");\n          }\n        });\n\n        if (bear) {\n          const baseLift = isMobile ? 8 : 16;\n          const targetLift = bear.offsetHeight * -0.45;\n          const translateY = baseLift + (targetLift - baseLift) * accentEase;\n          bear.style.transform = `translate3d(-50%, ${translateY}px, 0)`;\n        }\n      };\n\n      const requestUpdate = () => {\n        if (state.rafId) return;\n        state.rafId = window.requestAnimationFrame(() => {\n          state.rafId = 0;\n          update();\n        });\n      };\n\n      const measure = () => {\n        const holdRatio = Number.parseFloat(section.dataset.grunsBenefitsHold || \"10\");\n        state.sceneHeight = Math.ceil(scene.getBoundingClientRect().height);\n        state.scrollDistance = Math.max(section.offsetHeight - scene.offsetHeight, 1);\n        if (state.sceneHeight > 0) {\n          section.style.minHeight = `${Math.ceil(state.sceneHeight * (2 + holdRatio / 100))}px`;\n        }\n        update();\n      };\n\n      const cleanup = () => {\n        window.removeEventListener(\"scroll\", requestUpdate);\n        window.removeEventListener(\"resize\", measure);\n        if (prefersReducedMotion.removeEventListener) {\n          prefersReducedMotion.removeEventListener(\"change\", measure);\n        } else if (prefersReducedMotion.removeListener) {\n          prefersReducedMotion.removeListener(measure);\n        }\n        if (state.rafId) {\n          window.cancelAnimationFrame(state.rafId);\n          state.rafId = 0;\n        }\n        delete section.__grunsBenefitsCleanup;\n        delete section.dataset.grunsBenefitsInit;\n      };\n\n      section.__grunsBenefitsCleanup = cleanup;\n\n      window.addEventListener(\"scroll\", requestUpdate, { passive: true });\n      window.addEventListener(\"resize\", measure);\n      if (prefersReducedMotion.addEventListener) {\n        prefersReducedMotion.addEventListener(\"change\", measure);\n      } else if (prefersReducedMotion.addListener) {\n        prefersReducedMotion.addListener(measure);\n      }\n\n      measure();\n      if (document.fonts && document.fonts.ready) {\n        document.fonts.ready.then(measure).catch(() => {});\n      } else {\n        window.setTimeout(measure, 250);\n      }\n    });\n  }\n\n  function initSocialProofRuntime(root) {\n    root.querySelectorAll(\".gruns-social-proof__panel\").forEach((panel) => {\n      if (panel.dataset.grunsSocialProofRuntimeInit === \"true\") {\n        if (typeof panel.__grunsSocialProofApply === \"function\") {\n          panel.__grunsSocialProofApply();\n        }\n        return;\n      }\n\n      panel.dataset.grunsSocialProofRuntimeInit = \"true\";\n\n      const apply = () => {\n        if (window.innerWidth >= 990) {\n          panel.style.width = \"calc(100% + 120px)\";\n          panel.style.marginLeft = \"-60px\";\n        } else {\n          panel.style.width = \"\";\n          panel.style.marginLeft = \"\";\n        }\n      };\n\n      panel.__grunsSocialProofApply = apply;\n\n      const handleResize = () => apply();\n      panel.__grunsSocialProofCleanup = () => {\n        window.removeEventListener(\"resize\", handleResize);\n        delete panel.__grunsSocialProofApply;\n        delete panel.__grunsSocialProofCleanup;\n        delete panel.dataset.grunsSocialProofRuntimeInit;\n      };\n\n      window.addEventListener(\"resize\", handleResize);\n      apply();\n    });\n  }\n\n  /* gruns-cart-count-start */\n  let grunsCartCountRefreshTimer = null;\n\n  function readRenderedCartCount(root = document) {\n    const scopedNode = root && root.querySelector ? root.querySelector('[data-gruns-cart-count]') : null;\n    const fallbackNode = scopedNode || document.querySelector('[data-gruns-cart-count]');\n    const parsed = Number.parseInt((fallbackNode?.textContent || '').trim(), 10);\n    return Number.isFinite(parsed) ? Math.max(0, parsed) : 0;\n  }\n\n  function applyCartCount(itemCount) {\n    const count = Math.max(0, Number(itemCount) || 0);\n    const visibleText = count > 99 ? '99+' : String(count);\n\n    document.querySelectorAll('[data-gruns-cart-count]').forEach((node) => {\n      node.textContent = count > 0 ? visibleText : '';\n      node.classList.toggle('is-hidden', count === 0);\n    });\n\n    document.querySelectorAll('[data-gruns-cart-icon]').forEach((node) => {\n      node.classList.toggle('gruns-cart-icon--has-cart', count > 0);\n    });\n\n    document.querySelectorAll('[data-gruns-cart-link]').forEach((node) => {\n      node.setAttribute('aria-label', count > 0 ? 'Cart (' + count + ')' : 'Cart');\n    });\n\n    try {\n      sessionStorage.setItem('gruns-cart-count', JSON.stringify({ value: count, timestamp: Date.now() }));\n    } catch {}\n  }\n\n  async function fetchCartCount() {\n    try {\n      const response = await fetch('/cart.js', {\n        headers: { Accept: 'application/json' },\n      });\n      if (!response.ok) return null;\n      const payload = await response.json();\n      const parsed = Number(payload?.item_count ?? 0);\n      return Number.isFinite(parsed) ? Math.max(0, parsed) : 0;\n    } catch {\n      return null;\n    }\n  }\n\n  async function refreshCartCount() {\n    const count = await fetchCartCount();\n    if (count !== null) {\n      applyCartCount(count);\n    }\n  }\n\n  function scheduleCartCountRefresh(delay = 250) {\n    if (grunsCartCountRefreshTimer) {\n      window.clearTimeout(grunsCartCountRefreshTimer);\n    }\n\n    grunsCartCountRefreshTimer = window.setTimeout(() => {\n      grunsCartCountRefreshTimer = null;\n      refreshCartCount();\n    }, delay);\n  }\n\n  function initCartCount(root = document) {\n    applyCartCount(readRenderedCartCount(root));\n\n    if (window.__grunsCartCountInitialized) return;\n    window.__grunsCartCountInitialized = true;\n\n    try {\n      const cached = JSON.parse(sessionStorage.getItem('gruns-cart-count') || 'null');\n      if (cached && typeof cached.value === 'number' && Date.now() - (cached.timestamp || 0) < 300000) {\n        applyCartCount(cached.value);\n      }\n    } catch {}\n\n    scheduleCartCountRefresh(0);\n\n    window.addEventListener('pageshow', () => {\n      scheduleCartCountRefresh(0);\n    });\n\n    document.addEventListener('visibilitychange', () => {\n      if (!document.hidden) {\n        scheduleCartCountRefresh(0);\n      }\n    });\n\n    window.addEventListener('gruns:cart:add', (event) => {\n      const quantity = Number(event?.detail?.quantity ?? 1);\n      const currentCount = readRenderedCartCount(document);\n      if (Number.isFinite(quantity) && quantity > 0) {\n        applyCartCount(currentCount + quantity);\n      }\n      scheduleCartCountRefresh(700);\n    });\n\n    document.addEventListener('submit', (event) => {\n      const form = event.target;\n      if (!(form instanceof HTMLFormElement)) return;\n      const action = form.getAttribute('action') || '';\n      if (/\\/cart(\\/add|\\/change|\\/update|$)/.test(action)) {\n        scheduleCartCountRefresh(900);\n      }\n    }, true);\n\n    document.addEventListener('click', (event) => {\n      const target = event.target instanceof Element ? event.target : null;\n      if (!target) return;\n      if (target.closest('[data-testid=\"cart-remove\"], .cart-remove-button, .cart-items__remove, .cart__remove, [name=\"minus\"], [name=\"plus\"], .quantity-selector button')) {\n        scheduleCartCountRefresh(900);\n      }\n    }, true);\n\n    document.addEventListener('change', (event) => {\n      const target = event.target instanceof Element ? event.target : null;\n      if (!target) return;\n      if (target.closest('input[name=\"updates[]\"], input[name=\"quantity\"], [data-testid=\"quantity-input\"]')) {\n        scheduleCartCountRefresh(700);\n      }\n    }, true);\n  }\n  /* gruns-cart-count-end */\n\n  function init() {\n    const root = document;\n    initCartCount(root);\n    initAnnouncements(root);\n    initDrawer(root);\n    initGalleries(root);\n    initAccordions(root);\n    initBuyboxes(root);\n    initProductViews(root);\n    initStickyPdpCtas(root);\n    initInlineCarousels(root);\n    initCountdowns(root);\n    initMembersFans(root);\n    initBenefitsScroll(root);\n    initSocialProofRuntime(root);\n  }\n\n  function scheduleInitRetries() {\n    window.requestAnimationFrame(init);\n    window.setTimeout(init, 300);\n    window.setTimeout(init, 1200);\n  }\n\n  function scheduleStreamingInit(attempt = 0) {\n    init();\n\n    if (attempt >= 40) return;\n\n    const productMain = document.querySelector(\".gruns-product-main\");\n    const activeView = document.querySelector(\".gruns-product-main__view.is-active\");\n    const activeBuybox = activeView ? activeView.querySelector(\"[data-gruns-buybox]\") : null;\n    const fullyInitialized =\n      (!productMain || productMain.dataset.grunsProductMainInit === \"true\") &&\n      (!activeView || activeView.dataset.grunsProductViewInit === \"true\") &&\n      (!activeBuybox || activeBuybox.dataset.grunsInit === \"true\");\n\n    if (fullyInitialized && document.readyState !== \"loading\") return;\n\n    const nextDelay = attempt < 8 ? 250 : attempt < 20 ? 500 : 1000;\n    window.setTimeout(() => scheduleStreamingInit(attempt + 1), nextDelay);\n  }\n\n  if (document.readyState === \"loading\") {\n    scheduleStreamingInit();\n    document.addEventListener(\"DOMContentLoaded\", () => {\n      init();\n      scheduleInitRetries();\n      scheduleStreamingInit();\n    });\n  } else {\n    init();\n    scheduleInitRetries();\n    scheduleStreamingInit();\n  }\n\n  window.addEventListener(\"load\", init);\n  document.addEventListener(\"shopify:section:load\", init);\n  document.addEventListener(\"shopify:section:unload\", (event) => {\n    const roots = [];\n    const fans = [];\n    if (event.target && event.target.matches && event.target.matches(\"[data-gruns-benefits]\")) {\n      roots.push(event.target);\n    }\n    if (event.target && event.target.matches && event.target.matches(\"[data-gruns-members-fan]\")) {\n      fans.push(event.target);\n    }\n    if (event.target && event.target.querySelectorAll) {\n      roots.push(...event.target.querySelectorAll(\"[data-gruns-benefits]\"));\n      fans.push(...event.target.querySelectorAll(\"[data-gruns-members-fan]\"));\n    }\n    roots.forEach((section) => {\n      if (typeof section.__grunsBenefitsCleanup === \"function\") {\n        section.__grunsBenefitsCleanup();\n      }\n    });\n    if (event.target && event.target.querySelectorAll) {\n      event.target.querySelectorAll(\".gruns-social-proof__panel\").forEach((panel) => {\n        if (typeof panel.__grunsSocialProofCleanup === \"function\") {\n          panel.__grunsSocialProofCleanup();\n        }\n      });\n    }\n    fans.forEach((fan) => {\n      if (typeof fan.__grunsMembersCleanup === \"function\") {\n        fan.__grunsMembersCleanup();\n      }\n    });\n  });\n})();\n"],
  "mappings": "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",
  "names": []
}
