{
  "version": 3,
  "sources": ["/cdn/shop/t/9/assets/theme-r45.js?cb=20260615-pagespeed-r1"],
  "sourcesContent": ["(function () {\n  var DEFAULT_CLARITY_PROJECT_ID = 'uvskaqorur';\n  var eventDedupCache = {};\n  var eventDedupTtlMs = 15 * 60 * 1000;\n  var SUPPRESS_BROWSER_POPUPS = true;\n  var HIDE_COOKIE_BANNER_IN_PREVIEW = true;\n\n  function installUserPromptGuards() {\n    if (!SUPPRESS_BROWSER_POPUPS || typeof window === 'undefined') return;\n\n    try {\n      window.alert = function () {};\n    } catch (_errAlert) {\n      // noop\n    }\n\n    try {\n      window.confirm = function () {\n        return false;\n      };\n    } catch (_errConfirm) {\n      // noop\n    }\n\n    try {\n      window.prompt = function () {\n        return null;\n      };\n    } catch (_errPrompt) {\n      // noop\n    }\n\n    try {\n      if ('Notification' in window && window.Notification && typeof window.Notification.requestPermission === 'function') {\n        window.Notification.requestPermission = function (callback) {\n          if (typeof callback === 'function') {\n            try {\n              callback('denied');\n            } catch (_errCb) {\n              // noop\n            }\n          }\n          return Promise.resolve('denied');\n        };\n      }\n    } catch (_errNotification) {\n      // noop\n    }\n\n    try {\n      document.documentElement.classList.add('nb-suppress-popups');\n    } catch (_errHtmlClass) {\n      // noop\n    }\n\n    if (document.body) {\n      try {\n        document.body.classList.add('nb-suppress-popups');\n      } catch (_errBodyClass) {\n        // noop\n      }\n      return;\n    }\n\n    document.addEventListener('DOMContentLoaded', function () {\n      if (!document.body) return;\n      try {\n        document.body.classList.add('nb-suppress-popups');\n      } catch (_errBodyReadyClass) {\n        // noop\n      }\n    }, { once: true });\n  }\n\n  installUserPromptGuards();\n\n  function getLocaleRoot() {\n    var pathParts = (window.location.pathname || '').split('/').filter(Boolean);\n    if (pathParts.length) {\n      return String(pathParts[0]).toLowerCase().split('-')[0];\n    }\n    return String(document.documentElement.getAttribute('lang') || '').toLowerCase().split('-')[0];\n  }\n\n  function isEnglishStorefront() {\n    if (getLocaleRoot() === 'en') return true;\n    try {\n      return !!(window.Shopify && String(window.Shopify.locale || '').toLowerCase() === 'en');\n    } catch (_errEnglishLocale) {\n      return false;\n    }\n  }\n\n  function normalizeGermanPolicyCopy(scope) {\n    if (!scope || !window.NodeFilter || !document.createTreeWalker) return;\n\n    var replacements = [\n      {\n        pattern: /Vor 23:00 Uhr bestellt,\\s*morgen geliefert/gi,\n        value: 'Vor 17 Uhr bestellt: Versand noch heute.'\n      },\n      {\n        pattern: /\\b1-2 Werktage\\b/gi,\n        value: 'Versand am selben Tag'\n      },\n      {\n        pattern: /\\bSchnelle Lieferung(?:\\s+aus\\s+den\\s+Niederlanden)?\\b/gi,\n        value: 'Versand am selben Tag'\n      },\n      {\n        pattern: /\\b\u00DCber 20 Physiopraxen angeschlossen\\b/gi,\n        value: 'Wird in \u00FCber 20 Physiopraxen genutzt'\n      },\n      {\n        pattern: /\\b20\\+\\s*Physiopraxen angeschlossen\\b/gi,\n        value: 'Wird in \u00FCber 20 Physiopraxen genutzt'\n      }\n    ];\n\n    var walker = document.createTreeWalker(scope, NodeFilter.SHOW_TEXT);\n    var node;\n    while ((node = walker.nextNode())) {\n      if (!node || !node.parentElement) continue;\n      var parentTag = (node.parentElement.tagName || '').toUpperCase();\n      if (\n        parentTag === 'SCRIPT' ||\n        parentTag === 'STYLE' ||\n        parentTag === 'NOSCRIPT' ||\n        parentTag === 'TEMPLATE' ||\n        parentTag === 'TEXTAREA'\n      ) {\n        continue;\n      }\n      var original = node.nodeValue || '';\n      if (!original) continue;\n      var normalized = original;\n      for (var i = 0; i < replacements.length; i += 1) {\n        normalized = normalized.replace(replacements[i].pattern, replacements[i].value);\n      }\n      if (normalized !== original) {\n        node.nodeValue = normalized;\n      }\n    }\n  }\n\n  function installGermanCopyGuards() {\n    if (typeof window === 'undefined' || typeof document === 'undefined') return;\n    if (getLocaleRoot() !== 'de') return;\n\n    var selectorFixes = [\n      {\n        selector: '.nb-header__microproof-pill span',\n        expected: 'Vor 17 Uhr bestellt: Versand noch heute.',\n        bad: ['Vor 23:00 Uhr bestellt, morgen geliefert', 'Voor 23:00 besteld, morgen in huis']\n      },\n      {\n        selector: '.nb-feature-split__stats .nb-stat:nth-child(3) strong',\n        expected: 'Versand am selben Tag',\n        bad: ['1-2 Werktage', 'Schnelle Lieferung', 'Fast delivery']\n      },\n      {\n        selector: '.nb-feature-split__proof span:nth-child(3)',\n        expected: 'Wird in \u00FCber 20 Physiopraxen genutzt',\n        bad: ['\u00DCber 20 Physiopraxen angeschlossen', '20+ Physiopraxen angeschlossen']\n      },\n      {\n        selector: '[data-nb-proof-practice], .nb-proof-strip .nb-proof-chip:last-child',\n        expected: 'Im Einsatz in \u00FCber 20 Physiopraxen',\n        bad: ['\u00DCber 20 Physiopraxen angeschlossen', '20+ Physiopraxen angeschlossen']\n      },\n      {\n        selector: '[data-nb-product-trust-shipping], .nb-trust-list li:nth-child(3) span:last-child',\n        expected: 'Versand am selben Tag',\n        bad: ['Schnelle Lieferung', 'Fast delivery', 'Snelle levering', 'Snelle levering vanuit Nederland']\n      }\n    ];\n\n    var scheduled = false;\n    var syncGermanCopy = function () {\n      var root = document;\n      for (var i = 0; i < selectorFixes.length; i += 1) {\n        var fix = selectorFixes[i];\n        var nodes = root.querySelectorAll(fix.selector);\n        for (var j = 0; j < nodes.length; j += 1) {\n          var current = (nodes[j].textContent || '').trim();\n          if (fix.bad.indexOf(current) > -1) {\n            nodes[j].textContent = fix.expected;\n          }\n        }\n      }\n      normalizeGermanPolicyCopy(document.body || document.documentElement);\n    };\n\n    var scheduleSync = function () {\n      if (scheduled) return;\n      scheduled = true;\n      window.requestAnimationFrame(function () {\n        scheduled = false;\n        syncGermanCopy();\n      });\n    };\n\n    var start = function () {\n      syncGermanCopy();\n      if (!document.body || !window.MutationObserver) return;\n      var observer = new MutationObserver(function () {\n        scheduleSync();\n      });\n      observer.observe(document.body, {\n        childList: true,\n        subtree: true,\n        characterData: true\n      });\n      window.addEventListener('pagehide', function () {\n        observer.disconnect();\n      }, { once: true });\n      window.setTimeout(syncGermanCopy, 300);\n      window.setTimeout(syncGermanCopy, 1200);\n      window.setTimeout(syncGermanCopy, 2500);\n    };\n\n    if (document.readyState === 'loading') {\n      document.addEventListener('DOMContentLoaded', start, { once: true });\n    } else {\n      start();\n    }\n\n    window.addEventListener('load', function () {\n      syncGermanCopy();\n    }, { once: true });\n  }\n\n  installGermanCopyGuards();\n\n  function rewriteFrenchLocalizedLinks(scope) {\n    if (!scope || !scope.querySelectorAll) return;\n\n    var links = scope.querySelectorAll('a[href*=\"nordbelt.nl\"]');\n    for (var i = 0; i < links.length; i += 1) {\n      var href = links[i].getAttribute('href') || '';\n      if (!href) continue;\n\n      try {\n        var parsed = new URL(href, window.location.origin);\n        if (!/nordbelt\\.nl$/i.test(parsed.hostname)) continue;\n\n        var nextPath = parsed.pathname || '/';\n        if (!/^\\/fr(?:-fr)?(\\/|$)/i.test(nextPath)) {\n          nextPath = '/fr-fr' + (nextPath === '/' ? '' : nextPath);\n        }\n\n        parsed.protocol = window.location.protocol;\n        parsed.hostname = window.location.hostname;\n        parsed.port = window.location.port;\n        parsed.pathname = nextPath;\n        links[i].setAttribute('href', parsed.toString());\n      } catch (_errFrenchLink) {\n        // noop\n      }\n    }\n  }\n\n  function normalizeFrenchPolicyCopy(scope) {\n    if (!scope || !window.NodeFilter || !document.createTreeWalker) return;\n\n    var exactReplacements = {\n      '1-2 jours ouvrables': 'Exp\u00E9dition le jour m\u00EAme',\n      'Livraison rapide': 'Exp\u00E9dition le jour m\u00EAme',\n      'Livraison rapide.': 'Exp\u00E9dition le jour m\u00EAme.',\n      'Imm\u00E9diatement disponible': 'Disponible',\n      'Livr\u00E9 imm\u00E9diatement, paiement s\u00E9curis\u00E9 sans d\u00E9tour': 'Ajout direct \u00E0 la commande, paiement s\u00E9curis\u00E9 sans d\u00E9tour',\n      'Livr\u00E9 directement avec votre commande': 'Ajout\u00E9 directement \u00E0 votre commande',\n      'Request a quote': 'Demander un devis',\n      'For Medical Staff': 'Professionnels de la sant\u00E9',\n      'Nordbelt for healthcare professionals': \"Nordbelt aide les kin\u00E9sith\u00E9rapeutes, pr\u00E9parateurs physiques et \u00E9quipes m\u00E9dicales \u00E0 mettre en place un travail progressif des ischio-jambiers dans un cadre reproductible.\",\n      'Welcome to Nordbelt, the premier solution for enhancing your athletes\u2019 hamstring strength with the innovative Nordic Hamstring Curl. Whether you\u2019re a coach seeking to equip an entire football team or a physiotherapist aiming to provide superior care to your clients, we are here to meet your needs.': \"Vous souhaitez \u00E9quiper un cabinet, une \u00E9quipe ou une organisation avec Nordbelt ? Envoyez-nous votre demande et nous vous r\u00E9pondrons avec une proposition claire, adapt\u00E9e \u00E0 votre contexte.\",\n      'Safety report following ISO-20957 guidelines': 'Rapport de s\u00E9curit\u00E9 (ISO 20957)',\n      'At Nordbelt we highly think of quality. Our Nordbelt can support up to 1780 Newton meters of pulling force wich is 6 times more then needed for a person of 122,8kg. Check here more about safety!': \"Chez Nordbelt, la s\u00E9curit\u00E9 du produit est un point central. Nordbelt supporte jusqu'\u00E0 1 780 newtons de force de traction, soit une marge largement suffisante pour l'usage pr\u00E9vu dans le cadre des exercices de type Nordic Hamstring Curl.\",\n      'Sliders to perform eccentric hamstring bridges at home.': \"Les Sliders Nordbelt permettent de r\u00E9aliser des ponts ischio-jambiers excentriques et d'autres variations de contr\u00F4le \u00E0 la maison.\",\n      'Cordon': 'Ischio-jambiers',\n      'Nouvelles': 'Actualit\u00E9s'\n    };\n\n    var walker = document.createTreeWalker(scope, NodeFilter.SHOW_TEXT);\n    var node;\n    while ((node = walker.nextNode())) {\n      if (!node || !node.parentElement) continue;\n      var parentTag = (node.parentElement.tagName || '').toUpperCase();\n      if (\n        parentTag === 'SCRIPT' ||\n        parentTag === 'STYLE' ||\n        parentTag === 'NOSCRIPT' ||\n        parentTag === 'TEMPLATE' ||\n        parentTag === 'TEXTAREA'\n      ) {\n        continue;\n      }\n\n      var original = node.nodeValue || '';\n      var trimmed = original.trim();\n      if (!trimmed || !exactReplacements[trimmed]) continue;\n\n      node.nodeValue = original.replace(trimmed, exactReplacements[trimmed]);\n    }\n  }\n\n  var frenchOverrideAssetState = {\n    loading: false,\n    loaded: false,\n    failed: false,\n    callbacks: []\n  };\n\n  var germanOverrideAssetState = {\n    loading: false,\n    loaded: false,\n    failed: false,\n    callbacks: []\n  };\n\n  var englishOverrideAssetState = {\n    loading: false,\n    loaded: false,\n    failed: false,\n    callbacks: []\n  };\n\n  var swedishOverrideAssetState = {\n    loading: false,\n    loaded: false,\n    failed: false,\n    callbacks: []\n  };\n\n  var estonianOverrideAssetState = {\n    loading: false,\n    loaded: false,\n    failed: false,\n    callbacks: []\n  };\n\n  var finnishOverrideAssetState = {\n    loading: false,\n    loaded: false,\n    failed: false,\n    callbacks: []\n  };\n\n  var norwegianOverrideAssetState = {\n    loading: false,\n    loaded: false,\n    failed: false,\n    callbacks: []\n  };\n\n  var danishOverrideAssetState = {\n    loading: false,\n    loaded: false,\n    failed: false,\n    callbacks: []\n  };\n\n  var spanishOverrideAssetState = {\n    loading: false,\n    loaded: false,\n    failed: false,\n    callbacks: []\n  };\n\n  var italianOverrideAssetState = {\n    loading: false,\n    loaded: false,\n    failed: false,\n    callbacks: []\n  };\n\n  function resolveThemeSiblingAssetUrl(fileName) {\n    if (!fileName) return '';\n\n    var scripts = document.querySelectorAll('script[src]');\n    var source = '';\n    for (var i = 0; i < scripts.length; i += 1) {\n      var src = scripts[i].getAttribute('src') || '';\n      if (/\\/assets\\/theme-r45\\.js(?:\\?|$)/i.test(src)) {\n        source = src;\n        break;\n      }\n    }\n\n    if (!source && document.currentScript && document.currentScript.src) {\n      source = document.currentScript.src;\n    }\n    if (!source) return '';\n\n    try {\n      var parsed = new URL(source, window.location.href);\n      parsed.pathname = parsed.pathname.replace(/\\/assets\\/[^/?#]+$/i, '/assets/' + fileName);\n      if (!parsed.search) {\n        parsed.search = '?nbv=20260506-blog-overrides-r3';\n      }\n      parsed.hash = '';\n      return parsed.toString();\n    } catch (_errThemeAssetUrl) {\n      return '';\n    }\n  }\n\n  function flushFrenchOverrideCallbacks() {\n    if (!frenchOverrideAssetState.callbacks.length) return;\n    var callbacks = frenchOverrideAssetState.callbacks.slice();\n    frenchOverrideAssetState.callbacks = [];\n    for (var i = 0; i < callbacks.length; i += 1) {\n      try {\n        callbacks[i]();\n      } catch (_errFrenchOverrideCallback) {\n        // noop\n      }\n    }\n  }\n\n  function ensureFrenchOverrideAsset(onReady) {\n    if (typeof onReady === 'function') {\n      frenchOverrideAssetState.callbacks.push(onReady);\n    }\n\n    if (window.NordbeltFrenchArticleOverrides) {\n      frenchOverrideAssetState.loaded = true;\n      flushFrenchOverrideCallbacks();\n      return;\n    }\n\n    if (frenchOverrideAssetState.loaded || frenchOverrideAssetState.failed) {\n      flushFrenchOverrideCallbacks();\n      return;\n    }\n\n    if (frenchOverrideAssetState.loading) return;\n\n    var assetUrl = resolveThemeSiblingAssetUrl('fr-article-overrides.js');\n    if (!assetUrl) {\n      frenchOverrideAssetState.failed = true;\n      flushFrenchOverrideCallbacks();\n      return;\n    }\n\n    frenchOverrideAssetState.loading = true;\n\n    var script = document.createElement('script');\n    script.src = assetUrl;\n    script.async = true;\n    script.setAttribute('data-nb-fr-overrides', 'true');\n    script.onload = function () {\n      frenchOverrideAssetState.loading = false;\n      frenchOverrideAssetState.loaded = true;\n      flushFrenchOverrideCallbacks();\n    };\n    script.onerror = function () {\n      frenchOverrideAssetState.loading = false;\n      frenchOverrideAssetState.failed = true;\n      flushFrenchOverrideCallbacks();\n    };\n    document.head.appendChild(script);\n  }\n\n  function flushGermanOverrideCallbacks() {\n    if (!germanOverrideAssetState.callbacks.length) return;\n    var callbacks = germanOverrideAssetState.callbacks.slice();\n    germanOverrideAssetState.callbacks = [];\n    for (var i = 0; i < callbacks.length; i += 1) {\n      try {\n        callbacks[i]();\n      } catch (_errGermanOverrideCallback) {\n        // noop\n      }\n    }\n  }\n\n  function ensureGermanOverrideAsset(onReady) {\n    if (typeof onReady === 'function') {\n      germanOverrideAssetState.callbacks.push(onReady);\n    }\n\n    if (window.NordbeltGermanArticleOverrides) {\n      germanOverrideAssetState.loaded = true;\n      flushGermanOverrideCallbacks();\n      return;\n    }\n\n    if (germanOverrideAssetState.loaded || germanOverrideAssetState.failed) {\n      flushGermanOverrideCallbacks();\n      return;\n    }\n\n    if (germanOverrideAssetState.loading) return;\n\n    var assetUrl = resolveThemeSiblingAssetUrl('de-article-overrides.js');\n    if (!assetUrl) {\n      germanOverrideAssetState.failed = true;\n      flushGermanOverrideCallbacks();\n      return;\n    }\n\n    germanOverrideAssetState.loading = true;\n\n    var script = document.createElement('script');\n    script.src = assetUrl;\n    script.async = true;\n    script.setAttribute('data-nb-de-overrides', 'true');\n    script.onload = function () {\n      germanOverrideAssetState.loading = false;\n      germanOverrideAssetState.loaded = true;\n      flushGermanOverrideCallbacks();\n    };\n    script.onerror = function () {\n      germanOverrideAssetState.loading = false;\n      germanOverrideAssetState.failed = true;\n      flushGermanOverrideCallbacks();\n    };\n    document.head.appendChild(script);\n  }\n\n  function flushEnglishOverrideCallbacks() {\n    if (!englishOverrideAssetState.callbacks.length) return;\n    var callbacks = englishOverrideAssetState.callbacks.slice();\n    englishOverrideAssetState.callbacks = [];\n    for (var i = 0; i < callbacks.length; i += 1) {\n      try {\n        callbacks[i]();\n      } catch (_errEnglishOverrideCallback) {\n        // noop\n      }\n    }\n  }\n\n  function ensureEnglishOverrideAsset(onReady) {\n    if (typeof onReady === 'function') {\n      englishOverrideAssetState.callbacks.push(onReady);\n    }\n\n    if (window.NordbeltEnglishArticleOverrides) {\n      englishOverrideAssetState.loaded = true;\n      flushEnglishOverrideCallbacks();\n      return;\n    }\n\n    if (englishOverrideAssetState.loaded || englishOverrideAssetState.failed) {\n      flushEnglishOverrideCallbacks();\n      return;\n    }\n\n    if (englishOverrideAssetState.loading) return;\n\n    var assetUrl = resolveThemeSiblingAssetUrl('en-article-overrides.js');\n    if (!assetUrl) {\n      englishOverrideAssetState.failed = true;\n      flushEnglishOverrideCallbacks();\n      return;\n    }\n\n    if (assetUrl.indexOf('nbcb=') === -1) {\n      assetUrl += (assetUrl.indexOf('?') === -1 ? '?' : '&') + 'nbcb=' + String(Date.now());\n    }\n\n    englishOverrideAssetState.loading = true;\n\n    var script = document.createElement('script');\n    script.src = assetUrl;\n    script.async = true;\n    script.setAttribute('data-nb-en-overrides', 'true');\n    script.onload = function () {\n      englishOverrideAssetState.loading = false;\n      englishOverrideAssetState.loaded = true;\n      flushEnglishOverrideCallbacks();\n    };\n    script.onerror = function () {\n      englishOverrideAssetState.loading = false;\n      englishOverrideAssetState.failed = true;\n      flushEnglishOverrideCallbacks();\n    };\n    document.head.appendChild(script);\n  }\n\n  function flushSwedishOverrideCallbacks() {\n    if (!swedishOverrideAssetState.callbacks.length) return;\n    var callbacks = swedishOverrideAssetState.callbacks.slice();\n    swedishOverrideAssetState.callbacks = [];\n    for (var i = 0; i < callbacks.length; i += 1) {\n      try {\n        callbacks[i]();\n      } catch (_errSwedishOverrideCallback) {\n        // noop\n      }\n    }\n  }\n\n  function ensureSwedishOverrideAsset(onReady) {\n    if (typeof onReady === 'function') {\n      swedishOverrideAssetState.callbacks.push(onReady);\n    }\n\n    if (window.NordbeltSwedishArticleOverrides) {\n      swedishOverrideAssetState.loaded = true;\n      flushSwedishOverrideCallbacks();\n      return;\n    }\n\n    if (swedishOverrideAssetState.loaded || swedishOverrideAssetState.failed) {\n      flushSwedishOverrideCallbacks();\n      return;\n    }\n\n    if (swedishOverrideAssetState.loading) return;\n\n    var assetUrl = resolveThemeSiblingAssetUrl('sv-article-overrides.js');\n    if (!assetUrl) {\n      swedishOverrideAssetState.failed = true;\n      flushSwedishOverrideCallbacks();\n      return;\n    }\n\n    if (assetUrl.indexOf('nbcb=') === -1) {\n      assetUrl += (assetUrl.indexOf('?') === -1 ? '?' : '&') + 'nbcb=' + String(Date.now());\n    }\n\n    swedishOverrideAssetState.loading = true;\n\n    var script = document.createElement('script');\n    script.src = assetUrl;\n    script.async = true;\n    script.setAttribute('data-nb-sv-overrides', 'true');\n    script.onload = function () {\n      swedishOverrideAssetState.loading = false;\n      swedishOverrideAssetState.loaded = true;\n      flushSwedishOverrideCallbacks();\n    };\n    script.onerror = function () {\n      swedishOverrideAssetState.loading = false;\n      swedishOverrideAssetState.failed = true;\n      flushSwedishOverrideCallbacks();\n    };\n    document.head.appendChild(script);\n  }\n\n  function flushDanishOverrideCallbacks() {\n    if (!danishOverrideAssetState.callbacks.length) return;\n    var callbacks = danishOverrideAssetState.callbacks.slice();\n    danishOverrideAssetState.callbacks = [];\n    for (var i = 0; i < callbacks.length; i += 1) {\n      try {\n        callbacks[i]();\n      } catch (_errDanishOverrideCallback) {\n        // noop\n      }\n    }\n  }\n\n  function ensureDanishOverrideAsset(onReady) {\n    if (typeof onReady === 'function') {\n      danishOverrideAssetState.callbacks.push(onReady);\n    }\n\n    if (window.NordbeltDanishArticleOverrides) {\n      danishOverrideAssetState.loaded = true;\n      flushDanishOverrideCallbacks();\n      return;\n    }\n\n    if (danishOverrideAssetState.loaded || danishOverrideAssetState.failed) {\n      flushDanishOverrideCallbacks();\n      return;\n    }\n\n    if (danishOverrideAssetState.loading) return;\n\n    var assetUrl = resolveThemeSiblingAssetUrl('da-article-overrides.js');\n    if (!assetUrl) {\n      danishOverrideAssetState.failed = true;\n      flushDanishOverrideCallbacks();\n      return;\n    }\n\n    if (assetUrl.indexOf('nbcb=') === -1) {\n      assetUrl += (assetUrl.indexOf('?') === -1 ? '?' : '&') + 'nbcb=' + String(Date.now());\n    }\n\n    danishOverrideAssetState.loading = true;\n\n    var script = document.createElement('script');\n    script.src = assetUrl;\n    script.async = true;\n    script.setAttribute('data-nb-da-overrides', 'true');\n    script.onload = function () {\n      danishOverrideAssetState.loading = false;\n      danishOverrideAssetState.loaded = true;\n      flushDanishOverrideCallbacks();\n    };\n    script.onerror = function () {\n      danishOverrideAssetState.loading = false;\n      danishOverrideAssetState.failed = true;\n      flushDanishOverrideCallbacks();\n    };\n    document.head.appendChild(script);\n  }\n\n  function flushEstonianOverrideCallbacks() {\n    if (!estonianOverrideAssetState.callbacks.length) return;\n    var callbacks = estonianOverrideAssetState.callbacks.slice();\n    estonianOverrideAssetState.callbacks = [];\n    for (var i = 0; i < callbacks.length; i += 1) {\n      try {\n        callbacks[i]();\n      } catch (_errEstonianOverrideCallback) {\n        // noop\n      }\n    }\n  }\n\n  function ensureEstonianOverrideAsset(onReady) {\n    if (typeof onReady === 'function') {\n      estonianOverrideAssetState.callbacks.push(onReady);\n    }\n\n    if (window.NordbeltEstonianArticleOverrides) {\n      estonianOverrideAssetState.loaded = true;\n      flushEstonianOverrideCallbacks();\n      return;\n    }\n\n    if (estonianOverrideAssetState.loaded || estonianOverrideAssetState.failed) {\n      flushEstonianOverrideCallbacks();\n      return;\n    }\n\n    if (estonianOverrideAssetState.loading) return;\n\n    var assetUrl = resolveThemeSiblingAssetUrl('et-article-overrides.js');\n    if (!assetUrl) {\n      estonianOverrideAssetState.failed = true;\n      flushEstonianOverrideCallbacks();\n      return;\n    }\n\n    if (assetUrl.indexOf('nbcb=') === -1) {\n      assetUrl += (assetUrl.indexOf('?') === -1 ? '?' : '&') + 'nbcb=' + String(Date.now());\n    }\n\n    estonianOverrideAssetState.loading = true;\n\n    var script = document.createElement('script');\n    script.src = assetUrl;\n    script.async = true;\n    script.setAttribute('data-nb-et-overrides', 'true');\n    script.onload = function () {\n      estonianOverrideAssetState.loading = false;\n      estonianOverrideAssetState.loaded = true;\n      flushEstonianOverrideCallbacks();\n    };\n    script.onerror = function () {\n      estonianOverrideAssetState.loading = false;\n      estonianOverrideAssetState.failed = true;\n      flushEstonianOverrideCallbacks();\n    };\n    document.head.appendChild(script);\n  }\n\n  function flushSpanishOverrideCallbacks() {\n    if (!spanishOverrideAssetState.callbacks.length) return;\n    var callbacks = spanishOverrideAssetState.callbacks.slice();\n    spanishOverrideAssetState.callbacks = [];\n    for (var i = 0; i < callbacks.length; i += 1) {\n      try {\n        callbacks[i]();\n      } catch (_errSpanishOverrideCallback) {\n        // noop\n      }\n    }\n  }\n\n  function flushFinnishOverrideCallbacks() {\n    if (!finnishOverrideAssetState.callbacks.length) return;\n    var callbacks = finnishOverrideAssetState.callbacks.slice();\n    finnishOverrideAssetState.callbacks = [];\n    for (var i = 0; i < callbacks.length; i += 1) {\n      try {\n        callbacks[i]();\n      } catch (_errFinnishOverrideCallback) {\n        // noop\n      }\n    }\n  }\n\n  function ensureFinnishOverrideAsset(onReady) {\n    if (typeof onReady === 'function') {\n      finnishOverrideAssetState.callbacks.push(onReady);\n    }\n\n    if (window.NordbeltFinnishArticleOverrides) {\n      finnishOverrideAssetState.loaded = true;\n      flushFinnishOverrideCallbacks();\n      return;\n    }\n\n    if (finnishOverrideAssetState.loaded || finnishOverrideAssetState.failed) {\n      flushFinnishOverrideCallbacks();\n      return;\n    }\n\n    if (finnishOverrideAssetState.loading) return;\n\n    var assetUrl = resolveThemeSiblingAssetUrl('fi-article-overrides.js');\n    if (!assetUrl) {\n      finnishOverrideAssetState.failed = true;\n      flushFinnishOverrideCallbacks();\n      return;\n    }\n\n    if (assetUrl.indexOf('nbcb=') === -1) {\n      assetUrl += (assetUrl.indexOf('?') === -1 ? '?' : '&') + 'nbcb=' + String(Date.now());\n    }\n\n    finnishOverrideAssetState.loading = true;\n\n    var script = document.createElement('script');\n    script.src = assetUrl;\n    script.async = true;\n    script.setAttribute('data-nb-fi-overrides', 'true');\n    script.onload = function () {\n      finnishOverrideAssetState.loading = false;\n      finnishOverrideAssetState.loaded = true;\n      flushFinnishOverrideCallbacks();\n    };\n    script.onerror = function () {\n      finnishOverrideAssetState.loading = false;\n      finnishOverrideAssetState.failed = true;\n      flushFinnishOverrideCallbacks();\n    };\n    document.head.appendChild(script);\n  }\n\n  function flushNorwegianOverrideCallbacks() {\n    if (!norwegianOverrideAssetState.callbacks.length) return;\n    var callbacks = norwegianOverrideAssetState.callbacks.slice();\n    norwegianOverrideAssetState.callbacks = [];\n    for (var i = 0; i < callbacks.length; i += 1) {\n      try {\n        callbacks[i]();\n      } catch (_errNorwegianOverrideCallback) {\n        // noop\n      }\n    }\n  }\n\n  function ensureNorwegianOverrideAsset(onReady) {\n    if (typeof onReady === 'function') {\n      norwegianOverrideAssetState.callbacks.push(onReady);\n    }\n\n    if (window.NordbeltNorwegianArticleOverrides) {\n      norwegianOverrideAssetState.loaded = true;\n      flushNorwegianOverrideCallbacks();\n      return;\n    }\n\n    if (norwegianOverrideAssetState.loaded || norwegianOverrideAssetState.failed) {\n      flushNorwegianOverrideCallbacks();\n      return;\n    }\n\n    if (norwegianOverrideAssetState.loading) return;\n\n    var assetUrl = resolveThemeSiblingAssetUrl('nb-article-overrides.js');\n    if (!assetUrl) {\n      norwegianOverrideAssetState.failed = true;\n      flushNorwegianOverrideCallbacks();\n      return;\n    }\n\n    if (assetUrl.indexOf('nbcb=') === -1) {\n      assetUrl += (assetUrl.indexOf('?') === -1 ? '?' : '&') + 'nbcb=' + String(Date.now());\n    }\n\n    norwegianOverrideAssetState.loading = true;\n\n    var script = document.createElement('script');\n    script.src = assetUrl;\n    script.async = true;\n    script.setAttribute('data-nb-nb-overrides', 'true');\n    script.onload = function () {\n      norwegianOverrideAssetState.loading = false;\n      norwegianOverrideAssetState.loaded = true;\n      flushNorwegianOverrideCallbacks();\n    };\n    script.onerror = function () {\n      norwegianOverrideAssetState.loading = false;\n      norwegianOverrideAssetState.failed = true;\n      flushNorwegianOverrideCallbacks();\n    };\n    document.head.appendChild(script);\n  }\n\n  function ensureSpanishOverrideAsset(onReady) {\n    if (typeof onReady === 'function') {\n      spanishOverrideAssetState.callbacks.push(onReady);\n    }\n\n    if (window.NordbeltSpanishArticleOverrides) {\n      spanishOverrideAssetState.loaded = true;\n      flushSpanishOverrideCallbacks();\n      return;\n    }\n\n    if (spanishOverrideAssetState.loaded || spanishOverrideAssetState.failed) {\n      flushSpanishOverrideCallbacks();\n      return;\n    }\n\n    if (spanishOverrideAssetState.loading) return;\n\n    var assetUrl = resolveThemeSiblingAssetUrl('es-article-overrides.js');\n    if (!assetUrl) {\n      spanishOverrideAssetState.failed = true;\n      flushSpanishOverrideCallbacks();\n      return;\n    }\n\n    if (assetUrl.indexOf('nbcb=') === -1) {\n      assetUrl += (assetUrl.indexOf('?') === -1 ? '?' : '&') + 'nbcb=' + String(Date.now());\n    }\n\n    spanishOverrideAssetState.loading = true;\n\n    var script = document.createElement('script');\n    script.src = assetUrl;\n    script.async = true;\n    script.setAttribute('data-nb-es-overrides', 'true');\n    script.onload = function () {\n      spanishOverrideAssetState.loading = false;\n      spanishOverrideAssetState.loaded = true;\n      flushSpanishOverrideCallbacks();\n    };\n    script.onerror = function () {\n      spanishOverrideAssetState.loading = false;\n      spanishOverrideAssetState.failed = true;\n      flushSpanishOverrideCallbacks();\n    };\n    document.head.appendChild(script);\n  }\n\n  function flushItalianOverrideCallbacks() {\n    if (!italianOverrideAssetState.callbacks.length) return;\n    var callbacks = italianOverrideAssetState.callbacks.slice();\n    italianOverrideAssetState.callbacks = [];\n    for (var i = 0; i < callbacks.length; i += 1) {\n      try {\n        callbacks[i]();\n      } catch (_errItalianOverrideCallback) {\n        // noop\n      }\n    }\n  }\n\n  function ensureItalianOverrideAsset(onReady) {\n    if (typeof onReady === 'function') {\n      italianOverrideAssetState.callbacks.push(onReady);\n    }\n\n    if (window.NordbeltItalianArticleOverrides) {\n      italianOverrideAssetState.loaded = true;\n      flushItalianOverrideCallbacks();\n      return;\n    }\n\n    if (italianOverrideAssetState.loaded || italianOverrideAssetState.failed) {\n      flushItalianOverrideCallbacks();\n      return;\n    }\n\n    if (italianOverrideAssetState.loading) return;\n\n    var assetUrl = resolveThemeSiblingAssetUrl('it-article-overrides.js');\n    if (!assetUrl) {\n      italianOverrideAssetState.failed = true;\n      flushItalianOverrideCallbacks();\n      return;\n    }\n\n    if (assetUrl.indexOf('nbcb=') === -1) {\n      assetUrl += (assetUrl.indexOf('?') === -1 ? '?' : '&') + 'nbcb=' + String(Date.now());\n    }\n\n    italianOverrideAssetState.loading = true;\n\n    var script = document.createElement('script');\n    script.src = assetUrl;\n    script.async = true;\n    script.setAttribute('data-nb-it-overrides', 'true');\n    script.onload = function () {\n      italianOverrideAssetState.loading = false;\n      italianOverrideAssetState.loaded = true;\n      flushItalianOverrideCallbacks();\n    };\n    script.onerror = function () {\n      italianOverrideAssetState.loading = false;\n      italianOverrideAssetState.failed = true;\n      flushItalianOverrideCallbacks();\n    };\n    document.head.appendChild(script);\n  }\n\n  function setNodeText(node, value) {\n    if (!node || value == null) return;\n    var next = String(value);\n    if ((node.textContent || '').trim() === next.trim()) return;\n    node.textContent = next;\n  }\n\n  var NB_PRACTICE_SEO_COPY = {\n    nl: {\n      anchors: {\n        nhc: 'Nordic Hamstring Curl voor fysiopraktijken',\n        physio: 'Nordbelt voor fysiotherapeuten',\n        packages: 'praktijkpakketten voor fysiopraktijken',\n        home: 'thuispakket voor hamstringrevalidatie'\n      },\n      sentences: {\n        professional: ['Voor zorgprofessionals die deze oefening begeleid willen inzetten is er ook ', '.'],\n        physioSetup: ['Voor praktijkgebruik en thuisopbouw kan ', ' daarbij als vaste setup dienen.'],\n        practicePackages: ['Voor praktijken die dezelfde opbouw in behandelkamer en thuis willen borgen zijn er ook ', '.'],\n        homeRehab: ['Wanneer de oefening onderdeel is van begeleide revalidatie, sluit dit ook aan op een ', '.'],\n        laterPhase: ['In een latere fase kan ', ' helpen om praktijkbegeleiding en gecontroleerde thuisopbouw te verbinden.']\n      }\n    },\n    en: {\n      anchors: {\n        nhc: 'Nordic Hamstring Curl for clinics',\n        physio: 'Nordbelt for physiotherapists',\n        packages: 'practice packages for clinics',\n        home: 'home kit for hamstring rehabilitation'\n      },\n      sentences: {\n        professional: ['For professional use, ', ' gives clinics a practical route from explanation to implementation.'],\n        physioSetup: ['For supervised use in clinic and at home, ', ' keeps the setup consistent.'],\n        practicePackages: ['For clinics that want to keep the same progression in treatment and at home, ', ' are the business route.'],\n        homeRehab: ['When the exercise is part of supervised rehab, a ', ' helps keep the home setup consistent.'],\n        laterPhase: ['In a later phase, ', ' can help bridge clinic guidance and controlled home progression.']\n      }\n    },\n    de: {\n      anchors: {\n        nhc: 'Nordic Hamstring Curl f\u00FCr Praxen',\n        physio: 'Nordbelt f\u00FCr Physiotherapiepraxen',\n        packages: 'Praxispakete f\u00FCr Physiotherapiepraxen',\n        home: 'Heimset f\u00FCr die Hamstring-Rehabilitation'\n      },\n      sentences: {\n        professional: ['F\u00FCr den professionellen Einsatz bietet ', ' Praxen einen klaren Weg von der Erkl\u00E4rung zur Umsetzung.'],\n        physioSetup: ['F\u00FCr betreute Anwendung in Praxis und Zuhause sorgt ', ' f\u00FCr eine einheitliche \u00DCbungsumgebung.'],\n        practicePackages: ['F\u00FCr Praxen, die denselben Aufbau in Behandlung und Heimtraining sichern wollen, sind ', ' der passende Gesch\u00E4ftsweg.'],\n        homeRehab: ['Wenn die \u00DCbung Teil einer betreuten Reha ist, hilft ein ', ', das Heimtraining konsistent umzusetzen.'],\n        laterPhase: ['In einer sp\u00E4teren Phase kann ', ' helfen, Praxisanleitung und kontrollierten Aufbau zu Hause zu verbinden.']\n      }\n    },\n    fr: {\n      anchors: {\n        nhc: 'Nordic Hamstring Curl pour les cabinets',\n        physio: 'Nordbelt pour les cabinets de kin\u00E9sith\u00E9rapie',\n        packages: 'packs cabinet pour kin\u00E9sith\u00E9rapeutes',\n        home: 'kit \u00E0 domicile pour la r\u00E9\u00E9ducation des ischio-jambiers'\n      },\n      sentences: {\n        professional: [\"Pour un usage professionnel, \", \" aide les cabinets \u00E0 passer de l'explication \u00E0 la mise en pratique.\"],\n        physioSetup: ['Pour une utilisation encadr\u00E9e au cabinet et \u00E0 domicile, ', ' garde la m\u00EAme logique de setup.'],\n        practicePackages: ['Pour les cabinets qui veulent garder la m\u00EAme progression entre s\u00E9ance et domicile, les ', ' sont la route professionnelle.'],\n        homeRehab: [\"Lorsque l'exercice fait partie d'une r\u00E9\u00E9ducation encadr\u00E9e, un \", ' aide \u00E0 garder un setup coh\u00E9rent \u00E0 domicile.'],\n        laterPhase: ['Dans une phase ult\u00E9rieure, ', ' peut relier les consignes du cabinet \u00E0 une progression contr\u00F4l\u00E9e \u00E0 domicile.']\n      }\n    },\n    sv: {\n      anchors: {\n        nhc: 'Nordic Hamstring Curl f\u00F6r kliniker',\n        physio: 'Nordbelt f\u00F6r fysioterapeuter',\n        packages: 'klinikpaket f\u00F6r fysioterapeuter',\n        home: 'hemmapaket f\u00F6r hamstringrehabilitering'\n      },\n      sentences: {\n        professional: ['F\u00F6r professionell anv\u00E4ndning ger ', ' kliniker en praktisk v\u00E4g fr\u00E5n f\u00F6rklaring till genomf\u00F6rande.'],\n        physioSetup: ['F\u00F6r handledd anv\u00E4ndning p\u00E5 klinik och hemma h\u00E5ller ', ' setupen konsekvent.'],\n        practicePackages: ['F\u00F6r kliniker som vill beh\u00E5lla samma progression i behandling och hemmatr\u00E4ning \u00E4r ', ' den praktiska v\u00E4gen.'],\n        homeRehab: ['N\u00E4r \u00F6vningen ing\u00E5r i handledd rehab hj\u00E4lper ett ', ' till att h\u00E5lla hemmaupps\u00E4ttningen konsekvent.'],\n        laterPhase: ['I en senare fas kan ', ' koppla ihop klinikens v\u00E4gledning med kontrollerad progression hemma.']\n      }\n    },\n    da: {\n      anchors: {\n        nhc: 'Nordic Hamstring Curl til klinikker',\n        physio: 'Nordbelt til fysioterapeuter',\n        packages: 'klinikpakker til fysioterapeuter',\n        home: 'hjemmepakke til hamstringrehabilitering'\n      },\n      sentences: {\n        professional: ['Til professionel brug giver ', ' klinikker en praktisk vej fra forklaring til implementering.'],\n        physioSetup: ['Til superviseret brug i klinikken og hjemme holder ', ' ops\u00E6tningen ensartet.'],\n        practicePackages: ['For klinikker, der vil bevare samme progression i behandling og hjemmetr\u00E6ning, er ', ' den praktiske l\u00F8sning.'],\n        homeRehab: ['N\u00E5r \u00F8velsen er del af superviseret genoptr\u00E6ning, hj\u00E6lper en ', ' med at holde hjemmeops\u00E6tningen ensartet.'],\n        laterPhase: ['I en senere fase kan ', ' forbinde klinisk vejledning med kontrolleret progression hjemme.']\n      }\n    },\n    nb: {\n      anchors: {\n        nhc: 'Nordic Hamstring Curl for klinikker',\n        physio: 'Nordbelt for fysioterapeuter',\n        packages: 'klinikkpakker for fysioterapeuter',\n        home: 'hjemmepakke for hamstringrehabilitering'\n      },\n      sentences: {\n        professional: ['For profesjonell bruk gir ', ' klinikker en praktisk vei fra forklaring til gjennomf\u00F8ring.'],\n        physioSetup: ['For veiledet bruk p\u00E5 klinikk og hjemme holder ', ' oppsettet konsekvent.'],\n        practicePackages: ['For klinikker som vil beholde samme progresjon i behandling og hjemmetrening, er ', ' den praktiske l\u00F8sningen.'],\n        homeRehab: ['N\u00E5r \u00F8velsen er en del av veiledet rehabilitering, hjelper en ', ' med \u00E5 holde hjemmeoppsettet konsekvent.'],\n        laterPhase: ['I en senere fase kan ', ' koble klinikkens veiledning med kontrollert progresjon hjemme.']\n      }\n    },\n    fi: {\n      anchors: {\n        nhc: 'Nordic Hamstring Curl fysioterapiaklinikoille',\n        physio: 'Nordbelt fysioterapeuteille',\n        packages: 'klinikkapaketit fysioterapeuteille',\n        home: 'kotipaketti hamstring-kuntoutukseen'\n      },\n      sentences: {\n        professional: ['Ammattilaisk\u00E4yt\u00F6ss\u00E4 ', ' auttaa klinikoita viem\u00E4\u00E4n ohjeet k\u00E4yt\u00E4nn\u00F6n toteutukseen.'],\n        physioSetup: ['Ohjatussa k\u00E4yt\u00F6ss\u00E4 klinikalla ja kotona ', ' pit\u00E4\u00E4 harjoitusasetelman yhten\u00E4isen\u00E4.'],\n        practicePackages: ['Klinikoille, jotka haluavat s\u00E4ilytt\u00E4\u00E4 saman progression hoidossa ja kotiharjoittelussa, ', ' ovat k\u00E4yt\u00E4nn\u00F6llinen ratkaisu.'],\n        homeRehab: ['Kun harjoitus on osa ohjattua kuntoutusta, ', ' auttaa pit\u00E4m\u00E4\u00E4n kotiharjoittelun asetelman yhten\u00E4isen\u00E4.'],\n        laterPhase: ['My\u00F6hemm\u00E4ss\u00E4 vaiheessa ', ' voi yhdist\u00E4\u00E4 klinikan ohjeistuksen ja hallitun kotiprogression.']\n      }\n    },\n    et: {\n      anchors: {\n        nhc: 'Nordic Hamstring Curl f\u00FCsioteraapiakliinikutele',\n        physio: 'Nordbelt f\u00FCsioterapeutidele',\n        packages: 'kliinikupaketid f\u00FCsioterapeutidele',\n        home: 'kodupakett hamstringu taastusraviks'\n      },\n      sentences: {\n        professional: ['Professionaalses kasutuses aitab ', ' kliinikutel liikuda selgitusest praktilise rakenduseni.'],\n        physioSetup: ['Juhendatud kasutuses kliinikus ja kodus hoiab ', ' harjutuse \u00FClesehituse \u00FChtlasena.'],\n        practicePackages: ['Kliinikutele, kes tahavad hoida sama progressiooni ravis ja koduses harjutamises, sobivad ', '.'],\n        homeRehab: ['Kui harjutus on osa juhendatud taastusravist, aitab ', ' koduse \u00FClesehituse \u00FChtlasena hoida.'],\n        laterPhase: ['Hilisemas faasis aitab ', ' siduda kliiniku juhendamise kontrollitud koduse arenguga.']\n      }\n    },\n    es: {\n      anchors: {\n        nhc: 'Nordic Hamstring Curl para cl\u00EDnicas',\n        physio: 'Nordbelt para fisioterapeutas',\n        packages: 'packs para cl\u00EDnicas de fisioterapia',\n        home: 'kit para rehabilitaci\u00F3n de isquiotibiales en casa'\n      },\n      sentences: {\n        professional: ['Para uso profesional, ', ' ayuda a las cl\u00EDnicas a pasar de la explicaci\u00F3n a la aplicaci\u00F3n pr\u00E1ctica.'],\n        physioSetup: ['Para uso supervisado en cl\u00EDnica y en casa, ', ' mantiene una configuraci\u00F3n constante.'],\n        practicePackages: ['Para cl\u00EDnicas que quieren mantener la misma progresi\u00F3n en tratamiento y trabajo en casa, los ', ' son la ruta profesional.'],\n        homeRehab: ['Cuando el ejercicio forma parte de una rehabilitaci\u00F3n supervisada, un ', ' ayuda a mantener constante la configuraci\u00F3n en casa.'],\n        laterPhase: ['En una fase posterior, ', ' puede conectar la gu\u00EDa cl\u00EDnica con una progresi\u00F3n controlada en casa.']\n      }\n    },\n    it: {\n      anchors: {\n        nhc: 'Nordic Hamstring Curl per studi di fisioterapia',\n        physio: 'Nordbelt per fisioterapisti',\n        packages: 'pacchetti per studi di fisioterapia',\n        home: 'kit domestico per la riabilitazione degli hamstring'\n      },\n      sentences: {\n        professional: [\"Per l'uso professionale, \", \" aiuta gli studi a passare dalla spiegazione all'applicazione pratica.\"],\n        physioSetup: ['Per un uso guidato in studio e a casa, ', ' mantiene coerente il setup.'],\n        practicePackages: ['Per gli studi che vogliono mantenere la stessa progressione tra trattamento e lavoro a casa, i ', ' sono il percorso professionale.'],\n        homeRehab: [\"Quando l'esercizio fa parte di una riabilitazione guidata, un \", ' aiuta a mantenere coerente il setup domestico.'],\n        laterPhase: ['In una fase successiva, ', ' pu\u00F2 collegare la guida dello studio alla progressione controllata a casa.']\n      }\n    },\n    pt: {\n      anchors: {\n        nhc: 'Nordic Hamstring Curl para cl\u00EDnicas',\n        physio: 'Nordbelt para fisioterapeutas',\n        packages: 'pacotes para cl\u00EDnicas de fisioterapia',\n        home: 'kit dom\u00E9stico para reabilita\u00E7\u00E3o dos isquiotibiais'\n      },\n      sentences: {\n        professional: ['Para uso profissional, ', ' ajuda as cl\u00EDnicas a passar da explica\u00E7\u00E3o \u00E0 aplica\u00E7\u00E3o pr\u00E1tica.'],\n        physioSetup: ['Para uso supervisionado na cl\u00EDnica e em casa, ', ' mant\u00E9m a configura\u00E7\u00E3o consistente.'],\n        practicePackages: ['Para cl\u00EDnicas que querem manter a mesma progress\u00E3o no tratamento e no trabalho em casa, os ', ' s\u00E3o a rota profissional.'],\n        homeRehab: ['Quando o exerc\u00EDcio faz parte de uma reabilita\u00E7\u00E3o supervisionada, um ', ' ajuda a manter a configura\u00E7\u00E3o em casa consistente.'],\n        laterPhase: ['Numa fase posterior, ', ' pode ligar a orienta\u00E7\u00E3o cl\u00EDnica a uma progress\u00E3o controlada em casa.']\n      }\n    }\n  };\n\n  var NB_PRACTICE_SEO_ARTICLES = {\n    'alles-over-de-nordic-hamstring-curl-en-hamstring-curls': {\n      anchor: 'nhc',\n      sentence: 'professional',\n      terms: ['physio', 'fysio', 'fisioter', 'kin\u00E9', 'klinik', 'clinic', 'prax', 'praksis', 'therap', 'terapeut', 'profession', 'kliin', 'kuntout', 'taast', 'reabilit', 'rehab']\n    },\n    'behandeling-van-hamstringblessures-eerste-hulp-herstel-en-oefeningen': {\n      anchor: 'physio',\n      sentence: 'physioSetup',\n      terms: ['fysiotherapie', 'physiotherapy', 'physiotherapist', 'fisioterapia', 'fisioterapeuta', 'fisioterapista', 'kin\u00E9sith\u00E9rapie', 'kin\u00E9sith\u00E9rapeute', 'fysioterapi', 'fysioterapeut', 'physio', 'therap', 'terapeut']\n    },\n    'hamstring-tendinopathie-en-hamstring-tendinitis-behandeling-en-herstel': {\n      anchor: 'packages',\n      sentence: 'practicePackages',\n      terms: ['controlled loading', 'belasting', 'belastung', 'charge', 'carga', 'carico', 'progress', 'reha', 'rehab', 'revalid', 'kuntout', 'taast', 'reabilit', 'clinic', 'klinik', 'prax', 'praksis']\n    },\n    'nordic-hamstring-curl-thuis-veilige-setup': {\n      anchor: 'home',\n      sentence: 'homeRehab',\n      terms: ['home', 'thuis', 'zuhause', 'domicile', 'hemma', 'hjemme', 'hjem', 'koti', 'kodus', 'casa', 'domest', 'rehab', 'revalid', 'reabilit']\n    },\n    'nordic-hamstring-curl-zonder-partner': {\n      anchor: 'physio',\n      sentence: 'physioSetup',\n      terms: ['partner', 'progress', 'regression', 'variant', 'setup', 'ops\u00E6tning', 'oppsett', 'upps\u00E4ttning', 'configuraci\u00F3n', 'configura\u00E7\u00E3o', 'klin', 'clinic', 'prax', 'fysio', 'physio', 'fisioter']\n    },\n    'hamstring-oefeningen-thuis-4-week-schema': {\n      anchor: 'home',\n      sentence: 'homeRehab',\n      terms: ['home', 'thuis', 'zuhause', 'domicile', 'hemma', 'hjemme', 'hjem', 'koti', 'kodus', 'casa', 'domest', 'schema', 'plan', 'program', 'programme', 'progress']\n    },\n    'hamstring-blessure-wat-te-doen-eerste-48-uur': {\n      anchor: 'home',\n      sentence: 'laterPhase',\n      terms: ['later', 'latere', 'sp\u00E4ter', 'ult\u00E9rieur', 'senare', 'senere', 'my\u00F6hem', 'hilisem', 'posterior', 'successiva', 'fysi', 'physio', 'doctor', 'arts', 'arzt', 'm\u00E9decin', 'm\u00E9dico', 'l\u00E4\u00E4k\u00E4ri']\n    },\n    'hamstring-oefeningen-bij-pijn': {\n      anchor: 'packages',\n      sentence: 'practicePackages',\n      terms: ['pain', 'pijn', 'schmerz', 'douleur', 'sm\u00E4rta', 'smerte', 'kipu', 'valu', 'dolor', 'dor', 'progress', 'strength', 'kracht', 'styrke', 'for\u00E7a', 'fuerza', 'forza']\n    }\n  };\n\n  function getArticlePathPrefix() {\n    var pathParts = (window.location.pathname || '').split('/').filter(Boolean);\n    if (!pathParts.length) return '';\n    var first = String(pathParts[0] || '').toLowerCase();\n    if (!first || /^(blogs|pages|products|collections|cart|search|policies)$/i.test(first)) return '';\n    return '/' + first;\n  }\n\n  function getPracticePagePathPrefix() {\n    var prefix = getArticlePathPrefix();\n    var key = prefix.replace(/^\\//, '').toLowerCase();\n    var fallbackPrefixes = {\n      de: '/de-de',\n      sv: '/sv-se',\n      da: '/da-dk',\n      fi: '/fi-fi',\n      pt: '/pt-pt',\n      'de-lu': '/de-de',\n      'en-ch': '',\n      'nl-be': ''\n    };\n    if (Object.prototype.hasOwnProperty.call(fallbackPrefixes, key)) {\n      return fallbackPrefixes[key];\n    }\n    return prefix;\n  }\n\n  function getLocalizedPracticePageHref() {\n    return getPracticePagePathPrefix() + '/pages/fysiopraktijken';\n  }\n\n  function getPracticeSeoLocaleRoot() {\n    var prefix = getArticlePathPrefix();\n    if (prefix) {\n      return prefix.replace(/^\\//, '').toLowerCase().split('-')[0];\n    }\n    var lang = String(document.documentElement.getAttribute('lang') || '').toLowerCase().split('-')[0];\n    if (NB_PRACTICE_SEO_COPY[lang]) return lang;\n    try {\n      var shopifyLocale = String(window.Shopify && window.Shopify.locale ? window.Shopify.locale : '').toLowerCase().split('-')[0];\n      if (NB_PRACTICE_SEO_COPY[shopifyLocale]) return shopifyLocale;\n    } catch (_errPracticeLocale) {\n      // noop\n    }\n    return isEnglishStorefront() ? 'en' : 'nl';\n  }\n\n  function getPracticeSeoCopy() {\n    var localeRoot = getPracticeSeoLocaleRoot();\n    return NB_PRACTICE_SEO_COPY[localeRoot] || NB_PRACTICE_SEO_COPY.en;\n  }\n\n  function getCurrentArticleHandle() {\n    var articleRoot = document.querySelector('[data-nb-article-slug], [data-article-handle], article[data-handle]');\n    var rawHandle = articleRoot && (\n      articleRoot.getAttribute('data-nb-article-slug') ||\n      articleRoot.getAttribute('data-article-handle') ||\n      articleRoot.getAttribute('data-handle')\n    );\n    if (rawHandle) return String(rawHandle).trim();\n    var pathParts = (window.location.pathname || '').split('/').filter(Boolean);\n    if (!pathParts.length) return '';\n    return String(pathParts[pathParts.length - 1] || '').replace(/\\.html?$/i, '').trim();\n  }\n\n  function escapePracticeSeoHtml(value) {\n    return String(value == null ? '' : value)\n      .replace(/&/g, '&amp;')\n      .replace(/</g, '&lt;')\n      .replace(/>/g, '&gt;')\n      .replace(/\"/g, '&quot;');\n  }\n\n  function normalizePracticeSeoParagraphText(html) {\n    return String(html || '')\n      .replace(/<script[\\s\\S]*?<\\/script>/gi, ' ')\n      .replace(/<style[\\s\\S]*?<\\/style>/gi, ' ')\n      .replace(/<[^>]+>/g, ' ')\n      .replace(/&nbsp;/gi, ' ')\n      .replace(/&amp;/gi, '&')\n      .replace(/\\s+/g, ' ')\n      .toLowerCase();\n  }\n\n  function paragraphMatchesPracticeSeoRule(paragraphHtml, rule) {\n    if (!paragraphHtml || !rule || !rule.terms || !rule.terms.length) return false;\n    var text = normalizePracticeSeoParagraphText(paragraphHtml);\n    for (var i = 0; i < rule.terms.length; i += 1) {\n      var term = String(rule.terms[i] || '').toLowerCase();\n      if (term && text.indexOf(term) !== -1) return true;\n    }\n    return false;\n  }\n\n  function buildPracticeSeoSentence(rule) {\n    var copy = getPracticeSeoCopy();\n    if (!copy || !rule) return '';\n    var anchorText = copy.anchors && copy.anchors[rule.anchor];\n    var sentenceParts = copy.sentences && copy.sentences[rule.sentence];\n    if (!anchorText || !sentenceParts || sentenceParts.length < 2) return '';\n    var href = getLocalizedPracticePageHref();\n    var linkHtml = '<a href=\"' + escapePracticeSeoHtml(href) + '\" data-nb-practice-seo-link=\"true\">' + escapePracticeSeoHtml(anchorText) + '</a>';\n    return escapePracticeSeoHtml(sentenceParts[0]) + linkHtml + escapePracticeSeoHtml(sentenceParts[1]);\n  }\n\n  function appendPracticeSeoSentence(paragraphHtml, sentenceHtml) {\n    if (!paragraphHtml || !sentenceHtml) return paragraphHtml;\n    return paragraphHtml.replace(/<\\/p>\\s*$/i, ' ' + sentenceHtml + '</p>');\n  }\n\n  function addLocalizedPracticeSeoLinkToHtml(html, articleHandle) {\n    if (!html) return html;\n    var next = String(html);\n    if (/href=[\"'][^\"']*\\/pages\\/fysiopraktijken(?:[\"'#?\\/]|$)/i.test(next)) return next;\n    if (/\\/pages\\/fysiopratijken/i.test(next)) {\n      next = next.replace(/\\/pages\\/fysiopratijken/gi, '/pages/fysiopraktijken');\n    }\n    var handle = String(articleHandle || getCurrentArticleHandle() || '').trim();\n    var rule = NB_PRACTICE_SEO_ARTICLES[handle];\n    if (!rule) return next;\n    var sentenceHtml = buildPracticeSeoSentence(rule);\n    if (!sentenceHtml) return next;\n\n    var changed = false;\n    var paragraphPattern = /<p\\b[^>]*>[\\s\\S]*?<\\/p>/gi;\n    var matched = next.replace(paragraphPattern, function (paragraphHtml) {\n      if (changed || !paragraphMatchesPracticeSeoRule(paragraphHtml, rule)) return paragraphHtml;\n      changed = true;\n      return appendPracticeSeoSentence(paragraphHtml, sentenceHtml);\n    });\n    if (changed) return matched;\n\n    return next.replace(paragraphPattern, function (paragraphHtml) {\n      if (changed) return paragraphHtml;\n      changed = true;\n      return appendPracticeSeoSentence(paragraphHtml, sentenceHtml);\n    });\n  }\n\n  function syncLocalizedPracticeArticleLink() {\n    sanitizeArticleDataAttributes(document);\n    var rte = document.querySelector('.nb-article__rte');\n    if (!rte) return;\n    var current = rte.innerHTML || '';\n    var next = addLocalizedPracticeSeoLinkToHtml(current, getCurrentArticleHandle());\n    if (next && !articleBodyBaseHtmlMatches(rte, next) && next.trim() !== current.trim()) {\n      rte.innerHTML = next;\n      refreshArticleBodyEnhancements(rte);\n    }\n  }\n\n  function installLocalizedPracticeArticleLinks() {\n    var scheduleSync = function () {\n      var raf = window.requestAnimationFrame || function (callback) {\n        window.setTimeout(callback, 16);\n      };\n      raf(syncLocalizedPracticeArticleLink);\n    };\n\n    var start = function () {\n      syncLocalizedPracticeArticleLink();\n      if (!document.body || !window.MutationObserver) return;\n      var observer = new MutationObserver(function () {\n        scheduleSync();\n      });\n      observer.observe(document.body, {\n        childList: true,\n        subtree: true,\n        characterData: true,\n        attributes: true,\n        attributeFilter: ['href']\n      });\n      window.addEventListener('pagehide', function () {\n        observer.disconnect();\n      }, { once: true });\n      window.setTimeout(syncLocalizedPracticeArticleLink, 400);\n      window.setTimeout(syncLocalizedPracticeArticleLink, 1400);\n      window.setTimeout(syncLocalizedPracticeArticleLink, 3200);\n    };\n\n    if (document.readyState === 'loading') {\n      document.addEventListener('DOMContentLoaded', start, { once: true });\n    } else {\n      start();\n    }\n  }\n\n  function setNodeHtml(node, value) {\n    if (!node || value == null) return;\n    var next = String(value);\n    var isArticleBody = !!(node.classList && node.classList.contains('nb-article__rte'));\n    if (node.classList && node.classList.contains('nb-article__rte')) {\n      next = addLocalizedPracticeSeoLinkToHtml(next, getCurrentArticleHandle());\n    }\n    if (isArticleBody && articleBodyBaseHtmlMatches(node, next)) return;\n    if ((node.innerHTML || '').trim() === next.trim()) return;\n    node.innerHTML = next;\n    if (isArticleBody) {\n      refreshArticleBodyEnhancements(node);\n    }\n  }\n\n  function articleBodyBaseHtmlMatches(node, nextHtml) {\n    if (!node) return false;\n    var clone = node.cloneNode(true);\n    var generated = clone.querySelectorAll('[data-nb-generated], .nb-article-toc, .nb-article-inline-conversion, .nb-article-faq');\n    for (var i = 0; i < generated.length; i += 1) {\n      if (generated[i] && generated[i].parentNode) {\n        generated[i].parentNode.removeChild(generated[i]);\n      }\n    }\n    return String(clone.innerHTML || '').trim() === String(nextHtml || '').trim();\n  }\n\n  function refreshArticleBodyEnhancements(node) {\n    if (!node || !node.closest) return;\n    var articleRoot = node.closest('[data-nb-article-conversion]');\n    if (!articleRoot) return;\n\n    delete articleRoot.dataset.nbEditorialNoiseCleaned;\n    delete articleRoot.dataset.nbTocInjected;\n    delete articleRoot.dataset.nbEditorialCalloutsEnhanced;\n    delete articleRoot.dataset.nbInlineBlocksInjected;\n    delete articleRoot.dataset.nbArticleFaqEnhanced;\n\n    window.requestAnimationFrame(function () {\n      cleanupArticleEditorialNoise(articleRoot);\n      initArticleEditorialMedia(articleRoot);\n      initArticleEditorialCallouts(articleRoot);\n      initArticleTableOfContents(articleRoot);\n      initArticleInlineConversionBlocks(articleRoot);\n      initArticleFaqEnhancements(articleRoot);\n      initArticleInlineProductLinkTracking(articleRoot);\n      initCtaTracking();\n      initBlogConversionTracking(articleRoot);\n    });\n  }\n\n  function setMetaContent(selector, value) {\n    if (!selector || value == null) return;\n    var nodes = document.querySelectorAll(selector);\n    if (!nodes || !nodes.length) return;\n    for (var i = 0; i < nodes.length; i += 1) {\n      var node = nodes[i];\n      if (!node) continue;\n      if ((node.getAttribute('content') || '') === value) continue;\n      node.setAttribute('content', value);\n    }\n  }\n\n  function updateDocumentTitle(value) {\n    if (!value) return;\n    if (document.title === value) return;\n    document.title = value;\n  }\n\n  function applySeoHeadContent(titleValue, descriptionValue) {\n    if (titleValue) {\n      updateDocumentTitle(titleValue);\n    }\n    if (!descriptionValue) return;\n    setMetaContent('meta[name=\"description\"]', descriptionValue);\n    setMetaContent('meta[property=\"og:description\"]', descriptionValue);\n    setMetaContent('meta[name=\"twitter:description\"]', descriptionValue);\n  }\n\n  function scheduleSeoHeadReapply(titleValue, descriptionValue) {\n    applySeoHeadContent(titleValue, descriptionValue);\n    var delays = [0, 250, 1200];\n    for (var i = 0; i < delays.length; i += 1) {\n      (function (delay) {\n        window.setTimeout(function () {\n          applySeoHeadContent(titleValue, descriptionValue);\n        }, delay);\n      })(delays[i]);\n    }\n  }\n\n  function extractBlogArticleHandle(href) {\n    var input = String(href || '');\n    if (!input) return '';\n    try {\n      var parsed = new URL(input, window.location.origin);\n      var match = (parsed.pathname || '').match(/\\/blogs\\/[^/]+\\/([^/?#]+)\\/?$/i);\n      return match ? decodeURIComponent(match[1]) : '';\n    } catch (_errFrenchHandle) {\n      var directMatch = input.match(/\\/blogs\\/[^/]+\\/([^/?#]+)\\/?$/i);\n      return directMatch ? decodeURIComponent(directMatch[1]) : '';\n    }\n  }\n\n  function ensureNordbeltSuffix(title) {\n    var value = String(title || '').trim();\n    if (!value) return 'Nordbelt\u2122';\n    if (/\\|\\s*Nordbelt\u2122$/i.test(value)) return value;\n    return value + ' | Nordbelt\u2122';\n  }\n\n  function normalizeShopifyFilesHtml(html) {\n    var value = String(html || '');\n    if (!value) return value;\n\n    var baseOrigin = '';\n    try {\n      baseOrigin = String(window.location.origin || '').replace(/\\/$/, '');\n    } catch (_errShopifyFilesOrigin) {\n      baseOrigin = '';\n    }\n    if (!baseOrigin) baseOrigin = 'https://www.nordbelt.nl';\n\n    value = value.replace(/(?:https?:)?\\/\\/[^\"'`\\s<>]+\\/cdn\\/shop\\/files\\/([^\"'`\\s<>?]+(?:\\/[^\"'`\\s<>?]+)?)\\?v=[^\"'`\\s<>]*/g, function (_match, filePath) {\n      return baseOrigin + '/cdn/shop/files/' + filePath;\n    });\n\n    value = value.replace(/(<img\\b[^>]*\\bsrc=\")((?!(?:[a-z][a-z0-9+.-]*:|\\/\\/))[^\"/][^\"]*\\.(?:png|jpe?g|webp|gif|svg|avif))(\")/gi, function (_match, prefix, filePath, suffix) {\n      return prefix + baseOrigin + '/cdn/shop/files/' + filePath;\n    });\n\n    return value;\n  }\n\n  function applyFrenchArticleAndBlogOverrides() {\n    var articleOverrides = window.NordbeltFrenchArticleOverrides || {};\n    var blogOverrides = window.NordbeltFrenchBlogOverrides || {};\n    var path = (window.location.pathname || '').toLowerCase();\n\n    var articleMatch = path.match(/\\/blogs\\/[^/]+\\/([^/?#]+)\\/?$/i);\n    if (articleMatch && path.indexOf('/blogs/blog-posts') > -1 && path.split('/').length > 4) {\n      var articleHandle = decodeURIComponent(articleMatch[1] || '');\n      var articleData = articleOverrides[articleHandle];\n      if (articleData) {\n        var articleSeoTitle = ensureNordbeltSuffix(articleData.metaTitle || articleData.title);\n        var articleSeoDescription = articleData.metaDescription || articleData.excerpt || '';\n        setNodeText(document.querySelector('.nb-article__title'), articleData.title);\n        setNodeText(document.querySelector('.nb-article__deck'), articleData.excerpt);\n        setNodeHtml(document.querySelector('.nb-article__rte'), normalizeShopifyFilesHtml(articleData.html));\n        if (articleData.dateText) {\n          setNodeText(document.querySelector('.nb-article-meta-pill.is-date'), articleData.dateText);\n        }\n        scheduleSeoHeadReapply(articleSeoTitle, articleSeoDescription);\n        setMetaContent('meta[property=\"og:title\"]', articleSeoTitle);\n        setMetaContent('meta[name=\"twitter:title\"]', articleSeoTitle);\n      }\n    }\n\n    var blogMatch = path.match(/\\/blogs\\/([^/?#]+)\\/?$/i);\n    if (blogMatch) {\n      var blogHandle = decodeURIComponent(blogMatch[1] || '');\n      var blogData = blogOverrides[blogHandle];\n      if (blogData) {\n        var blogSeoTitle = ensureNordbeltSuffix(blogData.metaTitle || blogData.title);\n        var blogSeoDescription = blogData.metaDescription || blogData.subtitle || '';\n        setNodeText(document.querySelector('.nb-page-title'), blogData.title);\n        setNodeText(document.querySelector('.nb-subtitle'), blogData.subtitle);\n        scheduleSeoHeadReapply(blogSeoTitle, blogSeoDescription);\n        setMetaContent('meta[property=\"og:title\"]', blogSeoTitle);\n        setMetaContent('meta[name=\"twitter:title\"]', blogSeoTitle);\n      }\n    }\n\n    var blogCards = document.querySelectorAll('.nb-blog-card');\n    for (var i = 0; i < blogCards.length; i += 1) {\n      var link = blogCards[i].querySelector('a[href*=\"/blogs/\"]');\n      if (!link) continue;\n      var handle = extractBlogArticleHandle(link.getAttribute('href'));\n      if (!handle) continue;\n      var cardData = articleOverrides[handle];\n      if (!cardData) continue;\n      setNodeText(blogCards[i].querySelector('.nb-card-title'), cardData.title);\n      setNodeText(blogCards[i].querySelector('.nb-card-copy'), cardData.excerpt);\n      var cardImage = blogCards[i].querySelector('img');\n      if (cardImage && cardData.title) {\n        cardImage.setAttribute('alt', cardData.title);\n      }\n    }\n\n    var productDescriptionNodes = document.querySelectorAll('[data-product-description-content], .nb-product-description__content');\n    for (var k = 0; k < productDescriptionNodes.length; k += 1) {\n      var descriptionNode = productDescriptionNodes[k];\n      if (!descriptionNode) continue;\n      var currentHtml = String(descriptionNode.innerHTML || '');\n      var normalizedHtml = currentHtml\n        .replace(/uten dyr maskin eller treningspartner\\./g, 'uten dyrt utstyr eller treningspartner.')\n        .replace(/uten partner eller dyr maskin\\./g, 'uten partner eller dyrt utstyr.');\n      if (normalizedHtml !== currentHtml) {\n        descriptionNode.innerHTML = normalizedHtml;\n      }\n    }\n\n    var norwegianSelectorFixes = [\n      {\n        selector: '.nb-footer__chips span',\n        expected: '30 dagers returrett',\n        bad: ['30-dagers returperiode']\n      },\n      {\n        selector: '.nb-footer__muted',\n        expected: 'Rotterdam, Nederland',\n        bad: ['Nederland, Rotterdam \uD83C\uDDF3\uD83C\uDDF1']\n      }\n    ];\n\n    for (var m = 0; m < norwegianSelectorFixes.length; m += 1) {\n      var fix = norwegianSelectorFixes[m];\n      var nodes = document.querySelectorAll(fix.selector);\n      for (var n = 0; n < nodes.length; n += 1) {\n        var current = (nodes[n].textContent || '').trim();\n        if (fix.bad.indexOf(current) > -1) {\n          nodes[n].textContent = fix.expected;\n        }\n      }\n    }\n  }\n\n  function applyGermanArticleOverrides() {\n    var articleOverrides = window.NordbeltGermanArticleOverrides || {};\n    var path = (window.location.pathname || '').toLowerCase();\n    var articleMatch = path.match(/\\/blogs\\/[^/]+\\/([^/?#]+)\\/?$/i);\n    if (articleMatch && path.indexOf('/blogs/blog-posts') > -1 && path.split('/').length > 4) {\n      var articleHandle = decodeURIComponent(articleMatch[1] || '');\n      var articleData = articleOverrides[articleHandle];\n      if (articleData) {\n        var articleSeoTitle = ensureNordbeltSuffix(articleData.metaTitle || articleData.title);\n        var articleSeoDescription = articleData.metaDescription || articleData.excerpt || '';\n        setNodeText(document.querySelector('.nb-article__title'), articleData.title);\n        setNodeText(document.querySelector('.nb-article__deck'), articleData.excerpt);\n        setNodeHtml(document.querySelector('.nb-article__rte'), normalizeShopifyFilesHtml(articleData.html));\n        if (articleData.dateText) {\n          setNodeText(document.querySelector('.nb-article-meta-pill.is-date'), articleData.dateText);\n        }\n        scheduleSeoHeadReapply(articleSeoTitle, articleSeoDescription);\n        setMetaContent('meta[property=\"og:title\"]', articleSeoTitle);\n        setMetaContent('meta[name=\"twitter:title\"]', articleSeoTitle);\n      }\n    }\n\n    var blogCards = document.querySelectorAll('.nb-blog-card');\n    for (var i = 0; i < blogCards.length; i += 1) {\n      var link = blogCards[i].querySelector('a[href*=\"/blogs/\"]');\n      if (!link) continue;\n      var handle = extractBlogArticleHandle(link.getAttribute('href'));\n      if (!handle) continue;\n      var cardData = articleOverrides[handle];\n      if (!cardData) continue;\n      setNodeText(blogCards[i].querySelector('.nb-card-title'), cardData.title);\n      setNodeText(blogCards[i].querySelector('.nb-card-copy'), cardData.excerpt);\n      if (cardData.dateText) {\n        setNodeText(blogCards[i].querySelector('.nb-blog-card__meta span:first-child'), cardData.dateText);\n      }\n      var cardImage = blogCards[i].querySelector('img');\n      if (cardImage && cardData.title) {\n        cardImage.setAttribute('alt', cardData.title);\n      }\n    }\n  }\n\n  function applyEnglishArticleOverrides() {\n    var articleOverrides = window.NordbeltEnglishArticleOverrides || {};\n    var path = (window.location.pathname || '').toLowerCase();\n    var articleMatch = path.match(/\\/blogs\\/[^/]+\\/([^/?#]+)\\/?$/i);\n    if (articleMatch && path.indexOf('/blogs/blog-posts') > -1 && path.split('/').length > 3) {\n      var articleHandle = decodeURIComponent(articleMatch[1] || '');\n      var articleData = articleOverrides[articleHandle];\n      if (articleData) {\n        var articleSeoTitle = ensureNordbeltSuffix(articleData.metaTitle || articleData.title);\n        var articleSeoDescription = articleData.metaDescription || articleData.excerpt || '';\n        setNodeText(document.querySelector('.nb-article__title'), articleData.title);\n        setNodeText(document.querySelector('.nb-article__deck'), articleData.excerpt);\n        setNodeHtml(document.querySelector('.nb-article__rte'), normalizeShopifyFilesHtml(articleData.html));\n        if (articleData.dateText) {\n          setNodeText(document.querySelector('.nb-article-meta-pill.is-date'), articleData.dateText);\n        }\n        scheduleSeoHeadReapply(articleSeoTitle, articleSeoDescription);\n        setMetaContent('meta[property=\"og:title\"]', articleSeoTitle);\n        setMetaContent('meta[name=\"twitter:title\"]', articleSeoTitle);\n      }\n    }\n\n    var blogCards = document.querySelectorAll('.nb-blog-card');\n    for (var i = 0; i < blogCards.length; i += 1) {\n      var link = blogCards[i].querySelector('a[href*=\"/blogs/\"]');\n      if (!link) continue;\n      var handle = extractBlogArticleHandle(link.getAttribute('href'));\n      if (!handle) continue;\n      var cardData = articleOverrides[handle];\n      if (!cardData) continue;\n      setNodeText(blogCards[i].querySelector('.nb-card-title'), cardData.title);\n      setNodeText(blogCards[i].querySelector('.nb-card-copy'), cardData.excerpt);\n      if (cardData.dateText) {\n        setNodeText(blogCards[i].querySelector('.nb-blog-card__meta span:first-child'), cardData.dateText);\n      }\n      var cardImage = blogCards[i].querySelector('img');\n      if (cardImage && cardData.title) {\n        cardImage.setAttribute('alt', cardData.title);\n      }\n    }\n  }\n\n  function applySwedishArticleOverrides() {\n    var articleOverrides = window.NordbeltSwedishArticleOverrides || {};\n    var path = (window.location.pathname || '').toLowerCase();\n    var articleMatch = path.match(/\\/blogs\\/[^/]+\\/([^/?#]+)\\/?$/i);\n    if (articleMatch && path.indexOf('/blogs/blog-posts') > -1 && path.split('/').length > 4) {\n      var articleHandle = decodeURIComponent(articleMatch[1] || '');\n      var articleData = articleOverrides[articleHandle];\n      if (articleData) {\n        var articleSeoTitle = ensureNordbeltSuffix(articleData.metaTitle || articleData.title);\n        var articleSeoDescription = articleData.metaDescription || articleData.excerpt || '';\n        setNodeText(document.querySelector('.nb-article__title'), articleData.title);\n        setNodeText(document.querySelector('.nb-article__deck'), articleData.excerpt);\n        setNodeHtml(document.querySelector('.nb-article__rte'), normalizeShopifyFilesHtml(articleData.html));\n        if (articleData.dateText) {\n          setNodeText(document.querySelector('.nb-article-meta-pill.is-date'), articleData.dateText);\n        }\n        scheduleSeoHeadReapply(articleSeoTitle, articleSeoDescription);\n        setMetaContent('meta[property=\"og:title\"]', articleSeoTitle);\n        setMetaContent('meta[name=\"twitter:title\"]', articleSeoTitle);\n      }\n    }\n\n    var blogCards = document.querySelectorAll('.nb-blog-card');\n    for (var i = 0; i < blogCards.length; i += 1) {\n      var link = blogCards[i].querySelector('a[href*=\"/blogs/\"]');\n      if (!link) continue;\n      var handle = extractBlogArticleHandle(link.getAttribute('href'));\n      if (!handle) continue;\n      var cardData = articleOverrides[handle];\n      if (!cardData) continue;\n      setNodeText(blogCards[i].querySelector('.nb-card-title'), cardData.title);\n      setNodeText(blogCards[i].querySelector('.nb-card-copy'), cardData.excerpt);\n      if (cardData.dateText) {\n        setNodeText(blogCards[i].querySelector('.nb-blog-card__meta span:first-child'), cardData.dateText);\n      }\n      var cardImage = blogCards[i].querySelector('img');\n      if (cardImage && cardData.title) {\n        cardImage.setAttribute('alt', cardData.title);\n      }\n    }\n  }\n\n  function applyDanishArticleOverrides() {\n    var articleOverrides = window.NordbeltDanishArticleOverrides || {};\n    var path = (window.location.pathname || '').toLowerCase();\n    var articleMatch = path.match(/\\/blogs\\/[^/]+\\/([^/?#]+)\\/?$/i);\n    if (articleMatch && path.indexOf('/blogs/blog-posts') > -1 && path.split('/').length > 4) {\n      var articleHandle = decodeURIComponent(articleMatch[1] || '');\n      var articleData = articleOverrides[articleHandle];\n      if (articleData) {\n        var articleSeoTitle = ensureNordbeltSuffix(articleData.metaTitle || articleData.title);\n        var articleSeoDescription = articleData.metaDescription || articleData.excerpt || '';\n        setNodeText(document.querySelector('.nb-article__title'), articleData.title);\n        setNodeText(document.querySelector('.nb-article__deck'), articleData.excerpt);\n        setNodeHtml(document.querySelector('.nb-article__rte'), normalizeShopifyFilesHtml(articleData.html));\n        if (articleData.dateText) {\n          setNodeText(document.querySelector('.nb-article-meta-pill.is-date'), articleData.dateText);\n        }\n        scheduleSeoHeadReapply(articleSeoTitle, articleSeoDescription);\n        setMetaContent('meta[property=\"og:title\"]', articleSeoTitle);\n        setMetaContent('meta[name=\"twitter:title\"]', articleSeoTitle);\n      }\n    }\n\n    var blogCards = document.querySelectorAll('.nb-blog-card');\n    for (var i = 0; i < blogCards.length; i += 1) {\n      var link = blogCards[i].querySelector('a[href*=\"/blogs/\"]');\n      if (!link) continue;\n      var handle = extractBlogArticleHandle(link.getAttribute('href'));\n      if (!handle) continue;\n      var cardData = articleOverrides[handle];\n      if (!cardData) continue;\n      setNodeText(blogCards[i].querySelector('.nb-card-title'), cardData.title);\n      setNodeText(blogCards[i].querySelector('.nb-card-copy'), cardData.excerpt);\n      if (cardData.dateText) {\n        setNodeText(blogCards[i].querySelector('.nb-blog-card__meta span:first-child'), cardData.dateText);\n      }\n      var cardImage = blogCards[i].querySelector('img');\n      if (cardImage && cardData.title) {\n        cardImage.setAttribute('alt', cardData.title);\n      }\n    }\n  }\n\n  function applyEstonianArticleOverrides() {\n    var articleOverrides = window.NordbeltEstonianArticleOverrides || {};\n    var path = (window.location.pathname || '').toLowerCase();\n    var articleMatch = path.match(/\\/blogs\\/[^/]+\\/([^/?#]+)\\/?$/i);\n    if (articleMatch && path.indexOf('/blogs/blog-posts') > -1 && path.split('/').length > 4) {\n      var articleHandle = decodeURIComponent(articleMatch[1] || '');\n      var articleData = articleOverrides[articleHandle];\n      if (articleData) {\n        var articleSeoTitle = ensureNordbeltSuffix(articleData.metaTitle || articleData.title);\n        var articleSeoDescription = articleData.metaDescription || articleData.excerpt || '';\n        setNodeText(document.querySelector('.nb-article__title'), articleData.title);\n        setNodeText(document.querySelector('.nb-article__deck'), articleData.excerpt);\n        setNodeHtml(document.querySelector('.nb-article__rte'), normalizeShopifyFilesHtml(articleData.html));\n        if (articleData.dateText) {\n          setNodeText(document.querySelector('.nb-article-meta-pill.is-date'), articleData.dateText);\n        }\n        scheduleSeoHeadReapply(articleSeoTitle, articleSeoDescription);\n        setMetaContent('meta[property=\"og:title\"]', articleSeoTitle);\n        setMetaContent('meta[name=\"twitter:title\"]', articleSeoTitle);\n      }\n    }\n\n    var blogCards = document.querySelectorAll('.nb-blog-card');\n    for (var i = 0; i < blogCards.length; i += 1) {\n      var link = blogCards[i].querySelector('a[href*=\"/blogs/\"]');\n      if (!link) continue;\n      var handle = extractBlogArticleHandle(link.getAttribute('href'));\n      if (!handle) continue;\n      var cardData = articleOverrides[handle];\n      if (!cardData) continue;\n      setNodeText(blogCards[i].querySelector('.nb-card-title'), cardData.title);\n      setNodeText(blogCards[i].querySelector('.nb-card-copy'), cardData.excerpt);\n      if (cardData.dateText) {\n        setNodeText(blogCards[i].querySelector('.nb-blog-card__meta span:first-child'), cardData.dateText);\n      }\n      var cardImage = blogCards[i].querySelector('img');\n      if (cardImage && cardData.title) {\n        cardImage.setAttribute('alt', cardData.title);\n      }\n    }\n  }\n\n  function applySpanishArticleOverrides() {\n    var articleOverrides = window.NordbeltSpanishArticleOverrides || {};\n    var path = (window.location.pathname || '').toLowerCase();\n    var articleMatch = path.match(/\\/blogs\\/[^/]+\\/([^/?#]+)\\/?$/i);\n    if (articleMatch && path.indexOf('/blogs/blog-posts') > -1 && path.split('/').length > 4) {\n      var articleHandle = decodeURIComponent(articleMatch[1] || '');\n      var articleData = articleOverrides[articleHandle];\n      if (articleData) {\n        var articleSeoTitle = ensureNordbeltSuffix(articleData.metaTitle || articleData.title);\n        var articleSeoDescription = articleData.metaDescription || articleData.excerpt || '';\n        setNodeText(document.querySelector('.nb-article__title'), articleData.title);\n        setNodeText(document.querySelector('.nb-article__deck'), articleData.excerpt);\n        setNodeHtml(document.querySelector('.nb-article__rte'), normalizeShopifyFilesHtml(articleData.html));\n        if (articleData.dateText) {\n          setNodeText(document.querySelector('.nb-article-meta-pill.is-date'), articleData.dateText);\n        }\n        scheduleSeoHeadReapply(articleSeoTitle, articleSeoDescription);\n        setMetaContent('meta[property=\"og:title\"]', articleSeoTitle);\n        setMetaContent('meta[name=\"twitter:title\"]', articleSeoTitle);\n      }\n    }\n\n    var blogCards = document.querySelectorAll('.nb-blog-card');\n    for (var i = 0; i < blogCards.length; i += 1) {\n      var link = blogCards[i].querySelector('a[href*=\"/blogs/\"]');\n      if (!link) continue;\n      var handle = extractBlogArticleHandle(link.getAttribute('href'));\n      if (!handle) continue;\n      var cardData = articleOverrides[handle];\n      if (!cardData) continue;\n      setNodeText(blogCards[i].querySelector('.nb-card-title'), cardData.title);\n      setNodeText(blogCards[i].querySelector('.nb-card-copy'), cardData.excerpt);\n      if (cardData.dateText) {\n        setNodeText(blogCards[i].querySelector('.nb-blog-card__meta span:first-child'), cardData.dateText);\n      }\n      var cardImage = blogCards[i].querySelector('img');\n      if (cardImage && cardData.title) {\n        cardImage.setAttribute('alt', cardData.title);\n      }\n    }\n  }\n\n  function applyItalianArticleOverrides() {\n    var articleOverrides = window.NordbeltItalianArticleOverrides || {};\n    var path = (window.location.pathname || '').toLowerCase();\n    var articleMatch = path.match(/\\/blogs\\/[^/]+\\/([^/?#]+)\\/?$/i);\n    if (articleMatch && path.indexOf('/blogs/blog-posts') > -1 && path.split('/').length > 4) {\n      var articleHandle = decodeURIComponent(articleMatch[1] || '');\n      var articleData = articleOverrides[articleHandle];\n      if (articleData) {\n        var articleSeoTitle = ensureNordbeltSuffix(articleData.metaTitle || articleData.title);\n        var articleSeoDescription = articleData.metaDescription || articleData.excerpt || '';\n        setNodeText(document.querySelector('.nb-article__title'), articleData.title);\n        setNodeText(document.querySelector('.nb-article__deck'), articleData.excerpt);\n        setNodeHtml(document.querySelector('.nb-article__rte'), normalizeShopifyFilesHtml(articleData.html));\n        if (articleData.dateText) {\n          setNodeText(document.querySelector('.nb-article-meta-pill.is-date'), articleData.dateText);\n        }\n        scheduleSeoHeadReapply(articleSeoTitle, articleSeoDescription);\n        setMetaContent('meta[property=\"og:title\"]', articleSeoTitle);\n        setMetaContent('meta[name=\"twitter:title\"]', articleSeoTitle);\n      }\n    }\n\n    var blogCards = document.querySelectorAll('.nb-blog-card');\n    for (var i = 0; i < blogCards.length; i += 1) {\n      var link = blogCards[i].querySelector('a[href*=\"/blogs/\"]');\n      if (!link) continue;\n      var handle = extractBlogArticleHandle(link.getAttribute('href'));\n      if (!handle) continue;\n      var cardData = articleOverrides[handle];\n      if (!cardData) continue;\n      setNodeText(blogCards[i].querySelector('.nb-card-title'), cardData.title);\n      setNodeText(blogCards[i].querySelector('.nb-card-copy'), cardData.excerpt);\n      if (cardData.dateText) {\n        setNodeText(blogCards[i].querySelector('.nb-blog-card__meta span:first-child'), cardData.dateText);\n      }\n      var cardImage = blogCards[i].querySelector('img');\n      if (cardImage && cardData.title) {\n        cardImage.setAttribute('alt', cardData.title);\n      }\n    }\n  }\n\n  function applyFinnishArticleOverrides() {\n    var articleOverrides = window.NordbeltFinnishArticleOverrides || {};\n    var path = (window.location.pathname || '').toLowerCase();\n    var articleMatch = path.match(/\\/blogs\\/[^/]+\\/([^/?#]+)\\/?$/i);\n    if (articleMatch && path.indexOf('/blogs/blog-posts') > -1 && path.split('/').length > 4) {\n      var articleHandle = decodeURIComponent(articleMatch[1] || '');\n      var articleData = articleOverrides[articleHandle];\n      if (articleData) {\n        var articleSeoTitle = ensureNordbeltSuffix(articleData.metaTitle || articleData.title);\n        var articleSeoDescription = articleData.metaDescription || articleData.excerpt || '';\n        setNodeText(document.querySelector('.nb-article__title'), articleData.title);\n        setNodeText(document.querySelector('.nb-article__deck'), articleData.excerpt);\n        setNodeHtml(document.querySelector('.nb-article__rte'), normalizeShopifyFilesHtml(articleData.html));\n        if (articleData.dateText) {\n          setNodeText(document.querySelector('.nb-article-meta-pill.is-date'), articleData.dateText);\n        }\n        scheduleSeoHeadReapply(articleSeoTitle, articleSeoDescription);\n        setMetaContent('meta[property=\"og:title\"]', articleSeoTitle);\n        setMetaContent('meta[name=\"twitter:title\"]', articleSeoTitle);\n      }\n    }\n\n    var blogCards = document.querySelectorAll('.nb-blog-card');\n    for (var i = 0; i < blogCards.length; i += 1) {\n      var link = blogCards[i].querySelector('a[href*=\"/blogs/\"]');\n      if (!link) continue;\n      var handle = extractBlogArticleHandle(link.getAttribute('href'));\n      if (!handle) continue;\n      var cardData = articleOverrides[handle];\n      if (!cardData) continue;\n      setNodeText(blogCards[i].querySelector('.nb-card-title'), cardData.title);\n      setNodeText(blogCards[i].querySelector('.nb-card-copy'), cardData.excerpt);\n      if (cardData.dateText) {\n        setNodeText(blogCards[i].querySelector('.nb-blog-card__meta span:first-child'), cardData.dateText);\n      }\n      var cardImage = blogCards[i].querySelector('img');\n      if (cardImage && cardData.title) {\n        cardImage.setAttribute('alt', cardData.title);\n      }\n    }\n  }\n\n  function applyNorwegianArticleOverrides() {\n    var articleOverrides = window.NordbeltNorwegianArticleOverrides || {};\n    var path = (window.location.pathname || '').toLowerCase();\n    var articleMatch = path.match(/\\/blogs\\/[^/]+\\/([^/?#]+)\\/?$/i);\n    if (articleMatch && path.indexOf('/blogs/blog-posts') > -1 && path.split('/').length > 4) {\n      var articleHandle = decodeURIComponent(articleMatch[1] || '');\n      var articleData = articleOverrides[articleHandle];\n      if (articleData) {\n        var articleSeoTitle = ensureNordbeltSuffix(articleData.metaTitle || articleData.title);\n        var articleSeoDescription = articleData.metaDescription || articleData.excerpt || '';\n        setNodeText(document.querySelector('.nb-article__title'), articleData.title);\n        setNodeText(document.querySelector('.nb-article__deck'), articleData.excerpt);\n        setNodeHtml(document.querySelector('.nb-article__rte'), normalizeShopifyFilesHtml(articleData.html));\n        if (articleData.dateText) {\n          setNodeText(document.querySelector('.nb-article-meta-pill.is-date'), articleData.dateText);\n        }\n        scheduleSeoHeadReapply(articleSeoTitle, articleSeoDescription);\n        setMetaContent('meta[property=\"og:title\"]', articleSeoTitle);\n        setMetaContent('meta[name=\"twitter:title\"]', articleSeoTitle);\n      }\n    }\n\n    var blogCards = document.querySelectorAll('.nb-blog-card');\n    for (var i = 0; i < blogCards.length; i += 1) {\n      var link = blogCards[i].querySelector('a[href*=\"/blogs/\"]');\n      if (!link) continue;\n      var handle = extractBlogArticleHandle(link.getAttribute('href'));\n      if (!handle) continue;\n      var cardData = articleOverrides[handle];\n      if (!cardData) continue;\n      setNodeText(blogCards[i].querySelector('.nb-card-title'), cardData.title);\n      setNodeText(blogCards[i].querySelector('.nb-card-copy'), cardData.excerpt);\n      if (cardData.dateText) {\n        setNodeText(blogCards[i].querySelector('.nb-blog-card__meta span:first-child'), cardData.dateText);\n      }\n      var cardImage = blogCards[i].querySelector('img');\n      if (cardImage && cardData.title) {\n        cardImage.setAttribute('alt', cardData.title);\n      }\n    }\n  }\n\n  function installFrenchCopyGuards() {\n    if (typeof window === 'undefined' || typeof document === 'undefined') return;\n    if (getLocaleRoot() !== 'fr') return;\n\n    var selectorFixes = [\n      {\n        selector: '.nb-feature-split__stats .nb-stat:nth-child(3) strong',\n        expected: 'Exp\u00E9dition le jour m\u00EAme',\n        bad: ['1-2 jours ouvrables', 'Livraison rapide']\n      },\n      {\n        selector: '[data-nb-product-trust-shipping], .nb-trust-list li:nth-child(3) span:last-child',\n        expected: 'Exp\u00E9dition le jour m\u00EAme',\n        bad: ['Livraison rapide', '1-2 jours ouvrables']\n      },\n      {\n        selector: '.nb-card-bullet, .nb-chip, .nb-proof-chip, .nb-trust-chip',\n        expected: 'Exp\u00E9dition le jour m\u00EAme',\n        bad: ['Livraison rapide', '1-2 jours ouvrables']\n      },\n      {\n        selector: '.nb-product__status-row .nb-kicker',\n        expected: 'Disponible',\n        bad: ['Imm\u00E9diatement disponible']\n      }\n    ];\n\n    var applyFrenchPathOverrides = function () {\n      var path = (window.location.pathname || '').toLowerCase();\n      var titleNode = document.querySelector('.nb-page-shell__title');\n      var rteNode = document.querySelector('.nb-page-shell__rte');\n\n      if (path.indexOf('/pages/request-a-quote') > -1) {\n        if (titleNode) {\n          titleNode.textContent = 'Demander un devis';\n        }\n        if (rteNode) {\n          rteNode.innerHTML = '<p>Vous souhaitez \u00E9quiper un cabinet, une \u00E9quipe ou une organisation avec Nordbelt ? Envoyez-nous votre demande et nous vous r\u00E9pondrons avec une proposition claire, adapt\u00E9e \u00E0 votre contexte.</p><p>Nous pouvons vous aider pour les quantit\u00E9s, l\\'usage pr\u00E9vu, le d\u00E9ploiement pratique et les questions de facturation. L\\'objectif est simple : vous permettre de d\u00E9marrer rapidement avec une solution fiable pour l\\'entra\u00EEnement des ischio-jambiers.</p>';\n        }\n      }\n\n      if (path.indexOf('/pages/healthcare-professionals') > -1) {\n        if (titleNode) {\n          titleNode.textContent = 'Professionnels de la sant\u00E9';\n        }\n        if (rteNode) {\n          rteNode.innerHTML = '<p>Nordbelt aide les kin\u00E9sith\u00E9rapeutes, pr\u00E9parateurs physiques et \u00E9quipes m\u00E9dicales \u00E0 mettre en place un travail progressif des ischio-jambiers dans un cadre reproductible.</p><p>L\\'outil est rapide \u00E0 installer, facile \u00E0 doser et simple \u00E0 int\u00E9grer dans des protocoles de reprise, de pr\u00E9vention et de renforcement. Pour une demande cabinet ou \u00E9quipe, utilisez la page de devis afin que nous puissions vous r\u00E9pondre de mani\u00E8re cibl\u00E9e.</p>';\n        }\n      }\n\n      if (path.indexOf('/pages/safety-report-following-iso-20957-guidelines') > -1) {\n        if (titleNode) {\n          titleNode.textContent = 'Rapport de s\u00E9curit\u00E9 (ISO 20957)';\n        }\n        if (rteNode) {\n          rteNode.innerHTML = '<p>Chez Nordbelt, la s\u00E9curit\u00E9 du produit est un point central. Nordbelt supporte jusqu\\'\u00E0 <strong>1 780 newtons</strong> de force de traction, soit une marge largement suffisante pour l\\'usage pr\u00E9vu dans le cadre des exercices de type Nordic Hamstring Curl.</p><p>Cette page r\u00E9sume le contexte des tests, les conditions d\\'utilisation et les pr\u00E9cautions pratiques en lien avec les lignes directrices ISO 20957. Une fixation correcte, un support stable et une progression adapt\u00E9e restent essentiels pour un usage s\u00FBr.</p>';\n        }\n      }\n\n      if (path.indexOf('/products/sliders') > -1) {\n        var slidersDescription = document.querySelector('.nb-product-description__content');\n        if (slidersDescription && /Sliders to perform eccentric hamstring bridges at home/i.test(slidersDescription.textContent || '')) {\n          slidersDescription.innerHTML = '<p>Les Sliders Nordbelt permettent de r\u00E9aliser des ponts ischio-jambiers excentriques et d\\'autres variations de contr\u00F4le \u00E0 la maison, en salle ou sur le terrain.</p><p>Ils sont compacts, simples \u00E0 emporter et particuli\u00E8rement utiles pour l\\'\u00E9chauffement, le travail de gainage et les exercices d\\'assistance autour des ischio-jambiers.</p>';\n        }\n      }\n    };\n\n    var scheduled = false;\n    var syncFrenchCopy = function () {\n      var root = document;\n      for (var i = 0; i < selectorFixes.length; i += 1) {\n        var fix = selectorFixes[i];\n        var nodes = root.querySelectorAll(fix.selector);\n        for (var j = 0; j < nodes.length; j += 1) {\n          var current = (nodes[j].textContent || '').trim();\n          if (fix.bad.indexOf(current) > -1) {\n            nodes[j].textContent = fix.expected;\n          }\n        }\n      }\n\n      normalizeFrenchPolicyCopy(document.body || document.documentElement);\n      rewriteFrenchLocalizedLinks(document);\n      applyFrenchPathOverrides();\n      applyFrenchArticleAndBlogOverrides();\n    };\n\n    var scheduleSync = function () {\n      if (scheduled) return;\n      scheduled = true;\n      window.requestAnimationFrame(function () {\n        scheduled = false;\n        syncFrenchCopy();\n      });\n    };\n\n    var start = function () {\n      ensureFrenchOverrideAsset(scheduleSync);\n      syncFrenchCopy();\n      if (!document.body || !window.MutationObserver) return;\n      var observer = new MutationObserver(function () {\n        scheduleSync();\n      });\n      observer.observe(document.body, {\n        childList: true,\n        subtree: true,\n        characterData: true,\n        attributes: true,\n        attributeFilter: ['href']\n      });\n      window.addEventListener('pagehide', function () {\n        observer.disconnect();\n      }, { once: true });\n      window.setTimeout(syncFrenchCopy, 300);\n      window.setTimeout(syncFrenchCopy, 1200);\n      window.setTimeout(syncFrenchCopy, 2500);\n    };\n\n    if (document.readyState === 'loading') {\n      document.addEventListener('DOMContentLoaded', start, { once: true });\n    } else {\n      start();\n    }\n\n    window.addEventListener('load', function () {\n      syncFrenchCopy();\n    }, { once: true });\n  }\n\n  installFrenchCopyGuards();\n\n  function installGermanArticleGuards() {\n    if (typeof window === 'undefined' || typeof document === 'undefined') return;\n    if (getLocaleRoot() !== 'de') return;\n\n    var scheduled = false;\n    var syncGermanCopy = function () {\n      applyGermanArticleOverrides();\n    };\n\n    var scheduleSync = function () {\n      if (scheduled) return;\n      scheduled = true;\n      window.requestAnimationFrame(function () {\n        scheduled = false;\n        syncGermanCopy();\n      });\n    };\n\n    var start = function () {\n      ensureGermanOverrideAsset(scheduleSync);\n      syncGermanCopy();\n      if (!document.body || !window.MutationObserver) return;\n      var observer = new MutationObserver(function () {\n        scheduleSync();\n      });\n      observer.observe(document.body, {\n        childList: true,\n        subtree: true,\n        characterData: true,\n        attributes: true,\n        attributeFilter: ['href']\n      });\n      window.addEventListener('pagehide', function () {\n        observer.disconnect();\n      }, { once: true });\n      window.setTimeout(syncGermanCopy, 300);\n      window.setTimeout(syncGermanCopy, 1200);\n      window.setTimeout(syncGermanCopy, 2500);\n    };\n\n    if (document.readyState === 'loading') {\n      document.addEventListener('DOMContentLoaded', start, { once: true });\n    } else {\n      start();\n    }\n\n    window.addEventListener('load', function () {\n      syncGermanCopy();\n    }, { once: true });\n  }\n\n  installGermanArticleGuards();\n\n  function installEnglishArticleGuards() {\n    if (typeof window === 'undefined' || typeof document === 'undefined') return;\n    if (!isEnglishStorefront()) return;\n\n    var scheduled = false;\n    var syncEnglishCopy = function () {\n      applyEnglishArticleOverrides();\n    };\n\n    var scheduleSync = function () {\n      if (scheduled) return;\n      scheduled = true;\n      window.requestAnimationFrame(function () {\n        scheduled = false;\n        syncEnglishCopy();\n      });\n    };\n\n    var start = function () {\n      ensureEnglishOverrideAsset(scheduleSync);\n      syncEnglishCopy();\n      if (!document.body || !window.MutationObserver) return;\n      var observer = new MutationObserver(function () {\n        scheduleSync();\n      });\n      observer.observe(document.body, {\n        childList: true,\n        subtree: true,\n        characterData: true,\n        attributes: true,\n        attributeFilter: ['href']\n      });\n      window.addEventListener('pagehide', function () {\n        observer.disconnect();\n      }, { once: true });\n      window.setTimeout(syncEnglishCopy, 300);\n      window.setTimeout(syncEnglishCopy, 1200);\n      window.setTimeout(syncEnglishCopy, 2500);\n    };\n\n    if (document.readyState === 'loading') {\n      document.addEventListener('DOMContentLoaded', start, { once: true });\n    } else {\n      start();\n    }\n\n    window.addEventListener('load', function () {\n      syncEnglishCopy();\n    }, { once: true });\n  }\n\n  installEnglishArticleGuards();\n\n  function installSwedishArticleGuards() {\n    if (typeof window === 'undefined' || typeof document === 'undefined') return;\n    if (!isSwedishLocaleActive()) return;\n\n    var scheduled = false;\n    var syncSwedishCopy = function () {\n      applySwedishArticleOverrides();\n    };\n\n    var scheduleSync = function () {\n      if (scheduled) return;\n      scheduled = true;\n      window.requestAnimationFrame(function () {\n        scheduled = false;\n        syncSwedishCopy();\n      });\n    };\n\n    var start = function () {\n      ensureSwedishOverrideAsset(scheduleSync);\n      syncSwedishCopy();\n      if (!document.body || !window.MutationObserver) return;\n      var observer = new MutationObserver(function () {\n        scheduleSync();\n      });\n      observer.observe(document.body, {\n        childList: true,\n        subtree: true,\n        characterData: true,\n        attributes: true,\n        attributeFilter: ['href']\n      });\n      window.addEventListener('pagehide', function () {\n        observer.disconnect();\n      }, { once: true });\n      window.setTimeout(syncSwedishCopy, 300);\n      window.setTimeout(syncSwedishCopy, 1200);\n      window.setTimeout(syncSwedishCopy, 2500);\n    };\n\n    if (document.readyState === 'loading') {\n      document.addEventListener('DOMContentLoaded', start, { once: true });\n    } else {\n      start();\n    }\n\n    window.addEventListener('load', function () {\n      syncSwedishCopy();\n    }, { once: true });\n  }\n\n  installSwedishArticleGuards();\n\n  function installDanishArticleGuards() {\n    if (typeof window === 'undefined' || typeof document === 'undefined') return;\n    if (!isDanishLocaleActive()) return;\n\n    var scheduled = false;\n    var syncDanishCopy = function () {\n      applyDanishArticleOverrides();\n    };\n\n    var scheduleSync = function () {\n      if (scheduled) return;\n      scheduled = true;\n      window.requestAnimationFrame(function () {\n        scheduled = false;\n        syncDanishCopy();\n      });\n    };\n\n    var start = function () {\n      ensureDanishOverrideAsset(scheduleSync);\n      syncDanishCopy();\n      if (!document.body || !window.MutationObserver) return;\n      var observer = new MutationObserver(function () {\n        scheduleSync();\n      });\n      observer.observe(document.body, {\n        childList: true,\n        subtree: true,\n        characterData: true,\n        attributes: true,\n        attributeFilter: ['href']\n      });\n      window.addEventListener('pagehide', function () {\n        observer.disconnect();\n      }, { once: true });\n      window.setTimeout(syncDanishCopy, 300);\n      window.setTimeout(syncDanishCopy, 1200);\n      window.setTimeout(syncDanishCopy, 2500);\n    };\n\n    if (document.readyState === 'loading') {\n      document.addEventListener('DOMContentLoaded', start, { once: true });\n    } else {\n      start();\n    }\n\n    window.addEventListener('load', function () {\n      syncDanishCopy();\n    }, { once: true });\n  }\n\n  installDanishArticleGuards();\n\n  function installEstonianArticleGuards() {\n    if (typeof window === 'undefined' || typeof document === 'undefined') return;\n    if (!isEstonianLocaleActive()) return;\n\n    var scheduled = false;\n    var syncEstonianCopy = function () {\n      applyEstonianArticleOverrides();\n    };\n\n    var scheduleSync = function () {\n      if (scheduled) return;\n      scheduled = true;\n      window.requestAnimationFrame(function () {\n        scheduled = false;\n        syncEstonianCopy();\n      });\n    };\n\n    var start = function () {\n      ensureEstonianOverrideAsset(scheduleSync);\n      syncEstonianCopy();\n      if (!document.body || !window.MutationObserver) return;\n      var observer = new MutationObserver(function () {\n        scheduleSync();\n      });\n      observer.observe(document.body, {\n        childList: true,\n        subtree: true,\n        characterData: true,\n        attributes: true,\n        attributeFilter: ['href']\n      });\n      window.addEventListener('pagehide', function () {\n        observer.disconnect();\n      }, { once: true });\n      window.setTimeout(syncEstonianCopy, 300);\n      window.setTimeout(syncEstonianCopy, 1200);\n      window.setTimeout(syncEstonianCopy, 2500);\n    };\n\n    if (document.readyState === 'loading') {\n      document.addEventListener('DOMContentLoaded', start, { once: true });\n    } else {\n      start();\n    }\n\n    window.addEventListener('load', function () {\n      syncEstonianCopy();\n    }, { once: true });\n  }\n\n  installEstonianArticleGuards();\n\n  function installSpanishArticleGuards() {\n    if (typeof window === 'undefined' || typeof document === 'undefined') return;\n    if (!isSpanishLocaleActive()) return;\n\n    var scheduled = false;\n    var syncSpanishCopy = function () {\n      applySpanishArticleOverrides();\n    };\n\n    var scheduleSync = function () {\n      if (scheduled) return;\n      scheduled = true;\n      window.requestAnimationFrame(function () {\n        scheduled = false;\n        syncSpanishCopy();\n      });\n    };\n\n    var start = function () {\n      ensureSpanishOverrideAsset(scheduleSync);\n      syncSpanishCopy();\n      if (!document.body || !window.MutationObserver) return;\n      var observer = new MutationObserver(function () {\n        scheduleSync();\n      });\n      observer.observe(document.body, {\n        childList: true,\n        subtree: true,\n        characterData: true,\n        attributes: true,\n        attributeFilter: ['href']\n      });\n      window.addEventListener('pagehide', function () {\n        observer.disconnect();\n      }, { once: true });\n      window.setTimeout(syncSpanishCopy, 300);\n      window.setTimeout(syncSpanishCopy, 1200);\n      window.setTimeout(syncSpanishCopy, 2500);\n    };\n\n    if (document.readyState === 'loading') {\n      document.addEventListener('DOMContentLoaded', start, { once: true });\n    } else {\n      start();\n    }\n\n    window.addEventListener('load', function () {\n      syncSpanishCopy();\n    }, { once: true });\n  }\n\n  installSpanishArticleGuards();\n\n  function installItalianArticleGuards() {\n    if (typeof window === 'undefined' || typeof document === 'undefined') return;\n    if (!isItalianLocaleActive()) return;\n\n    var scheduled = false;\n    var syncItalianCopy = function () {\n      applyItalianArticleOverrides();\n    };\n\n    var scheduleSync = function () {\n      if (scheduled) return;\n      scheduled = true;\n      window.requestAnimationFrame(function () {\n        scheduled = false;\n        syncItalianCopy();\n      });\n    };\n\n    var start = function () {\n      ensureItalianOverrideAsset(scheduleSync);\n      syncItalianCopy();\n      if (!document.body || !window.MutationObserver) return;\n      var observer = new MutationObserver(function () {\n        scheduleSync();\n      });\n      observer.observe(document.body, {\n        childList: true,\n        subtree: true,\n        characterData: true,\n        attributes: true,\n        attributeFilter: ['href']\n      });\n      window.addEventListener('pagehide', function () {\n        observer.disconnect();\n      }, { once: true });\n      window.setTimeout(syncItalianCopy, 300);\n      window.setTimeout(syncItalianCopy, 1200);\n      window.setTimeout(syncItalianCopy, 2500);\n    };\n\n    if (document.readyState === 'loading') {\n      document.addEventListener('DOMContentLoaded', start, { once: true });\n    } else {\n      start();\n    }\n\n    window.addEventListener('load', function () {\n      syncItalianCopy();\n    }, { once: true });\n  }\n\n  installItalianArticleGuards();\n\n  function installFinnishArticleGuards() {\n    if (typeof window === 'undefined' || typeof document === 'undefined') return;\n    if (!isFinnishLocaleActive()) return;\n\n    var scheduled = false;\n    var syncFinnishCopy = function () {\n      applyFinnishArticleOverrides();\n    };\n\n    var scheduleSync = function () {\n      if (scheduled) return;\n      scheduled = true;\n      window.requestAnimationFrame(function () {\n        scheduled = false;\n        syncFinnishCopy();\n      });\n    };\n\n    var start = function () {\n      ensureFinnishOverrideAsset(scheduleSync);\n      syncFinnishCopy();\n      if (!document.body || !window.MutationObserver) return;\n      var observer = new MutationObserver(function () {\n        scheduleSync();\n      });\n      observer.observe(document.body, {\n        childList: true,\n        subtree: true,\n        characterData: true,\n        attributes: true,\n        attributeFilter: ['href']\n      });\n      window.addEventListener('pagehide', function () {\n        observer.disconnect();\n      }, { once: true });\n      window.setTimeout(syncFinnishCopy, 300);\n      window.setTimeout(syncFinnishCopy, 1200);\n      window.setTimeout(syncFinnishCopy, 2500);\n    };\n\n    if (document.readyState === 'loading') {\n      document.addEventListener('DOMContentLoaded', start, { once: true });\n    } else {\n      start();\n    }\n\n    window.addEventListener('load', function () {\n      syncFinnishCopy();\n    }, { once: true });\n  }\n\n  installFinnishArticleGuards();\n\n  function installNorwegianArticleGuards() {\n    if (typeof window === 'undefined' || typeof document === 'undefined') return;\n    if (!isNorwegianLocaleActive()) return;\n\n    var scheduled = false;\n    var syncNorwegianCopy = function () {\n      applyNorwegianArticleOverrides();\n    };\n\n    var scheduleSync = function () {\n      if (scheduled) return;\n      scheduled = true;\n      window.requestAnimationFrame(function () {\n        scheduled = false;\n        syncNorwegianCopy();\n      });\n    };\n\n    var start = function () {\n      ensureNorwegianOverrideAsset(scheduleSync);\n      syncNorwegianCopy();\n      if (!document.body || !window.MutationObserver) return;\n      var observer = new MutationObserver(function () {\n        scheduleSync();\n      });\n      observer.observe(document.body, {\n        childList: true,\n        subtree: true,\n        characterData: true,\n        attributes: true,\n        attributeFilter: ['href']\n      });\n      window.addEventListener('pagehide', function () {\n        observer.disconnect();\n      }, { once: true });\n      window.setTimeout(syncNorwegianCopy, 300);\n      window.setTimeout(syncNorwegianCopy, 1200);\n      window.setTimeout(syncNorwegianCopy, 2500);\n      window.setTimeout(syncNorwegianCopy, 3300);\n      window.setTimeout(syncNorwegianCopy, 5000);\n      window.setTimeout(syncNorwegianCopy, 8000);\n    };\n\n    if (document.readyState === 'loading') {\n      document.addEventListener('DOMContentLoaded', start, { once: true });\n    } else {\n      start();\n    }\n\n    window.addEventListener('load', function () {\n      syncNorwegianCopy();\n    }, { once: true });\n  }\n\n  installNorwegianArticleGuards();\n  installLocalizedPracticeArticleLinks();\n\n  function cleanEventDedupCache() {\n    var now = Date.now();\n    Object.keys(eventDedupCache).forEach(function (key) {\n      if (now - eventDedupCache[key] > eventDedupTtlMs) {\n        delete eventDedupCache[key];\n      }\n    });\n  }\n\n  function buildEventDedupKey(payload) {\n    if (!payload || !payload.event_id || !payload.event) return '';\n    return String(payload.event) + '::' + String(payload.event_id);\n  }\n\n  function markEventSeen(payload) {\n    var key = buildEventDedupKey(payload);\n    if (!key) return true;\n    cleanEventDedupCache();\n    if (eventDedupCache[key]) return false;\n    eventDedupCache[key] = Date.now();\n    return true;\n  }\n\n  function createEventId(prefix) {\n    return (prefix || 'nb') + '_' + Date.now() + '_' + Math.random().toString(36).slice(2, 10);\n  }\n\n  function withEventMeta(payload, prefix) {\n    var eventName = payload && payload.event ? String(payload.event) : '';\n    if (!eventName) return payload;\n    if (!payload.event_id) payload.event_id = createEventId(prefix || eventName);\n    if (!payload.event_time) payload.event_time = new Date().toISOString();\n    return payload;\n  }\n\n  function isBlogCtaGa4MeasurementEvent(eventName) {\n    return String(eventName || '').indexOf('blog_cta_') === 0 || eventName === 'blog_home_tail_engaged_view';\n  }\n\n  function buildBlogCtaGa4Payload(payload) {\n    var allowedKeys = [\n      'event_id', 'article_slug', 'article_locale_root', 'cro_profile', 'product_relevance',\n      'query_family_id', 'blog_cta_experiment_id', 'blog_cta_experiment_signature',\n      'blog_cta_experiment_registry_version', 'blog_cta_experiment_arm', 'blog_cta_experiment_variant',\n      'blog_cta_traffic_scope', 'blog_cta_message_id',\n      'blog_cta_assignment_id', 'blog_cta_exposure_id', 'blog_cta_creative_id', 'blog_cta_format',\n      'blog_cta_assignment_device_class', 'blog_cta_device_class', 'blog_cta_experiment_enrolled',\n      'blog_cta_qa_override', 'slot_id', 'slot_type', 'destination',\n      'exposure_basis', 'measurement_contract_version'\n    ];\n    var flat = {};\n    allowedKeys.forEach(function (key) {\n      if (!Object.prototype.hasOwnProperty.call(payload, key)) return;\n      var value = payload[key];\n      if (typeof value !== 'string' && typeof value !== 'number' && typeof value !== 'boolean') return;\n      flat[key] = typeof value === 'string' ? value.slice(0, 100) : value;\n    });\n    return flat;\n  }\n\n  function sendBlogCtaGa4Event(payload) {\n    if (!payload || payload.analytics_consent_granted !== true || !isBlogCtaGa4MeasurementEvent(payload.event)) return;\n    window.nbCtaDataLayer = window.nbCtaDataLayer || [];\n    if (typeof window.nbCtaGtag !== 'function') {\n      window.nbCtaGtag = function () {\n        window.nbCtaDataLayer.push(arguments);\n      };\n      window.nbCtaGtag('js', new Date());\n      window.nbCtaGtag('consent', 'update', { analytics_storage: 'granted' });\n      window.nbCtaGtag('config', 'G-3K6ERKL9JD', {\n        send_page_view: false,\n        transport_type: 'beacon'\n      });\n    }\n    if (!document.getElementById('nb-blog-cta-ga4-bridge')) {\n      var script = document.createElement('script');\n      script.id = 'nb-blog-cta-ga4-bridge';\n      script.async = true;\n      script.src = 'https://www.googletagmanager.com/gtag/js?id=G-3K6ERKL9JD&l=nbCtaDataLayer';\n      (document.head || document.documentElement).appendChild(script);\n    }\n    window.nbCtaGtag('event', String(payload.event), buildBlogCtaGa4Payload(payload));\n  }\n\n  function pushEvent(payload) {\n    if (!payload || typeof payload !== 'object') return;\n    var attribution = captureAttribution();\n    if (attribution && !payload.attribution) {\n      payload.attribution = attribution;\n    }\n    appendStoredBlogOriginContext(payload);\n    if (!payload.context_path) {\n      payload.context_path = window.location.pathname || '';\n    }\n    if (!payload.page_type) {\n      payload.page_type = document.body ? (document.body.getAttribute('data-page-type') || '') : '';\n    }\n    if (!payload.template_name) {\n      payload.template_name = document.body ? (document.body.getAttribute('data-template-name') || '') : '';\n    }\n    if (typeof payload.analytics_consent_granted !== 'boolean') {\n      payload.analytics_consent_granted = hasAttributionStorageConsent();\n    }\n    withEventMeta(payload);\n    if (!markEventSeen(payload)) return payload.event_id || '';\n    window.dataLayer = window.dataLayer || [];\n    window.dataLayer.push(payload);\n    sendBlogCtaGa4Event(payload);\n    try {\n      if (\n        window.Shopify &&\n        window.Shopify.analytics &&\n        typeof window.Shopify.analytics.publish === 'function'\n      ) {\n        window.Shopify.analytics.publish('nb_custom_tracking', payload);\n      }\n    } catch (_err) {\n      // noop\n    }\n    document.dispatchEvent(new CustomEvent('nb:tracking', { detail: payload }));\n    pushBlogCtaAssistedFunnelEvent(payload);\n    return payload.event_id || '';\n  }\n\n  function pushBlogCtaAssistedFunnelEvent(sourcePayload) {\n    if (!sourcePayload || !hasAttributionStorageConsent()) return;\n    var eventMap = {\n      view_item: 'blog_cta_assisted_product_view',\n      add_to_cart: 'blog_cta_assisted_add_to_cart',\n      begin_checkout: 'blog_cta_assisted_begin_checkout'\n    };\n    var assistedEventName = eventMap[String(sourcePayload.event || '')];\n    if (!assistedEventName) return;\n    var origin = readBlogOrigin();\n    if (!origin || !origin.cta_experiment_id || !origin.cta_experiment_signature || !origin.cta_assignment_id) return;\n    pushEvent({\n      event: assistedEventName,\n      event_id: String(sourcePayload.event_id || createEventId(sourcePayload.event || 'funnel')) + '_cta_assist',\n      context_path: sourcePayload.context_path || window.location.pathname || '',\n      article_slug: origin.first_blog_handle || origin.last_blog_handle || '',\n      article_locale_root: localeBaseCode(origin.article_locale || ''),\n      cro_profile: origin.cta_profile || origin.cro_variant || '',\n      product_relevance: origin.product_relevance || '',\n      query_family_id: origin.query_family_id || '',\n      primary_destination: origin.primary_destination || '',\n      blog_cta_experiment_id: origin.cta_experiment_id,\n      blog_cta_experiment_signature: origin.cta_experiment_signature,\n      blog_cta_experiment_registry_version: origin.cta_registry_version || '',\n      blog_cta_traffic_scope: origin.cta_traffic_scope || '',\n      blog_cta_message_id: origin.cta_message_id || '',\n      blog_cta_experiment_arm: origin.cta_experiment_arm || '',\n      blog_cta_experiment_variant: origin.cta_experiment_variant || '',\n      blog_cta_assignment_id: origin.cta_assignment_id,\n      blog_cta_assigned_at: origin.cta_assigned_at || '',\n      blog_cta_exposure_id: origin.cta_exposure_id || '',\n      blog_cta_creative_id: origin.cta_creative_id || '',\n      blog_cta_format: origin.cta_format || '',\n      blog_cta_assignment_device_class: origin.cta_device_class || '',\n      blog_cta_device_class: getBlogCtaDeviceClass(),\n      blog_cta_experiment_enrolled: true,\n      blog_cta_qa_override: false,\n      measurement_contract_version: BLOG_CTA_MEASUREMENT_CONTRACT_VERSION\n    });\n  }\n\n  function toFiniteNumber(value, fallback) {\n    if (typeof value === 'number') {\n      return Number.isFinite(value) ? value : fallback;\n    }\n    if (typeof value === 'string') {\n      var normalized = value.trim();\n      if (!normalized) return fallback;\n\n      // Keep only numeric separators/sign and normalize locale-specific formats.\n      normalized = normalized.replace(/\\s+/g, '').replace(/[^\\d,.\\-]/g, '');\n      if (!normalized) return fallback;\n\n      var lastComma = normalized.lastIndexOf(',');\n      var lastDot = normalized.lastIndexOf('.');\n\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      } else {\n        normalized = normalized.replace(/,/g, '');\n      }\n\n      var parsedString = Number(normalized);\n      return Number.isFinite(parsedString) ? parsedString : fallback;\n    }\n\n    if (value && typeof value === 'object') {\n      if (Object.prototype.hasOwnProperty.call(value, 'amount')) {\n        return toFiniteNumber(value.amount, fallback);\n      }\n      if (Object.prototype.hasOwnProperty.call(value, 'value')) {\n        return toFiniteNumber(value.value, fallback);\n      }\n    }\n\n    var parsed = Number(value);\n    return Number.isFinite(parsed) ? parsed : fallback;\n  }\n\n  function getActiveShopCurrency() {\n    var shopifyCurrency = window.Shopify && window.Shopify.currency\n      ? window.Shopify.currency.active\n      : '';\n    var currencyNode = document.querySelector('[data-cart-currency], [data-shopify-market-currency]');\n    var nodeCurrency = currencyNode\n      ? (currencyNode.getAttribute('data-cart-currency') || currencyNode.getAttribute('data-shopify-market-currency'))\n      : '';\n    return String(shopifyCurrency || nodeCurrency || '').trim().toUpperCase();\n  }\n\n  function normalizeCheckoutItems(items) {\n    if (!Array.isArray(items)) return [];\n    return items\n      .map(function (item) {\n        var raw = item || {};\n        var quantity = toFiniteNumber(raw.quantity, 1);\n        if (quantity < 1) quantity = 1;\n        var price = toFiniteNumber(raw.price, 0);\n        if (price < 0) price = 0;\n        var normalized = {\n          item_id: raw.item_id ? String(raw.item_id) : '',\n          item_name: raw.item_name ? String(raw.item_name) : '',\n          item_brand: raw.item_brand ? String(raw.item_brand) : 'Nordbelt',\n          item_category: raw.item_category ? String(raw.item_category) : 'Nordic Curl Tool',\n          price: Number(price.toFixed(2)),\n          quantity: quantity\n        };\n        ['item_variant', 'variant_id', 'package_size'].forEach(function (key) {\n          if (raw[key] == null || raw[key] === '') return;\n          normalized[key] = String(raw[key]);\n        });\n        if (!normalized.item_id && !normalized.item_name) return null;\n        return normalized;\n      })\n      .filter(function (item) {\n        return !!item;\n      });\n  }\n\n  function contentIdsFromItems(items) {\n    return (items || [])\n      .map(function (item) {\n        if (!item || !item.item_id) return '';\n        return String(item.item_id);\n      })\n      .filter(function (id) {\n        return !!id;\n      });\n  }\n\n  function getRuntimeBridge(name) {\n    if (window && window[name]) return window[name];\n    if (window.top && window.top !== window) {\n      try {\n        return window.top[name];\n      } catch (_err) {\n        return null;\n      }\n    }\n    return null;\n  }\n\n  function getTrackingConfig() {\n    var cfg = window.NordbeltTrackingConfig || {};\n    if (typeof cfg !== 'object' || cfg === null) return {};\n    return cfg;\n  }\n\n  function inferClarityProjectIdFromScripts() {\n    var scripts = document.getElementsByTagName('script');\n    for (var i = 0; i < scripts.length; i += 1) {\n      var src = scripts[i] && scripts[i].src ? String(scripts[i].src) : '';\n      if (!src || src.indexOf('clarity.ms/tag/') === -1) continue;\n      var match = src.match(/clarity\\.ms\\/tag\\/(?:shopify\\/)?([a-z0-9]+)/i);\n      if (match && match[1]) return String(match[1]).trim();\n    }\n    return '';\n  }\n\n  function hasStandardClarityScript(projectId) {\n    if (!projectId) return false;\n    var needle = 'clarity.ms/tag/' + projectId;\n    var scripts = document.getElementsByTagName('script');\n    for (var i = 0; i < scripts.length; i += 1) {\n      var src = scripts[i] && scripts[i].src ? String(scripts[i].src) : '';\n      if (!src || src.indexOf(needle) === -1) continue;\n      if (src.indexOf('/tag/shopify/') === -1) return true;\n    }\n    return false;\n  }\n\n  function resolveClarityProjectId() {\n    var cfg = getTrackingConfig();\n    var configured = cfg && cfg.clarityProjectId ? String(cfg.clarityProjectId).trim() : '';\n    if (configured) return configured;\n    var inferred = inferClarityProjectIdFromScripts();\n    if (inferred) return inferred;\n    return DEFAULT_CLARITY_PROJECT_ID;\n  }\n\n  function initClarityRuntimeBridge() {\n    var cfg = getTrackingConfig();\n    if (cfg.clarityBridgeEnabled === false) return;\n    var projectId = resolveClarityProjectId();\n    if (!projectId) return;\n    if (!cfg.clarityProjectId) cfg.clarityProjectId = projectId;\n\n    if (typeof window.clarity !== 'function') {\n      window.clarity = function () {\n        window.clarity.q = window.clarity.q || [];\n        window.clarity.q.push(arguments);\n      };\n    }\n\n    function loadClarityScript() {\n      if (clarityScriptRequested) return;\n      clarityScriptRequested = true;\n      if (window.NordbeltClarityLoaderRequested || hasStandardClarityScript(projectId)) return;\n      if (document.querySelector('script[data-nb-clarity-loader]')) return;\n      window.NordbeltClarityLoaderRequested = true;\n\n      var script = document.createElement('script');\n      script.async = true;\n      script.src = 'https://www.clarity.ms/tag/' + projectId;\n      script.setAttribute('data-nb-clarity-loader', '1');\n\n      var firstScript = document.getElementsByTagName('script')[0];\n      if (firstScript && firstScript.parentNode) {\n        firstScript.parentNode.insertBefore(script, firstScript);\n      } else if (document.head) {\n        document.head.appendChild(script);\n      } else {\n        document.documentElement.appendChild(script);\n      }\n    }\n\n    var clarityLoadScheduled = false;\n    var clarityScriptRequested = false;\n\n    function queueClarityLoad(timeoutMs, delayMs) {\n      if (clarityLoadScheduled) return;\n      clarityLoadScheduled = true;\n      window.setTimeout(function () {\n        if ('requestIdleCallback' in window) {\n          window.requestIdleCallback(loadClarityScript, { timeout: timeoutMs || 3600 });\n        } else {\n          window.setTimeout(loadClarityScript, timeoutMs ? Math.min(timeoutMs, 1600) : 1100);\n        }\n      }, Math.max(0, Number(delayMs || 0)));\n    }\n\n    function removeClarityInteractionListeners() {\n      window.removeEventListener('pointerdown', handleClarityFirstInteraction);\n      window.removeEventListener('keydown', handleClarityFirstInteraction);\n      window.removeEventListener('touchstart', handleClarityFirstInteraction);\n      window.removeEventListener('scroll', handleClarityFirstInteraction);\n    }\n\n    function handleClarityFirstInteraction() {\n      removeClarityInteractionListeners();\n      queueClarityLoad(isMobileArticleRuntime() ? 4600 : 3000, isMobileArticleRuntime() ? 2600 : 1000);\n    }\n\n    window.addEventListener('pointerdown', handleClarityFirstInteraction, { once: true, passive: true });\n    window.addEventListener('keydown', handleClarityFirstInteraction, { once: true });\n    window.addEventListener('touchstart', handleClarityFirstInteraction, { once: true, passive: true });\n    window.addEventListener('scroll', handleClarityFirstInteraction, { once: true, passive: true });\n\n    if (document.readyState === 'complete') {\n      queueClarityLoad(isMobileArticleRuntime() ? 4200 : 2600, isMobileArticleRuntime() ? 2800 : 1400);\n    } else {\n      window.addEventListener('load', function () {\n        queueClarityLoad(isMobileArticleRuntime() ? 4600 : 3000, isMobileArticleRuntime() ? 3000 : 1600);\n      }, { once: true });\n    }\n  }\n\n  function safeParseJson(value, fallback) {\n    try {\n      return JSON.parse(value);\n    } catch (_err) {\n      return fallback;\n    }\n  }\n\n  var runtimeI18nCache = null;\n\n  function getRuntimeI18n() {\n    if (runtimeI18nCache) return runtimeI18nCache;\n    if (window.NordbeltI18n && typeof window.NordbeltI18n === 'object') {\n      runtimeI18nCache = window.NordbeltI18n;\n      return runtimeI18nCache;\n    }\n\n    var node = document.getElementById('nb-i18n-runtime');\n    if (!node) {\n      runtimeI18nCache = {};\n      window.NordbeltI18n = runtimeI18nCache;\n      return runtimeI18nCache;\n    }\n\n    runtimeI18nCache = safeParseJson(node.textContent || '{}', {});\n    if (!runtimeI18nCache || typeof runtimeI18nCache !== 'object') {\n      runtimeI18nCache = {};\n    }\n    window.NordbeltI18n = runtimeI18nCache;\n    return runtimeI18nCache;\n  }\n\n  function getI18nValue(path) {\n    if (!path) return '';\n    var root = getRuntimeI18n();\n    var segments = String(path).split('.');\n    var cursor = root;\n    for (var index = 0; index < segments.length; index += 1) {\n      var segment = segments[index];\n      if (!cursor || typeof cursor !== 'object' || !(segment in cursor)) return '';\n      cursor = cursor[segment];\n    }\n    return cursor;\n  }\n\n  function interpolateI18n(template, vars) {\n    var source = String(template || '');\n    if (!vars || typeof vars !== 'object') return source;\n    return source.replace(/\\{\\{\\s*([a-zA-Z0-9_]+)\\s*\\}\\}/g, function (_match, token) {\n      if (!(token in vars)) return '';\n      var value = vars[token];\n      return value === null || value === undefined ? '' : String(value);\n    });\n  }\n\n  function i18n(path, fallback, vars) {\n    var fallbackText = fallback === null || fallback === undefined ? '' : String(fallback);\n    var resolved = getI18nValue(path);\n    var template = typeof resolved === 'string' && resolved ? resolved : fallbackText;\n    return interpolateI18n(template, vars);\n  }\n\n  function isSwedishLocaleActive() {\n    var htmlLang = normalizeLocaleCode(document.documentElement.getAttribute('lang') || '');\n    if (htmlLang === 'sv' || localeBaseCode(htmlLang) === 'sv') return true;\n    var cfg = window.NordbeltLocaleConfig || {};\n    var currentLocale = normalizeLocaleCode(cfg.currentLocale || '');\n    return currentLocale === 'sv' || localeBaseCode(currentLocale) === 'sv';\n  }\n\n  function isEstonianLocaleActive() {\n    var htmlLang = normalizeLocaleCode(document.documentElement.getAttribute('lang') || '');\n    if (htmlLang === 'et' || localeBaseCode(htmlLang) === 'et') return true;\n    var cfg = window.NordbeltLocaleConfig || {};\n    var currentLocale = normalizeLocaleCode(cfg.currentLocale || '');\n    return currentLocale === 'et' || localeBaseCode(currentLocale) === 'et';\n  }\n\n  function isDanishLocaleActive() {\n    var htmlLang = normalizeLocaleCode(document.documentElement.getAttribute('lang') || '');\n    if (htmlLang === 'da' || localeBaseCode(htmlLang) === 'da') return true;\n    var cfg = window.NordbeltLocaleConfig || {};\n    var currentLocale = normalizeLocaleCode(cfg.currentLocale || '');\n    return currentLocale === 'da' || localeBaseCode(currentLocale) === 'da';\n  }\n\n  function isSpanishLocaleActive() {\n    var htmlLang = normalizeLocaleCode(document.documentElement.getAttribute('lang') || '');\n    if (htmlLang === 'es' || localeBaseCode(htmlLang) === 'es') return true;\n    var cfg = window.NordbeltLocaleConfig || {};\n    var currentLocale = normalizeLocaleCode(cfg.currentLocale || '');\n    return currentLocale === 'es' || localeBaseCode(currentLocale) === 'es';\n  }\n\n  function isItalianLocaleActive() {\n    var htmlLang = normalizeLocaleCode(document.documentElement.getAttribute('lang') || '');\n    if (htmlLang === 'it' || localeBaseCode(htmlLang) === 'it') return true;\n    var cfg = window.NordbeltLocaleConfig || {};\n    var currentLocale = normalizeLocaleCode(cfg.currentLocale || '');\n    return currentLocale === 'it' || localeBaseCode(currentLocale) === 'it';\n  }\n\n  function isFinnishLocaleActive() {\n    var htmlLang = normalizeLocaleCode(document.documentElement.getAttribute('lang') || '');\n    if (htmlLang === 'fi' || localeBaseCode(htmlLang) === 'fi') return true;\n    var cfg = window.NordbeltLocaleConfig || {};\n    var currentLocale = normalizeLocaleCode(cfg.currentLocale || '');\n    return currentLocale === 'fi' || localeBaseCode(currentLocale) === 'fi';\n  }\n\n  function isNorwegianLocaleActive() {\n    var htmlLang = normalizeLocaleCode(document.documentElement.getAttribute('lang') || '');\n    if (htmlLang === 'nb' || localeBaseCode(htmlLang) === 'nb') return true;\n    var cfg = window.NordbeltLocaleConfig || {};\n    var currentLocale = normalizeLocaleCode(cfg.currentLocale || '');\n    return currentLocale === 'nb' || localeBaseCode(currentLocale) === 'nb';\n  }\n\n  function normalizeSwedishKronaText(text) {\n    var source = String(text || '');\n    if (!source) return source;\n    return source.replace(/(\\d{1,3}(?:[.\\s\\u00A0]\\d{3})*)\\.(\\d{2})\\s*kr\\b/gi, function (_match, intPart, decimals) {\n      return String(intPart || '').replace(/\\u00A0/g, ' ') + ',' + String(decimals || '') + ' kr';\n    });\n  }\n\n  function shouldSkipSwedishPriceNode(node) {\n    if (!node || !node.parentElement) return true;\n    var tag = (node.parentElement.tagName || '').toUpperCase();\n    if (tag === 'SCRIPT' || tag === 'STYLE' || tag === 'NOSCRIPT' || tag === 'TEMPLATE' || tag === 'TEXTAREA') {\n      return true;\n    }\n    return false;\n  }\n\n  function normalizeSwedishKronaPricesInScope(scopeNode) {\n    if (!isSwedishLocaleActive()) return;\n    var scope = scopeNode || document.body;\n    if (!scope) return;\n\n    if (scope.nodeType === Node.TEXT_NODE) {\n      if (shouldSkipSwedishPriceNode(scope)) return;\n      var normalizedSingle = normalizeSwedishKronaText(scope.nodeValue || '');\n      if (normalizedSingle !== scope.nodeValue) {\n        scope.nodeValue = normalizedSingle;\n      }\n      return;\n    }\n\n    var walker = document.createTreeWalker(scope, NodeFilter.SHOW_TEXT);\n    var textNode;\n    while ((textNode = walker.nextNode())) {\n      if (shouldSkipSwedishPriceNode(textNode)) continue;\n      var original = textNode.nodeValue || '';\n      if (original.indexOf('kr') === -1 && original.indexOf('KR') === -1) continue;\n      var normalized = normalizeSwedishKronaText(original);\n      if (normalized !== original) {\n        textNode.nodeValue = normalized;\n      }\n    }\n  }\n\n  function initSwedishKronaPriceFormatting() {\n    if (!isSwedishLocaleActive() || !window.MutationObserver || !document.body) return;\n\n    var scheduled = false;\n    function scheduleNormalize(scope) {\n      if (scheduled) return;\n      scheduled = true;\n      window.requestAnimationFrame(function () {\n        scheduled = false;\n        normalizeSwedishKronaPricesInScope(scope || document.body);\n      });\n    }\n\n    normalizeSwedishKronaPricesInScope(document.body);\n\n    var observer = new MutationObserver(function (mutations) {\n      var target = document.body;\n      for (var i = 0; i < mutations.length; i += 1) {\n        var mutation = mutations[i];\n        if (mutation.type === 'characterData' && mutation.target) {\n          target = mutation.target.parentElement || document.body;\n          break;\n        }\n        if (mutation.addedNodes && mutation.addedNodes.length) {\n          target = mutation.addedNodes[0];\n          break;\n        }\n      }\n      scheduleNormalize(target);\n    });\n\n    observer.observe(document.body, {\n      subtree: true,\n      childList: true,\n      characterData: true\n    });\n  }\n\n  var ATTRIBUTION_STORAGE_KEY = 'nb_attribution_v1';\n  var ATTRIBUTION_TTL_MS = 90 * 24 * 60 * 60 * 1000;\n  var BLOG_ORIGIN_STORAGE_KEY = 'nb_blog_origin_v1';\n  var BLOG_ORIGIN_SESSION_KEY = 'nb_blog_session_v1';\n  var BLOG_ORIGIN_TTL_MS = 28 * 24 * 60 * 60 * 1000;\n  var attributionCache = null;\n  var blogOriginCache = null;\n\n  function readStorageItem(storage, key) {\n    if (!storage || !key) return '';\n    try {\n      return storage.getItem(key) || '';\n    } catch (_err) {\n      return '';\n    }\n  }\n\n  function writeStorageItem(storage, key, value) {\n    if (!storage || !key) return;\n    try {\n      storage.setItem(key, value);\n    } catch (_err) {\n      // noop\n    }\n  }\n\n  var RESERVE_PANEL_NOTICE_KEY = 'nb_reserve_panel_notice_v1';\n\n  function armReservePanelNotice() {\n    writeStorageItem(window.sessionStorage, RESERVE_PANEL_NOTICE_KEY, '1');\n  }\n\n  function clearReservePanelNotice() {\n    if (!window.sessionStorage) return;\n    try {\n      window.sessionStorage.removeItem(RESERVE_PANEL_NOTICE_KEY);\n    } catch (_err) {\n      // noop\n    }\n  }\n\n  function consumeReservePanelNotice() {\n    if (readStorageItem(window.sessionStorage, RESERVE_PANEL_NOTICE_KEY) !== '1') return false;\n    clearReservePanelNotice();\n    return true;\n  }\n\n  function buildAttributionFromUrl() {\n    var params = new URLSearchParams(window.location.search);\n    var fields = [\n      'utm_id',\n      'utm_source',\n      'utm_medium',\n      'utm_campaign',\n      'utm_term',\n      'utm_content',\n      'gclid',\n      'gbraid',\n      'wbraid',\n      'gad_source',\n      'gad_campaignid',\n      'dclid',\n      'fbclid',\n      'msclkid',\n      'ttclid'\n    ];\n    var source = {};\n    var hasValue = false;\n\n    fields.forEach(function (field) {\n      var val = String(params.get(field) || '').trim();\n      if (!val) return;\n      source[field] = val;\n      hasValue = true;\n    });\n\n    if (!hasValue) return null;\n\n    source.landing_path = window.location.pathname || '';\n    source.landing_query = window.location.search || '';\n    source.landing_url = window.location.href || '';\n    source.first_seen_at = new Date().toISOString();\n    source.last_seen_at = source.first_seen_at;\n    source.session_id = createEventId('attr');\n    return source;\n  }\n\n  function readConsentStorageChoice() {\n    var raw = readStorageItem(window.localStorage, 'nb_cookie_consent_v1') || readStorageItem(window.sessionStorage, 'nb_cookie_consent_v1');\n    if (!raw) return '';\n    if (raw === 'accepted' || raw === 'essential') return raw;\n    var parsed = safeParseJson(raw, null);\n    if (!parsed || typeof parsed !== 'object') return '';\n    var choice = String(parsed.choice || '').toLowerCase();\n    return (choice === 'accepted' || choice === 'essential') ? choice : '';\n  }\n\n  function hasAttributionStorageConsent() {\n    if (readStorageItem(window.localStorage, 'nb_force_consent_migrated_v1')) return false;\n    var privacyApi = window.Shopify && window.Shopify.customerPrivacy;\n    if (privacyApi && typeof privacyApi.currentVisitorConsent === 'function') {\n      try {\n        var consent = privacyApi.currentVisitorConsent();\n        if (consent && typeof consent === 'object') {\n          var keys = ['analytics', 'marketing', 'preferences', 'sale_of_data'];\n          var hasExplicit = keys.some(function (key) {\n            return typeof consent[key] === 'boolean';\n          });\n          if (hasExplicit) return !!(consent.analytics || consent.marketing);\n        }\n      } catch (_err) {\n        // Fall through to the local banner choice.\n      }\n    }\n\n    return readConsentStorageChoice() === 'accepted';\n  }\n\n  function removeStorageItem(storage, key) {\n    if (!storage || !key) return;\n    try {\n      storage.removeItem(key);\n    } catch (_err) {}\n  }\n\n  function clearBlogOriginStorage() {\n    blogOriginCache = null;\n    removeStorageItem(window.localStorage, BLOG_ORIGIN_STORAGE_KEY);\n    removeStorageItem(window.sessionStorage, BLOG_ORIGIN_STORAGE_KEY);\n    removeStorageItem(window.sessionStorage, BLOG_ORIGIN_SESSION_KEY);\n  }\n\n  function readBlogOrigin() {\n    if (!hasAttributionStorageConsent()) {\n      clearBlogOriginStorage();\n      return null;\n    }\n    if (blogOriginCache) return blogOriginCache;\n    var raw = readStorageItem(window.localStorage, BLOG_ORIGIN_STORAGE_KEY) || readStorageItem(window.sessionStorage, BLOG_ORIGIN_STORAGE_KEY);\n    if (!raw) return null;\n    var parsed = safeParseJson(raw, null);\n    if (!parsed || typeof parsed !== 'object') return null;\n    var firstSeenAt = Date.parse(parsed.first_seen_at || '');\n    if (!firstSeenAt || Date.now() - firstSeenAt > BLOG_ORIGIN_TTL_MS) {\n      clearBlogOriginStorage();\n      return null;\n    }\n    blogOriginCache = parsed;\n    return parsed;\n  }\n\n  function writeBlogOrigin(origin) {\n    if (!origin || typeof origin !== 'object' || !hasAttributionStorageConsent()) return null;\n    blogOriginCache = origin;\n    var payload = JSON.stringify(origin);\n    writeStorageItem(window.localStorage, BLOG_ORIGIN_STORAGE_KEY, payload);\n    writeStorageItem(window.sessionStorage, BLOG_ORIGIN_STORAGE_KEY, payload);\n    return origin;\n  }\n\n  function blogOriginSessionId() {\n    var existing = readStorageItem(window.sessionStorage, BLOG_ORIGIN_SESSION_KEY);\n    if (existing) return existing;\n    var sessionId = createEventId('blog');\n    writeStorageItem(window.sessionStorage, BLOG_ORIGIN_SESSION_KEY, sessionId);\n    return sessionId;\n  }\n\n  function trimBlogOriginValue(value, maxLength) {\n    var normalized = String(value || '').replace(/\\s+/g, ' ').trim();\n    if (!normalized) return '';\n    return normalized.slice(0, maxLength || 180);\n  }\n\n  function persistBlogOrigin(articleRoot, options) {\n    if (!articleRoot || !hasAttributionStorageConsent()) {\n      if (!hasAttributionStorageConsent()) clearBlogOriginStorage();\n      return null;\n    }\n    var context = getArticleAnalyticsContext(articleRoot);\n    if (!context || !context.slug) return null;\n    var existing = readBlogOrigin();\n    var now = new Date().toISOString();\n    var settings = options || {};\n    var next = existing && typeof existing === 'object' ? Object.assign({}, existing) : {};\n    var sameCtaAssignment = !!(\n      existing &&\n      context.cta_experiment_enrolled &&\n      existing.cta_experiment_id === context.cta_experiment_id &&\n      existing.cta_experiment_signature === context.cta_experiment_signature &&\n      existing.cta_assignment_id === context.cta_assignment_id\n    );\n    var preserveMutexAttribution = !!(\n      existing &&\n      existing.cta_assignment_id &&\n      !context.cta_experiment_enrolled &&\n      context.cta_exclusion_reason === 'global_experiment_mutex'\n    );\n    next.first_blog_handle = trimBlogOriginValue(next.first_blog_handle || context.slug, 120);\n    next.last_blog_handle = trimBlogOriginValue(context.slug, 120);\n    next.article_locale = trimBlogOriginValue(context.locale, 24);\n    next.product_relevance = trimBlogOriginValue(context.product_relevance, 32);\n    next.query_family_id = trimBlogOriginValue(context.query_family_id, 160);\n    next.hypothesis_id = trimBlogOriginValue(context.hypothesis_id, 160);\n    next.cro_variant = trimBlogOriginValue(context.cro_variant, 40);\n    if (context.cta_experiment_enrolled) {\n      next.cta_experiment_id = trimBlogOriginValue(context.cta_experiment_id, 120);\n      next.cta_experiment_signature = trimBlogOriginValue(context.cta_experiment_signature, 120);\n      next.cta_experiment_variant = trimBlogOriginValue(context.cta_experiment_variant, 40);\n      next.cta_experiment_arm = trimBlogOriginValue(context.cta_experiment_arm, 12);\n      next.cta_assignment_id = trimBlogOriginValue(context.cta_assignment_id, 120);\n      next.cta_assigned_at = trimBlogOriginValue(context.cta_assigned_at, 40);\n      next.cta_exposure_id = trimBlogOriginValue(\n        settings.exposure_id || context.cta_exposure_id || (sameCtaAssignment ? next.cta_exposure_id : ''),\n        120\n      );\n      next.cta_creative_id = trimBlogOriginValue(context.cta_creative_id, 80);\n      next.cta_format = trimBlogOriginValue(context.cta_format, 32);\n      next.cta_profile = trimBlogOriginValue(context.cro_variant, 40);\n      next.cta_device_class = trimBlogOriginValue(context.cta_assignment_device_class || context.cta_device_class, 24);\n      next.cta_registry_version = trimBlogOriginValue(context.cta_experiment_registry_version, 40);\n      next.cta_traffic_scope = trimBlogOriginValue(context.cta_traffic_scope, 40);\n      next.cta_message_id = trimBlogOriginValue(context.cta_message_id, 80);\n    } else if (!preserveMutexAttribution) {\n      next.cta_experiment_id = '';\n      next.cta_experiment_signature = '';\n      next.cta_experiment_variant = '';\n      next.cta_experiment_arm = '';\n      next.cta_assignment_id = '';\n      next.cta_assigned_at = '';\n      next.cta_exposure_id = '';\n      next.cta_creative_id = '';\n      next.cta_format = '';\n      next.cta_profile = '';\n      next.cta_device_class = '';\n      next.cta_registry_version = '';\n      next.cta_traffic_scope = '';\n      next.cta_message_id = trimBlogOriginValue(context.cta_message_id, 80);\n    }\n    next.primary_destination = trimBlogOriginValue(context.primary_destination, 24);\n    next.cta_slot = trimBlogOriginValue(settings.slot_id || next.cta_slot, 120);\n    next.surface_source = trimBlogOriginValue(settings.surface_source || next.surface_source || 'article', 32);\n    next.session_id = trimBlogOriginValue(next.session_id || blogOriginSessionId(), 120);\n    next.first_seen_at = next.first_seen_at || now;\n    next.last_seen_at = now;\n    return writeBlogOrigin(next);\n  }\n\n  function appendStoredBlogOriginContext(payload) {\n    if (!payload || typeof payload !== 'object') return payload;\n    var origin = readBlogOrigin();\n    if (!origin) return payload;\n    payload.blog_first_handle = origin.first_blog_handle || '';\n    payload.blog_last_handle = origin.last_blog_handle || '';\n    payload.blog_session_id = origin.session_id || '';\n    if (!payload.hypothesis_id && origin.hypothesis_id) payload.hypothesis_id = origin.hypothesis_id;\n    if (!payload.query_family_id && origin.query_family_id) payload.query_family_id = origin.query_family_id;\n    if (!payload.product_relevance && origin.product_relevance) payload.product_relevance = origin.product_relevance;\n    if (!payload.cro_variant && origin.cro_variant) payload.cro_variant = origin.cro_variant;\n    if (!payload.blog_cta_experiment_id && origin.cta_experiment_id) payload.blog_cta_experiment_id = origin.cta_experiment_id;\n    if (!payload.blog_cta_experiment_signature && origin.cta_experiment_signature) payload.blog_cta_experiment_signature = origin.cta_experiment_signature;\n    if (!payload.blog_cta_experiment_variant && origin.cta_experiment_variant) payload.blog_cta_experiment_variant = origin.cta_experiment_variant;\n    if (!payload.blog_cta_experiment_arm && origin.cta_experiment_arm) payload.blog_cta_experiment_arm = origin.cta_experiment_arm;\n    if (!payload.blog_cta_assignment_id && origin.cta_assignment_id) payload.blog_cta_assignment_id = origin.cta_assignment_id;\n    if (!payload.blog_cta_assigned_at && origin.cta_assigned_at) payload.blog_cta_assigned_at = origin.cta_assigned_at;\n    if (!payload.blog_cta_exposure_id && origin.cta_exposure_id) payload.blog_cta_exposure_id = origin.cta_exposure_id;\n    if (!payload.blog_cta_creative_id && origin.cta_creative_id) payload.blog_cta_creative_id = origin.cta_creative_id;\n    if (!payload.blog_cta_format && origin.cta_format) payload.blog_cta_format = origin.cta_format;\n    if (!payload.cro_profile && origin.cta_profile) payload.cro_profile = origin.cta_profile;\n    if (!payload.blog_cta_assignment_device_class && origin.cta_device_class) payload.blog_cta_assignment_device_class = origin.cta_device_class;\n    if (!payload.blog_cta_experiment_registry_version && origin.cta_registry_version) payload.blog_cta_experiment_registry_version = origin.cta_registry_version;\n    if (!payload.blog_cta_traffic_scope && origin.cta_traffic_scope) payload.blog_cta_traffic_scope = origin.cta_traffic_scope;\n    if (!payload.blog_cta_message_id && origin.cta_message_id) payload.blog_cta_message_id = origin.cta_message_id;\n    if (!payload.slot_id && origin.cta_slot) payload.slot_id = origin.cta_slot;\n    payload.blog_origin = Object.assign({}, origin);\n    return payload;\n  }\n\n  function syncBlogOriginToCart(originOverride) {\n    if (!window.fetch || !hasAttributionStorageConsent()) return Promise.resolve(false);\n    var origin = originOverride || readBlogOrigin();\n    if (!origin || !origin.first_blog_handle) return Promise.resolve(false);\n    var attributes = {\n      __nb_first_blog: trimBlogOriginValue(origin.first_blog_handle, 120),\n      __nb_last_blog: trimBlogOriginValue(origin.last_blog_handle, 120),\n      __nb_cta_slot: trimBlogOriginValue(origin.cta_slot, 120),\n      __nb_hypothesis_id: trimBlogOriginValue(origin.hypothesis_id, 160),\n      __nb_blog_session_id: trimBlogOriginValue(origin.session_id, 120),\n      __nb_query_family_id: trimBlogOriginValue(origin.query_family_id, 160),\n      __nb_cta_test_id: trimBlogOriginValue(origin.cta_experiment_id, 120),\n      __nb_cta_test_signature: trimBlogOriginValue(origin.cta_experiment_signature, 120),\n      __nb_cta_test_arm: trimBlogOriginValue(origin.cta_experiment_arm, 12),\n      __nb_cta_test_variant: trimBlogOriginValue(origin.cta_experiment_variant, 40),\n      __nb_cta_assignment_id: trimBlogOriginValue(origin.cta_assignment_id, 120),\n      __nb_cta_assigned_at: trimBlogOriginValue(origin.cta_assigned_at, 40),\n      __nb_cta_exposure_id: trimBlogOriginValue(origin.cta_exposure_id, 120),\n      __nb_cta_creative_id: trimBlogOriginValue(origin.cta_creative_id, 80),\n      __nb_cta_profile: trimBlogOriginValue(origin.cta_profile, 40),\n      __nb_cta_device: trimBlogOriginValue(origin.cta_device_class, 24),\n      __nb_cta_locale: trimBlogOriginValue(origin.article_locale, 24),\n      __nb_cta_registry_version: trimBlogOriginValue(origin.cta_registry_version, 40),\n      __nb_cta_traffic_scope: trimBlogOriginValue(origin.cta_traffic_scope, 40),\n      __nb_cta_message_id: trimBlogOriginValue(origin.cta_message_id, 80)\n    };\n    return fetch(buildCartEndpointPathWithPreview('/cart/update.js'), {\n      method: 'POST',\n      credentials: 'same-origin',\n      keepalive: true,\n      headers: {\n        'Content-Type': 'application/json',\n        Accept: 'application/json'\n      },\n      body: JSON.stringify({ attributes: attributes })\n    }).then(function (response) {\n      return !!(response && response.ok);\n    }).catch(function () {\n      return false;\n    });\n  }\n\n  function readAttribution() {\n    if (attributionCache) return attributionCache;\n    var raw = readStorageItem(window.localStorage, ATTRIBUTION_STORAGE_KEY) || readStorageItem(window.sessionStorage, ATTRIBUTION_STORAGE_KEY);\n    if (!raw) return null;\n    var parsed = safeParseJson(raw, null);\n    if (!parsed || typeof parsed !== 'object') return null;\n    var createdAt = Date.parse(parsed.first_seen_at || '');\n    if (!createdAt || (Date.now() - createdAt) > ATTRIBUTION_TTL_MS) {\n      return null;\n    }\n    attributionCache = parsed;\n    return parsed;\n  }\n\n  function writeAttribution(nextAttribution) {\n    if (!nextAttribution || typeof nextAttribution !== 'object') return;\n    attributionCache = nextAttribution;\n    var payload = JSON.stringify(nextAttribution);\n    writeStorageItem(window.localStorage, ATTRIBUTION_STORAGE_KEY, payload);\n    writeStorageItem(window.sessionStorage, ATTRIBUTION_STORAGE_KEY, payload);\n  }\n\n  function mergeAttribution(existing, incoming) {\n    if (!existing) return incoming || null;\n    if (!incoming) return existing;\n\n    var merged = {};\n    Object.keys(existing).forEach(function (key) {\n      merged[key] = existing[key];\n    });\n    Object.keys(incoming).forEach(function (key) {\n      if (incoming[key]) merged[key] = incoming[key];\n    });\n    merged.last_seen_at = new Date().toISOString();\n    if (!merged.session_id) merged.session_id = createEventId('attr');\n    if (!merged.first_seen_at) merged.first_seen_at = merged.last_seen_at;\n    return merged;\n  }\n\n  function captureAttribution() {\n    var cfg = getTrackingConfig();\n    if (cfg.attributionEnabled === false) return null;\n    var canStoreAttribution = hasAttributionStorageConsent();\n    var existing = canStoreAttribution ? readAttribution() : null;\n    var fromUrl = buildAttributionFromUrl();\n    var next = mergeAttribution(existing, fromUrl);\n    if (next && canStoreAttribution) writeAttribution(next);\n    return next;\n  }\n\n  function isCheckoutPath(pathname) {\n    var path = String(pathname || '').toLowerCase();\n    return path.indexOf('/checkout') !== -1;\n  }\n\n  function trackBeginCheckout(options) {\n    var settings = options || {};\n    var value = toFiniteNumber(settings.value, 0);\n    if (value < 0) value = 0;\n    var items = normalizeCheckoutItems(settings.items || []);\n    var contentIds = Array.isArray(settings.content_ids) ? settings.content_ids : contentIdsFromItems(items);\n    var payload = {\n      event: 'begin_checkout',\n      event_id: settings.event_id || createEventId('begin_checkout'),\n      context_path: settings.context_path || window.location.pathname || '',\n      checkout_entrypoint: settings.checkout_entrypoint || 'unknown',\n      checkout_redirect_attempt: toFiniteNumber(settings.checkout_redirect_attempt, 1),\n      checkout_redirect_result: settings.checkout_redirect_result || 'initiated',\n      currency: settings.currency || getActiveShopCurrency(),\n      value: Number(value.toFixed(2)),\n      ecommerce: {\n        currency: settings.currency || getActiveShopCurrency(),\n        value: Number(value.toFixed(2))\n      }\n    };\n    ['page_type', 'audience', 'item_name', 'item_id', 'variant_id', 'package_size', 'price'].forEach(function (key) {\n      if (settings[key] == null || settings[key] === '') return;\n      payload[key] = settings[key];\n    });\n    if (items.length) payload.ecommerce.items = items;\n    if (contentIds.length) {\n      payload.content_ids = contentIds;\n      payload.content_type = settings.content_type || 'product';\n    }\n    syncBlogOriginToCart();\n    pushEvent(payload);\n    return payload.event_id;\n  }\n\n  function trackCheckoutRedirectFailure(options) {\n    var settings = options || {};\n    var payload = {\n      event: 'checkout_redirect_failed',\n      event_id: settings.event_id || createEventId('checkout_redirect_failed'),\n      context_path: settings.context_path || window.location.pathname || '',\n      checkout_entrypoint: settings.checkout_entrypoint || 'unknown',\n      checkout_redirect_attempt: toFiniteNumber(settings.checkout_redirect_attempt, 1),\n      checkout_redirect_result: settings.checkout_redirect_result || 'failed',\n      browser_name: navigator.userAgentData && navigator.userAgentData.brands && navigator.userAgentData.brands.length\n        ? navigator.userAgentData.brands.map(function (brand) { return brand.brand; }).join(', ')\n        : '',\n      browser_user_agent: navigator.userAgent || '',\n      browser_platform: navigator.platform || '',\n      browser_language: navigator.language || '',\n      cart_item_count: toFiniteNumber(settings.cart_item_count, 0)\n    };\n    if (settings.cart_snapshot && typeof settings.cart_snapshot === 'object') {\n      payload.cart_snapshot = settings.cart_snapshot;\n    }\n    var value = toFiniteNumber(settings.value, NaN);\n    if (Number.isFinite(value)) {\n      payload.ecommerce = {\n        currency: settings.currency || getActiveShopCurrency(),\n        value: Number(Math.max(0, value).toFixed(2)),\n        items: normalizeCheckoutItems(settings.items || [])\n      };\n    }\n    pushEvent(payload);\n    return payload.event_id;\n  }\n\n  window.NordbeltTheme = window.NordbeltTheme || {};\n  window.NordbeltTheme.createEventId = createEventId;\n  window.NordbeltTheme.pushEvent = pushEvent;\n  window.NordbeltTheme.buildShopifyPathWithPreview = buildShopifyPathWithPreview;\n  window.NordbeltTheme.buildCartEndpointPathWithPreview = buildCartEndpointPathWithPreview;\n  window.NordbeltTheme.trackBeginCheckout = trackBeginCheckout;\n  window.NordbeltTheme.trackCheckoutRedirectFailure = trackCheckoutRedirectFailure;\n  window.NordbeltTheme.captureAttribution = captureAttribution;\n  window.NordbeltTheme.readAttribution = readAttribution;\n  window.NordbeltTheme.readBlogOrigin = readBlogOrigin;\n  window.NordbeltTheme.syncBlogOriginToCart = syncBlogOriginToCart;\n  window.NordbeltTheme.readDirectCheckoutCartBridge = readDirectCheckoutCartBridge;\n  window.NordbeltTheme.clearDirectCheckoutCartBridge = clearDirectCheckoutCartBridge;\n\n  function initViewItemTracking() {\n    var node = document.querySelector('[data-nb-view-item]');\n    if (!node) return;\n    var parsed;\n    try {\n      parsed = JSON.parse(node.textContent || '{}');\n    } catch (_err) {\n      parsed = null;\n    }\n    if (parsed) pushEvent(parsed);\n  }\n\n  function initCartViewTracking() {\n    var form = document.querySelector('[data-nb-cart-form]');\n    if (!form) return;\n    var itemNodes = Array.prototype.slice.call(form.querySelectorAll('[data-nb-cart-item]'));\n    if (!itemNodes.length) return;\n\n    var items = itemNodes\n      .map(function (itemNode) {\n        var quantity = toFiniteNumber(itemNode.getAttribute('data-item-quantity'), 1);\n        if (quantity < 1) quantity = 1;\n        var price = toFiniteNumber(itemNode.getAttribute('data-item-price'), 0);\n        if (price < 0) price = 0;\n        return {\n          item_id: itemNode.getAttribute('data-item-id') || '',\n          item_name: itemNode.getAttribute('data-item-name') || '',\n          item_brand: 'Nordbelt',\n          item_category: 'Nordic Curl Tool',\n          price: Number(price.toFixed(2)),\n          quantity: quantity\n        };\n      })\n      .filter(function (item) {\n        return Boolean(item.item_id || item.item_name);\n      });\n    if (!items.length) return;\n\n    var total = toFiniteNumber(form.getAttribute('data-cart-total'), 0);\n    if (total < 0) total = 0;\n    pushEvent({\n      event: 'view_cart',\n      ecommerce: {\n        currency: form.getAttribute('data-cart-currency') || getActiveShopCurrency(),\n        value: Number(total.toFixed(2)),\n        items: items\n      },\n      content_ids: contentIdsFromItems(items),\n      content_type: 'product'\n    });\n  }\n\n  function initSearchTracking() {\n    var body = document.body;\n    if (!body || (body.getAttribute('data-page-type') || '') !== 'search') return;\n    var params = new URLSearchParams(window.location.search);\n    var term = String(params.get('q') || '').trim();\n    if (!term) return;\n    pushEvent({\n      event: 'search',\n      search_term: term\n    });\n  }\n\n  function initPurchaseTrackingFallback() {\n    var checkout = window.Shopify && window.Shopify.checkout ? window.Shopify.checkout : null;\n    if (!checkout || typeof checkout !== 'object') return;\n    var transactionId = checkout.order_id || checkout.order_number || '';\n    if (!transactionId) return;\n\n    var dedupeKey = 'nb_purchase_tracked_' + String(transactionId);\n    if (readStorageItem(window.sessionStorage, dedupeKey) === '1') return;\n\n    var lineItems = Array.isArray(checkout.line_items) ? checkout.line_items : [];\n    var items = lineItems\n      .map(function (item) {\n        if (!item) return null;\n        var quantity = toFiniteNumber(item.quantity, 1);\n        if (quantity < 1) quantity = 1;\n        var price = toFiniteNumber(item.price, 0);\n        if (price < 0) price = 0;\n        return {\n          item_id: item.product_id ? String(item.product_id) : (item.variant_id ? String(item.variant_id) : ''),\n          item_name: item.title ? String(item.title) : '',\n          item_brand: item.vendor ? String(item.vendor) : 'Nordbelt',\n          item_category: 'Nordic Curl Tool',\n          price: Number(price.toFixed(2)),\n          quantity: quantity\n        };\n      })\n      .filter(function (item) {\n        return !!item;\n      });\n\n    var rawCheckoutTotal = checkout.total_price != null ? checkout.total_price : checkout.subtotal_price;\n    var value = toFiniteNumber(rawCheckoutTotal, 0);\n\n    if (typeof rawCheckoutTotal === 'string') {\n      var totalRawText = rawCheckoutTotal.trim();\n      // Shopify payloads without decimal separators are typically minor units (cents).\n      if (totalRawText && totalRawText.indexOf('.') === -1 && totalRawText.indexOf(',') === -1) {\n        value = value / 100;\n      }\n    } else if (typeof rawCheckoutTotal === 'number' && Number.isInteger(rawCheckoutTotal) && rawCheckoutTotal >= 1000) {\n      value = value / 100;\n    }\n\n    if (!(value > 0) && items.length) {\n      value = items.reduce(function (sum, item) {\n        var price = toFiniteNumber(item && item.price, 0);\n        var quantity = toFiniteNumber(item && item.quantity, 1);\n        if (quantity < 1) quantity = 1;\n        return sum + (price * quantity);\n      }, 0);\n    }\n\n    pushEvent({\n      event: 'purchase',\n      transaction_id: String(transactionId),\n      ecommerce: {\n        currency: checkout.currency || getActiveShopCurrency(),\n        value: Number(Math.max(0, value).toFixed(2)),\n        items: items\n      },\n      content_ids: contentIdsFromItems(items),\n      content_type: 'product'\n    });\n    writeStorageItem(window.sessionStorage, dedupeKey, '1');\n  }\n\n  function setAtcButtonState(button, state) {\n    if (!button) return;\n    if (!button.dataset.originalLabel) {\n      button.dataset.originalLabel = button.textContent || i18n('atc.default', 'Aan winkelwagen toevoegen');\n    }\n\n    if (state === 'loading') {\n      button.disabled = true;\n      button.textContent = i18n('atc.loading', 'Toevoegen...');\n      return;\n    }\n\n    if (state === 'success') {\n      button.disabled = false;\n      button.textContent = i18n('atc.success', 'Toegevoegd');\n      window.setTimeout(function () {\n        button.textContent = button.dataset.originalLabel;\n      }, 1400);\n      return;\n    }\n\n    if (state === 'error') {\n      button.disabled = false;\n      button.textContent = i18n('atc.error', 'Probeer opnieuw');\n      window.setTimeout(function () {\n        button.textContent = button.dataset.originalLabel;\n      }, 1800);\n      return;\n    }\n\n    button.disabled = false;\n    button.textContent = button.dataset.originalLabel;\n  }\n\n  function updateCartBadge(count) {\n    var normalizedCount = Math.max(0, Math.round(toFiniteNumber(count, 0)));\n    var cartLinks = document.querySelectorAll('a[href$=\"/cart\"], a[href=\"/cart\"]');\n    cartLinks.forEach(function (link) {\n      var badge = link.querySelector('.nb-cart-badge');\n      if (!badge && normalizedCount > 0) {\n        badge = document.createElement('span');\n        badge.className = 'nb-cart-badge';\n        link.style.position = 'relative';\n        link.appendChild(badge);\n      }\n      if (badge) {\n        if (normalizedCount > 0) {\n          badge.textContent = String(normalizedCount);\n        } else {\n          badge.remove();\n        }\n      }\n    });\n\n    var header = document.querySelector('[data-nb-header]');\n    if (header) {\n      header.setAttribute('data-cart-count', String(normalizedCount));\n    }\n\n    document.dispatchEvent(new CustomEvent('nb:cart-count-updated', {\n      detail: { count: normalizedCount }\n    }));\n  }\n\n  function buildShopifyPathWithPreview(pathname) {\n    var nextUrl = new URL(pathname, window.location.origin);\n    var localizedPath = buildLocalizedStorefrontPath(nextUrl.pathname || '/');\n    if (localizedPath) {\n      nextUrl.pathname = localizedPath;\n    }\n    var current = new URL(window.location.href);\n    ['preview_theme_id', 'key', 'pb', '_ab', '_fd', '_sc'].forEach(function (key) {\n      if (current.searchParams.has(key)) {\n        nextUrl.searchParams.set(key, current.searchParams.get(key) || '');\n      }\n    });\n    return nextUrl.toString();\n  }\n\n  function buildCartEndpointPathWithPreview(pathname) {\n    var nextUrl = new URL(pathname, window.location.origin);\n    var path = String(nextUrl.pathname || '/');\n    var localizedPath = '';\n\n    if (/^\\/cart\\.js$/i.test(path)) {\n      var localizedCartPath = buildLocalizedStorefrontPath('/cart');\n      if (localizedCartPath) {\n        localizedPath = localizedCartPath.replace(/\\/cart$/i, '/cart.js');\n      }\n    } else if (/^\\/cart\\/(?:add|update|change|clear)\\.js$/i.test(path)) {\n      localizedPath = buildLocalizedStorefrontPath(path);\n    } else if (/^\\/cart\\/add$/i.test(path)) {\n      localizedPath = buildLocalizedStorefrontPath('/cart/add');\n    }\n\n    if (localizedPath) {\n      nextUrl.pathname = localizedPath;\n    }\n\n    var current = new URL(window.location.href);\n    ['preview_theme_id', 'key', 'pb', '_ab', '_fd', '_sc'].forEach(function (key) {\n      if (current.searchParams.has(key)) {\n        nextUrl.searchParams.set(key, current.searchParams.get(key) || '');\n      }\n    });\n\n    return nextUrl.toString();\n  }\n\n  var DIRECT_CHECKOUT_CART_BRIDGE_STORAGE_KEY = 'nb_direct_checkout_cart_bridge_v1';\n  var DIRECT_CHECKOUT_CART_BRIDGE_TTL_MS = 5 * 60 * 1000;\n\n  function clearDirectCheckoutCartBridge() {\n    if (!window.sessionStorage) return;\n    try {\n      window.sessionStorage.removeItem(DIRECT_CHECKOUT_CART_BRIDGE_STORAGE_KEY);\n    } catch (_err) {\n      // noop\n    }\n  }\n\n  function readDirectCheckoutCartBridge() {\n    var raw = readStorageItem(window.sessionStorage, DIRECT_CHECKOUT_CART_BRIDGE_STORAGE_KEY);\n    if (!raw) return null;\n\n    var parsed = safeParseJson(raw, null);\n    if (!parsed || typeof parsed !== 'object') {\n      clearDirectCheckoutCartBridge();\n      return null;\n    }\n\n    var createdAt = toFiniteNumber(parsed.createdAt, 0);\n    if (!(createdAt > 0) || Date.now() - createdAt > DIRECT_CHECKOUT_CART_BRIDGE_TTL_MS) {\n      clearDirectCheckoutCartBridge();\n      return null;\n    }\n\n    return parsed;\n  }\n\n  function shouldUseDirectCheckoutCartBridge() {\n    var localizedCartPath = buildLocalizedStorefrontPath('/cart');\n    return !!localizedCartPath && localizedCartPath !== '/cart';\n  }\n\n  function armDirectCheckoutCartBridge(payload) {\n    if (!window.sessionStorage || !shouldUseDirectCheckoutCartBridge()) return false;\n\n    var bridgePayload = {\n      createdAt: Date.now(),\n      sourcePath: (window.location.pathname || '/') + (window.location.search || '')\n    };\n\n    if (payload && typeof payload === 'object') {\n      var entrypoint = String(payload.entrypoint || '').trim();\n      if (entrypoint) bridgePayload.entrypoint = entrypoint;\n      var variantId = String(payload.variantId || '').trim();\n      if (variantId) bridgePayload.variantId = variantId;\n      var currency = String(payload.currency || '').trim();\n      if (currency) bridgePayload.currency = currency;\n      var value = toFiniteNumber(payload.value, NaN);\n      if (Number.isFinite(value)) bridgePayload.value = Number(Math.max(0, value).toFixed(2));\n    }\n\n    writeStorageItem(window.sessionStorage, DIRECT_CHECKOUT_CART_BRIDGE_STORAGE_KEY, JSON.stringify(bridgePayload));\n    return true;\n  }\n\n  var LOCALE_CART_TRANSFER_STORAGE_KEY = 'nb_locale_cart_transfer_v1';\n  var LOCALE_CART_TRANSFER_TTL_MS = 15 * 60 * 1000;\n\n  function clearLocaleCartTransferSnapshot() {\n    if (!window.sessionStorage) return;\n    try {\n      window.sessionStorage.removeItem(LOCALE_CART_TRANSFER_STORAGE_KEY);\n    } catch (_err) {\n      // noop\n    }\n  }\n\n  function normalizeLocaleCartTransferPayloadItem(item) {\n    if (!item || typeof item !== 'object') return null;\n    var itemId = String(item.id || '').trim();\n    if (!itemId) return null;\n\n    var quantity = Math.max(1, Math.round(toFiniteNumber(item.quantity, 1)));\n    var normalized = {\n      id: itemId,\n      quantity: quantity\n    };\n\n    if (item.properties && typeof item.properties === 'object') {\n      var properties = {};\n      Object.keys(item.properties).forEach(function (key) {\n        var propKey = String(key || '').trim();\n        if (!propKey) return;\n        var propValue = item.properties[key];\n        if (propValue === null || propValue === undefined) return;\n        var valueString = String(propValue).trim();\n        if (!valueString) return;\n        properties[propKey] = valueString;\n      });\n      if (Object.keys(properties).length) normalized.properties = properties;\n    }\n\n    var sellingPlan = String(item.selling_plan || '').trim();\n    if (sellingPlan) normalized.selling_plan = sellingPlan;\n\n    return normalized;\n  }\n\n  function normalizeLocaleCartSnapshotItem(item) {\n    if (!item || typeof item !== 'object') return null;\n\n    var variantId = String(item.variant_id || item.id || '').trim();\n    if (!variantId) return null;\n\n    var quantity = Math.max(1, Math.round(toFiniteNumber(item.quantity, 1)));\n    var normalized = {\n      id: variantId,\n      quantity: quantity\n    };\n\n    if (item.properties && typeof item.properties === 'object') {\n      var properties = {};\n      Object.keys(item.properties).forEach(function (key) {\n        var propKey = String(key || '').trim();\n        if (!propKey) return;\n        var propValue = item.properties[key];\n        if (propValue === null || propValue === undefined) return;\n        var valueString = String(propValue).trim();\n        if (!valueString) return;\n        properties[propKey] = valueString;\n      });\n      if (Object.keys(properties).length) normalized.properties = properties;\n    }\n\n    var sellingPlanId = '';\n    if (item.selling_plan_allocation && item.selling_plan_allocation.selling_plan) {\n      sellingPlanId = String(item.selling_plan_allocation.selling_plan.id || '').trim();\n    }\n    if (!sellingPlanId && item.selling_plan_allocation) {\n      sellingPlanId = String(item.selling_plan_allocation.selling_plan_id || '').trim();\n    }\n    if (!sellingPlanId && item.selling_plan) {\n      sellingPlanId = String(item.selling_plan).trim();\n    }\n    if (sellingPlanId) normalized.selling_plan = sellingPlanId;\n\n    return normalized;\n  }\n\n  function readLocaleCartTransferSnapshot() {\n    var raw = readStorageItem(window.sessionStorage, LOCALE_CART_TRANSFER_STORAGE_KEY);\n    if (!raw) return null;\n\n    var parsed = safeParseJson(raw, null);\n    if (!parsed || typeof parsed !== 'object') {\n      clearLocaleCartTransferSnapshot();\n      return null;\n    }\n\n    var createdAt = toFiniteNumber(parsed.createdAt, 0);\n    if (!(createdAt > 0)) {\n      clearLocaleCartTransferSnapshot();\n      return null;\n    }\n\n    if (Date.now() - createdAt > LOCALE_CART_TRANSFER_TTL_MS) {\n      clearLocaleCartTransferSnapshot();\n      return null;\n    }\n\n    var items = Array.isArray(parsed.items) ? parsed.items : [];\n    if (!items.length) {\n      clearLocaleCartTransferSnapshot();\n      return null;\n    }\n\n    parsed.items = items\n      .map(normalizeLocaleCartTransferPayloadItem)\n      .filter(function (item) {\n        return !!item;\n      });\n\n    if (!parsed.items.length) {\n      clearLocaleCartTransferSnapshot();\n      return null;\n    }\n\n    return parsed;\n  }\n\n  function snapshotCartForLocaleTransfer() {\n    if (!window.fetch) return Promise.resolve(null);\n    return fetch(buildCartEndpointPathWithPreview('/cart.js'), {\n      method: 'GET',\n      credentials: 'same-origin',\n      headers: { Accept: 'application/json' }\n    })\n      .then(function (response) {\n        if (!response || !response.ok) return null;\n        return response.json();\n      })\n      .then(function (cart) {\n        var items = cart && Array.isArray(cart.items) ? cart.items : [];\n        if (!items.length) {\n          clearLocaleCartTransferSnapshot();\n          return null;\n        }\n\n        var normalizedItems = items\n          .map(normalizeLocaleCartSnapshotItem)\n          .filter(function (item) {\n            return !!item;\n          });\n\n        if (!normalizedItems.length) {\n          clearLocaleCartTransferSnapshot();\n          return null;\n        }\n\n        var payload = {\n          createdAt: Date.now(),\n          sourcePath: (window.location.pathname || '/') + (window.location.search || ''),\n          itemCount: Math.max(0, Math.round(toFiniteNumber(cart.item_count, normalizedItems.length))),\n          currency: String(cart.currency || ''),\n          items: normalizedItems\n        };\n\n        if (typeof cart.note === 'string' && cart.note.trim()) {\n          payload.note = cart.note;\n        }\n\n        if (cart.attributes && typeof cart.attributes === 'object') {\n          var attributes = {};\n          Object.keys(cart.attributes).forEach(function (key) {\n            var attrKey = String(key || '').trim();\n            if (!attrKey) return;\n            var attrValue = cart.attributes[key];\n            if (attrValue === null || attrValue === undefined) return;\n            var valueString = String(attrValue).trim();\n            if (!valueString) return;\n            attributes[attrKey] = valueString;\n          });\n          if (Object.keys(attributes).length) {\n            payload.attributes = attributes;\n          }\n        }\n\n        writeStorageItem(window.sessionStorage, LOCALE_CART_TRANSFER_STORAGE_KEY, JSON.stringify(payload));\n        return payload;\n      })\n      .catch(function () {\n        return null;\n      });\n  }\n\n  function restoreCartAfterLocaleSwitch() {\n    if (!window.fetch) return;\n    var snapshot = readLocaleCartTransferSnapshot();\n    if (!snapshot) return;\n\n    fetch(buildCartEndpointPathWithPreview('/cart.js'), {\n      method: 'GET',\n      credentials: 'same-origin',\n      headers: { Accept: 'application/json' }\n    })\n      .then(function (response) {\n        if (!response || !response.ok) return null;\n        return response.json();\n      })\n      .then(function (cart) {\n        var currentCount = Math.max(0, Math.round(toFiniteNumber(cart && cart.item_count, 0)));\n        if (currentCount > 0) {\n          clearLocaleCartTransferSnapshot();\n          updateCartBadge(currentCount);\n          return null;\n        }\n\n        if (!snapshot.items || !snapshot.items.length) {\n          clearLocaleCartTransferSnapshot();\n          return null;\n        }\n\n        return fetch(buildCartEndpointPathWithPreview('/cart/add.js'), {\n          method: 'POST',\n          credentials: 'same-origin',\n          headers: {\n            'Content-Type': 'application/json',\n            Accept: 'application/json'\n          },\n          body: JSON.stringify({ items: snapshot.items })\n        })\n          .then(function (addResponse) {\n            if (!addResponse || !addResponse.ok) throw new Error('locale-cart-restore-failed');\n            return addResponse.json();\n          })\n          .then(function () {\n            var hasNote = typeof snapshot.note === 'string' && snapshot.note.trim();\n            var hasAttributes = snapshot.attributes && typeof snapshot.attributes === 'object' && Object.keys(snapshot.attributes).length;\n            if (!hasNote && !hasAttributes) return null;\n            return fetch(buildCartEndpointPathWithPreview('/cart/update.js'), {\n              method: 'POST',\n              credentials: 'same-origin',\n              headers: {\n                'Content-Type': 'application/json',\n                Accept: 'application/json'\n              },\n              body: JSON.stringify({\n                note: hasNote ? snapshot.note : '',\n                attributes: hasAttributes ? snapshot.attributes : {}\n              })\n            }).catch(function () {\n              return null;\n            });\n          })\n          .then(function () {\n            return fetch(buildCartEndpointPathWithPreview('/cart.js'), {\n              method: 'GET',\n              credentials: 'same-origin',\n              headers: { Accept: 'application/json' }\n            });\n          })\n          .then(function (finalResponse) {\n            if (!finalResponse || !finalResponse.ok) return null;\n            return finalResponse.json();\n          })\n          .then(function (finalCart) {\n            clearLocaleCartTransferSnapshot();\n            var restoredCount = Math.max(0, Math.round(toFiniteNumber(finalCart && finalCart.item_count, snapshot.itemCount || 0)));\n            updateCartBadge(restoredCount);\n            syncBlogOriginToCart();\n            if (/\\/cart(?:\\/|$)/i.test(String(window.location.pathname || ''))) {\n              window.location.reload();\n            }\n          })\n          .catch(function () {\n            clearLocaleCartTransferSnapshot();\n          });\n      })\n      .catch(function () {\n        clearLocaleCartTransferSnapshot();\n      });\n  }\n\n  function initAtcTracking() {\n    var forms = document.querySelectorAll('[data-nb-atc-form]');\n    if (!forms.length) return;\n\n    forms.forEach(function (form) {\n      form.addEventListener('submit', function (event) {\n        if (form.dataset.nbSubmitting === '1') {\n          event.preventDefault();\n          return;\n        }\n\n        var submitter = event.submitter && event.submitter.matches('[data-nb-atc-submit]') ? event.submitter : null;\n        var submitButton = submitter || form.querySelector('[data-nb-atc-submit]');\n        var redirectTarget = (submitter && submitter.getAttribute('data-nb-atc-redirect')) || form.getAttribute('data-nb-atc-redirect') || '';\n        var requiresCompanionProduct = form.getAttribute('data-nb-requires-companion-product') === 'true';\n        redirectTarget = redirectTarget.trim().toLowerCase();\n        var submitMode = (form.getAttribute('data-nb-atc-mode') || 'native').trim().toLowerCase();\n        var useAjax = submitMode === 'ajax' && !!window.fetch && !!window.FormData;\n\n        form.dataset.nbSubmitting = '1';\n        setAtcButtonState(submitButton, 'loading');\n\n        var quantityInput = form.querySelector('input[name=\"quantity\"]');\n        var quantity = Number(quantityInput && quantityInput.value ? quantityInput.value : 1);\n        if (!Number.isFinite(quantity) || quantity < 1) quantity = 1;\n        var variantInput = form.querySelector('[name=\"id\"]');\n        var unitPrice = Number(form.getAttribute('data-product-price') || 0);\n        var currency = form.getAttribute('data-product-currency') || '';\n        var itemId = variantInput && variantInput.value ? String(variantInput.value) : (form.getAttribute('data-product-id') || '');\n        var normalizedUnitPrice = Number(Math.max(0, unitPrice).toFixed(2));\n        var addToCartPayload = {\n          event: 'add_to_cart',\n          context_path: window.location.pathname,\n          ecommerce: {\n            currency: currency,\n            value: Number((normalizedUnitPrice * quantity).toFixed(2)),\n            items: [\n              {\n                item_id: itemId,\n                item_name: form.getAttribute('data-product-title') || '',\n                item_brand: 'Nordbelt',\n                item_category: 'Nordic Curl Tool',\n                price: normalizedUnitPrice,\n                quantity: quantity\n              }\n            ]\n          },\n          content_ids: [itemId],\n          content_type: 'product'\n        };\n\n        if (!useAjax) {\n          armReservePanelNotice();\n          syncBlogOriginToCart();\n          // Native Shopify submit path is the most robust for cart/checkout reliability.\n          return;\n        }\n\n        event.preventDefault();\n        var formData = new FormData(form);\n        fetch(buildCartEndpointPathWithPreview('/cart/add.js'), {\n          method: 'POST',\n          headers: { Accept: 'application/json' },\n          body: formData\n        })\n          .then(function (res) {\n            if (!res.ok) throw new Error('ATC failed');\n            return res.json();\n          })\n          .then(function (_item) {\n            return syncBlogOriginToCart().then(function () {\n              return _item;\n            });\n          })\n          .then(function (_item) {\n            armReservePanelNotice();\n            pushEvent(addToCartPayload);\n            if (redirectTarget === 'checkout' && requiresCompanionProduct) {\n              window.location.assign(buildShopifyPathWithPreview('/cart'));\n              return;\n            }\n            if (redirectTarget === 'checkout') {\n              var checkoutEntrypoint = (submitter && submitter.getAttribute('data-nb-checkout-entrypoint')) || form.getAttribute('data-nb-checkout-entrypoint') || 'product_direct';\n              var shouldBridgeCheckout = shouldUseDirectCheckoutCartBridge();\n              var checkoutUrl = shouldBridgeCheckout\n                ? buildShopifyPathWithPreview('/cart')\n                : buildShopifyPathWithPreview('/checkout');\n              var checkoutEventId = trackBeginCheckout({\n                checkout_entrypoint: checkoutEntrypoint,\n                checkout_redirect_attempt: 1,\n                checkout_redirect_result: shouldBridgeCheckout ? 'bridging_to_cart' : 'redirecting',\n                value: Number((normalizedUnitPrice * quantity).toFixed(2)),\n                currency: currency,\n                items: addToCartPayload.ecommerce.items,\n                content_ids: addToCartPayload.content_ids,\n                content_type: addToCartPayload.content_type\n              });\n              if (shouldBridgeCheckout) {\n                armDirectCheckoutCartBridge({\n                  entrypoint: checkoutEntrypoint,\n                  variantId: itemId,\n                  currency: currency,\n                  value: Number((normalizedUnitPrice * quantity).toFixed(2))\n                });\n              }\n              window.location.assign(checkoutUrl);\n              if (shouldBridgeCheckout) return;\n              window.setTimeout(function () {\n                if (document.visibilityState !== 'visible') return;\n                if (isCheckoutPath(window.location.pathname || '')) return;\n                trackCheckoutRedirectFailure({\n                  event_id: checkoutEventId,\n                  checkout_entrypoint: checkoutEntrypoint,\n                  checkout_redirect_attempt: 2,\n                  checkout_redirect_result: 'not_on_checkout_after_redirect',\n                  value: Number((normalizedUnitPrice * quantity).toFixed(2)),\n                  currency: currency,\n                  items: addToCartPayload.ecommerce.items,\n                  cart_item_count: quantity\n                });\n                window.location.assign(checkoutUrl);\n              }, 1200);\n              return;\n            }\n\n            if (redirectTarget === 'cart') {\n              window.location.assign(buildShopifyPathWithPreview('/cart'));\n              return;\n            }\n\n            // Cart badge refresh is non-critical; avoid breaking flow on redirects/CORS edge cases.\n            fetch(buildCartEndpointPathWithPreview('/cart.js'), { headers: { Accept: 'application/json' } })\n              .then(function (res) {\n                if (!res.ok) return null;\n                return res.json();\n              })\n              .then(function (cart) {\n                if (!cart) return;\n                updateCartBadge(Number(cart && cart.item_count ? cart.item_count : 0));\n              })\n              .catch(function () {\n                // noop\n              });\n\n            setAtcButtonState(submitButton, 'success');\n          })\n          .catch(function () {\n            setAtcButtonState(submitButton, 'error');\n            // Fallback to Shopify native form submit if AJAX add fails for any reason.\n            try {\n              armReservePanelNotice();\n              form.submit();\n            } catch (_err) {\n              // noop\n            }\n          })\n          .finally(function () {\n            form.dataset.nbSubmitting = '0';\n          });\n      });\n    });\n  }\n\n  function initBeginCheckoutTracking() {\n    var nodes = document.querySelectorAll('a[data-nb-begin-checkout]:not([data-nb-checkout-trigger])');\n    nodes.forEach(function (node) {\n      node.addEventListener('click', function () {\n        trackBeginCheckout({\n          checkout_entrypoint: node.getAttribute('data-nb-checkout-entrypoint') || 'generic_link',\n          checkout_redirect_attempt: 1,\n          checkout_redirect_result: 'tracked_only'\n        });\n      });\n    });\n  }\n\n  function initAdPlatformBridges() {\n    if (document.documentElement.getAttribute('data-nb-ad-platform-bridges-bound') === 'true') return;\n    document.documentElement.setAttribute('data-nb-ad-platform-bridges-bound', 'true');\n\n    function isStandardEcommerceEvent(eventName) {\n      return eventName === 'view_item' || eventName === 'add_to_cart' || eventName === 'begin_checkout' || eventName === 'purchase' || eventName === 'view_cart' || eventName === 'search';\n    }\n\n    function buildGoogleAdsConversionPayload(payload) {\n      var ecommerce = payload && payload.ecommerce ? payload.ecommerce : {};\n      var value = toFiniteNumber(ecommerce.value, NaN);\n      if (!Number.isFinite(value)) {\n        value = toFiniteNumber(payload && payload.value, NaN);\n      }\n      if (!Number.isFinite(value) && Array.isArray(ecommerce.items) && ecommerce.items.length) {\n        value = ecommerce.items.reduce(function (sum, item) {\n          var itemPrice = toFiniteNumber(item && item.price, 0);\n          var itemQuantity = toFiniteNumber(item && item.quantity, 1);\n          if (itemQuantity < 1) itemQuantity = 1;\n          return sum + (itemPrice * itemQuantity);\n        }, 0);\n      }\n      if (!Number.isFinite(value) || value < 0) value = 0;\n      return {\n        value: Number(value.toFixed(2)),\n        currency: ecommerce.currency || getActiveShopCurrency(),\n        transaction_id: payload.transaction_id || payload.event_id || ''\n      };\n    }\n\n    function resolveGoogleAdsSendTo(eventName) {\n      var cfg = getTrackingConfig();\n      var map = cfg && cfg.googleAdsSendTo ? cfg.googleAdsSendTo : {};\n      var sendTo = map && map[eventName] ? String(map[eventName]).trim() : '';\n      return sendTo;\n    }\n\n    function isBlogCtaMeasurementEvent(eventName) {\n      return isBlogCtaGa4MeasurementEvent(eventName);\n    }\n\n    document.addEventListener('nb:tracking', function (event) {\n      var payload = event && event.detail ? event.detail : null;\n      if (!payload || !payload.event) return;\n      var eventName = String(payload.event || '').trim();\n      if (!eventName) return;\n      var trackingConfig = getTrackingConfig();\n      var allowManualBridge = trackingConfig.manualAdBridgeEnabled === true;\n      var allowStandardBridge = allowManualBridge || !isStandardEcommerceEvent(eventName);\n\n      try {\n        var gtag = getRuntimeBridge('gtag');\n        if (typeof gtag === 'function') {\n          if (allowStandardBridge && !isBlogCtaMeasurementEvent(eventName)) {\n            gtag('event', eventName, payload);\n          }\n          var googleAdsSendTo = resolveGoogleAdsSendTo(eventName);\n          if (googleAdsSendTo) {\n            gtag('event', 'conversion', Object.assign({ send_to: googleAdsSendTo }, buildGoogleAdsConversionPayload(payload)));\n          }\n        }\n      } catch (_err) {\n        // noop\n      }\n\n      try {\n        var fbq = getRuntimeBridge('fbq');\n        if (typeof fbq === 'function' && allowStandardBridge) {\n          var map = {\n            view_item: { name: 'ViewContent', method: 'track' },\n            add_to_cart: { name: 'AddToCart', method: 'track' },\n            begin_checkout: { name: 'InitiateCheckout', method: 'track' },\n            purchase: { name: 'Purchase', method: 'track' },\n            checkout_redirect_failed: { name: 'CheckoutRedirectFailed', method: 'trackCustom' }\n          };\n          var mappedMetaEvent = map[eventName];\n          if (mappedMetaEvent) {\n            var ecommerce = payload.ecommerce || {};\n            var itemList = ecommerce.items || [];\n            var firstItem = itemList[0] || {};\n            fbq(\n              mappedMetaEvent.method,\n              mappedMetaEvent.name,\n              {\n                value: ecommerce.value || firstItem.price || 0,\n                currency: ecommerce.currency || getActiveShopCurrency(),\n                content_type: payload.content_type || 'product',\n                content_ids: payload.content_ids || (firstItem.item_id ? [firstItem.item_id] : []),\n                num_items: firstItem.quantity || 1,\n                checkout_entrypoint: payload.checkout_entrypoint || ''\n              },\n              { eventID: payload.event_id || createEventId('meta') }\n            );\n          }\n        }\n      } catch (_err2) {\n        // noop\n      }\n\n      try {\n        var uetq = getRuntimeBridge('uetq');\n        if (uetq && typeof uetq.push === 'function' && allowStandardBridge) {\n          var uetEventMap = {\n            add_to_cart: 'add_to_cart',\n            begin_checkout: 'begin_checkout',\n            purchase: 'purchase',\n            checkout_redirect_failed: 'checkout_redirect_failed'\n          };\n          var uetEventName = uetEventMap[eventName];\n          if (uetEventName) {\n            var uetEcommerce = payload.ecommerce || {};\n            uetq.push('event', uetEventName, {\n              event_category: 'ecommerce',\n              event_label: payload.checkout_entrypoint || payload.context_path || '',\n              revenue_value: Number(toFiniteNumber(uetEcommerce.value, 0).toFixed(2)),\n              currency: uetEcommerce.currency || getActiveShopCurrency()\n            });\n          }\n        }\n      } catch (_err3) {\n        // noop\n      }\n\n      try {\n        if (trackingConfig.clarityBridgeEnabled === false) return;\n        var clarity = getRuntimeBridge('clarity');\n        if (typeof clarity !== 'function') return;\n\n        clarity('event', 'nb_' + eventName);\n        clarity('set', 'nb_last_event', eventName);\n        if (payload.event_id) clarity('set', 'nb_last_event_id', payload.event_id);\n        if (payload.page_type) clarity('set', 'nb_page_type', String(payload.page_type));\n        if (payload.product_cutoff_badge_variant) {\n          var cutoffVariant = String(payload.product_cutoff_badge_variant).toUpperCase();\n          if (cutoffVariant === 'A' || cutoffVariant === 'B') {\n            var cutoffTestName = String(payload.product_cutoff_badge_test || 'product_cutoff_badge_v1').toLowerCase().replace(/[^a-z0-9_]+/g, '_');\n            clarity('set', 'product_cutoff_badge_click_variant', cutoffVariant);\n            clarity('set', 'product_cutoff_badge_click_test', cutoffTestName);\n            clarity('event', 'product_cutoff_badge_cta_click_' + cutoffVariant.toLowerCase());\n            clarity('event', 'product_cutoff_badge_' + cutoffTestName + '_cta_click_' + cutoffVariant.toLowerCase());\n          }\n        }\n        if (payload.ecommerce && Number.isFinite(Number(payload.ecommerce.value))) {\n          clarity('set', 'nb_last_value', String(Number(payload.ecommerce.value).toFixed(2)));\n        }\n        if (payload.attribution && payload.attribution.utm_source) {\n          clarity('set', 'nb_utm_source', String(payload.attribution.utm_source));\n        }\n        if (payload.attribution && payload.attribution.utm_campaign) {\n          clarity('set', 'nb_utm_campaign', String(payload.attribution.utm_campaign));\n        }\n      } catch (_err4) {\n        // noop\n      }\n    });\n  }\n\n  function normalizeCtaText(value) {\n    return String(value || '')\n      .replace(/\\s+/g, ' ')\n      .trim()\n      .toLowerCase();\n  }\n\n  function getConversionCtaRouteTargets() {\n    var body = document.body;\n    if (!body) {\n      return {\n        buyNowUrl: '',\n        productUrl: ''\n      };\n    }\n\n    var buyNowUrl = (body.getAttribute('data-nb-buy-now-url') || '').trim();\n    var productUrl = (body.getAttribute('data-nb-product-url') || '').trim();\n\n    return {\n      buyNowUrl: buyNowUrl ? buildShopifyPathWithPreview(buyNowUrl) : '',\n      productUrl: productUrl ? buildShopifyPathWithPreview(productUrl) : ''\n    };\n  }\n\n  function getCtaNodeText(node) {\n    if (!node) return '';\n    var tagName = node.tagName ? node.tagName.toUpperCase() : '';\n    if (tagName === 'INPUT') return node.value || '';\n    return node.textContent || '';\n  }\n\n  function applyConversionPreviewPaths(rootNode) {\n    var scope = rootNode && rootNode.querySelectorAll ? rootNode : document;\n    var links = scope.querySelectorAll('[data-nb-conv-preview-path]');\n    if (!links.length) return;\n    links.forEach(function (link) {\n      if (!link || !link.getAttribute) return;\n      var path = String(link.getAttribute('data-nb-conv-preview-path') || '').trim();\n      if (!path) return;\n      link.setAttribute('href', buildShopifyPathWithPreview(path));\n    });\n  }\n\n  function applyConversionCtaRoutes(rootNode) {\n    var targets = getConversionCtaRouteTargets();\n    if (!targets.buyNowUrl && !targets.productUrl) return;\n    var buyShortNeedle = normalizeCtaText(i18n('shared.buy_short', 'Koop nu'));\n    var buyNowNeedle = normalizeCtaText(i18n('shared.buy_now', 'Koop nu voor [price]')).replace('[price]', '').trim();\n    var viewProductNeedle = normalizeCtaText(i18n('shared.view_product', 'Bekijk product'));\n    var BUY_NOW_CTA_IDS = {\n      header_primary: true,\n      header_primary_mobile: true,\n      hero_primary: true,\n      home_guide_steps_primary: true,\n      home_nhc_benefits_primary: true,\n      home_guide_showcase_primary: true,\n      purpose_primer_primary: true,\n      purpose_primer_primary_mobile: true,\n      guide_primary_cta: true,\n      how_it_works_cta: true,\n      feature_split_primary: true,\n      global_mobile_buy_now: true,\n      home_mobile_sticky_to_product: true\n    };\n    var STATIC_BUY_NEEDLES = [\n      'koop nu',\n      'buy now',\n      'jetzt kaufen',\n      'kauf jetzt',\n      'achetez',\n      'acheter',\n      'k\u00F8b nu',\n      'k\u00F6p nu',\n      'kj\u00F8p n\u00E5'\n    ];\n\n    function textContainsNeedle(text, needle) {\n      if (!needle) return false;\n      return text.indexOf(needle) !== -1;\n    }\n\n    var scope = rootNode && rootNode.querySelectorAll ? rootNode : document;\n    var nodes = scope.querySelectorAll('a, button, input[type=\"button\"], input[type=\"submit\"]');\n    nodes.forEach(function (node) {\n      var text = normalizeCtaText(getCtaNodeText(node));\n      if (!text) return;\n      var ctaId = String((node.getAttribute && node.getAttribute('data-nb-cta')) || '').trim().toLowerCase();\n      var tagName = node.tagName ? node.tagName.toUpperCase() : '';\n      if (tagName === 'A') {\n        var existingHref = String(node.getAttribute('href') || '').trim();\n        if (existingHref.charAt(0) === '#') return;\n        try {\n          var parsedExistingHref = new URL(existingHref, window.location.href);\n          if (\n            parsedExistingHref.hash &&\n            parsedExistingHref.origin === window.location.origin &&\n            parsedExistingHref.pathname === window.location.pathname\n          ) {\n            return;\n          }\n        } catch (_errCtaAnchorHref) {}\n      }\n\n      var routeUrl = '';\n      if (targets.buyNowUrl && ctaId && BUY_NOW_CTA_IDS[ctaId]) {\n        routeUrl = targets.buyNowUrl;\n      } else if (targets.productUrl && viewProductNeedle && text.indexOf(viewProductNeedle) !== -1) {\n        routeUrl = targets.productUrl;\n      } else if (\n        targets.buyNowUrl &&\n        (\n          textContainsNeedle(text, buyShortNeedle) ||\n          textContainsNeedle(text, buyNowNeedle) ||\n          STATIC_BUY_NEEDLES.some(function (needle) { return textContainsNeedle(text, needle); })\n        )\n      ) {\n        routeUrl = targets.buyNowUrl;\n      }\n      if (!routeUrl) return;\n\n      if (tagName === 'A') {\n        node.setAttribute('href', routeUrl);\n        return;\n      }\n\n      if (node.dataset.nbRouteBound === 'true' && node.dataset.nbRouteTarget === routeUrl) return;\n      node.dataset.nbRouteTarget = routeUrl;\n      if (node.dataset.nbRouteBound === 'true') return;\n      node.dataset.nbRouteBound = 'true';\n\n      node.addEventListener('click', function (event) {\n        var targetUrl = node.getAttribute('data-nb-route-target') || '';\n        if (!targetUrl || node.disabled) return;\n        event.preventDefault();\n        window.location.assign(targetUrl);\n      });\n    });\n  }\n\n  function initConversionCtaRoutes() {\n    applyConversionCtaRoutes(document);\n    applyConversionPreviewPaths(document);\n  }\n\n  function currentPageType() {\n    return document.body ? String(document.body.getAttribute('data-page-type') || '').trim().toLowerCase() : '';\n  }\n\n  function getArticleRootForNode(node) {\n    if (node && node.closest) {\n      var closestRoot = node.closest('[data-nb-article-conversion]');\n      if (closestRoot) return closestRoot;\n    }\n    return document.querySelector('[data-nb-article-conversion]');\n  }\n\n  function detectArticleIntent(articleRoot) {\n    if (!articleRoot || !articleRoot.getAttribute) return 'explainer';\n    var cachedIntent = readArticleDataValue(articleRoot, 'data-nb-article-intent').toLowerCase();\n    if (cachedIntent) return cachedIntent;\n\n    var source = [\n      articleRoot.getAttribute('data-nb-article-handle') || '',\n      articleRoot.getAttribute('data-nb-article-title') || '',\n      articleRoot.getAttribute('data-nb-article-tags') || ''\n    ]\n      .join(' ')\n      .toLowerCase();\n\n    var rehabMatchers = [\n      'blessure',\n      'blessures',\n      'herstel',\n      'behandeling',\n      'prevent',\n      'oorzaak',\n      'oorzaken',\n      'symptoom',\n      'symptomen',\n      'revalid',\n      'injur',\n      'rehab',\n      'recover',\n      'treat',\n      'verletz',\n      'behandl',\n      'pr\u00E4vent',\n      'recup',\n      'r\u00E9\u00E9duc',\n      'riabil',\n      'skada',\n      'skade'\n    ];\n    for (var rehabIndex = 0; rehabIndex < rehabMatchers.length; rehabIndex += 1) {\n      if (source.indexOf(rehabMatchers[rehabIndex]) !== -1) {\n        articleRoot.setAttribute('data-nb-article-intent', 'rehab');\n        return 'rehab';\n      }\n    }\n\n    var performanceMatchers = [\n      'kracht',\n      'strength',\n      'performance',\n      'versterk',\n      'opbouw',\n      'progress',\n      'topsport',\n      'sporter',\n      'training',\n      'exercise',\n      'leistung',\n      'kraft',\n      'prestatie',\n      'prestazioni',\n      'fuerza',\n      'for\u00E7a',\n      'styrke',\n      'voima'\n    ];\n    for (var performanceIndex = 0; performanceIndex < performanceMatchers.length; performanceIndex += 1) {\n      if (source.indexOf(performanceMatchers[performanceIndex]) !== -1) {\n        articleRoot.setAttribute('data-nb-article-intent', 'performance');\n        return 'performance';\n      }\n    }\n\n    articleRoot.setAttribute('data-nb-article-intent', 'explainer');\n    return 'explainer';\n  }\n\n  function getArticleLocaleRoot(articleRoot) {\n    if (articleRoot && articleRoot.getAttribute) {\n      var articleLocale = String(articleRoot.getAttribute('data-nb-article-locale') || '').trim();\n      if (articleLocale) return localeBaseCode(articleLocale);\n    }\n    return localeBaseCode(document.documentElement.getAttribute('lang') || '');\n  }\n\n  function normalizeArticleSlug(value) {\n    var raw = String(value || '').trim();\n    if (!raw) return '';\n    if (raw.indexOf('/') === -1) return raw;\n    var parts = raw.split('/');\n    return String(parts[parts.length - 1] || '').trim();\n  }\n\n  function readArticleDataValue(articleRoot, attributeName) {\n    if (!articleRoot || !articleRoot.getAttribute || !attributeName) return '';\n    var value = String(articleRoot.getAttribute(attributeName) || '').trim();\n    if (/liquid syntax error/i.test(value)) {\n      articleRoot.removeAttribute(attributeName);\n      return '';\n    }\n    return value;\n  }\n\n  function sanitizeArticleDataAttributes(scope) {\n    if (!scope || !scope.querySelectorAll) return;\n    var roots = [];\n    if (scope.matches && scope.matches('[data-nb-article-conversion]')) {\n      roots.push(scope);\n    }\n    var foundRoots = scope.querySelectorAll('[data-nb-article-conversion]');\n    for (var i = 0; i < foundRoots.length; i += 1) {\n      roots.push(foundRoots[i]);\n    }\n    var attributes = [\n      'data-nb-article-intent',\n      'data-nb-article-pillar',\n      'data-nb-article-page-type',\n      'data-nb-article-cta-mode',\n      'data-nb-article-medical',\n      'data-nb-product-relevance',\n      'data-nb-funnel-stage',\n      'data-nb-primary-destination',\n      'data-nb-hypothesis-id',\n      'data-nb-query-family-id',\n      'data-nb-cro-variant',\n      'data-nb-cta-experiment-id',\n      'data-nb-cta-experiment-variant',\n      'data-nb-cta-experiment-arm',\n      'data-nb-cta-assignment-id',\n      'data-nb-cta-exposure-id',\n      'data-nb-cta-creative-id',\n      'data-nb-cta-format'\n    ];\n    for (var rootIndex = 0; rootIndex < roots.length; rootIndex += 1) {\n      for (var attrIndex = 0; attrIndex < attributes.length; attrIndex += 1) {\n        readArticleDataValue(roots[rootIndex], attributes[attrIndex]);\n      }\n    }\n  }\n\n  function detectArticlePillar(articleRoot) {\n    if (!articleRoot || !articleRoot.getAttribute) return '';\n    var cachedPillar = readArticleDataValue(articleRoot, 'data-nb-article-pillar').toLowerCase();\n    if (cachedPillar) return cachedPillar;\n\n    var source = [\n      articleRoot.getAttribute('data-nb-article-slug') || '',\n      articleRoot.getAttribute('data-nb-article-handle') || '',\n      articleRoot.getAttribute('data-nb-article-title') || ''\n    ].join(' ').toLowerCase();\n\n    if (source.indexOf('nordic-hamstring-curl') !== -1 || source.indexOf('nordic hamstring curl') !== -1) return 'a';\n    if (source.indexOf('oefening') !== -1 || source.indexOf('oefeningen') !== -1 || source.indexOf('stretches') !== -1 || source.indexOf('hamstrings-en-de-spieren') !== -1) return 'b';\n    if (source.indexOf('blessure') !== -1 || source.indexOf('kramp') !== -1) return 'c';\n    if (source.indexOf('pijn') !== -1 || source.indexOf('tendinopathie') !== -1 || source.indexOf('tendinitis') !== -1 || source.indexOf('bovenbeen') !== -1) return 'd';\n    return '';\n  }\n\n  function detectArticlePageType(articleRoot) {\n    if (!articleRoot || !articleRoot.getAttribute) return '';\n    var cachedPageType = readArticleDataValue(articleRoot, 'data-nb-article-page-type').toLowerCase();\n    if (cachedPageType) return cachedPageType;\n    var pillar = detectArticlePillar(articleRoot);\n    if (pillar === 'a' || pillar === 'c') return 'pillar';\n    return '';\n  }\n\n  function detectArticleCtaMode(articleRoot) {\n    if (!articleRoot || !articleRoot.getAttribute) return '';\n    var cachedCtaMode = readArticleDataValue(articleRoot, 'data-nb-article-cta-mode').toLowerCase();\n    if (cachedCtaMode) return cachedCtaMode;\n    var intent = detectArticleIntent(articleRoot);\n    return intent === 'rehab' ? 'delayed' : 'early';\n  }\n\n  function detectArticleMedical(articleRoot) {\n    if (!articleRoot || !articleRoot.getAttribute) return false;\n    var cachedMedical = readArticleDataValue(articleRoot, 'data-nb-article-medical').toLowerCase();\n    if (cachedMedical === 'true') return true;\n    if (cachedMedical === 'false') return false;\n    return detectArticleIntent(articleRoot) === 'rehab';\n  }\n\n  function detectArticleProductRelevance(articleRoot) {\n    if (!articleRoot || !articleRoot.getAttribute) return 'adjacent';\n    var cachedRelevance = readArticleDataValue(articleRoot, 'data-nb-product-relevance').toLowerCase();\n    if (/^(direct|adjacent|post_safety)$/.test(cachedRelevance)) return cachedRelevance;\n    if (detectArticleMedical(articleRoot) || detectArticleIntent(articleRoot) === 'rehab') return 'post_safety';\n    var source = [\n      articleRoot.getAttribute('data-nb-article-slug') || '',\n      articleRoot.getAttribute('data-nb-article-handle') || '',\n      articleRoot.getAttribute('data-nb-article-title') || ''\n    ].join(' ').toLowerCase();\n    if (/apparaat|equipment|machine|zonder[- ]partner|without[- ]partner|solo|veilige[- ]setup|safe[- ]setup|deuranker|door[- ]anchor|ankle[- ]anchor/.test(source)) {\n      return 'direct';\n    }\n    return 'adjacent';\n  }\n\n  function detectArticleFunnelStage(articleRoot) {\n    if (!articleRoot || !articleRoot.getAttribute) return 'consideration';\n    var cachedStage = readArticleDataValue(articleRoot, 'data-nb-funnel-stage').toLowerCase();\n    if (/^(awareness|consideration|purchase)$/.test(cachedStage)) return cachedStage;\n    var relevance = detectArticleProductRelevance(articleRoot);\n    if (relevance === 'direct') return 'purchase';\n    if (relevance === 'post_safety') return 'awareness';\n    return 'consideration';\n  }\n\n  function detectArticlePrimaryDestination(articleRoot) {\n    if (!articleRoot || !articleRoot.getAttribute) return 'home';\n    var cachedDestination = readArticleDataValue(articleRoot, 'data-nb-primary-destination').toLowerCase();\n    if (/^(product|home)$/.test(cachedDestination)) return cachedDestination;\n    return detectArticleProductRelevance(articleRoot) === 'direct' ? 'product' : 'home';\n  }\n\n  function detectArticleHypothesisId(articleRoot) {\n    if (!articleRoot || !articleRoot.getAttribute) return '';\n    return readArticleDataValue(articleRoot, 'data-nb-hypothesis-id').toLowerCase();\n  }\n\n  function detectArticleQueryFamilyId(articleRoot) {\n    if (!articleRoot || !articleRoot.getAttribute) return '';\n    return readArticleDataValue(articleRoot, 'data-nb-query-family-id').toLowerCase();\n  }\n\n  function detectArticleCroVariant(articleRoot) {\n    if (!articleRoot || !articleRoot.getAttribute) return 'adjacent_v1';\n    var cachedVariant = readArticleDataValue(articleRoot, 'data-nb-cro-variant').toLowerCase();\n    if (/^(direct_v1|adjacent_v1|post_safety_v1)$/.test(cachedVariant)) return cachedVariant;\n    var relevance = detectArticleProductRelevance(articleRoot);\n    if (relevance === 'direct') return 'direct_v1';\n    if (relevance === 'post_safety') return 'post_safety_v1';\n    return 'adjacent_v1';\n  }\n\n  function getArticleAnalyticsContext(node) {\n    var articleRoot = getArticleRootForNode(node);\n    if (!articleRoot) return null;\n    var locale = String(articleRoot.getAttribute('data-nb-article-locale') || document.documentElement.getAttribute('lang') || '').trim();\n    return {\n      root: articleRoot,\n      slug: normalizeArticleSlug(articleRoot.getAttribute('data-nb-article-slug') || articleRoot.getAttribute('data-nb-article-handle') || ''),\n      title: String(articleRoot.getAttribute('data-nb-article-title') || '').trim(),\n      locale: locale,\n      locale_root: localeBaseCode(locale || ''),\n      intent: detectArticleIntent(articleRoot),\n      pillar: detectArticlePillar(articleRoot),\n      page_type: detectArticlePageType(articleRoot),\n      cta_mode: detectArticleCtaMode(articleRoot),\n      medical: detectArticleMedical(articleRoot),\n      product_relevance: detectArticleProductRelevance(articleRoot),\n      funnel_stage: detectArticleFunnelStage(articleRoot),\n      primary_destination: detectArticlePrimaryDestination(articleRoot),\n      hypothesis_id: detectArticleHypothesisId(articleRoot),\n      query_family_id: detectArticleQueryFamilyId(articleRoot),\n      cro_variant: detectArticleCroVariant(articleRoot),\n      cta_experiment_id: readArticleDataValue(articleRoot, 'data-nb-cta-experiment-id'),\n      cta_experiment_signature: readArticleDataValue(articleRoot, 'data-nb-cta-experiment-signature'),\n      cta_message_id: readArticleDataValue(articleRoot, 'data-nb-cta-message-id'),\n      cta_experiment_scope: readArticleDataValue(articleRoot, 'data-nb-cta-experiment-scope'),\n      cta_traffic_scope: readArticleDataValue(articleRoot, 'data-nb-cta-traffic-scope'),\n      cta_experiment_registry_version: readArticleDataValue(articleRoot, 'data-nb-cta-experiment-registry-version'),\n      cta_experiment_variant: readArticleDataValue(articleRoot, 'data-nb-cta-experiment-variant'),\n      cta_experiment_arm: readArticleDataValue(articleRoot, 'data-nb-cta-experiment-arm'),\n      cta_assignment_id: readArticleDataValue(articleRoot, 'data-nb-cta-assignment-id'),\n      cta_assignment_device_class: readArticleDataValue(articleRoot, 'data-nb-cta-assignment-device-class'),\n      cta_assigned_at: readArticleDataValue(articleRoot, 'data-nb-cta-assigned-at'),\n      cta_allocation_percent: Number(readArticleDataValue(articleRoot, 'data-nb-cta-allocation-percent') || 0),\n      cta_exposure_id: readArticleDataValue(articleRoot, 'data-nb-cta-exposure-id'),\n      cta_creative_id: readArticleDataValue(articleRoot, 'data-nb-cta-creative-id'),\n      cta_format: readArticleDataValue(articleRoot, 'data-nb-cta-format'),\n      cta_experiment_enrolled: readArticleDataValue(articleRoot, 'data-nb-cta-experiment-enrolled') === 'true',\n      cta_experiment_eligible: readArticleDataValue(articleRoot, 'data-nb-cta-experiment-eligible') === 'true',\n      cta_qa_override: readArticleDataValue(articleRoot, 'data-nb-cta-qa-override') === 'true',\n      cta_device_class: readArticleDataValue(articleRoot, 'data-nb-cta-device-class'),\n      cta_eligibility_basis: readArticleDataValue(articleRoot, 'data-nb-cta-eligibility-basis'),\n      cta_exclusion_reason: readArticleDataValue(articleRoot, 'data-nb-cta-exclusion-reason')\n    };\n  }\n\n  function getArticleHomeTailSectionKey(node) {\n    if (!node || !node.closest) return '';\n    var section = node.closest('.shopify-section');\n    if (!section || !section.id) return '';\n    var match = section.id.match(/__([A-Za-z0-9_-]+)$/);\n    return match && match[1] ? String(match[1]) : '';\n  }\n\n  function appendArticleAnalyticsContext(payload, node) {\n    if (!payload || typeof payload !== 'object') return payload;\n    var articleContext = getArticleAnalyticsContext(node);\n    if (!articleContext) return payload;\n\n    if (articleContext.slug) payload.article_slug = articleContext.slug;\n    if (articleContext.locale) payload.article_locale = articleContext.locale;\n    if (articleContext.locale_root) payload.article_locale_root = articleContext.locale_root;\n    if (articleContext.intent) payload.article_intent = articleContext.intent;\n    if (articleContext.pillar) payload.pillar = articleContext.pillar;\n    if (articleContext.page_type) payload.article_page_type = articleContext.page_type;\n    if (articleContext.cta_mode) payload.article_cta_mode = articleContext.cta_mode;\n    if (articleContext.medical) payload.article_medical = true;\n    if (articleContext.product_relevance) payload.product_relevance = articleContext.product_relevance;\n    if (articleContext.funnel_stage) payload.funnel_stage = articleContext.funnel_stage;\n    if (articleContext.primary_destination) payload.primary_destination = articleContext.primary_destination;\n    if (articleContext.hypothesis_id) payload.hypothesis_id = articleContext.hypothesis_id;\n    if (articleContext.query_family_id) payload.query_family_id = articleContext.query_family_id;\n    if (articleContext.cro_variant) payload.cro_variant = articleContext.cro_variant;\n    if (articleContext.cro_variant) payload.cro_profile = articleContext.cro_variant;\n    if (articleContext.cta_experiment_id) payload.blog_cta_experiment_id = articleContext.cta_experiment_id;\n    if (articleContext.cta_experiment_signature) payload.blog_cta_experiment_signature = articleContext.cta_experiment_signature;\n    if (articleContext.cta_message_id) payload.blog_cta_message_id = articleContext.cta_message_id;\n    if (articleContext.cta_experiment_scope) payload.blog_cta_experiment_scope = articleContext.cta_experiment_scope;\n    if (articleContext.cta_traffic_scope) payload.blog_cta_traffic_scope = articleContext.cta_traffic_scope;\n    if (articleContext.cta_experiment_registry_version) payload.blog_cta_experiment_registry_version = articleContext.cta_experiment_registry_version;\n    if (articleContext.cta_experiment_variant) payload.blog_cta_experiment_variant = articleContext.cta_experiment_variant;\n    if (articleContext.cta_experiment_arm) payload.blog_cta_experiment_arm = articleContext.cta_experiment_arm;\n    if (articleContext.cta_assignment_id) payload.blog_cta_assignment_id = articleContext.cta_assignment_id;\n    if (articleContext.cta_assignment_device_class) payload.blog_cta_assignment_device_class = articleContext.cta_assignment_device_class;\n    if (articleContext.cta_assigned_at) payload.blog_cta_assigned_at = articleContext.cta_assigned_at;\n    if (articleContext.cta_allocation_percent) payload.blog_cta_allocation_percent = articleContext.cta_allocation_percent;\n    if (articleContext.cta_exposure_id) payload.blog_cta_exposure_id = articleContext.cta_exposure_id;\n    if (articleContext.cta_creative_id) payload.blog_cta_creative_id = articleContext.cta_creative_id;\n    if (articleContext.cta_format) payload.blog_cta_format = articleContext.cta_format;\n    payload.blog_cta_experiment_enrolled = articleContext.cta_experiment_enrolled;\n    payload.blog_cta_experiment_eligible = articleContext.cta_experiment_eligible;\n    payload.blog_cta_qa_override = articleContext.cta_qa_override;\n    payload.blog_cta_device_class = getBlogCtaDeviceClass();\n    if (articleContext.cta_eligibility_basis) payload.blog_cta_eligibility_basis = articleContext.cta_eligibility_basis;\n    if (articleContext.cta_exclusion_reason) payload.blog_cta_exclusion_reason = articleContext.cta_exclusion_reason;\n    payload.blog_cta_measurement_contract_version = BLOG_CTA_MEASUREMENT_CONTRACT_VERSION;\n\n    var sectionKey = getArticleHomeTailSectionKey(node);\n    if (sectionKey.indexOf('home_') === 0) {\n      payload.article_origin_zone = 'home_tail';\n      payload.home_tail_section = sectionKey;\n      if (!payload.slot_type) payload.slot_type = 'home_tail';\n      if (!payload.slot_id) payload.slot_id = 'article_' + sectionKey;\n    }\n\n    return payload;\n  }\n\n  function resolveTrackedDestinationUrl(node) {\n    if (!node || !node.getAttribute) return '';\n    var previewPath = String(node.getAttribute('data-nb-conv-preview-path') || '').trim();\n    if (previewPath) return previewPath;\n    var href = String(node.getAttribute('href') || '').trim();\n    if (href) return href;\n    var form = node.form || (node.closest && node.closest('form'));\n    if (form && form.getAttribute) {\n      var returnToInput = form.querySelector('input[name=\"return_to\"]');\n      if (returnToInput && returnToInput.value) return String(returnToInput.value).trim();\n      var action = String(form.getAttribute('action') || '').trim();\n      if (action) return action;\n    }\n    return '';\n  }\n\n  function resolveBlogDestinationEventName(destination, destinationUrl) {\n    var normalizedDestination = String(destination || '').trim().toLowerCase();\n    var normalizedUrl = String(destinationUrl || '').trim().toLowerCase();\n    if (normalizedDestination === 'product' || normalizedUrl.indexOf('/products/') !== -1) return 'blog_to_product_click';\n    if (normalizedDestination === 'guide' || normalizedUrl.indexOf('/pages/how-to-guide') !== -1) return 'blog_to_guide_click';\n    if (normalizedDestination === 'home') return 'blog_to_home_click';\n    if (normalizedDestination === 'related_article' || normalizedDestination === 'blog' || normalizedUrl.indexOf('/blogs/blog-posts/') !== -1) return 'blog_to_related_article_click';\n    if (normalizedDestination === 'quote' || normalizedUrl.indexOf('/pages/request-a-quote') !== -1 || normalizedUrl.indexOf('/pages/offerte') !== -1) return 'blog_to_quote_click';\n    return '';\n  }\n\n  function getArticleClickText(node) {\n    if (!node) return '';\n    var text = String(node.textContent || node.getAttribute && (node.getAttribute('aria-label') || node.getAttribute('title')) || '')\n      .replace(/\\s+/g, ' ')\n      .trim();\n    return text.length > 140 ? text.slice(0, 137) + '...' : text;\n  }\n\n  function resolveArticleClickUrl(node) {\n    if (!node || !node.getAttribute) return '';\n    var previewPath = String(node.getAttribute('data-nb-conv-preview-path') || '').trim();\n    if (previewPath) return previewPath;\n    var href = String(node.getAttribute('href') || '').trim();\n    if (href) return href;\n    var form = node.form || (node.closest && node.closest('form'));\n    if (form && form.getAttribute) {\n      var returnToInput = form.querySelector('input[name=\"return_to\"]');\n      if (returnToInput && returnToInput.value) return String(returnToInput.value).trim();\n      var action = String(form.getAttribute('action') || '').trim();\n      if (action) return action;\n    }\n    return '';\n  }\n\n  function inferArticleClickDestination(node, articleRoot, explicitDestination, destinationUrl) {\n    var normalizedDestination = String(explicitDestination || '').trim().toLowerCase();\n    if (normalizedDestination) return normalizedDestination;\n\n    var targetPath = normalizeArticlePathValue(destinationUrl || (node && node.getAttribute ? node.getAttribute('href') : '') || '');\n    if (!targetPath) return '';\n\n    var productPath = normalizeArticlePathValue(articleRoot && articleRoot.getAttribute ? articleRoot.getAttribute('data-nb-product-url') || '' : '');\n    var guidePath = normalizeArticlePathValue(articleRoot && articleRoot.getAttribute ? articleRoot.getAttribute('data-nb-guide-url') || '' : '');\n    var homePath = normalizeArticlePathValue(articleRoot && articleRoot.getAttribute ? articleRoot.getAttribute('data-nb-home-url') || '' : '');\n\n    if (productPath && targetPath === productPath) return 'product';\n    if (guidePath && targetPath === guidePath) return 'guide';\n    if (homePath && targetPath === homePath) return 'home';\n    if (/\\/products\\//i.test(targetPath)) return 'product';\n    if (/\\/pages\\/how-to-guide/i.test(targetPath)) return 'guide';\n    if (/\\/cart|\\/checkout/i.test(targetPath)) return 'checkout';\n    if (/\\/collections\\//i.test(targetPath)) return 'collection';\n    if (/\\/blogs\\/blog-posts\\//i.test(targetPath)) return 'blog';\n    return '';\n  }\n\n  function pushArticleClickEvent(eventName, node, articleRoot, options) {\n    if (!eventName || !node) return;\n    var slotCarrier = node.closest\n      ? node.closest('[data-nb-slot-id], [data-nb-slot-type], [data-nb-slot-destination], [data-nb-conversion-slot], [data-nb-inline-slot]')\n      : null;\n    var destinationUrl = resolveArticleClickUrl(node);\n    var explicitDestination = String((options && options.destination) || '').trim();\n    var destination = inferArticleClickDestination(node, articleRoot, explicitDestination, destinationUrl);\n    var payload = {\n      event: eventName,\n      context_path: window.location.pathname || '',\n      destination: destination || explicitDestination || 'unknown',\n      link_url: destinationUrl,\n      link_text: getArticleClickText(node)\n    };\n    if (eventName.indexOf('blog_cta_') === 0) {\n      payload.measurement_contract_version = BLOG_CTA_MEASUREMENT_CONTRACT_VERSION;\n    }\n    var slotId = String((options && options.slot_id) || (node.getAttribute && node.getAttribute('data-nb-slot-id')) || (slotCarrier && slotCarrier.getAttribute ? slotCarrier.getAttribute('data-nb-slot-id') : '') || '').trim();\n    var slotType = String((options && options.slot_type) || (node.getAttribute && node.getAttribute('data-nb-slot-type')) || (slotCarrier && slotCarrier.getAttribute ? slotCarrier.getAttribute('data-nb-slot-type') : '') || '').trim();\n    if (slotId) payload.slot_id = slotId;\n    if (slotType) payload.slot_type = slotType;\n    var actionRank = String((options && options.action_rank) || (node.getAttribute && node.getAttribute('data-nb-action-rank')) || '').trim();\n    var surfaceSource = String((options && options.surface_source) || (node.getAttribute && node.getAttribute('data-nb-surface-source')) || '').trim();\n    if (actionRank) payload.action_rank = actionRank;\n    if (surfaceSource) payload.surface_source = surfaceSource;\n    if (options && options.placement) payload.placement = options.placement;\n    pushEvent(appendArticleAnalyticsContext(payload, articleRoot || node));\n  }\n\n  function initCtaTracking() {\n    var ctas = document.querySelectorAll('[data-nb-cta]');\n    if (!ctas.length) return;\n\n    function readCssPixelVar(root, name) {\n      if (!root || !name) return 0;\n      var value = parseFloat(String(getComputedStyle(root).getPropertyValue(name) || '').trim());\n      return Number.isFinite(value) ? value : 0;\n    }\n\n    function getVisibleFixedStackBottom() {\n      var bottom = 0;\n      ['.nb-announcement', '[data-nb-header]'].forEach(function (selector) {\n        var node = document.querySelector(selector);\n        if (!node) return;\n        var rect = node.getBoundingClientRect();\n        if (rect.bottom <= 0 || rect.top >= window.innerHeight) return;\n        bottom = Math.max(bottom, rect.bottom);\n      });\n      return Math.max(0, Math.round(bottom));\n    }\n\n    function getArticleTocScrollOffset() {\n      var root = document.documentElement;\n      var visibleBottom = getVisibleFixedStackBottom();\n      var fixedStack = readCssPixelVar(root, '--nb-fixed-stack-height');\n      var liveHeader = readCssPixelVar(root, '--nb-header-live-height');\n      var staticHeader = readCssPixelVar(root, '--nb-header-height');\n      if (visibleBottom > 0) return visibleBottom + 7;\n      if (fixedStack > 0) return fixedStack + 7;\n      if (liveHeader > 0) return liveHeader + 7;\n      if (staticHeader > 0) return staticHeader + 7;\n      return 7;\n    }\n\n    function scrollToArticleTocTarget(target, targetId) {\n      if (!target) return false;\n      var offset = getArticleTocScrollOffset();\n      var top = Math.max(0, Math.round(window.scrollY + target.getBoundingClientRect().top - offset));\n      var prefersReducedMotion = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n      window.scrollTo({\n        top: top,\n        behavior: prefersReducedMotion ? 'auto' : 'smooth'\n      });\n      if (targetId) {\n        var hash = '#' + String(targetId).replace(/^#/, '');\n        if (window.location.hash !== hash) {\n          if (window.history && typeof window.history.pushState === 'function') {\n            window.history.pushState(null, '', hash);\n          } else {\n            window.location.hash = hash;\n          }\n        }\n      }\n      return true;\n    }\n\n    ctas.forEach(function (cta) {\n      if (cta.dataset.nbCtaBound === 'true') return;\n      cta.dataset.nbCtaBound = 'true';\n      cta.addEventListener('click', function (event) {\n        var slotCarrier = cta.closest('[data-nb-slot-id], [data-nb-slot-type], [data-nb-slot-destination]');\n        var htmlRoot = document.documentElement;\n        var payload = {\n          event: 'cta_click',\n          cta_id: cta.getAttribute('data-nb-cta') || '',\n          context_path: window.location.pathname\n        };\n        var slotId = String(cta.getAttribute('data-nb-slot-id') || (slotCarrier && slotCarrier.getAttribute ? slotCarrier.getAttribute('data-nb-slot-id') : '') || '').trim();\n        var slotType = String(cta.getAttribute('data-nb-slot-type') || (slotCarrier && slotCarrier.getAttribute ? slotCarrier.getAttribute('data-nb-slot-type') : '') || '').trim();\n        var destination = String(cta.getAttribute('data-nb-slot-destination') || (slotCarrier && slotCarrier.getAttribute ? slotCarrier.getAttribute('data-nb-slot-destination') : '') || '').trim().toLowerCase();\n        var actionRank = String(cta.getAttribute('data-nb-action-rank') || (slotCarrier && slotCarrier.getAttribute ? slotCarrier.getAttribute('data-nb-action-rank') : '') || '').trim().toLowerCase();\n        var surfaceSource = String(cta.getAttribute('data-nb-surface-source') || (slotCarrier && slotCarrier.getAttribute ? slotCarrier.getAttribute('data-nb-surface-source') : '') || '').trim().toLowerCase();\n        var cutoffBadgeVariant = String((htmlRoot && htmlRoot.getAttribute('data-nb-product-cutoff-badge-variant')) || '').trim().toUpperCase();\n        var cutoffBadgeTest = String((htmlRoot && htmlRoot.getAttribute('data-nb-product-cutoff-badge-test')) || '').trim();\n        if (slotId) payload.slot_id = slotId;\n        if (slotType) payload.slot_type = slotType;\n        if (destination) payload.destination = destination;\n        if (actionRank) payload.action_rank = actionRank;\n        if (surfaceSource) payload.surface_source = surfaceSource;\n        if (cutoffBadgeVariant === 'A' || cutoffBadgeVariant === 'B') {\n          payload.product_cutoff_badge_variant = cutoffBadgeVariant;\n        }\n        if (cutoffBadgeTest) {\n          payload.product_cutoff_badge_test = cutoffBadgeTest;\n        }\n\n        appendArticleAnalyticsContext(payload, cta);\n\n        if (cta.hasAttribute('data-nb-article-toc-link')) {\n          var targetId = String(cta.getAttribute('data-nb-toc-target') || '').trim();\n          var target = targetId ? document.getElementById(targetId) : null;\n          if (target) {\n            event.preventDefault();\n            scrollToArticleTocTarget(target, targetId);\n          }\n          pushEvent(\n            appendArticleAnalyticsContext(\n              {\n                event: 'blog_toc_click',\n                context_path: window.location.pathname,\n                slot_id: payload.slot_id || 'article_toc',\n                slot_type: 'toc',\n                toc_target: targetId\n              },\n              cta\n            )\n          );\n        }\n\n        var articleRootForCta = getArticleRootForNode(cta);\n        var inlineExperimentCard = cta.closest ? cta.closest('.nb-article-inline-conversion') : null;\n        if (\n          articleRootForCta &&\n          inlineExperimentCard &&\n          inlineExperimentCard.getAttribute('data-nb-cta-experiment-enrolled') === 'true' &&\n          inlineExperimentCard.getAttribute('data-nb-cta-qa-override') !== 'true' &&\n          hasAttributionStorageConsent()\n        ) {\n          ensureBlogCtaInteractionExposure(inlineExperimentCard);\n        }\n        var storedOrigin = null;\n        if (articleRootForCta && /^(product|home|guide|checkout)$/.test(destination)) {\n          storedOrigin = persistBlogOrigin(articleRootForCta, {\n            slot_id: slotId,\n            surface_source: surfaceSource || 'theme'\n          });\n          if (storedOrigin && /^(product|checkout)$/.test(destination)) {\n            syncBlogOriginToCart(storedOrigin);\n          }\n        }\n\n        pushEvent(payload);\n\n        if (articleRootForCta) {\n          var specificEventName = '';\n          var stickyCta = cta.closest('[data-nb-article-mobile-sticky]');\n          var inlineProductCard = inlineExperimentCard;\n          if (stickyCta) {\n            specificEventName = 'blog_sticky_cta_click';\n          } else if (inlineProductCard) {\n            specificEventName = 'blog_product_card_click';\n          }\n          if (specificEventName) {\n            pushArticleClickEvent(specificEventName, cta, articleRootForCta, {\n              destination: destination,\n              slot_id: slotId,\n              slot_type: slotType,\n              action_rank: actionRank,\n              surface_source: surfaceSource,\n              placement: stickyCta ? 'article_mobile_sticky' : 'article_product_card'\n            });\n          }\n          if (\n            inlineProductCard &&\n            inlineProductCard.getAttribute('data-nb-cta-experiment-enrolled') === 'true' &&\n            inlineProductCard.getAttribute('data-nb-cta-qa-override') !== 'true' &&\n            hasAttributionStorageConsent() &&\n            getBlogCtaDeviceClass() === 'desktop'\n          ) {\n            pushArticleClickEvent('blog_cta_experiment_click', cta, articleRootForCta, {\n              destination: destination,\n              slot_id: slotId,\n              slot_type: slotType,\n              action_rank: actionRank,\n              surface_source: surfaceSource,\n              placement: 'article_product_card'\n            });\n          }\n        }\n\n        var destinationUrl = resolveTrackedDestinationUrl(cta);\n        var placement = payload.slot_id || payload.slot_type || payload.cta_id || '';\n        if (articleRootForCta && destination && destination !== 'article_section') {\n          pushEvent(\n            appendArticleAnalyticsContext(\n              {\n                event: 'blog_cta_click',\n                context_path: window.location.pathname,\n                destination: destination,\n                destination_url: destinationUrl,\n                placement: placement,\n                slot_id: slotId,\n                slot_type: slotType,\n                action_rank: actionRank || 'primary',\n                surface_source: surfaceSource || 'theme'\n              },\n              cta\n            )\n          );\n        }\n        var destinationEventName = resolveBlogDestinationEventName(destination, destinationUrl);\n        if (destinationEventName) {\n          pushEvent(\n            appendArticleAnalyticsContext(\n              {\n                event: destinationEventName,\n                context_path: window.location.pathname,\n                destination: destination || '',\n                destination_url: destinationUrl,\n                placement: placement,\n                slot_id: slotId,\n                slot_type: slotType,\n                action_rank: actionRank || 'primary',\n                surface_source: surfaceSource || 'theme'\n              },\n              cta\n            )\n          );\n        }\n      });\n    });\n  }\n\n  var blogConversionObserver = null;\n  var commercialSurfaceObserver = null;\n  var COMMERCIAL_SURFACE_SESSION_KEY = 'nb_commercial_surface_views_v1';\n  var BLOG_CONVERSION_SESSION_KEY = 'nb_blog_conversion_impressions_v1';\n  var BLOG_SCROLL_DEPTH_SESSION_KEY = 'nb_blog_scroll_depth_v1';\n  var BLOG_VIEW_SESSION_KEY = 'nb_blog_view_events_v1';\n  var BLOG_CTA_EXPERIMENT_STORAGE_PREFIX = 'nb_blog_cta_layout_assignment_v6::';\n  var BLOG_CTA_EXPERIMENT_MUTEX_KEY = 'nb_blog_cta_active_experiment_v5';\n  var BLOG_CTA_EXPERIMENT_TTL_MS = 56 * 24 * 60 * 60 * 1000;\n  var BLOG_CTA_ASSIGNMENT_SESSION_KEY = 'nb_blog_cta_assignment_events_v1';\n  var BLOG_CTA_OPPORTUNITY_SESSION_KEY = 'nb_blog_cta_opportunity_events_v1';\n  var BLOG_CTA_EXPOSURE_SESSION_KEY = 'nb_blog_cta_exposure_events_v1';\n  var BLOG_HOME_TAIL_ENGAGED_SESSION_KEY = 'nb_blog_home_tail_engaged_v1';\n  var BLOG_CTA_DESKTOP_MIN_WIDTH = 1024;\n  var BLOG_CTA_SQUARE_MEDIA_FALLBACK_URL = 'https://www.nordbelt.nl/cdn/shop/files/D752523_c86215bc-4539-47d7-8d5b-aa2407ee05e3.webp?v=2564746804793599951&width=700';\n  var BLOG_CTA_MEASUREMENT_CONTRACT_VERSION = 'cta_measurement_v2';\n  var BLOG_CTA_EXPERIMENT_REGISTRY_VERSION = '2026-07-11.5';\n  var blogCtaPendingAssignments = {};\n  var BLOG_CTA_EXPERIMENTS = {\n    direct: {\n      experiment_id: 'nb_blog_cta_format_direct_desktop_v5',\n      experiment_signature: 'rich_vs_compact_home_first_door_photo_eligible_blog_desktop_r5',\n      message_id: 'home_first_direct_m2',\n      experiment_scope: 'direct_desktop_inline_cta_layout',\n      traffic_scope: 'eligible_blog_sessions',\n      arms: [\n        { arm: 'A', variant: 'rich_square_door_r2', creative_id: 'rich_square_door_r2', layout_variant: 'rich_square', format: 'rich', weight: 50 },\n        { arm: 'B', variant: 'compact_strip_door_c2', creative_id: 'compact_strip_door_c2', layout_variant: 'compact_inline', format: 'compact', weight: 50 }\n      ]\n    },\n    adjacent: {\n      experiment_id: 'nb_blog_cta_format_adjacent_desktop_v5',\n      experiment_signature: 'rich_vs_compact_home_first_door_photo_eligible_blog_desktop_r5',\n      message_id: 'home_first_adjacent_m2',\n      experiment_scope: 'adjacent_desktop_inline_cta_layout',\n      traffic_scope: 'eligible_blog_sessions',\n      arms: [\n        { arm: 'A', variant: 'rich_square_door_r2', creative_id: 'rich_square_door_r2', layout_variant: 'rich_square', format: 'rich', weight: 50 },\n        { arm: 'B', variant: 'compact_strip_door_c2', creative_id: 'compact_strip_door_c2', layout_variant: 'compact_inline', format: 'compact', weight: 50 }\n      ]\n    }\n  };\n\n  function readBlogExperimentSessionMap(key) {\n    var raw = readStorageItem(window.sessionStorage, key);\n    if (!raw) return {};\n    var parsed = safeParseJson(raw, {});\n    return parsed && typeof parsed === 'object' ? parsed : {};\n  }\n\n  function writeBlogExperimentSessionMap(key, value) {\n    if (!key || !value || typeof value !== 'object') return;\n    writeStorageItem(window.sessionStorage, key, JSON.stringify(value));\n  }\n\n  function getBlogCtaDeviceClass() {\n    var width = window.innerWidth || document.documentElement.clientWidth || 0;\n    if (width >= BLOG_CTA_DESKTOP_MIN_WIDTH) return 'desktop';\n    if (width >= 701) return 'tablet';\n    return 'mobile';\n  }\n\n  function getBlogCtaQaOverride() {\n    try {\n      var value = String(new URLSearchParams(window.location.search || '').get('nb_blog_cta_layout') || '').trim().toLowerCase();\n      return value === 'rich' || value === 'compact' ? value : '';\n    } catch (_err) {\n      return '';\n    }\n  }\n\n  function getBlogCtaExperimentSpec(articleRoot) {\n    if (!articleRoot || detectArticleMedical(articleRoot)) return null;\n    var relevance = detectArticleProductRelevance(articleRoot);\n    return BLOG_CTA_EXPERIMENTS[relevance] || null;\n  }\n\n  function getBlogCtaExperimentId(articleRoot) {\n    var spec = getBlogCtaExperimentSpec(articleRoot);\n    return spec ? spec.experiment_id : '';\n  }\n\n  function getBlogCtaMessageId(articleRoot) {\n    var relevance = detectArticleProductRelevance(articleRoot);\n    if (relevance === 'direct') return 'home_first_direct_m2';\n    if (relevance === 'post_safety') return 'home_first_post_safety_m2';\n    return 'home_first_adjacent_m2';\n  }\n\n  function randomBlogCtaUnit() {\n    try {\n      if (window.crypto && typeof window.crypto.getRandomValues === 'function') {\n        var values = new Uint32Array(1);\n        window.crypto.getRandomValues(values);\n        return values[0] / 4294967296;\n      }\n    } catch (_err) {}\n    return Math.random();\n  }\n\n  function getBlogCtaArmSpec(spec, arm) {\n    if (!spec || !Array.isArray(spec.arms)) return null;\n    for (var index = 0; index < spec.arms.length; index += 1) {\n      if (spec.arms[index] && spec.arms[index].arm === arm) return spec.arms[index];\n    }\n    return null;\n  }\n\n  function chooseWeightedBlogCtaArm(spec) {\n    if (!spec || !Array.isArray(spec.arms) || !spec.arms.length) return null;\n    var totalWeight = spec.arms.reduce(function (sum, armSpec) {\n      return sum + Math.max(0, Number(armSpec && armSpec.weight || 0));\n    }, 0);\n    if (!(totalWeight > 0)) return null;\n    var draw = randomBlogCtaUnit() * totalWeight;\n    var cumulative = 0;\n    for (var index = 0; index < spec.arms.length; index += 1) {\n      var armSpec = spec.arms[index];\n      cumulative += Math.max(0, Number(armSpec && armSpec.weight || 0));\n      if (draw < cumulative) return armSpec;\n    }\n    return spec.arms[spec.arms.length - 1];\n  }\n\n  function readBlogCtaExperimentMutex() {\n    if (!hasAttributionStorageConsent()) return null;\n    var parsed = safeParseJson(readStorageItem(window.localStorage, BLOG_CTA_EXPERIMENT_MUTEX_KEY), null);\n    if (!parsed || typeof parsed !== 'object') return null;\n    if (!parsed.experiment_id || !parsed.experiment_signature || !parsed.message_id || !parsed.assignment_id) {\n      removeStorageItem(window.localStorage, BLOG_CTA_EXPERIMENT_MUTEX_KEY);\n      return null;\n    }\n    var assignedAt = Date.parse(parsed.assigned_at || '');\n    if (!assignedAt || Date.now() - assignedAt > BLOG_CTA_EXPERIMENT_TTL_MS) {\n      removeStorageItem(window.localStorage, BLOG_CTA_EXPERIMENT_MUTEX_KEY);\n      return null;\n    }\n    return parsed;\n  }\n\n  function writeBlogCtaExperimentMutex(assignment) {\n    if (!assignment || !hasAttributionStorageConsent()) return;\n    writeStorageItem(window.localStorage, BLOG_CTA_EXPERIMENT_MUTEX_KEY, JSON.stringify({\n      experiment_id: assignment.experiment_id,\n      experiment_signature: assignment.experiment_signature,\n      message_id: assignment.message_id,\n      arm: assignment.arm,\n      assignment_id: assignment.assignment_id,\n      assigned_at: assignment.assigned_at,\n      expires_at: assignment.expires_at\n    }));\n  }\n\n  function readBlogCtaAssignment(spec) {\n    if (!spec || !spec.experiment_id || !hasAttributionStorageConsent()) return null;\n    var raw = readStorageItem(window.localStorage, BLOG_CTA_EXPERIMENT_STORAGE_PREFIX + spec.experiment_id);\n    var parsed = safeParseJson(raw, null);\n    if (!parsed || typeof parsed !== 'object') return null;\n    var armSpec = getBlogCtaArmSpec(spec, parsed.arm);\n    if (\n      !armSpec ||\n      parsed.experiment_id !== spec.experiment_id ||\n      parsed.experiment_signature !== spec.experiment_signature ||\n      parsed.message_id !== spec.message_id ||\n      parsed.variant !== armSpec.variant ||\n      parsed.creative_id !== armSpec.creative_id ||\n      !parsed.assignment_id\n    ) {\n      removeStorageItem(window.localStorage, BLOG_CTA_EXPERIMENT_STORAGE_PREFIX + spec.experiment_id);\n      return null;\n    }\n    var assignedAt = Date.parse(parsed.assigned_at || '');\n    if (!assignedAt || Date.now() - assignedAt > BLOG_CTA_EXPERIMENT_TTL_MS) {\n      removeStorageItem(window.localStorage, BLOG_CTA_EXPERIMENT_STORAGE_PREFIX + spec.experiment_id);\n      return null;\n    }\n    return parsed;\n  }\n\n  function createPendingBlogCtaAssignment(spec) {\n    if (!spec || !spec.experiment_id) return null;\n    var existing = blogCtaPendingAssignments[spec.experiment_id];\n    if (\n      existing &&\n      existing.experiment_signature === spec.experiment_signature &&\n      existing.message_id === spec.message_id\n    ) return existing;\n    var armSpec = chooseWeightedBlogCtaArm(spec);\n    if (!armSpec) return null;\n    var pending = {\n      experiment_id: spec.experiment_id,\n      experiment_signature: spec.experiment_signature,\n      message_id: spec.message_id,\n      experiment_scope: spec.experiment_scope,\n      arm: armSpec.arm,\n      variant: armSpec.variant,\n      creative_id: armSpec.creative_id,\n      layout_variant: armSpec.layout_variant,\n      format: armSpec.format,\n      weight: armSpec.weight,\n      assignment_id: '',\n      pending_consent: true\n    };\n    blogCtaPendingAssignments[spec.experiment_id] = pending;\n    return pending;\n  }\n\n  function createBlogCtaAssignment(spec, preferredArm) {\n    if (!spec || !spec.experiment_id || !hasAttributionStorageConsent()) return null;\n    var armSpec = getBlogCtaArmSpec(spec, preferredArm) || chooseWeightedBlogCtaArm(spec);\n    if (!armSpec) return null;\n    var now = new Date().toISOString();\n    var assignment = {\n      experiment_id: spec.experiment_id,\n      experiment_signature: spec.experiment_signature,\n      message_id: spec.message_id,\n      experiment_scope: spec.experiment_scope,\n      registry_version: BLOG_CTA_EXPERIMENT_REGISTRY_VERSION,\n      arm: armSpec.arm,\n      variant: armSpec.variant,\n      creative_id: armSpec.creative_id,\n      layout_variant: armSpec.layout_variant,\n      format: armSpec.format,\n      weight: armSpec.weight,\n      assignment_id: createEventId('cta_assignment'),\n      assignment_device_class: getBlogCtaDeviceClass(),\n      assigned_at: now,\n      expires_at: new Date(Date.now() + BLOG_CTA_EXPERIMENT_TTL_MS).toISOString()\n    };\n    writeStorageItem(window.localStorage, BLOG_CTA_EXPERIMENT_STORAGE_PREFIX + spec.experiment_id, JSON.stringify(assignment));\n    writeBlogCtaExperimentMutex(assignment);\n    delete blogCtaPendingAssignments[spec.experiment_id];\n    return assignment;\n  }\n\n  function resolvedBlogCtaAssignment(spec, assignment, options) {\n    var settings = options || {};\n    var armSpec = assignment ? getBlogCtaArmSpec(spec, assignment.arm) : null;\n    return {\n      experimentId: spec ? spec.experiment_id : '',\n      experimentSignature: spec ? spec.experiment_signature : '',\n      messageId: spec ? spec.message_id : (settings.messageId || ''),\n      experimentScope: spec ? spec.experiment_scope : '',\n      trafficScope: spec ? spec.traffic_scope : '',\n      registryVersion: BLOG_CTA_EXPERIMENT_REGISTRY_VERSION,\n      variant: armSpec ? armSpec.variant : (settings.variant || 'rich_square_door_r2'),\n      arm: armSpec ? armSpec.arm : (settings.arm || 'control'),\n      assignmentId: assignment && assignment.assignment_id ? assignment.assignment_id : '',\n      assignmentDeviceClass: assignment && assignment.assignment_device_class ? assignment.assignment_device_class : '',\n      assignedAt: assignment && assignment.assigned_at ? assignment.assigned_at : '',\n      allocationPercent: armSpec ? Number(armSpec.weight || 0) : 0,\n      layoutVariant: armSpec ? armSpec.layout_variant : (settings.layoutVariant || 'rich_square'),\n      format: armSpec ? armSpec.format : (settings.format || 'rich'),\n      creativeId: armSpec ? armSpec.creative_id : (settings.creativeId || 'rich_square_door_r2'),\n      eligible: settings.eligible === true,\n      enrolled: settings.enrolled === true,\n      qaOverride: settings.qaOverride === true,\n      deviceClass: settings.deviceClass || getBlogCtaDeviceClass(),\n      eligibilityBasis: settings.eligibilityBasis || '',\n      exclusionReason: settings.exclusionReason || ''\n    };\n  }\n\n  function resolveBlogCtaLayout(articleRoot) {\n    var deviceClass = getBlogCtaDeviceClass();\n    var relevance = detectArticleProductRelevance(articleRoot);\n    var forcedVariant = getBlogCtaQaOverride();\n    var spec = getBlogCtaExperimentSpec(articleRoot);\n    var experimentId = spec ? spec.experiment_id : '';\n    var messageId = getBlogCtaMessageId(articleRoot);\n    var desktopEligible = deviceClass === 'desktop' && !!spec;\n    var eligibilityBasis = detectArticleHypothesisId(articleRoot) || detectArticleQueryFamilyId(articleRoot)\n      ? 'commerce_provenance'\n      : 'legacy_governance';\n\n    if (forcedVariant) {\n      return {\n        experimentId: experimentId || 'nb_blog_cta_format_qa_preview_v1',\n        experimentSignature: 'qa_preview_not_for_analysis',\n        messageId: messageId,\n        experimentScope: 'qa_preview',\n        registryVersion: BLOG_CTA_EXPERIMENT_REGISTRY_VERSION,\n        variant: forcedVariant === 'compact' ? 'compact_strip_door_c2' : 'rich_square_door_r2',\n        arm: forcedVariant === 'compact' ? 'B' : 'A',\n        assignmentId: '',\n        assignmentDeviceClass: '',\n        allocationPercent: 0,\n        layoutVariant: forcedVariant === 'compact' ? 'compact_inline' : 'rich_square',\n        format: forcedVariant,\n        creativeId: forcedVariant === 'compact' ? 'compact_strip_door_c2' : 'rich_square_door_r2',\n        eligible: false,\n        enrolled: false,\n        qaOverride: true,\n        deviceClass: deviceClass,\n        eligibilityBasis: 'qa_override',\n        exclusionReason: 'qa_override'\n      };\n    }\n\n    if (deviceClass === 'desktop' && relevance === 'post_safety') {\n      return {\n        experimentId: '',\n        experimentSignature: '',\n        messageId: 'home_first_post_safety_m2',\n        experimentScope: '',\n        registryVersion: BLOG_CTA_EXPERIMENT_REGISTRY_VERSION,\n        variant: 'compact_safety_door_c2',\n        arm: 'control',\n        assignmentId: '',\n        assignmentDeviceClass: '',\n        allocationPercent: 0,\n        layoutVariant: 'compact_safety',\n        format: 'compact',\n        creativeId: 'compact_safety_door_c2',\n        eligible: false,\n        enrolled: false,\n        qaOverride: false,\n        deviceClass: deviceClass,\n        eligibilityBasis: 'medical_safety_control',\n        exclusionReason: 'medical_safety_control'\n      };\n    }\n\n    if (!desktopEligible) {\n      return resolvedBlogCtaAssignment(spec, null, {\n        variant: 'rich_square_door_r2',\n        arm: 'control',\n        layoutVariant: 'rich_square',\n        format: 'rich',\n        creativeId: 'rich_square_door_r2',\n        messageId: messageId,\n        eligible: false,\n        enrolled: false,\n        deviceClass: deviceClass,\n        eligibilityBasis: deviceClass === 'desktop' ? eligibilityBasis : 'desktop_only',\n        exclusionReason: deviceClass === 'desktop' ? 'not_experiment_eligible' : 'desktop_only'\n      });\n    }\n\n    var mutex = readBlogCtaExperimentMutex();\n    if (\n      mutex &&\n      (\n        mutex.experiment_id !== spec.experiment_id ||\n        mutex.experiment_signature !== spec.experiment_signature ||\n        mutex.message_id !== spec.message_id\n      )\n    ) {\n      return resolvedBlogCtaAssignment(spec, null, {\n        variant: 'rich_square_door_r2',\n        arm: 'control_excluded',\n        layoutVariant: 'rich_square',\n        format: 'rich',\n        creativeId: 'rich_square_door_r2',\n        eligible: true,\n        enrolled: false,\n        deviceClass: deviceClass,\n        eligibilityBasis: eligibilityBasis,\n        exclusionReason: 'global_experiment_mutex'\n      });\n    }\n\n    var assignment = readBlogCtaAssignment(spec);\n    if (!assignment && hasAttributionStorageConsent()) {\n      assignment = createBlogCtaAssignment(\n        spec,\n        mutex && mutex.experiment_id === spec.experiment_id && mutex.message_id === spec.message_id ? mutex.arm : ''\n      );\n    }\n    if (!assignment) {\n      var pending = createPendingBlogCtaAssignment(spec);\n      return resolvedBlogCtaAssignment(spec, pending, {\n        eligible: true,\n        enrolled: false,\n        deviceClass: deviceClass,\n        eligibilityBasis: 'consent_required',\n        exclusionReason: 'pending_consent'\n      });\n    }\n\n    return resolvedBlogCtaAssignment(spec, assignment, {\n      eligible: true,\n      enrolled: true,\n      deviceClass: deviceClass,\n      eligibilityBasis: eligibilityBasis\n    });\n  }\n\n  function setBlogCtaExperimentData(node, assignment) {\n    if (!node || !node.setAttribute || !assignment) return;\n    var values = {\n      'data-nb-layout-variant': assignment.layoutVariant,\n      'data-nb-cta-experiment-id': assignment.experimentId,\n      'data-nb-cta-experiment-signature': assignment.experimentSignature,\n      'data-nb-cta-message-id': assignment.messageId,\n      'data-nb-cta-experiment-scope': assignment.experimentScope,\n      'data-nb-cta-traffic-scope': assignment.trafficScope,\n      'data-nb-cta-experiment-registry-version': assignment.registryVersion,\n      'data-nb-cta-experiment-variant': assignment.variant,\n      'data-nb-cta-experiment-arm': assignment.arm,\n      'data-nb-cta-assignment-id': assignment.assignmentId,\n      'data-nb-cta-assignment-device-class': assignment.assignmentDeviceClass,\n      'data-nb-cta-assigned-at': assignment.assignedAt,\n      'data-nb-cta-allocation-percent': String(assignment.allocationPercent || 0),\n      'data-nb-cta-creative-id': assignment.creativeId,\n      'data-nb-cta-format': assignment.format,\n      'data-nb-cta-experiment-eligible': assignment.eligible ? 'true' : 'false',\n      'data-nb-cta-experiment-enrolled': assignment.enrolled ? 'true' : 'false',\n      'data-nb-cta-qa-override': assignment.qaOverride ? 'true' : 'false',\n      'data-nb-cta-device-class': assignment.deviceClass,\n      'data-nb-cta-eligibility-basis': assignment.eligibilityBasis,\n      'data-nb-cta-exclusion-reason': assignment.exclusionReason\n    };\n    Object.keys(values).forEach(function (attribute) {\n      node.setAttribute(attribute, values[attribute] || '');\n    });\n  }\n\n  function applyBlogCtaLayoutExperiment(wrapper, articleRoot) {\n    var assignment = resolveBlogCtaLayout(articleRoot);\n    wrapper.classList.add(assignment.format === 'compact' ? 'is-layout-compact' : 'is-layout-rich');\n    if (assignment.layoutVariant === 'compact_safety') wrapper.classList.add('is-layout-safety');\n    setBlogCtaExperimentData(wrapper, assignment);\n    setBlogCtaExperimentData(articleRoot, assignment);\n    return assignment;\n  }\n\n  function enrollPendingBlogCtaAssignments(rootNode) {\n    if (!hasAttributionStorageConsent()) return;\n    var scope = rootNode && rootNode.querySelectorAll ? rootNode : document;\n    var articleRoots = [];\n    if (scope.matches && scope.matches('[data-nb-article-conversion]')) articleRoots.push(scope);\n    scope.querySelectorAll('[data-nb-article-conversion]').forEach(function (articleRoot) {\n      articleRoots.push(articleRoot);\n    });\n    articleRoots.forEach(function (articleRoot) {\n      if (!articleRoot || getBlogCtaDeviceClass() !== 'desktop') return;\n      if (articleRoot.getAttribute('data-nb-cta-experiment-enrolled') === 'true') return;\n      if (articleRoot.getAttribute('data-nb-cta-exclusion-reason') !== 'pending_consent') return;\n      var spec = getBlogCtaExperimentSpec(articleRoot);\n      if (!spec) return;\n      var mutex = readBlogCtaExperimentMutex();\n      if (\n        mutex &&\n        (\n          mutex.experiment_id !== spec.experiment_id ||\n          mutex.experiment_signature !== spec.experiment_signature ||\n          mutex.message_id !== spec.message_id\n        )\n      ) return;\n      var pending = blogCtaPendingAssignments[spec.experiment_id] || createPendingBlogCtaAssignment(spec);\n      var assignment = createBlogCtaAssignment(spec, pending && pending.arm ? pending.arm : '');\n      if (!assignment) return;\n      var resolved = resolvedBlogCtaAssignment(spec, assignment, {\n        eligible: true,\n        enrolled: true,\n        deviceClass: 'desktop',\n        eligibilityBasis: detectArticleHypothesisId(articleRoot) || detectArticleQueryFamilyId(articleRoot)\n          ? 'commerce_provenance'\n          : 'legacy_governance'\n      });\n      var block = articleRoot.querySelector('.nb-article-inline-conversion');\n      if (block) {\n        block.classList.remove('is-layout-rich', 'is-layout-compact', 'is-layout-safety');\n        block.classList.add(resolved.format === 'compact' ? 'is-layout-compact' : 'is-layout-rich');\n        setBlogCtaExperimentData(block, resolved);\n      }\n      setBlogCtaExperimentData(articleRoot, resolved);\n      var sentinel = articleRoot.querySelector('[data-nb-cta-opportunity-sentinel]');\n      if (!sentinel && block) {\n        sentinel = createArticleCtaOpportunitySentinel(block);\n        if (sentinel) insertNodeBefore(sentinel, block);\n      }\n      persistBlogOrigin(articleRoot, { surface_source: 'consent_accept_assignment' });\n      initBlogCtaExperimentTracking(articleRoot);\n    });\n  }\n\n  function trackBlogCtaExperimentAssignment(node) {\n    if (!node || !hasAttributionStorageConsent()) return;\n    if (node.getAttribute('data-nb-cta-experiment-enrolled') !== 'true') return;\n    if (node.getAttribute('data-nb-cta-qa-override') === 'true') return;\n    var experimentId = String(node.getAttribute('data-nb-cta-experiment-id') || '').trim();\n    var assignmentId = String(node.getAttribute('data-nb-cta-assignment-id') || '').trim();\n    if (!experimentId || !assignmentId) return;\n    var articleRoot = getArticleRootForNode(node);\n    var context = getArticleAnalyticsContext(articleRoot || node);\n    var key = experimentId + '::' + assignmentId + '::' + (context && context.slug ? context.slug : window.location.pathname);\n    var events = readBlogExperimentSessionMap(BLOG_CTA_ASSIGNMENT_SESSION_KEY);\n    if (events[key]) return;\n    events[key] = Date.now();\n    writeBlogExperimentSessionMap(BLOG_CTA_ASSIGNMENT_SESSION_KEY, events);\n    pushEvent(\n      appendArticleAnalyticsContext(\n        {\n          event: 'blog_cta_experiment_eligible',\n          context_path: window.location.pathname || '',\n          eligibility_scope: 'consented_pre_assignment',\n          measurement_contract_version: BLOG_CTA_MEASUREMENT_CONTRACT_VERSION\n        },\n        node\n      )\n    );\n    pushEvent(\n      appendArticleAnalyticsContext(\n        {\n          event: 'blog_cta_experiment_assignment',\n          context_path: window.location.pathname || '',\n          randomization_unit: 'consented_visitor',\n          allocation_percent: Number(node.getAttribute('data-nb-cta-allocation-percent') || 0),\n          experiment_scope: String(node.getAttribute('data-nb-cta-experiment-scope') || 'desktop_inline_cta_layout'),\n          experiment_signature: String(node.getAttribute('data-nb-cta-experiment-signature') || ''),\n          measurement_contract_version: BLOG_CTA_MEASUREMENT_CONTRACT_VERSION\n        },\n        node\n      )\n    );\n  }\n\n  function clearBlogCtaExperimentStorage() {\n    try {\n      for (var index = window.localStorage.length - 1; index >= 0; index -= 1) {\n        var key = window.localStorage.key(index);\n        if (key && key.indexOf('nb_blog_cta_layout_assignment_') === 0) {\n          window.localStorage.removeItem(key);\n        }\n      }\n    } catch (_err) {}\n    removeStorageItem(window.localStorage, BLOG_CTA_EXPERIMENT_MUTEX_KEY);\n    blogCtaPendingAssignments = {};\n    removeStorageItem(window.sessionStorage, BLOG_CTA_ASSIGNMENT_SESSION_KEY);\n    removeStorageItem(window.sessionStorage, BLOG_CTA_OPPORTUNITY_SESSION_KEY);\n    removeStorageItem(window.sessionStorage, BLOG_CTA_EXPOSURE_SESSION_KEY);\n    removeStorageItem(window.sessionStorage, BLOG_HOME_TAIL_ENGAGED_SESSION_KEY);\n  }\n\n  function clearBlogCtaExperimentCartAttributes() {\n    if (!window.fetch) return;\n    var attributes = {\n      __nb_cta_test_id: '',\n      __nb_cta_test_signature: '',\n      __nb_cta_test_arm: '',\n      __nb_cta_test_variant: '',\n      __nb_cta_assignment_id: '',\n      __nb_cta_assigned_at: '',\n      __nb_cta_exposure_id: '',\n      __nb_cta_creative_id: '',\n      __nb_cta_profile: '',\n      __nb_cta_device: '',\n      __nb_cta_locale: '',\n      __nb_cta_registry_version: '',\n      __nb_cta_traffic_scope: '',\n      __nb_cta_message_id: ''\n    };\n    window.fetch(buildCartEndpointPathWithPreview('/cart/update.js'), {\n      method: 'POST',\n      credentials: 'same-origin',\n      keepalive: true,\n      headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n      body: JSON.stringify({ attributes: attributes })\n    }).catch(function () {});\n  }\n\n  document.addEventListener('nb:consent-changed', function (event) {\n    var choice = event && event.detail ? String(event.detail.choice || '') : '';\n    if (choice === 'accepted') {\n      enrollPendingBlogCtaAssignments(document);\n      return;\n    }\n    if (choice === 'essential') {\n      clearBlogCtaExperimentStorage();\n      clearBlogCtaExperimentCartAttributes();\n    }\n  });\n\n  function readCommercialSurfaceViews() {\n    var raw = readStorageItem(window.sessionStorage, COMMERCIAL_SURFACE_SESSION_KEY);\n    if (!raw) return {};\n    var parsed = safeParseJson(raw, {});\n    if (!parsed || typeof parsed !== 'object') return {};\n    return parsed;\n  }\n\n  function writeCommercialSurfaceViews(nextValue) {\n    if (!nextValue || typeof nextValue !== 'object') return;\n    writeStorageItem(window.sessionStorage, COMMERCIAL_SURFACE_SESSION_KEY, JSON.stringify(nextValue));\n  }\n\n  function getCommercialPageSurface() {\n    var body = document.body;\n    var pageType = body ? String(body.getAttribute('data-page-type') || '').trim().toLowerCase() : '';\n    var templateName = body ? String(body.getAttribute('data-template-name') || '').trim().toLowerCase() : '';\n    var path = String(window.location.pathname || '/').toLowerCase();\n\n    if (pageType === 'index' || templateName === 'index' || path === '/' || /^\\/[a-z]{2}(?:-[a-z0-9]{2,4})?\\/?$/.test(path)) {\n      return 'homepage';\n    }\n\n    if (pageType === 'product' || /^\\/(?:[a-z]{2}(?:-[a-z0-9]{2,4})?\\/)?products\\/[^/?#]+\\/?$/.test(path)) {\n      return 'product_page';\n    }\n\n    return '';\n  }\n\n  function trackCommercialSurfaceView(surface, sourceNode) {\n    var normalizedSurface = String(surface || '').trim().toLowerCase();\n    if (!normalizedSurface) return '';\n\n    var contextPath = window.location.pathname || '';\n    var dedupeKey = contextPath + '::' + normalizedSurface;\n    var surfaceMap = readCommercialSurfaceViews();\n    if (surfaceMap[dedupeKey]) return '';\n    surfaceMap[dedupeKey] = Date.now();\n    writeCommercialSurfaceViews(surfaceMap);\n\n    return pushEvent(\n      appendArticleAnalyticsContext(\n        {\n          event: 'commercial_surface_view',\n          commercial_surface: normalizedSurface,\n          context_path: contextPath,\n          page_type: document.body ? (document.body.getAttribute('data-page-type') || '') : ''\n        },\n        sourceNode || document.body\n      )\n    );\n  }\n\n  function ensureCommercialSurfaceObserver() {\n    if (!('IntersectionObserver' in window)) return null;\n    if (commercialSurfaceObserver) return commercialSurfaceObserver;\n\n    commercialSurfaceObserver = new IntersectionObserver(\n      function (entries) {\n        entries.forEach(function (entry) {\n          if (!entry.isIntersecting || entry.intersectionRatio < 0.45) return;\n          var node = entry.target;\n          if (!node || !node.getAttribute) return;\n          var surface = String(node.getAttribute('data-nb-commercial-surface') || '').trim();\n          if (surface) trackCommercialSurfaceView(surface, node);\n          node.setAttribute('data-nb-commercial-surface-tracked', 'true');\n          commercialSurfaceObserver.unobserve(node);\n        });\n      },\n      { threshold: [0, 0.45, 0.72] }\n    );\n\n    return commercialSurfaceObserver;\n  }\n\n  function observeCommercialSurfaceNode(node, surface) {\n    if (!node || !node.getAttribute || !surface) return;\n    if (node.getAttribute('data-nb-commercial-surface-bound') === 'true') return;\n\n    node.setAttribute('data-nb-commercial-surface-bound', 'true');\n    node.setAttribute('data-nb-commercial-surface', surface);\n\n    var observer = ensureCommercialSurfaceObserver();\n    if (observer) {\n      observer.observe(node);\n    } else {\n      trackCommercialSurfaceView(surface, node);\n      node.setAttribute('data-nb-commercial-surface-tracked', 'true');\n    }\n  }\n\n  function initCommercialSurfaceViewTracking(rootNode) {\n    var pageSurface = getCommercialPageSurface();\n    if (pageSurface) {\n      trackCommercialSurfaceView(pageSurface, document.body);\n    }\n\n    var scope = rootNode && rootNode.querySelectorAll ? rootNode : document;\n    var selector = [\n      'body[data-page-type=\"article\"] .shopify-section[id*=\"__home_hero\"]',\n      'body[data-page-type=\"article\"] .shopify-section[id*=\"__home_backbone\"]',\n      'body[data-page-type=\"article\"] .shopify-section[id*=\"__home_homepage\"]',\n      'body[data-page-type=\"article\"] .nb-home2-hero',\n      'body[data-page-type=\"article\"] .nb-home-ab-homepage2-panel'\n    ].join(', ');\n\n    if (scope && scope.nodeType === 1 && scope.matches && scope.matches(selector)) {\n      observeCommercialSurfaceNode(scope, 'blog_homepage_tail');\n    }\n\n    var tailNodes = scope.querySelectorAll ? scope.querySelectorAll(selector) : [];\n    tailNodes.forEach(function (node) {\n      observeCommercialSurfaceNode(node, 'blog_homepage_tail');\n    });\n    initBlogHomepageTailEngagedTracking(scope);\n  }\n\n  var blogHomepageTailEngagementStates = typeof WeakMap === 'function' ? new WeakMap() : null;\n\n  function findBlogHomepageTailNodes(scope) {\n    var root = scope && scope.querySelector ? scope : document;\n    var selector = [\n      'body[data-page-type=\"article\"] .nb-main-content > .shopify-section[id*=\"__home_hero\"]',\n      'body[data-page-type=\"article\"] main > .shopify-section[id*=\"__home_hero\"]',\n      'body[data-page-type=\"article\"] .nb-main-content > .shopify-section[id*=\"__home_\"]',\n      'body[data-page-type=\"article\"] main > .shopify-section[id*=\"__home_\"]'\n    ].join(', ');\n    var nodes = Array.prototype.slice.call(root.querySelectorAll(selector));\n    if (!nodes.length && root !== document) nodes = Array.prototype.slice.call(document.querySelectorAll(selector));\n    return nodes.filter(function (node, index) { return nodes.indexOf(node) === index; });\n  }\n\n  function getViewportCoverageRatio(node) {\n    if (!node || !node.getBoundingClientRect) return 0;\n    var rect = node.getBoundingClientRect();\n    var viewportWidth = window.innerWidth || document.documentElement.clientWidth || 0;\n    var viewportHeight = window.innerHeight || document.documentElement.clientHeight || 0;\n    if (viewportWidth <= 0 || viewportHeight <= 0 || rect.width <= 0 || rect.height <= 0) return 0;\n    var visibleWidth = Math.max(0, Math.min(rect.right, viewportWidth) - Math.max(rect.left, 0));\n    var visibleHeight = Math.max(0, Math.min(rect.bottom, viewportHeight) - Math.max(rect.top, 0));\n    return Math.max(0, Math.min(1, (visibleWidth * visibleHeight) / (viewportWidth * viewportHeight)));\n  }\n\n  function hasArticleReachedTrackedDepth(articleRoot, depth) {\n    if (!articleRoot) return false;\n    var key = (window.location.pathname || '') + '::' + String(articleRoot.getAttribute('data-nb-article-handle') || '') + '::' + String(depth);\n    return !!readBlogScrollDepthImpressions()[key];\n  }\n\n  function trackBlogHomepageTailEngagedView(node, state) {\n    if (!node || !state || !hasAttributionStorageConsent()) return;\n    var articleRoot = getArticleRootForNode(node) || document.querySelector('[data-nb-article-conversion]');\n    if (!articleRoot || !hasArticleReachedTrackedDepth(articleRoot, 90)) return;\n    var context = getArticleAnalyticsContext(articleRoot);\n    var key = (window.location.pathname || '') + '::' + (context && context.slug ? context.slug : '') + '::home_tail_engaged';\n    var events = readBlogExperimentSessionMap(BLOG_HOME_TAIL_ENGAGED_SESSION_KEY);\n    if (events[key]) return;\n    events[key] = Date.now();\n    writeBlogExperimentSessionMap(BLOG_HOME_TAIL_ENGAGED_SESSION_KEY, events);\n    state.completed = true;\n    pushEvent(\n      appendArticleAnalyticsContext(\n        {\n          event: 'blog_home_tail_engaged_view',\n          conversion_class: 'earned_attention',\n          is_micro_conversion: true,\n          commercial_surface: 'blog_homepage_tail',\n          context_path: window.location.pathname || '',\n          read_depth_required: 90,\n          visibility_threshold_pct: 50,\n          cumulative_dwell_threshold_ms: 8000,\n          continuous_dwell_threshold_ms: 3000,\n          active_visible_ms: Math.round(state.cumulativeVisibleMs),\n          longest_continuous_visible_ms: Math.round(state.longestContinuousMs),\n          max_viewport_coverage: Math.round(state.maxCoverage * 1000) / 1000,\n          home_tail_section: getArticleHomeTailSectionKey(node) || 'home_hero'\n        },\n        articleRoot\n      )\n    );\n  }\n\n  function initBlogHomepageTailEngagedTracking(rootNode) {\n    if (!document.body || document.body.getAttribute('data-page-type') !== 'article') return;\n    var tailNodes = findBlogHomepageTailNodes(rootNode);\n    var node = tailNodes[0];\n    if (!node || node.getAttribute('data-nb-home-tail-engagement-bound') === 'true') return;\n    node.setAttribute('data-nb-home-tail-engagement-bound', 'true');\n    tailNodes.forEach(function (tailNode) {\n      tailNode.setAttribute('data-nb-home-tail-engagement-member', 'true');\n    });\n    var state = {\n      cumulativeVisibleMs: 0,\n      continuousVisibleMs: 0,\n      longestContinuousMs: 0,\n      maxCoverage: 0,\n      lastTickAt: 0,\n      intervalId: 0,\n      completed: false\n    };\n    if (blogHomepageTailEngagementStates) blogHomepageTailEngagementStates.set(node, state);\n\n    function stopTicker() {\n      if (state.intervalId) window.clearInterval(state.intervalId);\n      state.intervalId = 0;\n      state.lastTickAt = 0;\n      state.continuousVisibleMs = 0;\n    }\n\n    function tick() {\n      if (state.completed) {\n        stopTicker();\n        return;\n      }\n      var now = Date.now();\n      var delta = state.lastTickAt ? Math.min(500, Math.max(0, now - state.lastTickAt)) : 0;\n      state.lastTickAt = now;\n      var articleRoot = getArticleRootForNode(node) || document.querySelector('[data-nb-article-conversion]');\n      var coverage = 0;\n      var activeTailNode = node;\n      var activeTailCoverage = 0;\n      tailNodes.forEach(function (tailNode) {\n        var tailCoverage = getViewportCoverageRatio(tailNode);\n        coverage = Math.min(1, coverage + tailCoverage);\n        if (tailCoverage > activeTailCoverage) {\n          activeTailCoverage = tailCoverage;\n          activeTailNode = tailNode;\n        }\n      });\n      state.maxCoverage = Math.max(state.maxCoverage, coverage);\n      var active = document.visibilityState === 'visible' && (!document.hasFocus || document.hasFocus());\n      var qualifies = active && hasAttributionStorageConsent() && coverage >= 0.5 && hasArticleReachedTrackedDepth(articleRoot, 90);\n      if (!qualifies) {\n        state.continuousVisibleMs = 0;\n        return;\n      }\n      state.cumulativeVisibleMs += delta;\n      state.continuousVisibleMs += delta;\n      state.longestContinuousMs = Math.max(state.longestContinuousMs, state.continuousVisibleMs);\n      if (state.cumulativeVisibleMs >= 8000 && state.longestContinuousMs >= 3000) {\n        trackBlogHomepageTailEngagedView(activeTailNode, state);\n      }\n    }\n\n    function startTicker() {\n      if (state.completed || state.intervalId) return;\n      state.lastTickAt = Date.now();\n      state.intervalId = window.setInterval(tick, 250);\n    }\n\n    if ('IntersectionObserver' in window) {\n      var visibleTailNodes = [];\n      var observer = new IntersectionObserver(function (entries) {\n        entries.forEach(function (entry) {\n          var existingIndex = visibleTailNodes.indexOf(entry.target);\n          if (entry.isIntersecting && existingIndex === -1) visibleTailNodes.push(entry.target);\n          if (!entry.isIntersecting && existingIndex !== -1) visibleTailNodes.splice(existingIndex, 1);\n        });\n        if (visibleTailNodes.length) startTicker();\n        else stopTicker();\n      }, { threshold: [0, 0.01, 0.25, 0.5, 0.75] });\n      tailNodes.forEach(function (tailNode) { observer.observe(tailNode); });\n      window.addEventListener('pagehide', function () {\n        stopTicker();\n        observer.disconnect();\n      }, { once: true });\n    } else {\n      startTicker();\n    }\n  }\n\n  function getElementVisibleRatio(node) {\n    if (!node || !node.getBoundingClientRect) return 0;\n    var rect = node.getBoundingClientRect();\n    var viewportWidth = window.innerWidth || document.documentElement.clientWidth || 0;\n    var viewportHeight = window.innerHeight || document.documentElement.clientHeight || 0;\n    if (viewportWidth <= 0 || viewportHeight <= 0 || rect.width <= 0 || rect.height <= 0) return 0;\n    var visibleWidth = Math.max(0, Math.min(rect.right, viewportWidth) - Math.max(rect.left, 0));\n    var visibleHeight = Math.max(0, Math.min(rect.bottom, viewportHeight) - Math.max(rect.top, 0));\n    return Math.max(0, Math.min(1, (visibleWidth * visibleHeight) / (rect.width * rect.height)));\n  }\n\n  function createArticleCtaOpportunitySentinel(block) {\n    if (!block || block.getAttribute('data-nb-cta-experiment-enrolled') !== 'true') return null;\n    var sentinel = document.createElement('span');\n    sentinel.className = 'nb-article-cta-opportunity-sentinel';\n    sentinel.setAttribute('aria-hidden', 'true');\n    sentinel.setAttribute('data-nb-cta-opportunity-sentinel', '');\n    sentinel.setAttribute('data-nb-slot-id', block.getAttribute('data-nb-slot-id') || 'article_inline_cta');\n    sentinel.setAttribute('data-nb-slot-type', block.getAttribute('data-nb-slot-type') || 'rescue');\n    sentinel.setAttribute('data-nb-slot-destination', block.getAttribute('data-nb-slot-destination') || 'unknown');\n    sentinel.setAttribute('data-nb-cta-experiment-enrolled', 'true');\n    sentinel.setAttribute('data-nb-cta-qa-override', block.getAttribute('data-nb-cta-qa-override') || 'false');\n    return sentinel;\n  }\n\n  function trackBlogCtaExperimentQualifiedEvent(node, eventName, storageKey, options) {\n    if (!node || !eventName || !storageKey || !hasAttributionStorageConsent()) return;\n    var settings = options || {};\n    var articleRoot = getArticleRootForNode(node);\n    if (!articleRoot || articleRoot.getAttribute('data-nb-cta-experiment-enrolled') !== 'true') return;\n    if (articleRoot.getAttribute('data-nb-cta-qa-override') === 'true') return;\n    var context = getArticleAnalyticsContext(articleRoot);\n    if (!context || !context.cta_experiment_id || !context.cta_assignment_id) return;\n    var actualDeviceClass = getBlogCtaDeviceClass();\n    if (actualDeviceClass !== 'desktop') {\n      var mismatchEvents = readBlogExperimentSessionMap(storageKey);\n      var mismatchKey = context.cta_experiment_id + '::' + context.cta_assignment_id + '::delivery_mismatch::' + actualDeviceClass;\n      if (!mismatchEvents[mismatchKey]) {\n        mismatchEvents[mismatchKey] = Date.now();\n        writeBlogExperimentSessionMap(storageKey, mismatchEvents);\n        pushEvent(\n          appendArticleAnalyticsContext(\n            {\n              event: 'blog_cta_experiment_delivery_mismatch',\n              context_path: window.location.pathname || '',\n              assignment_device_class: context.cta_assignment_device_class || '',\n              actual_device_class: actualDeviceClass,\n              excluded_from_analysis: true,\n              measurement_contract_version: BLOG_CTA_MEASUREMENT_CONTRACT_VERSION\n            },\n            articleRoot\n          )\n        );\n      }\n      return;\n    }\n    var slotId = String(node.getAttribute('data-nb-slot-id') || '').trim();\n    var key = [\n      window.location.pathname || '',\n      context.cta_experiment_id,\n      context.cta_assignment_id,\n      context.cta_experiment_variant,\n      slotId,\n      eventName\n    ].join('::');\n    var events = readBlogExperimentSessionMap(storageKey);\n    if (events[key]) return;\n\n    var exposureId = '';\n    if (eventName === 'blog_cta_experiment_exposure') {\n      exposureId = createEventId('cta_exposure');\n      articleRoot.setAttribute('data-nb-cta-exposure-id', exposureId);\n      var block = node.matches && node.matches('.nb-article-inline-conversion')\n        ? node\n        : articleRoot.querySelector('.nb-article-inline-conversion[data-nb-cta-experiment-enrolled=\"true\"]');\n      if (block) block.setAttribute('data-nb-cta-exposure-id', exposureId);\n      persistBlogOrigin(articleRoot, {\n        slot_id: slotId,\n        surface_source: 'cta_exposure',\n        exposure_id: exposureId\n      });\n    }\n\n    events[key] = Date.now();\n    writeBlogExperimentSessionMap(storageKey, events);\n    pushEvent(\n      appendArticleAnalyticsContext(\n        {\n          event: eventName,\n          context_path: window.location.pathname || '',\n          slot_id: slotId,\n          slot_type: String(node.getAttribute('data-nb-slot-type') || 'rescue'),\n          destination: String(node.getAttribute('data-nb-slot-destination') || 'unknown'),\n          minimum_visible_percent: typeof settings.minimumVisiblePercent === 'number'\n            ? settings.minimumVisiblePercent\n            : (eventName === 'blog_cta_experiment_exposure' ? 50 : 1),\n          minimum_visible_ms: typeof settings.minimumVisibleMs === 'number' ? settings.minimumVisibleMs : 1000,\n          opportunity_scope: eventName === 'blog_cta_opportunity' ? 'assigned_consented_opportunity' : '',\n          opportunity_basis: eventName === 'blog_cta_opportunity' ? 'shared_insertion_sentinel' : 'actual_creative',\n          exposure_basis: eventName === 'blog_cta_experiment_exposure' ? (settings.exposureBasis || 'qualified_visibility') : '',\n          actual_device_class: actualDeviceClass,\n          measurement_contract_version: BLOG_CTA_MEASUREMENT_CONTRACT_VERSION,\n          exposure_id: exposureId\n        },\n        articleRoot\n      )\n    );\n  }\n\n  function ensureBlogCtaInteractionExposure(block) {\n    if (!block) return;\n    trackBlogCtaExperimentQualifiedEvent(\n      block,\n      'blog_cta_experiment_exposure',\n      BLOG_CTA_EXPOSURE_SESSION_KEY,\n      {\n        minimumVisiblePercent: Math.round(getElementVisibleRatio(block) * 100),\n        minimumVisibleMs: 0,\n        exposureBasis: 'interaction_implied'\n      }\n    );\n  }\n\n  function bindBlogCtaQualifiedVisibility(node, options) {\n    if (!node || !options || node.getAttribute(options.boundAttribute) === 'true') return;\n    node.setAttribute(options.boundAttribute, 'true');\n    var timerId = 0;\n    var observer = null;\n    var completed = false;\n\n    function clearTimer() {\n      if (timerId) window.clearTimeout(timerId);\n      timerId = 0;\n    }\n\n    function qualifiesNow() {\n      if (completed || !hasAttributionStorageConsent()) return false;\n      if (document.visibilityState !== 'visible') return false;\n      if (document.hasFocus && !document.hasFocus()) return false;\n      return getElementVisibleRatio(node) >= options.minimumRatio;\n    }\n\n    function finish() {\n      clearTimer();\n      if (!qualifiesNow()) return;\n      completed = true;\n      trackBlogCtaExperimentQualifiedEvent(node, options.eventName, options.storageKey);\n      if (observer) observer.disconnect();\n      document.removeEventListener('visibilitychange', handleVisibilityChange);\n      window.removeEventListener('blur', clearTimer);\n      window.removeEventListener('focus', schedule);\n    }\n\n    function schedule() {\n      if (!qualifiesNow() || timerId) return;\n      timerId = window.setTimeout(finish, options.minimumVisibleMs);\n    }\n\n    function handleVisibilityChange() {\n      if (document.visibilityState !== 'visible') clearTimer();\n      else schedule();\n    }\n\n    if ('IntersectionObserver' in window) {\n      observer = new IntersectionObserver(function (entries) {\n        entries.forEach(function (entry) {\n          if (entry.target !== node) return;\n          if (entry.isIntersecting && getElementVisibleRatio(node) >= options.minimumRatio) schedule();\n          else clearTimer();\n        });\n      }, { threshold: [0, 0.01, 0.5, 1] });\n      observer.observe(node);\n    } else {\n      schedule();\n    }\n\n    document.addEventListener('visibilitychange', handleVisibilityChange);\n    window.addEventListener('blur', clearTimer);\n    window.addEventListener('focus', schedule);\n  }\n\n  function initBlogCtaExperimentTracking(rootNode) {\n    var scope = rootNode && rootNode.querySelectorAll ? rootNode : document;\n    var blocks = [];\n    if (scope.matches && scope.matches('.nb-article-inline-conversion[data-nb-cta-experiment-enrolled=\"true\"]')) blocks.push(scope);\n    scope.querySelectorAll('.nb-article-inline-conversion[data-nb-cta-experiment-enrolled=\"true\"]').forEach(function (node) {\n      blocks.push(node);\n    });\n    blocks.forEach(function (block) {\n      trackBlogCtaExperimentAssignment(block);\n      bindBlogCtaQualifiedVisibility(block, {\n        boundAttribute: 'data-nb-cta-exposure-bound',\n        eventName: 'blog_cta_experiment_exposure',\n        storageKey: BLOG_CTA_EXPOSURE_SESSION_KEY,\n        minimumRatio: 0.5,\n        minimumVisibleMs: 1000\n      });\n    });\n\n    var sentinels = [];\n    if (scope.matches && scope.matches('[data-nb-cta-opportunity-sentinel]')) sentinels.push(scope);\n    scope.querySelectorAll('[data-nb-cta-opportunity-sentinel]').forEach(function (node) {\n      sentinels.push(node);\n    });\n    sentinels.forEach(function (sentinel) {\n      bindBlogCtaQualifiedVisibility(sentinel, {\n        boundAttribute: 'data-nb-cta-opportunity-bound',\n        eventName: 'blog_cta_opportunity',\n        storageKey: BLOG_CTA_OPPORTUNITY_SESSION_KEY,\n        minimumRatio: 0.01,\n        minimumVisibleMs: 1000\n      });\n    });\n  }\n\n  function readBlogConversionImpressions() {\n    var raw = readStorageItem(window.sessionStorage, BLOG_CONVERSION_SESSION_KEY);\n    if (!raw) return {};\n    var parsed = safeParseJson(raw, {});\n    if (!parsed || typeof parsed !== 'object') return {};\n    return parsed;\n  }\n\n  function writeBlogConversionImpressions(nextValue) {\n    if (!nextValue || typeof nextValue !== 'object') return;\n    writeStorageItem(window.sessionStorage, BLOG_CONVERSION_SESSION_KEY, JSON.stringify(nextValue));\n  }\n\n  function readBlogScrollDepthImpressions() {\n    var raw = readStorageItem(window.sessionStorage, BLOG_SCROLL_DEPTH_SESSION_KEY);\n    if (!raw) return {};\n    var parsed = safeParseJson(raw, {});\n    if (!parsed || typeof parsed !== 'object') return {};\n    return parsed;\n  }\n\n  function writeBlogScrollDepthImpressions(nextValue) {\n    if (!nextValue || typeof nextValue !== 'object') return;\n    writeStorageItem(window.sessionStorage, BLOG_SCROLL_DEPTH_SESSION_KEY, JSON.stringify(nextValue));\n  }\n\n  function readBlogViewEvents() {\n    var raw = readStorageItem(window.sessionStorage, BLOG_VIEW_SESSION_KEY);\n    if (!raw) return {};\n    var parsed = safeParseJson(raw, {});\n    if (!parsed || typeof parsed !== 'object') return {};\n    return parsed;\n  }\n\n  function writeBlogViewEvents(nextValue) {\n    if (!nextValue || typeof nextValue !== 'object') return;\n    writeStorageItem(window.sessionStorage, BLOG_VIEW_SESSION_KEY, JSON.stringify(nextValue));\n  }\n\n  function trackBlogConversionImpression(slotNode) {\n    if (!slotNode || !slotNode.getAttribute) return;\n    var slotId = String(slotNode.getAttribute('data-nb-slot-id') || '').trim();\n    var slotType = String(slotNode.getAttribute('data-nb-slot-type') || '').trim().toLowerCase();\n    var destination = String(slotNode.getAttribute('data-nb-slot-destination') || '').trim().toLowerCase();\n    var actionRank = String(slotNode.getAttribute('data-nb-action-rank') || '').trim().toLowerCase();\n    var surfaceSource = String(slotNode.getAttribute('data-nb-surface-source') || '').trim().toLowerCase();\n    if (!slotId) return;\n\n    var contextPath = window.location.pathname || '';\n    var dedupeKey = contextPath + '::' + slotId;\n    var impressionMap = readBlogConversionImpressions();\n    if (impressionMap[dedupeKey]) return;\n    impressionMap[dedupeKey] = Date.now();\n    writeBlogConversionImpressions(impressionMap);\n\n    pushEvent(\n      appendArticleAnalyticsContext(\n        {\n          event: 'blog_conversion_impression',\n          slot_id: slotId,\n          slot_type: slotType,\n          destination: destination || 'unknown',\n          action_rank: actionRank || 'primary',\n          surface_source: surfaceSource || 'theme',\n          page_type: document.body ? (document.body.getAttribute('data-page-type') || '') : '',\n          context_path: contextPath\n        },\n        slotNode\n      )\n    );\n\n    if (destination === 'home' && slotId.indexOf('article_mobile_') !== 0) {\n      trackCommercialSurfaceView('blog_home_slot', slotNode);\n    }\n  }\n\n  function initBlogConversionTracking(rootNode) {\n    var scope = rootNode && rootNode.querySelectorAll ? rootNode : document;\n    var slotNodes = [];\n    if (scope && scope.nodeType === 1 && scope.matches && scope.matches('[data-nb-conversion-slot]')) {\n      slotNodes.push(scope);\n    }\n    var foundNodes = scope.querySelectorAll('[data-nb-conversion-slot]');\n    foundNodes.forEach(function (node) {\n      slotNodes.push(node);\n    });\n    if (!slotNodes.length) return;\n\n    if ('IntersectionObserver' in window && !blogConversionObserver) {\n      blogConversionObserver = new IntersectionObserver(\n        function (entries) {\n          entries.forEach(function (entry) {\n            if (!entry.isIntersecting || entry.intersectionRatio < 0.45) return;\n            trackBlogConversionImpression(entry.target);\n            blogConversionObserver.unobserve(entry.target);\n          });\n        },\n        { threshold: [0, 0.45, 0.72] }\n      );\n    }\n\n    slotNodes.forEach(function (slotNode) {\n      if (!slotNode || !slotNode.getAttribute) return;\n      if (slotNode.dataset.nbConversionTracked === 'true') return;\n      slotNode.dataset.nbConversionTracked = 'true';\n      if (blogConversionObserver) {\n        blogConversionObserver.observe(slotNode);\n      } else {\n        trackBlogConversionImpression(slotNode);\n      }\n    });\n  }\n\n  function createInlineConversionLink(options) {\n    if (!options || !options.href || !options.label) return null;\n    var link = document.createElement('a');\n    link.className = options.secondary ? 'nb-button nb-button--secondary' : 'nb-button';\n    link.setAttribute('href', options.href);\n    link.setAttribute('data-nb-conv-preview-path', options.href);\n    link.setAttribute('data-nb-cta', options.ctaId);\n    link.setAttribute('data-nb-slot-id', options.slotId);\n    link.setAttribute('data-nb-slot-type', options.slotType);\n    link.setAttribute('data-nb-slot-destination', options.destination);\n    link.setAttribute('data-nb-action-rank', options.secondary ? 'secondary' : 'primary');\n    link.setAttribute('data-nb-surface-source', options.surfaceSource || 'theme');\n    link.textContent = options.label;\n    return link;\n  }\n\n  function createInlineConversionCheckoutForm(options, articleRoot) {\n    if (!options || !articleRoot) return null;\n    var variantId = String(articleRoot.getAttribute('data-nb-product-variant-id') || '').trim();\n    var productTitle = String(articleRoot.getAttribute('data-nb-product-title') || '').trim();\n    var productPrice = String(articleRoot.getAttribute('data-nb-product-price') || '').trim();\n    var productCurrency = String(articleRoot.getAttribute('data-nb-product-currency') || '').trim();\n    if (!variantId) return null;\n\n    var form = document.createElement('form');\n    form.method = 'post';\n    form.action = buildShopifyPathWithPreview('/cart/add');\n    form.enctype = 'multipart/form-data';\n    form.className = 'nb-article-inline-conversion__checkout';\n    form.setAttribute('data-nb-atc-form', '');\n    form.setAttribute('data-nb-atc-mode', 'ajax');\n    form.setAttribute('data-nb-atc-redirect', 'checkout');\n    form.setAttribute('data-product-id', variantId);\n    form.setAttribute('data-product-title', productTitle);\n    form.setAttribute('data-product-price', productPrice);\n    form.setAttribute('data-product-currency', productCurrency);\n\n    var returnTo = document.createElement('input');\n    returnTo.type = 'hidden';\n    returnTo.name = 'return_to';\n    returnTo.value = buildShopifyPathWithPreview('/cart');\n    form.appendChild(returnTo);\n\n    var variantInput = document.createElement('input');\n    variantInput.type = 'hidden';\n    variantInput.name = 'id';\n    variantInput.value = variantId;\n    form.appendChild(variantInput);\n\n    var quantityInput = document.createElement('input');\n    quantityInput.type = 'hidden';\n    quantityInput.name = 'quantity';\n    quantityInput.value = '1';\n    form.appendChild(quantityInput);\n\n    var button = document.createElement('button');\n    button.type = 'submit';\n    button.className = 'nb-button';\n    button.setAttribute('data-nb-atc-submit', '');\n    button.setAttribute('data-nb-checkout-entrypoint', options.checkoutEntrypoint || 'article_buy');\n    button.setAttribute('data-nb-cta', options.ctaId);\n    button.setAttribute('data-nb-slot-id', options.slotId);\n    button.setAttribute('data-nb-slot-type', options.slotType);\n    button.setAttribute('data-nb-slot-destination', options.destination || 'checkout');\n    button.setAttribute('data-nb-action-rank', 'primary');\n    button.setAttribute('data-nb-surface-source', 'theme');\n    button.textContent = options.label;\n    form.appendChild(button);\n\n    return form;\n  }\n\n  function createInlineConversionMedia(config) {\n    if (!config || !config.src) return null;\n    var media = document.createElement('figure');\n    media.className = 'nb-article-inline-conversion__media';\n\n    var picture = document.createElement('picture');\n    picture.className = 'nb-article-inline-conversion__picture';\n\n    if (config.desktopSrc) {\n      var desktopSource = document.createElement('source');\n      desktopSource.setAttribute('media', '(min-width: 1024px)');\n      desktopSource.setAttribute('srcset', config.desktopSrcSet || config.desktopSrc);\n      desktopSource.setAttribute('sizes', config.desktopSizes || '292px');\n      picture.appendChild(desktopSource);\n    }\n\n    var image = document.createElement('img');\n    image.setAttribute('src', config.src);\n    if (config.srcSet) image.setAttribute('srcset', config.srcSet);\n    if (config.sizes) image.setAttribute('sizes', config.sizes);\n    image.setAttribute('alt', config.alt || i18n('article_inline.inline_1.media_alt', 'Nordbelt product'));\n    image.setAttribute('loading', 'lazy');\n    image.setAttribute('decoding', 'async');\n    image.setAttribute('fetchpriority', 'low');\n    image.setAttribute('width', '700');\n    image.setAttribute('height', '700');\n    picture.appendChild(image);\n    media.appendChild(picture);\n\n    if (config.badge) {\n      var badge = document.createElement('span');\n      badge.className = 'nb-article-inline-conversion__media-badge';\n      badge.textContent = config.badge;\n      media.appendChild(badge);\n    }\n\n    return media;\n  }\n\n  function createInlineConversionBlock(config, articleRoot) {\n    var wrapper = document.createElement('section');\n    wrapper.className = 'nb-card nb-article-inline-conversion nb-reveal is-visible is-' + config.slotName;\n    wrapper.setAttribute('data-nb-inline-slot', config.slotName);\n    wrapper.setAttribute('data-nb-generated', 'conversion');\n    wrapper.setAttribute('data-nb-conversion-slot', '');\n    wrapper.setAttribute('data-nb-slot-id', config.slotId);\n    wrapper.setAttribute('data-nb-slot-type', config.slotType);\n    wrapper.setAttribute('data-nb-slot-destination', config.primaryDestination || '');\n    wrapper.setAttribute('data-nb-action-rank', 'primary');\n    wrapper.setAttribute('data-nb-surface-source', 'theme');\n    wrapper.setAttribute('data-nb-cro-variant', config.croVariant || '');\n    var layoutAssignment = applyBlogCtaLayoutExperiment(wrapper, articleRoot);\n\n    var mediaConfig = Object.assign({}, config.media || {});\n    mediaConfig.desktopSizes = layoutAssignment.layoutVariant === 'compact_safety'\n      ? '116px'\n      : layoutAssignment.format === 'compact' ? '124px' : '292px';\n    var media = createInlineConversionMedia(mediaConfig);\n    if (media) {\n      wrapper.classList.add('has-media');\n      wrapper.appendChild(media);\n    }\n\n    var body = document.createElement('div');\n    body.className = 'nb-article-inline-conversion__body';\n\n    if (config.kicker) {\n      var kicker = document.createElement('p');\n      kicker.className = 'nb-article-inline-conversion__kicker';\n      kicker.textContent = config.kicker;\n      body.appendChild(kicker);\n    }\n\n    if (config.title) {\n      var title = document.createElement('h3');\n      title.textContent = config.title;\n      body.appendChild(title);\n    }\n\n    if (config.copy) {\n      var copy = document.createElement('p');\n      copy.className = 'nb-article-inline-conversion__copy';\n      copy.textContent = config.copy;\n      body.appendChild(copy);\n    }\n\n    if (config.chips && config.chips.length) {\n      var chips = document.createElement('div');\n      chips.className = 'nb-article-inline-conversion__chips';\n      config.chips.forEach(function (chipText) {\n        if (!chipText) return;\n        var chip = document.createElement('span');\n        chip.textContent = chipText;\n        chips.appendChild(chip);\n      });\n      if (chips.children.length) {\n        body.appendChild(chips);\n      }\n    }\n\n    if (config.note) {\n      var note = document.createElement('p');\n      note.className = 'nb-article-inline-conversion__note';\n      note.textContent = config.note;\n      body.appendChild(note);\n    }\n\n    var actions = document.createElement('div');\n    actions.className = 'nb-article-inline-conversion__actions';\n\n    var primaryAction = null;\n    if (config.primaryAction && config.primaryAction.kind === 'checkout_form') {\n      primaryAction = createInlineConversionCheckoutForm({\n        label: config.primaryAction.label,\n        ctaId: config.primaryAction.ctaId,\n        slotId: config.slotId,\n        slotType: config.slotType,\n        destination: config.primaryAction.destination,\n        checkoutEntrypoint: config.primaryAction.checkoutEntrypoint\n      }, articleRoot);\n    } else if (config.primaryAction) {\n      primaryAction = createInlineConversionLink({\n        href: config.primaryAction.href,\n        label: config.primaryAction.label,\n        ctaId: config.primaryAction.ctaId,\n        slotId: config.slotId,\n        slotType: config.slotType,\n        destination: config.primaryAction.destination,\n        surfaceSource: 'theme',\n        secondary: false\n      });\n    }\n\n    var secondaryLink = config.secondaryAction\n      ? createInlineConversionLink({\n          href: config.secondaryAction.href,\n          label: config.secondaryAction.label,\n          ctaId: config.secondaryAction.ctaId,\n          slotId: config.slotId,\n          slotType: config.slotType,\n          destination: config.secondaryAction.destination,\n          surfaceSource: 'theme',\n          secondary: true\n        })\n      : null;\n\n    if (primaryAction) actions.appendChild(primaryAction);\n    if (secondaryLink) actions.appendChild(secondaryLink);\n\n    wrapper.appendChild(body);\n    if (actions.children.length) {\n      wrapper.appendChild(actions);\n    }\n    return wrapper;\n  }\n\n  function insertNodeAfter(node, referenceNode) {\n    if (!node || !referenceNode || !referenceNode.parentNode) return;\n    if (referenceNode.nextSibling) {\n      referenceNode.parentNode.insertBefore(node, referenceNode.nextSibling);\n      return;\n    }\n    referenceNode.parentNode.appendChild(node);\n  }\n\n  function insertNodeBefore(node, referenceNode) {\n    if (!node || !referenceNode || !referenceNode.parentNode) return;\n    referenceNode.parentNode.insertBefore(node, referenceNode);\n  }\n\n  function isArticleHeadingNode(node) {\n    return !!(node && node.tagName && /^H[2-4]$/.test(String(node.tagName || '').toUpperCase()));\n  }\n\n  function getArticleNodeTextLength(node) {\n    return String(node && node.textContent ? node.textContent : '').replace(/\\s+/g, ' ').trim().length;\n  }\n\n  var ARTICLE_EDITORIAL_NOISE_RE = /(?:\\b(?:zachte|soft|proof|buy)\\s+cta\\b|\\b(?:tool|product|setup)[-\\s]?bridge\\b|\\blogische(?:\\s+interne)?\\s+doorstroom\\b|\\blogische bridge\\b|\\bhelpfulness\\b|\\bkoopmodus\\b|\\bowner-pagina\\b|\\bquery\\b|\\bzakelijk beter\\b|\\bvoor deze intent\\b|\\bproduct pusht\\b|\\bvolgorde belangrijk\\b|product of tool hier pas laat)/i;\n  var ARTICLE_EDITORIAL_LIST_LEAD_RE = /(?:doorstroom|owner-pagina|cta|bridge|volgorde belangrijk|voor deze intent)/i;\n\n  function getArticleBlockText(node) {\n    return String(node && node.textContent ? node.textContent : '').replace(/\\s+/g, ' ').trim();\n  }\n\n  function isArticleEditorialNoiseNode(node) {\n    if (!node || !node.tagName || node.hasAttribute('data-nb-generated')) return false;\n    var tagName = String(node.tagName || '').toUpperCase();\n    if (!/^(P|H2|H3|H4|UL|OL|DIV|BLOCKQUOTE)$/.test(tagName)) return false;\n    return ARTICLE_EDITORIAL_NOISE_RE.test(getArticleBlockText(node));\n  }\n\n  function cleanupArticleEditorialNoise(rootNode) {\n    var scope = rootNode && rootNode.querySelectorAll ? rootNode : document;\n    var articleRoots = [];\n    if (scope && scope.nodeType === 1 && scope.matches && scope.matches('[data-nb-article-conversion]')) {\n      articleRoots.push(scope);\n    }\n    var foundRoots = scope.querySelectorAll('[data-nb-article-conversion]');\n    foundRoots.forEach(function (root) {\n      articleRoots.push(root);\n    });\n    if (!articleRoots.length) return;\n\n    articleRoots.forEach(function (articleRoot) {\n      if (!articleRoot || articleRoot.dataset.nbEditorialNoiseCleaned === 'true') return;\n      var rte = articleRoot.querySelector('[data-nb-article-rte]');\n      if (!rte) return;\n\n      var children = Array.prototype.slice.call(rte.children);\n      var nodesToRemove = new Set();\n\n      children.forEach(function (node, index) {\n        if (!isArticleEditorialNoiseNode(node)) return;\n        nodesToRemove.add(node);\n\n        if (ARTICLE_EDITORIAL_LIST_LEAD_RE.test(getArticleBlockText(node))) {\n          var nextNode = children[index + 1];\n          if (nextNode && /^(UL|OL)$/i.test(String(nextNode.tagName || '').toUpperCase())) {\n            nodesToRemove.add(nextNode);\n          }\n        }\n      });\n\n      nodesToRemove.forEach(function (node) {\n        if (node && node.parentNode === rte) {\n          node.parentNode.removeChild(node);\n        }\n      });\n\n      Array.prototype.slice.call(rte.children).forEach(function (node) {\n        if (!isArticleHeadingNode(node)) return;\n        var sibling = node.nextElementSibling;\n        var hasContent = false;\n        while (sibling) {\n          if (isArticleHeadingNode(sibling)) break;\n          if (!sibling.hasAttribute('data-nb-generated') && (getArticleNodeTextLength(sibling) > 0 || !!(sibling.querySelector && sibling.querySelector('img,video,iframe,table,ul,ol')))) {\n            hasContent = true;\n            break;\n          }\n          sibling = sibling.nextElementSibling;\n        }\n        if (!hasContent && node.parentNode === rte) {\n          node.parentNode.removeChild(node);\n        }\n      });\n\n      articleRoot.dataset.nbEditorialNoiseCleaned = 'true';\n    });\n  }\n\n  function getArticleFlowNodes(rte) {\n    return Array.prototype.slice.call(rte.children).filter(function (node) {\n      if (!node || !node.tagName) return false;\n      if (node.hasAttribute('data-nb-generated')) return false;\n      var tagName = String(node.tagName || '').toUpperCase();\n      if (tagName === 'SCRIPT' || tagName === 'STYLE') return false;\n      if (node.classList && node.classList.contains('nb-article-inline-conversion')) return false;\n      return getArticleNodeTextLength(node) > 0 || !!node.querySelector('img,video,iframe,table,ul,ol');\n    });\n  }\n\n  function getArticleNodeWeight(node) {\n    var weight = getArticleNodeTextLength(node);\n    if (node && node.querySelector && node.querySelector('img,video,iframe')) {\n      weight += 140;\n    }\n    return weight;\n  }\n\n  function findLastSectionAnchor(nodes) {\n    if (!nodes || !nodes.length) return null;\n    for (var index = nodes.length - 1; index >= 0; index -= 1) {\n      var node = nodes[index];\n      if (!node || isArticleHeadingNode(node)) continue;\n      var tagName = String(node.tagName || '').toUpperCase();\n      var isRichNode = /^(P|UL|OL|DIV|BLOCKQUOTE|FIGURE|TABLE|IMG)$/.test(tagName);\n      if (getArticleNodeWeight(node) >= 24 || isRichNode) return node;\n    }\n    return nodes[nodes.length - 1] || null;\n  }\n\n  function buildArticleSections(flowNodes) {\n    var headings = flowNodes.filter(isArticleHeadingNode);\n    if (!headings.length) {\n      var pseudoNodes = flowNodes.filter(function (node) {\n        return getArticleNodeWeight(node) >= 30;\n      });\n      if (!pseudoNodes.length) return [];\n      var chunkSize = pseudoNodes.length >= 9 ? 3 : 2;\n      var fallbackSections = [];\n      for (var chunkIndex = 0; chunkIndex < pseudoNodes.length; chunkIndex += chunkSize) {\n        var chunkNodes = pseudoNodes.slice(chunkIndex, chunkIndex + chunkSize);\n        fallbackSections.push({\n          heading: null,\n          nodes: chunkNodes,\n          anchor: findLastSectionAnchor(chunkNodes),\n          weight: chunkNodes.reduce(function (sum, node) {\n            return sum + getArticleNodeWeight(node);\n          }, 0)\n        });\n      }\n      return fallbackSections.filter(function (section) {\n        return !!section.anchor;\n      });\n    }\n\n    var rawSections = [];\n    headings.forEach(function (headingNode, headingIndex) {\n      var startIndex = flowNodes.indexOf(headingNode);\n      var endIndex = headingIndex + 1 < headings.length ? flowNodes.indexOf(headings[headingIndex + 1]) : flowNodes.length;\n      if (startIndex === -1) return;\n      if (endIndex === -1) endIndex = flowNodes.length;\n      var nodes = flowNodes.slice(startIndex, endIndex);\n      var contentNodes = nodes.slice(1);\n      rawSections.push({\n        heading: headingNode,\n        nodes: nodes,\n        anchor: findLastSectionAnchor(contentNodes.length ? contentNodes : nodes),\n        weight: contentNodes.reduce(function (sum, node) {\n          return sum + getArticleNodeWeight(node);\n        }, 0)\n      });\n    });\n\n    var sections = [];\n    for (var sectionIndex = 0; sectionIndex < rawSections.length; sectionIndex += 1) {\n      var currentSection = rawSections[sectionIndex];\n      if (!currentSection) continue;\n\n      while ((currentSection.anchor === currentSection.heading || !currentSection.anchor) && sectionIndex + 1 < rawSections.length) {\n        sectionIndex += 1;\n        var nextSection = rawSections[sectionIndex];\n        if (!nextSection) break;\n        currentSection = {\n          heading: currentSection.heading || nextSection.heading,\n          nodes: currentSection.nodes.concat(nextSection.nodes),\n          anchor: nextSection.anchor,\n          weight: currentSection.weight + nextSection.weight\n        };\n      }\n\n      if (!currentSection.anchor || currentSection.anchor === currentSection.heading) continue;\n      sections.push(currentSection);\n    }\n\n    return sections.filter(function (section) {\n      return !!section.anchor;\n    });\n  }\n\n  function findArticleIntroAnchor(flowNodes) {\n    var firstHeadingIndex = -1;\n    for (var index = 0; index < flowNodes.length; index += 1) {\n      if (isArticleHeadingNode(flowNodes[index])) {\n        firstHeadingIndex = index;\n        break;\n      }\n    }\n    var introNodes = firstHeadingIndex === -1 ? flowNodes.slice(0, Math.min(flowNodes.length, 3)) : flowNodes.slice(0, firstHeadingIndex);\n    var candidates = introNodes.filter(function (node) {\n      return getArticleNodeWeight(node) >= 40 || !!(node && node.querySelector && node.querySelector('img,video'));\n    });\n    return candidates.length ? candidates[candidates.length - 1] : null;\n  }\n\n  function slugifyArticleHeading(text, fallbackIndex) {\n    var base = String(text || '')\n      .toLowerCase()\n      .replace(/&/g, ' and ')\n      .replace(/[^a-z0-9\\u00C0-\\u024F]+/g, '-')\n      .replace(/^-+|-+$/g, '')\n      .slice(0, 64);\n    if (!base) base = 'section-' + String(fallbackIndex || 1);\n    return base;\n  }\n\n  function ensureArticleHeadingIds(headings) {\n    var seen = {};\n    headings.forEach(function (heading, index) {\n      if (!heading) return;\n      var candidate = String(heading.id || '').trim();\n      if (!candidate) {\n        candidate = 'article-' + slugifyArticleHeading(heading.textContent || '', index + 1);\n      }\n      while (seen[candidate] || document.getElementById(candidate)) {\n        candidate += '-' + String(index + 1);\n      }\n      seen[candidate] = true;\n      heading.id = candidate;\n      heading.setAttribute('data-nb-article-anchor', '');\n    });\n  }\n\n  function escapeRegExp(value) {\n    return String(value || '').replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n  }\n\n  function normalizeArticleTocLabel(text) {\n    return String(text || '').replace(/\\s+/g, ' ').trim();\n  }\n\n  var ARTICLE_TOC_QUESTION_STARTERS = {\n    how: true, hoe: true, why: true, waarom: true, what: true, wat: true, when: true, wanneer: true,\n    where: true, waar: true, which: true, welke: true, welcher: true, welche: true, was: true,\n    wann: true, warumde: true, comment: true, quand: true, pourquoi: true, que: true, como: true,\n    quando: true, porque: true, mit\u00E4: true, miten: true, milloin: true\n  };\n\n  function stripArticleTocPunctuation(text) {\n    return normalizeArticleTocLabel(text).replace(/[.!?;:,]+$/g, '');\n  }\n\n  function shortenArticleTocLabel(text) {\n    var original = stripArticleTocPunctuation(text);\n    if (!original) return '';\n\n    var shortened = original;\n    var firstWord = String(original.split(/\\s+/)[0] || '').toLowerCase();\n    var isQuestionHeading = !!ARTICLE_TOC_QUESTION_STARTERS[firstWord];\n\n    if (shortened.length > 34 && shortened.indexOf(':') !== -1) {\n      var leftOfColon = normalizeArticleTocLabel(shortened.split(':')[0]);\n      if (leftOfColon.length >= 10 && leftOfColon.length <= 34) {\n        shortened = leftOfColon;\n      }\n    }\n\n    if (!isQuestionHeading && shortened.length > 34) {\n      var splitCandidate = shortened.split(/\\s+(?:voor|van|over|bij|met|om|tegen|rond|rondom|for|with|about|\u00FCber|mit|f\u00FCr|sur|pour|med|til|con|per|para|sobre|su|sul|del|della|di)\\s+/i)[0];\n      splitCandidate = normalizeArticleTocLabel(splitCandidate);\n      if (splitCandidate.length >= 10 && splitCandidate.length <= 34 && splitCandidate.length <= shortened.length - 6) {\n        shortened = splitCandidate;\n      }\n    }\n\n    if (!isQuestionHeading && shortened.length > 34) {\n      var listCandidate = shortened.split(/\\s+(?:en|and|und|et|och|og|y|e|ja|sek\u00E4|ning)\\s+/i)[0];\n      listCandidate = normalizeArticleTocLabel(listCandidate);\n      if (\n        listCandidate.length >= 10\n        && listCandidate.length <= 30\n        && listCandidate.length <= shortened.length - 8\n        && !/\\b(?:voor|van|over|bij|met|om|tegen|rond|rondom|for|with|about|\u00FCber|mit|f\u00FCr|sur|pour|med|til|con|per|para|sobre|su|sul|del|della|di)\\b/i.test(listCandidate)\n      ) {\n        shortened = listCandidate;\n      }\n    }\n\n    if (shortened.length > (isQuestionHeading ? 42 : 36)) {\n      var trimmed = shortened.slice(0, isQuestionHeading ? 39 : 33);\n      var lastSpace = trimmed.lastIndexOf(' ');\n      if (lastSpace > 18) {\n        trimmed = trimmed.slice(0, lastSpace);\n      }\n      shortened = normalizeArticleTocLabel(trimmed) + '\u2026';\n    }\n\n    return normalizeArticleTocLabel(shortened) || original;\n  }\n\n  function toPreviewPath(url) {\n    if (!url) return '';\n    try {\n      var parsed = new URL(url, window.location.origin);\n      return parsed.pathname || '';\n    } catch (_err) {\n      return String(url || '').trim();\n    }\n  }\n\n  function buildArticleTocFallbackLabel(section, sectionIndex) {\n    if (!section) return '';\n    var candidateNodes = (section.nodes || []).filter(function (node) {\n      return !!node && node !== section.heading;\n    });\n    for (var index = 0; index < candidateNodes.length; index += 1) {\n      var node = candidateNodes[index];\n      var text = getArticleBlockText(node);\n      if (!text) continue;\n      var nodeTag = String(node.tagName || '').toUpperCase();\n      if (nodeTag === 'UL' || nodeTag === 'OL') {\n        var firstItem = node.querySelector('li');\n        text = getArticleBlockText(firstItem) || text;\n      }\n      if (text.length > 64) {\n        var sentenceCandidate = text.split(/(?<=[.!?])\\s+/)[0];\n        if (sentenceCandidate && sentenceCandidate.length >= 12) {\n          text = sentenceCandidate;\n        }\n      }\n      if (text.length > 72) {\n        var words = text.split(/\\s+/).slice(0, 8);\n        text = words.join(' ');\n      }\n      text = shortenArticleTocLabel(text);\n      if (text.length >= 3) return text;\n    }\n    return i18n('article_funnel.toc_fallback_label', 'Belangrijk onderdeel') + ' ' + String(sectionIndex + 1);\n  }\n\n  function ensureArticleTocTargetId(node, fallbackLabel, fallbackIndex) {\n    if (!node) return '';\n    var candidate = String(node.id || '').trim();\n    if (!candidate) {\n      candidate = 'article-' + slugifyArticleHeading(fallbackLabel || node.textContent || '', fallbackIndex + 1);\n    }\n    var suffix = fallbackIndex + 1;\n    while (candidate && document.getElementById(candidate) && document.getElementById(candidate) !== node) {\n      candidate = candidate.replace(/-\\d+$/, '') + '-' + String(suffix);\n      suffix += 1;\n    }\n    node.id = candidate;\n    node.setAttribute('data-nb-article-anchor', '');\n    return candidate;\n  }\n\n  function pickArticleTocSections(sections, maxItems) {\n    if (!sections || !sections.length) return [];\n    if (sections.length <= maxItems) return sections.slice();\n\n    var indices = [];\n    for (var index = 0; index < maxItems; index += 1) {\n      indices.push(Math.round(((sections.length - 1) * index) / (maxItems - 1)));\n    }\n\n    var seen = {};\n    var picked = [];\n    indices.forEach(function (sectionIndex) {\n      if (seen[sectionIndex]) return;\n      seen[sectionIndex] = true;\n      picked.push(sections[sectionIndex]);\n    });\n\n    for (var fillIndex = 0; picked.length < maxItems && fillIndex < sections.length; fillIndex += 1) {\n      if (seen[fillIndex]) continue;\n      seen[fillIndex] = true;\n      picked.push(sections[fillIndex]);\n    }\n\n    return picked.sort(function (a, b) {\n      return sections.indexOf(a) - sections.indexOf(b);\n    });\n  }\n\n  function buildArticleTocEntries(sections) {\n    if (!sections || !sections.length) return [];\n    var selectedSections = pickArticleTocSections(sections, 6);\n    return selectedSections.map(function (section, index) {\n      var heading = section.heading;\n      var label = heading && getArticleBlockText(heading).length >= 3\n        ? shortenArticleTocLabel(heading.textContent || '')\n        : buildArticleTocFallbackLabel(section, index);\n      var targetNode = heading || section.anchor || (section.nodes && section.nodes[0]) || null;\n      var targetId = ensureArticleTocTargetId(targetNode, label, index);\n      return {\n        heading: heading,\n        label: label,\n        targetId: targetId,\n        title: normalizeArticleTocLabel((heading && heading.textContent) || label || ''),\n        isSublevel: !!heading && String(heading.tagName || '').toUpperCase() === 'H3'\n      };\n    }).filter(function (entry) {\n      return !!entry && !!entry.label && !!entry.targetId;\n    });\n  }\n\n  function createArticleToc(articleRoot, flowNodes, sections) {\n    if (!articleRoot) return null;\n    var tocEntries = buildArticleTocEntries(sections);\n    if (!tocEntries.length) return null;\n    var hasPrimaryH2 = tocEntries.some(function (entry) {\n      return !!entry.heading && String(entry.heading.tagName || '').toUpperCase() === 'H2';\n    });\n    var articleIntent = detectArticleIntent(articleRoot);\n    var toc = document.createElement('nav');\n    toc.className = 'nb-card nb-article-toc nb-reveal is-visible';\n    toc.classList.add('is-' + articleIntent);\n    toc.setAttribute('data-nb-generated', 'toc');\n    toc.setAttribute('data-nb-toc-intent', articleIntent);\n    toc.setAttribute('aria-label', i18n('article_funnel.toc_title', 'In dit artikel'));\n\n    var header = document.createElement('div');\n    header.className = 'nb-article-toc__header';\n\n    var eyebrow = document.createElement('p');\n    eyebrow.className = 'nb-article-toc__eyebrow';\n    eyebrow.textContent = i18n('article_funnel.toc_eyebrow', 'Leeswijzer');\n    header.appendChild(eyebrow);\n\n    var title = document.createElement('p');\n    title.className = 'nb-article-toc__title';\n    title.textContent = i18n('article_funnel.toc_title', 'In dit artikel');\n    header.appendChild(title);\n\n    var hint = document.createElement('p');\n    hint.className = 'nb-article-toc__hint';\n    hint.textContent = i18n('article_funnel.toc_hint', 'Scan eerst de kernpunten en kies daarna je volgende stap.');\n    header.appendChild(hint);\n\n    toc.appendChild(header);\n\n    var list = document.createElement('ol');\n    list.className = 'nb-article-toc__list';\n\n    tocEntries.forEach(function (entry, headingIndex) {\n      var item = document.createElement('li');\n      item.className = 'nb-article-toc__item';\n      if (hasPrimaryH2 && entry.isSublevel) {\n        item.classList.add('is-sublevel');\n      }\n      var link = document.createElement('a');\n      link.setAttribute('href', '#' + entry.targetId);\n      link.setAttribute('data-nb-article-toc-link', '');\n      link.setAttribute('data-nb-cta', 'article_toc_jump');\n      link.setAttribute('data-nb-slot-id', 'article_toc');\n      link.setAttribute('data-nb-slot-type', 'toc');\n      link.setAttribute('data-nb-slot-destination', 'article_section');\n      link.setAttribute('data-nb-toc-target', entry.targetId);\n      var indexBadge = document.createElement('span');\n      indexBadge.className = 'nb-article-toc__index';\n      indexBadge.textContent = String(headingIndex + 1).padStart(2, '0');\n      link.appendChild(indexBadge);\n\n      var label = document.createElement('span');\n      label.className = 'nb-article-toc__label';\n      var labelText = entry.label;\n      label.textContent = labelText;\n      if (labelText.length > 40) {\n        item.classList.add('is-long');\n      }\n      link.setAttribute('title', entry.title || labelText);\n      link.appendChild(label);\n      item.appendChild(link);\n      list.appendChild(item);\n    });\n\n    toc.appendChild(list);\n\n    return toc;\n  }\n\n  function createArticleDestinationConfig(destination, slotType, slotId, ctaId, urls, labelOverride) {\n    var href = '';\n    var label = '';\n    if (destination === 'guide' && urls.guide) {\n      href = urls.guide;\n      label = i18n('shared.view_guide', 'Bekijk complete handleiding');\n    } else if (destination === 'home' && urls.home) {\n      href = urls.home;\n      label = i18n('shared.go_home', 'Ga naar homepage');\n    } else {\n      href = urls.product;\n      label = i18n('shared.view_nordbelt', 'Bekijk Nordbelt');\n      destination = 'product';\n    }\n    if (labelOverride) label = labelOverride;\n    if (!href || !label) return null;\n    return {\n      href: href,\n      label: label,\n      ctaId: ctaId,\n      slotId: slotId,\n      slotType: slotType,\n      destination: destination\n    };\n  }\n\n  function resolveArticleSlotConfigs(articleRoot) {\n    var productUrl = String(articleRoot.getAttribute('data-nb-product-url') || '').trim();\n    var productImage = String(articleRoot.getAttribute('data-nb-product-image') || '').trim();\n    var inlineMediaImage = String(articleRoot.getAttribute('data-nb-inline-media') || '').trim();\n    var ctaMediaSmall = String(articleRoot.getAttribute('data-nb-cta-media-480') || '').trim();\n    var ctaMediaLarge = String(articleRoot.getAttribute('data-nb-cta-media-809') || '').trim();\n    var homeUrl = String(articleRoot.getAttribute('data-nb-home-url') || '').trim();\n    var guideUrl = String(articleRoot.getAttribute('data-nb-guide-url') || '').trim();\n    var mediaBadge = i18n('article_inline.inline_1.media_badge', 'Nordbelt setup');\n    var primaryDestination = detectArticlePrimaryDestination(articleRoot);\n    var squareMediaSmall = ctaMediaSmall || ctaMediaLarge || BLOG_CTA_SQUARE_MEDIA_FALLBACK_URL;\n    var squareMediaLarge = ctaMediaLarge || ctaMediaSmall || BLOG_CTA_SQUARE_MEDIA_FALLBACK_URL;\n    var squareMediaSrcSet = ctaMediaSmall && ctaMediaLarge\n      ? ctaMediaSmall + ' 480w, ' + ctaMediaLarge + ' 809w'\n      : squareMediaLarge;\n    var squareMediaSizes = '(min-width: 561px) 520px, calc(100vw - 3rem)';\n\n    var urls = {\n      product: productUrl,\n      home: homeUrl,\n      guide: guideUrl\n    };\n    var softPrimaryDestination = 'product';\n    var softSecondaryDestination = guideUrl ? 'guide' : 'home';\n    var proofPrimaryDestination = primaryDestination === 'product' ? 'product' : 'home';\n    var proofSecondaryDestination = proofPrimaryDestination === 'product' ? (guideUrl ? 'guide' : 'home') : 'product';\n    var buyPrimaryDestination = primaryDestination === 'product' ? 'product' : 'home';\n    var buySecondaryDestination = buyPrimaryDestination === 'product' ? (guideUrl ? 'guide' : 'home') : 'product';\n    var softTitle = i18n('article_cro.direct.title', 'Do Nordic hamstring curls at home \u2014 without a partner');\n    var softCopy = i18n('article_cro.direct.copy', 'With Nordbelt, you can do Nordic hamstring curls at home without a training partner or bulky machine. Secure your ankles to a sturdy door, training bench or other suitable anchor. Check the attachment and build your range and repetitions gradually.');\n    var proofTitle = i18n('article_cro.adjacent.title', 'Want to add Nordic hamstring curls at home?');\n    var proofCopy = i18n('article_cro.adjacent.copy', 'Nordbelt makes it practical to add controlled Nordic curls at home alongside the exercises in this article \u2014 without a training partner or bulky machine. Secure your ankles to a sturdy door, training bench or other suitable anchor. Progress only when you can perform the earlier exercise steps with control.');\n    var postSafetyTitle = i18n('article_cro.post_safety.title', 'Nordic curls at home \u2014 when strength training fits your stage');\n    var postSafetyCopy = i18n('article_cro.post_safety.copy', 'Nordbelt is a training tool that secures your ankles at home for controlled Nordic variations; it is not a treatment. Use it only when the exercise suits your situation and stage, check the anchor and build up gradually. If pain, injury or rehabilitation is involved, seek qualified guidance when needed.');\n\n    return {\n      soft: {\n        slotName: 'direct',\n        slotId: 'article_direct_rescue',\n        slotType: 'rescue',\n        croVariant: 'direct_v1',\n        primaryDestination: softPrimaryDestination,\n        kicker: i18n('article_cro.direct.kicker', 'Nordic curls, right at home'),\n        title: softTitle,\n        copy: softCopy,\n        chips: [\n          i18n('article_cro.direct.chip_1', 'Nordics at home'),\n          i18n('article_cro.direct.chip_2', 'No training partner'),\n          i18n('article_cro.direct.chip_3', 'No bulky machine')\n        ],\n        media: {\n              src: squareMediaSmall,\n              srcSet: squareMediaSrcSet,\n              sizes: squareMediaSizes,\n              desktopSrc: squareMediaLarge,\n              desktopSrcSet: squareMediaSrcSet,\n              alt: i18n('article_inline.inline_1.media_alt', 'Nordbelt product'),\n              badge: i18n('article_cro.direct.kicker', mediaBadge)\n            },\n        primaryAction: createArticleDestinationConfig(\n          softPrimaryDestination,\n          'rescue',\n          'article_direct_rescue',\n          'article_direct_primary',\n          urls,\n          i18n('article_cro.direct.primary_product', 'View Nordbelt for home training')\n        ),\n        secondaryAction: createArticleDestinationConfig(\n          softSecondaryDestination,\n          'rescue',\n          'article_direct_rescue',\n          'article_direct_secondary',\n          urls,\n          i18n('article_cro.direct.secondary_guide', 'How to set up Nordbelt')\n        )\n      },\n      proof: {\n        slotName: 'adjacent',\n        slotId: 'article_adjacent_rescue',\n        slotType: 'rescue',\n        croVariant: 'adjacent_v1',\n        primaryDestination: proofPrimaryDestination,\n        kicker: i18n('article_cro.adjacent.kicker', 'Your next step at home'),\n        title: proofTitle,\n        copy: proofCopy,\n        chips: [\n          i18n('article_cro.adjacent.chip_1', 'Nordics at home'),\n          i18n('article_cro.adjacent.chip_2', 'No training partner'),\n          i18n('article_cro.adjacent.chip_3', 'Compact to store')\n        ],\n        media: {\n              src: squareMediaSmall,\n              srcSet: squareMediaSrcSet,\n              sizes: squareMediaSizes,\n              desktopSrc: squareMediaLarge,\n              desktopSrcSet: squareMediaSrcSet,\n              alt: i18n('article_inline.inline_2.media_alt', 'Nordbelt close-up'),\n              badge: i18n('article_cro.adjacent.kicker', 'Your next step at home')\n            },\n        primaryAction: createArticleDestinationConfig(\n          proofPrimaryDestination,\n          'rescue',\n          'article_adjacent_rescue',\n          'article_adjacent_primary',\n          urls,\n          proofPrimaryDestination === 'product'\n            ? i18n('article_cro.adjacent.primary_product', 'View Nordbelt for home training')\n            : i18n('article_cro.adjacent.primary_home', 'See how Nordbelt works at home')\n        ),\n        secondaryAction: createArticleDestinationConfig(\n          proofSecondaryDestination,\n          'rescue',\n          'article_adjacent_rescue',\n          'article_adjacent_secondary',\n          urls,\n          proofSecondaryDestination === 'product'\n            ? i18n('article_cro.adjacent.secondary_product', 'View the product')\n            : i18n('article_cro.adjacent.secondary_guide', 'See how the setup works')\n        )\n      },\n      buy: {\n        slotName: 'post-safety',\n        slotId: 'article_post_safety_rescue',\n        slotType: 'rescue',\n        croVariant: 'post_safety_v1',\n        primaryDestination: buyPrimaryDestination,\n        kicker: i18n('article_cro.post_safety.kicker', 'For a later stage of your progression'),\n        title: postSafetyTitle,\n        copy: postSafetyCopy,\n        chips: [\n          i18n('article_cro.post_safety.chip_1', 'Training tool'),\n          i18n('article_cro.post_safety.chip_2', 'For Nordics at home'),\n          i18n('article_cro.post_safety.chip_3', 'Build up gradually')\n        ],\n        media: {\n              src: squareMediaSmall,\n              srcSet: squareMediaSrcSet,\n              sizes: squareMediaSizes,\n              desktopSrc: squareMediaLarge,\n              desktopSrcSet: squareMediaSrcSet,\n              alt: i18n('article_inline.inline_1.media_alt', 'Nordbelt product'),\n              badge: i18n('article_cro.post_safety.kicker', 'For a later stage of your progression')\n            },\n        note: null,\n        primaryAction: createArticleDestinationConfig(\n          buyPrimaryDestination,\n          'rescue',\n          'article_post_safety_rescue',\n          'article_post_safety_primary',\n          urls,\n          buyPrimaryDestination === 'product'\n            ? i18n('article_cro.post_safety.primary_product', 'View Nordbelt for home training')\n            : i18n('article_cro.post_safety.primary_home', 'See how Nordbelt works at home')\n        ),\n        secondaryAction: createArticleDestinationConfig(\n          buySecondaryDestination,\n          'rescue',\n          'article_post_safety_rescue',\n          'article_post_safety_secondary',\n          urls,\n          buySecondaryDestination === 'product'\n            ? i18n('article_cro.post_safety.secondary_product', 'View Nordbelt')\n            : i18n('article_cro.post_safety.secondary_guide', 'How to set up Nordbelt')\n        )\n      }\n    };\n  }\n\n  function getSectionInsertPlan(sections, productRelevance) {\n    if (!sections.length) return { slotName: '', rescueIndex: -1 };\n    var totalWeight = sections.reduce(function (sum, section) {\n      return sum + Math.max(section.weight, 1);\n    }, 0);\n    var targetFraction = productRelevance === 'post_safety' ? 0.84 : productRelevance === 'direct' ? 0.78 : 0.72;\n    var rescueIndex = sections.length - 1;\n    var cumulativeWeight = 0;\n    for (var candidateIndex = 0; candidateIndex < sections.length; candidateIndex += 1) {\n      cumulativeWeight += Math.max(sections[candidateIndex].weight, 1);\n      if (cumulativeWeight / totalWeight >= targetFraction) {\n        rescueIndex = candidateIndex;\n        break;\n      }\n    }\n    return {\n      slotName: productRelevance === 'direct' ? 'soft' : productRelevance === 'post_safety' ? 'buy' : 'proof',\n      rescueIndex: Math.max(0, Math.min(sections.length - 1, rescueIndex))\n    };\n  }\n\n  function initArticleTableOfContents(rootNode) {\n    var scope = rootNode && rootNode.querySelectorAll ? rootNode : document;\n    var articleRoots = [];\n    if (scope && scope.nodeType === 1 && scope.matches && scope.matches('[data-nb-article-conversion]')) {\n      articleRoots.push(scope);\n    }\n    var foundRoots = scope.querySelectorAll('[data-nb-article-conversion]');\n    foundRoots.forEach(function (root) {\n      articleRoots.push(root);\n    });\n    if (!articleRoots.length) return;\n\n    articleRoots.forEach(function (articleRoot) {\n      if (!articleRoot || articleRoot.dataset.nbTocInjected === 'true') return;\n      var rte = articleRoot.querySelector('[data-nb-article-rte]');\n      if (!rte) return;\n      var flowNodes = getArticleFlowNodes(rte);\n      if (!flowNodes.length) return;\n      var sections = buildArticleSections(flowNodes);\n      var toc = createArticleToc(articleRoot, flowNodes, sections);\n      if (!toc) {\n        articleRoot.dataset.nbTocInjected = 'true';\n        return;\n      }\n\n      var introAnchor = findArticleIntroAnchor(flowNodes);\n      var firstHeading = sections.length && sections[0].heading ? sections[0].heading : null;\n      if (introAnchor) {\n        insertNodeAfter(toc, introAnchor);\n      } else if (firstHeading) {\n        insertNodeBefore(toc, firstHeading);\n      } else if (rte.firstChild) {\n        rte.insertBefore(toc, rte.firstChild);\n      } else {\n        rte.appendChild(toc);\n      }\n\n      articleRoot.dataset.nbTocInjected = 'true';\n    });\n  }\n\n  function initArticleEditorialMedia(rootNode) {\n    var scope = rootNode && rootNode.querySelectorAll ? rootNode : document;\n    var articleRoots = [];\n    if (scope && scope.nodeType === 1 && scope.matches && scope.matches('[data-nb-article-conversion]')) {\n      articleRoots.push(scope);\n    }\n    var foundRoots = scope.querySelectorAll('[data-nb-article-conversion]');\n    foundRoots.forEach(function (root) {\n      articleRoots.push(root);\n    });\n    if (!articleRoots.length) return;\n\n    articleRoots.forEach(function (articleRoot) {\n      var rte = articleRoot.querySelector('[data-nb-article-rte]');\n      if (!rte) return;\n      var images = rte.querySelectorAll('img');\n      images.forEach(function (image) {\n        if (!image || image.dataset.nbArticleMediaBound === 'true') return;\n        if (image.closest('.nb-article-inline-conversion')) return;\n        image.dataset.nbArticleMediaBound = 'true';\n\n        var shell = image.closest('figure');\n        if (!shell || !rte.contains(shell)) {\n          shell = image.parentElement;\n          if (shell && shell.tagName === 'A') {\n            shell = shell.parentElement;\n          }\n        }\n        if (!shell || !rte.contains(shell)) return;\n        var shellTag = String(shell.tagName || '').toUpperCase();\n        if (shellTag !== 'P' && shellTag !== 'DIV' && shellTag !== 'FIGURE') return;\n        if (shell.querySelectorAll('img').length !== 1) return;\n\n        var shellText = String(shell.textContent || '').replace(/\\s+/g, ' ').trim();\n        var imageAlt = String(image.getAttribute('alt') || '').replace(/\\s+/g, ' ').trim();\n        if (shellText && imageAlt && shellText !== imageAlt && shellText.length > imageAlt.length + 18) return;\n\n        shell.classList.add('nb-article-media-shell');\n\n        function syncImageShellRatio() {\n          var naturalWidth = Number(image.naturalWidth || image.getAttribute('width') || 0);\n          var naturalHeight = Number(image.naturalHeight || image.getAttribute('height') || 0);\n          if (!naturalWidth || !naturalHeight) return;\n          shell.classList.remove('is-nb-portrait-media', 'is-nb-square-media', 'is-nb-landscape-media');\n          var ratio = naturalWidth / naturalHeight;\n          if (ratio <= 0.92) {\n            shell.classList.add('is-nb-portrait-media');\n          } else if (ratio <= 1.18) {\n            shell.classList.add('is-nb-square-media');\n          } else {\n            shell.classList.add('is-nb-landscape-media');\n          }\n        }\n\n        if (image.complete) {\n          syncImageShellRatio();\n        } else {\n          image.addEventListener('load', syncImageShellRatio, { once: true });\n        }\n      });\n    });\n  }\n\n  function isArticleLeadCandidateNode(node) {\n    if (!node || !node.tagName || node.hasAttribute('data-nb-generated')) return false;\n    var tagName = String(node.tagName || '').toUpperCase();\n    if (tagName !== 'P' && tagName !== 'DIV' && tagName !== 'BLOCKQUOTE') return false;\n    if (node.querySelector && node.querySelector('img,video,iframe,table,ul,ol')) return false;\n    return getArticleNodeTextLength(node) >= 90;\n  }\n\n  function normalizeArticleComparableText(value) {\n    return String(value || '')\n      .toLowerCase()\n      .replace(/[\\u2018\\u2019\\u201c\\u201d\"'`]+/g, '')\n      .replace(/[.,:;!?()\\[\\]{}\\-\u2013\u2014/]+/g, ' ')\n      .replace(/\\s+/g, ' ')\n      .trim();\n  }\n\n  function extractNbContextImageId(value) {\n    var match = String(value || '').match(/nb-blog-context-\\d{8}-(\\d{3})-/i);\n    return match ? 'nb-img-' + match[1] : '';\n  }\n\n  function syncArticleHeroImageFromMeta(articleRoot) {\n    if (!articleRoot || articleRoot.dataset.nbHeroMetaSynced === 'true') return;\n    var heroImage = articleRoot.querySelector('.nb-article__media img');\n    if (!heroImage) return;\n\n    var metaImage = document.querySelector('meta[property=\"og:image\"][content*=\"nb-blog-context-\"], meta[name=\"twitter:image\"][content*=\"nb-blog-context-\"]');\n    var metaSrc = metaImage ? String(metaImage.getAttribute('content') || '').trim() : '';\n    var metaImageId = extractNbContextImageId(metaSrc);\n    if (!metaSrc || !metaImageId) return;\n\n    var currentSrc = heroImage.currentSrc || heroImage.getAttribute('src') || '';\n    var currentImageId = extractNbContextImageId(currentSrc);\n    if (currentImageId === metaImageId) {\n      articleRoot.dataset.nbHeroMetaSynced = 'true';\n      return;\n    }\n\n    heroImage.setAttribute('src', metaSrc);\n    heroImage.removeAttribute('srcset');\n    heroImage.removeAttribute('sizes');\n    var metaAlt = document.querySelector('meta[name=\"twitter:image:alt\"]');\n    var nextAlt = metaAlt ? String(metaAlt.getAttribute('content') || '').trim() : '';\n    if (nextAlt) heroImage.setAttribute('alt', nextAlt);\n    articleRoot.dataset.nbHeroMetaSynced = 'true';\n  }\n\n  function initArticleHeroEnhancements(rootNode) {\n    var scope = rootNode && rootNode.querySelectorAll ? rootNode : document;\n    var articleRoots = [];\n    if (scope && scope.nodeType === 1 && scope.matches && scope.matches('[data-nb-article-conversion]')) {\n      articleRoots.push(scope);\n    }\n    var foundRoots = scope.querySelectorAll('[data-nb-article-conversion]');\n    foundRoots.forEach(function (root) {\n      articleRoots.push(root);\n    });\n    if (!articleRoots.length) return;\n\n    articleRoots.forEach(function (articleRoot) {\n      syncArticleHeroImageFromMeta(articleRoot);\n      if (!articleRoot || articleRoot.dataset.nbHeroEnhanced === 'true') return;\n      var articleContent = articleRoot.querySelector('.nb-article__content');\n      var rte = articleRoot.querySelector('[data-nb-article-rte]');\n      var articleHero = articleRoot.querySelector('[data-nb-article-hero]');\n      var articleHeroCopy = articleHero ? articleHero.querySelector('.nb-article-hero__copy') : null;\n      var articleHeroTrust = articleHero ? articleHero.querySelector('.nb-article-hero__trust') : null;\n      var articleDeck = articleRoot.querySelector('.nb-article__deck');\n      if (!articleContent || !rte || !articleHero || !articleHeroCopy) return;\n\n      Array.prototype.slice.call(rte.querySelectorAll('.is-nb-article-lead, .is-nb-article-lead-support, .is-nb-first-section-heading')).forEach(function (node) {\n        node.classList.remove('is-nb-article-lead', 'is-nb-article-lead-support', 'is-nb-first-section-heading');\n      });\n\n      var flowNodes = getArticleFlowNodes(rte);\n      if (!flowNodes.length) return;\n\n      var firstHeadingIndex = -1;\n      for (var index = 0; index < flowNodes.length; index += 1) {\n        if (isArticleHeadingNode(flowNodes[index])) {\n          firstHeadingIndex = index;\n          break;\n        }\n      }\n\n      var introNodes = firstHeadingIndex === -1 ? flowNodes.slice(0, Math.min(flowNodes.length, 4)) : flowNodes.slice(0, firstHeadingIndex);\n      var leadCandidates = introNodes.filter(isArticleLeadCandidateNode);\n      var firstLeadCandidate = leadCandidates[0] || null;\n      var deckText = articleDeck ? normalizeArticleComparableText(articleDeck.textContent) : '';\n      var leadText = firstLeadCandidate ? normalizeArticleComparableText(firstLeadCandidate.textContent) : '';\n      var isDeckDuplicateLead = !!(\n        articleDeck\n        && firstLeadCandidate\n        && deckText\n        && leadText\n        && (\n          deckText === leadText\n          || deckText.indexOf(leadText) !== -1\n          || leadText.indexOf(deckText) !== -1\n        )\n      );\n\n      articleContent.classList.toggle('has-nb-article-intro', introNodes.length > 0);\n      articleContent.classList.toggle('has-nb-article-deck', !!articleDeck);\n      articleContent.classList.toggle('has-nb-deck-duplicate', isDeckDuplicateLead);\n\n      if (leadCandidates.length) {\n        if (articleDeck) {\n          if (isDeckDuplicateLead) {\n            firstLeadCandidate.classList.add('is-nb-article-deck-duplicate');\n            if (leadCandidates[1]) {\n              leadCandidates[1].classList.add('is-nb-article-lead-support');\n            }\n          } else {\n            firstLeadCandidate.classList.add('is-nb-article-lead-support');\n          }\n        } else {\n          var heroSummary = document.createElement('div');\n          heroSummary.className = 'nb-article-hero__summary';\n          heroSummary.setAttribute('data-nb-generated', 'hero-summary');\n          firstLeadCandidate.classList.add('nb-article-hero__summary-copy');\n          heroSummary.appendChild(firstLeadCandidate);\n          if (articleHeroTrust) {\n            articleHeroCopy.insertBefore(heroSummary, articleHeroTrust);\n          } else {\n            articleHeroCopy.appendChild(heroSummary);\n          }\n          articleContent.classList.add('has-nb-hero-summary');\n          if (leadCandidates[1]) {\n            leadCandidates[1].classList.add('is-nb-article-lead-support');\n          }\n        }\n      }\n\n      if (firstHeadingIndex > -1 && flowNodes[firstHeadingIndex]) {\n        flowNodes[firstHeadingIndex].classList.add('is-nb-first-section-heading');\n      }\n\n      articleRoot.dataset.nbHeroEnhanced = 'true';\n    });\n  }\n\n  var ARTICLE_CALLOUT_LEAD_RE = /^\\s*([^:<]{2,32})\\s*:\\s+/;\n  var ARTICLE_CALLOUT_TIP_RE = /^(?:tip|tips|tipp|tipps|conseil|conseils|vinkki|vinkit|suggerimento|suggerimenti|consejo|consejos|dica|dicas)$/i;\n  var ARTICLE_CALLOUT_NEXT_STEP_RE = /^(?:wil je|want to|ready to|do you want|m\u00F6chten sie|bereit|voulez-vous|pr\u00EAt \u00E0|vill du|redo att|vil du|klar til|haluatko|quer|vuoi|quieres|kas tahad)\\b/i;\n\n  function normalizeArticlePathValue(value) {\n    if (!value) return '';\n    try {\n      return String(new URL(value, window.location.origin).pathname || '').replace(/\\/+$/, '') || '/';\n    } catch (_err) {\n      return String(value || '').trim().replace(/\\/+$/, '') || '/';\n    }\n  }\n\n  function isArticleCommerceLink(link, articleRoot) {\n    if (!link || !link.getAttribute || !articleRoot) return false;\n    var href = String(link.getAttribute('href') || '').trim();\n    if (!href) return false;\n\n    var targetPath = normalizeArticlePathValue(href);\n    var productPath = normalizeArticlePathValue(articleRoot.getAttribute('data-nb-product-url') || '');\n    var guidePath = normalizeArticlePathValue(articleRoot.getAttribute('data-nb-guide-url') || '');\n    var homePath = normalizeArticlePathValue(articleRoot.getAttribute('data-nb-home-url') || '');\n\n    if (targetPath && (targetPath === productPath || targetPath === guidePath || targetPath === homePath)) return true;\n    return /\\/products\\/|\\/pages\\/how-to-guide|\\/collections\\//i.test(targetPath);\n  }\n\n  function isArticleTrackedCommerceDestination(destination) {\n    return /^(product|guide|home|checkout|collection|quote)$/i.test(String(destination || '').trim());\n  }\n\n  function initArticleInlineProductLinkTracking(rootNode) {\n    var scope = rootNode && rootNode.querySelectorAll ? rootNode : document;\n    var articleRoots = [];\n    if (scope && scope.nodeType === 1 && scope.matches && scope.matches('[data-nb-article-conversion]')) {\n      articleRoots.push(scope);\n    }\n    var foundRoots = scope.querySelectorAll('[data-nb-article-conversion]');\n    foundRoots.forEach(function (root) {\n      articleRoots.push(root);\n    });\n    if (!articleRoots.length) return;\n\n    articleRoots.forEach(function (articleRoot) {\n      if (!articleRoot) return;\n      var rte = articleRoot.querySelector('[data-nb-article-rte]');\n      if (!rte) return;\n      var links = rte.querySelectorAll('a[href]');\n      links.forEach(function (link, linkIndex) {\n        if (!link || link.dataset.nbArticleCommerceClickBound === 'true') return;\n        if (link.closest('[data-nb-cta], .nb-article-inline-conversion, [data-nb-article-mobile-sticky]')) return;\n        if (!isArticleCommerceLink(link, articleRoot)) return;\n        var isFaqLink = !!link.closest('[data-nb-article-faq]');\n        var destinationUrl = resolveArticleClickUrl(link);\n        var destination = inferArticleClickDestination(link, articleRoot, '', destinationUrl);\n        if (!isArticleTrackedCommerceDestination(destination)) return;\n        var primaryDestination = detectArticlePrimaryDestination(articleRoot);\n        var slotId = isFaqLink ? 'article_faq_bridge' : 'article_authored_bridge_' + String(linkIndex + 1);\n        var actionRank = destination === primaryDestination ? 'primary' : 'secondary';\n        link.setAttribute('data-nb-cta', isFaqLink ? 'article_faq_bridge' : 'article_authored_bridge');\n        link.setAttribute('data-nb-slot-id', slotId);\n        link.setAttribute('data-nb-slot-type', isFaqLink ? 'faq' : 'authored_bridge');\n        link.setAttribute('data-nb-slot-destination', destination);\n        link.setAttribute('data-nb-action-rank', actionRank);\n        link.setAttribute('data-nb-surface-source', 'authored');\n        var impressionNode = link.closest('p, li, blockquote') || link;\n        if (!impressionNode.hasAttribute('data-nb-conversion-slot')) {\n          impressionNode.setAttribute('data-nb-conversion-slot', '');\n          impressionNode.setAttribute('data-nb-slot-id', slotId);\n          impressionNode.setAttribute('data-nb-slot-type', isFaqLink ? 'faq' : 'authored_bridge');\n          impressionNode.setAttribute('data-nb-slot-destination', destination);\n          impressionNode.setAttribute('data-nb-action-rank', actionRank);\n          impressionNode.setAttribute('data-nb-surface-source', 'authored');\n        }\n        link.dataset.nbArticleCommerceClickBound = 'true';\n        link.addEventListener('click', function () {\n          pushArticleClickEvent(isFaqLink ? 'faq_cta_click' : 'inline_product_link_click', link, articleRoot, {\n            destination: destination,\n            slot_id: slotId,\n            slot_type: isFaqLink ? 'faq' : 'authored_bridge',\n            action_rank: actionRank,\n            surface_source: 'authored',\n            placement: isFaqLink ? 'article_faq' : 'article_body'\n          });\n        });\n      });\n      initCtaTracking();\n      initBlogConversionTracking(articleRoot);\n    });\n  }\n\n  function wrapArticleCalloutLead(node, leadMatch) {\n    if (!node || !leadMatch || node.dataset.nbCalloutWrapped === 'true') return;\n    var html = String(node.innerHTML || '');\n    var match = html.match(ARTICLE_CALLOUT_LEAD_RE);\n    if (!match) return;\n\n    var lead = String(leadMatch[1] || '').trim();\n    var restHtml = html.slice(match[0].length);\n    if (!lead || !restHtml) return;\n\n    var leadNode = document.createElement('span');\n    leadNode.className = 'nb-article-callout__lead';\n    leadNode.textContent = lead;\n\n    var bodyNode = document.createElement('span');\n    bodyNode.className = 'nb-article-callout__body';\n    bodyNode.innerHTML = restHtml;\n\n    node.innerHTML = '';\n    node.appendChild(leadNode);\n    node.appendChild(bodyNode);\n    node.dataset.nbCalloutWrapped = 'true';\n  }\n\n  function initArticleEditorialCallouts(rootNode) {\n    var scope = rootNode && rootNode.querySelectorAll ? rootNode : document;\n    var articleRoots = [];\n    if (scope && scope.nodeType === 1 && scope.matches && scope.matches('[data-nb-article-conversion]')) {\n      articleRoots.push(scope);\n    }\n    var foundRoots = scope.querySelectorAll('[data-nb-article-conversion]');\n    foundRoots.forEach(function (root) {\n      articleRoots.push(root);\n    });\n    if (!articleRoots.length) return;\n\n    articleRoots.forEach(function (articleRoot) {\n      if (!articleRoot || articleRoot.dataset.nbEditorialCalloutsEnhanced === 'true') return;\n      var rte = articleRoot.querySelector('[data-nb-article-rte]');\n      if (!rte) return;\n\n      var blocks = Array.prototype.slice.call(rte.children).filter(function (node) {\n        if (!node || !node.tagName || node.hasAttribute('data-nb-generated')) return false;\n        var tagName = String(node.tagName || '').toUpperCase();\n        if (tagName !== 'P' && tagName !== 'BLOCKQUOTE') return false;\n        if (node.querySelector && node.querySelector('img,video,iframe,table,ul,ol,figure')) return false;\n        return getArticleNodeTextLength(node) >= 34;\n      });\n\n      blocks.forEach(function (node, index) {\n        var text = getArticleBlockText(node);\n        if (!text) return;\n        var links = Array.prototype.slice.call(node.querySelectorAll('a[href]'));\n        var hasCommerceLink = links.some(function (link) {\n          return isArticleCommerceLink(link, articleRoot);\n        });\n        if (hasCommerceLink) return;\n        var leadMatch = text.match(ARTICLE_CALLOUT_LEAD_RE);\n        var leadLabel = leadMatch ? String(leadMatch[1] || '').trim() : '';\n        var isTipCallout = !!leadLabel && ARTICLE_CALLOUT_TIP_RE.test(leadLabel);\n        var isNextStepCallout = ARTICLE_CALLOUT_NEXT_STEP_RE.test(text) && index >= blocks.length - 3;\n        if (!isTipCallout && !isNextStepCallout) return;\n\n        node.classList.add('nb-article-callout');\n        if (isTipCallout) {\n          node.classList.add('is-tip');\n          wrapArticleCalloutLead(node, leadMatch);\n        }\n        if (isNextStepCallout) {\n          node.classList.add('is-next-step');\n        }\n      });\n\n      articleRoot.dataset.nbEditorialCalloutsEnhanced = 'true';\n    });\n  }\n\n  function initArticleInlineConversionBlocks(rootNode) {\n    var scope = rootNode && rootNode.querySelectorAll ? rootNode : document;\n    var articleRoots = [];\n    if (scope && scope.nodeType === 1 && scope.matches && scope.matches('[data-nb-article-conversion]')) {\n      articleRoots.push(scope);\n    }\n    var foundRoots = scope.querySelectorAll('[data-nb-article-conversion]');\n    foundRoots.forEach(function (root) {\n      articleRoots.push(root);\n    });\n    if (!articleRoots.length) return;\n\n    articleRoots.forEach(function (articleRoot) {\n      if (!articleRoot || articleRoot.dataset.nbInlineBlocksInjected === 'true') return;\n      if (String(articleRoot.getAttribute('data-nb-inline-enabled')) !== 'true') return;\n      var rte = articleRoot.querySelector('[data-nb-article-rte]');\n      if (!rte) return;\n\n      var flowNodes = getArticleFlowNodes(rte);\n      if (!flowNodes.length) return;\n\n      var sections = buildArticleSections(flowNodes);\n      if (!sections.length) {\n        articleRoot.dataset.nbInlineBlocksInjected = 'true';\n        applyConversionPreviewPaths(articleRoot);\n        initCtaTracking();\n        initBlogConversionTracking(articleRoot);\n        initAtcTracking();\n        return;\n      }\n\n      var slotConfigs = resolveArticleSlotConfigs(articleRoot);\n      var productRelevance = detectArticleProductRelevance(articleRoot);\n      var insertPlan = getSectionInsertPlan(sections, productRelevance);\n      var insertedSlots = {};\n\n      function placeSlot(slotName, sectionIndex) {\n        if (sectionIndex < 0 || !sections[sectionIndex] || !sections[sectionIndex].anchor || insertedSlots[slotName]) return;\n        var block = createInlineConversionBlock(slotConfigs[slotName], articleRoot);\n        insertNodeAfter(block, sections[sectionIndex].anchor);\n        var opportunitySentinel = createArticleCtaOpportunitySentinel(block);\n        if (opportunitySentinel) insertNodeBefore(opportunitySentinel, block);\n        initBlogCtaExperimentTracking(articleRoot);\n        insertedSlots[slotName] = true;\n      }\n\n      placeSlot(insertPlan.slotName, insertPlan.rescueIndex);\n\n      articleRoot.dataset.nbInlineBlocksInjected = 'true';\n      applyConversionPreviewPaths(articleRoot);\n      initCtaTracking();\n      initBlogConversionTracking(articleRoot);\n      initAtcTracking();\n    });\n  }\n\n  function initArticleScrollDepthTracking(rootNode) {\n    var scope = rootNode && rootNode.querySelectorAll ? rootNode : document;\n    var articleRoots = [];\n    if (scope && scope.nodeType === 1 && scope.matches && scope.matches('[data-nb-article-conversion]')) {\n      articleRoots.push(scope);\n    }\n    var foundRoots = scope.querySelectorAll('[data-nb-article-conversion]');\n    foundRoots.forEach(function (root) {\n      articleRoots.push(root);\n    });\n    if (!articleRoots.length) return;\n\n    articleRoots.forEach(function (articleRoot) {\n      if (!articleRoot || articleRoot.dataset.nbScrollDepthBound === 'true') return;\n      articleRoot.dataset.nbScrollDepthBound = 'true';\n\n      var articleContent = articleRoot.querySelector('.nb-article__content') || articleRoot;\n      var endSentinel = articleRoot.querySelector('[data-nb-article-end-sentinel]') || articleContent;\n      var emittedDepths = readBlogScrollDepthImpressions();\n      var thresholds = [25, 50, 75, 90];\n      var rafId = 0;\n\n      function syncDepth() {\n        rafId = 0;\n        var scrollTop = window.scrollY || window.pageYOffset || 0;\n        var viewportBottom = scrollTop + (window.innerHeight || document.documentElement.clientHeight || 0);\n        var articleTop = scrollTop + articleContent.getBoundingClientRect().top;\n        var articleEnd = scrollTop + endSentinel.getBoundingClientRect().top;\n        var travel = Math.max(1, articleEnd - articleTop);\n        var progress = Math.max(0, Math.min(1, (viewportBottom - articleTop) / travel));\n\n        thresholds.forEach(function (threshold) {\n          var key = (window.location.pathname || '') + '::' + String(articleRoot.getAttribute('data-nb-article-handle') || '') + '::' + String(threshold);\n          if (progress < threshold / 100 || emittedDepths[key]) return;\n          emittedDepths[key] = Date.now();\n          writeBlogScrollDepthImpressions(emittedDepths);\n          pushEvent(\n            appendArticleAnalyticsContext(\n              {\n                event: 'blog_scroll_depth',\n                depth_percent: threshold,\n                context_path: window.location.pathname,\n                slot_type: 'scroll_depth'\n              },\n              articleRoot\n            )\n          );\n\n          if (threshold === 75) {\n            pushEvent(\n              appendArticleAnalyticsContext(\n                {\n                  event: 'blog_scroll_75',\n                  depth_percent: threshold,\n                  context_path: window.location.pathname,\n                  placement: 'article_body'\n                },\n                articleRoot\n              )\n            );\n          }\n        });\n      }\n\n      function scheduleDepthSync() {\n        if (rafId) return;\n        rafId = requestAnimationFrame(syncDepth);\n      }\n\n      scheduleDepthSync();\n      window.addEventListener('scroll', scheduleDepthSync, { passive: true });\n      window.addEventListener('resize', scheduleDepthSync, { passive: true });\n      window.addEventListener('load', scheduleDepthSync, { once: true });\n    });\n  }\n\n  function initArticleViewTracking(rootNode) {\n    var scope = rootNode && rootNode.querySelectorAll ? rootNode : document;\n    var articleRoots = [];\n    if (scope && scope.nodeType === 1 && scope.matches && scope.matches('[data-nb-article-conversion]')) {\n      articleRoots.push(scope);\n    }\n    var foundRoots = scope.querySelectorAll('[data-nb-article-conversion]');\n    foundRoots.forEach(function (root) {\n      articleRoots.push(root);\n    });\n    if (!articleRoots.length) return;\n\n    articleRoots.forEach(function (articleRoot) {\n      if (!articleRoot || articleRoot.dataset.nbViewTracked === 'true') return;\n      var articleContext = getArticleAnalyticsContext(articleRoot);\n      if (!articleContext || !articleContext.slug) return;\n      persistBlogOrigin(articleRoot, {\n        surface_source: 'article_view'\n      });\n\n      var viewMap = readBlogViewEvents();\n      var dedupeKey = (window.location.pathname || '') + '::' + articleContext.slug;\n      if (viewMap[dedupeKey]) {\n        articleRoot.dataset.nbViewTracked = 'true';\n        return;\n      }\n\n      viewMap[dedupeKey] = Date.now();\n      writeBlogViewEvents(viewMap);\n      articleRoot.dataset.nbViewTracked = 'true';\n\n      pushEvent(\n        appendArticleAnalyticsContext(\n          {\n            event: 'blog_view',\n            context_path: window.location.pathname,\n            placement: 'article_body'\n          },\n          articleRoot\n        )\n      );\n    });\n  }\n\n  function initArticleMobileStickyCta(rootNode) {\n    var scope = rootNode && rootNode.querySelectorAll ? rootNode : document;\n    var stickyBars = [];\n    if (scope && scope.nodeType === 1 && scope.matches && scope.matches('[data-nb-article-mobile-sticky]')) {\n      stickyBars.push(scope);\n    }\n    var foundBars = scope.querySelectorAll('[data-nb-article-mobile-sticky]');\n    foundBars.forEach(function (bar) {\n      stickyBars.push(bar);\n    });\n    if (!stickyBars.length) return;\n\n    stickyBars.forEach(function (stickyBar) {\n      if (!stickyBar || stickyBar.dataset.nbStickyBound === 'true') return;\n      stickyBar.dataset.nbStickyBound = 'true';\n\n      var articleRoot = stickyBar.closest('[data-nb-article-conversion]');\n      if (!articleRoot) return;\n      if (String(articleRoot.getAttribute('data-nb-mobile-sticky-enabled')) !== 'true') return;\n      var productRelevance = detectArticleProductRelevance(articleRoot);\n      var articleContent = articleRoot.querySelector('.nb-article__content') || articleRoot;\n      var endSentinel = articleRoot.querySelector('[data-nb-article-end-sentinel]');\n      var mobileMq = window.matchMedia('(max-width: 840px)');\n      var hideBecauseEndVisible = false;\n      var showThreshold = 0;\n      var isIdle = false;\n      var idleTimer = null;\n      var idleDelayMs = 2000;\n      var previewBottomInsetPx = 0;\n\n      var productUrl = String(articleRoot.getAttribute('data-nb-product-url') || '').trim();\n      var homeUrl = String(articleRoot.getAttribute('data-nb-home-url') || '').trim();\n      var productPath = '';\n      var homePath = '';\n      var competingCtaCandidates = null;\n\n      function normalizePath(path) {\n        if (!path) return '/';\n        var normalized = path.replace(/\\/+$/, '');\n        return normalized || '/';\n      }\n\n      function toPath(url) {\n        if (!url) return '';\n        try {\n          return normalizePath(new URL(url, window.location.origin).pathname || '/');\n        } catch (_err) {\n          return '';\n        }\n      }\n\n      productPath = toPath(productUrl);\n      homePath = toPath(homeUrl);\n\n      function getCompetingCtaCandidates() {\n        if (competingCtaCandidates) return competingCtaCandidates;\n        competingCtaCandidates = Array.prototype.slice.call(articleRoot.querySelectorAll('a, button')).filter(function (node) {\n          return !!(node && !stickyBar.contains(node));\n        });\n        return competingCtaCandidates;\n      }\n\n      function isNodeVisibleInViewport(node) {\n        if (!node || !node.getBoundingClientRect) return false;\n        var style = window.getComputedStyle(node);\n        if (!style || style.display === 'none' || style.visibility === 'hidden' || Number(style.opacity || '1') < 0.05) return false;\n        var rect = node.getBoundingClientRect();\n        if (rect.width <= 0 || rect.height <= 0) return false;\n        var viewportWidth = window.innerWidth || document.documentElement.clientWidth || 0;\n        var viewportHeight = window.innerHeight || document.documentElement.clientHeight || 0;\n        var visibleX = Math.min(rect.right, viewportWidth) - Math.max(rect.left, 0);\n        var visibleY = Math.min(rect.bottom, viewportHeight) - Math.max(rect.top, 0);\n        return visibleX > Math.min(28, rect.width * 0.35) && visibleY > Math.min(22, rect.height * 0.35);\n      }\n\n      function hasInViewCompetingCta() {\n        var candidates = getCompetingCtaCandidates();\n        if (!candidates.length) return false;\n        var goHomeNeedle = String(i18n('shared.go_home', 'Ga naar homepage') || '').trim().toLowerCase();\n        var viewNordbeltNeedle = String(i18n('shared.view_nordbelt', 'Bekijk Nordbelt') || '').trim().toLowerCase();\n        for (var index = 0; index < candidates.length; index += 1) {\n          var node = candidates[index];\n          if (!node || stickyBar.contains(node)) continue;\n          if (!isNodeVisibleInViewport(node)) continue;\n\n          var text = String(node.textContent || '').trim().toLowerCase();\n          var hrefPath = node.tagName === 'A' ? toPath(node.getAttribute('href') || '') : '';\n          var hasLabelMatch =\n            (goHomeNeedle && text.indexOf(goHomeNeedle) !== -1) ||\n            (viewNordbeltNeedle && text.indexOf(viewNordbeltNeedle) !== -1);\n          var hasHrefMatch =\n            node.classList.contains('nb-button') &&\n            (hrefPath === productPath || hrefPath === homePath);\n\n          if (hasLabelMatch || hasHrefMatch) return true;\n        }\n        return false;\n      }\n\n      function parseCssPixels(rawValue) {\n        if (typeof rawValue !== 'string') return 0;\n        var parsed = Number.parseFloat(rawValue.replace('px', '').trim());\n        if (!Number.isFinite(parsed) || parsed <= 0) return 0;\n        return parsed;\n      }\n\n      function detectPreviewBottomInset() {\n        var previewFrame = document.getElementById('PBarNextFrame');\n        if (!previewFrame) return 0;\n\n        // Try known CSS vars first (if Shopify exposes them).\n        var roots = [document.documentElement, document.body].filter(Boolean);\n        var cssVarNames = [\n          '--shopify-preview-bar-height',\n          '--preview-bar-height',\n          '--shopify-admin-bar-height'\n        ];\n        for (var rootIndex = 0; rootIndex < roots.length; rootIndex += 1) {\n          var styles = window.getComputedStyle(roots[rootIndex]);\n          for (var varIndex = 0; varIndex < cssVarNames.length; varIndex += 1) {\n            var cssValue = parseCssPixels(styles.getPropertyValue(cssVarNames[varIndex]));\n            if (cssValue > 0 && cssValue < 220) return cssValue;\n          }\n        }\n\n        var frameRect = previewFrame.getBoundingClientRect();\n        var viewportHeight = window.innerHeight || document.documentElement.clientHeight || 0;\n        // Shopify preview frame commonly spans the full viewport and draws a bottom toolbar inside.\n        if (viewportHeight > 0 && frameRect.height >= viewportHeight - 4) {\n          return 64;\n        }\n        return 0;\n      }\n\n      function applyPreviewBottomInset() {\n        var inset = detectPreviewBottomInset();\n        if (inset === previewBottomInsetPx) return;\n        previewBottomInsetPx = inset;\n        stickyBar.style.setProperty('--nb-preview-bottom-offset', inset > 0 ? inset + 'px' : '0px');\n      }\n\n      function hideSticky(fast) {\n        if (fast) {\n          stickyBar.classList.add('is-fast-hide');\n        } else {\n          stickyBar.classList.remove('is-fast-hide');\n        }\n        stickyBar.classList.remove('is-visible');\n        stickyBar.setAttribute('aria-hidden', 'true');\n        document.body.classList.remove('has-article-mobile-sticky');\n      }\n\n      function showSticky() {\n        stickyBar.classList.remove('is-fast-hide');\n        stickyBar.classList.add('is-visible');\n        stickyBar.setAttribute('aria-hidden', 'false');\n        document.body.classList.add('has-article-mobile-sticky');\n        if (stickyBar.dataset.nbVisibleTrackingStarted !== 'true') {\n          stickyBar.dataset.nbVisibleTrackingStarted = 'true';\n          initBlogConversionTracking(stickyBar);\n        }\n      }\n\n      function computeThreshold() {\n        var rect = articleContent.getBoundingClientRect();\n        var scrollTop = window.scrollY || window.pageYOffset || 0;\n        var thresholdFraction = productRelevance === 'post_safety' ? 0.8 : productRelevance === 'direct' ? 0.55 : 0.65;\n        showThreshold = Math.max(0, scrollTop + rect.top + Math.max(240, rect.height * thresholdFraction));\n      }\n\n      function syncStickyState(options) {\n        applyPreviewBottomInset();\n        var scrollTop = window.scrollY || window.pageYOffset || 0;\n        var hasReachedThreshold = scrollTop >= showThreshold;\n        var hasDuplicateInView = hasInViewCompetingCta();\n        var shouldShow = mobileMq.matches && hasReachedThreshold && !hideBecauseEndVisible && !hasDuplicateInView && isIdle;\n        if (shouldShow) {\n          showSticky();\n          return;\n        }\n        hideSticky(Boolean(options && options.fastHide));\n      }\n\n      function scheduleIdleCheck() {\n        isIdle = false;\n        window.clearTimeout(idleTimer);\n        idleTimer = window.setTimeout(function () {\n          isIdle = true;\n          syncStickyState({ fastHide: false });\n        }, idleDelayMs);\n      }\n\n      stickyBar.hidden = false;\n      stickyBar.setAttribute('aria-hidden', 'true');\n      computeThreshold();\n      applyPreviewBottomInset();\n      hideSticky(false);\n      scheduleIdleCheck();\n\n      if ('IntersectionObserver' in window && endSentinel) {\n        var endObserver = new IntersectionObserver(\n          function (entries) {\n            entries.forEach(function (entry) {\n              hideBecauseEndVisible = entry.isIntersecting;\n              syncStickyState({ fastHide: hideBecauseEndVisible });\n            });\n          },\n          { threshold: [0, 0.08, 0.2] }\n        );\n        endObserver.observe(endSentinel);\n      }\n\n      window.addEventListener('scroll', function () {\n        hideSticky(true);\n        scheduleIdleCheck();\n      }, { passive: true });\n      window.addEventListener('resize', function () {\n        computeThreshold();\n        applyPreviewBottomInset();\n        hideSticky(true);\n        scheduleIdleCheck();\n      }, { passive: true });\n\n      if (mobileMq.addEventListener) {\n        mobileMq.addEventListener('change', function () {\n          computeThreshold();\n          applyPreviewBottomInset();\n          hideSticky(true);\n          scheduleIdleCheck();\n        });\n      } else if (mobileMq.addListener) {\n        mobileMq.addListener(function () {\n          computeThreshold();\n          applyPreviewBottomInset();\n          hideSticky(true);\n          scheduleIdleCheck();\n        });\n      }\n\n      applyConversionPreviewPaths(stickyBar);\n      initCtaTracking();\n    });\n  }\n\n  function initImageLoadingHints(rootNode) {\n    var scope = rootNode && rootNode.querySelectorAll ? rootNode : document;\n    var lazyImages = scope.querySelectorAll('img[loading=\"lazy\"]');\n    if (!lazyImages.length) return;\n\n    lazyImages.forEach(function (image) {\n      if (!image.getAttribute('decoding')) {\n        image.setAttribute('decoding', 'async');\n      }\n      if (!image.getAttribute('fetchpriority')) {\n        image.setAttribute('fetchpriority', 'low');\n      }\n    });\n  }\n\n  function initReveal() {\n    var revealNodes = document.querySelectorAll('.nb-reveal');\n    if (!('IntersectionObserver' in window) || !revealNodes.length) {\n      revealNodes.forEach(function (node) {\n        node.classList.add('is-visible');\n      });\n      return;\n    }\n\n    var observer = new IntersectionObserver(\n      function (entries) {\n        entries.forEach(function (entry) {\n          if (entry.isIntersecting) {\n            entry.target.classList.add('is-visible');\n            observer.unobserve(entry.target);\n          }\n        });\n      },\n      { threshold: 0.14 }\n    );\n\n    revealNodes.forEach(function (node) {\n      observer.observe(node);\n    });\n  }\n\n  var headerLocalizationOptionsCache = null;\n\n  function getHeaderLocalizationOptions() {\n    if (headerLocalizationOptionsCache) return headerLocalizationOptionsCache;\n    headerLocalizationOptionsCache = { languages: [], countries: [] };\n    var node = document.getElementById('NbLocalizationOptionsJson');\n    if (!node) return headerLocalizationOptionsCache;\n    var parsed = safeParseJson(node.textContent || '{}', {});\n    if (!parsed || typeof parsed !== 'object') return headerLocalizationOptionsCache;\n    if (Array.isArray(parsed.languages)) headerLocalizationOptionsCache.languages = parsed.languages;\n    if (Array.isArray(parsed.countries)) headerLocalizationOptionsCache.countries = parsed.countries;\n    return headerLocalizationOptionsCache;\n  }\n\n  function hydrateHeaderLocalizationSelect(select) {\n    if (!select || select.dataset.nbLocalizationHydrated === 'true') return;\n    var kind = select.getAttribute('data-nb-localization-kind') || '';\n    var options = getHeaderLocalizationOptions();\n    var entries = kind === 'country' ? options.countries : options.languages;\n    if (!Array.isArray(entries) || !entries.length) return;\n\n    var currentValue = select.value || select.getAttribute('data-initial-value') || '';\n    var fragment = document.createDocumentFragment();\n    entries.forEach(function (entry) {\n      if (!entry || entry.value === undefined || entry.value === null) return;\n      var option = document.createElement('option');\n      option.value = String(entry.value);\n      option.textContent = String(entry.label || entry.value);\n      if (String(entry.value) === String(currentValue)) option.selected = true;\n      fragment.appendChild(option);\n    });\n    if (!fragment.childNodes.length) return;\n\n    select.textContent = '';\n    select.appendChild(fragment);\n    if (currentValue) select.value = currentValue;\n    select.dataset.nbLocalizationHydrated = 'true';\n  }\n\n  function hydrateHeaderLocalizationSelects(scope) {\n    var root = scope && scope.querySelectorAll ? scope : document;\n    var selects = root.querySelectorAll('[data-localization-select]');\n    selects.forEach(hydrateHeaderLocalizationSelect);\n  }\n\n  function initMobileNav() {\n    var toggles = document.querySelectorAll('[data-mobile-nav-toggle]');\n    var panel = document.querySelector('[data-mobile-nav]');\n    if (!toggles.length || !panel) return;\n    var header = panel.closest('[data-nb-header]');\n    var defaultMode = panel.getAttribute('data-mobile-nav-default-mode') || 'pages';\n    var desktopMq = window.matchMedia('(min-width: 841px)');\n    var desktopPanelGlass = null;\n\n    function ensureDesktopPanelGlass() {\n      if (desktopPanelGlass && desktopPanelGlass.isConnected) return desktopPanelGlass;\n      desktopPanelGlass = document.querySelector('.nb-header__panel-glass-layer');\n      if (desktopPanelGlass) return desktopPanelGlass;\n      if (!document.body) return null;\n      desktopPanelGlass = document.createElement('div');\n      desktopPanelGlass.className = 'nb-header__panel-glass-layer';\n      desktopPanelGlass.setAttribute('aria-hidden', 'true');\n      document.body.appendChild(desktopPanelGlass);\n      return desktopPanelGlass;\n    }\n\n    function hideDesktopPanelGlass() {\n      if (!desktopPanelGlass) return;\n      desktopPanelGlass.classList.remove('is-visible');\n    }\n\n    function updateDesktopPanelGlass(isOpen) {\n      var shouldShow = Boolean(isOpen && desktopMq.matches && header && panel.classList.contains('is-open'));\n      if (!shouldShow) {\n        hideDesktopPanelGlass();\n        return;\n      }\n      var glass = ensureDesktopPanelGlass();\n      if (!glass) return;\n      var rect = panel.getBoundingClientRect();\n      if (!rect.width || !rect.height) {\n        hideDesktopPanelGlass();\n        return;\n      }\n      glass.style.left = rect.left + 'px';\n      glass.style.top = rect.top + 'px';\n      glass.style.width = rect.width + 'px';\n      glass.style.height = rect.height + 'px';\n      glass.classList.add('is-visible');\n    }\n\n    function queueDesktopPanelGlassUpdate(isOpen) {\n      window.requestAnimationFrame(function () {\n        updateDesktopPanelGlass(isOpen);\n      });\n    }\n\n    function setMode(mode) {\n      var normalizedMode = mode || defaultMode;\n      panel.dataset.mode = normalizedMode;\n      panel.classList.toggle('is-mode-pages', normalizedMode === 'pages');\n      panel.classList.toggle('is-mode-locale', normalizedMode === 'locale');\n      panel.classList.toggle('is-mode-default', normalizedMode !== 'pages' && normalizedMode !== 'locale');\n    }\n\n    function setOpenState(isOpen, mode) {\n      if (mode) setMode(mode);\n      else if (!panel.dataset.mode) setMode(defaultMode);\n      if (isOpen) {\n        hydrateHeaderLocalizationSelects(panel);\n      }\n      panel.hidden = !isOpen;\n      panel.setAttribute('aria-hidden', isOpen ? 'false' : 'true');\n      if ('inert' in panel) {\n        panel.inert = !isOpen;\n      } else if (isOpen) {\n        panel.removeAttribute('inert');\n      } else {\n        panel.setAttribute('inert', '');\n      }\n      panel.classList.toggle('is-open', isOpen);\n      if (header) {\n        header.classList.toggle('is-nav-panel-open', isOpen);\n      }\n      toggles.forEach(function (toggle) {\n        toggle.setAttribute('aria-expanded', String(isOpen));\n        var toggleMode = toggle.getAttribute('data-mobile-nav-mode') || defaultMode;\n        toggle.classList.toggle('is-active', isOpen && toggleMode === (panel.dataset.mode || defaultMode));\n      });\n      queueDesktopPanelGlassUpdate(isOpen);\n    }\n\n    toggles.forEach(function (toggle) {\n      toggle.addEventListener('click', function () {\n        var requestedMode = toggle.getAttribute('data-mobile-nav-mode') || defaultMode;\n        var isOpen = panel.classList.contains('is-open');\n        var currentMode = panel.dataset.mode || defaultMode;\n        if (isOpen && currentMode === requestedMode) {\n          setOpenState(false, requestedMode);\n          return;\n        }\n        setOpenState(true, requestedMode);\n      });\n    });\n\n    panel.addEventListener('click', function (event) {\n      var target = event.target;\n      if (!target || !target.closest) return;\n      if (!target.closest('a')) return;\n      setOpenState(false);\n    });\n\n    document.addEventListener('click', function (event) {\n      if (!panel.classList.contains('is-open')) return;\n      var clickedToggle = event.target && event.target.closest('[data-mobile-nav-toggle]');\n      if (clickedToggle) return;\n      if (panel.contains(event.target)) return;\n      setOpenState(false);\n    });\n\n    document.addEventListener('keydown', function (event) {\n      if (event.key !== 'Escape') return;\n      if (!panel.classList.contains('is-open')) return;\n      setOpenState(false);\n    });\n\n    window.addEventListener('resize', function () {\n      if (!panel.classList.contains('is-open')) return;\n      queueDesktopPanelGlassUpdate(true);\n    }, { passive: true });\n\n    window.addEventListener('scroll', function () {\n      if (!panel.classList.contains('is-open')) return;\n      queueDesktopPanelGlassUpdate(true);\n    }, { passive: true });\n\n    function handleDesktopMqChange() {\n      queueDesktopPanelGlassUpdate(panel.classList.contains('is-open'));\n    }\n\n    if (desktopMq.addEventListener) {\n      desktopMq.addEventListener('change', handleDesktopMqChange);\n    } else if (desktopMq.addListener) {\n      desktopMq.addListener(handleDesktopMqChange);\n    }\n  }\n\n  function initHeaderCompactState() {\n    var header = document.querySelector('[data-nb-header]');\n    if (!header) return;\n\n    var threshold = 36;\n    var lastCompact = null;\n    var lastScrolled = null;\n    var ticking = false;\n\n    function applyState() {\n      var scrollY = window.scrollY || window.pageYOffset || 0;\n      var compact = scrollY > threshold;\n      var scrolled = scrollY > 2;\n      if (compact === lastCompact && scrolled === lastScrolled) return;\n      header.classList.toggle('is-scrolled', scrolled);\n      header.classList.toggle('is-compact', compact);\n      lastCompact = compact;\n      lastScrolled = scrolled;\n    }\n\n    function queueState() {\n      if (ticking) return;\n      ticking = true;\n      window.requestAnimationFrame(function () {\n        applyState();\n        ticking = false;\n      });\n    }\n\n    applyState();\n    window.addEventListener('scroll', queueState, { passive: true });\n    window.addEventListener('resize', queueState, { passive: true });\n  }\n\n  function initAnnouncementAutoHide() {\n    var root = document.documentElement;\n    var announcement = document.querySelector('.nb-announcement');\n    if (!root || !announcement) return;\n    var mobileMq = window.matchMedia('(max-width: 840px)');\n\n    var lastOffset = null;\n    var lastProgress = null;\n    var ticking = false;\n    var announcementHeight = 0;\n\n    function refreshAnnouncementHeight() {\n      announcementHeight = Math.max(1, Math.round(announcement.getBoundingClientRect().height));\n    }\n\n    function applyState() {\n      if (mobileMq.matches) {\n        root.style.setProperty('--nb-announcement-offset', '0px');\n        root.style.setProperty('--nb-announcement-collapse', '1');\n        announcement.classList.add('is-hidden');\n        return;\n      }\n      var scrollY = window.scrollY || window.pageYOffset || 0;\n      var height = announcementHeight || 1;\n      var progress = Math.max(0, Math.min(1, scrollY / height));\n      var offset = -Math.round(height * progress);\n      if (offset === lastOffset && progress === lastProgress) return;\n\n      root.style.setProperty('--nb-announcement-offset', offset + 'px');\n      root.style.setProperty('--nb-announcement-collapse', progress.toFixed(4));\n      announcement.classList.toggle('is-hidden', progress >= 0.995);\n\n      lastOffset = offset;\n      lastProgress = progress;\n    }\n\n    function queueState() {\n      if (ticking) return;\n      ticking = true;\n      window.requestAnimationFrame(function () {\n        applyState();\n        ticking = false;\n      });\n    }\n\n    function handleReflowStateChange() {\n      refreshAnnouncementHeight();\n      queueState();\n    }\n\n    refreshAnnouncementHeight();\n    applyState();\n    window.addEventListener('scroll', queueState, { passive: true });\n    window.addEventListener('resize', handleReflowStateChange, { passive: true });\n    if (mobileMq.addEventListener) mobileMq.addEventListener('change', handleReflowStateChange);\n    else if (mobileMq.addListener) mobileMq.addListener(handleReflowStateChange);\n    if ('ResizeObserver' in window) {\n      var sizeObserver = new ResizeObserver(handleReflowStateChange);\n      sizeObserver.observe(announcement);\n    }\n  }\n\n  function initHeaderLocalization() {\n    var selects = document.querySelectorAll('[data-localization-select]');\n    if (!selects.length) return;\n    var MANUAL_LOCALE_STORAGE_KEY = 'nb_locale_manual_v3';\n\n    function enforceSecureLocalizationAction(form) {\n      if (!form || !form.setAttribute) return '/localization';\n      // Force same-origin localization endpoint to avoid mixed-content form submits.\n      form.setAttribute('action', '/localization');\n      return '/localization';\n    }\n\n    function resolveManualLocalizationIntent(form, changedSelect, syncedLocaleCode) {\n      if (!form) return null;\n\n      var countrySelect = form.querySelector('select[name=\"country_code\"]');\n      var localeSelect = form.querySelector('select[name=\"locale_code\"], select[name=\"locale_code_ui\"], select[data-nb-original-name=\"locale_code\"]');\n\n      var countryCode = '';\n      if (changedSelect && changedSelect.name === 'country_code' && changedSelect.value) {\n        countryCode = String(changedSelect.value).trim().toUpperCase();\n      } else if (countrySelect && countrySelect.value) {\n        countryCode = String(countrySelect.value).trim().toUpperCase();\n      }\n\n      var localeCode = normalizeLocaleCode(syncedLocaleCode || '');\n      if (!localeCode && changedSelect && changedSelect.name === 'locale_code' && changedSelect.value) {\n        localeCode = normalizeLocaleCode(changedSelect.value);\n      }\n      if (!localeCode && localeSelect && localeSelect.value) {\n        localeCode = normalizeLocaleCode(localeSelect.value);\n      }\n\n      var localeBase = localeBaseCode(localeCode);\n      if (!localeBase && countryCode) {\n        localeBase = resolveCountryPrimaryLocale(countryCode);\n      }\n      if (!localeBase) localeBase = 'en';\n\n      return {\n        countryCode: countryCode,\n        localeCode: localeCode,\n        localeBase: localeBase\n      };\n    }\n\n    function buildManualReturnPath(currentUrl, intent) {\n      var config = window.NordbeltLocaleConfig || {};\n      var locales = sanitizeAvailableLocales(config.availableLocales || []);\n      var rawPath = currentUrl.pathname || '/';\n      var canonicalPath = stripLocalePrefixFromPath(rawPath, locales);\n      var marketPath = parseMarketLocaleFromPath(rawPath);\n      if (marketPath) {\n        var strippedMarketPath = stripFirstPathSegment(rawPath) || '/';\n        if (!canonicalPath || canonicalPath === rawPath || canonicalPath === marketPath.rootUrl) {\n          canonicalPath = strippedMarketPath;\n        } else if (canonicalPath.indexOf(marketPath.rootUrl + '/') === 0) {\n          canonicalPath = canonicalPath.slice(marketPath.rootUrl.length) || '/';\n        }\n      }\n      if (!canonicalPath) canonicalPath = '/';\n      if (canonicalPath.charAt(0) !== '/') canonicalPath = '/' + canonicalPath;\n      canonicalPath = canonicalPath.replace(/\\/{2,}/g, '/');\n\n      var targetRoot = '/';\n      if (intent.localeBase === 'nl' || intent.countryCode === 'NL') {\n        targetRoot = intent.localeBase === 'en' ? '/en' : '/';\n      } else if (intent.localeBase && intent.localeBase !== 'en') {\n        targetRoot = preferredMarketRootForLocaleBase(intent.localeBase) || ('/' + intent.localeBase);\n      }\n\n      return buildLocalizedPath(canonicalPath, targetRoot);\n    }\n\n    function ensurePreviewReturnTo(form, stripCampaignParams, changedSelect, syncedLocaleCode) {\n      if (!form) return;\n      var current = new URL(window.location.href);\n      if (stripCampaignParams) {\n        current.searchParams.delete('country');\n        current.searchParams.delete('shpxid');\n        current.searchParams.delete('locale');\n        current.searchParams.delete('market');\n      }\n      var returnPath = current.pathname;\n      if (stripCampaignParams) {\n        var intent = resolveManualLocalizationIntent(form, changedSelect, syncedLocaleCode);\n        if (intent) {\n          returnPath = buildManualReturnPath(current, intent);\n        }\n      }\n\n      var returnTo = returnPath + current.search;\n      var field = form.querySelector('input[name=\"return_to\"]');\n      if (!field) {\n        field = document.createElement('input');\n        field.type = 'hidden';\n        field.name = 'return_to';\n        form.appendChild(field);\n      }\n      field.value = returnTo;\n    }\n\n    function submitLocalizationWithPreviewLock(form) {\n      if (!form || !window.fetch || !window.FormData) return false;\n      var current = new URL(window.location.href);\n      if (!current.searchParams.has('preview_theme_id')) return false;\n\n      var action = enforceSecureLocalizationAction(form);\n      var formData = new FormData(form);\n      formData.set('return_to', buildShopifyPathWithPreview(window.location.pathname));\n\n      fetch(action, {\n        method: 'POST',\n        body: formData,\n        credentials: 'same-origin'\n      })\n        .catch(function () {\n          // noop\n        })\n        .finally(function () {\n          window.location.assign(buildShopifyPathWithPreview(window.location.pathname));\n        });\n\n      return true;\n    }\n\n    function submitLocalizationForm(form, changedSelect) {\n      if (!form) return;\n      var isManualLocalizationChange = !!(\n        changedSelect &&\n        (changedSelect.name === 'locale_code' || changedSelect.name === 'country_code')\n      );\n      var syncedLocaleCode = syncLocalizationLocaleToCountryPrimary(form, changedSelect);\n      if (isManualLocalizationChange) {\n        clearCampaignMarketLock();\n        var localeSelect = form.querySelector('select[name=\"locale_code\"], select[name=\"locale_code_ui\"], select[data-nb-original-name=\"locale_code\"]');\n        var manualLocaleCode = '';\n        if (syncedLocaleCode) {\n          manualLocaleCode = normalizeLocaleCode(syncedLocaleCode);\n        } else if (localeSelect && localeSelect.value) {\n          manualLocaleCode = normalizeLocaleCode(localeSelect.value);\n        } else if (changedSelect && changedSelect.name === 'locale_code' && changedSelect.value) {\n          manualLocaleCode = normalizeLocaleCode(changedSelect.value);\n        }\n        if (manualLocaleCode) {\n          writeStorageItem(window.localStorage, MANUAL_LOCALE_STORAGE_KEY, manualLocaleCode);\n          writeStorageItem(window.sessionStorage, MANUAL_LOCALE_STORAGE_KEY, manualLocaleCode);\n        }\n      }\n      var manualIntent = isManualLocalizationChange\n        ? resolveManualLocalizationIntent(form, changedSelect, syncedLocaleCode)\n        : null;\n\n      if (manualIntent) {\n        var manualCurrentUrl = new URL(window.location.href);\n        manualCurrentUrl.searchParams.delete('country');\n        manualCurrentUrl.searchParams.delete('shpxid');\n        manualCurrentUrl.searchParams.delete('locale');\n        manualCurrentUrl.searchParams.delete('market');\n\n        var manualConfig = window.NordbeltLocaleConfig || {};\n        var manualHostName = sanitizeHostName(manualCurrentUrl.hostname || '');\n        var manualIsNlHost = isNordbeltNlHost(manualHostName);\n\n        if (!manualIsNlHost && (manualIntent.localeBase === 'nl' || manualIntent.countryCode === 'NL')) {\n          var nlTargetHost = resolvePreferredNlHost(manualConfig, manualCurrentUrl.hostname || '');\n          var nlTargetPath = buildManualReturnPath(manualCurrentUrl, manualIntent) || '/';\n          var nlTargetUrl = buildHostSwapUrl(nlTargetHost, manualCurrentUrl, nlTargetPath);\n          if (nlTargetUrl) {\n            window.location.assign(nlTargetUrl);\n            return;\n          }\n        }\n\n        if (!manualIsNlHost && changedSelect && changedSelect.name === 'locale_code' && manualIntent.localeBase && manualIntent.localeBase !== 'en') {\n          var preferredLocalePath = buildManualReturnPath(manualCurrentUrl, manualIntent) || '/';\n          if (preferredLocalePath) {\n            window.location.assign(preferredLocalePath);\n            return;\n          }\n        }\n\n        if (manualIsNlHost && manualIntent.localeBase && manualIntent.localeBase !== 'nl') {\n          var manualLocales = sanitizeAvailableLocales(manualConfig.availableLocales || []);\n          var canonicalPath = stripLocalePrefixFromPath(manualCurrentUrl.pathname, manualLocales) || '/';\n          var comTargetPath = manualIntent.localeBase === 'en'\n            ? canonicalPath\n            : (buildManualReturnPath(manualCurrentUrl, manualIntent) || '/');\n          var preferredComHost = sanitizeHostName(manualConfig.preferredComHost || 'www.nordbelt.com');\n          var comTargetUrl = buildHostSwapUrl(preferredComHost, manualCurrentUrl, comTargetPath);\n          if (comTargetUrl) {\n            try {\n              var comTargetResolvedUrl = new URL(comTargetUrl);\n              if (manualIntent.countryCode) {\n                comTargetResolvedUrl.searchParams.set('country', String(manualIntent.countryCode).trim().toUpperCase());\n              }\n              window.location.assign(comTargetResolvedUrl.toString());\n            } catch (_errComTargetUrl) {\n              window.location.assign(comTargetUrl);\n            }\n            return;\n          }\n        }\n      }\n\n      enforceSecureLocalizationAction(form);\n      ensurePreviewReturnTo(form, isManualLocalizationChange, changedSelect, syncedLocaleCode);\n      if (submitLocalizationWithPreviewLock(form)) return;\n      form.submit();\n    }\n\n    selects.forEach(function (select) {\n      select.dataset.initialValue = select.value || '';\n      select.addEventListener('focus', function () {\n        hydrateHeaderLocalizationSelect(select);\n      });\n      select.addEventListener('pointerdown', function () {\n        hydrateHeaderLocalizationSelect(select);\n      }, { passive: true });\n      select.addEventListener('change', function () {\n        if (!select.form) return;\n        hydrateHeaderLocalizationSelects(select.form);\n        if (select.name === 'locale_code' && select.value) {\n          var manualLocaleCode = normalizeLocaleCode(select.value);\n          if (manualLocaleCode) {\n            writeStorageItem(window.localStorage, MANUAL_LOCALE_STORAGE_KEY, manualLocaleCode);\n            writeStorageItem(window.sessionStorage, MANUAL_LOCALE_STORAGE_KEY, manualLocaleCode);\n          }\n        }\n        if (select.name === 'country_code') clearCampaignMarketLock();\n\n        if (select.form.dataset.nbLocaleSubmitting === '1') return;\n        select.form.dataset.nbLocaleSubmitting = '1';\n\n        var submitTriggered = false;\n        var submitNow = function () {\n          if (submitTriggered) return;\n          submitTriggered = true;\n          submitLocalizationForm(select.form, select);\n        };\n\n        var timeoutId = window.setTimeout(submitNow, 2200);\n        snapshotCartForLocaleTransfer()\n          .catch(function () {\n            // noop\n          })\n          .finally(function () {\n            window.clearTimeout(timeoutId);\n            submitNow();\n          });\n      });\n    });\n  }\n\n  function isLocalePreservableStorePath(pathname) {\n    var path = String(pathname || '/');\n    if (!path) path = '/';\n    if (path.charAt(0) !== '/') path = '/' + path;\n    if (path === '/') return true;\n    return /^\\/(products|pages|blogs|collections|search|cart)(\\/|$)/i.test(path);\n  }\n\n  function buildLocalizedStorefrontPath(pathname) {\n    var path = String(pathname || '/');\n    if (!path) path = '/';\n    if (path.charAt(0) !== '/') path = '/' + path;\n    if (!isLocalePreservableStorePath(path)) return '';\n    if (isCheckoutPath(path)) return '';\n    if (path === '/localization' || path.indexOf('/localization/') === 0) return '';\n\n    var config = window.NordbeltLocaleConfig || {};\n    var currentRootUrl = normalizeLocaleRootUrl(config.currentRootUrl || '/');\n    if (isNordbeltNlHost(window.location && window.location.hostname ? window.location.hostname : '') && localeBaseCode(config.currentLocale || '') === 'nl') {\n      currentRootUrl = '/';\n    }\n    if (currentRootUrl === '/') return '';\n\n    var locales = sanitizeAvailableLocales(config.availableLocales || []);\n    if (!locales.length) {\n      var fallbackCode = normalizeLocaleCode(config.currentLocale || document.documentElement.getAttribute('lang') || '');\n      if (fallbackCode) {\n        locales = [{\n          code: fallbackCode,\n          base: localeBaseCode(fallbackCode),\n          rootUrl: currentRootUrl\n        }];\n      }\n    }\n\n    if (hasExplicitLocalePath(path, locales)) return '';\n\n    var localizedPath = buildLocalizedPath(path, currentRootUrl);\n    return localizedPath && localizedPath !== path ? localizedPath : '';\n  }\n\n  function localizeInternalAnchors(rootNode) {\n    var scope = rootNode && rootNode.querySelectorAll ? rootNode : document;\n    var links = scope.querySelectorAll('a[href]');\n    if (!links.length) return;\n\n    links.forEach(function (link) {\n      if (!link || !link.getAttribute || !link.setAttribute) return;\n      var rawHref = String(link.getAttribute('href') || '').trim();\n      if (!rawHref || rawHref.charAt(0) === '#') return;\n\n      var lowerHref = rawHref.toLowerCase();\n      if (\n        lowerHref.indexOf('mailto:') === 0 ||\n        lowerHref.indexOf('tel:') === 0 ||\n        lowerHref.indexOf('sms:') === 0 ||\n        lowerHref.indexOf('javascript:') === 0 ||\n        lowerHref.indexOf('data:') === 0\n      ) {\n        return;\n      }\n\n      var parsed;\n      try {\n        parsed = new URL(rawHref, window.location.origin);\n      } catch (_err) {\n        return;\n      }\n\n      if (parsed.origin !== window.location.origin) return;\n\n      var localizedPath = buildLocalizedStorefrontPath(parsed.pathname || '/');\n      if (!localizedPath) return;\n\n      var localizedHref = localizedPath + (parsed.search || '') + (parsed.hash || '');\n      link.setAttribute('href', localizedHref);\n    });\n  }\n\n  function normalizeLocaleRootUrl(rootUrl) {\n    var normalized = String(rootUrl || '/').trim();\n    if (!normalized) normalized = '/';\n    if (normalized.charAt(0) !== '/') normalized = '/' + normalized;\n    if (normalized.length > 1 && normalized.charAt(normalized.length - 1) === '/') {\n      normalized = normalized.slice(0, -1);\n    }\n    return normalized || '/';\n  }\n\n  function normalizeLocaleCode(code) {\n    return String(code || '').trim().toLowerCase().replace(/_/g, '-');\n  }\n\n  function localeBaseCode(code) {\n    var normalized = normalizeLocaleCode(code);\n    return normalized ? normalized.split('-')[0] : '';\n  }\n\n  function resolveCountryPrimaryLocale(countryCode) {\n    var code = String(countryCode || '').trim().toUpperCase();\n    if (!code) return '';\n    var COUNTRY_PRIMARY_LOCALE = {\n      NL: 'nl',\n      BE: 'nl',\n      AW: 'nl',\n      CW: 'nl',\n      SX: 'nl',\n      BQ: 'nl',\n      SR: 'nl',\n      DE: 'de',\n      AT: 'de',\n      LI: 'de',\n      LU: 'de',\n      CH: 'de',\n      FR: 'fr',\n      MC: 'fr',\n      RE: 'fr',\n      GP: 'fr',\n      MQ: 'fr',\n      GF: 'fr',\n      PF: 'fr',\n      NC: 'fr',\n      BL: 'fr',\n      MF: 'fr',\n      PM: 'fr',\n      WF: 'fr',\n      YT: 'fr',\n      SE: 'sv',\n      DK: 'da',\n      NO: 'nb',\n      FI: 'fi',\n      EE: 'et',\n      ES: 'es',\n      IT: 'it',\n      PT: 'pt',\n      IE: 'en',\n      GB: 'en',\n      US: 'en',\n      CA: 'en',\n      AU: 'en',\n      NZ: 'en',\n      MT: 'en',\n      CY: 'en'\n    };\n    return COUNTRY_PRIMARY_LOCALE[code] || 'en';\n  }\n\n  function sanitizeAvailableLocales(locales) {\n    var list = [];\n    var seen = {};\n    (locales || []).forEach(function (entry) {\n      if (!entry || typeof entry !== 'object') return;\n      var code = normalizeLocaleCode(entry.code || entry.iso_code || entry.locale || '');\n      if (!code || seen[code]) return;\n      seen[code] = true;\n      list.push({\n        code: code,\n        base: localeBaseCode(code),\n        rootUrl: normalizeLocaleRootUrl(entry.rootUrl || entry.root_url || '/')\n      });\n    });\n    return list;\n  }\n\n  function getBrowserLocaleCandidates() {\n    var candidates = [];\n    var seen = {};\n    var languages = [];\n\n    if (Array.isArray(navigator.languages) && navigator.languages.length) {\n      languages = languages.concat(navigator.languages);\n    }\n    if (navigator.language) languages.push(navigator.language);\n\n    function pushCandidate(value) {\n      var normalized = normalizeLocaleCode(value);\n      if (!normalized || seen[normalized]) return;\n      seen[normalized] = true;\n      candidates.push(normalized);\n    }\n\n    languages.forEach(function (language) {\n      var normalized = normalizeLocaleCode(language);\n      if (!normalized) return;\n      pushCandidate(normalized);\n      pushCandidate(localeBaseCode(normalized));\n    });\n\n    return candidates;\n  }\n\n  function resolveBrowserRegionCountryHint(preferredBase) {\n    var preferred = localeBaseCode(preferredBase);\n    var languages = [];\n    if (Array.isArray(navigator.languages) && navigator.languages.length) {\n      languages = languages.concat(navigator.languages);\n    }\n    if (navigator.language) languages.push(navigator.language);\n\n    for (var i = 0; i < languages.length; i += 1) {\n      var normalized = normalizeLocaleCode(languages[i]);\n      if (!normalized) continue;\n      var parts = normalized.split('-');\n      if (parts.length < 2 || !parts[1] || parts[1].length !== 2) continue;\n\n      var base = localeBaseCode(normalized);\n      if (base === 'no') base = 'nb';\n      if (preferred && preferred !== base) continue;\n\n      return String(parts[1]).toUpperCase();\n    }\n\n    return '';\n  }\n\n  function isLikelyCrawlerUserAgent() {\n    var ua = String((window.navigator && window.navigator.userAgent) || '').toLowerCase();\n    if (!ua) return false;\n    return /bot|crawl|spider|slurp|bingpreview|google-structured-data-testing-tool|lighthouse|pagespeed|headlesschrome|facebookexternalhit|whatsapp|telegrambot|linkedinbot|twitterbot/.test(ua);\n  }\n\n  function findLocaleByCandidate(locales, candidate) {\n    var normalizedCandidate = normalizeLocaleCode(candidate);\n    if (!normalizedCandidate) return null;\n    for (var i = 0; i < locales.length; i += 1) {\n      if (locales[i].code === normalizedCandidate) return locales[i];\n    }\n    var baseCandidate = localeBaseCode(normalizedCandidate);\n    if (!baseCandidate) return null;\n    for (var j = 0; j < locales.length; j += 1) {\n      if (locales[j].base === baseCandidate) return locales[j];\n    }\n    return null;\n  }\n\n  function stripLocalePrefixFromPath(pathname, locales) {\n    var path = String(pathname || '/');\n    if (!path) path = '/';\n    if (path.charAt(0) !== '/') path = '/' + path;\n    var prefixes = locales\n      .map(function (locale) { return locale.rootUrl; })\n      .filter(function (rootUrl) { return rootUrl && rootUrl !== '/'; })\n      .sort(function (a, b) { return b.length - a.length; });\n\n    for (var i = 0; i < prefixes.length; i += 1) {\n      var prefix = prefixes[i];\n      if (path === prefix) return '/';\n      if (path.indexOf(prefix + '/') === 0) {\n        var stripped = path.slice(prefix.length);\n        return stripped || '/';\n      }\n    }\n\n    return path;\n  }\n\n  function buildLocalizedPath(pathname, targetRootUrl) {\n    var cleanPath = String(pathname || '/');\n    if (!cleanPath || cleanPath.charAt(0) !== '/') cleanPath = '/' + cleanPath;\n    var root = normalizeLocaleRootUrl(targetRootUrl || '/');\n    if (root === '/') return cleanPath;\n    return cleanPath === '/' ? root : root + cleanPath;\n  }\n\n  function isNordbeltNlHost(hostName) {\n    var normalized = String(hostName || '').trim().toLowerCase();\n    return /(^|\\.)nordbelt\\.nl$/.test(normalized);\n  }\n\n  function sanitizeHostName(hostValue) {\n    var normalized = String(hostValue || '').trim().toLowerCase();\n    normalized = normalized.replace(/^https?:\\/\\//, '');\n    normalized = normalized.split('/')[0];\n    normalized = normalized.replace(/:\\d+$/, '');\n    return normalized;\n  }\n\n  function resolvePreferredNlHost(config, currentHostName) {\n    var configuredHost = sanitizeHostName(config && config.preferredNlHost ? config.preferredNlHost : '');\n    if (configuredHost) return configuredHost;\n    var currentHost = sanitizeHostName(currentHostName);\n    if (isNordbeltNlHost(currentHost)) return currentHost;\n    return 'www.nordbelt.nl';\n  }\n\n  function buildHostSwapUrl(targetHost, currentUrl, targetPathname) {\n    if (!targetHost || !currentUrl) return '';\n    var path = String(targetPathname || '/');\n    if (!path || path.charAt(0) !== '/') path = '/' + path;\n    return (\n      'https://' +\n      sanitizeHostName(targetHost) +\n      path +\n      (currentUrl.search || '') +\n      (currentUrl.hash || '')\n    );\n  }\n\n  function resolvePrimaryLocaleOption(selectEl, desiredBaseLocale) {\n    if (!selectEl || !selectEl.options || !desiredBaseLocale) return '';\n    var desiredBase = localeBaseCode(desiredBaseLocale);\n    if (!desiredBase) return '';\n\n    for (var i = 0; i < selectEl.options.length; i += 1) {\n      var exactCode = normalizeLocaleCode(selectEl.options[i].value || '');\n      if (exactCode === desiredBase) return selectEl.options[i].value;\n    }\n\n    for (var j = 0; j < selectEl.options.length; j += 1) {\n      var optionBase = localeBaseCode(selectEl.options[j].value || '');\n      if (optionBase === desiredBase) return selectEl.options[j].value;\n    }\n\n    var FALLBACK_SUPPORTED_BASES = {\n      nl: true,\n      en: true,\n      de: true,\n      fr: true,\n      sv: true,\n      da: true,\n      nb: true,\n      fi: true,\n      es: true,\n      it: true,\n      et: true,\n      pt: true\n    };\n    if (FALLBACK_SUPPORTED_BASES[desiredBase]) return desiredBase;\n    if (selectEl.options.length) return String(selectEl.options[0].value || '');\n    return '';\n  }\n\n  function syncLocalizationLocaleToCountryPrimary(form, changedSelect) {\n    if (!form || !changedSelect) return '';\n    if (String(changedSelect.name || '').trim() !== 'country_code') return '';\n\n    var countryCode = String(changedSelect.value || '').trim().toUpperCase();\n    if (!countryCode) return '';\n\n    var primaryLocaleBase = resolveCountryPrimaryLocale(countryCode);\n    if (!primaryLocaleBase) return '';\n\n    var localeSelect = form.querySelector('select[name=\"locale_code\"], select[name=\"locale_code_ui\"], select[data-nb-original-name=\"locale_code\"]');\n    if (!localeSelect) return '';\n\n    var originalLocaleFieldName = String(\n      localeSelect.getAttribute('data-nb-original-name') || localeSelect.getAttribute('name') || 'locale_code'\n    );\n    if (!localeSelect.getAttribute('data-nb-original-name')) {\n      localeSelect.setAttribute('data-nb-original-name', originalLocaleFieldName);\n    }\n    localeSelect.setAttribute('name', originalLocaleFieldName);\n    var forcedLocaleField = form.querySelector('input[data-nb-forced-locale=\"1\"]');\n    if (forcedLocaleField && forcedLocaleField.parentNode) {\n      forcedLocaleField.parentNode.removeChild(forcedLocaleField);\n    }\n\n    var targetLocaleValue = resolvePrimaryLocaleOption(localeSelect, primaryLocaleBase);\n    if (!targetLocaleValue) return '';\n    localeSelect.value = targetLocaleValue;\n    if (String(localeSelect.value || '') !== String(targetLocaleValue)) {\n      localeSelect.setAttribute('name', originalLocaleFieldName + '_ui');\n      forcedLocaleField = document.createElement('input');\n      forcedLocaleField.type = 'hidden';\n      forcedLocaleField.name = originalLocaleFieldName;\n      forcedLocaleField.value = targetLocaleValue;\n      forcedLocaleField.setAttribute('data-nb-forced-locale', '1');\n      form.appendChild(forcedLocaleField);\n    }\n\n    return targetLocaleValue;\n  }\n\n  function resolveAutoLocaleTarget(config, locales, countryHint) {\n    var countryCode = String(countryHint || config.countryCode || '').trim().toUpperCase();\n    var countryPrimaryLocale = resolveCountryPrimaryLocale(countryCode);\n    var hasDedicatedCountryLocale = !!countryPrimaryLocale && countryPrimaryLocale !== 'en';\n    var hostName = String(window.location && window.location.hostname ? window.location.hostname : '').toLowerCase();\n    var isNlHost = isNordbeltNlHost(hostName);\n    var priority = [];\n    var seen = {};\n    var HARD_NL_COUNTRIES = {\n      NL: true\n    };\n    var FRENCH_DEFAULT_COUNTRIES = {\n      FR: true,\n      MC: true,\n      RE: true,\n      GP: true,\n      MQ: true,\n      GF: true,\n      PF: true,\n      NC: true,\n      BL: true,\n      MF: true,\n      PM: true,\n      WF: true,\n      YT: true\n    };\n    var GERMAN_DEFAULT_COUNTRIES = {\n      DE: true,\n      AT: true,\n      LI: true\n    };\n    var NORDIC_DEFAULT_LOCALES = {\n      SE: 'sv',\n      DK: 'da',\n      NO: 'nb',\n      FI: 'fi'\n    };\n\n    function pushPriority(candidate) {\n      var normalized = normalizeLocaleCode(candidate);\n      if (!normalized || seen[normalized]) return;\n      seen[normalized] = true;\n      priority.push(normalized);\n    }\n\n    // Hard rule: Dutch visitors should land on Dutch by default.\n    if (HARD_NL_COUNTRIES[countryCode]) pushPriority('nl');\n\n    // Countries with their own storefront language should prefer that language\n    // over the browser language when entering from the market root.\n    if (hasDedicatedCountryLocale) {\n      if (countryPrimaryLocale) pushPriority(countryPrimaryLocale);\n      if (NORDIC_DEFAULT_LOCALES[countryCode]) pushPriority(NORDIC_DEFAULT_LOCALES[countryCode]);\n      if (FRENCH_DEFAULT_COUNTRIES[countryCode]) pushPriority('fr');\n      if (GERMAN_DEFAULT_COUNTRIES[countryCode]) pushPriority('de');\n    }\n\n    getBrowserLocaleCandidates().forEach(pushPriority);\n\n    if (!hasDedicatedCountryLocale) {\n      if (countryPrimaryLocale) pushPriority(countryPrimaryLocale);\n      if (NORDIC_DEFAULT_LOCALES[countryCode]) pushPriority(NORDIC_DEFAULT_LOCALES[countryCode]);\n      if (FRENCH_DEFAULT_COUNTRIES[countryCode]) pushPriority('fr');\n      if (GERMAN_DEFAULT_COUNTRIES[countryCode]) pushPriority('de');\n    }\n    if (isNlHost) pushPriority('nl');\n    else pushPriority('en');\n    ['nl', 'en', 'de', 'fr', 'sv', 'da', 'nb', 'fi', 'es', 'it', 'et', 'pt'].forEach(pushPriority);\n\n    for (var i = 0; i < priority.length; i += 1) {\n      var match = findLocaleByCandidate(locales, priority[i]);\n      if (match) return match;\n    }\n\n    return null;\n  }\n\n  function resolvePreferredLocaleBase(countryHint) {\n    var countryCode = String(countryHint || '').trim().toUpperCase();\n    var SUPPORTED_BASES = {\n      nl: true,\n      en: true,\n      de: true,\n      fr: true,\n      sv: true,\n      da: true,\n      nb: true,\n      fi: true,\n      es: true,\n      it: true,\n      et: true,\n      pt: true\n    };\n\n    if (countryCode === 'NL') return 'nl';\n\n    var countryPrimary = resolveCountryPrimaryLocale(countryCode);\n    if (countryPrimary === 'no') countryPrimary = 'nb';\n    if (countryPrimary && countryPrimary !== 'en' && SUPPORTED_BASES[countryPrimary]) {\n      return countryPrimary;\n    }\n\n    var browserCandidates = getBrowserLocaleCandidates();\n    for (var i = 0; i < browserCandidates.length; i += 1) {\n      var browserBase = localeBaseCode(browserCandidates[i]);\n      if (browserBase === 'no') browserBase = 'nb';\n      if (SUPPORTED_BASES[browserBase]) return browserBase;\n    }\n\n    if (SUPPORTED_BASES[countryPrimary]) return countryPrimary;\n\n    if (countryCode === 'SE') return 'sv';\n    if (countryCode === 'DK') return 'da';\n    if (countryCode === 'NO') return 'nb';\n    if (countryCode === 'FI') return 'fi';\n    if (countryCode === 'ES') return 'es';\n    if (countryCode === 'IT') return 'it';\n    if (countryCode === 'EE') return 'et';\n    if (countryCode === 'PT') return 'pt';\n    if (countryCode === 'AT' || countryCode === 'DE' || countryCode === 'LI') return 'de';\n    if (countryCode === 'FR' || countryCode === 'MC') return 'fr';\n\n    return 'en';\n  }\n\n  function resolvePreferredCountryLocaleRoute(countryHint, locales) {\n    var countryCode = normalizeCountryCode(countryHint);\n    if (!countryCode || !document || !document.querySelectorAll) return null;\n\n    var routes = [];\n    var seenBases = {};\n    var links = document.querySelectorAll('link[rel=\"alternate\"][hreflang][href]');\n\n    for (var linkIndex = 0; linkIndex < links.length; linkIndex += 1) {\n      var link = links[linkIndex];\n      var hreflang = normalizeLocaleCode(link.getAttribute('hreflang') || '');\n      if (!hreflang || hreflang === 'x-default') continue;\n\n      var parts = hreflang.split('-');\n      var base = localeBaseCode(hreflang);\n      if (base === 'no') base = 'nb';\n      if (!base || seenBases[base]) continue;\n\n      var href = String(link.getAttribute('href') || '').trim();\n      var url;\n      try {\n        url = new URL(href, window.location.origin);\n      } catch (_errCountryLocaleHref) {\n        continue;\n      }\n\n      var routeCountry = parts.length > 1 ? String(parts[parts.length - 1] || '').toUpperCase() : '';\n      var isNlGenericRoute =\n        countryCode === 'NL' &&\n        (hreflang === 'nl' || hreflang === 'en') &&\n        isNordbeltNlHost(url.hostname || '');\n      if (!isNlGenericRoute && routeCountry !== countryCode) continue;\n\n      var localeMatch = findLocaleByCandidate(locales || [], base);\n      seenBases[base] = true;\n      routes.push({\n        base: base,\n        localeCode: localeMatch && localeMatch.code ? localeMatch.code : base,\n        href: url.toString(),\n        hostName: sanitizeHostName(url.hostname || ''),\n        pathname: url.pathname || '/'\n      });\n    }\n\n    if (!routes.length) return null;\n\n    var priority = [];\n    var seenPriority = {};\n    function pushPriority(value) {\n      var base = localeBaseCode(value);\n      if (base === 'no') base = 'nb';\n      if (!base || seenPriority[base]) return;\n      seenPriority[base] = true;\n      priority.push(base);\n    }\n\n    getBrowserLocaleCandidates().forEach(pushPriority);\n    pushPriority(resolveCountryPrimaryLocale(countryCode));\n    pushPriority('en');\n\n    for (var i = 0; i < priority.length; i += 1) {\n      for (var j = 0; j < routes.length; j += 1) {\n        if (routes[j].base === priority[i]) return routes[j];\n      }\n    }\n\n    return routes[0];\n  }\n\n  function shouldSkipAutoLocale(pathname, searchParams, manualLocaleSet) {\n    if (manualLocaleSet) return true;\n    if (isCheckoutPath(pathname)) return true;\n    if (searchParams && searchParams.has('locale')) return true;\n    if (searchParams && searchParams.has('preview_theme_id')) return true;\n    var path = String(pathname || '').toLowerCase();\n    if (path.indexOf('/account') === 0) return true;\n    if (path.indexOf('/challenge') === 0) return true;\n    if (path.indexOf('/apps') === 0) return true;\n    return false;\n  }\n\n  function findExplicitLocalePathMatch(pathname, locales) {\n    var path = String(pathname || '/');\n    if (!path) path = '/';\n    if (path.charAt(0) !== '/') path = '/' + path;\n\n    var matches = [];\n    for (var i = 0; i < locales.length; i += 1) {\n      var locale = locales[i] || {};\n      var root = normalizeLocaleRootUrl(locale.rootUrl || '/');\n      if (!root || root === '/') continue;\n      if (path === root || path.indexOf(root + '/') === 0) {\n        matches.push({\n          code: normalizeLocaleCode(locale.code || ''),\n          base: localeBaseCode(locale.code || ''),\n          rootUrl: root\n        });\n      }\n    }\n\n    if (!matches.length) return null;\n    matches.sort(function (a, b) { return b.rootUrl.length - a.rootUrl.length; });\n    return matches[0];\n  }\n\n  function isDutchLocalePrefixPath(pathname) {\n    var path = String(pathname || '/');\n    if (!path) path = '/';\n    if (path.charAt(0) !== '/') path = '/' + path;\n    var firstSegment = String(path.split('/')[1] || '').trim().toLowerCase();\n    if (!firstSegment) return false;\n    return firstSegment === 'nl' || firstSegment.indexOf('nl-') === 0;\n  }\n\n  function stripFirstPathSegment(pathname) {\n    var path = String(pathname || '/');\n    if (!path) path = '/';\n    if (path.charAt(0) !== '/') path = '/' + path;\n    var segments = path.split('/');\n    if (segments.length <= 2) return '/';\n    var remainder = '/' + segments.slice(2).join('/');\n    return remainder === '//' ? '/' : remainder.replace(/\\/{2,}/g, '/');\n  }\n\n  function hasExplicitLocalePath(pathname, locales) {\n    return !!findExplicitLocalePathMatch(pathname, locales);\n  }\n\n  var GEO_COUNTRY_HINT_STORAGE_KEY = 'nb_geo_country_hint_v1';\n  var GEO_COUNTRY_HINT_TTL_MS = 24 * 60 * 60 * 1000;\n\n  function normalizeCountryCode(value) {\n    var code = String(value || '').trim().toUpperCase();\n    return /^[A-Z]{2}$/.test(code) ? code : '';\n  }\n\n  function readGeoCountryHint() {\n    var raw =\n      readStorageItem(window.sessionStorage, GEO_COUNTRY_HINT_STORAGE_KEY) ||\n      readStorageItem(window.localStorage, GEO_COUNTRY_HINT_STORAGE_KEY);\n    if (!raw) return '';\n    var parsed = safeParseJson(raw, null);\n    if (!parsed || typeof parsed !== 'object') return '';\n    var code = normalizeCountryCode(parsed.code);\n    var ts = Number(parsed.ts || 0);\n    if (!code || !ts) return '';\n    if (Date.now() - ts > GEO_COUNTRY_HINT_TTL_MS) return '';\n    return code;\n  }\n\n  function writeGeoCountryHint(code) {\n    var normalized = normalizeCountryCode(code);\n    if (!normalized) return;\n    var payload = JSON.stringify({ code: normalized, ts: Date.now() });\n    writeStorageItem(window.sessionStorage, GEO_COUNTRY_HINT_STORAGE_KEY, payload);\n    writeStorageItem(window.localStorage, GEO_COUNTRY_HINT_STORAGE_KEY, payload);\n  }\n\n  function extractGeoCountryFromSuggestions(payload) {\n    if (!payload || typeof payload !== 'object') return '';\n    var detected = payload.detected_values;\n    if (!detected || typeof detected !== 'object') return '';\n    var countryObj = detected.country;\n    var handle = '';\n    if (countryObj && typeof countryObj === 'object') {\n      handle = countryObj.handle || countryObj.code || countryObj.iso_code || '';\n    } else if (typeof countryObj === 'string') {\n      handle = countryObj;\n    }\n    return normalizeCountryCode(handle);\n  }\n\n  function requestGeoCountryHint() {\n    if (typeof Promise === 'undefined') return null;\n    if (!window.fetch) return Promise.resolve('');\n\n    var controller = typeof AbortController !== 'undefined' ? new AbortController() : null;\n    var timeoutId = 0;\n    if (controller && window.setTimeout) {\n      timeoutId = window.setTimeout(function () {\n        try {\n          controller.abort();\n        } catch (_errAbortGeoCountryHint) {\n          // noop\n        }\n      }, 900);\n    }\n\n    var geoFetch = fetch('/browsing_context_suggestions.json', {\n      credentials: 'same-origin',\n      cache: 'no-store',\n      headers: { Accept: 'application/json' },\n      signal: controller ? controller.signal : undefined\n    })\n      .then(function (response) {\n        if (!response || !response.ok) return null;\n        return response.json().catch(function () {\n          return null;\n        });\n      })\n      .then(function (payload) {\n        if (timeoutId && window.clearTimeout) window.clearTimeout(timeoutId);\n        var country = extractGeoCountryFromSuggestions(payload);\n        if (country) writeGeoCountryHint(country);\n        return country || '';\n      })\n      .catch(function () {\n        if (timeoutId && window.clearTimeout) window.clearTimeout(timeoutId);\n        return '';\n      });\n\n    if (!controller && window.setTimeout) {\n      return Promise.race([\n        geoFetch,\n        new Promise(function (resolve) {\n          window.setTimeout(function () {\n            resolve('');\n          }, 900);\n        })\n      ]);\n    }\n\n    return geoFetch;\n  }\n\n  function readManualLocalePreference(manualLocaleStorageKey) {\n    var manualLocale = normalizeLocaleCode(\n      readStorageItem(window.localStorage, manualLocaleStorageKey) ||\n      readStorageItem(window.sessionStorage, manualLocaleStorageKey)\n    );\n    if (!manualLocale) return '';\n    var manualBase = localeBaseCode(manualLocale);\n    var SUPPORTED_MANUAL_BASES = {\n      nl: true,\n      en: true,\n      de: true,\n      fr: true,\n      sv: true,\n      da: true,\n      nb: true,\n      fi: true,\n      es: true,\n      it: true,\n      et: true,\n      pt: true\n    };\n    if (SUPPORTED_MANUAL_BASES[manualBase]) return manualLocale;\n    try {\n      window.localStorage.removeItem(manualLocaleStorageKey);\n      window.sessionStorage.removeItem(manualLocaleStorageKey);\n    } catch (_errClearInvalidManualLocale) {\n      // noop\n    }\n    return '';\n  }\n\n  function resolveUserCountryHint(config) {\n    var explicitCountryFromQuery = '';\n    try {\n      var params = new URLSearchParams(window.location.search || '');\n      explicitCountryFromQuery = String(params.get('country') || '').trim().toUpperCase();\n    } catch (_errCountryQuery) {\n      explicitCountryFromQuery = '';\n    }\n    if (/^[A-Z]{2}$/.test(explicitCountryFromQuery)) return explicitCountryFromQuery;\n\n    var explicitFromPath = parseMarketLocaleFromPath(window.location.pathname || '/');\n    if (explicitFromPath && /^[A-Z]{2}$/.test(explicitFromPath.country || '')) {\n      return String(explicitFromPath.country || '').toUpperCase();\n    }\n\n    var cachedGeoCountry = readGeoCountryHint();\n    if (cachedGeoCountry) return cachedGeoCountry;\n\n    var TZ_COUNTRY_MAP = {\n      'Europe/Andorra': 'AD',\n      'Europe/Amsterdam': 'NL',\n      'Europe/Brussels': 'BE',\n      'Europe/Sofia': 'BG',\n      'Europe/Nicosia': 'CY',\n      'Europe/Luxembourg': 'LU',\n      'Europe/Dublin': 'IE',\n      'Europe/Paris': 'FR',\n      'Europe/Vienna': 'AT',\n      'Europe/Berlin': 'DE',\n      'Europe/Zurich': 'CH',\n      'Europe/Copenhagen': 'DK',\n      'Europe/Stockholm': 'SE',\n      'Europe/Oslo': 'NO',\n      'Europe/Helsinki': 'FI',\n      'Europe/Tallinn': 'EE',\n      'Europe/Athens': 'GR',\n      'Europe/Budapest': 'HU',\n      'Europe/Rome': 'IT',\n      'Europe/Zagreb': 'HR',\n      'Europe/Riga': 'LV',\n      'Europe/Vilnius': 'LT',\n      'Europe/Malta': 'MT',\n      'Europe/Monaco': 'MC',\n      'Europe/Vaduz': 'LI',\n      'Europe/Warsaw': 'PL',\n      'Europe/Lisbon': 'PT',\n      'Europe/Bucharest': 'RO',\n      'Europe/Ljubljana': 'SI',\n      'Europe/Bratislava': 'SK',\n      'Europe/Madrid': 'ES',\n      'Europe/Prague': 'CZ',\n      'Europe/London': 'GB'\n    };\n    var tz = '';\n    try {\n      tz = String(Intl.DateTimeFormat().resolvedOptions().timeZone || '');\n    } catch (_errTz) {\n      tz = '';\n    }\n    if (TZ_COUNTRY_MAP[tz]) return TZ_COUNTRY_MAP[tz];\n\n    var locales = [];\n    if (Array.isArray(navigator.languages) && navigator.languages.length) {\n      locales = locales.concat(navigator.languages);\n    }\n    if (navigator.language) locales.push(navigator.language);\n\n    for (var i = 0; i < locales.length; i += 1) {\n      var normalized = normalizeLocaleCode(locales[i]);\n      if (!normalized) continue;\n      var parts = normalized.split('-');\n      if (parts.length > 1 && parts[1] && parts[1].length === 2) {\n        return parts[1].toUpperCase();\n      }\n    }\n\n    // Shopify can expose the storefront's current/default market here instead of\n    // the visitor's actual country. Use it only after browser-owned signals.\n    var shopifyCountry = '';\n    try {\n      shopifyCountry = String((window.Shopify && window.Shopify.country) || '').trim().toUpperCase();\n    } catch (_errShopifyCountry) {\n      shopifyCountry = '';\n    }\n    if (/^[A-Z]{2}$/.test(shopifyCountry)) return shopifyCountry;\n\n    var configCountry = String((config && config.countryCode) || '').trim().toUpperCase();\n    if (/^[A-Z]{2}$/.test(configCountry)) return configCountry;\n\n    return '';\n  }\n\n  function isAutoLocaleEntryPath(pathname, locales) {\n    var path = String(pathname || '/');\n    if (!path) path = '/';\n    if (path.charAt(0) !== '/') path = '/' + path;\n    if (path.length > 1 && path.charAt(path.length - 1) === '/') path = path.slice(0, -1);\n    if (path === '/') return true;\n\n    var explicit = findExplicitLocalePathMatch(path, locales);\n    if (!explicit) return false;\n    return path === explicit.rootUrl;\n  }\n\n  function parseMarketLocaleFromPath(pathname) {\n    var path = String(pathname || '/');\n    if (!path) path = '/';\n    if (path.charAt(0) !== '/') path = '/' + path;\n    var segment = String(path.split('/')[1] || '').trim().toLowerCase();\n    if (!segment) return null;\n    var match = segment.match(/^([a-z]{2})-([a-z]{2,3})$/i);\n    if (!match) return null;\n    var suffix = String(match[2] || '').toLowerCase();\n    var countryCode = '';\n    if (suffix.length === 2) countryCode = suffix.toUpperCase();\n    if (suffix === 'est') countryCode = 'EE';\n    if (!countryCode) return null;\n    return {\n      language: String(match[1] || '').toLowerCase(),\n      country: countryCode,\n      rootUrl: '/' + segment\n    };\n  }\n\n  function countryCodeForLocaleBase(baseLocale) {\n    var base = localeBaseCode(baseLocale);\n    var map = {\n      nl: 'NL',\n      en: 'US',\n      de: 'DE',\n      fr: 'FR',\n      sv: 'SE',\n      da: 'DK',\n      nb: 'NO',\n      fi: 'FI',\n      es: 'ES',\n      it: 'IT',\n      et: 'EE',\n      pt: 'PT'\n    };\n    return map[base] || '';\n  }\n\n  function preferredMarketRootForLocaleBase(baseLocale) {\n    var base = localeBaseCode(baseLocale);\n    var map = {\n      fr: '/fr-fr',\n      de: '/de-de',\n      sv: '/sv-se',\n      da: '/da-dk',\n      nb: '/nb-no',\n      fi: '/fi-fi',\n      pt: '/pt-pt',\n      it: '/it-it',\n      es: '/es-es',\n      et: '/et-est'\n    };\n    return map[base] || '';\n  }\n\n  function localeTagFromBaseAndCountry(baseLocale, countryCode, separator) {\n    var base = localeBaseCode(baseLocale) || 'en';\n    var country = String(countryCode || '').trim().toUpperCase() || countryCodeForLocaleBase(base) || 'US';\n    return base + String(separator || '-') + country;\n  }\n\n  function detectDutchContentFromDocument(pageType) {\n    var type = String(pageType || '').toLowerCase();\n    if (type !== 'article' && type !== 'blog') return false;\n\n    var samples = [];\n    var titleNode = document.querySelector('h1');\n    if (titleNode && titleNode.textContent) samples.push(titleNode.textContent);\n    if (document.title) samples.push(document.title);\n    var leadNode = document.querySelector('.nb-article-hero__summary-copy, .nb-article__deck, .nb-article__rte p');\n    if (leadNode && leadNode.textContent) samples.push(leadNode.textContent);\n\n    var sample = samples.join(' ').toLowerCase().replace(/\\s+/g, ' ').trim();\n    if (!sample) return false;\n\n    var signals = [\n      /\\bblessure\\b/,\n      /\\bpijn\\b/,\n      /\\boefeningen\\b/,\n      /\\boorzaken\\b/,\n      /\\bherstel\\b/,\n      /\\bwanneer\\b/,\n      /\\bbovenbeen\\b/,\n      /\\bachterkant\\b/,\n      /\\bzonder\\b/,\n      /\\bthuis\\b/\n    ];\n\n    var score = 0;\n    signals.forEach(function (pattern) {\n      if (pattern.test(sample)) score += 1;\n    });\n\n    return score >= 2;\n  }\n\n  function resolveEffectiveLocaleInfo(currentUrl, hostName, pageType, firstSegment, marketPath) {\n    if (isNordbeltNlHost(hostName)) {\n      return {\n        base: firstSegment === 'en' ? 'en' : 'nl',\n        country: 'NL'\n      };\n    }\n\n    if (marketPath) {\n      return {\n        base: marketPath.language || 'en',\n        country: marketPath.country || countryCodeForLocaleBase(marketPath.language || 'en') || 'US'\n      };\n    }\n\n    var preferredCountry = countryCodeForLocaleBase(firstSegment);\n    if (preferredCountry && firstSegment !== 'en') {\n      return {\n        base: firstSegment,\n        country: preferredCountry\n      };\n    }\n\n    if (detectDutchContentFromDocument(pageType)) {\n      return {\n        base: 'nl',\n        country: 'NL'\n      };\n    }\n\n    var currentLocale = normalizeLocaleCode(\n      (window.NordbeltLocaleConfig && window.NordbeltLocaleConfig.currentLocale)\n      || document.documentElement.getAttribute('lang')\n      || 'en'\n    );\n    var fallbackBase = localeBaseCode(currentLocale) || 'en';\n    return {\n      base: fallbackBase,\n      country: countryCodeForLocaleBase(fallbackBase) || 'US'\n    };\n  }\n\n  function extractLocaleIntentFromReferrer(locales) {\n    var referrer = String(document.referrer || '').trim();\n    if (!referrer) return null;\n\n    var refUrl;\n    try {\n      refUrl = new URL(referrer);\n    } catch (_errRefUrl) {\n      return null;\n    }\n\n    var refHost = sanitizeHostName(refUrl.hostname || '');\n    if (!refHost || (refHost.indexOf('nordbelt.com') === -1 && refHost.indexOf('nordbelt.nl') === -1)) return null;\n\n    var refPath = String(refUrl.pathname || '/');\n    if (!refPath) refPath = '/';\n    if (refPath.charAt(0) !== '/') refPath = '/' + refPath;\n\n    var market = parseMarketLocaleFromPath(refPath);\n    if (market) {\n      return {\n        base: market.language,\n        rootUrl: market.rootUrl,\n        pathWithoutPrefix: stripFirstPathSegment(refPath) || '/',\n        country: market.country\n      };\n    }\n\n    var explicit = findExplicitLocalePathMatch(refPath, locales || []);\n    if (!explicit || !explicit.rootUrl || explicit.rootUrl === '/') return null;\n\n    var pathWithoutPrefix = '/';\n    if (refPath !== explicit.rootUrl) {\n      pathWithoutPrefix = refPath.slice(explicit.rootUrl.length);\n      if (!pathWithoutPrefix) pathWithoutPrefix = '/';\n      if (pathWithoutPrefix.charAt(0) !== '/') pathWithoutPrefix = '/' + pathWithoutPrefix;\n    }\n\n    var countryParam = String(refUrl.searchParams.get('country') || '').trim().toUpperCase();\n    var countryCode = /^[A-Z]{2}$/.test(countryParam) ? countryParam : countryCodeForLocaleBase(explicit.base);\n\n    return {\n      base: explicit.base,\n      rootUrl: explicit.rootUrl,\n      pathWithoutPrefix: pathWithoutPrefix,\n      country: countryCode\n    };\n  }\n\n  function ensureMetaTag(selector, attributes) {\n    if (!document || !document.head) return null;\n    var node = document.head.querySelector(selector);\n    if (!node) {\n      node = document.createElement('meta');\n      document.head.appendChild(node);\n    }\n    Object.keys(attributes || {}).forEach(function (key) {\n      var value = attributes[key];\n      if (value == null) return;\n      node.setAttribute(key, String(value));\n    });\n    return node;\n  }\n\n  function ensureCanonicalTag(href) {\n    if (!document || !document.head || !href) return null;\n    var node = document.head.querySelector('link[rel=\\\"canonical\\\"]');\n    if (!node) {\n      node = document.createElement('link');\n      node.setAttribute('rel', 'canonical');\n      document.head.appendChild(node);\n    }\n    node.setAttribute('href', String(href));\n    return node;\n  }\n\n  function ensureDescriptionTags(content) {\n    var value = String(content || '').trim();\n    if (!value) return;\n    ensureMetaTag('meta[name=\\\"description\\\"]', { name: 'description', content: value });\n    ensureMetaTag('meta[property=\\\"og:description\\\"]', { property: 'og:description', content: value });\n    ensureMetaTag('meta[name=\\\"twitter:description\\\"]', { name: 'twitter:description', content: value });\n  }\n\n  function resolveRuntimeBlogDescription(pathname) {\n    var path = String(pathname || '/');\n    if (!path) path = '/';\n    if (path.charAt(0) !== '/') path = '/' + path;\n    var match = path.match(/^\\/(?:[a-z]{2}(?:-[a-z]{2})?\\/)?blogs\\/([^\\/?#]+)/i);\n    if (!match || !match[1]) return '';\n\n    var handle = String(match[1] || '').trim().toLowerCase();\n    var key = 'seo.blog.description';\n    if (handle === 'nieuws') key = 'seo.blog.description_nieuws';\n    else if (handle === 'hamstring') key = 'seo.blog.description_hamstring';\n    else if (handle === 'blog-posts') key = 'seo.blog.description_blog_posts';\n\n    return i18n(key, '');\n  }\n\n  function buildCanonicalPathFromMarketVariant(pathname) {\n    var parsed = parseMarketLocaleFromPath(pathname);\n    if (!parsed) return String(pathname || '/');\n    var remainder = stripFirstPathSegment(pathname) || '/';\n    if (parsed.language === 'en') return remainder;\n    if (remainder === '/') return '/' + parsed.language;\n    return '/' + parsed.language + remainder;\n  }\n\n  function hasNoindexQuerySignals(queryString) {\n    var query = String(queryString || '').toLowerCase();\n    if (!query) return false;\n\n    var needles = [\n      'sort_by=',\n      'filter.',\n      'preview_theme_id=',\n      'utm_',\n      'gclid=',\n      'fbclid=',\n      'msclkid=',\n      'twclid=',\n      'ttclid=',\n      'wbraid=',\n      'gbraid=',\n      'yclid=',\n      'epik=',\n      '_kx=',\n      'mkt_tok=',\n      'rb_clickid=',\n      'section_id=',\n      'view=',\n      'constraint=',\n      'page=',\n      'srsltid=',\n      '_pos=',\n      '_psq=',\n      '_ss=',\n      '_v=',\n      'pr_prod_strat=',\n      'pr_rec_id=',\n      'pr_rec_pid=',\n      'pr_ref_pid=',\n      'pr_seq=',\n      'okereviewspagenum=',\n      'currency=',\n      'country=',\n      'locale=',\n      'market='\n    ];\n\n    for (var i = 0; i < needles.length; i += 1) {\n      if (query.indexOf(needles[i]) !== -1) return true;\n    }\n    return false;\n  }\n\n  function initRuntimeSeoGuards() {\n    var currentUrl;\n    try {\n      currentUrl = new URL(window.location.href);\n    } catch (_errUrl) {\n      return;\n    }\n\n    var hostName = sanitizeHostName(currentUrl.hostname || '');\n    var isNlHost = isNordbeltNlHost(hostName);\n    var path = String(currentUrl.pathname || '/');\n    if (!path) path = '/';\n    if (path.charAt(0) !== '/') path = '/' + path;\n    var pathLower = path.toLowerCase();\n    var firstSegment = String(path.split('/')[1] || '').trim().toLowerCase();\n    var isDutchPrefixPath = firstSegment === 'nl';\n    var marketPath = parseMarketLocaleFromPath(path);\n    var NON_NL_COM_PREFIXES = {\n      en: true,\n      fr: true,\n      de: true,\n      sv: true,\n      nb: true,\n      da: true,\n      fi: true,\n      es: true,\n      it: true,\n      et: true,\n      pt: true\n    };\n\n    var canonicalHost = isNlHost ? 'www.nordbelt.nl' : 'www.nordbelt.com';\n    var canonicalPath = path;\n    var preferredLanguageOnlyRoot = preferredMarketRootForLocaleBase(firstSegment);\n\n    if (marketPath) {\n      canonicalHost = marketPath.language === 'nl' && marketPath.country === 'NL' ? 'www.nordbelt.nl' : 'www.nordbelt.com';\n      canonicalPath = path;\n    } else if (isDutchPrefixPath) {\n      canonicalHost = 'www.nordbelt.nl';\n      canonicalPath = stripFirstPathSegment(path) || '/';\n    } else if (!isNlHost && preferredLanguageOnlyRoot) {\n      var strippedLanguagePath = stripFirstPathSegment(path) || '/';\n      canonicalHost = 'www.nordbelt.com';\n      canonicalPath = strippedLanguagePath === '/' ? preferredLanguageOnlyRoot : preferredLanguageOnlyRoot + strippedLanguagePath;\n    } else if (isNlHost && NON_NL_COM_PREFIXES[firstSegment]) {\n      canonicalHost = 'www.nordbelt.com';\n      canonicalPath = firstSegment === 'en' ? (stripFirstPathSegment(path) || '/') : path;\n    }\n\n    if (!canonicalPath) canonicalPath = '/';\n    if (canonicalPath.charAt(0) !== '/') canonicalPath = '/' + canonicalPath;\n    canonicalPath = canonicalPath.replace(/\\/{2,}/g, '/');\n    var canonicalUrl = 'https://' + canonicalHost + canonicalPath;\n\n    var pageType = String((document.body && document.body.getAttribute('data-page-type')) || '').toLowerCase();\n    var noindex = false;\n\n    if (pageType === 'search' || pageType === 'cart' || pageType === '404') noindex = true;\n    if (pathLower.indexOf('/account') === 0 || pathLower.indexOf('/policies/') !== -1) noindex = true;\n    if (pathLower.indexOf('/tagged/') !== -1) noindex = true;\n    if (pathLower.indexOf('/collections/vendors') !== -1 || pathLower.indexOf('/collections/types') !== -1) noindex = true;\n    if (isDutchPrefixPath) noindex = true;\n    if (hostName && canonicalHost && hostName !== canonicalHost) noindex = true;\n    if (hasNoindexQuerySignals(currentUrl.search || '')) noindex = true;\n\n    var robotsValue = noindex\n      ? 'noindex,follow'\n      : 'index,follow,max-image-preview:large,max-snippet:-1,max-video-preview:-1';\n\n    if (pageType === 'blog') {\n      ensureDescriptionTags(resolveRuntimeBlogDescription(path));\n    }\n\n    var effectiveLocale = resolveEffectiveLocaleInfo(currentUrl, hostName, pageType, firstSegment, marketPath);\n    if (document.documentElement && effectiveLocale) {\n      document.documentElement.setAttribute('lang', localeTagFromBaseAndCountry(effectiveLocale.base, effectiveLocale.country, '-'));\n    }\n\n    ensureCanonicalTag(canonicalUrl);\n    ensureMetaTag('meta[name=\\\"robots\\\"]', { name: 'robots', content: robotsValue });\n    ensureMetaTag('meta[name=\\\"googlebot\\\"]', { name: 'googlebot', content: robotsValue });\n    ensureMetaTag('meta[name=\\\"bingbot\\\"]', { name: 'bingbot', content: robotsValue });\n    ensureMetaTag('meta[property=\\\"og:url\\\"]', { property: 'og:url', content: canonicalUrl });\n    ensureMetaTag('meta[property=\\\"og:locale\\\"]', { property: 'og:locale', content: localeTagFromBaseAndCountry(effectiveLocale.base, effectiveLocale.country, '_') });\n    ensureMetaTag('meta[name=\\\"nb-runtime-seo-build\\\"]', { name: 'nb-runtime-seo-build', content: '2026-03-18-r51' });\n  }\n\n  var CAMPAIGN_MARKET_LOCK_STORAGE_KEY = 'nb_campaign_market_lock_v2';\n\n  function clearCampaignMarketLock() {\n    if (!window.sessionStorage) return;\n    try {\n      window.sessionStorage.removeItem(CAMPAIGN_MARKET_LOCK_STORAGE_KEY);\n    } catch (_err) {\n      // noop\n    }\n  }\n\n  function readCampaignMarketLock() {\n    var raw = readStorageItem(window.sessionStorage, CAMPAIGN_MARKET_LOCK_STORAGE_KEY);\n    if (!raw) return null;\n    var parsed = safeParseJson(raw, null);\n    if (!parsed || typeof parsed !== 'object') return null;\n    var rootUrl = normalizeLocaleRootUrl(parsed.rootUrl || '');\n    var country = String(parsed.country || '').trim().toUpperCase();\n    if (!rootUrl || rootUrl === '/' || !/^[A-Z]{2}$/.test(country)) return null;\n    return {\n      rootUrl: rootUrl,\n      country: country\n    };\n  }\n\n  function persistCampaignMarketLock(lockContext) {\n    if (!lockContext || typeof lockContext !== 'object') return;\n    var rootUrl = normalizeLocaleRootUrl(lockContext.rootUrl || '');\n    var country = String(lockContext.country || '').trim().toUpperCase();\n    if (!rootUrl || rootUrl === '/' || !/^[A-Z]{2}$/.test(country)) return;\n    writeStorageItem(\n      window.sessionStorage,\n      CAMPAIGN_MARKET_LOCK_STORAGE_KEY,\n      JSON.stringify({ rootUrl: rootUrl, country: country, ts: Date.now() })\n    );\n  }\n\n  function shouldSkipCampaignLockEnforcement(pathname, searchParams) {\n    if (isCheckoutPath(pathname)) return true;\n    if (searchParams && searchParams.has('preview_theme_id')) return true;\n    var path = String(pathname || '').toLowerCase();\n    if (path.indexOf('/account') === 0) return true;\n    if (path.indexOf('/challenge') === 0) return true;\n    if (path.indexOf('/apps') === 0) return true;\n    return false;\n  }\n\n  function enforcePersistedCampaignLock(persistedLock, currentUrl, config, locales) {\n    if (!persistedLock || !persistedLock.rootUrl || !currentUrl || !config) return false;\n    if (shouldSkipCampaignLockEnforcement(currentUrl.pathname, currentUrl.searchParams)) return false;\n\n    var preferredComHost = sanitizeHostName(config.preferredComHost || 'www.nordbelt.com');\n    if (!preferredComHost) return false;\n\n    var canonicalPath = stripLocalePrefixFromPath(currentUrl.pathname, locales || []);\n    var targetPath = buildLocalizedPath(canonicalPath || '/', persistedLock.rootUrl);\n    var targetUrlValue = buildHostSwapUrl(preferredComHost, currentUrl, targetPath || persistedLock.rootUrl);\n    if (!targetUrlValue) return false;\n\n    try {\n      var targetUrl = new URL(targetUrlValue);\n      targetUrl.searchParams.delete('shpxid');\n      if (!targetUrl.searchParams.has('country') && /^[A-Z]{2}$/.test(persistedLock.country || '')) {\n        targetUrl.searchParams.set('country', persistedLock.country);\n      }\n      if (targetUrl.toString() === currentUrl.toString()) return false;\n      window.location.replace(targetUrl.toString());\n      return true;\n    } catch (_errTargetCampaignLock) {\n      return false;\n    }\n  }\n\n  function extractCampaignMarketContext(pathname, searchParams, locales) {\n    if (!searchParams || typeof searchParams.get !== 'function') return null;\n\n    var countryParam = String(searchParams.get('country') || '').trim().toUpperCase();\n    if (!/^[A-Z]{2}$/.test(countryParam)) return null;\n\n    var explicit = findExplicitLocalePathMatch(pathname, locales || []);\n    var marketPath = parseMarketLocaleFromPath(pathname);\n    if (!marketPath && explicit && explicit.rootUrl && explicit.rootUrl !== '/') {\n      marketPath = parseMarketLocaleFromPath(explicit.rootUrl);\n    }\n    if (marketPath && marketPath.country === countryParam) {\n      return { rootUrl: marketPath.rootUrl, country: countryParam };\n    }\n\n    // Fallback lock for explicit locale roots after server normalization (e.g. /de-at -> /de).\n    if (explicit && explicit.rootUrl && explicit.rootUrl !== '/') {\n      var expectedCountry = countryCodeForLocaleBase(explicit.base);\n      if (expectedCountry && expectedCountry === countryParam) {\n        return { rootUrl: explicit.rootUrl, country: countryParam };\n      }\n      if (hasCampaignAttributionSignals(searchParams)) {\n        return { rootUrl: explicit.rootUrl, country: countryParam };\n      }\n    }\n\n    return null;\n  }\n\n  function hasCampaignAttributionSignals(searchParams) {\n    if (!searchParams || typeof searchParams.has !== 'function') return false;\n    var KNOWN_KEYS = [\n      'gclid',\n      'fbclid',\n      'msclkid',\n      'twclid',\n      'ttclid',\n      'wbraid',\n      'gbraid',\n      'yclid',\n      'epik',\n      'mkt_tok',\n      'rb_clickid'\n    ];\n    for (var i = 0; i < KNOWN_KEYS.length; i += 1) {\n      if (searchParams.has(KNOWN_KEYS[i])) return true;\n    }\n    if (typeof searchParams.forEach === 'function') {\n      var hasUtm = false;\n      searchParams.forEach(function (_value, key) {\n        if (hasUtm) return;\n        if (String(key || '').toLowerCase().indexOf('utm_') === 0) hasUtm = true;\n      });\n      if (hasUtm) return true;\n    }\n    return false;\n  }\n\n  function isCampaignMarketLocked(pathname, searchParams, locales) {\n    return !!extractCampaignMarketContext(pathname, searchParams, locales);\n  }\n\n  function shouldStripLooseCountryQuery(pathname, searchParams, locales) {\n    if (!searchParams || typeof searchParams.has !== 'function') return false;\n    if (!searchParams.has('country')) return false;\n    if (shouldSkipCampaignLockEnforcement(pathname, searchParams)) return false;\n\n    var countryCode = String(searchParams.get('country') || '').trim().toUpperCase();\n    if (!/^[A-Z]{2}$/.test(countryCode)) return true;\n\n    if (parseMarketLocaleFromPath(pathname)) return false;\n\n    var explicit = findExplicitLocalePathMatch(pathname, locales || []);\n    if (explicit && explicit.rootUrl && explicit.rootUrl !== '/') return false;\n\n    return true;\n  }\n\n  function enforceManualLocalePreference(manualLocale, currentUrl, config, locales, isNlHost) {\n    if (!manualLocale || !currentUrl || !config) return false;\n    if (shouldSkipCampaignLockEnforcement(currentUrl.pathname, currentUrl.searchParams)) return false;\n    if (!isAutoLocaleEntryPath(currentUrl.pathname, locales || [])) return false;\n    if (currentUrl.searchParams && currentUrl.searchParams.has('country')) return false;\n\n    var targetLocale = findLocaleByCandidate(locales || [], manualLocale);\n    if (!targetLocale) return false;\n\n    var targetBase = localeBaseCode(targetLocale.code || targetLocale.base || '');\n    if (!targetBase) return false;\n\n    var canonicalPath = stripLocalePrefixFromPath(currentUrl.pathname, locales || []) || '/';\n    var targetRootUrl = normalizeLocaleRootUrl(targetLocale.rootUrl || '/');\n    if (isNlHost && targetBase === 'nl') targetRootUrl = '/';\n    var targetPath = buildLocalizedPath(canonicalPath, targetRootUrl);\n    if (!targetPath) return false;\n\n    if (targetBase === 'nl' && !isNlHost) {\n      var preferredNlHost = resolvePreferredNlHost(config, currentUrl.hostname || '');\n      var nlUrl = buildHostSwapUrl(preferredNlHost, currentUrl, canonicalPath || '/');\n      if (nlUrl && nlUrl !== currentUrl.toString()) {\n        window.location.replace(nlUrl);\n        return true;\n      }\n      return false;\n    }\n\n    if (targetPath !== currentUrl.pathname) {\n      currentUrl.pathname = targetPath;\n      currentUrl.searchParams.delete('locale');\n      window.location.replace(currentUrl.toString());\n      return true;\n    }\n\n    return false;\n  }\n\n  function applyAutoLocaleSelection(targetLocaleCode, countryCode, currentUrl) {\n    if (!targetLocaleCode || !document || !document.body) return false;\n    var form = document.createElement('form');\n    form.method = 'post';\n    form.action = '/localization';\n    form.style.display = 'none';\n    form.setAttribute('accept-charset', 'UTF-8');\n    form.enctype = 'multipart/form-data';\n\n    function appendField(name, value) {\n      var input = document.createElement('input');\n      input.type = 'hidden';\n      input.name = name;\n      input.value = value;\n      form.appendChild(input);\n    }\n\n    appendField('form_type', 'localization');\n    appendField('utf8', '\u2713');\n    appendField('_method', 'put');\n    appendField('locale_code', targetLocaleCode);\n    if (countryCode) appendField('country_code', String(countryCode).trim().toUpperCase());\n    appendField(\n      'return_to',\n      (currentUrl.pathname || '/') + (currentUrl.search || '') + (currentUrl.hash || '')\n    );\n\n    document.body.appendChild(form);\n    form.submit();\n    return true;\n  }\n\n  function initAutoLocaleRouting() {\n    var AUTO_LOCALE_SESSION_KEY = 'nb_locale_auto_checked_v12';\n    var MANUAL_LOCALE_STORAGE_KEY = 'nb_locale_manual_v3';\n    var REFERRER_LOCALE_RECOVERY_KEY = 'nb_locale_referrer_recovery_v1';\n    var config = window.NordbeltLocaleConfig;\n    if (!config || typeof config !== 'object') return;\n\n    var currentUrl;\n    try {\n      currentUrl = new URL(window.location.href);\n    } catch (_err) {\n      writeStorageItem(window.sessionStorage, AUTO_LOCALE_SESSION_KEY, '1');\n      return;\n    }\n\n    var hostName = sanitizeHostName(currentUrl.hostname || config.hostName || window.location.hostname || '');\n    var isNlHost = isNordbeltNlHost(hostName);\n    var locales = sanitizeAvailableLocales(config.availableLocales || []);\n    if (!locales.length) {\n      writeStorageItem(window.sessionStorage, AUTO_LOCALE_SESSION_KEY, '1');\n      return;\n    }\n    if (isCampaignMarketLocked(currentUrl.pathname, currentUrl.searchParams, locales)) {\n      // Campaign lock is page-scoped (ads landing). Do not freeze auto-locale for the rest of the session.\n      try {\n        window.sessionStorage.removeItem(AUTO_LOCALE_SESSION_KEY);\n      } catch (_errAutoLocaleKey) {\n        // noop\n      }\n      return;\n    }\n\n    var hasDutchPrefixPath = isDutchLocalePrefixPath(currentUrl.pathname);\n    if (isNlHost && hasDutchPrefixPath) {\n      var nlCleanPath = stripFirstPathSegment(currentUrl.pathname) || '/';\n      var nlCleanUrl = buildHostSwapUrl(resolvePreferredNlHost(config, hostName), currentUrl, nlCleanPath);\n      if (nlCleanUrl && nlCleanUrl !== currentUrl.toString()) {\n        writeStorageItem(window.sessionStorage, AUTO_LOCALE_SESSION_KEY, '1');\n        window.location.replace(nlCleanUrl);\n        return;\n      }\n    }\n    if (!isNlHost && hasDutchPrefixPath) {\n      var nlHost = resolvePreferredNlHost(config, hostName);\n      var nlHostPath = stripFirstPathSegment(currentUrl.pathname) || '/';\n      var nlHostUrl = buildHostSwapUrl(nlHost, currentUrl, nlHostPath);\n      if (nlHostUrl && nlHostUrl !== currentUrl.toString()) {\n        writeStorageItem(window.sessionStorage, AUTO_LOCALE_SESSION_KEY, '1');\n        window.location.replace(nlHostUrl);\n        return;\n      }\n    }\n\n    // Recovery for unexpected server redirects from explicit .com locale paths to .nl.\n    if (isNlHost && currentUrl.searchParams.has('shpxid') && !isLikelyCrawlerUserAgent()) {\n      var localeRecoveryState = readStorageItem(window.sessionStorage, REFERRER_LOCALE_RECOVERY_KEY);\n      if (localeRecoveryState !== '1') {\n        var referrerIntent = extractLocaleIntentFromReferrer(locales);\n        if (referrerIntent && referrerIntent.base && referrerIntent.base !== 'nl') {\n          var recoveryComHost = sanitizeHostName(config.preferredComHost || 'www.nordbelt.com');\n          var recoveryRoot = normalizeLocaleRootUrl(referrerIntent.rootUrl || ('/' + referrerIntent.base));\n          var recoveryPath = buildLocalizedPath(referrerIntent.pathWithoutPrefix || '/', recoveryRoot);\n          var recoveryTarget = buildHostSwapUrl(recoveryComHost, currentUrl, recoveryPath || '/');\n          if (recoveryTarget) {\n            try {\n              var recoveryUrl = new URL(recoveryTarget);\n              recoveryUrl.searchParams.delete('shpxid');\n              if (referrerIntent.country && !recoveryUrl.searchParams.has('country')) {\n                recoveryUrl.searchParams.set('country', referrerIntent.country);\n              }\n              if (recoveryUrl.toString() !== currentUrl.toString()) {\n                writeStorageItem(window.sessionStorage, REFERRER_LOCALE_RECOVERY_KEY, '1');\n                writeStorageItem(window.sessionStorage, AUTO_LOCALE_SESSION_KEY, '1');\n                window.location.replace(recoveryUrl.toString());\n                return;\n              }\n            } catch (_errRecoveryUrl) {\n              // noop\n            }\n          }\n        }\n      }\n      var cleanedNlUrl = new URL(currentUrl.toString());\n      cleanedNlUrl.searchParams.delete('shpxid');\n      if (cleanedNlUrl.toString() !== currentUrl.toString()) {\n        writeStorageItem(window.sessionStorage, AUTO_LOCALE_SESSION_KEY, '1');\n        window.location.replace(cleanedNlUrl.toString());\n        return;\n      }\n    }\n    if (!isNlHost && currentUrl.searchParams.has('shpxid') && !isLikelyCrawlerUserAgent()) {\n      var cleanedComUrl = new URL(currentUrl.toString());\n      cleanedComUrl.searchParams.delete('shpxid');\n      if (cleanedComUrl.toString() !== currentUrl.toString()) {\n        window.location.replace(cleanedComUrl.toString());\n        return;\n      }\n    }\n\n    var explicitLocalePath = findExplicitLocalePathMatch(currentUrl.pathname, locales);\n    if (explicitLocalePath && explicitLocalePath.rootUrl && explicitLocalePath.rootUrl !== '/') {\n      // Respect explicit locale/market URLs (manual selections, deep links, campaign landings).\n      // Auto-locale should only steer entry/root traffic, not rewrite explicit user intent.\n      return;\n    }\n\n    if (shouldStripLooseCountryQuery(currentUrl.pathname, currentUrl.searchParams, locales)) {\n      var countryCleanUrl = new URL(currentUrl.toString());\n      countryCleanUrl.searchParams.delete('country');\n      if (countryCleanUrl.toString() !== currentUrl.toString()) {\n        window.location.replace(countryCleanUrl.toString());\n        return;\n      }\n    }\n\n    var manualLocale = readManualLocalePreference(MANUAL_LOCALE_STORAGE_KEY);\n    if (enforceManualLocalePreference(manualLocale, currentUrl, config, locales, isNlHost)) {\n      return;\n    }\n\n    if (readStorageItem(window.sessionStorage, AUTO_LOCALE_SESSION_KEY) === '1') return;\n    if (isLikelyCrawlerUserAgent()) {\n      writeStorageItem(window.sessionStorage, AUTO_LOCALE_SESSION_KEY, '1');\n      return;\n    }\n\n    var isEntryRootLike =\n      isAutoLocaleEntryPath(currentUrl.pathname, locales) &&\n      !currentUrl.searchParams.has('country') &&\n      !parseMarketLocaleFromPath(currentUrl.pathname);\n    var shouldAttemptGeoHint =\n      !manualLocale &&\n      !currentUrl.searchParams.has('country') &&\n      !parseMarketLocaleFromPath(currentUrl.pathname) &&\n      isAutoLocaleEntryPath(currentUrl.pathname, locales);\n\n    function continueAutoLocaleRouting(detectedGeoCountry) {\n      if (readManualLocalePreference(MANUAL_LOCALE_STORAGE_KEY) && !manualLocale) return;\n\n      if (shouldSkipAutoLocale(currentUrl.pathname, currentUrl.searchParams, !!manualLocale)) {\n        writeStorageItem(window.sessionStorage, AUTO_LOCALE_SESSION_KEY, '1');\n        return;\n      }\n\n      if (!isAutoLocaleEntryPath(currentUrl.pathname, locales)) {\n        writeStorageItem(window.sessionStorage, AUTO_LOCALE_SESSION_KEY, '1');\n        return;\n      }\n\n      var canonicalPath = stripLocalePrefixFromPath(currentUrl.pathname, locales);\n      var countryHint = normalizeCountryCode(detectedGeoCountry) || resolveUserCountryHint(config);\n      var preferredRoute = isEntryRootLike ? resolvePreferredCountryLocaleRoute(countryHint, locales) : null;\n\n      if (preferredRoute) {\n        var preferredCountry = normalizeCountryCode(countryHint);\n        var activeCountry = normalizeCountryCode(config.countryCode);\n        var activeLocaleCode = normalizeLocaleCode(\n          config.currentLocale || document.documentElement.getAttribute('lang') || ''\n        );\n        var activeLocaleBase = localeBaseCode(activeLocaleCode);\n        if (activeLocaleBase === 'no') activeLocaleBase = 'nb';\n\n        var routeUrl = null;\n        try {\n          routeUrl = new URL(preferredRoute.href, currentUrl);\n        } catch (_errPreferredRouteUrl) {\n          routeUrl = null;\n        }\n\n        if (routeUrl) {\n          routeUrl.search = currentUrl.search;\n          routeUrl.hash = currentUrl.hash;\n          routeUrl.searchParams.delete('locale');\n          routeUrl.searchParams.delete('market');\n          routeUrl.searchParams.delete('shpxid');\n\n          var routeHost = sanitizeHostName(routeUrl.hostname || '');\n          if (preferredCountry === 'NL') {\n            routeUrl.searchParams.delete('country');\n            if (routeUrl.toString() !== currentUrl.toString()) {\n              writeStorageItem(window.sessionStorage, AUTO_LOCALE_SESSION_KEY, '1');\n              window.location.replace(routeUrl.toString());\n              return;\n            }\n          } else if (routeHost && routeHost !== hostName) {\n            routeUrl.searchParams.set('country', preferredCountry);\n            writeStorageItem(window.sessionStorage, AUTO_LOCALE_SESSION_KEY, '1');\n            window.location.replace(routeUrl.toString());\n            return;\n          }\n\n          var needsPreferredMarket =\n            activeCountry !== preferredCountry ||\n            activeLocaleBase !== preferredRoute.base ||\n            currentUrl.pathname !== routeUrl.pathname;\n          if (needsPreferredMarket) {\n            routeUrl.searchParams.delete('country');\n            writeStorageItem(window.sessionStorage, AUTO_LOCALE_SESSION_KEY, '1');\n            applyAutoLocaleSelection(preferredRoute.localeCode, preferredCountry, routeUrl);\n            return;\n          }\n\n          writeStorageItem(window.sessionStorage, AUTO_LOCALE_SESSION_KEY, '1');\n          return;\n        }\n      }\n\n      var targetLocale = resolveAutoLocaleTarget(config, locales, countryHint);\n      if (!targetLocale) {\n        writeStorageItem(window.sessionStorage, AUTO_LOCALE_SESSION_KEY, '1');\n        return;\n      }\n\n      var currentLocale = normalizeLocaleCode(\n        config.currentLocale || document.documentElement.getAttribute('lang') || ''\n      );\n      var currentLocaleBase = localeBaseCode(currentLocale);\n      var currentRootUrl = normalizeLocaleRootUrl(config.currentRootUrl || '/');\n      var targetRootUrl = normalizeLocaleRootUrl(targetLocale.rootUrl || '/');\n      if (isNlHost && targetLocale.base === 'nl') {\n        // Keep Dutch on nordbelt.nl at the root URL, never under /nl*.\n        targetRootUrl = '/';\n      }\n      var localizedPath = buildLocalizedPath(canonicalPath, targetRootUrl);\n      if (!localizedPath) {\n        writeStorageItem(window.sessionStorage, AUTO_LOCALE_SESSION_KEY, '1');\n        return;\n      }\n\n      if (targetLocale.base === 'nl' && !isNlHost) {\n        var preferredNlHost = resolvePreferredNlHost(config, hostName);\n        var nlPath = canonicalPath || '/';\n        var crossDomainNlUrl = buildHostSwapUrl(preferredNlHost, currentUrl, nlPath);\n        if (crossDomainNlUrl && crossDomainNlUrl !== currentUrl.toString()) {\n          writeStorageItem(window.sessionStorage, AUTO_LOCALE_SESSION_KEY, '1');\n          window.location.replace(crossDomainNlUrl);\n          return;\n        }\n      }\n\n      if (isNlHost && targetLocale.base !== 'nl') {\n        var preferredComHost = sanitizeHostName(config.preferredComHost || 'www.nordbelt.com');\n        var comPath = targetLocale.base === 'en' ? (canonicalPath || '/') : localizedPath;\n        var comUrl = buildHostSwapUrl(preferredComHost, currentUrl, comPath);\n        if (comUrl && comUrl !== currentUrl.toString()) {\n          writeStorageItem(window.sessionStorage, AUTO_LOCALE_SESSION_KEY, '1');\n          window.location.replace(comUrl);\n          return;\n        }\n      }\n\n      var sameLocale = targetLocale.code === currentLocale || targetLocale.base === currentLocaleBase;\n      var sameCountry =\n        !countryHint || normalizeCountryCode(config.countryCode) === normalizeCountryCode(countryHint);\n      if (\n        sameLocale &&\n        sameCountry &&\n        targetRootUrl === currentRootUrl &&\n        localizedPath === currentUrl.pathname\n      ) {\n        writeStorageItem(window.sessionStorage, AUTO_LOCALE_SESSION_KEY, '1');\n        return;\n      }\n\n      var fallbackRouteUrl = new URL(currentUrl.toString());\n      fallbackRouteUrl.pathname = localizedPath;\n      fallbackRouteUrl.searchParams.delete('locale');\n      fallbackRouteUrl.searchParams.delete('market');\n      fallbackRouteUrl.searchParams.delete('shpxid');\n      writeStorageItem(window.sessionStorage, AUTO_LOCALE_SESSION_KEY, '1');\n      applyAutoLocaleSelection(targetLocale.code, countryHint || config.countryCode, fallbackRouteUrl);\n    }\n\n    var cachedGeoCountry = readGeoCountryHint();\n    if (shouldAttemptGeoHint && !cachedGeoCountry) {\n      var geoRequest = requestGeoCountryHint();\n      if (geoRequest && typeof geoRequest.then === 'function') {\n        geoRequest.then(function (geoCountry) {\n          if (window.location.href !== currentUrl.toString()) return;\n          if (readManualLocalePreference(MANUAL_LOCALE_STORAGE_KEY)) return;\n          continueAutoLocaleRouting(geoCountry);\n        });\n        return;\n      }\n    }\n\n    continueAutoLocaleRouting(cachedGeoCountry);\n  }\n\n  function initFixedStackOffsets() {\n    var root = document.documentElement;\n    var header = document.querySelector('[data-nb-header]');\n    var announcement = document.querySelector('.nb-announcement');\n    if (!root || !header) return;\n\n    var ticking = false;\n\n    function applyOffsets() {\n      var announcementHeight = announcement ? Math.round(announcement.getBoundingClientRect().height) : 0;\n      var headerHeight = Math.round(header.getBoundingClientRect().height);\n      var stackHeight = announcementHeight + headerHeight;\n      root.style.setProperty('--nb-announcement-height', announcementHeight + 'px');\n      root.style.setProperty('--nb-header-live-height', headerHeight + 'px');\n      root.style.setProperty('--nb-fixed-stack-height', stackHeight + 'px');\n    }\n\n    function queueOffsets() {\n      if (ticking) return;\n      ticking = true;\n      window.requestAnimationFrame(function () {\n        applyOffsets();\n        ticking = false;\n      });\n    }\n\n    applyOffsets();\n    window.addEventListener('resize', queueOffsets, { passive: true });\n\n    var observer = new MutationObserver(queueOffsets);\n    observer.observe(header, { attributes: true, attributeFilter: ['class', 'style'] });\n    if (announcement) observer.observe(announcement, { attributes: true, childList: true, subtree: true });\n    if ('ResizeObserver' in window) {\n      var sizeObserver = new ResizeObserver(queueOffsets);\n      sizeObserver.observe(header);\n      if (announcement) sizeObserver.observe(announcement);\n    }\n  }\n\n  function isArticleFaqHeading(text) {\n    var normalized = String(text || '')\n      .toLowerCase()\n      .replace(/\\s+/g, ' ')\n      .trim();\n    if (!normalized) return false;\n    return [\n      'faq',\n      'veelgestelde vragen',\n      'frequently asked questions',\n      'questions fr\u00E9quentes',\n      'h\u00E4ufige fragen',\n      'h\u00E4ufig gestellte fragen',\n      'domande frequenti',\n      'preguntas frecuentes',\n      'vanliga fr\u00E5gor',\n      'ofta st\u00E4llda fr\u00E5gor',\n      'vanlige sp\u00F8rsm\u00E5l',\n      'vanlege sp\u00F8rsm\u00E5l',\n      'usein kysytyt kysymykset',\n      'korduma kippuvad k\u00FCsimused'\n    ].indexOf(normalized) !== -1;\n  }\n\n  function hasMeaningfulFaqNode(node) {\n    if (!node) return false;\n    if (node.matches && node.matches('figure, img, picture, ul, ol, table, blockquote, .nb-article-media-shell')) {\n      return true;\n    }\n    return String(node.textContent || '')\n      .replace(/\\s+/g, ' ')\n      .trim().length > 0;\n  }\n\n  function hasMeaningfulFaqIntroNode(node) {\n    if (!node) return false;\n    if (node.matches && node.matches('[data-nb-inline-article-image], figure, img, picture, .nb-article-media-shell')) {\n      return false;\n    }\n    return String(node.textContent || '')\n      .replace(/\\s+/g, ' ')\n      .trim().length > 0;\n  }\n\n  function shouldPruneFaqLeadNode(node) {\n    if (!node) return false;\n    if (node.matches && node.matches('[data-nb-inline-article-image], figure, img, picture, .nb-article-media-shell')) {\n      return true;\n    }\n    return !String(node.textContent || '')\n      .replace(/\\s+/g, ' ')\n      .trim().length;\n  }\n\n  function createArticleFaqToggleIcon() {\n    var iconWrap = document.createElement('span');\n    iconWrap.className = 'nb-article-faq__toggle';\n    iconWrap.innerHTML =\n      '<svg viewBox=\"0 0 20 20\" aria-hidden=\"true\" focusable=\"false\"><path d=\"M10 4.5v11M4.5 10h11\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-width=\"1.7\"></path></svg>';\n    return iconWrap;\n  }\n\n  function getArticleFaqHandle(articleRoot) {\n    return String(\n      articleRoot && articleRoot.getAttribute\n        ? articleRoot.getAttribute('data-nb-article-slug') ||\n            articleRoot.getAttribute('data-nb-article-handle') ||\n            'faq'\n        : 'faq'\n    )\n      .toLowerCase()\n      .replace(/[^a-z0-9]+/g, '-')\n      .replace(/^-+|-+$/g, '') || 'faq';\n  }\n\n  function injectArticleFaqJsonLd(articleRoot, faqWrapper, faqHandle) {\n    if (!articleRoot || !faqWrapper || !document.head) return;\n    if (document.querySelector('script[type=\"application/ld+json\"][data-nb-article-faq-schema]')) return;\n\n    var items = [];\n    var cards = faqWrapper.querySelectorAll('[data-faq-item]');\n    cards.forEach(function (card) {\n      var questionNode = card.querySelector('.nb-article-faq__question, [data-faq-trigger]');\n      var answerNode = card.querySelector('.nb-faq-content, .nb-article-faq__content');\n      var questionText = String(questionNode && questionNode.textContent ? questionNode.textContent : '')\n        .replace(/\\s+/g, ' ')\n        .trim();\n      var answerText = String(answerNode && answerNode.textContent ? answerNode.textContent : '')\n        .replace(/\\s+/g, ' ')\n        .trim();\n      if (!questionText || !answerText) return;\n      items.push({\n        '@type': 'Question',\n        name: questionText,\n        acceptedAnswer: {\n          '@type': 'Answer',\n          text: answerText.length > 1500 ? answerText.slice(0, 1497) + '...' : answerText\n        }\n      });\n    });\n    if (!items.length) return;\n\n    var pageUrl = window.location.origin + String(window.location.pathname || '').replace(/\\/+$/, '');\n    var schema = {\n      '@context': 'https://schema.org',\n      '@type': 'FAQPage',\n      '@id': pageUrl + '#faq-' + (faqHandle || getArticleFaqHandle(articleRoot)),\n      url: pageUrl,\n      mainEntity: items\n    };\n    var script = document.createElement('script');\n    script.type = 'application/ld+json';\n    script.setAttribute('data-nb-article-faq-schema', '');\n    script.textContent = JSON.stringify(schema);\n    document.head.appendChild(script);\n  }\n\n  function injectArticleLooseFaqJsonLd(articleRoot, rte, faqHandle) {\n    if (!articleRoot || !rte || !document.head) return;\n    if (document.querySelector('script[type=\"application/ld+json\"][data-nb-article-faq-schema]')) return;\n    var headings = rte.querySelectorAll('h2, h3, h4');\n    var items = [];\n\n    headings.forEach(function (heading) {\n      var questionText = String(heading && heading.textContent ? heading.textContent : '')\n        .replace(/\\s+/g, ' ')\n        .trim();\n      if (!questionText || !/[?\uFF1F]\\s*$/.test(questionText)) return;\n      var headingLevel = Number(String(heading.tagName || '').replace('H', '')) || 2;\n      var answerParts = [];\n      var cursor = heading.nextElementSibling;\n\n      while (cursor) {\n        var tagName = String(cursor.tagName || '').toUpperCase();\n        var nextHeadingLevel = /^H[1-6]$/.test(tagName) ? Number(tagName.replace('H', '')) : 0;\n        if (nextHeadingLevel && nextHeadingLevel <= headingLevel) break;\n        if (cursor.matches && cursor.matches('[data-nb-generated], .nb-article-inline-conversion, .nb-article-toc')) {\n          cursor = cursor.nextElementSibling;\n          continue;\n        }\n        var answerChunk = String(cursor.textContent || '').replace(/\\s+/g, ' ').trim();\n        if (answerChunk) answerParts.push(answerChunk);\n        cursor = cursor.nextElementSibling;\n      }\n\n      var answerText = answerParts.join(' ').trim();\n      if (answerText.length < 32) return;\n      items.push({\n        '@type': 'Question',\n        name: questionText,\n        acceptedAnswer: {\n          '@type': 'Answer',\n          text: answerText.length > 1500 ? answerText.slice(0, 1497) + '...' : answerText\n        }\n      });\n    });\n\n    if (items.length < 2) return;\n    var pageUrl = window.location.origin + String(window.location.pathname || '').replace(/\\/+$/, '');\n    var schema = {\n      '@context': 'https://schema.org',\n      '@type': 'FAQPage',\n      '@id': pageUrl + '#faq-' + (faqHandle || getArticleFaqHandle(articleRoot)),\n      url: pageUrl,\n      mainEntity: items\n    };\n    var script = document.createElement('script');\n    script.type = 'application/ld+json';\n    script.setAttribute('data-nb-article-faq-schema', '');\n    script.textContent = JSON.stringify(schema);\n    document.head.appendChild(script);\n  }\n\n  function getStructuredFaqText(node) {\n    return String(node && node.textContent ? node.textContent : '')\n      .replace(/\\s+/g, ' ')\n      .trim();\n  }\n\n  function injectHomepageFaqJsonLd(rootNode) {\n    if (!document.head) return;\n    if (document.querySelector('script[type=\"application/ld+json\"][data-nb-homepage-faq-schema]')) return;\n\n    var scope = rootNode && rootNode.querySelectorAll ? rootNode : document;\n    var faqRoot =\n      scope.nodeType === 1 && scope.matches && scope.matches('#nb-homepage-2-faq')\n        ? scope\n        : scope.querySelector('#nb-homepage-2-faq');\n    if (!faqRoot) return;\n\n    var items = [];\n    faqRoot.querySelectorAll('details').forEach(function (item) {\n      var questionNode = item.querySelector('summary');\n      var answerNode = item.querySelector('summary + div');\n      var questionText = getStructuredFaqText(questionNode);\n      var answerText = getStructuredFaqText(answerNode);\n      if (!questionText || !answerText) return;\n      items.push({\n        '@type': 'Question',\n        name: questionText,\n        acceptedAnswer: {\n          '@type': 'Answer',\n          text: answerText.length > 1500 ? answerText.slice(0, 1497) + '...' : answerText\n        }\n      });\n    });\n\n    if (items.length < 2) return;\n    var pagePath = String(window.location.pathname || '/').replace(/\\/+$/, '');\n    var pageUrl = window.location.origin + (pagePath || '');\n    var schema = {\n      '@context': 'https://schema.org',\n      '@type': 'FAQPage',\n      '@id': pageUrl + '#homepage-faq',\n      url: pageUrl,\n      mainEntity: items\n    };\n    var script = document.createElement('script');\n    script.type = 'application/ld+json';\n    script.setAttribute('data-nb-homepage-faq-schema', '');\n    script.textContent = JSON.stringify(schema);\n    document.head.appendChild(script);\n  }\n\n  function initArticleFaqEnhancements(rootNode) {\n    var scope = rootNode && rootNode.querySelectorAll ? rootNode : document;\n    var articleRoots = [];\n    if (scope && scope.nodeType === 1 && scope.matches && scope.matches('[data-nb-article-conversion]')) {\n      articleRoots.push(scope);\n    }\n    var foundRoots = scope.querySelectorAll('[data-nb-article-conversion]');\n    foundRoots.forEach(function (root) {\n      articleRoots.push(root);\n    });\n    if (!articleRoots.length) return;\n\n    articleRoots.forEach(function (articleRoot) {\n      if (!articleRoot || articleRoot.dataset.nbArticleFaqEnhanced === 'true') return;\n      var rte = articleRoot.querySelector('[data-nb-article-rte]');\n      if (!rte) {\n        articleRoot.dataset.nbArticleFaqEnhanced = 'true';\n        return;\n      }\n      var existingFaq = rte.querySelector('[data-nb-article-faq]');\n      if (existingFaq) {\n        injectArticleFaqJsonLd(articleRoot, existingFaq, getArticleFaqHandle(articleRoot));\n        articleRoot.dataset.nbArticleFaqEnhanced = 'true';\n        return;\n      }\n\n      var faqHeading = null;\n      var faqHeadingLevel = 0;\n      var headings = rte.querySelectorAll('h2, h3');\n      for (var i = 0; i < headings.length; i += 1) {\n        var heading = headings[i];\n        if (!isArticleFaqHeading(heading.textContent)) continue;\n        faqHeading = heading;\n        faqHeadingLevel = Number(String(heading.tagName || '').replace('H', '')) || 2;\n        break;\n      }\n\n      if (!faqHeading) {\n        injectArticleLooseFaqJsonLd(articleRoot, rte, getArticleFaqHandle(articleRoot));\n        articleRoot.dataset.nbArticleFaqEnhanced = 'true';\n        return;\n      }\n\n      var leadNodes = [];\n      var items = [];\n      var currentItem = null;\n      var cursor = faqHeading.nextElementSibling;\n\n      while (cursor) {\n        var next = cursor.nextElementSibling;\n        var tagName = String(cursor.tagName || '').toUpperCase();\n        var headingLevel = /^H[1-6]$/.test(tagName) ? Number(tagName.replace('H', '')) : 0;\n\n        if (headingLevel && headingLevel <= faqHeadingLevel) break;\n\n        if (headingLevel && headingLevel > faqHeadingLevel && headingLevel <= Math.min(6, faqHeadingLevel + 2)) {\n          currentItem = {\n            questionNode: cursor,\n            answerNodes: []\n          };\n          items.push(currentItem);\n        } else if (currentItem) {\n          currentItem.answerNodes.push(cursor);\n        } else {\n          leadNodes.push(cursor);\n        }\n\n        cursor = next;\n      }\n\n      items = items.filter(function (item) {\n        var questionText = String(item.questionNode && item.questionNode.textContent ? item.questionNode.textContent : '')\n          .replace(/\\s+/g, ' ')\n          .trim();\n        if (!questionText) return false;\n        return item.answerNodes.some(hasMeaningfulFaqNode);\n      });\n\n      if (!items.length) {\n        articleRoot.dataset.nbArticleFaqEnhanced = 'true';\n        return;\n      }\n\n      var faqHandle = getArticleFaqHandle(articleRoot);\n\n      var wrapper = document.createElement('section');\n      wrapper.className = 'nb-article-faq';\n      wrapper.setAttribute('data-nb-article-faq', '');\n\n      var head = document.createElement('div');\n      head.className = 'nb-article-faq__head';\n\n      rte.insertBefore(wrapper, faqHeading);\n      wrapper.appendChild(head);\n\n      faqHeading.classList.add('nb-article-faq__title');\n      head.appendChild(faqHeading);\n\n      var introNodes = leadNodes.filter(hasMeaningfulFaqIntroNode);\n      if (introNodes.length) {\n        var intro = document.createElement('div');\n        intro.className = 'nb-article-faq__intro';\n        introNodes.forEach(function (node) {\n          intro.appendChild(node);\n        });\n        head.appendChild(intro);\n      }\n\n      leadNodes.forEach(function (node) {\n        if (introNodes.indexOf(node) !== -1) return;\n        if (shouldPruneFaqLeadNode(node) && node.parentNode) {\n          node.parentNode.removeChild(node);\n        }\n      });\n\n      var list = document.createElement('div');\n      list.className = 'nb-article-faq__items nb-faq';\n      wrapper.appendChild(list);\n\n      items.forEach(function (item, index) {\n        var questionText = String(item.questionNode.textContent || '').replace(/\\s+/g, ' ').trim();\n        var card = document.createElement('article');\n        card.className = 'nb-faq-item nb-article-faq__item';\n        card.setAttribute('data-faq-item', '');\n        if (index === 0) card.classList.add('is-open');\n\n        var trigger = document.createElement('button');\n        trigger.className = 'nb-faq-trigger nb-article-faq__trigger';\n        trigger.type = 'button';\n        trigger.setAttribute('data-faq-trigger', '');\n        trigger.setAttribute('aria-expanded', index === 0 ? 'true' : 'false');\n\n        var panelId = 'nb-article-faq-panel-' + faqHandle + '-' + String(index + 1);\n        trigger.setAttribute('aria-controls', panelId);\n\n        var label = document.createElement('span');\n        label.className = 'nb-article-faq__question';\n        label.textContent = questionText;\n        trigger.appendChild(label);\n        trigger.appendChild(createArticleFaqToggleIcon());\n\n        var content = document.createElement('div');\n        content.className = 'nb-faq-content nb-article-faq__content';\n        content.id = panelId;\n        item.answerNodes.forEach(function (node) {\n          content.appendChild(node);\n        });\n\n        card.appendChild(trigger);\n        card.appendChild(content);\n        list.appendChild(card);\n\n        if (item.questionNode && item.questionNode.parentNode) {\n          item.questionNode.parentNode.removeChild(item.questionNode);\n        }\n      });\n\n      injectArticleFaqJsonLd(articleRoot, wrapper, faqHandle);\n      articleRoot.dataset.nbArticleFaqEnhanced = 'true';\n    });\n  }\n\n  function initFaq() {\n    function decodeFaqEntities(value) {\n      var probe = document.createElement('textarea');\n      var output = value || '';\n\n      for (var i = 0; i < 3; i += 1) {\n        probe.innerHTML = output;\n        var decoded = probe.value || '';\n        if (!decoded || decoded === output) break;\n        output = decoded;\n      }\n\n      return output\n        .replace(/_NBTOK18__/g, '</p><p>')\n        .replace(/NBTOK18__/g, '</p><p>')\n        .replace(/_NBTOK20__/g, '</p><p>')\n        .replace(/NBTOK20__/g, '</p><p>')\n        .replace(/__NBTOK21\\.__NBTOK21/g, '')\n        .replace(/__NBTOK21/g, '')\n        .replace(/__NTOK0__/g, 'Nordbelt\u2122');\n    }\n\n    document.querySelectorAll('.nb-faq-content').forEach(function (node) {\n      var raw = node.innerHTML || '';\n      if (!raw) return;\n      var normalized = decodeFaqEntities(raw);\n      if (!normalized || normalized === raw) return;\n      node.innerHTML = normalized;\n    });\n\n    document.querySelectorAll('[data-faq-item]').forEach(function (item) {\n      if (item.dataset.nbFaqBound === 'true') return;\n      item.dataset.nbFaqBound = 'true';\n      var trigger = item.querySelector('[data-faq-trigger]');\n      if (!trigger) return;\n\n      trigger.addEventListener('click', function () {\n        var open = item.classList.toggle('is-open');\n        trigger.setAttribute('aria-expanded', String(open));\n      });\n    });\n  }\n\n  function initGallery() {\n    var mainMedia = document.querySelector('[data-main-media]');\n    if (!mainMedia) return;\n    var productSection = mainMedia.closest('.nb-product');\n    var galleryPin = productSection ? productSection.querySelector('.nb-product__gallery-pin') : null;\n    var galleryMain = productSection ? productSection.querySelector('.nb-gallery-main') : null;\n    var thumbsRail = productSection ? productSection.querySelector('.nb-gallery-thumbs') : null;\n    var mobileHeroSlot = productSection ? productSection.querySelector('.nb-product__mobile-hero') : null;\n    var mobileThumbsSlot = productSection ? productSection.querySelector('[data-mobile-thumbs-slot]') : null;\n    var mobileHeroImage = productSection ? productSection.querySelector('.nb-product__mobile-hero-image') : null;\n    var mobileTrigger = productSection ? productSection.querySelector('[data-mobile-main-media-trigger]') : null;\n    var thumbs = Array.prototype.slice.call(thumbsRail ? thumbsRail.querySelectorAll('[data-gallery-thumb]') : []);\n    var items = [];\n    var currentIndex = 0;\n    var lightbox = null;\n    var lightboxImg = null;\n    var lightboxCaption = null;\n    var lightboxTouchStartX = null;\n    var lightboxTouchStartY = null;\n    var mobileLayoutMq = window.matchMedia('(max-width: 840px)');\n\n    function collectItems() {\n      if (!thumbs.length) {\n        items = [{ src: mainMedia.getAttribute('src') || '', alt: mainMedia.getAttribute('alt') || '' }];\n        return;\n      }\n\n      items = thumbs\n        .map(function (thumb) {\n          return {\n            src: thumb.getAttribute('data-media-url') || '',\n            alt: thumb.getAttribute('data-media-alt') || ''\n          };\n        })\n        .filter(function (item) {\n          return Boolean(item.src);\n        });\n    }\n\n    function preloadGalleryImages(limit) {\n      var max = Math.max(0, Number(limit) || 0);\n      if (!max) return;\n      items.slice(1, max + 1).forEach(function (item) {\n        if (!item.src) return;\n        var image = new Image();\n        image.decoding = 'async';\n        image.src = item.src;\n      });\n    }\n\n    function scheduleGalleryPreload() {\n      var connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection;\n      if (connection && (connection.saveData || /2g/i.test(connection.effectiveType || ''))) return;\n      var kickoff = function () {\n        preloadGalleryImages(2);\n      };\n      if ('requestIdleCallback' in window) {\n        window.requestIdleCallback(kickoff, { timeout: 1600 });\n      } else {\n        window.setTimeout(kickoff, 900);\n      }\n    }\n\n    function syncThumbState(index) {\n      thumbs.forEach(function (thumb, thumbIndex) {\n        var isActive = thumbIndex === index;\n        thumb.classList.toggle('is-active', isActive);\n        thumb.setAttribute('aria-pressed', isActive ? 'true' : 'false');\n      });\n    }\n\n    function renderMain(index) {\n      if (!items.length || !items[index]) return;\n      currentIndex = index;\n      mainMedia.setAttribute('src', items[index].src);\n      mainMedia.setAttribute('alt', items[index].alt || '');\n      if (mobileHeroImage) {\n        mobileHeroImage.setAttribute('src', items[index].src);\n        mobileHeroImage.setAttribute('alt', items[index].alt || '');\n      }\n      syncThumbState(index);\n    }\n\n    function syncMobileThumbPlacement() {\n      if (!thumbsRail || !galleryPin || !galleryMain || !mobileHeroSlot) return;\n      var mobileHeroVisible = window.getComputedStyle(mobileHeroSlot).display !== 'none';\n      if (mobileLayoutMq.matches && mobileHeroVisible) {\n        var mobileTarget = mobileThumbsSlot || mobileHeroSlot;\n        if (!mobileTarget.contains(thumbsRail)) {\n          mobileTarget.appendChild(thumbsRail);\n        }\n      } else if (!galleryPin.contains(thumbsRail)) {\n        galleryMain.insertAdjacentElement('afterend', thumbsRail);\n      }\n    }\n\n    function ensureLightbox() {\n      if (lightbox) return;\n\n      var lightboxLabel = i18n('gallery.lightbox_label', 'Productafbeelding groot bekijken');\n      var backLabel = i18n('gallery.back', 'Terug');\n      var prevLabel = i18n('gallery.prev', 'Vorige afbeelding');\n      var nextLabel = i18n('gallery.next', 'Volgende afbeelding');\n\n      lightbox = document.createElement('dialog');\n      lightbox.className = 'nb-gallery-lightbox';\n      lightbox.setAttribute('aria-label', lightboxLabel);\n      lightbox.innerHTML =\n        '<button type=\"button\" class=\"nb-gallery-lightbox__back\" data-gallery-lightbox-close aria-label=\"' + backLabel + '\">' + backLabel + '</button>' +\n        '<button type=\"button\" class=\"nb-gallery-lightbox__nav nb-gallery-lightbox__nav--prev\" data-gallery-lightbox-prev aria-label=\"' + prevLabel + '\">&#8249;</button>' +\n        '<figure class=\"nb-gallery-lightbox__figure\">' +\n        '  <img class=\"nb-gallery-lightbox__image\" alt=\"\">' +\n        '  <figcaption class=\"nb-gallery-lightbox__caption\"></figcaption>' +\n        '</figure>' +\n        '<button type=\"button\" class=\"nb-gallery-lightbox__nav nb-gallery-lightbox__nav--next\" data-gallery-lightbox-next aria-label=\"' + nextLabel + '\">&#8250;</button>';\n\n      document.body.appendChild(lightbox);\n      lightboxImg = lightbox.querySelector('.nb-gallery-lightbox__image');\n      lightboxCaption = lightbox.querySelector('.nb-gallery-lightbox__caption');\n\n      var close = lightbox.querySelector('[data-gallery-lightbox-close]');\n      var prev = lightbox.querySelector('[data-gallery-lightbox-prev]');\n      var next = lightbox.querySelector('[data-gallery-lightbox-next]');\n\n      close.addEventListener('click', function () {\n        closeLightbox();\n      });\n\n      lightbox.addEventListener('click', function (event) {\n        if (event.target === lightbox) closeLightbox();\n      });\n\n      prev.addEventListener('click', function (event) {\n        event.stopPropagation();\n        showLightboxItem(currentIndex - 1);\n      });\n\n      next.addEventListener('click', function (event) {\n        event.stopPropagation();\n        showLightboxItem(currentIndex + 1);\n      });\n\n      lightbox.addEventListener('touchstart', function (event) {\n        if (!event.touches || !event.touches.length) return;\n        lightboxTouchStartX = event.touches[0].clientX;\n        lightboxTouchStartY = event.touches[0].clientY;\n      }, { passive: true });\n\n      lightbox.addEventListener('touchend', function (event) {\n        if (lightboxTouchStartX === null || lightboxTouchStartY === null) return;\n        if (!event.changedTouches || !event.changedTouches.length) return;\n\n        var endX = event.changedTouches[0].clientX;\n        var endY = event.changedTouches[0].clientY;\n        var deltaX = endX - lightboxTouchStartX;\n        var deltaY = endY - lightboxTouchStartY;\n        var absX = Math.abs(deltaX);\n        var absY = Math.abs(deltaY);\n\n        lightboxTouchStartX = null;\n        lightboxTouchStartY = null;\n\n        if (absX < 36 || absX <= absY) return;\n        if (deltaX < 0) showLightboxItem(currentIndex + 1);\n        if (deltaX > 0) showLightboxItem(currentIndex - 1);\n      }, { passive: true });\n    }\n\n    function showLightboxItem(index) {\n      if (!items.length) return;\n      if (index < 0) index = items.length - 1;\n      if (index >= items.length) index = 0;\n      currentIndex = index;\n      var item = items[index];\n      if (!item) return;\n      lightboxImg.setAttribute('src', item.src);\n      lightboxImg.setAttribute('alt', item.alt || '');\n      lightboxCaption.textContent = item.alt || '';\n      syncThumbState(index);\n    }\n\n    function openLightbox(index) {\n      ensureLightbox();\n      showLightboxItem(index);\n      if (lightbox.open) return;\n      if (typeof lightbox.showModal === 'function') {\n        lightbox.showModal();\n      } else {\n        lightbox.setAttribute('open', 'open');\n      }\n    }\n\n    function closeLightbox() {\n      if (!lightbox || !lightbox.open) return;\n      if (typeof lightbox.close === 'function') {\n        lightbox.close();\n      } else {\n        lightbox.removeAttribute('open');\n      }\n    }\n\n    collectItems();\n    scheduleGalleryPreload();\n\n    if (!items.length) return;\n\n    mainMedia.style.cursor = 'zoom-in';\n    mainMedia.addEventListener('click', function () {\n      openLightbox(currentIndex);\n    });\n\n    if (mobileTrigger) {\n      mobileTrigger.style.cursor = 'zoom-in';\n      mobileTrigger.addEventListener('click', function (event) {\n        if (event.target && event.target.closest && event.target.closest('[data-gallery-thumb]')) return;\n        openLightbox(currentIndex);\n      });\n    }\n\n    thumbs.forEach(function (thumb, index) {\n      thumb.addEventListener('click', function () {\n        renderMain(index);\n        openLightbox(index);\n      });\n\n      thumb.addEventListener('keydown', function (event) {\n        if (event.key !== 'Enter' && event.key !== ' ') return;\n        event.preventDefault();\n        renderMain(index);\n        openLightbox(index);\n      });\n    });\n\n    document.addEventListener('keydown', function (event) {\n      if (!lightbox || !lightbox.open) return;\n      if (event.key === 'Escape') {\n        closeLightbox();\n      } else if (event.key === 'ArrowLeft') {\n        showLightboxItem(currentIndex - 1);\n      } else if (event.key === 'ArrowRight') {\n        showLightboxItem(currentIndex + 1);\n      }\n    });\n\n    syncMobileThumbPlacement();\n    window.requestAnimationFrame(syncMobileThumbPlacement);\n    setTimeout(syncMobileThumbPlacement, 140);\n    window.addEventListener('resize', syncMobileThumbPlacement, { passive: true });\n    if (mobileLayoutMq.addEventListener) mobileLayoutMq.addEventListener('change', syncMobileThumbPlacement);\n    else if (mobileLayoutMq.addListener) mobileLayoutMq.addListener(syncMobileThumbPlacement);\n\n    renderMain(currentIndex);\n  }\n\n  function initMobileStickyCta() {\n    var sticky = document.querySelector('[data-mobile-sticky-cta]');\n    if (!sticky) return;\n    document.body.classList.add('has-mobile-sticky-cta');\n  }\n\n  function initScrollTo() {\n    var triggers = document.querySelectorAll('[data-scroll-to]');\n    if (!triggers.length) return;\n\n    triggers.forEach(function (trigger) {\n      trigger.addEventListener('click', function () {\n        var selector = trigger.getAttribute('data-scroll-target');\n        if (!selector) return;\n        var target = document.querySelector(selector);\n        if (!target) return;\n        target.scrollIntoView({ behavior: 'smooth', block: 'start' });\n      });\n    });\n  }\n\n  function initGlobalMobileBuyCta() {\n    var body = document.body;\n    if (body && body.getAttribute('data-b2b-layout') === 'true') return;\n    var cta = document.querySelector('[data-mobile-float-buy]');\n    if (!cta) return;\n    var buyShortNeedle = normalizeCtaText(i18n('shared.buy_short', 'Koop nu'));\n\n    var media = window.matchMedia('(max-width: 840px)');\n    var pathname = (window.location.pathname || '').replace(/\\/+$/, '');\n    var isHomePage = pathname === '';\n    var requiresHomeUnlock = isHomePage;\n    var firstMainBuyCta = null;\n    var homeUnlocked = !requiresHomeUnlock;\n    var lastY = window.scrollY || 0;\n    var travel = 0;\n    var hidden = false;\n    var lastToggleAt = 0;\n    var ticking = false;\n    var idleTimer = null;\n    var competingSelectors = [\n      '[data-mobile-sticky-cta]',\n      '.nb-mobile-quick-cta'\n    ];\n\n    function getFirstMainBuyCta() {\n      var candidates = document.querySelectorAll('#MainContent a, #MainContent button');\n      for (var i = 0; i < candidates.length; i += 1) {\n        var node = candidates[i];\n        if (!node || node === cta || cta.contains(node)) continue;\n        var text = (node.textContent || '').trim().toLowerCase();\n        if (buyShortNeedle && text.indexOf(buyShortNeedle) !== -1) return node;\n      }\n      return null;\n    }\n\n    function hasReachedFirstHomeBuyCta() {\n      if (!firstMainBuyCta || !firstMainBuyCta.getBoundingClientRect) return true;\n      var rect = firstMainBuyCta.getBoundingClientRect();\n      return rect.top <= window.innerHeight;\n    }\n\n    function isElementInViewport(element) {\n      if (!element || !element.getBoundingClientRect) return false;\n      var rect = element.getBoundingClientRect();\n      if (rect.width <= 0 || rect.height <= 0) return false;\n      var styles = window.getComputedStyle(element);\n      if (styles.display === 'none' || styles.visibility === 'hidden' || Number(styles.opacity) === 0) return false;\n      return rect.bottom > 0 && rect.top < window.innerHeight;\n    }\n\n    function hasCompetingCtaInViewport() {\n      for (var i = 0; i < competingSelectors.length; i += 1) {\n        var nodes = document.querySelectorAll(competingSelectors[i]);\n        for (var j = 0; j < nodes.length; j += 1) {\n          if (isElementInViewport(nodes[j])) return true;\n        }\n      }\n\n      var ctaCandidates = document.querySelectorAll('a, button');\n      for (var k = 0; k < ctaCandidates.length; k += 1) {\n        var node = ctaCandidates[k];\n        if (node === cta || cta.contains(node)) continue;\n        var text = (node.textContent || '').trim().toLowerCase();\n        if (!text) continue;\n        if (!buyShortNeedle || text.indexOf(buyShortNeedle) === -1) continue;\n        if (isElementInViewport(node)) return true;\n      }\n      return false;\n    }\n\n    function setHidden(nextHidden, force) {\n      if (nextHidden === hidden && !force) return;\n      var now = Date.now();\n      if (!force && now - lastToggleAt < 120) return;\n      hidden = nextHidden;\n      lastToggleAt = now;\n      cta.classList.toggle('is-hidden', hidden);\n    }\n\n    function updateVisibility() {\n      ticking = false;\n      if (!media.matches) {\n        setHidden(false, true);\n        return;\n      }\n\n      if (requiresHomeUnlock && !homeUnlocked) {\n        homeUnlocked = hasReachedFirstHomeBuyCta();\n        if (!homeUnlocked) {\n          setHidden(true, true);\n          return;\n        }\n      }\n\n      var currentY = window.scrollY || 0;\n      var delta = currentY - lastY;\n      var absDelta = Math.abs(delta);\n      var scrollingDown = delta > 0;\n      var nearTop = currentY < 90;\n      var competingVisible = hasCompetingCtaInViewport();\n\n      if (absDelta > 1) {\n        if ((travel > 0 && !scrollingDown) || (travel < 0 && scrollingDown)) {\n          travel = 0;\n        }\n        travel += delta;\n      }\n\n      if (competingVisible) {\n        setHidden(true, false);\n      } else if (nearTop || travel < -18) {\n        setHidden(false, false);\n      } else if (travel > 24 && currentY > 120) {\n        setHidden(true, false);\n      }\n\n      lastY = currentY;\n    }\n\n    function scheduleIdleReveal() {\n      if (idleTimer) window.clearTimeout(idleTimer);\n      idleTimer = window.setTimeout(function () {\n        if (!media.matches) return;\n        if (requiresHomeUnlock && !homeUnlocked) return;\n        if (hasCompetingCtaInViewport()) return;\n        travel = Math.min(travel, 0);\n        setHidden(false, false);\n      }, 500);\n    }\n\n    function onScroll() {\n      if (ticking) return;\n      ticking = true;\n      window.requestAnimationFrame(updateVisibility);\n      scheduleIdleReveal();\n    }\n\n    window.addEventListener('scroll', onScroll, { passive: true });\n    window.addEventListener('resize', onScroll);\n    firstMainBuyCta = getFirstMainBuyCta();\n    if (requiresHomeUnlock && firstMainBuyCta == null) {\n      homeUnlocked = true;\n    }\n    updateVisibility();\n    scheduleIdleReveal();\n  }\n\n  function initProductDescriptionToggle() {\n    var wrappers = document.querySelectorAll('[data-product-description]');\n    if (!wrappers.length) return;\n    var desktopMq = window.matchMedia('(min-width: 841px)');\n\n    wrappers.forEach(function (wrap) {\n      var content = wrap.querySelector('[data-product-description-content]');\n      var toggle = wrap.querySelector('[data-product-description-toggle]');\n      if (!content || !toggle) return;\n      var section = wrap.closest('.nb-product');\n      var panel = section ? section.querySelector('.nb-product__panel') : null;\n      var galleryPin = section ? section.querySelector('.nb-product__gallery-pin') : null;\n      var collapsedMaxHeight = 0;\n      var desktopExpandedByUser = false;\n      var syncRaf = 0;\n\n      function setToggleLabel(isExpanded) {\n        toggle.setAttribute('aria-expanded', String(isExpanded));\n        toggle.textContent = isExpanded\n          ? toggle.getAttribute('data-label-close') || 'Minder tonen'\n          : toggle.getAttribute('data-label-open') || 'Lees meer';\n      }\n\n      function clearDesktopClamp() {\n        collapsedMaxHeight = 0;\n        desktopExpandedByUser = false;\n        wrap.classList.remove('is-desktop-collapsible');\n        content.style.maxHeight = '';\n      }\n\n      function applyDesktopClamp() {\n        if (!desktopMq.matches || !panel || !galleryPin) {\n          clearDesktopClamp();\n          setToggleLabel(wrap.classList.contains('is-expanded'));\n          updateToggleVisibility();\n          return;\n        }\n\n        var wasExpanded = desktopExpandedByUser;\n        wrap.classList.add('is-expanded');\n        wrap.classList.remove('is-desktop-collapsible');\n        content.style.maxHeight = '';\n\n        var galleryHeight = Math.ceil(galleryPin.getBoundingClientRect().height);\n        var panelHeight = Math.ceil(panel.getBoundingClientRect().height);\n        var overflow = panelHeight - galleryHeight;\n        var contentFullHeight = Math.ceil(content.scrollHeight);\n        var shouldClamp = overflow > 6 && contentFullHeight > 0;\n\n        if (!shouldClamp) {\n          clearDesktopClamp();\n          wrap.classList.remove('is-expanded');\n          setToggleLabel(false);\n          updateToggleVisibility();\n          return;\n        }\n\n        collapsedMaxHeight = Math.max(0, contentFullHeight - overflow - 2);\n        if (collapsedMaxHeight >= contentFullHeight - 6) {\n          clearDesktopClamp();\n          wrap.classList.remove('is-expanded');\n          setToggleLabel(false);\n          updateToggleVisibility();\n          return;\n        }\n\n        wrap.classList.add('is-desktop-collapsible');\n        content.style.maxHeight = collapsedMaxHeight + 'px';\n\n        if (wasExpanded) {\n          wrap.classList.add('is-expanded');\n        } else {\n          wrap.classList.remove('is-expanded');\n        }\n\n        setToggleLabel(wrap.classList.contains('is-expanded'));\n        updateToggleVisibility();\n      }\n\n      function scheduleDesktopClampSync() {\n        if (syncRaf) return;\n        syncRaf = window.requestAnimationFrame(function () {\n          syncRaf = 0;\n          applyDesktopClamp();\n        });\n      }\n\n      function updateToggleVisibility() {\n        var overflows = content.scrollHeight > content.clientHeight + 6;\n        if (desktopMq.matches && wrap.classList.contains('is-desktop-collapsible')) {\n          overflows = true;\n        }\n        toggle.hidden = !overflows && !wrap.classList.contains('is-expanded');\n      }\n\n      toggle.addEventListener('click', function () {\n        var isExpanded = wrap.classList.toggle('is-expanded');\n        if (desktopMq.matches && wrap.classList.contains('is-desktop-collapsible')) {\n          desktopExpandedByUser = isExpanded;\n        }\n        setToggleLabel(isExpanded);\n        window.requestAnimationFrame(updateToggleVisibility);\n      });\n\n      window.requestAnimationFrame(function () {\n        scheduleDesktopClampSync();\n        updateToggleVisibility();\n      });\n      window.setTimeout(scheduleDesktopClampSync, 180);\n      window.setTimeout(scheduleDesktopClampSync, 520);\n\n      window.addEventListener('resize', scheduleDesktopClampSync);\n      if (desktopMq.addEventListener) desktopMq.addEventListener('change', scheduleDesktopClampSync);\n      else if (desktopMq.addListener) desktopMq.addListener(scheduleDesktopClampSync);\n\n      if ('ResizeObserver' in window) {\n        var resizeObserver = new ResizeObserver(scheduleDesktopClampSync);\n        resizeObserver.observe(content);\n        if (panel) resizeObserver.observe(panel);\n        if (galleryPin) resizeObserver.observe(galleryPin);\n      }\n    });\n  }\n\n  function initMobileProductDetailsToggle() {\n    var productSections = document.querySelectorAll('.nb-product');\n    if (!productSections.length) return;\n\n    var mobileMq = window.matchMedia('(max-width: 980px)');\n\n    productSections.forEach(function (section) {\n      var detailsGroups = section.querySelectorAll('[data-mobile-product-details]');\n      var toggles = section.querySelectorAll('[data-mobile-product-details-toggle]');\n      if (!detailsGroups.length || !toggles.length) return;\n\n      function setCollapsed(collapsed) {\n        detailsGroups.forEach(function (group, index) {\n          if (!group) return;\n          if (mobileMq.matches && collapsed && index > 0) {\n            group.classList.add('is-collapsed');\n          } else {\n            group.classList.remove('is-collapsed');\n          }\n        });\n\n        toggles.forEach(function (toggle) {\n          if (!toggle) return;\n          if (!mobileMq.matches) {\n            toggle.hidden = true;\n            toggle.setAttribute('aria-expanded', 'true');\n            toggle.textContent = toggle.getAttribute('data-label-close') || 'Minder tonen';\n            return;\n          }\n          toggle.hidden = false;\n          toggle.setAttribute('aria-expanded', collapsed ? 'false' : 'true');\n          toggle.textContent = collapsed\n            ? (toggle.getAttribute('data-label-open') || 'Meer lezen')\n            : (toggle.getAttribute('data-label-close') || 'Minder tonen');\n        });\n      }\n\n      toggles.forEach(function (toggle) {\n        toggle.addEventListener('click', function () {\n          var expanded = toggle.getAttribute('aria-expanded') === 'true';\n          setCollapsed(expanded);\n        });\n      });\n\n      setCollapsed(true);\n      if (mobileMq.addEventListener) mobileMq.addEventListener('change', function () { setCollapsed(true); });\n      else if (mobileMq.addListener) mobileMq.addListener(function () { setCollapsed(true); });\n    });\n  }\n\n  function initFounderStoryMedia() {\n    var sections = document.querySelectorAll('.nb-founder-story');\n    if (!sections.length) return;\n\n    var desktopMq = window.matchMedia('(min-width: 1061px)');\n\n    sections.forEach(function (section) {\n      var copy = section.querySelector('.nb-founder-story__copy');\n      var media = section.querySelector('.nb-founder-story__media');\n      var videoShell = section.querySelector('.nb-founder-story__video-shell');\n      var mediaNode = section.querySelector('[data-founder-video], .nb-founder-story__video');\n      var video = mediaNode && mediaNode.tagName && mediaNode.tagName.toLowerCase() === 'video' ? mediaNode : null;\n      if (!copy || !media) return;\n\n      var shouldPlay = false;\n      var pausingProgrammatically = false;\n\n      function syncDesktopHeights() {\n        if (!desktopMq.matches) {\n          media.style.height = '';\n          if (videoShell) videoShell.style.height = '';\n          return;\n        }\n        var copyHeight = Math.ceil(copy.getBoundingClientRect().height);\n        if (copyHeight > 0) {\n          media.style.height = copyHeight + 'px';\n          if (videoShell) videoShell.style.height = '100%';\n        }\n      }\n\n      function enforceVideoPolicy() {\n        if (!video) return;\n        video.muted = true;\n        video.defaultMuted = true;\n        video.autoplay = true;\n        video.loop = true;\n        video.playsInline = true;\n        video.controls = false;\n        video.setAttribute('muted', '');\n        video.setAttribute('autoplay', '');\n        video.setAttribute('loop', '');\n        video.setAttribute('playsinline', '');\n        video.setAttribute('webkit-playsinline', 'true');\n        video.setAttribute('tabindex', '-1');\n        video.setAttribute('aria-hidden', 'true');\n        video.setAttribute('disablepictureinpicture', '');\n        video.removeAttribute('controls');\n        video.style.pointerEvents = 'none';\n      }\n\n      function hydrateFounderVideoSource() {\n        if (!video || video.dataset.nbSourceHydrated === 'true') return;\n        var source = video.querySelector('source[data-src]');\n        if (!source) {\n          video.dataset.nbSourceHydrated = 'true';\n          return;\n        }\n        var src = source.getAttribute('data-src') || '';\n        if (!src) return;\n        if (!source.getAttribute('src')) {\n          source.setAttribute('src', src);\n          if (typeof video.load === 'function') video.load();\n        }\n        video.dataset.nbSourceHydrated = 'true';\n      }\n\n      function playVideo() {\n        if (!video) return;\n        hydrateFounderVideoSource();\n        enforceVideoPolicy();\n        var p = video.play();\n        if (p && typeof p.catch === 'function') p.catch(function () {});\n      }\n\n      function pauseVideo() {\n        if (!video) return;\n        pausingProgrammatically = true;\n        video.pause();\n        window.setTimeout(function () {\n          pausingProgrammatically = false;\n        }, 0);\n      }\n\n      if (video) {\n        if ('IntersectionObserver' in window) {\n          var observer = new IntersectionObserver(\n            function (entries) {\n              entries.forEach(function (entry) {\n                shouldPlay = entry.isIntersecting && entry.intersectionRatio >= 0.45;\n                if (shouldPlay) playVideo();\n                else pauseVideo();\n              });\n            },\n            { threshold: [0, 0.25, 0.45, 0.7] }\n          );\n          observer.observe(section);\n        } else {\n          shouldPlay = true;\n          playVideo();\n        }\n\n        video.addEventListener('pause', function () {\n          if (pausingProgrammatically) return;\n          if (shouldPlay) playVideo();\n        });\n\n        video.addEventListener('loadedmetadata', function () {\n          enforceVideoPolicy();\n          syncDesktopHeights();\n        });\n\n        document.addEventListener('visibilitychange', function () {\n          if (document.hidden) {\n            pauseVideo();\n            return;\n          }\n          if (shouldPlay) playVideo();\n        });\n\n        enforceVideoPolicy();\n        if (!('IntersectionObserver' in window)) {\n          shouldPlay = true;\n          playVideo();\n        }\n      }\n\n      if (window.ResizeObserver) {\n        var ro = new ResizeObserver(function () {\n          syncDesktopHeights();\n        });\n        ro.observe(copy);\n      }\n\n      syncDesktopHeights();\n      window.addEventListener('resize', syncDesktopHeights, { passive: true });\n      if (desktopMq.addEventListener) desktopMq.addEventListener('change', syncDesktopHeights);\n      else if (desktopMq.addListener) desktopMq.addListener(syncDesktopHeights);\n    });\n  }\n\n  var mobileVideoViewportController = null;\n\n  function createMobileVideoViewportController() {\n    var observedVideos = [];\n    var mobileMq = window.matchMedia('(max-width: 1120px), (pointer: coarse)');\n    var observer = null;\n    var syncRaf = 0;\n    var manualSyncBound = false;\n    var activationBound = false;\n    var iosAutoPlayBoost = /iP(hone|ad|od)/.test(navigator.userAgent || '') ||\n      (/Mac/.test(navigator.platform || '') && navigator.maxTouchPoints > 1);\n\n    function isMobileMode() {\n      return !!mobileMq.matches;\n    }\n\n    function getState(video) {\n      if (!video.__nbMobileViewportState) {\n        video.__nbMobileViewportState = {\n          visible: false,\n          retryTimer: 0,\n          retryCount: 0\n        };\n      }\n      return video.__nbMobileViewportState;\n    }\n\n    function shouldKeepAudio(video) {\n      return !!(video && video.dataset && video.dataset.nbUserUnmuted === 'true');\n    }\n\n    function isFirstWithin(container, node, selector) {\n      if (!container || !node) return false;\n      var first = container.querySelector(selector);\n      return first === node;\n    }\n\n    function isContextAutoplayAllowed(video) {\n      if (!video || !video.isConnected) return false;\n\n      var guideStep = video.closest('.nb-guide-pro__step, .nb-home-guide-steps__card, .nb-purpose-primer__step-card');\n      if (guideStep) {\n        if (guideStep.classList.contains('is-active')) return true;\n        var guideRail = guideStep.parentElement;\n        return isFirstWithin(guideRail, guideStep, '.nb-guide-pro__step, .nb-home-guide-steps__card, .nb-purpose-primer__step-card');\n      }\n\n      var videoCard = video.closest('.nb-video-card');\n      if (videoCard) {\n        if (videoCard.classList.contains('is-active')) return true;\n        var videoGrid = videoCard.parentElement;\n        var activeVideoCard = videoGrid ? videoGrid.querySelector('.nb-video-card.is-active') : null;\n        if (activeVideoCard) return activeVideoCard === videoCard;\n        return isFirstWithin(videoGrid, videoCard, '.nb-video-card');\n      }\n\n      return true;\n    }\n\n    function applyAutoplayPolicy(video) {\n      if (!video) return;\n      video.playsInline = true;\n      video.autoplay = true;\n      video.defaultMuted = true;\n      video.setAttribute('playsinline', '');\n      video.setAttribute('webkit-playsinline', 'true');\n      video.setAttribute('autoplay', '');\n      if (video.preload === 'none') video.preload = 'metadata';\n      if (!shouldKeepAudio(video)) {\n        video.muted = true;\n        video.setAttribute('muted', '');\n      }\n    }\n\n    function hydrateVideoSource(video) {\n      if (!video || video.dataset.nbSourceHydrated === 'true') return;\n      var source = video.querySelector('source[data-src]');\n      if (!source) {\n        video.dataset.nbSourceHydrated = 'true';\n        return;\n      }\n      var src = source.getAttribute('data-src') || '';\n      if (!src) return;\n      if (!source.getAttribute('src')) {\n        source.setAttribute('src', src);\n        if (typeof video.load === 'function') video.load();\n      }\n      video.dataset.nbSourceHydrated = 'true';\n    }\n\n    function clearRetry(video) {\n      var state = getState(video);\n      if (!state.retryTimer) return;\n      window.clearTimeout(state.retryTimer);\n      state.retryTimer = 0;\n    }\n\n    function canAttemptPlay(video) {\n      if (!video) return false;\n      var state = getState(video);\n      return state.visible && isMobileMode() && !document.hidden;\n    }\n\n    function scheduleRetry(video) {\n      var state = getState(video);\n      clearRetry(video);\n      if (!canAttemptPlay(video)) return;\n      var maxRetries = iosAutoPlayBoost ? 36 : 16;\n      if (state.retryCount >= maxRetries) return;\n      state.retryCount += 1;\n      var baseDelay = iosAutoPlayBoost ? 70 : 100;\n      var delayStep = iosAutoPlayBoost ? 90 : 120;\n      var delayCap = iosAutoPlayBoost ? 1800 : 1500;\n      var delay = Math.min(delayCap, baseDelay + state.retryCount * delayStep);\n      state.retryTimer = window.setTimeout(function () {\n        state.retryTimer = 0;\n        if (!canAttemptPlay(video)) return;\n        playVideo(video);\n      }, delay);\n    }\n\n    function playVideo(video) {\n      if (!canAttemptPlay(video)) return;\n      applyAutoplayPolicy(video);\n      hydrateVideoSource(video);\n      var state = getState(video);\n      var readyState = Number(video.readyState || 0);\n      if (readyState < 2) {\n        video.addEventListener('loadeddata', function onLoaded() {\n          if (canAttemptPlay(video)) playVideo(video);\n        }, { once: true });\n        video.addEventListener('canplay', function onCanPlay() {\n          if (canAttemptPlay(video)) playVideo(video);\n        }, { once: true });\n      }\n      var playPromise = null;\n      try {\n        playPromise = video.play();\n      } catch (_err) {\n        scheduleRetry(video);\n        return;\n      }\n      if (playPromise && typeof playPromise.catch === 'function') {\n        playPromise\n          .then(function () {\n            clearRetry(video);\n            state.retryCount = 0;\n          })\n          .catch(function () {\n            scheduleRetry(video);\n          });\n      } else {\n        clearRetry(video);\n        state.retryCount = 0;\n      }\n    }\n\n    function pauseVideo(video) {\n      if (!video) return;\n      clearRetry(video);\n      if (!video.paused) video.pause();\n    }\n\n    function setVideoVisibility(video, ratio, intersecting) {\n      if (!video) return;\n      var state = getState(video);\n      if (!isMobileMode()) {\n        return;\n      }\n      var startThreshold = iosAutoPlayBoost ? 0.24 : 0.55;\n      var keepThreshold = iosAutoPlayBoost ? 0.08 : 0.18;\n      var nextVisible = state.visible\n        ? (intersecting && ratio >= keepThreshold)\n        : (intersecting && ratio >= startThreshold);\n      if (nextVisible === state.visible) {\n        if (nextVisible && video.paused) playVideo(video);\n        return;\n      }\n      state.visible = nextVisible;\n      if (nextVisible) playVideo(video);\n      else pauseVideo(video);\n    }\n\n    function getViewportRatio(node) {\n      if (!node || !node.getBoundingClientRect) return 0;\n      var rect = node.getBoundingClientRect();\n      var viewportWidth = window.innerWidth || document.documentElement.clientWidth || 0;\n      var viewportHeight = window.innerHeight || document.documentElement.clientHeight || 0;\n      var visibleWidth = Math.max(0, Math.min(rect.right, viewportWidth) - Math.max(rect.left, 0));\n      var visibleHeight = Math.max(0, Math.min(rect.bottom, viewportHeight) - Math.max(rect.top, 0));\n      var visibleArea = visibleWidth * visibleHeight;\n      var totalArea = Math.max(1, rect.width * rect.height);\n      return visibleArea / totalArea;\n    }\n\n    function syncAllVideos() {\n      syncRaf = 0;\n      observedVideos = observedVideos.filter(function (video) {\n        if (!video) return false;\n        if (!video.isConnected) {\n          if (observer) observer.unobserve(video);\n          return false;\n        }\n        return true;\n      });\n      observedVideos.forEach(function (video) {\n        var ratio = getViewportRatio(video);\n        setVideoVisibility(video, ratio, ratio > 0.01);\n      });\n    }\n\n    function requestSync() {\n      if (syncRaf) return;\n      syncRaf = window.requestAnimationFrame(syncAllVideos);\n    }\n\n    function bindManualSync() {\n      if (manualSyncBound) return;\n      manualSyncBound = true;\n      window.addEventListener('scroll', requestSync, { passive: true });\n      window.addEventListener('resize', requestSync, { passive: true });\n      window.addEventListener('orientationchange', requestSync, { passive: true });\n      window.addEventListener('pageshow', requestSync);\n    }\n\n    function bindActivationFallback() {\n      if (activationBound) return;\n      activationBound = true;\n      var forceSync = function () {\n        requestSync();\n      };\n      document.addEventListener('touchstart', forceSync, { once: true, passive: true });\n      document.addEventListener('click', forceSync, { once: true, passive: true });\n    }\n\n    if ('IntersectionObserver' in window) {\n      observer = new IntersectionObserver(\n        function (entries) {\n          entries.forEach(function (entry) {\n            setVideoVisibility(entry.target, entry.intersectionRatio || 0, !!entry.isIntersecting);\n          });\n        },\n        { threshold: [0, 0.08, 0.18, 0.35, 0.55, 0.75] }\n      );\n    } else {\n      bindManualSync();\n    }\n\n    document.addEventListener('visibilitychange', function () {\n      if (!isMobileMode()) return;\n      if (document.hidden) {\n        observedVideos.forEach(function (video) {\n          var state = getState(video);\n          state.visible = false;\n          pauseVideo(video);\n        });\n        return;\n      }\n      requestSync();\n    });\n\n    if (mobileMq.addEventListener) {\n      mobileMq.addEventListener('change', requestSync);\n    } else if (mobileMq.addListener) {\n      mobileMq.addListener(requestSync);\n    }\n\n    return {\n      register: function (videos) {\n        if (!videos || !videos.length) return;\n        videos.forEach(function (video) {\n          if (!video || video.__nbMobileViewportManaged) return;\n          if (video.hasAttribute('data-nb-mobile-video-ignore')) return;\n          if (\n            video.hasAttribute('data-nb-home-guide-video') ||\n            video.hasAttribute('data-nb-primer-video') ||\n            video.hasAttribute('data-nb-guide-video') ||\n            video.hasAttribute('data-nb-proof-video') ||\n            video.hasAttribute('data-founder-video') ||\n            video.hasAttribute('data-nb-guide-showcase-home-video')\n          ) {\n            return;\n          }\n          video.__nbMobileViewportManaged = true;\n          observedVideos.push(video);\n          if (observer) observer.observe(video);\n        });\n        bindActivationFallback();\n        if (!observer) bindManualSync();\n      },\n      sync: requestSync\n    };\n  }\n\n  function initMobileVideoViewportAutoplay(rootNode) {\n    var scope = rootNode && rootNode.querySelectorAll ? rootNode : document;\n    var videos = Array.prototype.slice.call(scope.querySelectorAll('video'));\n    if (!videos.length) return;\n    if (!mobileVideoViewportController) {\n      mobileVideoViewportController = createMobileVideoViewportController();\n    }\n    mobileVideoViewportController.register(videos);\n    mobileVideoViewportController.sync();\n  }\n\n  function initHomeGuideStepsRuntimePatch(rootNode) {\n    var ENGINE_VERSION = '2026-04-24-guide-autoplay-force-v3';\n    var compactMq = window.matchMedia('(max-width: 1120px)');\n    var scope = rootNode && rootNode.querySelectorAll ? rootNode : document;\n    var sections = Array.prototype.slice.call(\n      scope.querySelectorAll('[id^=\"nb-home-guide-steps-\"].nb-guide-pro--home-steps')\n    );\n    if (\n      rootNode &&\n      rootNode.matches &&\n      rootNode.matches('[id^=\"nb-home-guide-steps-\"].nb-guide-pro--home-steps')\n    ) {\n      sections.unshift(rootNode);\n    }\n    if (!sections.length) return;\n\n    sections.forEach(function (initialRoot) {\n      var sectionRoot = initialRoot;\n      if (!sectionRoot) return;\n      if (sectionRoot.getAttribute('data-nb-guide-variant') === 'practices') return;\n      if (sectionRoot.getAttribute('data-nb-runtime-steps-patched') === 'true') return;\n\n      // Detach all legacy inline listeners by replacing the section subtree once.\n      if (sectionRoot.getAttribute('data-nb-runtime-steps-cloned') !== 'true') {\n        if (!sectionRoot.parentNode) return;\n        var replacement = sectionRoot.cloneNode(true);\n        sectionRoot.parentNode.replaceChild(replacement, sectionRoot);\n        sectionRoot = replacement;\n        sectionRoot.setAttribute('data-nb-runtime-steps-cloned', 'true');\n      }\n\n      var stepsWrap = sectionRoot.querySelector('[data-nb-home-guide-steps-wrap]');\n      var stepsRail = sectionRoot.querySelector('[data-nb-home-guide-steps]');\n      var stepsIndicator = sectionRoot.querySelector('[data-nb-home-guide-steps-indicator]');\n      if (!stepsWrap || !stepsRail) return;\n\n      var cards = Array.prototype.slice.call(stepsRail.querySelectorAll('.nb-guide-pro__step'));\n      if (!cards.length) return;\n\n      var videoCards = cards.filter(function (card) {\n        return !!card.querySelector('[data-nb-home-guide-video]');\n      });\n      var videos = videoCards.map(function (card) {\n        return card.querySelector('[data-nb-home-guide-video]');\n      });\n      if (!videos.length) return;\n\n      sectionRoot.setAttribute('data-nb-runtime-steps-patched', 'true');\n      sectionRoot.setAttribute('data-nb-steps-engine', ENGINE_VERSION);\n\n      var activeIndex = 0;\n      var sectionVisible = false;\n      var progressRaf = 0;\n      var scrollSyncRaf = 0;\n      var refreshRaf = 0;\n      var gestureKickTs = 0;\n      var autoplayKickTimer = 0;\n\n      function clamp01(value) {\n        return Math.max(0, Math.min(1, Number(value || 0)));\n      }\n\n      function setVideoReadyState(video, isReady) {\n        if (!video) return;\n        var mediaShell = video.closest ? video.closest('.nb-guide-pro__step-media') : null;\n        if (!mediaShell) return;\n        mediaShell.classList.toggle('is-video-ready', !!isReady);\n      }\n\n      function setVideoPlayingState(video, isPlaying) {\n        if (!video) return;\n        var mediaShell = video.closest ? video.closest('.nb-guide-pro__step-media') : null;\n        if (!mediaShell) return;\n        mediaShell.classList.toggle('is-video-playing', !!isPlaying);\n      }\n\n      function setCardProgress(card, ratio) {\n        if (!card) return;\n        card.style.setProperty('--nb-guide-progress', String(clamp01(ratio)));\n      }\n\n      function resolvePlaybackRate(video, fallbackIndex) {\n        if (!video) return 1;\n        var attrValue = Number.parseFloat(video.getAttribute('data-nb-step-playback-rate') || '');\n        if (Number.isFinite(attrValue) && attrValue > 0) return attrValue;\n\n        var card = video.closest ? video.closest('.nb-guide-pro__step') : null;\n        var stepIndex = Number.parseInt(card ? card.getAttribute('data-nb-step-index') : '', 10);\n        if (!Number.isFinite(stepIndex) || stepIndex < 1) stepIndex = Number(fallbackIndex || 0) + 1;\n        return stepIndex === 3 ? 1.5 : 1;\n      }\n\n      function applyPlaybackRate(video, fallbackIndex) {\n        if (!video) return 1;\n        var targetRate = resolvePlaybackRate(video, fallbackIndex);\n        try {\n          if (Math.abs(Number(video.defaultPlaybackRate || 1) - targetRate) > 0.001) {\n            video.defaultPlaybackRate = targetRate;\n          }\n        } catch (_errDefaultRate) {}\n        try {\n          if (Math.abs(Number(video.playbackRate || 1) - targetRate) > 0.001) {\n            video.playbackRate = targetRate;\n          }\n        } catch (_errRate) {}\n        return targetRate;\n      }\n\n      function setVideoPreload(video, mode) {\n        if (!video) return;\n        var nextMode = mode === 'auto' ? 'auto' : mode === 'metadata' ? 'metadata' : 'none';\n        if (video.preload !== nextMode) video.preload = nextMode;\n        if (video.getAttribute('preload') !== nextMode) {\n          video.setAttribute('preload', nextMode);\n        }\n      }\n\n      function setVideoAutoplayIntent(video, shouldAutoplay) {\n        if (!video) return;\n        if (shouldAutoplay) {\n          video.autoplay = true;\n          video.setAttribute('autoplay', '');\n          return;\n        }\n        video.autoplay = false;\n        video.removeAttribute('autoplay');\n      }\n\n      function ensureVideo(video, fallbackIndex, shouldAutoplay) {\n        if (!video) return;\n        setVideoAutoplayIntent(video, shouldAutoplay === true);\n        video.loop = false;\n        video.playsInline = true;\n        video.defaultMuted = true;\n        video.muted = true;\n        video.controls = false;\n        video.removeAttribute('loop');\n        video.setAttribute('playsinline', '');\n        video.setAttribute('webkit-playsinline', 'true');\n        video.setAttribute('muted', '');\n        video.removeAttribute('controls');\n        video.setAttribute('disablepictureinpicture', '');\n        var preloadMode = Number(fallbackIndex) === Number(activeIndex) ? 'metadata' : 'none';\n        setVideoPreload(video, preloadMode);\n        applyPlaybackRate(video, fallbackIndex);\n      }\n\n      function hydrateVideo(video, forceReload, fallbackIndex, options) {\n        if (!video) return;\n        var settings = options || {};\n        ensureVideo(video, fallbackIndex, settings.autoplay === true);\n        var source = video.querySelector('source');\n        var targetSrc = '';\n        if (source) {\n          targetSrc =\n            source.getAttribute('src') ||\n            source.getAttribute('data-src') ||\n            video.getAttribute('data-nb-step-video-url') ||\n            '';\n        } else {\n          targetSrc = video.getAttribute('src') || video.getAttribute('data-nb-step-video-url') || '';\n        }\n        if (!targetSrc) return;\n\n        var changed = false;\n        if (source) {\n          if (source.getAttribute('src') !== targetSrc) {\n            source.setAttribute('src', targetSrc);\n            changed = true;\n          }\n        } else if (video.getAttribute('src') !== targetSrc) {\n          video.setAttribute('src', targetSrc);\n          changed = true;\n        }\n\n        if (forceReload === true || changed || video.dataset.nbSourceHydrated !== 'true') {\n          setVideoReadyState(video, false);\n          setVideoPlayingState(video, false);\n          try {\n            if (typeof video.load === 'function') video.load();\n          } catch (_errLoad) {}\n        }\n        video.dataset.nbSourceHydrated = 'true';\n        if (video.readyState >= 2) setVideoReadyState(video, true);\n      }\n\n      function playVideo(video, restart, fallbackIndex) {\n        if (!video) return;\n        setVideoPreload(video, 'auto');\n        hydrateVideo(video, false, fallbackIndex, { autoplay: true });\n        if (restart === true) {\n          try {\n            video.currentTime = 0;\n          } catch (_errCurrentTime) {}\n        }\n\n        var tryPlay = function () {\n          if (!sectionVisible || document.hidden) return;\n          if (videos[activeIndex] !== video) return;\n          applyPlaybackRate(video, fallbackIndex);\n          var playPromise = video.play();\n          if (playPromise && typeof playPromise.catch === 'function') {\n            if (typeof playPromise.then === 'function') {\n              playPromise.then(function () {\n                if (videos[activeIndex] === video && !video.paused && !video.ended) {\n                  setVideoPlayingState(video, true);\n                }\n              }).catch(function () {\n                setVideoPlayingState(video, false);\n                var retryCount = Number.parseInt(video.dataset.nbGuidePlayRetries || '0', 10);\n                if (!Number.isFinite(retryCount)) retryCount = 0;\n                if (retryCount < 6 && videos[activeIndex] === video && sectionVisible && !document.hidden) {\n                  video.dataset.nbGuidePlayRetries = String(retryCount + 1);\n                  window.setTimeout(function () {\n                    if (videos[activeIndex] === video && sectionVisible && !document.hidden && video.paused) {\n                      playVideo(video, false, fallbackIndex);\n                    }\n                  }, 180 + retryCount * 160);\n                }\n              });\n            } else {\n              playPromise.catch(function () {\n                setVideoPlayingState(video, false);\n              });\n            }\n          } else if (!video.paused && !video.ended) {\n            setVideoPlayingState(video, true);\n          }\n        };\n\n        if (video.readyState >= 2) {\n          setVideoReadyState(video, true);\n          applyPlaybackRate(video, fallbackIndex);\n          tryPlay();\n          return;\n        }\n\n        var onReady = function () {\n          if (!sectionVisible || document.hidden) return;\n          if (videos[activeIndex] !== video) return;\n          setVideoReadyState(video, true);\n          tryPlay();\n        };\n        video.addEventListener('loadeddata', onReady, { once: true });\n        video.addEventListener('canplay', onReady, { once: true });\n      }\n\n      function scheduleAutoplayKick(attempt) {\n        if (autoplayKickTimer) window.clearTimeout(autoplayKickTimer);\n        var nextAttempt = Number(attempt || 0);\n        if (nextAttempt > 10) return;\n        autoplayKickTimer = window.setTimeout(function () {\n          autoplayKickTimer = 0;\n          if (!sectionVisible || document.hidden) return;\n          var currentVideo = videos[activeIndex] || videos[0];\n          if (!currentVideo) return;\n          currentVideo.muted = true;\n          currentVideo.defaultMuted = true;\n          currentVideo.playsInline = true;\n          currentVideo.setAttribute('muted', '');\n          currentVideo.setAttribute('playsinline', '');\n          currentVideo.setAttribute('webkit-playsinline', 'true');\n          playVideo(currentVideo, false, activeIndex);\n          window.setTimeout(function () {\n            if (sectionVisible && !document.hidden && videos[activeIndex] === currentVideo && currentVideo.paused) {\n              scheduleAutoplayKick(nextAttempt + 1);\n            }\n          }, 120);\n        }, nextAttempt === 0 ? 0 : Math.min(900, 120 + nextAttempt * 110));\n      }\n\n      function pauseVideo(video) {\n        if (!video) return;\n        try {\n          video.pause();\n        } catch (_errPause) {}\n        setVideoPlayingState(video, false);\n      }\n\n      function stopProgressLoop() {\n        if (!progressRaf) return;\n        cancelAnimationFrame(progressRaf);\n        progressRaf = 0;\n      }\n\n      function startProgressLoop() {\n        stopProgressLoop();\n        var tick = function () {\n          if (!sectionVisible || document.hidden) {\n            stopProgressLoop();\n            return;\n          }\n          var currentVideo = videos[activeIndex];\n          var currentCard = videoCards[activeIndex];\n          if (currentVideo && currentCard) {\n            var duration = Number(currentVideo.duration || 0);\n            var ratio = duration > 0 ? Number(currentVideo.currentTime || 0) / duration : 0;\n            setCardProgress(currentCard, ratio);\n          }\n          progressRaf = requestAnimationFrame(tick);\n        };\n        progressRaf = requestAnimationFrame(tick);\n      }\n\n      function markActiveCard(cardToActivate) {\n        cards.forEach(function (card) {\n          var isActive = card === cardToActivate;\n          card.classList.toggle('is-active', isActive);\n          if (!isActive) setCardProgress(card, 0);\n        });\n      }\n\n      function centerCard(card) {\n        if (!compactMq.matches || !card || !stepsRail) return;\n        try {\n          var left = card.offsetLeft - Math.max(0, (stepsRail.clientWidth - card.clientWidth) / 2);\n          stepsRail.scrollTo({ left: left, behavior: 'smooth' });\n        } catch (_errScroll) {}\n      }\n\n      function getCenteredVideoIndex() {\n        if (!stepsRail || !videoCards.length) return -1;\n        var railCenter = stepsRail.getBoundingClientRect().left + stepsRail.clientWidth / 2;\n        var bestIndex = 0;\n        var bestDistance = Infinity;\n        videoCards.forEach(function (card, index) {\n          var rect = card.getBoundingClientRect();\n          var cardCenter = rect.left + rect.width / 2;\n          var distance = Math.abs(cardCenter - railCenter);\n          if (distance < bestDistance) {\n            bestDistance = distance;\n            bestIndex = index;\n          }\n        });\n        return bestIndex;\n      }\n\n      function isNodeVisibleInViewport(node) {\n        if (!node) return false;\n        var rect = node.getBoundingClientRect();\n        if (rect.width <= 0 || rect.height <= 0) return false;\n        var vw = window.innerWidth || document.documentElement.clientWidth || 0;\n        var vh = window.innerHeight || document.documentElement.clientHeight || 0;\n        var visibleWidth = Math.max(0, Math.min(rect.right, vw) - Math.max(rect.left, 0));\n        var visibleHeight = Math.max(0, Math.min(rect.bottom, vh) - Math.max(rect.top, 0));\n        var visibleRatio = (visibleWidth * visibleHeight) / Math.max(1, rect.width * rect.height);\n        return visibleRatio > 0.08;\n      }\n\n      function ensureRailDots() {\n        if (!stepsIndicator) return;\n        if (stepsIndicator.children.length === videoCards.length) return;\n        stepsIndicator.innerHTML = '';\n        for (var i = 0; i < videoCards.length; i += 1) {\n          var dot = document.createElement('span');\n          dot.className = 'nb-guide-pro__rail-dot';\n          stepsIndicator.appendChild(dot);\n        }\n      }\n\n      function updateRailState() {\n        var maxLeft = Math.max(0, stepsRail.scrollWidth - stepsRail.clientWidth);\n        var isScrollable = compactMq.matches && maxLeft > 8;\n        stepsWrap.classList.toggle('is-scrollable', isScrollable);\n        stepsWrap.classList.toggle('is-at-start', !isScrollable || stepsRail.scrollLeft <= 8);\n        stepsWrap.classList.toggle('is-at-end', !isScrollable || stepsRail.scrollLeft >= maxLeft - 8);\n\n        ensureRailDots();\n        if (!stepsIndicator) return;\n        stepsIndicator.style.display = isScrollable ? '' : 'none';\n        if (!isScrollable) return;\n\n        var dotIndex = compactMq.matches ? getCenteredVideoIndex() : activeIndex;\n        if (dotIndex < 0) dotIndex = activeIndex;\n        Array.prototype.forEach.call(stepsIndicator.children, function (dot, index) {\n          dot.classList.toggle('is-active', index === dotIndex);\n        });\n      }\n\n      function syncPlayback(options) {\n        var settings = options || {};\n        if (!sectionVisible || document.hidden) {\n          videos.forEach(function (video) {\n            setVideoPreload(video, 'none');\n            pauseVideo(video);\n          });\n          stopProgressLoop();\n          updateRailState();\n          return;\n        }\n\n        var activeCard = videoCards[activeIndex];\n        var activeVideo = videos[activeIndex];\n        if (!activeCard || !activeVideo) {\n          updateRailState();\n          return;\n        }\n\n        markActiveCard(activeCard);\n\n        videos.forEach(function (video, index) {\n          if (index === activeIndex) {\n            setVideoPreload(video, 'metadata');\n            setVideoAutoplayIntent(video, true);\n            playVideo(video, settings.restart === true, index);\n          } else {\n            setVideoPreload(video, 'none');\n            setVideoAutoplayIntent(video, false);\n            pauseVideo(video);\n            if (settings.resetOthers === true) {\n              try {\n                video.currentTime = 0;\n              } catch (_errReset) {}\n            }\n            setCardProgress(videoCards[index], 0);\n          }\n        });\n\n        var nextIndex = (activeIndex + 1) % videos.length;\n        var nextVideo = videos[nextIndex];\n        if (nextVideo && nextIndex !== activeIndex) {\n          setVideoPreload(nextVideo, 'metadata');\n          setVideoAutoplayIntent(nextVideo, false);\n          hydrateVideo(nextVideo, false, nextIndex, { autoplay: false });\n          pauseVideo(nextVideo);\n        }\n\n        startProgressLoop();\n        updateRailState();\n        scheduleAutoplayKick(0);\n      }\n\n      function goTo(index, options) {\n        var settings = options || {};\n        activeIndex = (index + videos.length) % videos.length;\n        syncPlayback({ restart: settings.restart === true, resetOthers: true });\n        if (settings.center === true) centerCard(videoCards[activeIndex]);\n      }\n\n      function syncFromScroll() {\n        scrollSyncRaf = 0;\n        if (!compactMq.matches || !sectionVisible || document.hidden) return;\n        var centered = getCenteredVideoIndex();\n        if (centered < 0 || centered === activeIndex) return;\n        activeIndex = centered;\n        syncPlayback({ restart: true, resetOthers: true });\n      }\n\n      function refreshViewportState() {\n        if (refreshRaf) cancelAnimationFrame(refreshRaf);\n        refreshRaf = requestAnimationFrame(function () {\n          refreshRaf = 0;\n          sectionVisible = isNodeVisibleInViewport(stepsRail);\n          syncPlayback();\n        });\n      }\n\n      function kickPlaybackFromGesture() {\n        var now = Date.now();\n        if (now - gestureKickTs < 140) return;\n        gestureKickTs = now;\n        if (!sectionVisible || document.hidden) return;\n        var current = videos[activeIndex] || videos[0];\n        if (!current || !current.paused) return;\n        playVideo(current, false, activeIndex);\n      }\n\n      videos.forEach(function (video, index) {\n        ensureVideo(video, index);\n        var shouldPrime = index === activeIndex || index === ((activeIndex + 1) % videos.length);\n        if (shouldPrime) hydrateVideo(video, false, index);\n\n        video.addEventListener('loadedmetadata', function () {\n          applyPlaybackRate(video, index);\n          if (index !== activeIndex) return;\n          setCardProgress(videoCards[index], 0);\n        });\n\n        video.addEventListener('loadeddata', function () {\n          setVideoReadyState(video, true);\n          if (index === activeIndex && sectionVisible && !document.hidden && video.paused) {\n            playVideo(video, false, index);\n          }\n        });\n\n        video.addEventListener('canplay', function () {\n          setVideoReadyState(video, true);\n          if (index === activeIndex && sectionVisible && !document.hidden && video.paused) {\n            playVideo(video, false, index);\n          }\n        });\n\n        video.addEventListener('playing', function () {\n          setVideoReadyState(video, true);\n          setVideoPlayingState(video, true);\n          video.dataset.nbGuidePlayRetries = '0';\n        });\n\n        video.addEventListener('pause', function () {\n          setVideoPlayingState(video, false);\n        });\n\n        video.addEventListener('timeupdate', function () {\n          if (index !== activeIndex) return;\n          var duration = Number(video.duration || 0);\n          var ratio = duration > 0 ? Number(video.currentTime || 0) / duration : 0;\n          setCardProgress(videoCards[index], ratio);\n        });\n\n        video.addEventListener('ended', function () {\n          setVideoPlayingState(video, false);\n          if (index !== activeIndex) return;\n          setCardProgress(videoCards[index], 1);\n          goTo(activeIndex + 1, { restart: true, center: compactMq.matches });\n        });\n\n        video.addEventListener('waiting', function () {\n          setVideoPlayingState(video, false);\n          if (index !== activeIndex || !sectionVisible || document.hidden) return;\n          playVideo(video, false, index);\n        });\n\n        video.addEventListener('stalled', function () {\n          setVideoPlayingState(video, false);\n          if (index !== activeIndex || !sectionVisible || document.hidden) return;\n          playVideo(video, false, index);\n        });\n\n        video.addEventListener('error', function () {\n          setVideoReadyState(video, false);\n          setVideoPlayingState(video, false);\n          if (video.dataset.nbRetryAttempted === 'true') return;\n          video.dataset.nbRetryAttempted = 'true';\n          hydrateVideo(video, true, index);\n          if (index === activeIndex) playVideo(video, true, index);\n        });\n      });\n\n      videoCards.forEach(function (card, index) {\n        card.addEventListener('click', function () {\n          goTo(index, { restart: true, center: compactMq.matches });\n        });\n      });\n\n      if ('IntersectionObserver' in window) {\n        var observer = new IntersectionObserver(\n          function (entries) {\n            var entry = entries[0];\n            sectionVisible = !!(entry && entry.isIntersecting && entry.intersectionRatio > 0.08);\n            syncPlayback();\n            if (sectionVisible) scheduleAutoplayKick(0);\n          },\n          { threshold: [0, 0.08, 0.2, 0.45], rootMargin: '160px 0px -10% 0px' }\n        );\n        observer.observe(stepsRail);\n      } else {\n        sectionVisible = isNodeVisibleInViewport(stepsRail);\n      }\n\n      document.addEventListener('visibilitychange', function () {\n        if (!document.hidden) {\n          sectionVisible = isNodeVisibleInViewport(stepsRail);\n        }\n        syncPlayback();\n      });\n\n      var onCompactChange = function () {\n        if (compactMq.matches) {\n          var centered = getCenteredVideoIndex();\n          if (centered >= 0) activeIndex = centered;\n        }\n        syncPlayback();\n      };\n      if (compactMq.addEventListener) compactMq.addEventListener('change', onCompactChange);\n      else if (compactMq.addListener) compactMq.addListener(onCompactChange);\n\n      window.addEventListener('pageshow', function () {\n        sectionVisible = isNodeVisibleInViewport(stepsRail);\n        syncPlayback();\n        if (sectionVisible) scheduleAutoplayKick(0);\n      });\n\n      stepsRail.addEventListener(\n        'scroll',\n        function () {\n          updateRailState();\n          if (scrollSyncRaf) cancelAnimationFrame(scrollSyncRaf);\n          scrollSyncRaf = requestAnimationFrame(syncFromScroll);\n        },\n        { passive: true }\n      );\n\n      document.addEventListener('touchstart', kickPlaybackFromGesture, { passive: true });\n      document.addEventListener('touchmove', kickPlaybackFromGesture, { passive: true });\n      document.addEventListener('click', kickPlaybackFromGesture, { passive: true });\n      window.addEventListener('resize', refreshViewportState, { passive: true });\n      window.addEventListener('orientationchange', refreshViewportState, { passive: true });\n      window.addEventListener('scroll', refreshViewportState, { passive: true });\n\n      sectionVisible = isNodeVisibleInViewport(stepsRail);\n      syncPlayback({ restart: true, resetOthers: true });\n      if (sectionVisible) scheduleAutoplayKick(0);\n      window.setTimeout(refreshViewportState, 120);\n      window.setTimeout(refreshViewportState, 520);\n      window.setTimeout(updateRailState, 220);\n    });\n  }\n\n  var heroTitleThreeLineFitRaf = 0;\n  var heroTitleThreeLineFitTimeout = 0;\n  var heroTitleThreeLineFitBootstrapped = false;\n\n  function getElementLineHeightPx(node) {\n    if (!node) return 0;\n    var computed = window.getComputedStyle(node);\n    var lineHeight = toFiniteNumber(computed.lineHeight, 0);\n    if (lineHeight > 0) return lineHeight;\n    var fontSize = toFiniteNumber(computed.fontSize, 16);\n    return fontSize * 1.12;\n  }\n\n  function measureElementLineCount(node) {\n    if (!node) return 1;\n    var lineHeight = getElementLineHeightPx(node);\n    var lineTopTolerance = Math.max(2, lineHeight * 0.32);\n    if (document.createRange) {\n      try {\n        var range = document.createRange();\n        range.selectNodeContents(node);\n        var rects = range.getClientRects();\n        if (rects && rects.length) {\n          var uniqueTops = [];\n          for (var i = 0; i < rects.length; i += 1) {\n            var rect = rects[i];\n            if (!rect || rect.height < 0.5 || rect.width < 0.5) continue;\n            var normalizedTop = Math.round(rect.top * 2) / 2;\n            var known = false;\n            for (var j = 0; j < uniqueTops.length; j += 1) {\n              if (Math.abs(uniqueTops[j] - normalizedTop) <= lineTopTolerance) {\n                known = true;\n                break;\n              }\n            }\n            if (!known) uniqueTops.push(normalizedTop);\n          }\n          if (uniqueTops.length) return uniqueTops.length;\n        }\n      } catch (_err) {}\n    }\n    if (lineHeight <= 0) return 1;\n    return Math.max(1, node.scrollHeight / lineHeight);\n  }\n\n  function fitHeroTitleToMaxLines(title, maxLines) {\n    if (!title || !maxLines || maxLines < 1) return;\n    var width = Math.ceil(title.getBoundingClientRect().width || 0);\n    if (width < 8) return;\n\n    title.style.removeProperty('font-size');\n    var baseFontSize = toFiniteNumber(window.getComputedStyle(title).fontSize, 0);\n    if (baseFontSize <= 0) return;\n\n    var lineCount = measureElementLineCount(title);\n    if (lineCount <= maxLines + 0.02) {\n      if (lineCount >= maxLines - 0.02) return;\n\n      var maxGrowScale = toFiniteNumber(title.getAttribute('data-nb-fit-max-scale'), 1.18);\n      if (maxGrowScale <= 1) return;\n\n      var growLow = baseFontSize;\n      var growHigh = baseFontSize * Math.min(maxGrowScale, 1.34);\n      var growBest = baseFontSize;\n\n      for (var g = 0; g < 18; g += 1) {\n        var growMid = (growLow + growHigh) / 2;\n        title.style.setProperty('font-size', growMid.toFixed(3) + 'px', 'important');\n        lineCount = measureElementLineCount(title);\n        if (lineCount <= maxLines + 0.02) {\n          growBest = growMid;\n          growLow = growMid + 0.05;\n        } else {\n          growHigh = growMid - 0.05;\n        }\n        if (growLow > growHigh) break;\n      }\n\n      title.style.setProperty('font-size', growBest.toFixed(3) + 'px', 'important');\n      return;\n    }\n\n    var minFontSize = Math.max(8.5, Math.min(baseFontSize - 0.1, baseFontSize * 0.52));\n    var low = minFontSize;\n    var high = baseFontSize;\n    var best = minFontSize;\n\n    for (var i = 0; i < 20; i += 1) {\n      var mid = (low + high) / 2;\n      title.style.setProperty('font-size', mid.toFixed(3) + 'px', 'important');\n      lineCount = measureElementLineCount(title);\n      if (lineCount <= maxLines + 0.02) {\n        best = mid;\n        low = mid + 0.05;\n      } else {\n        high = mid - 0.05;\n      }\n      if (low > high) break;\n    }\n\n    title.style.setProperty('font-size', best.toFixed(3) + 'px', 'important');\n    var guard = 0;\n    while (measureElementLineCount(title) > maxLines + 0.02 && best > 8.5 && guard < 28) {\n      best = Math.max(8.5, best - 0.35);\n      title.style.setProperty('font-size', best.toFixed(3) + 'px', 'important');\n      guard += 1;\n    }\n  }\n\n  function applyHeroTitleMaxLines(scope) {\n    var root = scope && scope.querySelectorAll ? scope : document;\n    var titles = root.querySelectorAll('[data-nb-hero-title]');\n    if (!titles.length && root !== document) return;\n    if (!titles.length) return;\n\n    titles.forEach(function (title) {\n      var fitDisabledRoot = title.closest('[data-nb-hero-disable-title-fit=\"true\"]');\n      if (fitDisabledRoot) {\n        title.style.removeProperty('font-size');\n        return;\n      }\n      var maxLines = Math.round(toFiniteNumber(title.getAttribute('data-nb-max-lines'), 3));\n      if (maxLines < 1) maxLines = 3;\n      fitHeroTitleToMaxLines(title, maxLines);\n    });\n  }\n\n  function scheduleHeroTitleMaxLines(scope) {\n    var scopedRoot = scope && scope.querySelectorAll ? scope : null;\n    if (scopedRoot) {\n      window.requestAnimationFrame(function () {\n        applyHeroTitleMaxLines(scopedRoot);\n      });\n    }\n\n    if (heroTitleThreeLineFitRaf) cancelAnimationFrame(heroTitleThreeLineFitRaf);\n    heroTitleThreeLineFitRaf = requestAnimationFrame(function () {\n      heroTitleThreeLineFitRaf = 0;\n      applyHeroTitleMaxLines(document);\n    });\n\n    if (heroTitleThreeLineFitTimeout) clearTimeout(heroTitleThreeLineFitTimeout);\n    heroTitleThreeLineFitTimeout = window.setTimeout(function () {\n      heroTitleThreeLineFitTimeout = 0;\n      applyHeroTitleMaxLines(document);\n    }, 180);\n  }\n\n  function initHeroTitleMaxLines(scope) {\n    if (scope && scope.querySelectorAll) {\n      scheduleHeroTitleMaxLines(scope);\n    }\n\n    if (heroTitleThreeLineFitBootstrapped) return;\n    heroTitleThreeLineFitBootstrapped = true;\n\n    var scheduleAll = function () {\n      scheduleHeroTitleMaxLines(document);\n    };\n\n    window.addEventListener('resize', scheduleAll, { passive: true });\n    window.addEventListener('orientationchange', scheduleAll, { passive: true });\n    window.addEventListener('pageshow', scheduleAll);\n    document.addEventListener('visibilitychange', function () {\n      if (!document.hidden) scheduleAll();\n    });\n\n    if (document.fonts && typeof document.fonts.addEventListener === 'function') {\n      document.fonts.addEventListener('loadingdone', scheduleAll);\n    } else if (document.fonts && document.fonts.ready && typeof document.fonts.ready.then === 'function') {\n      document.fonts.ready.then(scheduleAll).catch(function () {});\n    }\n\n    if ('MutationObserver' in window) {\n      var heroRoot = document.querySelector('[data-nb-hero]');\n      if (heroRoot) {\n        var mutationObserver = new MutationObserver(function (mutations) {\n          var shouldRefit = false;\n          for (var i = 0; i < mutations.length; i += 1) {\n            var mutation = mutations[i];\n            if (!mutation) continue;\n            if (mutation.type === 'characterData') {\n              var parentNode = mutation.target && mutation.target.parentElement;\n              if (parentNode && parentNode.closest && parentNode.closest('[data-nb-hero-title]')) {\n                shouldRefit = true;\n                break;\n              }\n            } else if (mutation.target && mutation.target.closest && mutation.target.closest('[data-nb-hero-title]')) {\n              shouldRefit = true;\n              break;\n            }\n          }\n          if (shouldRefit) scheduleAll();\n        });\n        mutationObserver.observe(heroRoot, { childList: true, subtree: true, characterData: true });\n      }\n    }\n\n    scheduleHeroTitleMaxLines(document);\n  }\n\n  function initHeroAbRuntimeFix() {\n    var root = document.querySelector('[data-nb-hero]');\n    if (!root) return;\n    if (root.getAttribute('data-nb-hero-runtime-ab-patched') === 'true') return;\n\n    var desktopImage = root.querySelector('[data-nb-hero-media-desktop]');\n    var mobileImage = root.querySelector('[data-nb-hero-media-mobile]');\n    if (!desktopImage || !mobileImage) return;\n\n    var variantASrc = desktopImage.getAttribute('data-variant-a-src') || '';\n    var variantBSrc = desktopImage.getAttribute('data-variant-b-src') || '';\n    if (!variantASrc || !variantBSrc) return;\n\n    var currentTestName = String(root.getAttribute('data-nb-hero-test-name') || '').trim();\n    var stickyRaw = root.getAttribute('data-nb-hero-sticky-assignment');\n    var needsFix = currentTestName !== 'hero_image_v2' || stickyRaw === null || stickyRaw === '';\n    if (!needsFix) return;\n\n    var testSignature = String(root.getAttribute('data-nb-hero-test-signature') || '');\n    function hashSignature(value) {\n      var hash = 5381;\n      var str = String(value || '');\n      for (var i = 0; i < str.length; i += 1) {\n        hash = ((hash << 5) + hash) + str.charCodeAt(i);\n      }\n      return (hash >>> 0).toString(36);\n    }\n\n    function writeCookie(name, value, days) {\n      var maxAge = Math.max(1, Math.floor((Number(days) || 365) * 24 * 60 * 60));\n      document.cookie = name + '=' + encodeURIComponent(value) + '; path=/; max-age=' + maxAge + '; SameSite=Lax';\n    }\n\n    function readCookie(name) {\n      var escaped = String(name || '').replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n      var match = document.cookie.match(new RegExp('(?:^|; )' + escaped + '=([^;]*)'));\n      return match ? decodeURIComponent(match[1]) : '';\n    }\n\n    var signatureHash = testSignature ? hashSignature(testSignature) : '';\n    var v2TestKey = signatureHash ? ('hero_image_v2__' + signatureHash) : 'hero_image_v2';\n    var v2StorageKey = 'nb_hero_ab_' + v2TestKey;\n\n    function readV2Variant() {\n      var local = '';\n      try {\n        local = window.localStorage ? window.localStorage.getItem(v2StorageKey) : '';\n      } catch (_err) {\n        local = '';\n      }\n      if (local === 'A' || local === 'B') return local;\n      var fromCookie = readCookie(v2StorageKey);\n      if (fromCookie === 'A' || fromCookie === 'B') return fromCookie;\n      return '';\n    }\n\n    function persistV2Variant(variant) {\n      try {\n        if (window.localStorage) window.localStorage.setItem(v2StorageKey, variant);\n      } catch (_err) {}\n      writeCookie(v2StorageKey, variant, 365);\n    }\n\n    var splitA = toFiniteNumber(root.getAttribute('data-nb-hero-split-a'), 50);\n    splitA = Math.max(0, Math.min(100, splitA));\n    var variant = readV2Variant();\n    if (variant !== 'A' && variant !== 'B') {\n      variant = String(root.getAttribute('data-nb-hero-variant') || '').toUpperCase();\n    }\n    if (variant !== 'A' && variant !== 'B') {\n      variant = String(desktopImage.getAttribute('data-active-variant') || '').toUpperCase();\n    }\n    if (variant !== 'A' && variant !== 'B') {\n      var currentDesktopSrc = desktopImage.getAttribute('src') || '';\n      if (currentDesktopSrc === variantBSrc) variant = 'B';\n      else if (currentDesktopSrc === variantASrc) variant = 'A';\n    }\n    if (variant !== 'A' && variant !== 'B') {\n      variant = Math.random() * 100 < splitA ? 'A' : 'B';\n    }\n\n    var nextDesktopSrc = variant === 'B' ? variantBSrc : variantASrc;\n    var nextMobileSrc = variant === 'B'\n      ? (mobileImage.getAttribute('data-variant-b-src') || '')\n      : (mobileImage.getAttribute('data-variant-a-src') || '');\n    if (nextDesktopSrc) desktopImage.setAttribute('src', nextDesktopSrc);\n    if (nextMobileSrc) mobileImage.setAttribute('src', nextMobileSrc);\n\n    root.setAttribute('data-nb-hero-test-name', 'hero_image_v2');\n    root.setAttribute('data-nb-hero-sticky-assignment', 'true');\n    root.setAttribute('data-nb-hero-variant', variant);\n    desktopImage.setAttribute('data-active-variant', variant);\n    mobileImage.setAttribute('data-active-variant', variant);\n    root.setAttribute('data-nb-hero-runtime-ab-patched', 'true');\n    persistV2Variant(variant);\n\n    var abApi = window.NordbeltAB && typeof window.NordbeltAB.recordExposure === 'function' ? window.NordbeltAB : null;\n    if (abApi) {\n      abApi.recordExposure({\n        namespace: 'hero_image',\n        testName: 'hero_image_v2',\n        testSignature: testSignature,\n        variant: variant,\n        sectionId: root.id || '',\n        source: 'v2-hero-runtime-fix'\n      });\n    }\n  }\n\n  function initCookieMiniBanner() {\n    var banner = document.querySelector('[data-nb-cookie-banner]');\n    if (!banner) return;\n    var STORAGE_KEY = 'nb_cookie_consent_v1';\n    var FORCE_MIGRATION_KEY = 'nb_force_consent_migrated_v1';\n\n    function isPreviewThemeSession() {\n      var role = '';\n      try {\n        role = String((window.Shopify && window.Shopify.theme && window.Shopify.theme.role) || '').toLowerCase();\n      } catch (_err) {\n        role = '';\n      }\n\n      var hasPreviewParam = false;\n      try {\n        hasPreviewParam = new URLSearchParams(window.location.search).has('preview_theme_id');\n      } catch (_err2) {\n        hasPreviewParam = false;\n      }\n\n      var hasPreviewBar =\n        !!document.querySelector('#OnlineStorePreviewBarNextData') ||\n        !!document.querySelector('[id*=\"OnlineStorePreviewBar\"]') ||\n        !!document.querySelector('[data-shopify-preview-bar]');\n\n      return role === 'unpublished' || hasPreviewParam || hasPreviewBar;\n    }\n\n    if (HIDE_COOKIE_BANNER_IN_PREVIEW && isPreviewThemeSession()) {\n      document.documentElement.classList.add('nb-preview-theme');\n      if (document.body) document.body.classList.add('nb-preview-theme');\n      banner.hidden = true;\n      banner.classList.remove('is-visible');\n      document.body.classList.remove('nb-cookie-mini-active');\n      return;\n    }\n    var acceptButton = banner.querySelector('[data-nb-cookie-accept]');\n    var essentialButton = banner.querySelector('[data-nb-cookie-essential]');\n    if (!acceptButton || !essentialButton) return;\n\n    var hideTimer = null;\n    var scrollDismissArmed = false;\n    var scrollStartY = 0;\n    var scrollListener = null;\n    var SCROLL_DISMISS_DELTA = 10;\n\n    function readSavedChoice() {\n      var raw = readStorageItem(window.localStorage, STORAGE_KEY) || readStorageItem(window.sessionStorage, STORAGE_KEY);\n      if (!raw) return '';\n      if (raw === 'accepted' || raw === 'essential') return raw;\n      var parsed = safeParseJson(raw, null);\n      if (!parsed || typeof parsed !== 'object') return '';\n      var choice = String(parsed.choice || '').toLowerCase();\n      return (choice === 'accepted' || choice === 'essential') ? choice : '';\n    }\n\n    function writeSavedChoice(choice) {\n      if (choice !== 'accepted' && choice !== 'essential') return;\n      var payload = JSON.stringify({\n        choice: choice,\n        updated_at: new Date().toISOString()\n      });\n      writeStorageItem(window.localStorage, STORAGE_KEY, payload);\n      writeStorageItem(window.sessionStorage, STORAGE_KEY, payload);\n    }\n\n    function clearScrollDismissListener() {\n      scrollDismissArmed = false;\n      if (!scrollListener) return;\n      window.removeEventListener('scroll', scrollListener);\n      scrollListener = null;\n    }\n\n    function armScrollDismissListener() {\n      clearScrollDismissListener();\n      scrollStartY = toFiniteNumber(window.scrollY, toFiniteNumber(window.pageYOffset, 0));\n      scrollDismissArmed = true;\n      scrollListener = function () {\n        if (!scrollDismissArmed) return;\n        var currentY = toFiniteNumber(window.scrollY, toFiniteNumber(window.pageYOffset, 0));\n        if (Math.abs(currentY - scrollStartY) < SCROLL_DISMISS_DELTA) return;\n        clearScrollDismissListener();\n        // Passive scroll should never write consent on behalf of the visitor.\n        hideBanner();\n      };\n      window.addEventListener('scroll', scrollListener, { passive: true });\n    }\n\n    function withPrivacyApi(callback) {\n      if (typeof callback !== 'function') return;\n      var privacyApi = window.Shopify && window.Shopify.customerPrivacy;\n      if (privacyApi) {\n        callback(privacyApi);\n        return;\n      }\n      var loadFeatures = window.Shopify && window.Shopify.loadFeatures;\n      if (typeof loadFeatures !== 'function') return;\n      try {\n        loadFeatures([\n          {\n            name: 'consent-tracking-api',\n            version: '0.1'\n          }\n        ], function (error) {\n          if (error) return;\n          var loadedPrivacyApi = window.Shopify && window.Shopify.customerPrivacy;\n          if (!loadedPrivacyApi) return;\n          callback(loadedPrivacyApi);\n        });\n      } catch (_err) {\n        // noop\n      }\n    }\n\n    function applyShopifyConsent(choice) {\n      var allowTracking = choice === 'accepted';\n      var payload = {\n        analytics: allowTracking,\n        marketing: allowTracking,\n        preferences: allowTracking,\n        sale_of_data: allowTracking\n      };\n      withPrivacyApi(function (privacyApi) {\n        if (!privacyApi || typeof privacyApi.setTrackingConsent !== 'function') return;\n        try {\n          privacyApi.setTrackingConsent(payload, function () {});\n        } catch (_err) {\n          try {\n            privacyApi.setTrackingConsent(allowTracking, function () {});\n          } catch (_innerErr) {\n            // noop\n          }\n        }\n      });\n    }\n\n    function applyGoogleConsent(choice) {\n      var consentState = choice === 'accepted' ? 'granted' : 'denied';\n      var gtag = typeof window.gtag === 'function' ? window.gtag : null;\n      if (!gtag) return;\n      try {\n        gtag('consent', 'update', {\n          ad_storage: consentState,\n          analytics_storage: consentState,\n          functionality_storage: consentState,\n          personalization_storage: consentState,\n          ad_user_data: consentState,\n          ad_personalization: consentState,\n          security_storage: 'granted'\n        });\n      } catch (_err) {\n        // noop\n      }\n    }\n\n    function readShopifyConsentChoice() {\n      var privacyApi = window.Shopify && window.Shopify.customerPrivacy;\n      if (!privacyApi || typeof privacyApi.currentVisitorConsent !== 'function') return '';\n      try {\n        var consent = privacyApi.currentVisitorConsent();\n        if (!consent || typeof consent !== 'object') return '';\n        var keys = ['analytics', 'marketing', 'preferences', 'sale_of_data'];\n        var hasExplicit = keys.some(function (key) {\n          return typeof consent[key] === 'boolean';\n        });\n        if (!hasExplicit) return '';\n        var hasAccepted = !!(consent.analytics || consent.marketing || consent.preferences || consent.sale_of_data);\n        return hasAccepted ? 'accepted' : 'essential';\n      } catch (_err) {\n        return '';\n      }\n    }\n\n    function isBannerForceHidden() {\n      try {\n        return window.getComputedStyle(banner).display === 'none';\n      } catch (_err) {\n        return false;\n      }\n    }\n\n    function showBanner() {\n      if (hideTimer) {\n        window.clearTimeout(hideTimer);\n        hideTimer = null;\n      }\n      banner.hidden = false;\n      document.body.classList.add('nb-cookie-mini-active');\n      window.requestAnimationFrame(function () {\n        banner.classList.add('is-visible');\n      });\n      armScrollDismissListener();\n    }\n\n    function hideBanner() {\n      clearScrollDismissListener();\n      if (hideTimer) {\n        window.clearTimeout(hideTimer);\n        hideTimer = null;\n      }\n      banner.classList.remove('is-visible');\n      document.body.classList.remove('nb-cookie-mini-active');\n      hideTimer = window.setTimeout(function () {\n        banner.hidden = true;\n      }, 240);\n    }\n\n    function setChoice(choice) {\n      writeSavedChoice(choice);\n      applyShopifyConsent(choice);\n      applyGoogleConsent(choice);\n      if (choice === 'essential') {\n        attributionCache = null;\n        removeStorageItem(window.localStorage, ATTRIBUTION_STORAGE_KEY);\n        removeStorageItem(window.sessionStorage, ATTRIBUTION_STORAGE_KEY);\n        clearBlogOriginStorage();\n      } else {\n        var articleRoot = document.querySelector('[data-nb-article-conversion]');\n        if (articleRoot) persistBlogOrigin(articleRoot, { surface_source: 'consent_accept' });\n      }\n      removeStorageItem(window.localStorage, FORCE_MIGRATION_KEY);\n      document.dispatchEvent(new CustomEvent('nb:consent-changed', { detail: { choice: choice } }));\n      hideBanner();\n    }\n\n    acceptButton.addEventListener('click', function () {\n      setChoice('accepted');\n    });\n\n    essentialButton.addEventListener('click', function () {\n      setChoice('essential');\n    });\n\n    var savedChoice = readSavedChoice();\n    if (savedChoice) {\n      applyShopifyConsent(savedChoice);\n      hideBanner();\n      return;\n    }\n\n    var forceMigrationPending = !!readStorageItem(window.localStorage, FORCE_MIGRATION_KEY);\n    var shopifyChoice = forceMigrationPending ? '' : readShopifyConsentChoice();\n    if (shopifyChoice) {\n      writeSavedChoice(shopifyChoice);\n      hideBanner();\n      return;\n    }\n\n    if (isBannerForceHidden()) {\n      hideBanner();\n      return;\n    }\n\n    showBanner();\n  }\n\n  function initGlobalReserveTimer() {\n    var body = document.body;\n    if (body && body.getAttribute('data-b2b-layout') === 'true') return;\n    var header = document.querySelector('[data-nb-header]');\n    if (!header) return;\n\n    var timerLink = header.querySelector('[data-nb-reserve-header]');\n    var timeNode = header.querySelector('[data-nb-reserve-header-time]');\n    var ringNode = header.querySelector('[data-nb-reserve-header-ring]');\n    var modal = document.querySelector('[data-nb-reserve-expiry-modal]');\n    var modalDialog = modal ? modal.querySelector('.nb-reserve-modal__dialog') : null;\n    var modalDismissButtons = modal ? Array.prototype.slice.call(modal.querySelectorAll('[data-nb-reserve-dismiss]')) : [];\n    var reservePanel = document.querySelector('[data-nb-reserve-panel]');\n    var reservePanelIsHomepage = !!(reservePanel && reservePanel.hasAttribute('data-nb-reserve-panel-homepage'));\n    var reservePanelStatus = reservePanel ? reservePanel.querySelector('.nb-cart-form__status') : null;\n    var reservePanelHint = reservePanel ? reservePanel.querySelector('.nb-cart-reserve__hint') : null;\n    var reservePanelResetButton = reservePanel ? reservePanel.querySelector('[data-nb-reserve-reset]') : null;\n    var resetButtons = Array.prototype.slice.call(document.querySelectorAll('[data-nb-reserve-reset]'));\n    var previewPathLinks = Array.prototype.slice.call(document.querySelectorAll('[data-nb-reserve-preview-path]'));\n    var modalCheckoutLink = modal ? modal.querySelector('[data-nb-reserve-checkout]') : null;\n    var modalCartLink = modal ? modal.querySelector('[data-nb-reserve-go-cart]') : null;\n    var modalHydrated = !!(modal && modalDialog);\n\n    var STORAGE_KEY = 'nb_reserve_timer_v3';\n    var LAST_CART_COUNT_KEY = 'nb_reserve_last_cart_count_v1';\n    var DEFAULT_SECONDS = 600;\n    var DEFAULT_DELAY_MS = 3000;\n    var CART_THRESHOLD_FOR_TIMER = 1;\n    var timerId = null;\n    var panelHideTimer = null;\n    var panelHideFinalizeTimer = null;\n    var PANEL_HIDE_DELAY_MS = 5000;\n    var PANEL_COLLAPSE_MS = 420;\n    var titleFlashId = null;\n    var modalOpen = false;\n    var baseTitle = document.title || 'Nordbelt';\n    var notifiedCycleId = '';\n    var cartCount = Math.max(0, Math.round(toFiniteNumber(header.getAttribute('data-cart-count'), 0)));\n    var state = readState();\n\n    function readState() {\n      try {\n        var raw = window.localStorage.getItem(STORAGE_KEY);\n        if (!raw) return null;\n        var parsed = JSON.parse(raw);\n        if (!parsed || typeof parsed !== 'object') return null;\n        if (!Number.isFinite(parsed.endAt) || !Number.isFinite(parsed.duration) || !Number.isFinite(parsed.delayUntil)) return null;\n        parsed.duration = Math.max(60, Math.round(parsed.duration));\n        parsed.endAt = Math.round(parsed.endAt);\n        parsed.delayUntil = Math.round(parsed.delayUntil);\n        parsed.expired = parsed.expired === true;\n        parsed.cycleId = parsed.cycleId ? String(parsed.cycleId) : createEventId('reserve');\n        return parsed;\n      } catch (_err) {\n        return null;\n      }\n    }\n\n    function persistState(nextState) {\n      state = nextState;\n      try {\n        if (!nextState) {\n          window.localStorage.removeItem(STORAGE_KEY);\n        } else {\n          window.localStorage.setItem(STORAGE_KEY, JSON.stringify(nextState));\n        }\n      } catch (_err) {\n        // noop\n      }\n      return state;\n    }\n\n    function clearState() {\n      persistState(null);\n    }\n\n    function readLastCartCount() {\n      try {\n        var raw = window.localStorage.getItem(LAST_CART_COUNT_KEY);\n        if (raw == null) return null;\n        var parsed = parseInt(raw, 10);\n        return Number.isFinite(parsed) ? Math.max(0, parsed) : null;\n      } catch (_err) {\n        return null;\n      }\n    }\n\n    function writeLastCartCount(count) {\n      try {\n        window.localStorage.setItem(LAST_CART_COUNT_KEY, String(Math.max(0, Math.round(toFiniteNumber(count, 0)))));\n      } catch (_err) {\n        // noop\n      }\n    }\n\n    function applyPreviewPaths() {\n      previewPathLinks.forEach(function (link) {\n        if (!link || !link.getAttribute) return;\n        var path = link.getAttribute('data-nb-reserve-preview-path') || '';\n        if (!path) return;\n        link.setAttribute('href', buildShopifyPathWithPreview(path));\n      });\n    }\n\n    function createReserveModalElement(tagName, className, text) {\n      var element = document.createElement(tagName);\n      if (className) element.className = className;\n      if (text !== undefined && text !== null) element.textContent = String(text);\n      return element;\n    }\n\n    var reserveModalCopyCache = null;\n\n    function getReserveModalCopy() {\n      if (reserveModalCopyCache) return reserveModalCopyCache;\n      reserveModalCopyCache = {};\n      var node = document.getElementById('NbReserveModalCopyJson');\n      if (!node) return reserveModalCopyCache;\n      var parsed = safeParseJson(node.textContent || '{}', {});\n      if (parsed && typeof parsed === 'object') reserveModalCopyCache = parsed;\n      return reserveModalCopyCache;\n    }\n\n    function reserveModalCopy(key, i18nPath, fallback) {\n      var copy = getReserveModalCopy();\n      var value = copy && copy[key];\n      if (typeof value === 'string' && value) return value;\n      return i18n(i18nPath, fallback);\n    }\n\n    function ensureReserveModalContent() {\n      if (!modal || modalHydrated) return;\n      modalHydrated = true;\n      modal.textContent = '';\n\n      var closeLabel = reserveModalCopy('close', 'shared.close', 'Sluiten');\n      var backdrop = createReserveModalElement('button', 'nb-reserve-modal__backdrop');\n      backdrop.type = 'button';\n      backdrop.setAttribute('data-nb-reserve-dismiss', '');\n      backdrop.setAttribute('aria-label', closeLabel);\n\n      var dialog = createReserveModalElement('section', 'nb-reserve-modal__dialog');\n      dialog.setAttribute('role', 'dialog');\n      dialog.setAttribute('aria-modal', 'true');\n      dialog.setAttribute('aria-labelledby', 'nbReserveModalTitle');\n\n      var closeButton = createReserveModalElement('button', 'nb-reserve-modal__close');\n      closeButton.type = 'button';\n      closeButton.setAttribute('data-nb-reserve-dismiss', '');\n      closeButton.setAttribute('aria-label', closeLabel);\n      var closeIcon = createReserveModalElement('span', '', '\\u00d7');\n      closeIcon.setAttribute('aria-hidden', 'true');\n      closeButton.appendChild(closeIcon);\n\n      var kicker = createReserveModalElement('p', 'nb-reserve-modal__kicker', reserveModalCopy('kicker', 'reserve.expired_kicker', 'Reservering verlopen'));\n      var title = createReserveModalElement('h3', '', reserveModalCopy('title', 'reserve.expired_modal_title', 'Wil je je bestelling nu afronden?'));\n      title.id = 'nbReserveModalTitle';\n      var copy = createReserveModalElement('p', '', reserveModalCopy('copy', 'reserve.expired_modal_copy', 'Je product ligt nog in de winkelwagen. Kies hieronder hoe je verder wilt.'));\n      var actions = createReserveModalElement('div', 'nb-reserve-modal__actions');\n\n      var checkoutLink = createReserveModalElement('a', 'nb-button', reserveModalCopy('checkout', 'reserve.checkout_now', 'Ga nu naar afrekenen'));\n      checkoutLink.href = buildShopifyPathWithPreview('/checkout');\n      checkoutLink.setAttribute('data-nb-reserve-checkout', '');\n      checkoutLink.setAttribute('data-nb-reserve-preview-path', '/checkout');\n\n      var cartPath = modal.getAttribute('data-nb-reserve-cart-path') || '/cart';\n      var cartLink = createReserveModalElement('a', 'nb-button nb-button--secondary', reserveModalCopy('cart', 'reserve.to_cart', 'Naar winkelwagen'));\n      cartLink.href = buildShopifyPathWithPreview(cartPath);\n      cartLink.setAttribute('data-nb-reserve-go-cart', '');\n      cartLink.setAttribute('data-nb-reserve-preview-path', cartPath);\n\n      var resetButton = createReserveModalElement('button', 'nb-button nb-button--secondary', reserveModalCopy('reset', 'reserve.reset', 'Opnieuw 10 min reserveren'));\n      resetButton.type = 'button';\n      resetButton.setAttribute('data-nb-reserve-reset', '');\n\n      actions.appendChild(checkoutLink);\n      actions.appendChild(cartLink);\n      actions.appendChild(resetButton);\n      dialog.appendChild(closeButton);\n      dialog.appendChild(kicker);\n      dialog.appendChild(title);\n      dialog.appendChild(copy);\n      dialog.appendChild(actions);\n      modal.appendChild(backdrop);\n      modal.appendChild(dialog);\n\n      modalDialog = dialog;\n      modalDismissButtons = Array.prototype.slice.call(modal.querySelectorAll('[data-nb-reserve-dismiss]'));\n      previewPathLinks = Array.prototype.slice.call(document.querySelectorAll('[data-nb-reserve-preview-path]'));\n      modalCheckoutLink = checkoutLink;\n      modalCartLink = cartLink;\n      applyPreviewPaths();\n    }\n\n    function formatTime(seconds) {\n      var safe = Math.max(0, Math.round(seconds));\n      var mins = Math.floor(safe / 60);\n      var secs = safe % 60;\n      return String(mins).padStart(2, '0') + ':' + String(secs).padStart(2, '0');\n    }\n\n    function setRingProgress(progress) {\n      if (!ringNode) return;\n      var clamped = Math.max(0, Math.min(100, toFiniteNumber(progress, 0)));\n      ringNode.style.setProperty('--nb-reserve-progress', clamped.toFixed(2));\n    }\n\n    function clearPanelHideTimers() {\n      if (panelHideTimer) {\n        window.clearTimeout(panelHideTimer);\n        panelHideTimer = null;\n      }\n      if (panelHideFinalizeTimer) {\n        window.clearTimeout(panelHideFinalizeTimer);\n        panelHideFinalizeTimer = null;\n      }\n    }\n\n    function collapseReservePanelAnimated() {\n      if (!reservePanel || reservePanel.hidden || reservePanel.classList.contains('is-collapsing')) return;\n      if (state && state.expired) return;\n      clearPanelHideTimers();\n      reservePanel.classList.add('is-collapsing');\n      panelHideFinalizeTimer = window.setTimeout(function () {\n        reservePanel.hidden = true;\n        reservePanel.classList.remove('is-collapsing');\n        reservePanel.classList.add('is-collapsed');\n      }, PANEL_COLLAPSE_MS);\n    }\n\n    function showReservePanelTemporarily() {\n      if (!reservePanel) return;\n      if (state && state.expired) {\n        reservePanel.hidden = true;\n        reservePanel.classList.remove('is-collapsing', 'is-expired');\n        reservePanel.classList.add('is-collapsed');\n        return;\n      }\n      clearPanelHideTimers();\n      reservePanel.hidden = false;\n      reservePanel.classList.remove('is-collapsing', 'is-collapsed');\n      // Force layout so collapse animation starts reliably.\n      reservePanel.offsetHeight;\n      panelHideTimer = window.setTimeout(function () {\n        collapseReservePanelAnimated();\n      }, PANEL_HIDE_DELAY_MS);\n    }\n\n    function maybeShowReservePanelForFreshAdd() {\n      if (!reservePanel) return;\n      if (cartCount < CART_THRESHOLD_FOR_TIMER) return;\n      if (!state || state.expired) return;\n      if (!consumeReservePanelNotice()) return;\n      showReservePanelTemporarily();\n    }\n\n    function maybeShowHomepageReservePanel() {\n      if (!reservePanelIsHomepage) return;\n      if (cartCount < CART_THRESHOLD_FOR_TIMER) return;\n      if (!state || state.expired) return;\n      showReservePanelTemporarily();\n    }\n\n    function setModalOpen(nextOpen) {\n      if (!modal) return;\n      if (nextOpen === modalOpen) return;\n      if (nextOpen) ensureReserveModalContent();\n      modalOpen = nextOpen;\n      modal.hidden = !nextOpen;\n      modal.setAttribute('aria-hidden', nextOpen ? 'false' : 'true');\n      if ('inert' in modal) {\n        modal.inert = !nextOpen;\n      } else if (nextOpen) {\n        modal.removeAttribute('inert');\n      } else {\n        modal.setAttribute('inert', '');\n      }\n      document.body.classList.toggle('nb-reserve-modal-open', nextOpen);\n      if (nextOpen) {\n        window.requestAnimationFrame(function () {\n          modal.classList.add('is-open');\n        });\n      } else {\n        modal.classList.remove('is-open');\n      }\n    }\n\n    function dismissExpiredModal() {\n      clearState();\n      stopTicking();\n      clearPanelHideTimers();\n      stopTitleFlash();\n      if (reservePanel) {\n        reservePanel.hidden = true;\n        reservePanel.classList.remove('is-collapsing', 'is-expired');\n        reservePanel.classList.add('is-collapsed');\n      }\n      setModalOpen(false);\n      render();\n    }\n\n    function stopTitleFlash() {\n      if (titleFlashId) {\n        window.clearInterval(titleFlashId);\n        titleFlashId = null;\n      }\n      document.title = baseTitle;\n    }\n\n    function maybeStartTitleFlash() {\n      if (document.visibilityState !== 'hidden') return;\n      if (titleFlashId) return;\n      titleFlashId = window.setInterval(function () {\n        document.title = document.title === baseTitle\n          ? i18n('reserve.expired_title', '\u23F1\uFE0F Reservering verlopen - Nordbelt')\n          : baseTitle;\n      }, 1200);\n    }\n\n    function requestNotificationPermissionOnIntent() {\n      if (SUPPRESS_BROWSER_POPUPS) return;\n      if (!('Notification' in window)) return;\n      if (Notification.permission !== 'default') return;\n\n      var asked = false;\n      function askPermission() {\n        if (asked) return;\n        asked = true;\n        try {\n          Notification.requestPermission();\n        } catch (_err) {\n          // noop\n        }\n      }\n\n      document.addEventListener('pointerdown', askPermission, { once: true, passive: true });\n      document.addEventListener('keydown', askPermission, { once: true });\n    }\n\n    function maybeSendExpiryNotification() {\n      if (!state || !state.expired) return;\n      if (notifiedCycleId === state.cycleId) return;\n      notifiedCycleId = state.cycleId;\n\n      if (document.visibilityState === 'hidden') {\n        maybeStartTitleFlash();\n      }\n\n      if (SUPPRESS_BROWSER_POPUPS) return;\n\n      if (!('Notification' in window)) return;\n      if (Notification.permission !== 'granted') return;\n\n      if (document.visibilityState === 'hidden') {\n        try {\n          var notificationIcon = '';\n          try {\n            notificationIcon = (window.NordbeltThemeAssets && window.NordbeltThemeAssets.notificationIcon) || '';\n          } catch (_iconErr) {\n            notificationIcon = '';\n          }\n          if (notificationIcon && notificationIcon.indexOf('//') === 0) {\n            notificationIcon = window.location.protocol + notificationIcon;\n          }\n          var notificationOptions = {\n            body: i18n('reserve.notification_body', 'Je product staat nog in je winkelwagen. Rond direct af of reserveer opnieuw 10 minuten.')\n          };\n          if (notificationIcon) {\n            notificationOptions.icon = notificationIcon;\n          }\n          var notice = new Notification(i18n('reserve.notification_title', 'Je Nordbelt reservering is verlopen'), notificationOptions);\n          notice.onclick = function () {\n            try {\n              window.focus();\n            } catch (_err) {\n              // noop\n            }\n            setModalOpen(true);\n          };\n        } catch (_err) {\n          // noop\n        }\n      }\n    }\n\n    function syncReservePanel(isExpired) {\n      if (!reservePanel) return;\n      reservePanel.classList.toggle('is-expired', isExpired);\n      if (reservePanelResetButton) reservePanelResetButton.hidden = true;\n      if (reservePanelStatus) {\n        reservePanelStatus.textContent = i18n('reserve.panel_active', 'Reservering actief');\n      }\n      if (reservePanelHint) {\n        reservePanelHint.textContent = i18n('reserve.panel_hint', 'Timer loopt in de header naast je winkelwagen.');\n      }\n    }\n\n    function getSecondsLeft(now) {\n      if (!state) return 0;\n      if (state.expired) return 0;\n      if (now < state.delayUntil) return state.duration;\n      return Math.max(0, Math.ceil((state.endAt - now) / 1000));\n    }\n\n    function getProgress(now) {\n      if (!state) return 0;\n      if (state.expired) return 100;\n      if (now <= state.delayUntil) return 0;\n      var elapsed = (now - state.delayUntil) / 1000;\n      return Math.max(0, Math.min(100, (elapsed / state.duration) * 100));\n    }\n\n    function startTicking() {\n      if (timerId) return;\n      timerId = window.setInterval(function () {\n        render();\n      }, 250);\n    }\n\n    function stopTicking() {\n      if (!timerId) return;\n      window.clearInterval(timerId);\n      timerId = null;\n    }\n\n    function startCycle(options) {\n      if (cartCount < CART_THRESHOLD_FOR_TIMER) return;\n      var now = Date.now();\n      var duration = Math.max(60, Math.round(toFiniteNumber(options && options.duration, DEFAULT_SECONDS)));\n      var startDelayMs = Math.max(0, Math.round(toFiniteNumber(options && options.startDelayMs, DEFAULT_DELAY_MS)));\n      var delayUntil = now + startDelayMs;\n      persistState({\n        version: 3,\n        duration: duration,\n        delayUntil: delayUntil,\n        endAt: delayUntil + duration * 1000,\n        expired: false,\n        cycleId: createEventId('reserve')\n      });\n      writeLastCartCount(cartCount);\n      notifiedCycleId = '';\n      stopTitleFlash();\n      setModalOpen(false);\n      startTicking();\n      render();\n    }\n\n    function ensureState() {\n      if (cartCount < CART_THRESHOLD_FOR_TIMER) {\n        clearState();\n        return;\n      }\n      if (!state) {\n        startCycle({ startDelayMs: DEFAULT_DELAY_MS });\n      }\n    }\n\n    function setCartCount(nextCount) {\n      var previousCount = cartCount;\n      cartCount = Math.max(0, Math.round(toFiniteNumber(nextCount, 0)));\n      header.setAttribute('data-cart-count', String(cartCount));\n      writeLastCartCount(cartCount);\n\n      if (cartCount < CART_THRESHOLD_FOR_TIMER) {\n        clearReservePanelNotice();\n        clearState();\n        stopTicking();\n        clearPanelHideTimers();\n        stopTitleFlash();\n        setModalOpen(false);\n        if (reservePanel) {\n          reservePanel.hidden = true;\n          reservePanel.classList.add('is-collapsed');\n        }\n        render();\n        return;\n      }\n\n      if (cartCount > previousCount) {\n        armReservePanelNotice();\n        startCycle({ duration: DEFAULT_SECONDS, startDelayMs: 0 });\n        maybeShowReservePanelForFreshAdd();\n        return;\n      }\n\n      ensureState();\n      startTicking();\n      render();\n    }\n\n    function render() {\n      var now = Date.now();\n      var hasCart = cartCount >= CART_THRESHOLD_FOR_TIMER;\n      var hasTimer = hasCart && !!state;\n\n      header.classList.toggle('has-reserve-timer', hasTimer);\n      if (timerLink) timerLink.hidden = !hasTimer;\n\n      if (!hasTimer) {\n        if (timerLink) timerLink.classList.remove('is-expiring', 'is-expired');\n        clearPanelHideTimers();\n        if (reservePanel) {\n          reservePanel.hidden = true;\n          reservePanel.classList.remove('is-collapsing', 'is-expired');\n          reservePanel.classList.add('is-collapsed');\n        }\n        syncReservePanel(false);\n        return;\n      }\n\n      if (!state.expired && now >= state.endAt) {\n        state.expired = true;\n        state.expiredAt = now;\n        persistState(state);\n      }\n\n      var secondsLeft = getSecondsLeft(now);\n      var progress = getProgress(now);\n\n      if (timeNode) timeNode.textContent = formatTime(secondsLeft);\n      setRingProgress(progress);\n\n      if (state.expired) {\n        if (timerLink) {\n          timerLink.classList.add('is-expired');\n          timerLink.classList.remove('is-expiring');\n        }\n        clearPanelHideTimers();\n        if (reservePanel) {\n          reservePanel.hidden = true;\n          reservePanel.classList.remove('is-collapsing', 'is-expired');\n          reservePanel.classList.add('is-collapsed');\n        }\n        syncReservePanel(false);\n        setModalOpen(true);\n        maybeSendExpiryNotification();\n        return;\n      }\n\n      var isExpiring = secondsLeft <= 120 && now >= state.delayUntil;\n      if (timerLink) {\n        timerLink.classList.toggle('is-expiring', isExpiring);\n        timerLink.classList.remove('is-expired');\n      }\n      syncReservePanel(false);\n      setModalOpen(false);\n    }\n\n    function handleReset(event) {\n      var fromReservePanel = !!(event && event.target && reservePanel && reservePanel.contains(event.target));\n      if (event && typeof event.preventDefault === 'function') {\n        event.preventDefault();\n      }\n      startCycle({ startDelayMs: 0 });\n      if (fromReservePanel) {\n        showReservePanelTemporarily();\n      }\n    }\n\n    resetButtons.forEach(function (button) {\n      button.addEventListener('click', handleReset);\n    });\n\n    if (modal) {\n      modal.addEventListener('click', function (event) {\n        if (!event || !event.target) return;\n        var target = event.target;\n        var dismissButton = target.closest ? target.closest('[data-nb-reserve-dismiss]') : null;\n        if (dismissButton && modal.contains(dismissButton)) {\n          event.preventDefault();\n          event.stopPropagation();\n          dismissExpiredModal();\n          return;\n        }\n\n        var resetButton = target.closest ? target.closest('[data-nb-reserve-reset]') : null;\n        if (resetButton && modal.contains(resetButton)) {\n          handleReset(event);\n          setModalOpen(false);\n          return;\n        }\n\n        var checkoutLink = target.closest ? target.closest('[data-nb-reserve-checkout]') : null;\n        if (checkoutLink && modal.contains(checkoutLink)) {\n          setModalOpen(false);\n          return;\n        }\n\n        var cartLink = target.closest ? target.closest('[data-nb-reserve-go-cart]') : null;\n        if (cartLink && modal.contains(cartLink)) {\n          if (event && typeof event.preventDefault === 'function') event.preventDefault();\n          startCycle({ duration: DEFAULT_SECONDS, startDelayMs: 0 });\n          setModalOpen(false);\n          window.location.assign(cartLink.getAttribute('href') || '/cart');\n          return;\n        }\n\n        if (!modalOpen) return;\n        if (modalDialog && modalDialog.contains(target)) return;\n        dismissExpiredModal();\n      });\n    }\n\n    document.addEventListener('keydown', function (event) {\n      if (!modalOpen) return;\n      if (!event || event.key !== 'Escape') return;\n      dismissExpiredModal();\n    });\n\n    document.addEventListener('nb:cart-count-updated', function (event) {\n      var detail = event && event.detail ? event.detail : {};\n      setCartCount(detail.count);\n    });\n\n    document.addEventListener('visibilitychange', function () {\n      if (document.visibilityState === 'visible') {\n        stopTitleFlash();\n        if (state && state.expired && cartCount >= CART_THRESHOLD_FOR_TIMER) {\n          setModalOpen(true);\n        }\n      }\n    });\n\n    window.addEventListener('storage', function (event) {\n      if (!event || event.key !== STORAGE_KEY) return;\n      state = readState();\n      if (!state) {\n        clearPanelHideTimers();\n        setModalOpen(false);\n        if (timerLink) timerLink.hidden = true;\n        header.classList.remove('has-reserve-timer');\n        stopTicking();\n      } else {\n        startTicking();\n      }\n      render();\n    });\n\n    applyPreviewPaths();\n    requestNotificationPermissionOnIntent();\n    var lastCartCount = readLastCartCount();\n    if (cartCount >= CART_THRESHOLD_FOR_TIMER && lastCartCount !== null && cartCount > lastCartCount) {\n      armReservePanelNotice();\n      startCycle({ duration: DEFAULT_SECONDS, startDelayMs: 0 });\n    } else {\n      ensureState();\n    }\n    writeLastCartCount(cartCount);\n    if (state && cartCount >= CART_THRESHOLD_FOR_TIMER) startTicking();\n    render();\n    maybeShowReservePanelForFreshAdd();\n    maybeShowHomepageReservePanel();\n\n    window.NordbeltTheme = window.NordbeltTheme || {};\n    window.NordbeltTheme.reserveTimer = {\n      reset: function () {\n        startCycle({ startDelayMs: 0 });\n      },\n      start: function (seconds, delayMs) {\n        startCycle({ duration: seconds, startDelayMs: delayMs });\n      },\n      clear: function () {\n        clearState();\n        render();\n      },\n      getState: function () {\n        return state ? Object.assign({}, state) : null;\n      }\n    };\n  }\n\n  function initFiReviewProofGoogleLabelFallback(scope) {\n    if (typeof window === 'undefined' || typeof document === 'undefined') return;\n    var root = scope && scope.querySelectorAll ? scope : document;\n    var langRaw = ((document.documentElement && document.documentElement.lang) || window.Shopify && window.Shopify.locale || '').toLowerCase();\n    var langRoot = (langRaw.split('-')[0] || '').trim();\n    var fallbackByLocale = {\n      fi: 'Google-arvostelut',\n      nl: 'Google reviews',\n      de: 'Google-Bewertungen',\n      fr: 'Avis Google',\n      da: 'Google-anmeldelser',\n      nb: 'Google-anmeldelser',\n      sv: 'Google-recensioner',\n      pt: 'Avalia\u00E7\u00F5es no Google',\n      en: 'Google Reviews'\n    };\n    var fallbackLabel = fallbackByLocale[langRoot] || 'Google Reviews';\n    var applyFallback = function () {\n      var labels = root.querySelectorAll('.nb-review-proof-card--google .nb-review-proof-card__head strong');\n      for (var i = 0; i < labels.length; i += 1) {\n        var label = labels[i];\n        var text = (label.textContent || '').trim();\n        if (\n          /translation missing:\\s*[a-z-]+\\.nb\\.section\\.review_proof\\.google_label/i.test(text)\n        ) {\n          label.textContent = fallbackLabel;\n        }\n      }\n    };\n\n    applyFallback();\n    var retries = 0;\n    var retryTimer = window.setInterval(function () {\n      retries += 1;\n      applyFallback();\n      if (retries >= 8) {\n        window.clearInterval(retryTimer);\n      }\n    }, 250);\n\n    if (root === document && window.MutationObserver && !window.__nbFiGoogleLabelObserver) {\n      var observer = new MutationObserver(function () {\n        applyFallback();\n      });\n      observer.observe(document.documentElement || document.body, {\n        childList: true,\n        subtree: true,\n        characterData: true\n      });\n      window.__nbFiGoogleLabelObserver = observer;\n      window.setTimeout(function () {\n        if (window.__nbFiGoogleLabelObserver === observer) {\n          observer.disconnect();\n          window.__nbFiGoogleLabelObserver = null;\n        }\n      }, 6000);\n    }\n  }\n\n  function normalizeLocaleCopyNodes(scope, replacements) {\n    if (!scope || !replacements || !replacements.length) return;\n    if (!window.NodeFilter || !document.createTreeWalker) return;\n    var walker = document.createTreeWalker(scope, NodeFilter.SHOW_TEXT);\n    var node;\n    while ((node = walker.nextNode())) {\n      if (!node || !node.parentElement) continue;\n      var parentTag = (node.parentElement.tagName || '').toUpperCase();\n      if (\n        parentTag === 'SCRIPT' ||\n        parentTag === 'STYLE' ||\n        parentTag === 'NOSCRIPT' ||\n        parentTag === 'TEMPLATE' ||\n        parentTag === 'TEXTAREA'\n      ) {\n        continue;\n      }\n      var original = node.nodeValue || '';\n      if (!original) continue;\n      var normalized = original;\n      for (var i = 0; i < replacements.length; i += 1) {\n        var pair = replacements[i];\n        normalized = normalized.replace(pair.pattern, pair.value);\n      }\n      if (normalized !== original) {\n        node.nodeValue = normalized;\n      }\n    }\n  }\n\n  function fixNordicApparatusFenceImage(scope) {\n    if (getCurrentArticleHandle() !== 'nordic-hamstring-curl-apparaat') return;\n\n    var root = scope && scope.querySelectorAll ? scope : document;\n    var oldImageNeedle = 'D752523_5d073e92-2bef-4749-b3b0-a70b6bf37e81.jpg';\n    var newImageUrl = 'https://www.nordbelt.nl/cdn/shop/files/D753098.webp?v=1766439231';\n    var altByLocale = {\n      nl: 'Close-up van blauwe schoenen die met Nordbelt aan een nat metalen hek of verticale stang buiten zijn gefixeerd.',\n      en: 'Close-up of blue shoes secured with Nordbelt to a wet metal fence or vertical bar outdoors.',\n      fr: 'Gros plan sur des chaussures bleues fixees avec Nordbelt a une barriere metallique ou un point d ancrage bas dehors.',\n      de: 'Nahaufnahme blauer Schuhe, die mit Nordbelt an einem nassen Metallzaun oder einer niedrigen Stange draussen fixiert sind.',\n      sv: 'Narbild av bla skor som ar fixerade med Nordbelt vid ett metallstaket eller en lag fast punkt utomhus.',\n      da: 'N\u00E6rbillede af bl\u00E5 sko fastgjort med Nordbelt til et v\u00E5dt metalhegn eller lavt ankerpunkt udend\u00F8rs.',\n      nb: 'N\u00E6rbilde av bl\u00E5 sko festet med Nordbelt til et v\u00E5tt metallgjerde eller lavt ankerpunkt ute.',\n      fi: 'L\u00E4hikuva sinisist\u00E4 kengist\u00E4, jotka on kiinnitetty Nordbeltill\u00E4 m\u00E4rk\u00E4\u00E4n metalliaitaan tai matalaan ankkuripisteeseen ulkona.',\n      it: 'Primo piano di scarpe blu fissate con Nordbelt a una recinzione metallica o a un punto di ancoraggio basso all esterno.',\n      es: 'Primer plano de zapatillas azules fijadas con Nordbelt a una valla metalica o punto de anclaje bajo en exterior.',\n      pt: 'Plano aproximado de sapatilhas azuis fixas com Nordbelt numa vedacao metalica molhada ou numa barra vertical no exterior.',\n      et: 'L\u00E4hivaade sinistele jalan\u00F5udele, mis on Nordbeltiga kinnitatud m\u00E4rja metallpiirde v\u00F5i madala ankrupunkti k\u00FClge \u00F5ues.'\n    };\n    var localeRoot = getLocaleRoot() || 'en';\n    var nextAlt = altByLocale[localeRoot] || altByLocale.en;\n    var images = root.querySelectorAll('img[src*=\"' + oldImageNeedle + '\"], img[src*=\"D753098.webp\"]');\n\n    Array.prototype.forEach.call(images, function (image) {\n      if (!image) return;\n      var currentSrc = image.getAttribute('src') || '';\n      var currentAlt = image.getAttribute('alt') || '';\n      var isBadDoorAlt = /door|deur|dorr|d\u00F8r|Tuer|porta|porte|puerta|ovi|uks|vagg|v\u00E6g|vegg|wall|mur|parete|seina/i.test(currentAlt);\n      if (currentSrc.indexOf(oldImageNeedle) !== -1) {\n        image.setAttribute('src', newImageUrl);\n        image.removeAttribute('srcset');\n        image.setAttribute('alt', nextAlt);\n      } else if (currentSrc.indexOf('D753098.webp') !== -1 && isBadDoorAlt) {\n        image.setAttribute('alt', nextAlt);\n      }\n    });\n  }\n\n  function initBlogLocaleCopyHotfix(scope) {\n    if (typeof document === 'undefined') return;\n    var root = scope && scope.querySelectorAll ? scope : document;\n    var langRaw = ((document.documentElement && document.documentElement.lang) || '').toLowerCase();\n    var langRoot = (langRaw.split('-')[0] || '').trim();\n\n    fixNordicApparatusFenceImage(root);\n\n    if (langRoot === 'sv') {\n      var svArticleBlocks = root.querySelectorAll ? root.querySelectorAll('.nb-article__rte') : [];\n      for (var svIndex = 0; svIndex < svArticleBlocks.length; svIndex += 1) {\n        var svBlock = svArticleBlocks[svIndex];\n        if (!svBlock) continue;\n        var svHtml = svBlock.innerHTML || '';\n        var svNormalizedHtml = svHtml\n          .replace(/hamstring exercises/gi, 'hamstring\u00F6vningar')\n          .replace(/hamstring workouts/gi, 'hamstringpass')\n          .replace(\n            /Visste du att(?:\\\\s|&nbsp;|<[^>]+>)*Nordbelt(?:\\\\s|&nbsp;|<[^>]+>)*ett viktigt hj\u00E4lpmedel \u00E4r vid hamstring-\u00F6vningar\\\\?/gi,\n            'Visste du att Nordbelt \u00E4r ett viktigt hj\u00E4lpmedel vid hamstring\u00F6vningar?'\n          );\n        if (svNormalizedHtml !== svHtml) {\n          svBlock.innerHTML = svNormalizedHtml;\n        }\n      }\n      normalizeLocaleCopyNodes(root, [\n        { pattern: /hamstring exercises/gi, value: 'hamstring\u00F6vningar' },\n        { pattern: /hamstring workouts/gi, value: 'hamstringpass' },\n        { pattern: /best\u00E4ll de/gi, value: 'best\u00E4ll' },\n        {\n          pattern: /Visste du att\\s*Nordbelt\\s*ett viktigt hj\u00E4lpmedel \u00E4r vid hamstring-\u00F6vningar\\?/gi,\n          value: 'Visste du att Nordbelt \u00E4r ett viktigt hj\u00E4lpmedel vid hamstring\u00F6vningar?'\n        }\n      ]);\n      return;\n    }\n\n    if (langRoot === 'it') {\n      normalizeLocaleCopyNodes(root, [\n        { pattern: /tendinopatia del tendine del ginocchio/gi, value: 'tendinopatia degli ischiocrurali' },\n        { pattern: /tendinite del tendine del ginocchio/gi, value: 'tendinite degli ischiocrurali' },\n        { pattern: /tendine del ginocchio/gi, value: 'ischiocrurali' },\n        { pattern: /tendini del ginocchio/gi, value: 'ischiocrurali' }\n      ]);\n    }\n  }\n\n  function initBusinessPracticeNlCopyCleanup(scope) {\n    if (!window.location || !/\\/pages\\/fysiopraktijken(?:\\/)?$/.test(window.location.pathname)) return;\n    var root = scope && scope.querySelectorAll ? scope : document;\n    var platformName = 'Shop' + 'ify';\n    var replacements = [\n      [platformName + ' checkout \u00B7 30 dagen proberen', 'Veilig afrekenen \u00B7 30 dagen proberen'],\n      ['actuele ' + platformName + '-prijs', 'actuele Nordbelt-prijs'],\n      ['actuele ' + platformName + '-verkoopprijs', 'actuele Nordbelt-verkoopprijs'],\n      ['automatisch uit ' + platformName + ' geladen', 'automatisch actueel gehouden op basis van de Nordbelt-productprijs'],\n      ['Partnerzichtbaarheid of selectieve doorverwijzingen kunnen bij sommige grotere pakketten een aanvullende bonus zijn, maar zijn niet de hoofdreden om voor een pakket te kiezen.', 'Kies het pakket dat past bij je kamers, therapeuten, thuiscontinuatie en locaties. Bij passende partnerpakketten kan extra zichtbaarheid helpen om Nordbelt-klanten in jouw regio sneller naar je praktijk te leiden.'],\n      ['Twijfel je tussen pakketten? Kies op basis van kamers, therapeuten, thuiscontinuatie en locaties \u2014 niet op basis van partnerextra\u2019s.', 'Twijfel je tussen pakketten? Vergelijk kamers, therapeuten, thuiscontinuatie, locaties en zichtbaarheid bij passende partnerpakketten.'],\n      ['Wat is partnerzichtbaarheid precies?', 'Hoe werkt zichtbaarheid bij Nordbelt-klanten?'],\n      ['Dat is een optionele bonus bij sommige grotere trajecten. Zie het niet als hoofdreden om voor Nordbelt te kiezen; de kern blijft vaste beschikbaarheid in de praktijk, herkenbare thuiscontinuatie en schaalbare uitrol.', 'Bij passende partnerpakketten kunnen we je praktijk zichtbaar maken op Nordbelt-kanalen en meenemen wanneer klanten begeleiding of beoordeling in de buurt zoeken. We stemmen dit af op regio, hulpvraag en beschikbaarheid.'],\n      ['Voor sommige grotere pakketten kunnen aanvullende zichtbaarheid of selectieve doorverwijzingen passend zijn. Zie dit als bonus, niet als hoofdreden om te bestellen.', 'Bij passende partnerpakketten kunnen we je praktijk zichtbaar maken op Nordbelt-kanalen en meenemen wanneer klanten begeleiding in de buurt zoeken.'],\n      ['Bonus bij grotere trajecten, niet leidend in de keuze.', 'Word vindbaar voor Nordbelt-klanten in jouw regio.'],\n      ['Bekijk mogelijke bonusopties', 'Bekijk zichtbaarheid'],\n      ['Selectieve doorverwijzing', 'Relevante doorverwijzing'],\n      ['Optionele partnerzichtbaarheid', 'Zichtbaarheid bij Nordbelt-klanten']\n    ];\n\n    function cleanValue(value) {\n      if (!value) return value;\n      var next = value;\n      replacements.forEach(function (pair) {\n        next = next.split(pair[0]).join(pair[1]);\n      });\n      return next;\n    }\n\n    root.querySelectorAll('script[type=\"application/ld+json\"], script[type=\"application/json\"]').forEach(function (script) {\n      script.textContent = cleanValue(script.textContent);\n    });\n\n    var walkerRoot = root.body || root;\n    if (!walkerRoot || !document.createTreeWalker) return;\n    var walker = document.createTreeWalker(walkerRoot, NodeFilter.SHOW_TEXT);\n    var nodes = [];\n    var node;\n    while ((node = walker.nextNode())) {\n      if (node.nodeValue && node.nodeValue.trim()) nodes.push(node);\n    }\n    nodes.forEach(function (textNode) {\n      var cleaned = cleanValue(textNode.nodeValue);\n      if (cleaned !== textNode.nodeValue) textNode.nodeValue = cleaned;\n    });\n  }\n\n  function initPracticeFunnelHeaderAndIdleCta() {\n    var body = document.body;\n    if (!body || body.getAttribute('data-page-handle') !== 'fysiopraktijken') return;\n\n    var trialLink = document.querySelector('[data-nb-cta=\"business_page_hero_secondary\"][href*=\"properties[_practice_segment]=practice\"], [data-nb-cta=\"business_page_hero_primary\"][href*=\"properties[_practice_segment]=practice\"], [data-business-plan-key=\"trial-1\"][href*=\"properties[_practice_segment]=practice\"]');\n    if (!trialLink) return;\n\n    var trialHref = trialLink.getAttribute('href') || '';\n    if (!trialHref) return;\n\n    var path = (window.location.pathname || '').toLowerCase();\n    var practiceTrialLabel = 'Bestel proef-Nordbelt';\n    if (/^\\/de(?:-|\\/|$)/.test(path)) practiceTrialLabel = 'Test-Nordbelt bestellen';\n    else if (/^\\/en(?:-|\\/|$)/.test(path)) practiceTrialLabel = 'Order trial Nordbelt';\n    else if (/^\\/fr(?:-|\\/|$)/.test(path)) practiceTrialLabel = \"Commander l'essai Nordbelt\";\n    else if (/^\\/es(?:-|\\/|$)/.test(path)) practiceTrialLabel = 'Pedir Nordbelt de prueba';\n    else if (/^\\/pt(?:-|\\/|$)/.test(path)) practiceTrialLabel = 'Pedir Nordbelt de teste';\n    else if (/^\\/it(?:-|\\/|$)/.test(path)) practiceTrialLabel = 'Ordina Nordbelt di prova';\n    else if (/^\\/fi(?:-|\\/|$)/.test(path)) practiceTrialLabel = 'Tilaa testattava Nordbelt';\n    else if (/^\\/sv(?:-|\\/|$)/.test(path)) practiceTrialLabel = 'Best\u00E4ll test-Nordbelt';\n    else if (/^\\/da(?:-|\\/|$)/.test(path)) practiceTrialLabel = 'Bestil test-Nordbelt';\n    else if (/^\\/nb(?:-|\\/|$)/.test(path)) practiceTrialLabel = 'Bestill test-Nordbelt';\n    else if (/^\\/et(?:-|\\/|$)/.test(path)) practiceTrialLabel = 'Telli test-Nordbelt';\n\n    document.querySelectorAll('.nb-header__cta, .nb-mobile-quick-cta').forEach(function (link) {\n      link.setAttribute('href', trialHref);\n      var label = link.querySelector('span');\n      if (label) label.textContent = practiceTrialLabel;\n      else link.textContent = practiceTrialLabel;\n      link.setAttribute('data-nb-cta', link.classList.contains('nb-mobile-quick-cta') ? 'header_practice_trial_mobile' : 'header_practice_trial');\n    });\n\n    var sticky = document.querySelector('[data-nb-practice-mobile-sticky]');\n    if (!sticky || sticky.getAttribute('data-nb-idle-managed') === 'true') return;\n    sticky.setAttribute('data-nb-idle-managed', 'true');\n    body.classList.add('nb-practice-idle-sticky-managed');\n\n    if (!document.getElementById('nb-practice-idle-sticky-style')) {\n      var style = document.createElement('style');\n      style.id = 'nb-practice-idle-sticky-style';\n      style.textContent = '@media (max-width:840px){body.nb-practice-idle-sticky-managed{padding-bottom:0!important}body.nb-practice-idle-sticky-managed [data-nb-practice-mobile-sticky]{position:fixed!important;left:auto!important;right:.72rem!important;bottom:calc(env(safe-area-inset-bottom,0px) + .72rem)!important;z-index:38!important;width:auto!important;max-width:calc(100vw - 1.2rem)!important;transform:translateY(14px) scale(.98)!important;opacity:0!important;pointer-events:none!important;display:block!important;transition:transform 180ms ease,opacity 180ms ease!important}body.nb-practice-idle-sticky-managed [data-nb-practice-mobile-sticky].nb-practice-idle-visible{transform:translateY(0) scale(1)!important;opacity:1!important;pointer-events:auto!important}body.nb-practice-idle-sticky-managed [data-nb-practice-mobile-sticky] .nb-practice-mobile-sticky__button{display:inline-flex!important;align-items:center!important;justify-content:center!important;min-height:40px!important;padding:.53rem .76rem!important;border-radius:999px!important;border:1px solid rgba(255,255,255,.42)!important;background:linear-gradient(135deg,rgba(111,184,158,.98),rgba(50,112,146,.98)),#143a55!important;box-shadow:0 13px 28px rgba(10,33,51,.24)!important;color:#fff!important;font-family:\\\"Space Grotesk\\\",\\\"Avenir Next\\\",sans-serif!important;font-size:.78rem!important;font-weight:800!important;line-height:1!important;text-decoration:none!important;white-space:nowrap!important}}@media (min-width:841px){body.nb-practice-idle-sticky-managed [data-nb-practice-mobile-sticky]{display:none!important}}';\n      document.head.appendChild(style);\n    }\n\n    while (sticky.firstChild) sticky.removeChild(sticky.firstChild);\n    var stickyButton = document.createElement('a');\n    stickyButton.className = 'nb-practice-mobile-sticky__button';\n    stickyButton.href = trialHref;\n    stickyButton.setAttribute('data-nb-cta', 'practice_mobile_idle_trial');\n    stickyButton.textContent = practiceTrialLabel;\n    sticky.appendChild(stickyButton);\n\n    var media = window.matchMedia ? window.matchMedia('(max-width: 840px)') : null;\n    var idleDelay = 4200;\n    var idleTimer = 0;\n\n    function setVisible(visible) {\n      sticky.hidden = false;\n      sticky.setAttribute('aria-hidden', visible ? 'false' : 'true');\n      sticky.classList.toggle('nb-practice-idle-visible', visible);\n      sticky.classList.toggle('is-visible', visible);\n      body.classList.remove('has-practice-mobile-sticky');\n    }\n\n    function clearIdleTimer() {\n      if (!idleTimer) return;\n      window.clearTimeout(idleTimer);\n      idleTimer = 0;\n    }\n\n    function isVisibleElement(element) {\n      if (!element || sticky.contains(element)) return false;\n      var rect = element.getBoundingClientRect();\n      if (!rect.width || !rect.height) return false;\n      return rect.bottom > 0 &&\n        rect.top < (window.innerHeight || document.documentElement.clientHeight || 0) &&\n        rect.right > 0 &&\n        rect.left < (window.innerWidth || document.documentElement.clientWidth || 0);\n    }\n\n    function hasTrialCtaInView() {\n      var candidates = document.querySelectorAll('a, button');\n      for (var i = 0; i < candidates.length; i += 1) {\n        var candidate = candidates[i];\n        var text = (candidate.textContent || '').replace(/\\s+/g, ' ').trim().toLowerCase();\n        var href = (candidate.getAttribute('href') || '').toLowerCase();\n        var looksLikeTrialCta = text.indexOf('bestel proef') !== -1 ||\n          text.indexOf('test-nordbelt bestellen') !== -1 ||\n          text.indexOf('order trial nordbelt') !== -1 ||\n          text.indexOf(\"commander l'essai nordbelt\") !== -1 ||\n          text.indexOf('nordbelt de prueba') !== -1 ||\n          text.indexOf('pedir nordbelt') !== -1 ||\n          text.indexOf('nordbelt de teste') !== -1 ||\n          text.indexOf('nordbelt di prova') !== -1 ||\n          text.indexOf('testattava nordbelt') !== -1 ||\n          text.indexOf('tilaa testattava') !== -1 ||\n          text.indexOf('proef-nordbelt') !== -1 ||\n          (href.indexOf('practice-trial') !== -1 && (\n            text.indexOf('proef') !== -1 ||\n            text.indexOf('test-nordbelt') !== -1 ||\n            text.indexOf('trial nordbelt') !== -1 ||\n            text.indexOf('essai nordbelt') !== -1 ||\n            text.indexOf('prueba') !== -1 ||\n            text.indexOf('teste') !== -1 ||\n            text.indexOf('prova') !== -1 ||\n            text.indexOf('testattava') !== -1\n          ));\n        if (looksLikeTrialCta && isVisibleElement(candidate)) return true;\n      }\n      return false;\n    }\n\n    function shouldShow() {\n      return media && media.matches && !document.hidden && !hasTrialCtaInView();\n    }\n\n    function scheduleIdleReveal() {\n      clearIdleTimer();\n      if (!media || !media.matches) {\n        setVisible(false);\n        return;\n      }\n      idleTimer = window.setTimeout(function () {\n        idleTimer = 0;\n        if (shouldShow()) setVisible(true);\n        else scheduleIdleReveal();\n      }, idleDelay);\n    }\n\n    function registerActivity() {\n      setVisible(false);\n      scheduleIdleReveal();\n    }\n\n    setVisible(false);\n    ['scroll', 'wheel', 'touchstart', 'touchmove', 'pointerdown', 'keydown'].forEach(function (eventName) {\n      window.addEventListener(eventName, registerActivity, { passive: true });\n    });\n    window.addEventListener('resize', registerActivity, { passive: true });\n    window.addEventListener('orientationchange', registerActivity, { passive: true });\n    document.addEventListener('visibilitychange', registerActivity);\n    scheduleIdleReveal();\n  }\n\n  function isMobileArticleRuntime() {\n    var body = document.body;\n    if (!body || body.getAttribute('data-page-type') !== 'article') return false;\n    return !!(window.matchMedia && window.matchMedia('(max-width: 840px)').matches);\n  }\n\n  function scheduleRuntimeIdle(callback, delayMs, timeoutMs) {\n    if (typeof callback !== 'function') return;\n    window.setTimeout(function () {\n      if ('requestIdleCallback' in window) {\n        window.requestIdleCallback(callback, { timeout: Math.max(800, Number(timeoutMs || 2200)) });\n      } else {\n        window.setTimeout(callback, 16);\n      }\n    }, Math.max(0, Number(delayMs || 0)));\n  }\n\n  document.addEventListener('DOMContentLoaded', function () {\n    var mobileArticleRuntime = isMobileArticleRuntime();\n    initAdPlatformBridges();\n    initCookieMiniBanner();\n    initImageLoadingHints();\n    localizeInternalAnchors(document);\n    initSwedishKronaPriceFormatting();\n    initConversionCtaRoutes();\n    cleanupArticleEditorialNoise(document);\n    initArticleHeroEnhancements(document);\n    if (mobileArticleRuntime) {\n      scheduleRuntimeIdle(function () {\n        initArticleEditorialMedia(document);\n        initArticleEditorialCallouts(document);\n        initArticleTableOfContents(document);\n      }, 260, 1800);\n      scheduleRuntimeIdle(function () {\n        initArticleInlineConversionBlocks(document);\n        initArticleFaqEnhancements(document);\n      }, 760, 2600);\n      scheduleRuntimeIdle(function () {\n        initArticleViewTracking(document);\n        initArticleScrollDepthTracking(document);\n        initCommercialSurfaceViewTracking(document);\n        initCtaTracking();\n        initBlogConversionTracking(document);\n        initArticleInlineProductLinkTracking(document);\n        initArticleMobileStickyCta(document);\n        initBlogLocaleCopyHotfix(document);\n      }, 1350, 4200);\n    } else {\n      initArticleEditorialMedia(document);\n      initArticleEditorialCallouts(document);\n      initArticleTableOfContents(document);\n      initArticleInlineConversionBlocks(document);\n      initArticleViewTracking(document);\n      initArticleScrollDepthTracking(document);\n      initArticleInlineProductLinkTracking(document);\n    }\n    initClarityRuntimeBridge();\n    initViewItemTracking();\n    initAtcTracking();\n    initBeginCheckoutTracking();\n    if (!mobileArticleRuntime) {\n      initCommercialSurfaceViewTracking(document);\n      initCtaTracking();\n      initBlogConversionTracking(document);\n    }\n    initReveal();\n    initMobileNav();\n    initRuntimeSeoGuards();\n    initAutoLocaleRouting();\n    initAnnouncementAutoHide();\n    initHeaderCompactState();\n    initHeaderLocalization();\n    restoreCartAfterLocaleSwitch();\n    initFixedStackOffsets();\n    if (!mobileArticleRuntime) initArticleFaqEnhancements(document);\n    initFaq();\n    injectHomepageFaqJsonLd(document);\n    initArticleInlineProductLinkTracking(document);\n    initGallery();\n    initMobileStickyCta();\n    initScrollTo();\n    initGlobalMobileBuyCta();\n    if (!mobileArticleRuntime) initArticleMobileStickyCta(document);\n    initProductDescriptionToggle();\n    initMobileProductDetailsToggle();\n    initHeroAbRuntimeFix();\n    initHeroTitleMaxLines(document);\n    if (mobileArticleRuntime) {\n      scheduleRuntimeIdle(function () {\n        initFounderStoryMedia();\n        initHomeGuideStepsRuntimePatch(document);\n        initMobileVideoViewportAutoplay(document);\n      }, 3200, 7000);\n    } else {\n      initFounderStoryMedia();\n      initHomeGuideStepsRuntimePatch(document);\n      initMobileVideoViewportAutoplay(document);\n    }\n    initBusinessPracticeNlCopyCleanup(document);\n    initPracticeFunnelHeaderAndIdleCta();\n    initFiReviewProofGoogleLabelFallback(document);\n    if (!mobileArticleRuntime) initBlogLocaleCopyHotfix(document);\n    initGlobalReserveTimer();\n  });\n\n  document.addEventListener('shopify:section:load', function (event) {\n    if (!event || !event.target) return;\n    initImageLoadingHints(event.target);\n    localizeInternalAnchors(event.target);\n    normalizeSwedishKronaPricesInScope(event.target);\n    applyConversionCtaRoutes(event.target);\n    applyConversionPreviewPaths(event.target);\n    cleanupArticleEditorialNoise(event.target);\n    initArticleEditorialMedia(event.target);\n    initArticleHeroEnhancements(event.target);\n    initArticleEditorialCallouts(event.target);\n    initArticleTableOfContents(event.target);\n    initArticleInlineConversionBlocks(event.target);\n    initArticleViewTracking(event.target);\n    initArticleScrollDepthTracking(event.target);\n    initCtaTracking();\n    initCommercialSurfaceViewTracking(event.target);\n    initBlogConversionTracking(event.target);\n    initArticleMobileStickyCta(event.target);\n    initArticleFaqEnhancements(event.target);\n    initFaq();\n    injectHomepageFaqJsonLd(event.target);\n    initArticleInlineProductLinkTracking(event.target);\n    initHeroAbRuntimeFix();\n    initHeroTitleMaxLines(event.target);\n    initHomeGuideStepsRuntimePatch(event.target);\n    initMobileVideoViewportAutoplay(event.target);\n    initBusinessPracticeNlCopyCleanup(event.target);\n    initPracticeFunnelHeaderAndIdleCta();\n    try {\n      initFiReviewProofGoogleLabelFallback(event.target);\n    } catch (error) {\n      // no-op\n    }\n    try {\n      initBlogLocaleCopyHotfix(event.target);\n    } catch (error) {\n      // no-op\n    }\n  });\n\n  function runReviewProofLabelSafety() {\n    try {\n      initFiReviewProofGoogleLabelFallback(document);\n    } catch (error) {\n      // no-op\n    }\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', runReviewProofLabelSafety, { once: true });\n  } else {\n    runReviewProofLabelSafety();\n  }\n  window.addEventListener('load', runReviewProofLabelSafety, { once: true });\n})();\n\n(function () {\n  function isHomepage2Experience() {\n    var root = document.documentElement;\n    var body = document.body;\n    if (root && root.getAttribute('data-nb-home-ab-variant') === 'b') return true;\n    if (body && body.getAttribute('data-nb-home-ab-variant') === 'b') return true;\n    if (body && body.getAttribute('data-page-handle') === 'homepage-2') return true;\n    try {\n      var params = new URLSearchParams(window.location.search || '');\n      var forced = String(params.get('nb_home_ab') || params.get('nb_homepage_ab') || '').toLowerCase();\n      if (forced === 'b' || forced === 'homepage2' || forced === 'homepage-2') return true;\n    } catch (_error) {}\n    return false;\n  }\n\n  function isArticlePageRuntime() {\n    return !!(document.body && document.body.getAttribute('data-page-type') === 'article');\n  }\n\n  function getHomepage2Scope() {\n    var panel = document.querySelector('[data-nb-home-ab-panel=\"b\"], [data-nb-product-b-homepage2-panel], [data-nb-article-b-homepage2-panel]');\n    if (panel) return panel;\n    return document.querySelector('[id^=\"shopify-section-homepage-2\"], [id^=\"nb-homepage-2-\"]');\n  }\n\n  function ensureHomepage2MediaPreconnect() {\n    if (!isHomepage2Experience()) return;\n    return;\n  }\n\n  function bringHomepage2PanelForward(scope) {\n    var panel = scope && scope.matches && scope.matches('[data-nb-home-ab-panel=\"b\"]') ? scope : document.querySelector('[data-nb-home-ab-panel=\"b\"]');\n    var main = document.querySelector('main.nb-main-content');\n    if (!panel || !main || main.firstElementChild === panel) return;\n    try {\n      main.insertBefore(panel, main.firstElementChild);\n    } catch (_error) {}\n  }\n\n  function hydrateVideo(video) {\n    if (!video) return;\n    var changed = false;\n    var sources = video.querySelectorAll('source');\n    sources.forEach(function (source) {\n      var src = source.getAttribute('data-nb-src') || source.getAttribute('data-src') || source.getAttribute('data-nb-home-ab-src') || '';\n      if (src && source.getAttribute('src') !== src) {\n        source.setAttribute('src', src);\n        changed = true;\n      }\n    });\n    video.muted = true;\n    video.defaultMuted = true;\n    video.playsInline = true;\n    video.setAttribute('muted', '');\n    video.setAttribute('playsinline', '');\n    video.setAttribute('webkit-playsinline', 'true');\n    video.setAttribute('data-nb-mobile-video-ignore', '');\n    if (video.preload !== 'metadata') {\n      video.preload = 'metadata';\n      video.setAttribute('preload', 'metadata');\n      changed = true;\n    }\n    if (changed || video.readyState < 3) {\n      try { video.load(); } catch (_error) {}\n    }\n  }\n\n  function isHomepage2PriorityVideo(video, index) {\n    return !!(video && video.matches && video.matches('.nb-home2-step-video, [data-nb-home2-step-video], [data-nb-home2-guide-video], [data-nb-home2-team-video]'));\n  }\n\n  function prefersReducedHomepage2Media() {\n    var connection = navigator.connection || navigator.mozConnection || navigator.webkitConnection;\n    return !!(connection && connection.saveData);\n  }\n\n  function collectHomepage2Videos(scope) {\n    var videos = Array.prototype.slice.call(scope ? scope.querySelectorAll('video') : []);\n    var rankVideo = function (video) {\n      if (!video || !video.matches) return 4;\n      if (video.matches('.nb-home2-step-video, [data-nb-home2-step-video]')) return 0;\n      if (video.matches('[data-nb-home2-guide-video]')) return 1;\n      if (video.matches('[data-nb-home2-team-video]')) return 2;\n      if (video.matches('[data-nb-home2-proof-video]')) return 3;\n      return 3;\n    };\n    videos.sort(function (a, b) {\n      var aPriority = rankVideo(a);\n      var bPriority = rankVideo(b);\n      if (aPriority !== bPriority) return aPriority - bPriority;\n      var aTop = 0;\n      var bTop = 0;\n      try {\n        aTop = a.getBoundingClientRect().top;\n        bTop = b.getBoundingClientRect().top;\n      } catch (_error) {}\n      return aTop - bTop;\n    });\n    return videos;\n  }\n\n  function prewarmHomepage2GuideVideo() {\n    if (!isHomepage2Experience() || prefersReducedHomepage2Media()) return;\n    var scope = getHomepage2Scope();\n    if (!scope || scope.getAttribute('data-nb-home2-guide-video-prewarmed') === 'true') return;\n    var video = scope.querySelector('[data-nb-home2-guide-video]');\n    if (!video) return;\n    if (!isHomepage2VideoNearby(video)) return;\n    bringHomepage2PanelForward(scope);\n    scope.setAttribute('data-nb-home2-guide-video-prewarmed', 'true');\n    hydrateVideo(video);\n  }\n\n  function isHomepage2VideoNearby(video) {\n    var rect = video.getBoundingClientRect();\n    var viewportHeight = window.innerHeight || document.documentElement.clientHeight || 0;\n    if (rect.width <= 2 || rect.height <= 2) return false;\n    return rect.top < viewportHeight + 320 && rect.bottom > -180;\n  }\n\n  function prewarmHomepage2Videos(mode) {\n    if (!isHomepage2Experience()) return;\n    var scope = getHomepage2Scope();\n    if (!scope) return;\n    bringHomepage2PanelForward(scope);\n    var videos = collectHomepage2Videos(scope);\n    if (!videos.length) return;\n    var saveData = prefersReducedHomepage2Media();\n    scope.setAttribute('data-nb-home2-video-prewarm-asset', 'true');\n    videos.forEach(function (video, index) {\n      var isPriority = isHomepage2PriorityVideo(video, index);\n      if (saveData && !isPriority) return;\n      if ((isPriority || mode === 'nearby') && isHomepage2VideoNearby(video)) hydrateVideo(video);\n    });\n  }\n\n  function prewarmHomepage2AllVideosStaggered(force) {\n    if (!isHomepage2Experience()) return;\n    var scope = getHomepage2Scope();\n    if (!scope || (!force && scope.getAttribute('data-nb-home2-all-videos-staggered') === 'true')) return;\n    bringHomepage2PanelForward(scope);\n    scope.setAttribute('data-nb-home2-all-videos-staggered', 'true');\n    var videos = collectHomepage2Videos(scope);\n    var saveData = prefersReducedHomepage2Media();\n    var secondaryIndex = 0;\n    videos.forEach(function (video, index) {\n      var isPriority = isHomepage2PriorityVideo(video, index);\n      if (saveData && !isPriority) return;\n      var delay = isPriority ? Math.min(index * 140, 520) : 720 + (secondaryIndex * 340);\n      if (!isPriority) secondaryIndex += 1;\n      window.setTimeout(function () {\n        if (!isHomepage2VideoNearby(video)) return;\n        hydrateVideo(video);\n      }, delay);\n    });\n  }\n\n  function prewarmHomepage2ImagesStaggered() {\n    if (!isHomepage2Experience()) return;\n    var scope = getHomepage2Scope();\n    if (!scope || scope.getAttribute('data-nb-home2-images-staggered') === 'true') return;\n    scope.setAttribute('data-nb-home2-images-staggered', 'true');\n    scope.nbHome2ImagePreloads = scope.nbHome2ImagePreloads || [];\n    var images = scope.querySelectorAll('img');\n    images.forEach(function (img, index) {\n      window.setTimeout(function () {\n        var dataSrc = img.getAttribute('data-src') || img.getAttribute('data-nb-src') || '';\n        var dataSrcset = img.getAttribute('data-srcset') || img.getAttribute('data-nb-srcset') || '';\n        img.loading = 'eager';\n        img.setAttribute('loading', 'eager');\n        img.decoding = 'async';\n        try { img.fetchPriority = 'low'; } catch (_priorityErr) {}\n        if (dataSrcset && !img.getAttribute('srcset')) img.setAttribute('srcset', dataSrcset);\n        if (dataSrc && !img.getAttribute('src')) img.setAttribute('src', dataSrc);\n        var src = img.currentSrc || img.getAttribute('src') || dataSrc;\n        var srcset = img.getAttribute('srcset') || dataSrcset;\n        if (src || srcset) {\n          var preloader = new Image();\n          preloader.decoding = 'async';\n          try { preloader.fetchPriority = 'low'; } catch (_preloadPriorityErr) {}\n          if (img.getAttribute('sizes')) preloader.sizes = img.getAttribute('sizes');\n          if (srcset) preloader.srcset = srcset;\n          if (src) preloader.src = src;\n          scope.nbHome2ImagePreloads.push(preloader);\n        }\n        if (typeof img.decode === 'function') img.decode().catch(function () {});\n      }, Math.min(index * 45, 1800));\n    });\n  }\n\n  function afterHomepage2Lcp(callback, timeout) {\n    var done = false;\n    var observer = null;\n    var finish = function () {\n      if (done) return;\n      done = true;\n      try { if (observer) observer.disconnect(); } catch (_error) {}\n      callback();\n    };\n    var timer = window.setTimeout(finish, timeout || 5200);\n    if (!('PerformanceObserver' in window)) return;\n    try {\n      observer = new PerformanceObserver(function (list) {\n        if (!list || !list.getEntries || !list.getEntries().length) return;\n        window.clearTimeout(timer);\n        window.setTimeout(finish, 120);\n      });\n      observer.observe({ type: 'largest-contentful-paint', buffered: true });\n    } catch (_error) {}\n  }\n\n  function scheduleHomepage2AllMediaPrewarm() {\n    if (!isHomepage2Experience()) return;\n    var scope = getHomepage2Scope();\n    if (!scope || scope.getAttribute('data-nb-home2-all-media-prewarm') === 'scheduled') return;\n    scope.setAttribute('data-nb-home2-all-media-prewarm', 'scheduled');\n    var run = function () {\n      ensureHomepage2MediaPreconnect();\n    };\n    var runIdle = function () {\n      if ('requestIdleCallback' in window) {\n        window.requestIdleCallback(run, { timeout: 3200 });\n      } else {\n        window.setTimeout(run, 1800);\n      }\n    };\n    if (document.readyState !== 'loading') {\n      afterHomepage2Lcp(runIdle, 5200);\n    } else {\n      document.addEventListener('DOMContentLoaded', function () {\n        afterHomepage2Lcp(runIdle, 5200);\n      }, { once: true });\n    }\n    if (document.readyState === 'complete') {\n      window.setTimeout(runIdle, 3600);\n    } else {\n      window.addEventListener('load', function () {\n        window.setTimeout(runIdle, 3400);\n      }, { once: true });\n    }\n    window.setTimeout(runIdle, 6500);\n  }\n\n  function observeHomepage2Videos() {\n    if (!isHomepage2Experience() || !('IntersectionObserver' in window)) return;\n    var scope = getHomepage2Scope();\n    if (!scope || scope.getAttribute('data-nb-home2-video-observer-bound') === 'true') return;\n    scope.setAttribute('data-nb-home2-video-observer-bound', 'true');\n    var videos = scope.querySelectorAll('video');\n    var observer = new IntersectionObserver(function (entries) {\n      entries.forEach(function (entry) {\n        if (!entry.isIntersecting && entry.intersectionRatio <= 0) return;\n        var rect = entry.target.getBoundingClientRect();\n        if (rect.width <= 2 || rect.height <= 2) return;\n        hydrateVideo(entry.target);\n        observer.unobserve(entry.target);\n      });\n    }, { rootMargin: '80px 0px 80px 0px', threshold: 0.01 });\n    videos.forEach(function (video, index) {\n      observer.observe(video);\n    });\n  }\n\n  function scheduleHomepage2VideoPrewarm() {\n    if (!isHomepage2Experience()) return;\n    ensureHomepage2MediaPreconnect();\n    var isArticlePage = isArticlePageRuntime();\n    var runNearby = function () { prewarmHomepage2Videos('nearby'); };\n    var runGuide = function () { prewarmHomepage2GuideVideo(); };\n    window.setTimeout(observeHomepage2Videos, isArticlePage ? 1400 : 700);\n    scheduleHomepage2AllMediaPrewarm();\n    if (isArticlePage) return;\n    ['scroll', 'pointerdown', 'touchstart', 'keydown'].forEach(function (eventName) {\n      window.addEventListener(eventName, function () {\n        runNearby();\n        runGuide();\n      }, { once: true, passive: true });\n    });\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', scheduleHomepage2VideoPrewarm, { once: true });\n  } else {\n    scheduleHomepage2VideoPrewarm();\n  }\n  window.addEventListener('nb:homepage-ab:rendered', scheduleHomepage2VideoPrewarm);\n  window.addEventListener('nb:product-b-tail:rendered', scheduleHomepage2VideoPrewarm);\n  window.addEventListener('nb:article-b-tail:rendered', scheduleHomepage2VideoPrewarm);\n  window.addEventListener('pageshow', scheduleHomepage2VideoPrewarm);\n})();\n\n(function () {\n  function isHomepage2() {\n    var body = document.body;\n    if (body && body.getAttribute('data-page-handle') === 'homepage-2') return true;\n    return window.location && window.location.pathname.indexOf('/pages/homepage-2') !== -1;\n  }\n\n  function getLocaleRoot() {\n    var pathPart = (window.location.pathname || '').replace(/^\\/+/, '').split('/')[0].toLowerCase();\n    if (pathPart.indexOf('-') !== -1) return pathPart.split('-')[0];\n    if (/^(en|de|fr|es|pt|it|fi|sv|da|nb|et|nl)$/.test(pathPart)) return pathPart;\n    var lang = (document.documentElement.getAttribute('lang') || 'nl').toLowerCase();\n    return lang.split('-')[0] || 'nl';\n  }\n\n  function getReviewTitleHtml(localeRoot) {\n    switch (localeRoot) {\n      case 'en':\n        return 'Check Nordbelt via <span class=\"nb-review-proof-fysio__title-accent\">Trustpilot</span> and <span class=\"nb-review-proof-fysio__title-accent\">Google Reviews</span>';\n      case 'de':\n        return 'Sehen Sie sich Nordbelt auf <span class=\"nb-review-proof-fysio__title-accent\">Trustpilot</span> und <span class=\"nb-review-proof-fysio__title-accent\">Google-Bewertungen</span> an';\n      case 'fr':\n        return 'Consultez Nordbelt sur <span class=\"nb-review-proof-fysio__title-accent\">Trustpilot</span> et dans les <span class=\"nb-review-proof-fysio__title-accent\">avis Google</span>';\n      case 'sv':\n        return 'Kontrollera Nordbelt via <span class=\"nb-review-proof-fysio__title-accent\">Trustpilot</span> och <span class=\"nb-review-proof-fysio__title-accent\">Google-recensioner</span>';\n      case 'da':\n        return 'Tjek Nordbelt via <span class=\"nb-review-proof-fysio__title-accent\">Trustpilot</span> og <span class=\"nb-review-proof-fysio__title-accent\">Google-anmeldelser</span>';\n      case 'nb':\n        return 'Sjekk Nordbelt p\u00E5 <span class=\"nb-review-proof-fysio__title-accent\">Trustpilot</span> og i <span class=\"nb-review-proof-fysio__title-accent\">Google-anmeldelser</span>';\n      case 'fi':\n        return 'Katso Nordbeltin arviot <span class=\"nb-review-proof-fysio__title-accent\">Trustpilotissa</span> ja <span class=\"nb-review-proof-fysio__title-accent\">Googlessa</span>';\n      case 'pt':\n        return 'Veja avalia\u00E7\u00F5es da Nordbelt no <span class=\"nb-review-proof-fysio__title-accent\">Trustpilot</span> e no <span class=\"nb-review-proof-fysio__title-accent\">Google</span>';\n      case 'it':\n        return 'Leggi le recensioni Nordbelt su <span class=\"nb-review-proof-fysio__title-accent\">Trustpilot</span> e <span class=\"nb-review-proof-fysio__title-accent\">Google</span>';\n      case 'et':\n        return 'Vaata Nordbelti arvustusi <span class=\"nb-review-proof-fysio__title-accent\">Trustpilotis</span> ja <span class=\"nb-review-proof-fysio__title-accent\">Google\u2019is</span>';\n      case 'es':\n        return 'Consulta rese\u00F1as de Nordbelt en <span class=\"nb-review-proof-fysio__title-accent\">Trustpilot</span> y <span class=\"nb-review-proof-fysio__title-accent\">Google</span>';\n      default:\n        return 'Lees ervaringen op <span class=\"nb-review-proof-fysio__title-accent\">Google</span> en <span class=\"nb-review-proof-fysio__title-accent\">Trustpilot</span>';\n    }\n  }\n\n  function syncHomepage2ReviewTitle(root) {\n    if (!isHomepage2()) return;\n    var scope = root && root.querySelector ? root : document;\n    var section = scope.querySelector('#nb-review-proof-template--29456669180245__homepage_2_photo_backbone_r7, .nb-review-proof--fysio');\n    if (!section) return;\n    var title = section.querySelector('.nb-review-proof-fysio__title');\n    if (title) {\n      title.setAttribute('translate', 'no');\n      title.setAttribute('data-no-translate', 'true');\n      title.innerHTML = getReviewTitleHtml(getLocaleRoot());\n    }\n    Array.prototype.forEach.call(section.querySelectorAll('.practice-b2b-review-context'), function (node) {\n      node.remove();\n    });\n  }\n\n  function scheduleHomepage2ReviewTitleSync(root) {\n    syncHomepage2ReviewTitle(root);\n    window.setTimeout(function () { syncHomepage2ReviewTitle(root); }, 80);\n    window.setTimeout(function () { syncHomepage2ReviewTitle(root); }, 450);\n    window.setTimeout(function () { syncHomepage2ReviewTitle(root); }, 1200);\n    window.setTimeout(function () { syncHomepage2ReviewTitle(root); }, 2600);\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', function () {\n      scheduleHomepage2ReviewTitleSync(document);\n    }, { once: true });\n  } else {\n    scheduleHomepage2ReviewTitleSync(document);\n  }\n\n  window.addEventListener('pageshow', function () {\n    scheduleHomepage2ReviewTitleSync(document);\n  });\n  document.addEventListener('shopify:section:load', function (event) {\n    scheduleHomepage2ReviewTitleSync(event && event.target ? event.target : document);\n  });\n})();\n\n(function () {\n  function getHomepage2Locale() {\n    var first = (window.location.pathname || '').replace(/^\\/+/, '').split('/')[0].toLowerCase();\n    var root = first.split('-')[0];\n    return /^(de|fr|es|pt|it|sv|da|nb|fi|et)$/.test(root) ? root : '';\n  }\n\n  function getHomepage2LocaleCopy(locale) {\n    var copy = {\n      de: ['Vor 17 Uhr bestellt: Versand noch heute', 'Sichere Zahlung', '20+ Physiopraxen', 'F\u00FCr Praxen, Teams und Gruppen', 'Arbeitest du mit mehreren Sportlern?', 'Fordere einen Test-Nordbelt f\u00FCr deine Praxis an oder sieh dir Nordbelt f\u00FCr Sportvereine, Teams und Gyms an.', 'Physio', 'F\u00FCr Physiopraxen', 'Nutze Nordbelt f\u00FCr Reha-Pl\u00E4ne, Performance-Bl\u00F6cke und Nachbetreuung au\u00DFerhalb des Behandlungsraums.', 'Test-Nordbelt f\u00FCr Physio anfragen', 'F\u00FCr Sportvereine, Teams und Gyms', 'Mache Nordic Hamstring Curls skalierbar f\u00FCr Sportler, Kader und Gruppentraining ohne gro\u00DFes Setup.', 'Test-Nordbelt f\u00FCr Verein, Team oder Gym anfragen'],\n      fr: ['Command\u00E9 avant 17 h : exp\u00E9di\u00E9 aujourd\u2019hui', 'Paiement s\u00E9curis\u00E9', '20+ cabinets de kin\u00E9', 'Pour cabinets, \u00E9quipes et groupes', 'Tu travailles avec plusieurs sportifs ?', 'Demande un Nordbelt d\u2019essai pour ton cabinet ou consulte Nordbelt pour clubs, \u00E9quipes et salles.', 'Kin\u00E9', 'Pour cabinets de kin\u00E9', 'Utilise Nordbelt pour la r\u00E9\u00E9ducation, les blocs performance et le suivi hors cabinet.', 'Demander un Nordbelt d\u2019essai pour kin\u00E9', 'Pour clubs, \u00E9quipes et salles', 'Rends les Nordic Hamstring Curls pratiques pour sportifs, groupes et entra\u00EEnements collectifs.', 'Demander un Nordbelt d\u2019essai pour club, \u00E9quipe ou salle'],\n      es: ['Pedido hoy, entrega r\u00E1pida', 'Pago seguro', '20+ cl\u00EDnicas de fisioterapia', 'Para cl\u00EDnicas, equipos y grupos', '\u00BFTrabajas con varios deportistas?', 'Solicita un Nordbelt de prueba para tu cl\u00EDnica o consulta Nordbelt para clubes, equipos y gimnasios.', 'Fisio', 'Para cl\u00EDnicas de fisioterapia', 'Usa Nordbelt en rehabilitaci\u00F3n, bloques de rendimiento y seguimiento fuera de la consulta.', 'Solicitar Nordbelt de prueba para fisio', 'Para clubes, equipos y gimnasios', 'Escala los Nordic Hamstring Curls para deportistas, plantillas y sesiones de grupo sin gran montaje.', 'Solicitar Nordbelt de prueba para club, equipo o gimnasio'],\n      pt: ['Entrega r\u00E1pida', 'Pagamento seguro', '20+ cl\u00EDnicas de fisioterapia', 'Para cl\u00EDnicas, equipas e grupos', 'Trabalha com v\u00E1rios atletas?', 'Pe\u00E7a um Nordbelt de teste para a sua cl\u00EDnica ou veja Nordbelt para clubes, equipas e gin\u00E1sios.', 'Fisio', 'Para cl\u00EDnicas de fisioterapia', 'Use Nordbelt em reabilita\u00E7\u00E3o, blocos de performance e acompanhamento fora da sala de tratamento.', 'Pedir Nordbelt de teste para fisio', 'Para clubes, equipas e gin\u00E1sios', 'Torne os Nordic Hamstring Curls escal\u00E1veis para atletas, equipas e treinos de grupo sem grande setup.', 'Pedir Nordbelt de teste para clube, equipa ou gin\u00E1sio'],\n      it: ['Consegna rapida', 'Pagamento sicuro', '20+ studi di fisioterapia', 'Per studi, squadre e gruppi', 'Lavori con pi\u00F9 atleti?', 'Richiedi un Nordbelt di prova per il tuo studio o guarda Nordbelt per societ\u00E0 sportive, squadre e palestre.', 'Fisio', 'Per studi di fisioterapia', 'Usa Nordbelt in percorsi di recupero, blocchi performance e follow-up fuori dallo studio.', 'Richiedi Nordbelt di prova per fisio', 'Per societ\u00E0 sportive, squadre e palestre', 'Rendi i Nordic Hamstring Curl scalabili per atleti, squadre e sessioni di gruppo senza grandi attrezzature.', 'Richiedi Nordbelt di prova per societ\u00E0, squadra o palestra'],\n      sv: ['Snabb leverans', 'S\u00E4ker betalning', '20+ fysiokliniker', 'F\u00F6r kliniker, lag och grupper', 'Jobbar du med flera idrottare?', 'Be om en Nordbelt-test f\u00F6r din klinik eller se Nordbelt f\u00F6r klubbar, lag och gym.', 'Fysio', 'F\u00F6r fysiokliniker', 'Anv\u00E4nd Nordbelt f\u00F6r rehabuppl\u00E4gg, prestationsblock och uppf\u00F6ljning utanf\u00F6r behandlingsrummet.', 'Be om test-Nordbelt f\u00F6r fysio', 'F\u00F6r klubbar, lag och gym', 'Skala Nordic Hamstring Curls f\u00F6r idrottare, trupper och grupptr\u00E4ning utan stor utrustning.', 'Be om test-Nordbelt f\u00F6r klubb, lag eller gym'],\n      da: ['Hurtig levering', 'Sikker betaling', '20+ fysioterapiklinikker', 'Til klinikker, hold og grupper', 'Arbejder du med flere atleter?', 'Anmod om en test-Nordbelt til din klinik, eller se Nordbelt til klubber, hold og fitnesscentre.', 'Fysio', 'Til fysioterapiklinikker', 'Brug Nordbelt i genoptr\u00E6ningsforl\u00F8b, performanceblokke og opf\u00F8lgning uden for behandlingsrummet.', 'Anmod om test-Nordbelt til fysio', 'Til klubber, hold og fitnesscentre', 'G\u00F8r Nordic Hamstring Curls skalerbare for atleter, trupper og gruppetr\u00E6ning uden stort setup.', 'Anmod om test-Nordbelt til klub, hold eller fitnesscenter'],\n      nb: ['Rask levering', 'Sikker betaling', '20+ fysioterapiklinikker', 'For klinikker, lag og grupper', 'Jobber du med flere ut\u00F8vere?', 'Be om en pr\u00F8ve-Nordbelt til klinikken, eller se Nordbelt for klubber, lag og treningssentre.', 'Fysio', 'For fysioterapiklinikker', 'Bruk Nordbelt i rehabopplegg, prestasjonsblokker og oppf\u00F8lging utenfor behandlingsrommet.', 'Be om pr\u00F8ve-Nordbelt for fysio', 'For klubber, lag og treningssentre', 'Skaler Nordic Hamstring Curls for ut\u00F8vere, tropper og gruppetrening uten stort oppsett.', 'Be om pr\u00F8ve-Nordbelt for klubb, lag eller treningssenter'],\n      fi: ['Nopea toimitus', 'Turvallinen maksu', '20+ fysioterapiaklinikkaa', 'Klinikoille, joukkueille ja ryhmille', 'Ty\u00F6skenteletk\u00F6 useiden urheilijoiden kanssa?', 'Pyyd\u00E4 Nordbelt kokeiltavaksi klinikalle tai katso Nordbelt urheiluseuroille, joukkueille ja saleille.', 'Fysio', 'Fysioterapiaklinikoille', 'K\u00E4yt\u00E4 Nordbeltia kuntoutuksessa, suorituskykyjaksoissa ja seurannassa hoitohuoneen ulkopuolella.', 'Pyyd\u00E4 Nordbelt kokeiltavaksi fysiolle', 'Urheiluseuroille, joukkueille ja saleille', 'Skaalaa Nordic Hamstring Curlit urheilijoille, joukkueille ja ryhm\u00E4harjoitteluun ilman isoa laitteistoa.', 'Pyyd\u00E4 Nordbelt kokeiltavaksi seuralle, joukkueelle tai salille'],\n      et: ['Kiire tarne', 'Turvaline makse', '20+ f\u00FCsioteraapiakliinikut', 'Kliinikutele, tiimidele ja r\u00FChmadele', 'T\u00F6\u00F6tad mitme sportlasega?', 'K\u00FCsi prooviks Nordbelt oma kliinikule v\u00F5i vaata Nordbelti spordiklubidele, tiimidele ja j\u00F5usaalidele.', 'F\u00FCsio', 'F\u00FCsioteraapiakliinikutele', 'Kasuta Nordbelti taastusravis, sooritusv\u00F5ime plokkides ja j\u00E4reltegevuses v\u00E4ljaspool raviruumi.', 'K\u00FCsi prooviks Nordbelt f\u00FCsiolle', 'Spordiklubidele, tiimidele ja j\u00F5usaalidele', 'Tee Nordic Hamstring Curlid skaleeritavaks sportlastele, tiimidele ja r\u00FChmatreeningule ilma suure seadistuseta.', 'K\u00FCsi prooviks Nordbelt klubile, tiimile v\u00F5i j\u00F5usaalile']\n    };\n    var extra = {\n      de: ['Lege den Nordbelt unter eine stabile T\u00FCr und f\u00FChre ihn durch die Schnallen.', 'Schlie\u00DFe die Schnallen und stelle die L\u00E4nge f\u00FCr die passende Passform ein.', 'Du bist fixiert. Zeit f\u00FCr Nordic Hamstring Curls und st\u00E4rkere Hamstrings.', 'Sportphysio MSc'],\n      fr: ['Place le Nordbelt sous une porte solide et fais-le passer dans les boucles.', 'Ferme les boucles et ajuste la longueur pour un bon maintien.', 'Tu es fix\u00E9. Place aux Nordic Hamstring Curls et \u00E0 des ischios plus forts.', 'Kin\u00E9 du sport MSc'],\n      es: ['Coloca Nordbelt bajo una puerta resistente y p\u00E1salo por las hebillas.', 'Cierra las hebillas y ajusta la longitud para un ajuste correcto.', 'Ya est\u00E1s sujeto. Hora de hacer Nordic Hamstring Curls y fortalecer los isquios.', 'Fisio deportivo MSc'],\n      pt: ['Coloque o Nordbelt por baixo de uma porta resistente e passe-o pelas fivelas.', 'Feche as fivelas e ajuste o comprimento para um encaixe correto.', 'Est\u00E1 preso. Hora de fazer Nordic Hamstring Curls e fortalecer os isquiotibiais.', 'Fisio desportivo MSc'],\n      it: ['Posiziona Nordbelt sotto una porta robusta e passalo attraverso le fibbie.', 'Chiudi le fibbie e regola la lunghezza per la vestibilit\u00E0 corretta.', 'Sei fissato. \u00C8 il momento dei Nordic Hamstring Curl e di hamstring pi\u00F9 forti.', 'Fisioterapista sportivo MSc'],\n      sv: ['Placera Nordbelt under en stabil d\u00F6rr och dra den genom sp\u00E4nnena.', 'Klicka fast sp\u00E4nnena och justera l\u00E4ngden f\u00F6r r\u00E4tt passform.', 'Du sitter fast. Dags f\u00F6r Nordic Hamstring Curls och starkare hamstrings.', 'Sportfysioterapeut MSc'],\n      da: ['Placer Nordbelt under en stabil d\u00F8r, og f\u00F8r den gennem sp\u00E6nderne.', 'Klik sp\u00E6nderne fast, og just\u00E9r l\u00E6ngden, s\u00E5 den passer.', 'Du sidder fast. Tid til Nordic Hamstring Curls og st\u00E6rkere bagl\u00E5r.', 'Sportsfysioterapeut MSc'],\n      nb: ['Plasser Nordbelt under en solid d\u00F8r og trekk den gjennom spennene.', 'Klikk spennene fast og juster lengden for riktig passform.', 'Du sitter fast. Tid for Nordic Hamstring Curls og sterkere hamstrings.', 'Idrettsfysioterapeut MSc'],\n      fi: ['Aseta Nordbelt tukevan oven alle ja pujota se solkien l\u00E4pi.', 'Kiinnit\u00E4 soljet ja s\u00E4\u00E4d\u00E4 pituus sopivaksi.', 'Jalat ovat kiinni. Aika tehd\u00E4 Nordic Hamstring Curleja ja vahvistaa takareisi\u00E4.', 'Urheilufysioterapeutti MSc'],\n      et: ['Paiguta Nordbelt tugeva ukse alla ja t\u00F5mba see l\u00E4bi pannalde.', 'Kinnita pandlad ja reguleeri pikkus sobivaks.', 'Oled fikseeritud. Aeg teha Nordic Hamstring Curle ja tugevdada tagareisi.', 'Spordif\u00FCsioterapeut MSc']\n    };\n    return copy[locale] && extra[locale] ? copy[locale].concat(extra[locale]) : copy[locale] || null;\n  }\n\n  function applyHomepage2LocaleCleanup(root) {\n    var locale = getHomepage2Locale();\n    var copy = getHomepage2LocaleCopy(locale);\n    if (!root || !copy || !window.NodeFilter) return;\n    var from = [\n      'Voor 18:00 besteld, dezelfde dag verzonden',\n      'Veilig betalen',\n      '20+ fysiopraktijken',\n      'For clinics, teams and groups',\n      'Work with multiple athletes?',\n      'Request a trial Nordbelt for your clinic or view Nordbelt for sports clubs, teams and gyms.',\n      'Physio',\n      'For physiotherapy clinics',\n      'Use Nordbelt for rehab plans, performance blocks and follow-up outside the treatment room.',\n      'Request trial Nordbelt for physio',\n      'For sports clubs, teams and gyms',\n      'Scale Nordic Hamstring Curls for athletes, squads and group training without a large setup.',\n      'Request trial Nordbelt for sports club/team/gym',\n      'Plaats de Nordbelt onder een stevige deur en trek deze door de gespen.',\n      'Klik de gespen vast en stel de lengte af voor de perfecte pasvorm.',\n      'Je zit vast. Tijd voor Nordic Hamstring Curls en sterke, blessurevrije hamstrings.',\n      'Sportfysio MSc'\n    ];\n    var walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\n    var nodes = [];\n    while (walker.nextNode()) nodes.push(walker.currentNode);\n    nodes.forEach(function (node) {\n      var value = node.nodeValue;\n      from.forEach(function (source, index) {\n        if (value && value.indexOf(source) !== -1) value = value.split(source).join(copy[index]);\n      });\n      if (value !== node.nodeValue) node.nodeValue = value;\n    });\n  }\n\n  function scheduleHomepage2LocaleCleanup(scope) {\n    var root = (scope || document).querySelector('[id^=\"nb-homepage-2-\"]');\n    if (!root) return;\n    applyHomepage2LocaleCleanup(root);\n    window.setTimeout(function () { applyHomepage2LocaleCleanup(root); }, 180);\n    window.setTimeout(function () { applyHomepage2LocaleCleanup(root); }, 900);\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', function () { scheduleHomepage2LocaleCleanup(document); }, { once: true });\n  } else {\n    scheduleHomepage2LocaleCleanup(document);\n  }\n  window.addEventListener('pageshow', function () { scheduleHomepage2LocaleCleanup(document); });\n  document.addEventListener('shopify:section:load', function (event) { scheduleHomepage2LocaleCleanup(event && event.target ? event.target : document); });\n})();\n\n(function () {\n  var fallbackTocIntervalId = 0;\n\n  function text(value) {\n    return String(value || '').replace(/\\s+/g, ' ').trim();\n  }\n\n  function localeRoot() {\n    var lang = String(document.documentElement.getAttribute('lang') || '').toLowerCase();\n    if (lang) return lang.split('-')[0];\n    var segment = String(window.location.pathname || '').split('/').filter(Boolean)[0] || '';\n    return segment.toLowerCase().split('-')[0];\n  }\n\n  function labels() {\n    var lang = localeRoot();\n    var map = {\n      nl: ['Leeswijzer', 'In dit artikel', 'Scan eerst de kernpunten en kies daarna je volgende stap.'],\n      de: ['\u00DCberblick', 'In diesem Artikel', 'Scanne zuerst die wichtigsten Punkte und w\u00E4hle dann deinen n\u00E4chsten Schritt.'],\n      fr: ['Rep\u00E8re', 'Dans cet article', 'Parcourez les points cl\u00E9s, puis choisissez votre prochaine \u00E9tape.'],\n      sv: ['\u00D6versikt', 'I den h\u00E4r artikeln', 'Skanna huvudpunkterna f\u00F6rst och v\u00E4lj sedan n\u00E4sta steg.'],\n      da: ['Overblik', 'I denne artikel', 'Scan f\u00F8rst hovedpunkterne og v\u00E6lg derefter dit n\u00E6ste skridt.'],\n      nb: ['Oversikt', 'I denne artikkelen', 'Skann hovedpunktene f\u00F8rst og velg deretter neste steg.'],\n      fi: ['Yleiskatsaus', 'T\u00E4ss\u00E4 artikkelissa', 'Silm\u00E4ile ensin p\u00E4\u00E4kohdat ja valitse seuraava askel.'],\n      et: ['\u00DClevaade', 'Selles artiklis', 'Vaata esmalt p\u00F5hipunkte ja vali seej\u00E4rel j\u00E4rgmine samm.'],\n      es: ['Gu\u00EDa r\u00E1pida', 'En este art\u00EDculo', 'Revisa primero los puntos clave y elige despu\u00E9s el siguiente paso.'],\n      it: ['Guida rapida', 'In questo articolo', 'Scorri prima i punti chiave e poi scegli il passo successivo.']\n    };\n    return map[lang] || ['Read guide', 'In this article', 'Scan the key points first, then choose your next step.'];\n  }\n\n  function slug(value, index) {\n    var base = text(value)\n      .toLowerCase()\n      .normalize('NFD')\n      .replace(/[\\u0300-\\u036f]/g, '')\n      .replace(/[^a-z0-9]+/g, '-')\n      .replace(/^-+|-+$/g, '');\n    return base || ('article-section-' + String(index + 1));\n  }\n\n  function shortLabel(value) {\n    var label = text(value).replace(/[.!?;:,]+$/g, '');\n    if (label.length <= 38) return label;\n    var candidate = label.split(/\\s+(?:voor|van|over|bij|met|om|tegen|for|with|about|\u00FCber|mit|f\u00FCr|sur|pour|med|til|con|per|para|sobre|di|del|della)\\s+/i)[0];\n    candidate = text(candidate);\n    if (candidate.length >= 10 && candidate.length <= 38) return candidate;\n    var trimmed = label.slice(0, 35);\n    var lastSpace = trimmed.lastIndexOf(' ');\n    if (lastSpace > 18) trimmed = trimmed.slice(0, lastSpace);\n    return text(trimmed) + '\u2026';\n  }\n\n  function ensureHeadingId(heading, index) {\n    if (!heading) return '';\n    var candidate = String(heading.id || '').trim() || ('article-' + slug(heading.textContent, index));\n    var suffix = index + 1;\n    while (candidate && document.getElementById(candidate) && document.getElementById(candidate) !== heading) {\n      candidate = candidate.replace(/-\\d+$/, '') + '-' + String(suffix);\n      suffix += 1;\n    }\n    heading.id = candidate;\n    heading.setAttribute('data-nb-article-anchor', '');\n    return candidate;\n  }\n\n  function buildFallbackToc(articleRoot) {\n    if (!articleRoot || articleRoot.querySelector('.nb-article-toc')) return;\n    var rte = articleRoot.querySelector('[data-nb-article-rte], .nb-article__rte');\n    if (!rte) return;\n    var headings = Array.prototype.slice.call(rte.querySelectorAll('h2, h3')).filter(function (heading) {\n      return !heading.closest('.nb-article-toc') && text(heading.textContent).length >= 3;\n    });\n    if (headings.length < 2) return;\n\n    var selected = headings.filter(function (heading) {\n      return String(heading.tagName || '').toUpperCase() === 'H2';\n    });\n    if (selected.length < 2) selected = headings.slice();\n    selected = selected.slice(0, 6);\n\n    var copy = labels();\n    var toc = document.createElement('nav');\n    toc.className = 'nb-card nb-article-toc nb-reveal is-visible is-rehab';\n    toc.setAttribute('data-nb-generated', 'toc');\n    toc.setAttribute('data-nb-toc-fallback', 'true');\n    toc.setAttribute('aria-label', copy[1]);\n\n    var header = document.createElement('div');\n    header.className = 'nb-article-toc__header';\n    var eyebrow = document.createElement('p');\n    eyebrow.className = 'nb-article-toc__eyebrow';\n    eyebrow.textContent = copy[0];\n    var title = document.createElement('p');\n    title.className = 'nb-article-toc__title';\n    title.textContent = copy[1];\n    var hint = document.createElement('p');\n    hint.className = 'nb-article-toc__hint';\n    hint.textContent = copy[2];\n    header.appendChild(eyebrow);\n    header.appendChild(title);\n    header.appendChild(hint);\n    toc.appendChild(header);\n\n    var list = document.createElement('ol');\n    list.className = 'nb-article-toc__list';\n    selected.forEach(function (heading, index) {\n      var targetId = ensureHeadingId(heading, index);\n      if (!targetId) return;\n      var item = document.createElement('li');\n      item.className = 'nb-article-toc__item';\n      var link = document.createElement('a');\n      link.href = '#' + targetId;\n      link.setAttribute('data-nb-article-toc-link', '');\n      link.setAttribute('data-nb-cta', 'article_toc_jump');\n      link.setAttribute('data-nb-slot-id', 'article_toc');\n      link.setAttribute('data-nb-slot-type', 'toc');\n      link.setAttribute('data-nb-slot-destination', 'article_section');\n      link.setAttribute('data-nb-toc-target', targetId);\n      var indexBadge = document.createElement('span');\n      indexBadge.className = 'nb-article-toc__index';\n      indexBadge.textContent = String(index + 1).padStart(2, '0');\n      var label = document.createElement('span');\n      label.className = 'nb-article-toc__label';\n      label.textContent = shortLabel(heading.textContent);\n      link.appendChild(indexBadge);\n      link.appendChild(label);\n      item.appendChild(link);\n      list.appendChild(item);\n    });\n    if (!list.children.length) return;\n    toc.appendChild(list);\n\n    rte.insertBefore(toc, rte.firstElementChild || rte.firstChild);\n    articleRoot.dataset.nbTocInjected = 'true';\n  }\n\n  function syncFallbackTocs(root) {\n    var scope = root && root.querySelectorAll ? root : document;\n    var roots = [];\n    if (scope.matches && scope.matches('[data-nb-article-conversion]')) roots.push(scope);\n    Array.prototype.push.apply(roots, scope.querySelectorAll('[data-nb-article-conversion]'));\n    roots.forEach(function (articleRoot) {\n      buildFallbackToc(articleRoot);\n      if (!window.MutationObserver || articleRoot.getAttribute('data-nb-toc-fallback-observer') === 'true') return;\n      articleRoot.setAttribute('data-nb-toc-fallback-observer', 'true');\n      var scheduled = false;\n      var observer = new MutationObserver(function () {\n        if (scheduled) return;\n        scheduled = true;\n        window.setTimeout(function () {\n          scheduled = false;\n          buildFallbackToc(articleRoot);\n        }, 80);\n      });\n      observer.observe(articleRoot, { childList: true, subtree: true });\n      window.addEventListener('pagehide', function () {\n        observer.disconnect();\n      }, { once: true });\n    });\n  }\n\n  function scheduleFallbackTocs(root) {\n    syncFallbackTocs(root);\n    window.setTimeout(function () { syncFallbackTocs(root); }, 150);\n    window.setTimeout(function () { syncFallbackTocs(root); }, 900);\n    window.setTimeout(function () { syncFallbackTocs(root); }, 2200);\n    window.setTimeout(function () { syncFallbackTocs(root); }, 3800);\n    window.setTimeout(function () { syncFallbackTocs(root); }, 6200);\n    window.setTimeout(function () { syncFallbackTocs(root); }, 9000);\n  }\n\n  function runFallbackTocsDuringSettling() {\n    if (fallbackTocIntervalId) return;\n    var attempts = 0;\n    fallbackTocIntervalId = window.setInterval(function () {\n      attempts += 1;\n      syncFallbackTocs(document);\n      if (attempts >= 40 || !document.querySelector('[data-nb-article-conversion]')) {\n        window.clearInterval(fallbackTocIntervalId);\n        fallbackTocIntervalId = 0;\n      }\n    }, 500);\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', function () {\n      scheduleFallbackTocs(document);\n      runFallbackTocsDuringSettling();\n    }, { once: true });\n  } else {\n    scheduleFallbackTocs(document);\n    runFallbackTocsDuringSettling();\n  }\n  window.addEventListener('pageshow', function () {\n    scheduleFallbackTocs(document);\n    runFallbackTocsDuringSettling();\n  });\n  document.addEventListener('shopify:section:load', function (event) { scheduleFallbackTocs(event.target); });\n})();\n\n(function () {\n  var DURATION_MS = 800;\n\n  function getHeaderOffset() {\n    var header = document.querySelector('.shopify-section-header, .nb-header, header');\n    if (!header) return 10;\n    var position = window.getComputedStyle(header).position;\n    if (position !== 'fixed' && position !== 'sticky') return 10;\n    return Math.max(10, Math.round(header.getBoundingClientRect().height) + 10);\n  }\n\n  function easeOutQuint(progress) {\n    return 1 - Math.pow(1 - progress, 5);\n  }\n\n  function scrollWithCrescendo(destination) {\n    var startY = window.scrollY || window.pageYOffset || 0;\n    var distance = destination - startY;\n    if (Math.abs(distance) < 2) return;\n    var startTime = performance.now();\n\n    function tick(now) {\n      var progress = Math.min(1, (now - startTime) / DURATION_MS);\n      window.scrollTo(0, startY + distance * easeOutQuint(progress));\n      if (progress < 1) window.requestAnimationFrame(tick);\n      else window.scrollTo(0, destination);\n    }\n\n    window.requestAnimationFrame(tick);\n  }\n\n  function initHomepage2StepsScroll(root) {\n    var scope = root && root.querySelectorAll ? root : document;\n    var sections = [];\n    if (scope.matches && scope.matches('[id^=\"nb-homepage-2-\"]')) sections.push(scope);\n    Array.prototype.push.apply(sections, scope.querySelectorAll('[id^=\"nb-homepage-2-\"]'));\n\n    sections.forEach(function (section) {\n      if (section.dataset.nbHome2StepsScrollBound === 'true') return;\n      var target = section.querySelector('[id^=\"nb-home2-steps-\"]');\n      var triggers = section.querySelectorAll(\n        'a[data-nb-cta=\"homepage_2_hero_steps\"], a[data-nb-cta=\"homepage_2_mobile_steps\"], a[data-nb-cta=\"homepage_2_final_steps\"], a[href^=\"#nb-home2-steps-\"]'\n      );\n      if (!target || !triggers.length) return;\n      section.dataset.nbHome2StepsScrollBound = 'true';\n\n      triggers.forEach(function (trigger) {\n        trigger.addEventListener('click', function (event) {\n          event.preventDefault();\n          var pageY = window.scrollY || window.pageYOffset || 0;\n          var destination = Math.max(0, pageY + target.getBoundingClientRect().top - getHeaderOffset());\n          var reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n          if (reduce) window.scrollTo(0, destination);\n          else scrollWithCrescendo(destination);\n        });\n      });\n    });\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', function () { initHomepage2StepsScroll(document); });\n  } else {\n    initHomepage2StepsScroll(document);\n  }\n  document.addEventListener('shopify:section:load', function (event) { initHomepage2StepsScroll(event.target); });\n})();\n\n(function () {\n  var TARGET_SCORE = '4.3/5';\n  var OLD_TRUSTPILOT_SCORE = '4.2/5';\n\n  function isTrustpilotScoreNode(node) {\n    if (!node) return false;\n    if (node.matches && node.matches('[data-nb-proof-rating]')) return true;\n    var trustpilotSummary = node.closest && node.closest('.nb-review-proof-fysio__summary-item--trustpilot');\n    if (trustpilotSummary) return true;\n    var trustpilotCard = node.closest && node.closest('[data-nb-review-card=\"trustpilot\"], .nb-review-proof-card--trustpilot');\n    if (trustpilotCard) return true;\n    var ratingRow = node.closest && node.closest('.nb-rating-row');\n    if (ratingRow) return true;\n    return false;\n  }\n\n  function normalizeTrustpilotScores(root) {\n    var scope = root && root.querySelectorAll ? root : document;\n    var nodes = scope.querySelectorAll('.nb-review-proof-score, .nb-review-proof-fysio__summary-score, [data-nb-proof-rating], .nb-rating-row strong');\n    nodes.forEach(function (node) {\n      if (!isTrustpilotScoreNode(node)) return;\n      if ((node.textContent || '').trim() === OLD_TRUSTPILOT_SCORE) {\n        node.textContent = TARGET_SCORE;\n      }\n      if (node.getAttribute && node.getAttribute('data-variant-a') === OLD_TRUSTPILOT_SCORE) {\n        node.setAttribute('data-variant-a', TARGET_SCORE);\n      }\n    });\n  }\n\n  function scheduleTrustpilotScoreNormalize(root) {\n    normalizeTrustpilotScores(root);\n    window.setTimeout(function () { normalizeTrustpilotScores(root); }, 80);\n    window.setTimeout(function () { normalizeTrustpilotScores(root); }, 400);\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', function () { scheduleTrustpilotScoreNormalize(document); });\n  } else {\n    scheduleTrustpilotScoreNormalize(document);\n  }\n  window.addEventListener('pageshow', function () { scheduleTrustpilotScoreNormalize(document); });\n  document.addEventListener('shopify:section:load', function (event) { scheduleTrustpilotScoreNormalize(event.target); });\n})();\n\n(function () {\n  var ARTICLE_HANDLE = 'hamstring-training-protocol-fysiotherapie';\n  var SOURCE_INTRO = 'A hamstring training protocol for physiotherapy should not be a rigid calendar plan';\n\n  function normalizedText(value) {\n    return String(value || '').replace(/\\s+/g, ' ').trim();\n  }\n\n  function isSourceIntro(value) {\n    return normalizedText(value).indexOf(SOURCE_INTRO) === 0;\n  }\n\n  function fixLocalizedArticleDeckFromBody() {\n    var articleRoot = document.querySelector('[data-nb-article-slug=\"' + ARTICLE_HANDLE + '\"]');\n    if (!articleRoot) return;\n\n    var deck = document.querySelector('.nb-article__deck');\n    var bodyIntro = document.querySelector('.nb-article__rte p');\n    if (!deck || !bodyIntro) return;\n\n    var deckText = normalizedText(deck.textContent);\n    var bodyText = normalizedText(bodyIntro.textContent);\n    if (!deckText || !bodyText || isSourceIntro(bodyText)) return;\n    if (isSourceIntro(deckText)) deck.textContent = bodyText;\n  }\n\n  function scheduleLocalizedArticleDeckFix() {\n    fixLocalizedArticleDeckFromBody();\n    window.setTimeout(fixLocalizedArticleDeckFromBody, 120);\n    window.setTimeout(fixLocalizedArticleDeckFromBody, 700);\n    window.setTimeout(fixLocalizedArticleDeckFromBody, 1800);\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', scheduleLocalizedArticleDeckFix, { once: true });\n  } else {\n    scheduleLocalizedArticleDeckFix();\n  }\n  window.addEventListener('pageshow', scheduleLocalizedArticleDeckFix);\n  document.addEventListener('shopify:section:load', scheduleLocalizedArticleDeckFix);\n})();\n\n(function () {\n  var LOCALIZED_ARTICLE_LANGS = {\n    nl: true,\n    de: true,\n    fr: true,\n    sv: true,\n    da: true,\n    nb: true,\n    fi: true,\n    pt: true,\n    it: true,\n    et: true,\n    es: true\n  };\n\n  function normalizeTitleText(value) {\n    return String(value || '').replace(/\\s+/g, ' ').trim();\n  }\n\n  function firstPathSegment() {\n    return String(window.location.pathname || '').split('/').filter(Boolean)[0] || '';\n  }\n\n  function routeLocaleRoot() {\n    var segment = firstPathSegment().toLowerCase();\n    if (!segment) return '';\n    if (segment.indexOf('-') !== -1) return segment.split('-')[0];\n    return segment;\n  }\n\n  function isLocalizedArticleRoute() {\n    var host = String(window.location.hostname || '').toLowerCase();\n    if (host.indexOf('nordbelt.nl') !== -1) return true;\n    var localeRoot = routeLocaleRoot();\n    return Boolean(localeRoot && localeRoot !== 'en' && LOCALIZED_ARTICLE_LANGS[localeRoot]);\n  }\n\n  function setTitleMeta(selector, value) {\n    var nodes = document.querySelectorAll(selector);\n    for (var i = 0; i < nodes.length; i += 1) {\n      nodes[i].setAttribute('content', value);\n    }\n  }\n\n  function syncLocalizedArticleDocumentTitle() {\n    if (!isLocalizedArticleRoute()) return;\n    var articleTitle = normalizeTitleText(document.querySelector('.nb-article__title') && document.querySelector('.nb-article__title').textContent);\n    if (!articleTitle) return;\n    var currentTitle = normalizeTitleText(document.title);\n    if (currentTitle.toLowerCase().indexOf(articleTitle.toLowerCase()) === 0) return;\n\n    var nextTitle = articleTitle + ' | Nordbelt\u2122';\n    document.title = nextTitle;\n    setTitleMeta('meta[property=\"og:title\"]', nextTitle);\n    setTitleMeta('meta[name=\"twitter:title\"]', nextTitle);\n  }\n\n  function scheduleLocalizedArticleDocumentTitleSync() {\n    syncLocalizedArticleDocumentTitle();\n    window.setTimeout(syncLocalizedArticleDocumentTitle, 120);\n    window.setTimeout(syncLocalizedArticleDocumentTitle, 700);\n    window.setTimeout(syncLocalizedArticleDocumentTitle, 1800);\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', scheduleLocalizedArticleDocumentTitleSync, { once: true });\n  } else {\n    scheduleLocalizedArticleDocumentTitleSync();\n  }\n  window.addEventListener('pageshow', scheduleLocalizedArticleDocumentTitleSync);\n  document.addEventListener('shopify:section:load', scheduleLocalizedArticleDocumentTitleSync);\n})();\n\n(function () {\n  var ARTICLE_HOME_TAIL_SECTION_PAIRS = [\n    ['home_hero', 'hero'],\n    ['home_proof', 'proof'],\n    ['home_guide_steps', 'home_guide_steps'],\n    ['home_objections', 'objections'],\n    ['home_nhc_benefits_shield', 'nhc_benefits_shield'],\n    ['home_reviews', 'reviews'],\n    ['home_video_proof', 'video_proof'],\n    ['home_benefits', 'benefits'],\n    ['home_founder_story', 'founder_story'],\n    ['home_guide_showcase_home', 'guide_showcase_home'],\n    ['home_feature', 'feature'],\n    ['home_mosaic', 'mosaic'],\n    ['home_faq', 'faq']\n  ];\n\n  function normalizeArticleText(value) {\n    return String(value || '').replace(/\\s+/g, ' ').trim();\n  }\n\n  function isArticlePage() {\n    return document.body && document.body.getAttribute('data-page-type') === 'article';\n  }\n\n  function hasArticleHomeTail() {\n    if (!isArticlePage()) return true;\n    return Boolean(document.querySelector('body[data-page-type=\"article\"] .nb-main-content > .shopify-section[id*=\"__home_\"], body[data-page-type=\"article\"] main > .shopify-section[id*=\"__home_\"]'));\n  }\n\n  function currentLocaleHomePath() {\n    var parts = String(window.location.pathname || '').split('/').filter(Boolean);\n    var first = String(parts[0] || '').toLowerCase();\n    if (first && first !== 'blogs' && first !== 'blog-posts') return '/' + parts[0] + '/';\n    return '/';\n  }\n\n  function homeTailTarget() {\n    return document.querySelector('body[data-page-type=\"article\"] .nb-main-content, body[data-page-type=\"article\"] main');\n  }\n\n  function articleSectionPrefix() {\n    var mainSection = document.querySelector('body[data-page-type=\"article\"] .shopify-section[id*=\"__main\"]');\n    var id = mainSection && mainSection.id ? String(mainSection.id) : '';\n    return id.replace(/__main$/, '') || 'shopify-section-template--article';\n  }\n\n  function findHomepageSection(doc, sourceKey) {\n    var selectorKey = '__' + sourceKey;\n    var sections = doc.querySelectorAll('.shopify-section[id*=\"__\"]');\n    for (var i = 0; i < sections.length; i += 1) {\n      if (String(sections[i].id || '').indexOf(selectorKey) !== -1) return sections[i];\n    }\n    return null;\n  }\n\n  function appendHomepageTailFromHtml(html) {\n    if (hasArticleHomeTail()) return false;\n    var target = homeTailTarget();\n    if (!target || !html) return false;\n\n    var doc = new DOMParser().parseFromString(html, 'text/html');\n    var prefix = articleSectionPrefix();\n    var fragment = document.createDocumentFragment();\n    var appended = 0;\n\n    for (var i = 0; i < ARTICLE_HOME_TAIL_SECTION_PAIRS.length; i += 1) {\n      var targetKey = ARTICLE_HOME_TAIL_SECTION_PAIRS[i][0];\n      var sourceKey = ARTICLE_HOME_TAIL_SECTION_PAIRS[i][1];\n      var source = findHomepageSection(doc, sourceKey);\n      if (!source) continue;\n      var clone = source.cloneNode(true);\n      clone.id = prefix + '__' + targetKey;\n      clone.setAttribute('data-nb-article-home-tail-fallback', 'true');\n      fragment.appendChild(clone);\n      appended += 1;\n    }\n\n    if (!appended) return false;\n    target.appendChild(fragment);\n    initCommercialSurfaceViewTracking(target);\n    initBlogConversionTracking(target);\n    document.documentElement.setAttribute('data-nb-article-home-tail-fallback', 'loaded');\n    return true;\n  }\n\n  function installArticleHomeTailFallback() {\n    if (!isArticlePage() || hasArticleHomeTail()) return;\n    if (document.documentElement.getAttribute('data-nb-article-home-tail-fallback') === 'loading') return;\n    if (document.documentElement.getAttribute('data-nb-article-home-tail-fallback') === 'loaded') return;\n    if (!window.fetch || !window.DOMParser) return;\n\n    document.documentElement.setAttribute('data-nb-article-home-tail-fallback', 'loading');\n    var homeUrl = currentLocaleHomePath();\n    var separator = homeUrl.indexOf('?') === -1 ? '?' : '&';\n    window.fetch(homeUrl + separator + 'nb_article_home_tail=' + String(Date.now()), {\n      credentials: 'same-origin'\n    })\n      .then(function (response) {\n        return response && response.ok ? response.text() : '';\n      })\n      .then(function (html) {\n        var loaded = appendHomepageTailFromHtml(html);\n        if (!loaded) document.documentElement.removeAttribute('data-nb-article-home-tail-fallback');\n      })\n      .catch(function () {\n        document.documentElement.removeAttribute('data-nb-article-home-tail-fallback');\n      });\n  }\n\n  function removeRepeatedArticleHeroIntro() {\n    var articleRoot = document.querySelector('[data-nb-article-conversion], .nb-article');\n    if (!articleRoot) return;\n    var rte = articleRoot.querySelector('.nb-article__rte');\n    var deck = articleRoot.querySelector('.nb-article__deck');\n    if (!rte || !deck) return;\n\n    var deckText = normalizeArticleText(deck.textContent);\n    if (!deckText) return;\n\n    var children = Array.prototype.slice.call(rte.children || []).slice(0, 8);\n    for (var i = 0; i < children.length; i += 1) {\n      var block = children[i];\n      if (!block || (block.classList && block.classList.contains('nb-article-toc'))) continue;\n      var blockText = normalizeArticleText(block.textContent);\n      if (!blockText) continue;\n      if (deckText === blockText || deckText.indexOf(blockText) === 0 || blockText.indexOf(deckText) === 0) {\n        block.remove();\n        return;\n      }\n    }\n  }\n\n  function cleanupArticleTemplateCacheArtifacts(root) {\n    removeRepeatedArticleHeroIntro();\n  }\n\n  function scheduleArticleTemplateCacheCleanup(root) {\n    cleanupArticleTemplateCacheArtifacts(root);\n    installArticleHomeTailFallback();\n    window.setTimeout(function () {\n      cleanupArticleTemplateCacheArtifacts(root);\n      installArticleHomeTailFallback();\n    }, 120);\n    window.setTimeout(function () {\n      cleanupArticleTemplateCacheArtifacts(root);\n      installArticleHomeTailFallback();\n    }, 700);\n    window.setTimeout(function () {\n      cleanupArticleTemplateCacheArtifacts(root);\n      installArticleHomeTailFallback();\n    }, 1800);\n  }\n\n  function installArticleTemplateCacheObserver() {\n    if (!window.MutationObserver) return;\n    var articleRoot = document.querySelector('[data-nb-article-conversion], .nb-article');\n    if (!articleRoot || articleRoot.getAttribute('data-nb-template-cache-observer') === 'true') return;\n    articleRoot.setAttribute('data-nb-template-cache-observer', 'true');\n    var scheduled = false;\n    var observer = new MutationObserver(function () {\n      if (scheduled) return;\n      scheduled = true;\n      window.setTimeout(function () {\n        scheduled = false;\n        cleanupArticleTemplateCacheArtifacts(document);\n      }, 40);\n    });\n    observer.observe(articleRoot, {\n      childList: true,\n      subtree: true,\n      characterData: true\n    });\n    window.addEventListener('pagehide', function () {\n      observer.disconnect();\n    }, { once: true });\n    window.setTimeout(function () {\n      cleanupArticleTemplateCacheArtifacts(document);\n    }, 3200);\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', function () {\n      scheduleArticleTemplateCacheCleanup(document);\n    }, { once: true });\n  } else {\n    scheduleArticleTemplateCacheCleanup(document);\n  }\n  installArticleTemplateCacheObserver();\n\n  window.addEventListener('pageshow', function () {\n    scheduleArticleTemplateCacheCleanup(document);\n    installArticleTemplateCacheObserver();\n  });\ndocument.addEventListener('shopify:section:load', function (event) {\n    scheduleArticleTemplateCacheCleanup(event && event.target ? event.target : document);\n    installArticleTemplateCacheObserver();\n  });\n})();\n\n(function () {\n  var STYLE_ID = 'nb-home2-runtime-crop-20260618-r2';\n\n  function isHomepage2() {\n    return document.body && document.body.getAttribute('data-page-handle') === 'homepage-2';\n  }\n\n  function installHomepage2MobileHeroCrop() {\n    if (!isHomepage2() || document.getElementById(STYLE_ID)) return;\n    var style = document.createElement('style');\n    style.id = STYLE_ID;\n    style.textContent = [\n      '@media (max-width:840px){',\n      'html body.nb-theme[data-page-handle=\"homepage-2\"] #nb-homepage-2-homepage-2-backbone-photo-r10.nb-home2 .nb-home2-hero__media,',\n      'html body.nb-theme[data-page-handle=\"homepage-2\"] .nb-home-ab-homepage2-panel[data-nb-home-ab-direct-b=\"true\"] .nb-home2-hero__media{height:clamp(430px,112vw,470px)!important;margin-bottom:-6rem!important}',\n      'html body.nb-theme[data-page-handle=\"homepage-2\"] #nb-homepage-2-homepage-2-backbone-photo-r10.nb-home2 .nb-home2-hero__media::after,',\n      'html body.nb-theme[data-page-handle=\"homepage-2\"] .nb-home-ab-homepage2-panel[data-nb-home-ab-direct-b=\"true\"] .nb-home2-hero__media::after{bottom:-30px!important;height:24%!important}',\n      'html body.nb-theme[data-page-handle=\"homepage-2\"] .nb-home-ab-homepage2-panel[data-nb-home-ab-direct-b=\"true\"] .nb-home2-hero__media img{transform:translate3d(0,4px,0) scale(1.32)!important}',\n      '}',\n      '@media (min-width:841px) and (max-width:1079px){',\n      'html body.nb-theme[data-page-handle=\"homepage-2\"] #nb-homepage-2-homepage-2-backbone-photo-r10.nb-home2 .nb-home2-hero__media::before,',\n      'html body.nb-theme[data-page-handle=\"homepage-2\"] #nb-homepage-2-homepage-2-backbone-photo-r10.nb-home2 .nb-home2-hero__media::after,',\n      'html body.nb-theme[data-page-handle=\"homepage-2\"] #nb-homepage-2-homepage-2-backbone-photo-r9.nb-home2 .nb-home2-hero__media::before,',\n      'html body.nb-theme[data-page-handle=\"homepage-2\"] #nb-homepage-2-homepage-2-backbone-photo-r9.nb-home2 .nb-home2-hero__media::after,',\n      'html body.nb-theme[data-page-handle=\"homepage-2\"] .nb-home-ab-homepage2-panel[data-nb-home-ab-direct-b=\"true\"] .nb-home2-hero__media::before,',\n      'html body.nb-theme[data-page-handle=\"homepage-2\"] .nb-home-ab-homepage2-panel[data-nb-home-ab-direct-b=\"true\"] .nb-home2-hero__media::after{content:none!important;display:none!important;background:none!important;-webkit-mask-image:none!important;mask-image:none!important}',\n      '}'\n    ].join('');\n    document.head.appendChild(style);\n  }\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', installHomepage2MobileHeroCrop, { once: true });\n  } else {\n    installHomepage2MobileHeroCrop();\n  }\n  window.addEventListener('pageshow', installHomepage2MobileHeroCrop);\n  document.addEventListener('shopify:section:load', installHomepage2MobileHeroCrop);\n})();\n"],
  "mappings": "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",
  "names": ["initBlogConversionTracking", "armSpec", "initCommercialSurfaceViewTracking", "node", "base", "variant"]
}
