{
  "version": 3,
  "sources": ["/cdn/shop/t/91/assets/bamboo-conversion-cleanup.js?rev=20261001ux1"],
  "sourcesContent": ["(function bambooConversionCleanup() {\n  // Live recovery marker: 2026-08-16 mode restoration.\n  var mobileQuery = window.matchMedia('(max-width: 749px)');\n  var systemPattern = /\\bsystem\\.(?:original_price|price)\\s*/g;\n  var kachingConfigCache = {};\n  var selectionTimers = {};\n  var mutationRunTimer = null;\n  var mutationObserver = null;\n  var bootstrapTimers = [];\n  var eventReconcileTimer = null;\n  var defaultPurchaseSelectionApplied = false;\n  var bundleSelectionTouchedByUser = false;\n  var purchaseModeSelectionTouchedByUser = false;\n  var cadenceSelectionTouchedByUser = false;\n  var requestedBundleRollCount = null;\n  var privacyBannerDismissedByScroll = false;\n  var privacyBannerScrollPosition = window.scrollY || 0;\n  var canonicalProductHandleMap = {\n    '2-ply': '2laags',\n    '3-ply': '3laags',\n    '3-ply-unbleached': '3laagsongebleekt',\n    'try-out-bundle': 'bamboe-toiletpapier-try-out-package',\n    'test-pakket': 'bamboe-toiletpapier-try-out-package',\n    'test-pack': 'bamboe-toiletpapier-try-out-package',\n    'try-out': 'bamboe-toiletpapier-try-out-package',\n  };\n  var preferredBundleCopyByHandle = {\n    nl: {\n      '2laags': {\n        48: { subtitle: 'Standaard Keuze' },\n        96: { badge: 'BEST SELLER', subtitle: 'Duurzame Keuze' },\n        192: { badge: 'LAAGSTE PRIJS', subtitle: 'Meest Voordelig' },\n      },\n      '3laags': {\n        48: { subtitle: 'Standaard Keuze' },\n        96: { badge: 'BEST SELLER', subtitle: 'Duurzame Keuze' },\n        192: { badge: 'LAAGSTE PRIJS', subtitle: 'Meest Voordelig' },\n      },\n      '3laagsongebleekt': {\n        48: { subtitle: 'Standaard Keuze' },\n        96: { badge: 'BEST SELLER', subtitle: 'Duurzame Keuze' },\n        192: { badge: 'LAAGSTE PRIJS', subtitle: 'Meest Voordelig' },\n      },\n    },\n    en: {\n      '2laags': {\n        48: { title: '48 rolls', subtitle: 'Standard choice' },\n        96: { title: '96 rolls', badge: 'BEST SELLER', subtitle: 'Sustainable choice' },\n        192: { title: '192 rolls', badge: 'LOWEST PRICE', subtitle: 'Best value' },\n      },\n      '3laags': {\n        48: { title: '48 rolls', subtitle: 'Standard choice' },\n        96: { title: '96 rolls', badge: 'BEST SELLER', subtitle: 'Sustainable choice' },\n        192: { title: '192 rolls', badge: 'LOWEST PRICE', subtitle: 'Best value' },\n      },\n      '3laagsongebleekt': {\n        48: { title: '48 rolls', subtitle: 'Standard choice' },\n        96: { title: '96 rolls', badge: 'BEST SELLER', subtitle: 'Sustainable choice' },\n        192: { title: '192 rolls', badge: 'LOWEST PRICE', subtitle: 'Best value' },\n      },\n    },\n  };\n\n  function injectSellingPlanGuardStyles() {\n    if (!document.head || document.getElementById('bamboo-selling-plan-guard')) return;\n\n    var style = document.createElement('style');\n    style.id = 'bamboo-selling-plan-guard';\n    style.textContent = \".kaching-bundles__selling-plan-select:not([data-bamboo-monthly-ready='true']){visibility:hidden;}\";\n    document.head.appendChild(style);\n  }\n\n  function getCanonicalProductHandle(handle) {\n    return canonicalProductHandleMap[handle] || handle;\n  }\n\n  function getLocaleKey() {\n    var localeFromPath = String(window.location.pathname || '').match(/^\\/(en|de|fr|es)(?:\\/|$)/i);\n    if (localeFromPath) return localeFromPath[1].toLowerCase();\n\n    var language = document.documentElement.getAttribute('lang') || 'nl';\n    return language.toLowerCase().slice(0, 2);\n  }\n\n  function getLocaleCopy() {\n    var localeKey = getLocaleKey();\n    var localeMap = {\n      nl: {\n        oneTime: 'Eenmalig',\n        subscription: 'Met abonnement',\n        subscriptionTitle: 'Abonneer & bespaar',\n        fromPrice: 'Vanaf',\n        perRollLabel: 'Prijs per rol',\n        perRollSuffix: 'per rol',\n      },\n      en: {\n        oneTime: 'One-time',\n        subscription: 'Subscribe',\n        subscriptionTitle: 'Subscribe & save',\n        fromPrice: 'From',\n        perRollLabel: 'Price per roll',\n        perRollSuffix: 'per roll',\n      },\n      de: {\n        oneTime: 'Einmalig',\n        subscription: 'Im Abo',\n        subscriptionTitle: 'Abonnieren & 5% sparen!',\n        fromPrice: 'Ab',\n        perRollLabel: 'Preis pro Rolle',\n        perRollSuffix: 'pro Rolle',\n      },\n      fr: {\n        oneTime: 'Achat unique',\n        subscription: 'Avec abonnement',\n        subscriptionTitle: 'Abonnez-vous et \u00E9conomisez 5 % !',\n        fromPrice: '\u00C0 partir de',\n        perRollLabel: 'Prix par rouleau',\n        perRollSuffix: 'par rouleau',\n      },\n      es: {\n        oneTime: 'Compra \u00FAnica',\n        subscription: 'Con suscripci\u00F3n',\n        subscriptionTitle: 'Suscr\u00EDbete y ahorra un 5 %',\n        fromPrice: 'Desde',\n        perRollLabel: 'Precio por rollo',\n        perRollSuffix: 'por rollo',\n      },\n    };\n\n    return localeMap[localeKey] || localeMap.nl;\n  }\n\n  function getIntlLocale() {\n    var localeKey = getLocaleKey();\n    var intlLocales = {\n      nl: 'nl-NL',\n      en: 'en-GB',\n      de: 'de-DE',\n      fr: 'fr-FR',\n      es: 'es-ES',\n    };\n\n    return intlLocales[localeKey] || 'nl-NL';\n  }\n\n  function roundPrice(value) {\n    return Math.round(value * 100) / 100;\n  }\n\n  function setTextContent(node, value) {\n    if (!node) return;\n    if (node.textContent === value) return;\n    node.textContent = value;\n  }\n\n  function setAttributeValue(node, name, value) {\n    if (!node) return;\n    if (node.getAttribute(name) === value) return;\n    node.setAttribute(name, value);\n  }\n\n  function getExactTextMap() {\n    var localeKey = getLocaleKey();\n    var maps = {\n      nl: {\n        'Add to cart': 'Bestel nu',\n        'Order now': 'Bestel nu',\n        'Sold out': 'Uitverkocht',\n        'One-time purchase': 'Eenmalige aankoop',\n        'Standard choice': 'Standaard keuze',\n        'Sustainable choice': 'Duurzame keuze',\n        'LOWEST PRICE': 'LAAGSTE PRIJS',\n        'MOST POPULAR': 'MEEST POPULAIR',\n        'BEST SELLER': 'BESTSELLER',\n        'XXL value pack': 'Meest Voordelig',\n        'Stock deal': 'Voorraaddeal',\n        'Deliver every month, 5% off': 'Elke maand',\n        'Deliver every 2 months, 5% off': 'Elke 2 maanden',\n        'Deliver every 3 months, 5% off': 'Elke 3 maanden',\n      },\n      en: {\n        'BUNDEL & BESPAAR': 'BUNDLE & SAVE',\n        'BUNDEL & BESPAAR!': 'BUNDLE & SAVE',\n        'Collection': 'Shop',\n        'Commercial': 'Business',\n        'Spaarkaart': 'Rewards',\n        'Standaard Keuze': 'Standard choice',\n        'Standaard keuze': 'Standard choice',\n        'Duurzame Keuze': 'Sustainable choice',\n        'Duurzame keuze': 'Sustainable choice',\n        'MEEST POPULAIR': 'MOST POPULAR',\n        'LAAGSTE PRIJS': 'LOWEST PRICE',\n        'BESTSELLER': 'BEST SELLER',\n        'Voorraad Deal': 'Stock deal',\n        'Voorraaddeal': 'Stock deal',\n        'SuperRollen': 'Super Rolls',\n        'Superrollen': 'Super Rolls',\n        'XXL Voordeelverpakking': 'Best value',\n        'XXL Voordeel Bundel': 'Best value',\n        'Meest Voordelig': 'Best value',\n        'Eenmalig': 'One-time',\n        'Eenmalige aankoop': 'One-time purchase',\n        'Met abonnement': 'Subscribe',\n        'Maandelijks geleverd': 'Delivered monthly',\n        'Gratis verzending.': 'Free shipping.',\n        'Veilig betalen': 'Secure payment',\n        'Uitverkocht': 'Sold out',\n        'Deliver every month, 5% off': 'Every month',\n        'Deliver every 2 months, 5% off': 'Every 2 months',\n        'Deliver every 3 months, 5% off': 'Every 3 months',\n      },\n    };\n\n    return maps[localeKey] || null;\n  }\n\n  function normalizeTextNodeCopy(node, copyMap) {\n    if (!node || !copyMap) return;\n    var rawText = String(node.textContent || '').replace(/\\s+/g, ' ').trim();\n    if (!rawText) return;\n\n    if (copyMap[rawText]) {\n      setTextContent(node, copyMap[rawText]);\n      return;\n    }\n\n    if (getLocaleKey() === 'en') {\n      if (/^(?:ABONNEER|ABBONEER) & BESPAAR\\s*\\d+%!?$/i.test(rawText) || /^SUBSCRIBE & SAVE\\s*\\d+%!?$/i.test(rawText)) {\n        setTextContent(node, 'Subscribe & save');\n        return;\n      }\n\n      if (/^Nog maar (.+) over$/i.test(rawText)) {\n        setTextContent(node, rawText.replace(/^Nog maar (.+) over$/i, 'Only $1 left'));\n      }\n    }\n\n    if (getLocaleKey() === 'nl' && /^(?:SUBSCRIBE & SAVE|ABONNEER & BESPAAR)\\s*\\d+%!?$/i.test(rawText)) {\n      setTextContent(node, 'Abonneer & bespaar');\n      return;\n    }\n\n    if (getLocaleKey() === 'nl') {\n      var savingMatch = rawText.match(/^You're saving\\s+(.+?)\\s+on this order$/i);\n      if (savingMatch) {\n        setTextContent(node, 'Je bespaart ' + savingMatch[1] + ' op deze bestelling');\n        return;\n      }\n\n      var deliveryMatch = rawText.match(/^Deliver every\\s+(?:(\\d+)\\s+)?month(?:s)?(?:,\\s*(\\d+)%\\s+off)?$/i);\n      if (deliveryMatch) {\n        var interval = Number(deliveryMatch[1] || 1);\n        var deliveryText = interval === 1 ? 'Elke maand bezorgen' : 'Elke ' + interval + ' maanden bezorgen';\n        if (deliveryMatch[2]) deliveryText += ', ' + deliveryMatch[2] + '% korting';\n        setTextContent(node, deliveryText);\n      }\n    }\n  }\n\n  function parseMoney(value) {\n    if (!value) return null;\n    var normalized = String(value).replace(/\\s+/g, '').replace(/[^\\d,.-]/g, '');\n    var lastComma = normalized.lastIndexOf(',');\n    var lastDot = normalized.lastIndexOf('.');\n\n    // Shopify/Kaching can render the same EUR amount as 38,94 (NL) or\n    // 38.94 (EN). Treat the last separator as the decimal separator so the\n    // shared per-roll calculation never turns 38.94 into 3894.\n    if (lastComma !== -1 && lastDot !== -1) {\n      if (lastComma > lastDot) {\n        normalized = normalized.replace(/\\./g, '').replace(',', '.');\n      } else {\n        normalized = normalized.replace(/,/g, '');\n      }\n    } else if (lastComma !== -1) {\n      normalized = normalized.replace(',', '.');\n    }\n\n    var parsed = Number(normalized);\n    return Number.isFinite(parsed) ? parsed : null;\n  }\n\n  function formatMoney(value) {\n    return new Intl.NumberFormat(getIntlLocale(), {\n      style: 'currency',\n      currency: 'EUR',\n      minimumFractionDigits: 2,\n      maximumFractionDigits: 2,\n    }).format(value);\n  }\n\n  function extractRollCount(text) {\n    var normalizedText = String(text || '');\n    // Product titles can start with their ply count (for example \"3-laags\").\n    // Prefer the quantity explicitly labelled as rolls so the technical\n    // subscription variants resolve to 96/192 rather than 3.\n    var match = normalizedText.match(/(\\d+)\\s*rollen\\b/i) || normalizedText.match(/(\\d+)/);\n    return match ? Number(match[1]) : null;\n  }\n\n  function getProductHandle() {\n    var classMatch = String(document.body && document.body.className || '').match(/template-product-([^\\s]+)/);\n    return classMatch ? getCanonicalProductHandle(classMatch[1]) : '';\n  }\n\n  function getDefaultBundleRollCount() {\n    return getProductHandle() === '2laags' ? 96 : 48;\n  }\n\n  function getAccurateSubscriptionConfig() {\n    var root = document.querySelector(\"product-info[id^='MainProduct-']\");\n    var dataNode = root && root.nextElementSibling;\n    if (!dataNode || !dataNode.matches('[data-bamboo-subscription-data]')) {\n      dataNode = document.querySelector('[data-bamboo-subscription-data]');\n    }\n    if (!dataNode) return null;\n\n    var data;\n    try {\n      data = JSON.parse(dataNode.textContent || '{}');\n    } catch (error) {\n      return null;\n    }\n\n    var publicVariant = data.publicVariant || {};\n    var publicVariantPrice = Number(publicVariant.price || 0) / 100;\n    var publicVariantCompareAtPrice = Number(publicVariant.compareAtPrice || 0) / 100;\n    if (!(publicVariantPrice > 0)) return null;\n\n    function plansByInterval(plans) {\n      return (plans || []).reduce(function (result, plan) {\n        var interval = getSellingPlanMonthInterval(plan && plan.name);\n        if (interval && plan && plan.id) result[interval] = String(plan.id);\n        return result;\n      }, {});\n    }\n\n    function pricesByPlanId(plans) {\n      return (plans || []).reduce(function (result, plan) {\n        var price = Number(plan && plan.price || 0) / 100;\n        if (plan && plan.id && price > 0) result[String(plan.id)] = price;\n        return result;\n      }, {});\n    }\n\n    var publicPlans = plansByInterval(publicVariant.sellingPlans);\n    var bundlePlans = plansByInterval(data.subscriptionPlans);\n    var subscriptionPricesByPlan = { 48: pricesByPlanId(publicVariant.sellingPlans) };\n    var prices = {\n      48: {\n        compareAt: publicVariantCompareAtPrice,\n        oneTime: publicVariantPrice,\n        subscription: Number(((publicVariant.sellingPlans || [])[0] || {}).price || 0) / 100,\n      },\n    };\n    var variants = { 48: String(publicVariant.id || '') };\n\n    (data.subscriptionVariants || []).forEach(function (variant) {\n      var rollCount = extractRollCount(variant && variant.title);\n      var subscriptionPrice = Number((variant && variant.sellingPlans && variant.sellingPlans[0] && variant.sellingPlans[0].price) || 0) / 100;\n      if (!rollCount || !(subscriptionPrice > 0) || !variant.id) return;\n\n      variants[rollCount] = String(variant.id);\n      subscriptionPricesByPlan[rollCount] = pricesByPlanId(variant.sellingPlans);\n      prices[rollCount] = {\n        compareAt: null,\n        oneTime: publicVariantPrice * (rollCount / 48),\n        subscription: subscriptionPrice,\n      };\n    });\n\n    return {\n      plans: { 48: publicPlans, 96: bundlePlans, 192: bundlePlans },\n      variants: variants,\n      prices: prices,\n      getSubscriptionPrice: function (rollCount, interval) {\n        var planId = ((rollCount === 48 ? publicPlans : bundlePlans) || {})[interval];\n        var price = planId && (subscriptionPricesByPlan[rollCount] || {})[String(planId)];\n        return price || (prices[rollCount] && prices[rollCount].subscription) || 0;\n      },\n    };\n  }\n\n  function isEnglish2PlyRoute() {\n    var path = String(window.location.pathname || '').replace(/\\/+$/, '');\n    return path === '/en/products/2-ply';\n  }\n\n  function get2PlyThemeAssetBaseUrl() {\n    var metaImage = document.querySelector('meta[property=\"og:image\"]');\n    var content = metaImage && metaImage.getAttribute('content');\n    if (content && content.indexOf('bamboo-product-2ply-48bl') !== -1) return content;\n\n    var candidate = document.querySelector(\"img[src*='bamboo-product-2ply-48bl'], img[srcset*='bamboo-product-2ply-48bl']\");\n    if (!candidate) return '';\n    return candidate.getAttribute('src') || candidate.currentSrc || '';\n  }\n\n  function build2PlyAssetUrl(baseUrl, sizeKey) {\n    var normalized = String(baseUrl || '');\n    if (!normalized) return '';\n\n    normalized = normalized.replace(/_(\\d+x)(\\.[a-z]+)(\\?v=.*)?$/i, '$2$3');\n    if (!sizeKey) return normalized;\n    return normalized.replace(/(\\.[a-z]+)(\\?v=.*)?$/i, '_' + sizeKey + '$1$2');\n  }\n\n  function build2PlySrcset(baseUrl, widths) {\n    return widths.map(function (width) {\n      return build2PlyAssetUrl(baseUrl, width + 'x') + ' ' + width + 'w';\n    }).join(', ');\n  }\n\n  function replaceStaleEnglish2PlyImages() {\n    if (!isEnglish2PlyRoute()) return;\n\n    var baseAssetUrl = get2PlyThemeAssetBaseUrl();\n    if (!baseAssetUrl) return;\n\n    var staleMarker = 'ChatGPT_Image_6_mei_2026_07_16_36';\n    var heroSrc = build2PlyAssetUrl(baseAssetUrl, '1206x');\n    var heroSrcset = build2PlySrcset(baseAssetUrl, [246, 493, 600, 713, 823, 990, 1100, 1206, 1346, 1426, 1646, 1946]);\n    var thumbSrc = build2PlyAssetUrl(baseAssetUrl, '208x');\n    var thumbSrcset = build2PlySrcset(baseAssetUrl, [54, 74, 104, 162, 208, 324, 416]);\n    var modalSrc = build2PlyAssetUrl(baseAssetUrl, '1445x');\n    var modalSrcset = build2PlySrcset(baseAssetUrl, [550, 1100, 1445, 1800]);\n\n    function syncImage(node, src, srcset) {\n      if (!node || !src) return;\n      if (node.getAttribute('src') !== src) node.setAttribute('src', src);\n      if (srcset && node.getAttribute('srcset') !== srcset) node.setAttribute('srcset', srcset);\n    }\n\n    document.querySelectorAll(\"img[src*='\" + staleMarker + \"'], img[srcset*='\" + staleMarker + \"']\").forEach(function (image) {\n      if (!image.closest(\"product-info[id^='MainProduct-'], .product-media-modal\")) return;\n\n      if (image.closest('.thumbnail-list__item')) {\n        syncImage(image, thumbSrc, thumbSrcset);\n        return;\n      }\n\n      if (image.closest('.product-media-modal')) {\n        syncImage(image, modalSrc, modalSrcset);\n        return;\n      }\n\n      syncImage(image, heroSrc, heroSrcset);\n    });\n\n    document.querySelectorAll(\"meta[property='og:image'], meta[property='og:image:secure_url'], meta[name='twitter:image']\").forEach(function (metaNode) {\n      if (metaNode.getAttribute('content') !== baseAssetUrl) metaNode.setAttribute('content', baseAssetUrl);\n    });\n  }\n\n  function getPreferredBundleCopy(productHandle, rollCount) {\n    var localeKey = getLocaleKey();\n    var localeCopy = preferredBundleCopyByHandle[localeKey] || preferredBundleCopyByHandle.nl;\n    var handleCopy = localeCopy[getCanonicalProductHandle(productHandle)];\n    if (!handleCopy || !rollCount) return null;\n    return handleCopy[rollCount] || null;\n  }\n\n  function syncNativePurchaseFlowState() {\n    document.querySelectorAll(\"product-info[id^='MainProduct-']\").forEach(function (root) {\n      var kachingDealBars = root.querySelectorAll(\n        '.kaching-bundles__bars .kaching-bundles__bar[data-deal-bar-id]'\n      );\n      var hasCompleteKachingPurchaseFlow = hasUsableKachingDealSelection(kachingDealBars);\n      var kachingReadySince = Number(root.dataset.bambooKachingReadySince || 0);\n\n      if (hasCompleteKachingPurchaseFlow && !kachingReadySince) {\n        kachingReadySince = Date.now();\n        root.dataset.bambooKachingReadySince = String(kachingReadySince);\n\n        if (root.dataset.bambooKachingReadyCheckScheduled !== 'true') {\n          root.dataset.bambooKachingReadyCheckScheduled = 'true';\n          window.setTimeout(function () {\n            delete root.dataset.bambooKachingReadyCheckScheduled;\n            syncNativePurchaseFlowState();\n          }, 350);\n        }\n      } else if (!hasCompleteKachingPurchaseFlow) {\n        delete root.dataset.bambooKachingReadySince;\n      }\n\n      /* Kaching can briefly mount a stale set of bars before rebuilding the\n         final widget. Keep the placeholder in place until a real selectable\n         deal is present, regardless of how many package choices a product has. */\n      var hasKachingPurchaseFlow =\n        hasCompleteKachingPurchaseFlow && Date.now() - kachingReadySince >= 300;\n      var submitButton = root.querySelector('.product-form__submit');\n\n      root.classList.toggle('bamboo-has-kaching-purchase-flow', hasKachingPurchaseFlow);\n\n      if (!submitButton) return;\n\n      if (hasKachingPurchaseFlow && submitButton.hasAttribute('disabled')) {\n        setAttributeValue(submitButton, 'aria-hidden', 'true');\n        submitButton.setAttribute('tabindex', '-1');\n        return;\n      }\n\n      submitButton.removeAttribute('aria-hidden');\n      if (submitButton.getAttribute('tabindex') === '-1') {\n        submitButton.removeAttribute('tabindex');\n      }\n    });\n  }\n\n  function normalizeProductTaxLocale() {\n    var localeKey = getLocaleKey();\n    var replacements = {\n      nl: {\n        'Veilig betalen met iDEAL, Klarna en creditcard.': 'Eenmalig: iDEAL, Klarna of creditcard. Abonnement: creditcard.',\n      },\n      en: {\n        'Verwachte bezorgdatum zichtbaar bij afrekenen.': 'Estimated delivery date shown at checkout.',\n        'Veilig betalen met iDEAL, Klarna en creditcard.': 'One-time: iDEAL, Klarna or credit card. Subscription: credit card.',\n        'Secure payment with iDEAL, Klarna and credit card.': 'One-time: iDEAL, Klarna or credit card. Subscription: credit card.',\n      },\n      de: {\n        'Verwachte bezorgdatum zichtbaar bij afrekenen.': 'Voraussichtliches Lieferdatum im Checkout.',\n        'Veilig betalen met iDEAL, Klarna en creditcard.': 'Einmalig: iDEAL, Klarna oder Kreditkarte. Abonnement: Kreditkarte.',\n        'Sicher bezahlen mit iDEAL, Klarna und Kreditkarte.': 'Einmalig: iDEAL, Klarna oder Kreditkarte. Abonnement: Kreditkarte.',\n      },\n      fr: {\n        'Verwachte bezorgdatum zichtbaar bij afrekenen.': 'Date de livraison estim\u00E9e affich\u00E9e au paiement.',\n        'Veilig betalen met iDEAL, Klarna en creditcard.': 'Achat unique : iDEAL, Klarna ou carte bancaire. Abonnement : carte bancaire.',\n        'Paiement s\u00E9curis\u00E9 avec iDEAL, Klarna et carte bancaire.': 'Achat unique : iDEAL, Klarna ou carte bancaire. Abonnement : carte bancaire.',\n      },\n      es: {\n        'Verwachte bezorgdatum zichtbaar bij afrekenen.': 'Fecha estimada de entrega visible al pagar.',\n        'Veilig betalen met iDEAL, Klarna en creditcard.': 'Compra \u00FAnica: iDEAL, Klarna o tarjeta. Suscripci\u00F3n: tarjeta.',\n        'Pago seguro con iDEAL, Klarna y tarjeta de cr\u00E9dito.': 'Compra \u00FAnica: iDEAL, Klarna o tarjeta. Suscripci\u00F3n: tarjeta.',\n      },\n    };\n    var localeReplacements = replacements[localeKey];\n    if (!localeReplacements) return;\n\n    document.querySelectorAll('.product__tax').forEach(function (node) {\n      var html = node.innerHTML;\n      Object.keys(localeReplacements).forEach(function (source) {\n        html = html.split(source).join(localeReplacements[source]);\n      });\n      if (node.innerHTML !== html) node.innerHTML = html;\n    });\n  }\n\n  function pushAnalyticsEvent(eventName, payload) {\n    if (window.dataLayer && typeof window.dataLayer.push === 'function') {\n      window.dataLayer.push(Object.assign({ event: eventName }, payload));\n    }\n\n    if (typeof window.gtag === 'function') {\n      window.gtag('event', eventName, payload);\n    }\n  }\n\n  function trackBundleSelection(bar, mode, source) {\n    if (!bar) return;\n\n    var rollCount = extractRollCount(bar.textContent);\n    var oneTimePrice = Number(bar.dataset.bambooOneTimePrice || 0);\n    var subscriptionPrice = Number(bar.dataset.bambooSubscriptionPrice || 0);\n    var activePrice = mode === 'subscription' ? subscriptionPrice : oneTimePrice;\n    var comparePrice = Number(bar.dataset.bambooComparePrice || 0);\n    var eventPayload = {\n      bundle_roll_count: rollCount || undefined,\n      bundle_title: (bar.querySelector('.kaching-bundles__bar-title') || {}).textContent || '',\n      purchase_mode: mode,\n      price: activePrice || undefined,\n      compare_at_price: comparePrice || undefined,\n      one_time_price: oneTimePrice || undefined,\n      subscription_price: subscriptionPrice || undefined,\n      currency: 'EUR',\n      source: source,\n      page_path: window.location.pathname,\n      product_handle: getProductHandle(),\n    };\n\n    pushAnalyticsEvent('bamboo_bundle_select', eventPayload);\n\n    if (typeof window.gtag === 'function') {\n      window.gtag('event', 'select_item', {\n        item_list_name: 'product_bundle_selector',\n        item_list_id: getProductHandle() || window.location.pathname,\n        items: [\n          {\n            item_id: rollCount ? String(rollCount) : undefined,\n            item_name: eventPayload.bundle_title,\n            item_category: 'bundle',\n            item_variant: mode,\n            price: activePrice || undefined,\n            quantity: 1,\n          },\n        ],\n      });\n    }\n  }\n\n  function scheduleBundleTracking(root, bar, mode, source) {\n    if (!root || !bar) return;\n\n    var trackingKey = root.getAttribute('data-bamboo-tracking-key') || root.getAttribute('data-section') || String(window.location.pathname);\n    window.clearTimeout(selectionTimers[trackingKey]);\n    selectionTimers[trackingKey] = window.setTimeout(function () {\n      trackBundleSelection(bar, mode, source);\n    }, 180);\n  }\n\n  function getKachingDealConfig(root) {\n    var block = root.querySelector('.kaching-bundles__block[data-deal-block-id]');\n    if (!block) return null;\n\n    var dealBlockId = block.getAttribute('data-deal-block-id');\n    if (!dealBlockId) return null;\n\n    if (kachingConfigCache[dealBlockId]) {\n      return kachingConfigCache[dealBlockId];\n    }\n\n    var config = null;\n    document.querySelectorAll('.kaching-bundles-deal-block-settings').forEach(function (script) {\n      if (config) return;\n      try {\n        var parsed = JSON.parse(script.textContent);\n        if (parsed && parsed.id === dealBlockId) {\n          config = parsed;\n        }\n      } catch (error) {}\n    });\n\n    if (config) {\n      kachingConfigCache[dealBlockId] = config;\n    }\n\n    return config;\n  }\n\n  function normalizeText(value) {\n    return String(value || '')\n      .toLowerCase()\n      .replace(/\\s+/g, ' ')\n      .trim();\n  }\n\n  function getSellingPlanMonthInterval(optionText) {\n    var cadenceText = normalizeText(optionText).split(',')[0];\n\n    if (!cadenceText) return null;\n    if (/\\b(week|weeks|weken|woche|wochen|semaine|semaines|semana|semanas)\\b/.test(cadenceText)) {\n      return null;\n    }\n    if (!/\\b(month|months|maand|maanden|monat|monate|mois|mes)\\b/.test(cadenceText)) {\n      return null;\n    }\n\n    var numberMatch = cadenceText.match(/\\b(\\d+)\\b/);\n    var interval = numberMatch ? Number(numberMatch[1]) : 1;\n\n    if (interval < 1 || interval > 3) return null;\n    return interval;\n  }\n\n  function dispatchSellingPlanChange(select) {\n    if (!select) return;\n    select.dispatchEvent(new Event('input', { bubbles: true }));\n    select.dispatchEvent(new Event('change', { bubbles: true }));\n  }\n\n  function getSelectedBundleRollCount(root) {\n    if (!root) return 48;\n    var config = getAccurateSubscriptionConfig();\n    if (config && config.prices[requestedBundleRollCount]) return requestedBundleRollCount;\n    var selectedBar = root.querySelector(\n      '.kaching-bundles__bars .kaching-bundles__bar[data-deal-bar-id].kaching-bundles__bar--selected'\n    );\n    var title = selectedBar && selectedBar.querySelector('.kaching-bundles__bar-title');\n    return extractRollCount((title && title.textContent) || (selectedBar && selectedBar.textContent)) || 48;\n  }\n\n\n\n  function syncRequestedBundleBar(root) {\n    var config = getAccurateSubscriptionConfig();\n    if (!root || !config || !config.prices[requestedBundleRollCount]) return;\n    var requestedBar = Array.from(root.querySelectorAll('.kaching-bundles__bars .kaching-bundles__bar[data-deal-bar-id]')).find(function (bar) {\n      var title = bar.querySelector('.kaching-bundles__bar-title');\n      return extractRollCount((title && title.textContent) || bar.textContent) === requestedBundleRollCount;\n    });\n    if (!requestedBar || requestedBar.classList.contains('kaching-bundles__bar--selected') || requestedBar.querySelector('input:checked')) return;\n    selectDealBar(requestedBar);\n  }\n\n  function getPlanInterval(planId, optionText) {\n    var accurateConfig = getAccurateSubscriptionConfig();\n    var matchedInterval = null;\n    if (!accurateConfig) return getSellingPlanMonthInterval(optionText) || 2;\n    Object.keys(accurateConfig.plans).some(function (rollCount) {\n      return Object.keys(accurateConfig.plans[rollCount]).some(function (interval) {\n        if (accurateConfig.plans[rollCount][interval] !== String(planId || '')) return false;\n        matchedInterval = Number(interval);\n        return true;\n      });\n    });\n    return matchedInterval || getSellingPlanMonthInterval(optionText) || 2;\n  }\n\n  function getSellingPlanLabel(interval, rollCount) {\n    var locale = getLocaleKey();\n    var cadence;\n    if (locale === 'en') cadence = interval === 1 ? 'Every month' : 'Every ' + interval + ' months';\n    else if (locale === 'de') cadence = interval === 1 ? 'Jeden Monat' : 'Alle ' + interval + ' Monate';\n    else if (locale === 'fr') cadence = interval === 1 ? 'Chaque mois' : 'Tous les ' + interval + ' mois';\n    else if (locale === 'es') cadence = interval === 1 ? 'Cada mes' : 'Cada ' + interval + ' meses';\n    else cadence = interval === 1 ? 'Iedere maand' : 'Iedere ' + interval + ' maanden';\n\n    if (rollCount === 48) {\n      if (locale === 'en') return cadence + ', 5% off';\n      if (locale === 'de') return cadence + ', 5% Rabatt';\n      if (locale === 'fr') return cadence + ', 5 % de r\u00E9duction';\n      if (locale === 'es') return cadence + ', 5 % de descuento';\n      return cadence + ', 5% korting';\n    }\n\n    if (locale === 'en') return cadence + ' \u00B7 fixed price';\n    if (locale === 'de') return cadence + ' \u00B7 Festpreis';\n    if (locale === 'fr') return cadence + ' \u00B7 prix fixe';\n    if (locale === 'es') return cadence + ' \u00B7 precio fijo';\n    return cadence + ' \u00B7 vaste prijs';\n  }\n\n  function ensureThreePlyPurchaseModes(root) {\n    if (!root || !getAccurateSubscriptionConfig()) return;\n    var copy = getLocaleCopy();\n    var purchaseModeStateHost = root.closest('product-info') || root;\n    var rememberedPurchaseMode = purchaseModeStateHost.dataset.bambooPurchaseMode;\n    var existingModes = root.querySelector('[data-bamboo-purchase-modes=\"true\"]');\n    if (existingModes) return;\n\n    var existingController = getSubscriptionController(root, copy);\n    // Always use the stable Bamboo mode switch for products with accurate\n    // subscription data. Kaching can briefly render a native one-time option\n    // and then replace it with a duplicate subscription option on localized\n    // routes, leaving customers without a visible one-time choice.\n    if (existingController) {\n      existingController.control.forEach(function (bar) {\n        bar.hidden = true;\n        bar.setAttribute('aria-hidden', 'true');\n      });\n    }\n\n    var modes = document.createElement('div');\n    modes.className = 'kaching-bundles__subscriptions bamboo-kaching-subscription-shell bamboo-three-ply-purchase-modes';\n    modes.setAttribute('data-bamboo-purchase-modes', 'true');\n\n    // A native <select> inside a button is invalid interactive nesting and can\n    // leave the macOS picker open, blocking the other purchase controls.\n    var subscription = document.createElement('div');\n    subscription.className = 'kaching-bundles__bar bamboo-three-ply-purchase-mode';\n    subscription.dataset.bambooMode = 'subscription';\n    subscription.innerHTML = '<button type=\"button\" class=\"kaching-bundles__subscriptions__title bamboo-subscription-toggle\" aria-pressed=\"false\"></button><label class=\"bamboo-delivery-frequency-label\"></label><select class=\"kaching-bundles__selling-plan-select\"></select>';\n    var frequencyLabels = { nl: 'Bezorgfrequentie', en: 'Delivery frequency', de: 'Lieferh\u00E4ufigkeit', fr: 'Fr\u00E9quence de livraison', es: 'Frecuencia de entrega' };\n    var frequencyLabel = subscription.querySelector('.bamboo-delivery-frequency-label');\n    var frequencySelect = subscription.querySelector('select');\n    frequencySelect.id = 'BambooDeliveryFrequency-' + purchaseModeStateHost.id;\n    frequencyLabel.htmlFor = frequencySelect.id;\n    frequencyLabel.textContent = frequencyLabels[getLocaleKey()] || frequencyLabels.nl;\n    frequencySelect.setAttribute('aria-label', frequencyLabel.textContent);\n\n    var oneTime = document.createElement('button');\n    oneTime.type = 'button';\n    oneTime.className = 'kaching-bundles__bar kaching-bundles__bar--selected bamboo-three-ply-purchase-mode';\n    oneTime.dataset.bambooMode = 'one-time';\n    oneTime.setAttribute('aria-pressed', 'true');\n    oneTime.textContent = copy.oneTime;\n\n    function selectMode(mode) {\n      setThreePlyPurchaseModeState(root, mode);\n    }\n\n    subscription.addEventListener('click', function (event) {\n      if (event.target.closest('select')) return;\n      selectMode('subscription');\n    });\n    oneTime.addEventListener('click', function () {\n      selectMode('one-time');\n    });\n\n    modes.appendChild(subscription);\n    modes.appendChild(oneTime);\n    var bars = root.querySelector('.kaching-bundles__bars');\n    var modeContainer = (bars && bars.parentNode) || root;\n    modeContainer.insertBefore(modes, bars || modeContainer.firstChild);\n    subscription.querySelector('.kaching-bundles__subscriptions__title').textContent = copy.subscriptionTitle;\n    selectMode(rememberedPurchaseMode === 'subscription' ? 'subscription' : 'one-time');\n  }\n\n  function hideNativeThreePlyPurchaseModes(root) {\n    if (!root || !getAccurateSubscriptionConfig()) return;\n\n    root.querySelectorAll('.kaching-bundles__subscriptions').forEach(function (wrap) {\n      if (wrap.matches('[data-bamboo-purchase-modes=\"true\"]')) return;\n      wrap.hidden = true;\n      wrap.setAttribute('aria-hidden', 'true');\n    });\n  }\n\n  function syncThreePlySellingPlan(root) {\n    var accurateConfig = getAccurateSubscriptionConfig();\n    if (!root || !accurateConfig) return;\n    var select = root.querySelector('.kaching-bundles__selling-plan-select');\n    if (!select) return;\n\n    var rollCount = getSelectedBundleRollCount(root);\n    // Keep Kaching's native plan IDs in the visible cadence selector. The exact\n    // fixed-price 96/192 plan is mapped only when the cart form is submitted;\n    // putting those IDs in Kaching's selector makes the app reset to monthly.\n    var planMap = accurateConfig.plans[48];\n    var selectedOption = select.options[select.selectedIndex] || null;\n    var rememberedInterval = Number(select.dataset.bambooRequestedInterval || 0);\n    var interval = rememberedInterval >= 1 && rememberedInterval <= 3\n      ? rememberedInterval\n      : getPlanInterval(select.value, selectedOption && selectedOption.textContent);\n    var nextPlanId = planMap[interval] || planMap[2] || planMap[1];\n    var syncKey = String(rollCount) + ':' + String(interval) + ':' + nextPlanId;\n    var shouldDispatch = false;\n\n    if (select.dataset.bambooPlanSyncKey !== syncKey || select.options.length !== 3) {\n      select.innerHTML = '';\n      [1, 2, 3].forEach(function (monthInterval) {\n        var option = document.createElement('option');\n        option.value = planMap[monthInterval];\n        option.textContent = getSellingPlanLabel(monthInterval, rollCount);\n        option.selected = monthInterval === interval;\n        select.appendChild(option);\n      });\n      select.dataset.bambooPlanSyncKey = syncKey;\n      shouldDispatch = true;\n    }\n\n    if (select.value !== nextPlanId) {\n      select.value = nextPlanId;\n      shouldDispatch = true;\n    }\n    select.dataset.bambooRequestedInterval = String(interval);\n    if (select.dataset.bambooPlanChangeBound !== 'true') {\n      select.dataset.bambooPlanChangeBound = 'true';\n      select.addEventListener('pointerdown', function () {\n        cadenceSelectionTouchedByUser = true;\n      }, true);\n      select.addEventListener('keydown', function () {\n        cadenceSelectionTouchedByUser = true;\n      }, true);\n      select.addEventListener('change', function (event) {\n        var changedOption = event.target.options[event.target.selectedIndex] || null;\n        event.target.dataset.bambooRequestedInterval = String(\n          getPlanInterval(event.target.value, changedOption && changedOption.textContent)\n        );\n        window.setTimeout(function () {\n          syncThreePlySellingPlan(root);\n        }, 0);\n      }, true);\n    }\n    setAttributeValue(select, 'data-bamboo-monthly-ready', 'true');\n    if (shouldDispatch) {\n      dispatchSellingPlanChange(select);\n      select.value = nextPlanId;\n      Array.from(select.options).forEach(function (option) {\n        option.selected = option.value === nextPlanId;\n      });\n    }\n  }\n\n  function applyThreePlyBundlePrices(root, bundleBars, subscriptionEnabled) {\n    var accurateConfig = getAccurateSubscriptionConfig();\n    if (!root || !accurateConfig) return;\n    var select = root.querySelector('.kaching-bundles__selling-plan-select');\n    var selectedOption = select && select.options[select.selectedIndex];\n    var selectedInterval = getPlanInterval(select && select.value, selectedOption && selectedOption.textContent);\n\n    bundleBars.forEach(function (bar) {\n      var title = bar.querySelector('.kaching-bundles__bar-title');\n      var rollCount = extractRollCount((title && title.textContent) || bar.textContent);\n      var prices = accurateConfig.prices[rollCount];\n      if (!prices) return;\n\n      var subscriptionPrice = accurateConfig.getSubscriptionPrice(rollCount, selectedInterval);\n      bar.dataset.bambooSubscriptionPrice = String(subscriptionPrice);\n\n      var priceNode = bar.querySelector('.kaching-bundles__bar-price');\n      var fullPriceNode = bar.querySelector('.kaching-bundles__bar-full-price');\n      var oneTimePrice = Number(bar.dataset.bambooOneTimePrice || 0);\n      var activeBarPrice = subscriptionEnabled ? subscriptionPrice : oneTimePrice;\n\n      if (priceNode && activeBarPrice > 0) setTextContent(priceNode, formatMoney(activeBarPrice));\n      if (fullPriceNode) {\n        var compareAtPrice = Number(bar.dataset.bambooComparePrice || 0);\n        var hasValidOneTimeCompareAtPrice = compareAtPrice > oneTimePrice;\n        if (hasValidOneTimeCompareAtPrice) setTextContent(fullPriceNode, formatMoney(compareAtPrice));\n        fullPriceNode.hidden = subscriptionEnabled || !hasValidOneTimeCompareAtPrice;\n      }\n      updateBundleBarPerRoll(bar, getLocaleCopy(), activeBarPrice);\n    });\n\n    var selectedRollCount = getSelectedBundleRollCount(root);\n    var selectedPrices = accurateConfig.prices[selectedRollCount] || accurateConfig.prices[48];\n    var selectedBar = bundleBars.find(function (bar) {\n      var title = bar.querySelector('.kaching-bundles__bar-title');\n      return extractRollCount((title && title.textContent) || bar.textContent) === selectedRollCount;\n    });\n    var oneTimePrice = Number(selectedBar && selectedBar.dataset.bambooOneTimePrice || 0);\n    var activePrice = subscriptionEnabled\n      ? accurateConfig.getSubscriptionPrice(selectedRollCount, selectedInterval)\n      : oneTimePrice;\n    var saving = subscriptionEnabled ? 0 : roundPrice(Number(selectedBar && selectedBar.dataset.bambooComparePrice || 0) - activePrice);\n    root.querySelectorAll('.kaching-bundles-savings-summary__title').forEach(function (node) {\n      var locale = getLocaleKey();\n      var savingText = formatMoney(saving);\n      if (locale === 'en') setTextContent(node, 'You save ' + savingText + ' on this order');\n      else if (locale === 'de') setTextContent(node, 'Du sparst ' + savingText + ' bei dieser Bestellung');\n      else if (locale === 'fr') setTextContent(node, 'Vous \u00E9conomisez ' + savingText + ' sur cette commande');\n      else if (locale === 'es') setTextContent(node, 'Ahorras ' + savingText + ' en este pedido');\n      else setTextContent(node, 'Je bespaart ' + savingText + ' op deze bestelling');\n    });\n  }\n\n  function updateBundleSavingsSummary(root, subscriptionEnabled) {\n    if (!root) return;\n\n    var productInfo = root.closest(\"product-info[id^='MainProduct-']\") || root.closest('product-info');\n\n    var selectedBar = root.querySelector(\n      '.kaching-bundles__bars .kaching-bundles__bar[data-deal-bar-id].kaching-bundles__bar--selected'\n    ) || root.querySelector('.kaching-bundles__bars .kaching-bundles__bar[data-deal-bar-id]');\n    if (!selectedBar) return;\n\n    var comparePrice = Number(selectedBar.dataset.bambooComparePrice || 0);\n    var activePrice = Number(\n      subscriptionEnabled\n        ? selectedBar.dataset.bambooSubscriptionPrice\n        : selectedBar.dataset.bambooOneTimePrice\n    );\n    var saving = roundPrice(comparePrice - activePrice);\n    var summary = (productInfo && productInfo.querySelector('[data-bamboo-order-savings]'))\n      || root.querySelector('[data-bamboo-order-savings]');\n\n    if (!summary) {\n      summary = document.createElement('p');\n      summary.className = 'bamboo-order-savings';\n      summary.setAttribute('data-bamboo-order-savings', 'true');\n      summary.setAttribute('aria-live', 'polite');\n    }\n\n    var submitButton = productInfo && productInfo.querySelector('.product-form__submit');\n    if (submitButton) {\n      submitButton.insertAdjacentElement('afterend', summary);\n    } else {\n      var bundleBars = root.querySelector('.kaching-bundles__bars');\n      if (!bundleBars) return;\n      bundleBars.insertAdjacentElement('afterend', summary);\n    }\n\n    summary.hidden = !(saving > 0);\n    if (!(saving > 0)) return;\n\n    var savingText = formatMoney(saving);\n    if (getLocaleKey() === 'en') setTextContent(summary, 'Your benefit on this order: ' + savingText);\n    else setTextContent(summary, 'U heeft ' + savingText + ' voordeel op deze bestelling');\n  }\n\n  function syncPurchaseSummary() {\n    document.querySelectorAll('[data-bamboo-purchase-summary]').forEach(function (summary) {\n      var host = summary.closest('product-info');\n      if (!host) return;\n      var pack = host.querySelector('[data-bamboo-24-option].is-selected');\n      var bar = host.querySelector('.kaching-bundles:not([hidden]) .kaching-bundles__bar--selected[data-deal-bar-id]');\n      var price = Number(summary.dataset.basePrice) / 100;\n      var rolls = 0;\n      var compare = 0;\n      var subscription = host.dataset.bambooPurchaseMode === 'subscription';\n      if (pack) {\n        price = Number(pack.dataset.summaryPrice) / 100;\n        rolls = Number(pack.dataset.summaryRolls);\n      } else if (bar) {\n        var priceLabel = bar.querySelector('.kaching-bundles__bar-price');\n        price = parseMoney(priceLabel && priceLabel.textContent);\n        rolls = extractRollCount(bar.querySelector('.kaching-bundles__bar-title')?.textContent);\n        // Compare with equivalent separate boxes, not a different bundle's RRP.\n        compare = Number(bar.dataset.bambooComparePrice || 0);\n      } else if (host.querySelector('kaching-bundle') && getAccurateSubscriptionConfig()) {\n        summary.hidden = true;\n        return;\n      } else {\n        var quantity = host.querySelector('input[name=\"quantity\"]');\n        price *= Math.max(1, Number(quantity && quantity.value) || 1);\n      }\n      if (!(price > 0)) return;\n      summary.hidden = false;\n      host.classList.add('bamboo-purchase-polished');\n      var context = subscription ? summary.dataset.subscription : summary.dataset.oneTime;\n      if (rolls) context = rolls + ' ' + summary.dataset.rolls + ' \u00B7 ' + context;\n      if (subscription) {\n        var cadence = host.querySelector('[data-bamboo-purchase-modes] select');\n        if (cadence && cadence.selectedOptions[0]) context += ' \u00B7 ' + cadence.selectedOptions[0].textContent;\n      }\n      setTextContent(summary.querySelector('[data-summary-context]'), context);\n      setTextContent(summary.querySelector('[data-summary-total]'), formatMoney(price));\n      setTextContent(summary.querySelector('[data-summary-unit]'), rolls ? formatMoney(price / rolls) + ' ' + summary.dataset.perRoll : '');\n      var saving = summary.querySelector('[data-summary-saving]');\n      saving.hidden = !(compare > price && !subscription);\n      setTextContent(saving, saving.hidden ? '' : summary.dataset.saving + ': ' + formatMoney(roundPrice(compare - price)));\n      host.querySelectorAll('.kaching-bundles__bar[data-deal-bar-id]').forEach(function (option) {\n        var count = extractRollCount(option.querySelector('.kaching-bundles__bar-title')?.textContent);\n        var badge = option.querySelector('.kaching-bundles__bar-most-popular__content');\n        if (badge && count > 48) setTextContent(badge, count === 96 ? summary.dataset.bundle : summary.dataset.lowest);\n      });\n    });\n  }\n\n  function syncMobileSubscriptionFromPrice() {\n    var node = document.querySelector('[data-bamboo-mobile-subscription-from-price]');\n    var config = getAccurateSubscriptionConfig();\n    if (!node || !config || !config.prices) return;\n\n    var lowestPerRoll = Object.keys(config.prices).reduce(function (lowest, rollCountKey) {\n      var rollCount = Number(rollCountKey);\n      var subscriptionPrice = Number(config.prices[rollCountKey] && config.prices[rollCountKey].subscription);\n      if (!(rollCount > 0) || !(subscriptionPrice > 0)) return lowest;\n      var perRoll = subscriptionPrice / rollCount;\n      return lowest === null || perRoll < lowest ? perRoll : lowest;\n    }, null);\n\n    if (!(lowestPerRoll > 0)) return;\n    var copy = getLocaleCopy();\n    setTextContent(node, copy.fromPrice + ' ' + formatMoney(roundPrice(lowestPerRoll)) + ' ' + copy.perRollSuffix);\n  }\n\n  function setThreePlyPurchaseModeState(root, mode) {\n    var accurateConfig = getAccurateSubscriptionConfig();\n    if (!root || !accurateConfig) return false;\n    if (mode !== 'subscription' && mode !== 'one-time') return false;\n\n    var copy = getLocaleCopy();\n    var bundleBars = Array.from(root.querySelectorAll('.kaching-bundles__bars .kaching-bundles__bar[data-deal-bar-id]'));\n    var controller = getSubscriptionController(root, copy);\n    if (!controller || controller.type !== 'modes' || !controller.control.length) return false;\n\n    var useSubscription = mode === 'subscription';\n    var subscriptionButton = null;\n    var oneTimeButton = null;\n\n    controller.control.forEach(function (bar) {\n      var detectedMode = getStandalonePurchaseMode(bar, copy);\n      if (detectedMode === 'subscription') subscriptionButton = bar;\n      if (detectedMode === 'one-time') oneTimeButton = bar;\n    });\n\n    if (!subscriptionButton || !oneTimeButton) return false;\n\n    var host = root.closest('product-info[id^=\"MainProduct-\"]') || root.closest('product-info');\n    if (host) host.dataset.bambooPurchaseMode = useSubscription ? 'subscription' : 'one-time';\n\n    if (useSubscription) {\n      subscriptionButton.classList.add('kaching-bundles__bar--selected');\n      oneTimeButton.classList.remove('kaching-bundles__bar--selected');\n      subscriptionButton.querySelector('.bamboo-subscription-toggle')?.setAttribute('aria-pressed', 'true');\n      oneTimeButton.setAttribute('aria-pressed', 'false');\n      var subscriptionSelect = subscriptionButton.querySelector('select');\n      if (subscriptionSelect) subscriptionSelect.disabled = false;\n      syncThreePlySellingPlan(root);\n    } else {\n      oneTimeButton.classList.add('kaching-bundles__bar--selected');\n      subscriptionButton.classList.remove('kaching-bundles__bar--selected');\n      oneTimeButton.setAttribute('aria-pressed', 'true');\n      subscriptionButton.querySelector('.bamboo-subscription-toggle')?.setAttribute('aria-pressed', 'false');\n      var oneTimeSelect = subscriptionButton.querySelector('select');\n      if (oneTimeSelect) oneTimeSelect.disabled = true;\n    }\n\n    applyThreePlyBundlePrices(root, bundleBars, useSubscription);\n\n    document.querySelectorAll('form[data-type=\"add-to-cart-form\"]').forEach(function (form) {\n      prepareThreePlySubscriptionForm(form);\n    });\n\n    return true;\n  }\n\n  function prepareThreePlySubscriptionForm(form) {\n    var accurateConfig = getAccurateSubscriptionConfig();\n    if (!form || !accurateConfig) return null;\n    var root = document.querySelector('.kaching-bundles:not([hidden])');\n    if (!root) return null;\n    var copy = getLocaleCopy();\n    var subscriptionEnabled = getSubscriptionEnabled(getSubscriptionController(root, copy), copy);\n    if (!subscriptionEnabled) {\n      var existingBundleProperty = form.querySelector('input[name=\"properties[__kaching_bundles]\"]');\n      if (existingBundleProperty) existingBundleProperty.disabled = false;\n      form.querySelectorAll('[data-bamboo-managed-subscription=\"true\"]').forEach(function (input) {\n        input.remove();\n      });\n      return null;\n    }\n\n    syncThreePlySellingPlan(root);\n    var rollCount = getSelectedBundleRollCount(root);\n    var selectedOption = root.querySelector('.kaching-bundles__selling-plan-select');\n    var selectedPlanOption = selectedOption && selectedOption.options[selectedOption.selectedIndex];\n    var interval = getPlanInterval(selectedOption && selectedOption.value, selectedPlanOption && selectedPlanOption.textContent);\n    var planMap = accurateConfig.plans[rollCount] || accurateConfig.plans[48];\n    var planId = planMap[interval] || planMap[2] || planMap[1];\n    var variantId = accurateConfig.variants[rollCount] || accurateConfig.variants[48];\n    var quantity = 1;\n\n    var planInput = form.querySelector('input[name=\"selling_plan\"]');\n    if (!planInput) {\n      planInput = document.createElement('input');\n      planInput.type = 'hidden';\n      planInput.name = 'selling_plan';\n      planInput.dataset.bambooManagedSubscription = 'true';\n      form.prepend(planInput);\n    }\n    planInput.value = planId;\n\n    var quantityInput = form.querySelector('input[name=\"quantity\"]');\n    if (!quantityInput) {\n      quantityInput = document.createElement('input');\n      quantityInput.type = 'hidden';\n      quantityInput.name = 'quantity';\n      quantityInput.dataset.bambooManagedSubscription = 'true';\n      form.prepend(quantityInput);\n    }\n    quantityInput.value = String(quantity);\n\n    var bundleProperty = form.querySelector('input[name=\"properties[__kaching_bundles]\"]');\n    if (bundleProperty) bundleProperty.disabled = true;\n    return { planId: planId, variantId: variantId, quantity: quantity };\n  }\n\n  function bindAccurateThreePlyCheckout() {\n    if (!getAccurateSubscriptionConfig()) return;\n    document.querySelectorAll('form[data-type=\"add-to-cart-form\"]').forEach(function (form) {\n      if (form.dataset.bambooAccurateCheckoutBound === 'true') return;\n      form.dataset.bambooAccurateCheckoutBound = 'true';\n      form.addEventListener('submit', function () {\n        prepareThreePlySubscriptionForm(form);\n      }, true);\n      form.addEventListener('formdata', function (event) {\n        var prepared = prepareThreePlySubscriptionForm(form);\n        if (!prepared) return;\n        event.formData.set('id', prepared.variantId);\n        event.formData.set('selling_plan', prepared.planId);\n        event.formData.set('quantity', String(prepared.quantity));\n        event.formData.delete('properties[__kaching_bundles]');\n      });\n\n      var submitButton = form.querySelector('[type=\"submit\"]');\n      if (submitButton && submitButton.dataset.bambooSubscriptionCheckoutBound !== 'true') {\n        submitButton.dataset.bambooSubscriptionCheckoutBound = 'true';\n        submitButton.addEventListener('click', function (event) {\n          var prepared = prepareThreePlySubscriptionForm(form);\n          if (!prepared) return;\n\n          event.preventDefault();\n          event.stopImmediatePropagation();\n          submitButton.disabled = true;\n          submitButton.setAttribute('aria-busy', 'true');\n\n          var formData = new FormData(form);\n          formData.set('id', prepared.variantId);\n          formData.set('selling_plan', prepared.planId);\n          formData.set('quantity', String(prepared.quantity));\n          formData.delete('properties[__kaching_bundles]');\n\n          fetch('/cart/add.js', {\n            method: 'POST',\n            headers: { Accept: 'application/json', 'X-Requested-With': 'XMLHttpRequest' },\n            body: formData,\n          })\n            .then(function (response) {\n              if (!response.ok) throw new Error('Subscription add failed: ' + response.status);\n              return response.json();\n            })\n            .then(function () {\n              window.location.assign('/checkout');\n            })\n            .catch(function () {\n              submitButton.disabled = false;\n              submitButton.removeAttribute('aria-busy');\n              window.alert('Afrekenen kon niet worden gestart. Probeer het opnieuw.');\n            });\n        }, true);\n      }\n    });\n  }\n\n  function enforceMonthlySellingPlanOptions(root, preferTwoMonths) {\n    if (!root) return;\n\n    root.querySelectorAll('.kaching-bundles__selling-plan-select').forEach(function (select) {\n      var options = Array.from(select.options || []);\n      if (!options.length) return;\n\n      var selectedOptionBefore = options.find(function (option) {\n        return option.selected;\n      }) || options[select.selectedIndex] || null;\n      var selectedValueBefore = selectedOptionBefore && selectedOptionBefore.value;\n      var selectedIntervalBefore = getSellingPlanMonthInterval(selectedOptionBefore && selectedOptionBefore.textContent);\n      var allowedOptions = options.filter(function (option) {\n        return getSellingPlanMonthInterval(option.textContent) !== null;\n      });\n\n      if (!allowedOptions.length) return;\n\n      var hasDisallowedOptions = allowedOptions.length !== options.length;\n      if (hasDisallowedOptions) {\n        options.forEach(function (option) {\n          if (allowedOptions.indexOf(option) === -1) {\n            option.remove();\n          }\n        });\n      }\n\n      var currentOptions = Array.from(select.options || []);\n      var nextOption = null;\n      var shouldApplyDefaultCadence = !cadenceSelectionTouchedByUser;\n\n      if (preferTwoMonths || shouldApplyDefaultCadence) {\n        nextOption = currentOptions.find(function (option) {\n          return getSellingPlanMonthInterval(option.textContent) === 2;\n        }) || null;\n      }\n\n      if (!nextOption && selectedIntervalBefore !== null && selectedValueBefore) {\n        nextOption = currentOptions.find(function (option) {\n          return option.value === selectedValueBefore;\n        }) || null;\n      }\n\n      if (!nextOption) {\n        nextOption = currentOptions.find(function (option) {\n          return getSellingPlanMonthInterval(option.textContent) === 2;\n        }) || currentOptions[0] || null;\n      }\n\n      if (!nextOption) return;\n\n      var shouldDispatch = false;\n      if (select.value !== nextOption.value) {\n        select.value = nextOption.value;\n        shouldDispatch = true;\n      }\n\n      currentOptions.forEach(function (option) {\n        option.selected = option.value === nextOption.value;\n      });\n\n      setAttributeValue(select, 'data-bamboo-monthly-ready', 'true');\n      setAttributeValue(select, 'data-bamboo-default-cadence-applied', 'true');\n\n      if (hasDisallowedOptions || shouldDispatch) {\n        dispatchSellingPlanChange(select);\n      }\n    });\n  }\n\n  function getSubscriptionController(root, copy) {\n    var customModesWrap = root.querySelector('[data-bamboo-purchase-modes=\"true\"]');\n    var customModeBars = Array.from(customModesWrap ? customModesWrap.children : []).filter(function (bar) {\n      return bar.classList.contains('kaching-bundles__bar');\n    });\n    if (customModesWrap && customModeBars.length) {\n      return {\n        type: 'modes',\n        wrap: customModesWrap,\n        titleNode: customModesWrap.querySelector('.kaching-bundles__subscriptions__title'),\n        control: customModeBars,\n      };\n    }\n\n    var checkboxWrap = root.querySelector('.kaching-bundles__subscriptions--checkbox');\n    var checkboxToggle = checkboxWrap && checkboxWrap.querySelector('.kaching-bundles__bar[role=\"checkbox\"]');\n    if (checkboxWrap && checkboxToggle) {\n      return {\n        type: 'checkbox',\n        wrap: checkboxWrap,\n        titleNode: checkboxWrap.querySelector('.kaching-bundles__subscriptions__title'),\n        control: checkboxToggle,\n      };\n    }\n\n    var modesWrap = root.querySelector('.kaching-bundles__subscriptions');\n    var modeBars = Array.from(modesWrap ? modesWrap.children : []).filter(function (bar) {\n      return bar.classList.contains('kaching-bundles__bar');\n    });\n\n    if (modesWrap && modeBars.length) {\n      return {\n        type: 'modes',\n        wrap: modesWrap,\n        titleNode: modesWrap.querySelector('.kaching-bundles__subscriptions__title'),\n        control: modeBars,\n      };\n    }\n\n    return null;\n  }\n\n  function getStandalonePurchaseMode(bar, copy) {\n    var text = normalizeText(bar && bar.textContent);\n    var subscriptionHints = [copy.subscriptionTitle, copy.subscription, 'subscribe', 'save', 'abonne', 'suscr', 'abo'];\n    var oneTimeHints = [copy.oneTime, 'one-time purchase', 'one-time', 'achat unique', 'compra unica', 'compra \u00FAnica', 'einmalig'];\n\n    if (\n      subscriptionHints.some(function (hint) {\n        return hint && text.indexOf(normalizeText(hint)) !== -1;\n      })\n    ) {\n      return 'subscription';\n    }\n\n    if (\n      oneTimeHints.some(function (hint) {\n        return hint && text.indexOf(normalizeText(hint)) !== -1;\n      })\n    ) {\n      return 'one-time';\n    }\n\n    return null;\n  }\n\n  function getSubscriptionEnabled(controller, copy) {\n    if (!controller) return false;\n\n    if (controller.type === 'checkbox') {\n      return controller.control.getAttribute('aria-checked') === 'true';\n    }\n\n    var selectedModeBar = controller.control.find(function (bar) {\n      return (\n        bar.classList.contains('kaching-bundles__bar--selected') ||\n        bar.getAttribute('aria-checked') === 'true' ||\n        bar.querySelector('input:checked')\n      );\n    });\n\n    var activeBar = selectedModeBar || controller.control[0];\n    return getStandalonePurchaseMode(activeBar, copy) === 'subscription';\n  }\n\n  function clickSelectableNode(target) {\n    if (!target) return;\n\n    var label = target.matches && target.matches('label') ? target : target.querySelector('label');\n    var button = target.matches && target.matches('button') ? target : target.querySelector('button');\n    var input = target.querySelector && target.querySelector('input');\n\n    if (label) return label.click();\n    if (button) return button.click();\n    if (input) return input.click();\n    if (typeof target.click === 'function') target.click();\n  }\n\n  function setSubscriptionState(controller, shouldEnable, copy) {\n    if (!controller) return;\n\n    if (controller.type === 'checkbox') {\n      var isEnabled = controller.control.getAttribute('aria-checked') === 'true';\n      if (isEnabled === shouldEnable) return;\n      controller.control.click();\n      return;\n    }\n\n    var targetMode = shouldEnable ? 'subscription' : 'one-time';\n    var root = controller.wrap && controller.wrap.closest && controller.wrap.closest('.kaching-bundles');\n\n    if (controller.type === 'modes' && root) {\n      if (setThreePlyPurchaseModeState(root, targetMode)) return;\n    }\n\n    var targetBar = controller.control.find(function (bar) {\n      return getStandalonePurchaseMode(bar, copy) === targetMode;\n    });\n    if (!targetBar) {\n      targetBar = controller.control[shouldEnable ? controller.control.length - 1 : 0];\n    }\n\n    clickSelectableNode(targetBar);\n  }\n\n  function selectDealBar(bar) {\n    if (!bar) return;\n    var label = bar.querySelector('label.kaching-bundles__bar-container');\n    var input = bar.querySelector('input[type=\"radio\"]');\n\n    /* Kaching renders an interactive .bar-main inside the label. In the live\n       widget a label click can therefore be consumed without activating the\n       radio input. Trigger the radio first so Kaching's native change handler\n       updates the selected deal, quantity and discount payload. */\n    if (input && !input.checked) {\n      input.click();\n      return;\n    }\n\n    if (label) {\n      label.click();\n    }\n  }\n\n  function selectDefaultDealBar(root) {\n    if (!root) return;\n\n    var bundleBars = Array.from(root.querySelectorAll('.kaching-bundles__bars .kaching-bundles__bar[data-deal-bar-id]'));\n    var defaultBundleBar = bundleBars.find(function (bar) {\n      var titleNode = bar.querySelector('.kaching-bundles__bar-title');\n      return extractRollCount((titleNode && titleNode.textContent) || bar.textContent) === getDefaultBundleRollCount();\n    }) || bundleBars[0];\n\n    if (!defaultBundleBar) return;\n    if (defaultBundleBar.classList.contains('kaching-bundles__bar--selected')) return;\n    if (defaultBundleBar.querySelector('input:checked')) return;\n\n    selectDealBar(defaultBundleBar);\n  }\n\n  function updateBarPriceCache(bar, subscriptionEnabled) {\n    if (!bar) return;\n\n    var priceNode = bar.querySelector('.kaching-bundles__bar-price');\n    var fullPriceNode = bar.querySelector('.kaching-bundles__bar-full-price');\n    var visiblePrice = parseMoney(priceNode && priceNode.textContent);\n    var visibleFullPrice = parseMoney(fullPriceNode && fullPriceNode.textContent);\n\n    if (visibleFullPrice) {\n      bar.dataset.bambooComparePrice = String(visibleFullPrice);\n    }\n\n    if (visiblePrice === null) return;\n\n    if (subscriptionEnabled) {\n      if (!bar.dataset.bambooSubscriptionPrice) {\n        bar.dataset.bambooSubscriptionPrice = String(visiblePrice);\n      }\n      return;\n    }\n\n    bar.dataset.bambooOneTimePrice = String(visiblePrice);\n  }\n\n  function ensureBarMeta(bar, root) {\n    var contentLeft = bar.querySelector('.kaching-bundles__bar-content-left');\n    var pricingRoot = bar.querySelector('.kaching-bundles__bar-pricing');\n    var fallbackHost = pricingRoot || contentLeft || bar.querySelector('.kaching-bundles__bar-content') || bar;\n    if (!fallbackHost) return null;\n\n    var meta = bar.querySelector('.bamboo-kaching-bar-meta');\n    if (!meta) {\n      meta = document.createElement('div');\n      meta.className = 'bamboo-kaching-bar-meta';\n      meta.innerHTML = '<p class=\"bamboo-kaching-bar-per-roll\"></p>';\n      fallbackHost.appendChild(meta);\n    }\n\n    if (pricingRoot && meta.parentElement !== pricingRoot) {\n      pricingRoot.appendChild(meta);\n    }\n\n    meta.classList.toggle('bamboo-kaching-bar-meta--pricing', !!pricingRoot);\n\n    return meta;\n  }\n\n  function updateBundleBarPerRoll(bar, copy, preferredPrice) {\n    if (!bar) return;\n\n    var meta = ensureBarMeta(bar);\n    if (!meta) return;\n\n    var pricePerRollNode = meta.querySelector('.bamboo-kaching-bar-per-roll');\n    if (!pricePerRollNode) return;\n\n    var rollCount = extractRollCount((bar.querySelector('.kaching-bundles__bar-title') || {}).textContent || bar.textContent);\n    if (!rollCount) return;\n\n    var referencePrice = preferredPrice;\n    if (!referencePrice) {\n      referencePrice = parseMoney((bar.querySelector('.kaching-bundles__bar-price') || {}).textContent);\n    }\n    if (!referencePrice) return;\n\n    setPricePerRollContent(pricePerRollNode, copy.perRollLabel, formatMoney(roundPrice(referencePrice / rollCount)));\n  }\n\n  function setPricePerRollContent(node, label, value) {\n    if (!node) return;\n\n    var labelNode = node.querySelector('.bamboo-kaching-bar-per-roll__label');\n    var valueNode = node.querySelector('.bamboo-kaching-bar-per-roll__value');\n\n    if (!labelNode || !valueNode) {\n      node.textContent = '';\n      labelNode = document.createElement('span');\n      valueNode = document.createElement('span');\n      labelNode.className = 'bamboo-kaching-bar-per-roll__label';\n      valueNode.className = 'bamboo-kaching-bar-per-roll__value';\n      node.append(labelNode, valueNode);\n    }\n\n    setTextContent(labelNode, label + ':');\n    setTextContent(valueNode, value);\n    setAttributeValue(node, 'aria-label', label + ': ' + value);\n  }\n\n  function applyPreferredBundleCopy(bar, preferredCopy) {\n    if (!bar || !preferredCopy) return;\n\n    var titleNode = bar.querySelector('.kaching-bundles__bar-title');\n    if (titleNode && preferredCopy.title) {\n      setTextContent(titleNode, preferredCopy.title);\n    }\n\n    var subtitleNode = bar.querySelector('.kaching-bundles__bar-subtitle, .kaching-bundles__bar-label');\n    if (subtitleNode && preferredCopy.subtitle) {\n      setTextContent(subtitleNode, preferredCopy.subtitle);\n    }\n\n    var badgeNode = bar.querySelector('.kaching-bundles__bar-most-popular__content');\n    if (badgeNode && preferredCopy.badge) {\n      setTextContent(badgeNode, preferredCopy.badge);\n    }\n  }\n\n  function ensureStandardBundleBadge(bar, rollCount) {\n    if (rollCount !== 48 || bar.querySelector('.kaching-bundles__bar-most-popular')) return;\n\n    var container = bar.querySelector('.kaching-bundles__bar-container');\n    var wrapper = container && container.querySelector('.kaching-bundles__bar-wrapper');\n    if (!wrapper) return;\n\n    var labels = { nl: 'Standaard', en: 'Standard', de: 'Standard', fr: 'Standard', es: 'Est\u00E1ndar' };\n    var badge = document.createElement('div');\n    var content = document.createElement('div');\n    badge.className = 'kaching-bundles__bar-most-popular kaching-bundles__bar-most-popular--simple';\n    content.className = 'kaching-bundles__bar-most-popular__content';\n    content.textContent = labels[getLocaleKey()] || labels.nl;\n    badge.appendChild(content);\n    container.insertBefore(badge, wrapper);\n  }\n\n  function clearBundleSoldOutState(bar) {\n    if (!bar) return;\n\n    bar.querySelectorAll(\"[class*='sold-out-badge'], [data-sold-out-badge]\").forEach(function (badge) {\n      badge.remove();\n    });\n\n    Array.from(bar.classList).forEach(function (className) {\n      if (className.indexOf('sold-out') !== -1) bar.classList.remove(className);\n    });\n    bar.removeAttribute('aria-disabled');\n    bar.removeAttribute('data-sold-out');\n\n    bar.querySelectorAll('input[type=\"radio\"], button, [role=\"radio\"]').forEach(function (control) {\n      control.disabled = false;\n      control.removeAttribute('disabled');\n      control.removeAttribute('aria-disabled');\n      if (control.getAttribute('tabindex') === '-1') control.removeAttribute('tabindex');\n    });\n\n    var label = bar.querySelector('.kaching-bundles__bar-container');\n    if (label) {\n      label.classList.remove('kaching-bundles__bar-container--sold-out');\n      label.removeAttribute('aria-disabled');\n      label.removeAttribute('disabled');\n    }\n\n    // Kaching can render its availability as an unclassed leaf node.\n    bar.querySelectorAll('*').forEach(function (node) {\n      if (node.children.length > 0) return;\n      var copy = normalizeText(node.textContent);\n      if (copy === 'uitverkocht' || copy === 'sold out') node.remove();\n    });\n  }\n\n  function is2PlyPurchasable() {\n    if (getProductHandle() !== '2laags') return false;\n    var productRoot = document.querySelector(\"product-info[id^='MainProduct-']\");\n    if (productRoot && productRoot.getAttribute('data-bamboo-purchasable') === 'true') return true;\n    var variantInput = productRoot && productRoot.querySelector('.product-variant-id');\n    return !!variantInput && !variantInput.disabled;\n  }\n\n  function sync2PlyBundleState(bundleRoot, bundleBars) {\n    if (!bundleRoot || !bundleBars || !bundleBars.length || !is2PlyPurchasable()) return;\n\n    var productRoot = bundleRoot.closest(\"product-info[id^='MainProduct-']\");\n    bundleRoot.classList.add('bamboo-kaching-live-product');\n    if (productRoot) productRoot.classList.add('bamboo-kaching-live-product');\n    bundleBars.forEach(function (bar) {\n      clearBundleSoldOutState(bar);\n    });\n  }\n\n  function getStickyCtaCopy(submitButton) {\n    var localeKey = getLocaleKey();\n    var fallback = {\n      nl: 'Bekijk opties',\n      en: 'View options',\n      de: 'Optionen ansehen',\n      fr: 'Voir les options',\n      es: 'Ver opciones',\n    };\n    var label = String(submitButton && submitButton.textContent || '').replace(/\\s+/g, ' ').trim();\n    return label || fallback[localeKey] || fallback.nl;\n  }\n\n  function getProductPriceText(root) {\n    var selectedBundlePrice = root && root.querySelector(\n      '.kaching-bundles__bar--selected .kaching-bundles__bar-price'\n    );\n    if (selectedBundlePrice) {\n      return String(selectedBundlePrice.textContent || '').replace(/\\s+/g, ' ').trim();\n    }\n    if (root && root.querySelector('[data-bamboo-native-compact]')) {\n      var summary = root.querySelector('[data-bamboo-purchase-summary]');\n      var quantity = root.querySelector('input[name=\"quantity\"]');\n      var nativePrice = Number(summary && summary.dataset.basePrice) / 100;\n      if (nativePrice > 0) return formatMoney(nativePrice * Math.max(1, Number(quantity && quantity.value) || 1));\n    }\n    var priceNode = root && root.querySelector('.price__sale .price-item--sale, .price__regular .price-item--regular, .price-item--regular, .price-item--sale');\n    return String(priceNode && priceNode.textContent || '').replace(/\\s+/g, ' ').trim();\n  }\n\n  function getStickyBundleCopy(root, submitButton) {\n    var compactAction = root && root.querySelector('[data-bamboo-cart-action]');\n    if (compactAction) return compactAction.dataset.bambooCartAction;\n    var selectedBar = root && root.querySelector('.kaching-bundles__bar--selected[data-deal-bar-id]');\n    var rollCount = selectedBar && extractRollCount(selectedBar.textContent);\n    var localeKey = getLocaleKey();\n    if (!rollCount) return getStickyCtaCopy(submitButton);\n    if (localeKey === 'en') return 'Order ' + rollCount + ' rolls';\n    if (localeKey === 'de') return rollCount + ' Rollen bestellen';\n    if (localeKey === 'fr') return 'Commander ' + rollCount + ' rouleaux';\n    if (localeKey === 'es') return 'Pedir ' + rollCount + ' rollos';\n    return 'Bestel ' + rollCount + ' rollen';\n  }\n\n  function syncButtonTaxCopy(button, root) {\n    var source = root && root.querySelector('.bamboo-compact-purchase-tax');\n    var copy = source && String(source.textContent || '').trim();\n    if (!copy || !button) return '';\n    var tax = button.querySelector('[data-bamboo-button-tax]');\n    if (!tax) {\n      tax = document.createElement('small');\n      tax.className = 'bamboo-button-tax';\n      tax.setAttribute('data-bamboo-button-tax', 'true');\n      button.appendChild(tax);\n    }\n    setTextContent(tax, copy);\n    button.classList.add('bamboo-button-with-tax');\n    return copy;\n  }\n\n  function syncPurchaseSubmitCopy() {\n    document.querySelectorAll(\"product-info[id^='MainProduct-']\").forEach(function (root) {\n      // The 24-SuperRollen selector owns its quantity and CTA copy. A hidden\n      // Kaching mount can still exist briefly and must not overwrite that\n      // selector with a stale 48/96/192 bundle label.\n      if (root.querySelector('[data-bamboo-24-purchase-selector]')) return;\n      var bundleRoot = root.querySelector('.kaching-bundles__bars .kaching-bundles__bar[data-deal-bar-id]');\n      var submitButton = root.querySelector('.product-form__submit');\n      var label = submitButton && submitButton.querySelector(':scope > span');\n      var nativeCompact = root.querySelector('[data-bamboo-native-compact]');\n      if ((!bundleRoot && !nativeCompact) || !submitButton || !label || submitButton.disabled) return;\n\n      var action = getStickyBundleCopy(root, submitButton);\n      var price = getProductPriceText(root);\n      var actionPriceSeparator = root.querySelector('[data-bamboo-cart-action]') ? '\\u00a0\\u00a0' : ' \u00B7 ';\n      var copy = price ? action + actionPriceSeparator + price : action;\n      setTextContent(label, copy);\n      var taxCopy = syncButtonTaxCopy(submitButton, root);\n      if (nativeCompact) root.classList.add('bamboo-native-compact-ready');\n      setAttributeValue(submitButton, 'aria-label', taxCopy ? copy + ' ' + taxCopy : copy);\n    });\n  }\n\n  function privacyBannerIsVisible() {\n    var banner = document.querySelector('#shopify-pc__banner.shopify-pc__banner__dialog');\n    if (!banner) {\n      if (document.body) document.body.classList.remove('bamboo-privacy-banner-visible');\n      if (document.documentElement) document.documentElement.style.removeProperty('--bamboo-privacy-banner-height');\n      return false;\n    }\n    var rect = banner.getBoundingClientRect();\n    var bannerStyle = window.getComputedStyle(banner);\n    var visible = rect.width > 0\n      && rect.height > 0\n      && bannerStyle.display !== 'none'\n      && bannerStyle.visibility !== 'hidden'\n      && bannerStyle.opacity !== '0'\n      && !banner.classList.contains('bamboo-privacy-banner--dismissed-by-scroll');\n    if (document.body) document.body.classList.toggle('bamboo-privacy-banner-visible', visible);\n    if (document.documentElement) {\n      if (visible) document.documentElement.style.setProperty('--bamboo-privacy-banner-height', Math.ceil(rect.height) + 'px');\n      else document.documentElement.style.removeProperty('--bamboo-privacy-banner-height');\n    }\n    return visible;\n  }\n\n  function dismissPrivacyBannerOnScroll() {\n    var currentScrollPosition = window.scrollY || 0;\n    if (currentScrollPosition === privacyBannerScrollPosition) return;\n    privacyBannerScrollPosition = currentScrollPosition;\n    if (privacyBannerDismissedByScroll) return;\n\n    var banner = document.querySelector('#shopify-pc__banner.shopify-pc__banner__dialog');\n    if (!banner) return;\n\n    privacyBannerDismissedByScroll = true;\n    banner.classList.add('bamboo-privacy-banner--dismissed-by-scroll');\n    banner.setAttribute('aria-hidden', 'true');\n    privacyBannerIsVisible();\n    syncMobileStickyCta();\n  }\n\n  function normalizePrivacyBannerCopy() {\n    var banner = document.querySelector('#shopify-pc__banner.shopify-pc__banner__dialog');\n    if (!banner) return;\n\n    var localeKey = getLocaleKey();\n    var copyMap = localeKey === 'en'\n      ? {\n          'Wij waarderen jouw privacy': 'We value your privacy',\n          Accepteren: 'Accept',\n          Afwijzen: 'Decline',\n          'Voorkeuren beheren': 'Manage preferences',\n        }\n      : localeKey === 'nl'\n        ? {\n            'Cookie consent': 'Wij waarderen jouw privacy',\n            Accept: 'Accepteren',\n            Decline: 'Afwijzen',\n            'Manage preferences': 'Voorkeuren beheren',\n          }\n        : null;\n\n    if (!copyMap) return;\n    banner.querySelectorAll('h1, h2, p, button, a').forEach(function (node) {\n      var rawText = String(node.textContent || '').replace(/\\s+/g, ' ').trim();\n      if (copyMap[rawText]) setTextContent(node, copyMap[rawText]);\n    });\n  }\n\n  function syncMobileStickyCta() {\n    var existing = document.querySelector('[data-bamboo-sticky-cta]');\n    if (!mobileQuery.matches || !document.body || !/\\btemplate-product/.test(document.body.className || '')) {\n      if (existing) existing.remove();\n      return;\n    }\n\n    var root = document.querySelector(\"product-info[id^='MainProduct-']\");\n    var submitButton = root && root.querySelector('.product-form__submit');\n    var privacyVisible = privacyBannerIsVisible();\n    if (!root || !submitButton || submitButton.disabled) {\n      if (existing) existing.hidden = true;\n      return;\n    }\n\n    var submitRect = submitButton.getBoundingClientRect();\n    var compactPurchase = !!root.querySelector('[data-bamboo-cart-action]');\n    var shouldShow = (window.scrollY || 0) > 140\n      && (submitRect.top > window.innerHeight - 140 || submitRect.bottom < 72 || privacyVisible);\n    if (compactPurchase) {\n      var viewport = window.visualViewport;\n      var visibleTop = viewport ? viewport.offsetTop : 0;\n      var visibleBottom = visibleTop + (viewport ? viewport.height : window.innerHeight);\n      var header = document.querySelector('.section-header');\n      var headerRect = header && header.getBoundingClientRect();\n      if (headerRect && headerRect.top <= visibleTop && headerRect.bottom > visibleTop) {\n        visibleTop = headerRect.bottom;\n      }\n      var submitIsVisible = submitRect.width > 0 && submitRect.height > 0\n        && submitRect.top < visibleBottom && submitRect.bottom > visibleTop;\n      var overlay = document.querySelector('cart-drawer.active, menu-drawer details[open], details-modal details[open], product-modal[open]');\n      shouldShow = (window.scrollY || 0) > 140 && !submitIsVisible && !privacyVisible && !overlay;\n    }\n    var sticky = existing;\n\n    if (!sticky) {\n      sticky = document.createElement('button');\n      sticky.type = 'button';\n      sticky.className = 'bamboo-mobile-sticky-cta';\n      sticky.setAttribute('data-bamboo-sticky-cta', 'true');\n      sticky.innerHTML = '<span class=\"bamboo-mobile-sticky-cta__text\"></span><span class=\"bamboo-mobile-sticky-cta__price\"></span>';\n      sticky.addEventListener('click', function () {\n        var currentRoot = document.querySelector(\"product-info[id^='MainProduct-']\");\n        var currentSubmit = currentRoot && currentRoot.querySelector('.product-form__submit');\n        if (!currentSubmit || currentSubmit.disabled) return;\n        currentSubmit.click();\n      });\n      document.body.appendChild(sticky);\n    }\n\n    sticky.classList.toggle('bamboo-mobile-sticky-cta--compact', compactPurchase);\n    setTextContent(sticky.querySelector('.bamboo-mobile-sticky-cta__text'), getStickyBundleCopy(root, submitButton));\n    setTextContent(sticky.querySelector('.bamboo-mobile-sticky-cta__price'), getProductPriceText(root));\n    syncButtonTaxCopy(sticky, root);\n    sticky.hidden = !shouldShow;\n  }\n\n  function enhanceKachingSubscriptions() {\n    var copy = getLocaleCopy();\n    var productHandle = getProductHandle();\n    if (\n      document.querySelector('[data-bamboo-24-purchase-selector]') ||\n      getCanonicalProductHandle(productHandle) === '3-laags-premium-bamboe-toiletpapier-24-superrollen'\n    ) return;\n\n    document.querySelectorAll('.kaching-bundles').forEach(function (root) {\n      ensureThreePlyPurchaseModes(root);\n      hideNativeThreePlyPurchaseModes(root);\n      var shouldApplyDefaults = !defaultPurchaseSelectionApplied;\n      enforceMonthlySellingPlanOptions(root, shouldApplyDefaults);\n\n      var config = getKachingDealConfig(root);\n      var subscriptionController = getSubscriptionController(root, copy);\n      var subscriptionWrap = subscriptionController && subscriptionController.wrap;\n      var subscriptionTitle = subscriptionController && subscriptionController.titleNode;\n      var bundleBars = Array.from(root.querySelectorAll('.kaching-bundles__bars .kaching-bundles__bar[data-deal-bar-id]'));\n      var subscriptionEnabled = getSubscriptionEnabled(subscriptionController, copy);\n\n      sync2PlyBundleState(root, bundleBars);\n\n      if (!bundleBars.length) return;\n\n      if (subscriptionController && !purchaseModeSelectionTouchedByUser) {\n        setSubscriptionState(subscriptionController, false, copy);\n        subscriptionEnabled = getSubscriptionEnabled(subscriptionController, copy);\n      }\n\n      if (getAccurateSubscriptionConfig()) {\n        syncRequestedBundleBar(root);\n\n        syncThreePlySellingPlan(root);\n        subscriptionEnabled = getSubscriptionEnabled(subscriptionController, copy);\n        document.querySelectorAll('form[data-type=\"add-to-cart-form\"]').forEach(function (form) {\n          prepareThreePlySubscriptionForm(form);\n        });\n      }\n\n      if (subscriptionTitle) {\n        setTextContent(subscriptionTitle, copy.subscriptionTitle);\n      }\n\n      if (subscriptionWrap) {\n        subscriptionWrap.classList.add('bamboo-kaching-subscription-shell');\n        subscriptionWrap.removeAttribute('aria-hidden');\n      }\n\n      if (subscriptionController && subscriptionController.type === 'modes') {\n        subscriptionController.control.forEach(function (bar) {\n          var mode = getStandalonePurchaseMode(bar, copy);\n          if (!mode) return;\n          bar.dataset.bambooMode = mode;\n          bar.hidden = false;\n          bar.removeAttribute('aria-hidden');\n          if (bar.getAttribute('tabindex') === '-1') bar.removeAttribute('tabindex');\n        });\n      }\n\n      if (shouldApplyDefaults && subscriptionController) {\n        defaultPurchaseSelectionApplied = true;\n        selectDefaultDealBar(root);\n\n        subscriptionEnabled = getSubscriptionEnabled(subscriptionController, copy);\n        document.querySelectorAll('form[data-type=\"add-to-cart-form\"]').forEach(function (form) {\n          prepareThreePlySubscriptionForm(form);\n        });\n\n        /* The default is an initialization action only. Re-selecting it after\n           Kaching has rendered can overwrite a customer's rapid 48/96/192\n           choice, so later widget updates reconcile the recorded selection\n           instead of scheduling another default click. */\n      }\n\n      bundleBars.forEach(function (bar) {\n        updateBarPriceCache(bar, subscriptionEnabled);\n\n        var meta = ensureBarMeta(bar, root);\n        if (!meta) return;\n\n        var pricePerRollNode = meta.querySelector('.bamboo-kaching-bar-per-roll');\n        var barConfig = config && config.dealBars && config.dealBars.find(function (item) {\n          return item.id === bar.getAttribute('data-deal-bar-id');\n        });\n        var rollCount = (barConfig && extractRollCount(barConfig.title)) || extractRollCount(bar.textContent);\n        var preferredCopy = getPreferredBundleCopy(productHandle, rollCount);\n        var oneTimePrice = Number(bar.dataset.bambooOneTimePrice || 0);\n        var subscriptionPrice = Number(bar.dataset.bambooSubscriptionPrice || 0);\n        var referencePrice = subscriptionEnabled ? subscriptionPrice : oneTimePrice;\n        var isFeaturedBar = rollCount === 96 || /best\\s*seller/i.test(bar.textContent);\n\n        applyPreferredBundleCopy(bar, preferredCopy);\n        ensureStandardBundleBadge(bar, rollCount);\n        normalizeTextNodeCopy(bar.querySelector('.kaching-bundles__bar-title'), getExactTextMap());\n        normalizeTextNodeCopy(bar.querySelector('.kaching-bundles__bar-subtitle, .kaching-bundles__bar-label'), getExactTextMap());\n        normalizeTextNodeCopy(bar.querySelector('.kaching-bundles__bar-most-popular__content'), getExactTextMap());\n        bar.classList.toggle(\n          'bamboo-kaching-bar--featured',\n          !!isFeaturedBar && bar.classList.contains('kaching-bundles__bar--selected')\n        );\n\n        if (pricePerRollNode && rollCount && referencePrice) {\n          setPricePerRollContent(\n            pricePerRollNode,\n            copy.perRollLabel,\n            formatMoney(roundPrice(referencePrice / rollCount))\n          );\n        }\n\n        updateBundleBarPerRoll(bar, copy, referencePrice);\n\n        if (!bar.dataset.bambooTrackingBound) {\n          bar.addEventListener('click', function (event) {\n            window.setTimeout(function () {\n              var currentMode = getSubscriptionEnabled(getSubscriptionController(root, copy), copy) ? 'subscription' : 'one-time';\n              scheduleBundleTracking(root, bar, currentMode, 'bundle_bar');\n            }, 30);\n          });\n          bar.dataset.bambooTrackingBound = 'true';\n        }\n      });\n\n      applyThreePlyBundlePrices(root, bundleBars, subscriptionEnabled);\n      updateBundleSavingsSummary(root, subscriptionEnabled);\n\n      if (!root.dataset.bambooSavingsSummaryBound) {\n        root.dataset.bambooSavingsSummaryBound = 'true';\n        root.addEventListener('click', function () {\n          window.setTimeout(function () {\n            updateBundleSavingsSummary(\n              root,\n              getSubscriptionEnabled(getSubscriptionController(root, copy), copy)\n            );\n          }, 50);\n        });\n      }\n    });\n  }\n\n  function normalizeKachingSubscriptionSettings() {\n    var settingsChanged = false;\n    var localeKey = getLocaleKey();\n    var copy = getLocaleCopy();\n\n    document.querySelectorAll('.kaching-bundles-deal-block-settings').forEach(function (script) {\n      try {\n        var config = JSON.parse(script.textContent);\n        if (!config || !config.subscriptionsEnabled || !config.subscriptions) return;\n\n        var defaultDealBar = Array.isArray(config.dealBars)\n          ? config.dealBars.find(function (dealBar) {\n              return Number(dealBar && dealBar.quantity) === 2;\n            })\n          : null;\n        if (defaultDealBar && defaultDealBar.id) {\n          config.preselectedDealBarId = defaultDealBar.id;\n        }\n\n        if (config.subscriptions.layout !== 'checkbox') return;\n\n        config.subscriptions.layout = 'vertical';\n        config.subscriptions.subscribeByDefault = false;\n        config.subscriptions.subscribeTitle = copy.subscriptionTitle;\n        config.subscriptions.oneTimeTitle = localeKey === 'en' ? 'One-time purchase' : 'Eenmalige aankoop';\n        script.textContent = JSON.stringify(config);\n        settingsChanged = true;\n      } catch (error) {}\n    });\n\n    if (settingsChanged) {\n      kachingConfigCache = {};\n    }\n  }\n\n  function cleanKaching() {\n    var copyMap = getExactTextMap();\n    var copy = getLocaleCopy();\n    var customerUnitLabel = window.bambooProductUnitLabel || 'item';\n\n    if (customerUnitLabel !== 'item') {\n      document.querySelectorAll('.kaching-bundles__bar-unit-price').forEach(function (el) {\n        var current = el.textContent || '';\n        var next = current.replace(/\\/\\s*item\\b/i, '/ ' + customerUnitLabel);\n        if (next !== current) el.textContent = next;\n      });\n    }\n\n    document.querySelectorAll('.kaching-bundles-savings-summary__title').forEach(function (node) {\n      normalizeTextNodeCopy(node, copyMap);\n    });\n\n    document.querySelectorAll('.kaching-bundles [data-a11y-label], .kaching-bundles [aria-label]').forEach(function (el) {\n      ['data-a11y-label', 'aria-label'].forEach(function (attr) {\n        var value = el.getAttribute(attr);\n        if (!value) return;\n        var next = value.replace(systemPattern, '').replace(/\\s+/g, ' ').trim();\n        systemPattern.lastIndex = 0;\n        if (copyMap && copyMap[next]) next = copyMap[next];\n        if (next) el.setAttribute(attr, next);\n        else el.removeAttribute(attr);\n      });\n    });\n\n    // Kaching can recreate its subscription checkbox after hydration without\n    // an accessible name. Keep the visible title and the control in sync.\n    document\n      .querySelectorAll(\n        \".kaching-bundles__subscriptions [role='checkbox']:not([aria-label]), .kaching-bundles__subscriptions input[type='checkbox']:not([aria-label])\"\n      )\n      .forEach(function (control) {\n        setAttributeValue(control, 'aria-label', copy.subscriptionTitle);\n      });\n\n    document.querySelectorAll('.kaching-bundles button, .kaching-bundles div, .kaching-bundles span, .kaching-bundles label, .kaching-bundles strong, .kaching-bundles small, .kaching-bundles option, .bamboo-mobile-purchase-summary *').forEach(function (node) {\n      if (node.children && node.children.length > 0) return;\n      normalizeTextNodeCopy(node, copyMap);\n    });\n  }\n\n  function backfillBundlePerRoll() {\n    var copy = getLocaleCopy();\n\n    document.querySelectorAll('.kaching-bundles__bars .kaching-bundles__bar[data-deal-bar-id]').forEach(function (bar) {\n      updateBundleBarPerRoll(bar, copy);\n    });\n  }\n\n  function normalize2PlyLivePage() {\n    if (!is2PlyPurchasable()) return;\n\n    document.querySelectorAll('.product__preorder-note').forEach(function (node) {\n      node.remove();\n    });\n\n    document.querySelectorAll(\"product-info[id^='MainProduct-']\").forEach(function (root) {\n      root.classList.remove('bamboo-preorder-native-flow');\n    });\n    if (document.body) document.body.classList.remove('bamboo-preorder-native-flow-active');\n  }\n\n  function hideDuplicateSubscriptionBars() {\n    var copy = getLocaleCopy();\n\n    document.querySelectorAll('.kaching-bundles').forEach(function (root) {\n      var seenSubscriptionBar = false;\n      Array.from(root.querySelectorAll('.kaching-bundles__bar'))\n        .filter(function (bar) {\n          return !bar.hasAttribute('data-deal-bar-id') && getStandalonePurchaseMode(bar, copy) === 'subscription';\n        })\n        .forEach(function (bar) {\n          if (!seenSubscriptionBar) {\n            seenSubscriptionBar = true;\n            return;\n          }\n\n          bar.hidden = true;\n          bar.setAttribute('aria-hidden', 'true');\n        });\n    });\n  }\n\n  function scrollToPurchaseFlow() {\n    var root = document.querySelector(\"product-info[id^='MainProduct-']\");\n    if (!root) return;\n\n    var target = root.classList.contains('bamboo-preorder-native-flow')\n      ? root.querySelector('.product-form__submit')\n      : (root.querySelector('.kaching-bundles:not([hidden])') || root.querySelector('.product-form__submit'));\n    if (!target) return;\n\n    target.scrollIntoView({ behavior: window.matchMedia('(prefers-reduced-motion: reduce)').matches ? 'auto' : 'smooth', block: 'center' });\n    window.setTimeout(function () {\n      var focusTarget = root.querySelector('.kaching-bundles__bar-main, .kaching-bundles__bar, .product-form__submit');\n      if (focusTarget && typeof focusTarget.focus === 'function') focusTarget.focus({ preventScroll: true });\n    }, 450);\n  }\n\n  function bindMobilePurchaseJump() {\n    document.querySelectorAll('[data-bamboo-mobile-purchase-jump]').forEach(function (button) {\n      if (button.dataset.bambooPurchaseJumpBound === 'true') return;\n      button.dataset.bambooPurchaseJumpBound = 'true';\n      button.addEventListener('click', function () {\n        var root = button.closest(\"product-info[id^='MainProduct-']\");\n        var submitButton = root && root.querySelector('.product-form__submit');\n        var selectedBundle = root && root.querySelector('.kaching-bundles__bar--selected[data-deal-bar-id]');\n        if (submitButton && !submitButton.disabled && root.classList.contains('bamboo-has-kaching-purchase-flow') && selectedBundle) {\n          submitButton.click();\n          return;\n        }\n        scrollToPurchaseFlow();\n      });\n    });\n    document.querySelectorAll('[data-bamboo-mobile-options-jump]').forEach(function (button) {\n      if (button.dataset.bambooPurchaseJumpBound === 'true') return;\n      button.dataset.bambooPurchaseJumpBound = 'true';\n      button.addEventListener('click', scrollToPurchaseFlow);\n    });\n  }\n\n  function syncMobileQuickBuyCopy() {\n    document.querySelectorAll('[data-bamboo-mobile-purchase-jump]').forEach(function (button) {\n      var root = button.closest(\"product-info[id^='MainProduct-']\");\n      var submitButton = root && root.querySelector('.product-form__submit');\n      var selectedBundle = root && root.querySelector('.kaching-bundles__bar--selected[data-deal-bar-id]');\n      if (!submitButton || submitButton.disabled || !root.classList.contains('bamboo-has-kaching-purchase-flow') || !selectedBundle) {\n        setTextContent(button, button.dataset.bambooFallbackCopy || 'Kies verpakking');\n        return;\n      }\n      setTextContent(button, getStickyCtaCopy(submitButton));\n    });\n  }\n\n  function compactCookie() {\n    var banner = document.querySelector('#shopify-pc__banner.shopify-pc__banner__dialog');\n    if (!banner) return;\n\n    banner.style.setProperty('background', '#ffffff', 'important');\n    banner.style.setProperty('border', '1px solid rgba(31, 77, 36, 0.14)', 'important');\n    banner.style.setProperty('box-shadow', '0 18px 46px rgba(18, 38, 24, 0.14)', 'important');\n    banner.style.setProperty('border-radius', mobileQuery.matches ? '18px' : '20px', 'important');\n\n    if (mobileQuery.matches) {\n      banner.style.setProperty('top', 'auto', 'important');\n      banner.style.setProperty('left', '8px', 'important');\n      banner.style.setProperty('right', '8px', 'important');\n      banner.style.setProperty('bottom', '8px', 'important');\n      banner.style.setProperty('width', 'auto', 'important');\n      banner.style.setProperty('max-width', 'calc(100vw - 16px)', 'important');\n      banner.style.setProperty('max-height', 'min(36vh, 310px)', 'important');\n      banner.style.setProperty('overflow', 'auto', 'important');\n      banner.style.setProperty('padding', '10px 12px', 'important');\n    }\n  }\n\n  function hideIntrusiveKlaviyo() {\n    if (document.body) document.body.classList.remove('klaviyo-prevent-body-scrolling');\n\n    document.querySelectorAll('[role=\"dialog\"][aria-label=\"POPUP Form\"]').forEach(function (dialog) {\n      dialog.style.setProperty('display', 'none', 'important');\n      dialog.style.setProperty('visibility', 'hidden', 'important');\n      dialog.style.setProperty('pointer-events', 'none', 'important');\n      dialog.setAttribute('aria-hidden', 'true');\n    });\n  }\n\n  function run() {\n    injectSellingPlanGuardStyles();\n    replaceStaleEnglish2PlyImages();\n    normalizeKachingSubscriptionSettings();\n    cleanKaching();\n    enhanceKachingSubscriptions();\n    syncMobileSubscriptionFromPrice();\n    hideDuplicateSubscriptionBars();\n    if (!bundleSelectionTouchedByUser) {\n      selectDefaultDealBar(document.querySelector('.kaching-bundles:not([hidden])'));\n    }\n    backfillBundlePerRoll();\n    normalize2PlyLivePage();\n    syncNativePurchaseFlowState();\n    syncPurchaseSubmitCopy();\n    syncMobileQuickBuyCopy();\n    syncPurchaseSummary();\n    normalizeProductTaxLocale();\n    bindAccurateThreePlyCheckout();\n    bindMobilePurchaseJump();\n    normalizePrivacyBannerCopy();\n    syncMobileStickyCta();\n    compactCookie();\n    hideIntrusiveKlaviyo();\n  }\n\n  function getProductObserverTarget() {\n    return document.querySelector('kaching-bundle[product-id]')\n      || document.querySelector(\"product-info[id^='MainProduct-']\")\n      || document.body;\n  }\n\n  function observeConversionUi() {\n    if (!mutationObserver) return;\n    var target = getProductObserverTarget();\n    if (target) mutationObserver.observe(target, { childList: true, subtree: true });\n  }\n\n  function isKachingHydrated() {\n    var root = document.querySelector('.kaching-bundles:not([hidden])');\n    if (!root) return false;\n    return hasUsableKachingDealSelection(\n      root.querySelectorAll('.kaching-bundles__bars .kaching-bundles__bar[data-deal-bar-id]')\n    );\n  }\n\n  function hasUsableKachingDealSelection(dealBars) {\n    return Array.from(dealBars || []).some(function (bar) {\n      var input = bar.querySelector('input[type=\"radio\"]');\n      return input && !input.disabled && input.checked;\n    });\n  }\n\n  function finishBootstrapIfReady() {\n    if (!isKachingHydrated()) return;\n    bootstrapTimers.forEach(window.clearTimeout);\n    bootstrapTimers = [];\n    var root = document.querySelector('.kaching-bundles:not([hidden])');\n    if (root) root.setAttribute('data-bamboo-enhanced', 'v2');\n  }\n\n  function runWithObserverPaused() {\n    if (mutationObserver) mutationObserver.disconnect();\n    try {\n      run();\n      finishBootstrapIfReady();\n    } finally {\n      observeConversionUi();\n    }\n  }\n\n  function mutationTouchesConversionUi(mutations) {\n    var relevantSelector = '.kaching-bundles, kaching-bundle[product-id]';\n\n    return mutations.some(function (mutation) {\n      var target = mutation.target && mutation.target.nodeType === 1 ? mutation.target : mutation.target.parentElement;\n      if (target && target.closest && target.closest(relevantSelector)) return true;\n\n      return Array.from(mutation.addedNodes || []).some(function (node) {\n        if (node.nodeType !== 1) return false;\n        return node.matches(relevantSelector) || node.querySelector(relevantSelector);\n      });\n    });\n  }\n\n  function queueProductRun(delay) {\n    if (mutationRunTimer) return;\n    mutationRunTimer = window.setTimeout(function () {\n      mutationRunTimer = null;\n      runWithObserverPaused();\n    }, typeof delay === 'number' ? delay : 100);\n  }\n\n  function scheduleMutationRun(mutations) {\n    if (!mutationTouchesConversionUi(mutations)) return;\n    queueProductRun(100);\n  }\n\n  function scheduleSelectionReconciliation() {\n    queueProductRun(60);\n    if (eventReconcileTimer) window.clearTimeout(eventReconcileTimer);\n    eventReconcileTimer = window.setTimeout(function () {\n      eventReconcileTimer = null;\n      runWithObserverPaused();\n    }, 650);\n  }\n\n  document.addEventListener('click', function (event) {\n    if (!event.target || !event.target.closest) return;\n    var orderButton = event.target.closest('.product-form__submit');\n    var pendingProduct = orderButton && orderButton.closest('product-info');\n    if (pendingProduct && pendingProduct.querySelector('.bamboo-kaching-loading') && !pendingProduct.classList.contains('bamboo-has-kaching-purchase-flow')) {\n      event.preventDefault();\n      event.stopImmediatePropagation();\n      return;\n    }\n    if (event.target.closest('[data-bamboo-retry-bundles]')) {\n      window.location.reload();\n      return;\n    }\n    var dealBar = event.target.closest('.kaching-bundles__bars .kaching-bundles__bar[data-deal-bar-id]');\n    var purchaseMode = event.target.closest('.kaching-bundles__subscriptions .kaching-bundles__bar');\n    /* Treat every actual deal-bar click as the active customer choice. Kaching\n       and some browsers dispatch the label click without a trusted flag; using\n       isTrusted here caused the periodic synchronizer to restore 96 rolls after\n       customers selected 48 or 192. */\n    if (dealBar) {\n      bundleSelectionTouchedByUser = true;\n      var dealTitle = dealBar.querySelector('.kaching-bundles__bar-title');\n      requestedBundleRollCount = extractRollCount((dealTitle && dealTitle.textContent) || dealBar.textContent);\n    }\n    if (event.isTrusted && purchaseMode) {\n      purchaseModeSelectionTouchedByUser = true;\n      var purchaseModeRoot = purchaseMode.closest('.kaching-bundles');\n      var purchaseModeValue = purchaseMode.getAttribute && purchaseMode.getAttribute('data-bamboo-mode');\n      if (purchaseModeRoot && (purchaseModeValue === 'subscription' || purchaseModeValue === 'one-time')) {\n        setThreePlyPurchaseModeState(purchaseModeRoot, purchaseModeValue);\n      }\n    }\n    if (dealBar || purchaseMode || event.target.closest('[data-bamboo-24-option], quantity-input')) {\n      scheduleSelectionReconciliation();\n    }\n  }, true);\n  document.addEventListener('change', function (event) {\n    if (!event.target || !event.target.closest) return;\n    if (!event.target.closest('product-info')) return;\n    scheduleSelectionReconciliation();\n  }, true);\n  document.addEventListener('submit', function (event) {\n    var product = event.target.closest('product-info');\n    if (product && product.querySelector('.bamboo-kaching-loading') && !product.classList.contains('bamboo-has-kaching-purchase-flow')) {\n      event.preventDefault();\n      event.stopImmediatePropagation();\n    }\n  }, true);\n  window.addEventListener('scroll', dismissPrivacyBannerOnScroll, { passive: true });\n  var stickyFramePending = false;\n  function scheduleStickyCta() {\n    if (stickyFramePending) return;\n    stickyFramePending = true;\n    window.requestAnimationFrame(function () {\n      stickyFramePending = false;\n      syncMobileStickyCta();\n    });\n  }\n  window.addEventListener('scroll', scheduleStickyCta, { passive: true });\n  window.addEventListener('resize', scheduleStickyCta);\n  if (window.visualViewport) {\n    window.visualViewport.addEventListener('resize', scheduleStickyCta);\n    window.visualViewport.addEventListener('scroll', scheduleStickyCta);\n  }\n\n  function bootstrapProductUi() {\n    mutationObserver = new MutationObserver(scheduleMutationRun);\n    runWithObserverPaused();\n    window.setTimeout(function () {\n      var loading = document.querySelector('.bamboo-kaching-loading');\n      if (!loading || isKachingHydrated()) return;\n      var error = loading.querySelector('.bamboo-kaching-loading__error');\n      if (error && error.dataset.rendered !== 'true') {\n        var locale = loading.getAttribute('data-bamboo-bundle-locale') || 'nl';\n        var errorCopy = {\n          nl: { message: 'De verpakkingsopties konden niet worden geladen. Laad de pagina opnieuw om je verpakking te kiezen.', retry: 'Opnieuw laden' },\n          en: { message: 'The pack options could not be loaded. Reload the page to choose your pack.', retry: 'Reload page' },\n          de: { message: 'Die Packungsoptionen konnten nicht geladen werden. Lade die Seite erneut, um deine Packung auszuw\u00E4hlen.', retry: 'Erneut laden' },\n          fr: { message: 'Les options de conditionnement n\u2019ont pas pu \u00EAtre charg\u00E9es. Rechargez la page pour choisir votre lot.', retry: 'Recharger la page' },\n          es: { message: 'No se pudieron cargar las opciones de paquete. Vuelve a cargar la p\u00E1gina para elegir tu paquete.', retry: 'Volver a cargar la p\u00E1gina' },\n        };\n        var copy = errorCopy[locale] || errorCopy.nl;\n        var message = copy.message;\n        var retryLabel = copy.retry;\n        if (message) {\n          var paragraph = document.createElement('p');\n          paragraph.textContent = message;\n          error.appendChild(paragraph);\n        }\n        if (retryLabel) {\n          var retryButton = document.createElement('button');\n          retryButton.type = 'button';\n          retryButton.className = 'button button--secondary';\n          retryButton.setAttribute('data-bamboo-retry-bundles', '');\n          retryButton.textContent = retryLabel;\n          error.appendChild(retryButton);\n        }\n        error.dataset.rendered = 'true';\n      }\n      if (error) error.hidden = false;\n      loading.classList.add('bamboo-kaching-loading--failed');\n    }, 15000);\n    if (isKachingHydrated()) return;\n    [900, 3000].forEach(function (delay) {\n      bootstrapTimers.push(window.setTimeout(runWithObserverPaused, delay));\n    });\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', bootstrapProductUi, { once: true });\n  } else {\n    bootstrapProductUi();\n  }\n})();\n"],
  "mappings": "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",
  "names": ["oneTimePrice", "_a"]
}
