{
  "version": 3,
  "sources": ["/cdn/shop/t/2/assets/toutva.js?build=20260926-klaviyo-atomic-source-v52"],
  "sourcesContent": ["document.documentElement.classList.add('js');\n\nconst NEWSLETTER_SUBMISSION_KEY = 'toutvaNewsletterSubmissionV1';\n\nconst readNewsletterSubmission = () => {\n  try {\n    const submission = JSON.parse(window.sessionStorage.getItem(NEWSLETTER_SUBMISSION_KEY) || 'null');\n    if (!submission || Date.now() - Number(submission.timestamp || 0) > 5 * 60 * 1000) return null;\n    return submission;\n  } catch (error) {\n    return null;\n  }\n};\n\nconst newsletterSubmission = readNewsletterSubmission();\n\nconst rememberNewsletterSubmission = (source) => {\n  try {\n    window.sessionStorage.setItem(NEWSLETTER_SUBMISSION_KEY, JSON.stringify({\n      source,\n      path: window.location.pathname,\n      scrollY: window.scrollY,\n      timestamp: Date.now()\n    }));\n  } catch (error) {\n    // Non-critical: private browsing can block sessionStorage.\n  }\n};\n\nconst restoreNewsletterSubmissionPosition = () => {\n  if (!newsletterSubmission || newsletterSubmission.path !== window.location.pathname) return;\n\n  if (window.location.hash === '#contact_form') {\n    window.history.replaceState(null, '', `${window.location.pathname}${window.location.search}`);\n  }\n\n  const scrollY = Math.max(0, Number(newsletterSubmission.scrollY) || 0);\n  const restoreScroll = () => window.scrollTo({ top: scrollY, left: 0, behavior: 'auto' });\n\n  restoreScroll();\n  window.requestAnimationFrame(restoreScroll);\n  window.addEventListener('load', () => {\n    restoreScroll();\n    window.requestAnimationFrame(restoreScroll);\n  }, { once: true });\n};\n\nfunction initPromoPopup() {\n  const PROMO_SEEN_KEY = 'toutvaPromoSeenV9';\n  const PROMO_DOCKED_KEY = 'toutvaPromoDockedV9';\n  const PROMO_DISMISSED_KEY = 'toutvaPromoDismissedV9';\n  const root = document.querySelector('[data-promo-pop]');\n  if (!root) return;\n\n  const trigger = root.querySelector('[data-promo-open]');\n  const dismissTrigger = root.querySelector('[data-promo-dismiss]');\n  const dialog = root.querySelector('.promo-pop__dialog');\n  const closeButtons = root.querySelectorAll('[data-promo-close]');\n  const copyButton = root.querySelector('[data-promo-copy]');\n  const copyFeedback = root.querySelector('[data-promo-copy-feedback]');\n  const successMessage = root.querySelector('[data-promo-success]');\n  const emailInput = root.querySelector('input[type=\"email\"]');\n\n  if (!trigger || !dialog) return;\n\n  const markDocked = () => {\n    root.classList.add('is-docked');\n    try {\n      window.sessionStorage.setItem(PROMO_DOCKED_KEY, 'true');\n    } catch (error) {\n      // Non-critical: private browsing can block sessionStorage.\n    }\n  };\n\n  const openDialog = () => {\n    dialog.hidden = false;\n    root.classList.add('is-open');\n    trigger.setAttribute('aria-expanded', 'true');\n    setTimeout(() => {\n      if (emailInput) emailInput.focus();\n    }, 50);\n  };\n\n  const closeDialog = (dock = true) => {\n    dialog.hidden = true;\n    root.classList.remove('is-open');\n    trigger.setAttribute('aria-expanded', 'false');\n    if (dock) markDocked();\n    if (document.activeElement && dialog.contains(document.activeElement)) trigger.focus();\n  };\n\n  trigger.setAttribute('aria-expanded', 'false');\n  try {\n    const isSeen = window.sessionStorage.getItem(PROMO_SEEN_KEY) === 'true';\n    const isDocked = window.sessionStorage.getItem(PROMO_DOCKED_KEY) === 'true';\n    const isDismissed = window.sessionStorage.getItem(PROMO_DISMISSED_KEY) === 'true';\n    if (isDocked || isSeen) root.classList.add('is-docked');\n    if (isDismissed) root.classList.add('is-dismissed');\n  } catch (error) {\n    // The first visit starts without a docked trigger.\n  }\n\n  trigger.addEventListener('click', () => {\n    root.classList.add('is-docked');\n    root.classList.remove('is-dismissed');\n    openDialog();\n  });\n  closeButtons.forEach((button) => button.addEventListener('click', () => closeDialog(true)));\n  if (dismissTrigger) {\n    const dismissPromoTrigger = (event) => {\n      event.preventDefault();\n      event.stopPropagation();\n      root.classList.add('is-dismissed');\n      try {\n        window.sessionStorage.setItem(PROMO_DISMISSED_KEY, 'true');\n      } catch (error) {\n        // Non-critical: private browsing can block sessionStorage.\n      }\n    };\n    dismissTrigger.addEventListener('click', dismissPromoTrigger);\n    dismissTrigger.addEventListener('keydown', (event) => {\n      if (event.key === 'Enter' || event.key === ' ') dismissPromoTrigger(event);\n    });\n  }\n\n  const shouldAutoOpen = (() => {\n    if (successMessage) return newsletterSubmission && newsletterSubmission.source === 'promo-pop__form';\n    try {\n      return window.sessionStorage.getItem(PROMO_SEEN_KEY) !== 'true' && window.sessionStorage.getItem(PROMO_DISMISSED_KEY) !== 'true';\n    } catch (error) {\n      return true;\n    }\n  })();\n\n  if (shouldAutoOpen) {\n    window.setTimeout(() => {\n      markDocked();\n      openDialog();\n      try {\n        window.sessionStorage.setItem(PROMO_SEEN_KEY, 'true');\n      } catch (error) {\n        // Non-critical.\n      }\n    }, successMessage ? 650 : 12000);\n  }\n\n  document.addEventListener('keydown', (event) => {\n    if (event.key === 'Escape' && !dialog.hidden) closeDialog(true);\n  });\n\n  if (copyButton) {\n    copyButton.addEventListener('click', async () => {\n      const code = copyButton.dataset.code || copyButton.textContent.trim();\n      try {\n        await navigator.clipboard.writeText(code);\n      } catch (error) {\n        const tempInput = document.createElement('input');\n        tempInput.value = code;\n        document.body.appendChild(tempInput);\n        tempInput.select();\n        document.execCommand('copy');\n        tempInput.remove();\n      }\n\n      if (copyFeedback) {\n        copyFeedback.hidden = false;\n        window.setTimeout(() => {\n          copyFeedback.hidden = true;\n        }, 2200);\n      }\n    });\n  }\n}\n\nfunction initPromoProductCollisionAvoidance() {\n  const promo = document.querySelector('[data-promo-pop]');\n  const collisionTargets = Array.from(document.querySelectorAll('[data-product-root], .product-proof__steps--videos, .use-cases-section'));\n  if (!promo || !collisionTargets.length) return;\n\n  const mobileQuery = window.matchMedia('(max-width: 749px)');\n  const visibleCollisionTargets = new Set();\n  const syncPromoVisibility = () => {\n    promo.classList.toggle('is-product-ui-visible', mobileQuery.matches && visibleCollisionTargets.size > 0);\n  };\n\n  if ('IntersectionObserver' in window) {\n    const observer = new IntersectionObserver((entries) => {\n      entries.forEach((entry) => {\n        if (entry.isIntersecting) visibleCollisionTargets.add(entry.target);\n        else visibleCollisionTargets.delete(entry.target);\n      });\n      syncPromoVisibility();\n    }, { threshold: 0.02 });\n\n    collisionTargets.forEach((target) => observer.observe(target));\n  }\n\n  if (typeof mobileQuery.addEventListener === 'function') mobileQuery.addEventListener('change', syncPromoVisibility);\n  else if (typeof mobileQuery.addListener === 'function') mobileQuery.addListener(syncPromoVisibility);\n  syncPromoVisibility();\n}\n\nfunction initProductStepShowcases() {\n  if (document.documentElement.classList.contains('toutva-tiktok-browser')) {\n    document.querySelectorAll('.product-proof__step-video').forEach((video) => {\n      video.pause();\n      video.remove();\n    });\n  }\n\n  const showcases = Array.from(document.querySelectorAll('.product-proof__steps--videos'));\n  if (!showcases.length) return;\n\n  const mobileQuery = window.matchMedia('(max-width: 749px)');\n  const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');\n\n  showcases.forEach((showcase, showcaseIndex) => {\n    const list = showcase.querySelector('[data-product-step-list]');\n    const steps = Array.from(showcase.querySelectorAll('[data-product-step]'));\n    const tabs = steps.map((step) => step.querySelector('[data-product-step-tab]'));\n    const panels = steps.map((step) => step.querySelector('[data-product-step-panel]'));\n    const previousButton = showcase.querySelector('[data-product-step-previous]');\n    const nextButton = showcase.querySelector('[data-product-step-next]');\n    if (!list || !steps.length || tabs.some((tab) => !tab) || panels.some((panel) => !panel)) return;\n\n    let activeIndex = Math.max(0, steps.findIndex((step) => step.classList.contains('is-active')));\n    let pointerStartX = null;\n    let pointerStartY = null;\n\n    tabs.forEach((tab, index) => {\n      if (!tab.id) tab.id = `ProductStepTab-${showcaseIndex + 1}-${index + 1}`;\n    });\n\n    const setActiveStep = (nextIndex, options = {}) => {\n      const normalizedIndex = (nextIndex + steps.length) % steps.length;\n      const shouldRestart = options.restart !== false;\n      activeIndex = normalizedIndex;\n\n      steps.forEach((step, index) => {\n        const isActive = index === activeIndex;\n        const tab = tabs[index];\n        const panel = panels[index];\n        const video = panel.querySelector('video');\n\n        step.classList.toggle('is-active', isActive);\n        if (mobileQuery.matches) {\n          tab.setAttribute('aria-pressed', String(isActive));\n          tab.tabIndex = isActive ? 0 : -1;\n          panel.setAttribute('aria-hidden', String(!isActive));\n        }\n\n        if (!mobileQuery.matches || !video) return;\n        if (!isActive) {\n          video.pause();\n          return;\n        }\n\n        if (shouldRestart) {\n          try {\n            video.currentTime = 0;\n          } catch (error) {\n            // The video metadata may not be available yet.\n          }\n        }\n        const panelBounds = panel.getBoundingClientRect();\n        const panelIsVisible = panelBounds.bottom > 0 && panelBounds.top < window.innerHeight;\n        if (!reducedMotion.matches && panelIsVisible) video.play().catch(() => {});\n      });\n\n      if (options.focus) tabs[activeIndex].focus({ preventScroll: true });\n    };\n\n    const syncMode = () => {\n      if (mobileQuery.matches) {\n        list.removeAttribute('role');\n        steps.forEach((step) => step.removeAttribute('role'));\n        tabs.forEach((tab, index) => {\n          tab.removeAttribute('role');\n          tab.setAttribute('aria-pressed', String(index === activeIndex));\n          tab.tabIndex = index === activeIndex ? 0 : -1;\n        });\n        panels.forEach((panel, index) => {\n          panel.removeAttribute('role');\n          panel.removeAttribute('aria-labelledby');\n          panel.setAttribute('aria-hidden', String(index !== activeIndex));\n        });\n        setActiveStep(activeIndex, { restart: false });\n        return;\n      }\n\n      list.removeAttribute('role');\n      steps.forEach((step) => step.removeAttribute('role'));\n      tabs.forEach((tab) => {\n        tab.removeAttribute('role');\n        tab.removeAttribute('aria-pressed');\n        tab.removeAttribute('tabindex');\n      });\n      panels.forEach((panel) => {\n        panel.removeAttribute('role');\n        panel.removeAttribute('aria-labelledby');\n        panel.removeAttribute('aria-hidden');\n      });\n    };\n\n    tabs.forEach((tab, index) => {\n      tab.addEventListener('click', () => {\n        if (mobileQuery.matches) setActiveStep(index, { restart: true });\n      });\n\n      tab.addEventListener('keydown', (event) => {\n        if (!mobileQuery.matches) return;\n        if (event.key === 'ArrowLeft') {\n          event.preventDefault();\n          setActiveStep(activeIndex - 1, { focus: true, restart: true });\n        } else if (event.key === 'ArrowRight') {\n          event.preventDefault();\n          setActiveStep(activeIndex + 1, { focus: true, restart: true });\n        } else if (event.key === 'Home') {\n          event.preventDefault();\n          setActiveStep(0, { focus: true, restart: true });\n        } else if (event.key === 'End') {\n          event.preventDefault();\n          setActiveStep(steps.length - 1, { focus: true, restart: true });\n        }\n      });\n    });\n\n    if (previousButton) previousButton.addEventListener('click', () => setActiveStep(activeIndex - 1, { restart: true }));\n    if (nextButton) nextButton.addEventListener('click', () => setActiveStep(activeIndex + 1, { restart: true }));\n\n    panels.forEach((panel) => {\n      panel.addEventListener('pointerdown', (event) => {\n        if (!mobileQuery.matches || event.pointerType === 'mouse') return;\n        pointerStartX = event.clientX;\n        pointerStartY = event.clientY;\n      });\n\n      panel.addEventListener('pointerup', (event) => {\n        if (pointerStartX === null || pointerStartY === null) return;\n        const distanceX = event.clientX - pointerStartX;\n        const distanceY = event.clientY - pointerStartY;\n        pointerStartX = null;\n        pointerStartY = null;\n        if (Math.abs(distanceX) < 46 || Math.abs(distanceX) <= Math.abs(distanceY)) return;\n        setActiveStep(activeIndex + (distanceX < 0 ? 1 : -1), { restart: true });\n      });\n\n      panel.addEventListener('pointercancel', () => {\n        pointerStartX = null;\n        pointerStartY = null;\n      });\n    });\n\n    if (typeof mobileQuery.addEventListener === 'function') mobileQuery.addEventListener('change', syncMode);\n    else if (typeof mobileQuery.addListener === 'function') mobileQuery.addListener(syncMode);\n    syncMode();\n  });\n}\n\nfunction initProductStepVideos() {\n  const videos = Array.from(document.querySelectorAll('.product-proof__step-video'));\n  if (!videos.length) return;\n\n  const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');\n  if (reducedMotion.matches) {\n    videos.forEach((video) => {\n      video.removeAttribute('autoplay');\n      video.pause();\n    });\n    return;\n  }\n\n  if (!('IntersectionObserver' in window)) {\n    videos.forEach((video) => video.play().catch(() => {}));\n    return;\n  }\n\n  const observer = new IntersectionObserver((entries) => {\n    entries.forEach((entry) => {\n      const video = entry.target;\n      if (entry.isIntersecting && entry.intersectionRatio >= 0.35) {\n        video.play().catch(() => {});\n      } else {\n        video.pause();\n      }\n    });\n  }, { threshold: [0, 0.35, 0.75] });\n\n  videos.forEach((video) => observer.observe(video));\n}\n\nfunction initUseCasesCarousels() {\n  const carousels = Array.from(document.querySelectorAll('[data-use-cases-carousel]'));\n  if (!carousels.length) return;\n\n  const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');\n\n  carousels.forEach((carousel) => {\n    const viewport = carousel.querySelector('[data-use-cases-viewport]');\n    const slides = Array.from(carousel.querySelectorAll('[data-use-case-slide]'));\n    const previousButton = carousel.querySelector('[data-use-cases-previous]');\n    const nextButton = carousel.querySelector('[data-use-cases-next]');\n    const status = carousel.querySelector('[data-use-cases-status]');\n    if (!viewport || !slides.length) return;\n\n    let activeIndex = Math.max(0, slides.findIndex((slide) => slide.classList.contains('is-active')));\n    let pointerStartX = null;\n    let pointerStartY = null;\n    let suppressNextClick = false;\n    let resizeFrame = null;\n\n    carousel.classList.toggle('is-single', slides.length === 1);\n    carousel.classList.toggle('is-reduced-motion', reducedMotion.matches);\n\n    const normalizeIndex = (index) => (index + slides.length) % slides.length;\n    const getCircularPosition = (index) => {\n      let position = (index - activeIndex + slides.length) % slides.length;\n      if (position > slides.length / 2) position -= slides.length;\n      if (slides.length % 2 === 0 && position === slides.length / 2 && index < activeIndex) position *= -1;\n      return position;\n    };\n\n    const syncHeight = () => {\n      const activeSlide = slides[activeIndex];\n      if (!activeSlide) return;\n      viewport.style.height = `${Math.ceil(activeSlide.offsetHeight + 4)}px`;\n    };\n\n    const render = (options = {}) => {\n      const viewportWidth = viewport.clientWidth || window.innerWidth;\n      const isMobile = viewportWidth < 750;\n      const stepDistance = isMobile ? viewportWidth * .7 : Math.min(viewportWidth * .305, 440);\n\n      slides.forEach((slide, index) => {\n        const position = getCircularPosition(index);\n        const distance = Math.abs(position);\n        const isActive = distance === 0;\n        const isInteractive = distance <= 1;\n        const scale = isActive ? 1 : distance === 1 ? (isMobile ? .84 : .8) : (isMobile ? .72 : .68);\n        const opacity = isActive ? 1 : distance === 1 ? .4 : distance === 2 ? .13 : 0;\n        const saturation = isActive ? 1 : distance === 1 ? .72 : .5;\n\n        slide.classList.toggle('is-active', isActive);\n        slide.style.setProperty('--use-carousel-x', `${Math.round(position * stepDistance)}px`);\n        slide.style.setProperty('--use-carousel-scale', String(scale));\n        slide.style.setProperty('--use-carousel-opacity', String(opacity));\n        slide.style.setProperty('--use-carousel-saturation', String(saturation));\n        slide.style.zIndex = String(Math.max(0, 10 - distance));\n        slide.style.pointerEvents = isInteractive ? 'auto' : 'none';\n        slide.setAttribute('role', 'group');\n        slide.setAttribute('aria-roledescription', 'diapositive');\n        slide.setAttribute('aria-label', `${index + 1} sur ${slides.length} : ${slide.dataset.useCaseTitle || ''}`);\n        slide.setAttribute('aria-hidden', String(!isActive));\n\n        slide.querySelectorAll('a, button').forEach((control) => {\n          control.tabIndex = isActive ? 0 : -1;\n        });\n      });\n\n      if (status) {\n        const activeTitle = slides[activeIndex].dataset.useCaseTitle || `Sortie ${activeIndex + 1}`;\n        status.textContent = `${activeTitle}, ${activeIndex + 1} sur ${slides.length}`;\n      }\n\n      window.requestAnimationFrame(syncHeight);\n      if (options.focus && slides[activeIndex]) {\n        const activeLink = slides[activeIndex].querySelector('a, button');\n        if (activeLink) activeLink.focus({ preventScroll: true });\n      }\n    };\n\n    const setActive = (index, options = {}) => {\n      activeIndex = normalizeIndex(index);\n      render(options);\n    };\n\n    slides.forEach((slide, index) => {\n      slide.addEventListener('click', (event) => {\n        if (suppressNextClick) {\n          event.preventDefault();\n          event.stopPropagation();\n          suppressNextClick = false;\n          return;\n        }\n        if (index === activeIndex) return;\n        event.preventDefault();\n        setActive(index);\n      }, true);\n\n      slide.querySelectorAll('img').forEach((image) => {\n        if (!image.complete) image.addEventListener('load', syncHeight, { once: true });\n      });\n    });\n\n    if (previousButton) previousButton.addEventListener('click', () => setActive(activeIndex - 1));\n    if (nextButton) nextButton.addEventListener('click', () => setActive(activeIndex + 1));\n\n    carousel.addEventListener('keydown', (event) => {\n      if (event.key === 'ArrowLeft') {\n        event.preventDefault();\n        setActive(activeIndex - 1, { focus: true });\n      } else if (event.key === 'ArrowRight') {\n        event.preventDefault();\n        setActive(activeIndex + 1, { focus: true });\n      } else if (event.key === 'Home') {\n        event.preventDefault();\n        setActive(0, { focus: true });\n      } else if (event.key === 'End') {\n        event.preventDefault();\n        setActive(slides.length - 1, { focus: true });\n      }\n    });\n\n    viewport.addEventListener('pointerdown', (event) => {\n      if (event.button !== undefined && event.button !== 0) return;\n      pointerStartX = event.clientX;\n      pointerStartY = event.clientY;\n    });\n\n    viewport.addEventListener('pointerup', (event) => {\n      if (pointerStartX === null || pointerStartY === null) return;\n      const distanceX = event.clientX - pointerStartX;\n      const distanceY = event.clientY - pointerStartY;\n      pointerStartX = null;\n      pointerStartY = null;\n      if (Math.abs(distanceX) < 48 || Math.abs(distanceX) <= Math.abs(distanceY)) return;\n      suppressNextClick = true;\n      setActive(activeIndex + (distanceX < 0 ? 1 : -1));\n      window.setTimeout(() => { suppressNextClick = false; }, 350);\n    });\n\n    viewport.addEventListener('pointercancel', () => {\n      pointerStartX = null;\n      pointerStartY = null;\n    });\n\n    const scheduleRender = () => {\n      if (resizeFrame !== null) window.cancelAnimationFrame(resizeFrame);\n      resizeFrame = window.requestAnimationFrame(() => {\n        resizeFrame = null;\n        render();\n      });\n    };\n\n    window.addEventListener('resize', scheduleRender, { passive: true });\n    carousel.addEventListener('shopify:block:select', (event) => {\n      const selectedSlide = event.target.closest('[data-use-case-slide]');\n      const selectedIndex = slides.indexOf(selectedSlide);\n      if (selectedIndex >= 0) setActive(selectedIndex);\n    });\n    render();\n  });\n}\n\nfunction initKlaviyoNewsletterTracking() {\n  const subscribeDirectlyToKlaviyo = (email, source) => {\n    const config = window.TOUTVA_KLAVIYO || {};\n    const isEnabled = config.directSubscribe !== false;\n    const publicApiKey = (config.publicApiKey || '').trim();\n    const listId = (config.newsletterListId || '').trim();\n\n    if (!isEnabled || !publicApiKey || !listId) return Promise.resolve(false);\n\n    const payload = {\n      data: {\n        type: 'subscription',\n        attributes: {\n          custom_source: source,\n          profile: {\n            data: {\n              type: 'profile',\n              attributes: {\n                email,\n                properties: {\n                  toutva_newsletter_source: source\n                },\n                subscriptions: {\n                  email: {\n                    marketing: {\n                      consent: 'SUBSCRIBED'\n                    }\n                  }\n                }\n              }\n            }\n          }\n        },\n        relationships: {\n          list: {\n            data: {\n              type: 'list',\n              id: listId\n            }\n          }\n        }\n      }\n    };\n\n    try {\n      return fetch(`https://a.klaviyo.com/client/subscriptions?company_id=${encodeURIComponent(publicApiKey)}`, {\n        method: 'POST',\n        keepalive: true,\n        headers: {\n          accept: 'application/vnd.api+json',\n          'content-type': 'application/vnd.api+json',\n          revision: '2026-07-15'\n        },\n        body: JSON.stringify(payload)\n      }).then((response) => response.ok).catch(() => false);\n    } catch (error) {\n      // The Shopify customer form must continue even if Klaviyo is unavailable.\n      return Promise.resolve(false);\n    }\n  };\n\n  const identifyNewsletterSource = (email, source) => {\n    const identity = {\n      email,\n      toutva_newsletter_source: source\n    };\n    const eventProperties = { source };\n\n    try {\n      if (window.klaviyo && typeof window.klaviyo.identify === 'function') {\n        const identification = window.klaviyo.identify(identity);\n        const trackSignup = () => {\n          if (typeof window.klaviyo.track === 'function') {\n            return window.klaviyo.track('Newsletter Signup', eventProperties);\n          }\n          return true;\n        };\n\n        if (identification && typeof identification.then === 'function') {\n          return identification.then(trackSignup).then(() => true).catch(() => false);\n        }\n\n        trackSignup();\n        return Promise.resolve(true);\n      }\n\n      if (window.klaviyo && typeof window.klaviyo.push === 'function') {\n        window.klaviyo.push(['identify', identity]);\n        window.klaviyo.push(['track', 'Newsletter Signup', eventProperties]);\n        return Promise.resolve(true);\n      }\n\n      if (window._learnq && typeof window._learnq.push === 'function') {\n        window._learnq.push(['identify', {\n          $email: email,\n          toutva_newsletter_source: source\n        }]);\n        window._learnq.push(['track', 'Newsletter Signup', eventProperties]);\n        return Promise.resolve(true);\n      }\n    } catch (error) {\n      // The Shopify customer form must continue even if Klaviyo tracking fails.\n    }\n\n    return Promise.resolve(false);\n  };\n\n  const getNewsletterSource = (form) => {\n    if (form.classList.contains('promo-pop__form')) return 'promo-pop__form';\n    if (form.classList.contains('footer-newsletter-form')) return 'footer-newsletter-form';\n    if (form.classList.contains('newsletter-form')) return 'newsletter-form';\n    return 'ToutVa newsletter form';\n  };\n\n  document.querySelectorAll('[data-klaviyo-newsletter], .newsletter-form, .footer-newsletter-form, .promo-pop__form').forEach((form) => {\n    if (form.dataset.klaviyoTrackingBound === 'true') return;\n    form.dataset.klaviyoTrackingBound = 'true';\n\n    form.addEventListener('submit', (event) => {\n      const emailInput = form.querySelector('input[name=\"contact[email]\"]');\n      const email = emailInput && emailInput.value ? emailInput.value.trim() : '';\n      if (!email) return;\n\n      const isPromoPopup = form.classList.contains('promo-pop__form');\n      if (isPromoPopup && form.dataset.klaviyoSubmissionReady === 'true') {\n        form.dataset.klaviyoSubmissionReady = 'false';\n        return;\n      }\n\n      if (isPromoPopup && form.dataset.klaviyoSubmissionPending === 'true') {\n        event.preventDefault();\n        return;\n      }\n\n      const source = getNewsletterSource(form);\n      rememberNewsletterSubmission(source);\n      identifyNewsletterSource(email, source);\n      const directSubscription = subscribeDirectlyToKlaviyo(email, source);\n\n      if (isPromoPopup) {\n        event.preventDefault();\n        form.dataset.klaviyoSubmissionPending = 'true';\n        const submitter = event.submitter;\n\n        const klaviyoTimeout = new Promise((resolve) => {\n          window.setTimeout(() => resolve(false), 3000);\n        });\n\n        Promise.race([directSubscription, klaviyoTimeout]).finally(() => {\n          form.dataset.klaviyoSubmissionPending = 'false';\n          form.dataset.klaviyoSubmissionReady = 'true';\n          form.requestSubmit(submitter || undefined);\n        });\n      }\n    });\n  });\n}\n\nfunction initCartDrawer() {\n  const drawer = document.querySelector('[data-cart-drawer]');\n  if (!drawer) return;\n\n  const itemsEl = drawer.querySelector('[data-cart-drawer-items]');\n  const emptyEl = drawer.querySelector('[data-cart-drawer-empty]');\n  const footerEl = drawer.querySelector('[data-cart-drawer-footer]');\n  const totalEl = drawer.querySelector('[data-cart-drawer-total]');\n  const statusEl = drawer.querySelector('[data-cart-drawer-status]');\n  let lastTrigger = null;\n\n  const escapeHtml = (value) => String(value || '').replace(/[&<>'\"]/g, (character) => ({\n    '&': '&amp;', '<': '&lt;', '>': '&gt;', \"'\": '&#039;', '\"': '&quot;'\n  }[character]));\n\n  const formatMoney = (cents) => {\n    const currency = (window.Shopify && window.Shopify.currency && window.Shopify.currency.active) || 'EUR';\n    try {\n      return new Intl.NumberFormat('fr-FR', { style: 'currency', currency }).format((Number(cents) || 0) / 100);\n    } catch (error) {\n      return `${((Number(cents) || 0) / 100).toFixed(2).replace('.', ',')} \u20AC`;\n    }\n  };\n\n  const setStatus = (message) => {\n    if (!statusEl) return;\n    statusEl.textContent = message || '';\n    statusEl.hidden = !message;\n  };\n\n  const isDuoVariant = (variantTitle) => /^Duo\\b/i.test(String(variantTitle || '').trim());\n\n  const getDuoImage = (variantTitle) => {\n    const colors = String(variantTitle || '')\n      .replace(/^Duo\\s+/i, '')\n      .toLowerCase()\n      .replace(/\\s*\\+\\s*/g, '-');\n    const images = {\n      'noir-noir': drawer.dataset.duoNoirNoirImage,\n      'noir-marron': drawer.dataset.duoNoirMarronImage,\n      'marron-noir': drawer.dataset.duoMarronNoirImage,\n      'marron-marron': drawer.dataset.duoMarronMarronImage\n    };\n    return images[colors] || drawer.dataset.duoNoirMarronImage || '';\n  };\n\n  const updateCount = (count) => {\n    document.querySelectorAll('[data-cart-count], .cart-count').forEach((badge) => {\n      badge.textContent = String(count || 0);\n      badge.hidden = Number(count || 0) < 1;\n    });\n  };\n\n  const render = (cart) => {\n    const items = Array.isArray(cart && cart.items) ? cart.items : [];\n    const displayedItemCount = items.reduce((total, item) => {\n      const multiplier = isDuoVariant(item.variant_title) ? 2 : 1;\n      return total + ((Number(item.quantity) || 0) * multiplier);\n    }, 0);\n    updateCount(displayedItemCount);\n    if (itemsEl) {\n      itemsEl.innerHTML = items.map((item) => {\n        const isDuo = isDuoVariant(item.variant_title);\n        const image = isDuo ? getDuoImage(item.variant_title) : (item.featured_image?.url || item.image || '');\n        const imageUrl = image && image.startsWith('//') ? `https:${image}` : image;\n        const title = (item.product_title || item.title || 'Article ToutVa').replace(/\\s+\\u2014\\s+/g, ', ');\n        const variant = item.variant_title && item.variant_title !== 'Default Title' ? item.variant_title : '';\n        const displayedTitle = isDuo ? (drawer.dataset.duoTitle || title) : title;\n        const displayedVariant = isDuo ? variant.replace(/^Duo\\s+/i, '') : variant;\n        const bundleLabel = drawer.dataset.duoIncludes || '2 sacs inclus';\n        const quantityLabel = isDuo ? (drawer.dataset.duoQuantity || 'Nombre de Duos') : 'Quantit\u00E9';\n        const lineKey = encodeURIComponent(item.key || item.variant_id);\n        return `<article class=\"cart-drawer__item\">\n          <a class=\"cart-drawer__item-media\" href=\"${escapeHtml(item.url || '/cart')}\"><img src=\"${escapeHtml(imageUrl)}\" alt=\"${escapeHtml(`${displayedTitle}${displayedVariant ? `, ${displayedVariant}` : ''}`)}\" loading=\"lazy\"></a>\n          <div class=\"cart-drawer__item-content\">\n            <a class=\"cart-drawer__item-title\" href=\"${escapeHtml(item.url || '/cart')}\">${escapeHtml(displayedTitle)}</a>\n            ${displayedVariant ? `<span class=\"cart-drawer__item-variant\">${escapeHtml(displayedVariant)}</span>` : ''}\n            ${isDuo ? `<span class=\"cart-drawer__item-bundle\">${escapeHtml(bundleLabel)}</span>` : ''}\n            <strong class=\"cart-drawer__item-price\">${formatMoney(item.final_line_price)}</strong>\n            <div class=\"cart-drawer__item-controls\">\n              <div class=\"cart-drawer__quantity\" aria-label=\"${escapeHtml(quantityLabel)}\">\n                <button type=\"button\" data-cart-drawer-line=\"${lineKey}\" data-cart-drawer-quantity=\"${Math.max(0, Number(item.quantity) - 1)}\" aria-label=\"Diminuer la quantit\u00E9\">\u2212</button>\n                <span>${Number(item.quantity) || 0}</span>\n                <button type=\"button\" data-cart-drawer-line=\"${lineKey}\" data-cart-drawer-quantity=\"${Number(item.quantity) + 1}\" aria-label=\"Augmenter la quantit\u00E9\">+</button>\n              </div>\n              <button class=\"cart-drawer__remove\" type=\"button\" data-cart-drawer-line=\"${lineKey}\" data-cart-drawer-quantity=\"0\">Supprimer</button>\n            </div>\n          </div>\n        </article>`;\n      }).join('');\n    }\n    if (emptyEl) emptyEl.hidden = items.length > 0;\n    if (footerEl) footerEl.hidden = items.length === 0;\n    if (totalEl) totalEl.textContent = formatMoney(cart && cart.total_price);\n  };\n\n  const refresh = () => {\n    const rootPath = (window.Shopify && window.Shopify.routes && window.Shopify.routes.root) || '/';\n    return fetch(`${rootPath}cart.js?drawer=${Date.now()}`, { cache: 'no-store', headers: { Accept: 'application/json' } })\n      .then((response) => {\n        if (!response.ok) throw new Error('cart_fetch_failed');\n        return response.json();\n      })\n      .then((cart) => {\n        render(cart);\n        return cart;\n      })\n      .catch(() => {\n        setStatus('Impossible de charger le panier pour le moment.');\n        return null;\n      });\n  };\n\n  const close = () => {\n    drawer.hidden = true;\n    drawer.classList.remove('is-open');\n    document.body.classList.remove('cart-drawer-open');\n    if (lastTrigger && document.contains(lastTrigger)) lastTrigger.focus();\n  };\n\n  const open = (trigger) => {\n    lastTrigger = trigger || lastTrigger;\n    drawer.hidden = false;\n    drawer.classList.add('is-open');\n    document.body.classList.add('cart-drawer-open');\n    setStatus('');\n    refresh();\n  };\n\n  const addItems = (items, controls = {}) => {\n    const button = controls.button;\n    const originalLabel = controls.originalLabel || (button && button.textContent);\n    if (!Array.isArray(items) || !items.length) return Promise.reject(new Error('missing_cart_items'));\n\n    if (button) {\n      button.disabled = true;\n      button.textContent = controls.loadingLabel || 'Ajout...';\n    }\n    setStatus('');\n\n    return fetch('/cart/add.js', {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n      body: JSON.stringify({ items })\n    })\n      .then((response) => {\n        if (!response.ok) return response.json().then((error) => Promise.reject(error));\n        return refresh().then(() => open());\n      })\n      .catch((error) => {\n        const message = error && (error.description || error.message) ? (error.description || error.message) : 'Impossible d\u2019ajouter ce produit au panier pour le moment.';\n        setStatus(message);\n        throw error;\n      })\n      .finally(() => {\n        if (button) {\n          button.disabled = false;\n          button.textContent = originalLabel;\n        }\n      });\n  };\n\n  drawer.addEventListener('click', (event) => {\n    const closeButton = event.target.closest('[data-cart-drawer-close]');\n    if (closeButton) {\n      event.preventDefault();\n      close();\n      return;\n    }\n\n    const quantityButton = event.target.closest('[data-cart-drawer-line][data-cart-drawer-quantity]');\n    if (!quantityButton) return;\n    event.preventDefault();\n    const line = decodeURIComponent(quantityButton.dataset.cartDrawerLine || '');\n    const quantity = Math.max(0, Number(quantityButton.dataset.cartDrawerQuantity || 0));\n    quantityButton.disabled = true;\n    fetch('/cart/change.js', {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n      body: JSON.stringify({ id: line, quantity })\n    })\n      .then((response) => {\n        if (!response.ok) throw new Error('cart_change_failed');\n        return response.json();\n      })\n      .then((cart) => render(cart))\n      .catch(() => setStatus('Impossible de mettre \u00E0 jour le panier.'))\n      .finally(() => { quantityButton.disabled = false; });\n  });\n\n  document.addEventListener('click', (event) => {\n    const toggle = event.target.closest('[data-cart-drawer-toggle]');\n    if (!toggle) return;\n    event.preventDefault();\n    open(toggle);\n  });\n  document.addEventListener('keydown', (event) => {\n    if (event.key === 'Escape' && !drawer.hidden) close();\n  });\n\n  window.ToutvaCartDrawer = { addItems, close, open, refresh };\n  refresh();\n}\n\nfunction ensureProductGalleryNavigation(gallery, itemCount) {\n  if (!gallery) return;\n\n  const surface = gallery.querySelector('.product__gallery-main');\n  if (!surface) return;\n\n  const createArrow = (direction) => {\n    const button = document.createElement('button');\n    button.className = `product-gallery-nav product-gallery-nav--${direction}`;\n    button.type = 'button';\n    button.dataset[direction === 'prev' ? 'galleryPrev' : 'galleryNext'] = '';\n    button.setAttribute('aria-label', direction === 'prev' ? 'Photo pr\u00E9c\u00E9dente' : 'Photo suivante');\n    button.innerHTML = direction === 'prev'\n      ? '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M14.5 5 7.5 12l7 7\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.2\"/></svg>'\n      : '<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"m9.5 5 7 7-7 7\" fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2.2\"/></svg>';\n    surface.appendChild(button);\n    return button;\n  };\n\n  const previous = surface.querySelector('[data-gallery-prev]') || (itemCount > 1 ? createArrow('prev') : null);\n  const next = surface.querySelector('[data-gallery-next]') || (itemCount > 1 ? createArrow('next') : null);\n  [previous, next].forEach((button) => {\n    if (!button) return;\n    const hidden = itemCount < 2;\n    button.hidden = hidden;\n    button.disabled = hidden;\n    button.setAttribute('aria-hidden', String(hidden));\n  });\n}\n\nfunction getOptimizedShopifyImageUrl(src, width) {\n  if (!src || !width) return src || '';\n  try {\n    const url = new URL(src, window.location.origin);\n    if (!url.hostname.endsWith('toutva.fr') && !url.hostname.endsWith('shopifycdn.com')) return src;\n    url.searchParams.set('width', String(width));\n    return url.toString();\n  } catch (error) {\n    const separator = src.includes('?') ? '&' : '?';\n    return `${src}${separator}width=${width}`;\n  }\n}\n\nfunction getShopifyImageIdentity(src) {\n  if (!src) return '';\n  try {\n    const url = new URL(src, window.location.origin);\n    url.searchParams.delete('width');\n    return `${url.hostname}${url.pathname}?${url.searchParams.toString()}`;\n  } catch (error) {\n    return String(src).replace(/([?&])width=\\d+(&|$)/, '$1').replace(/[?&]$/, '');\n  }\n}\n\nfunction setResponsiveShopifyImage(image, src, options = {}) {\n  if (!image || !src) return false;\n\n  const {\n    fallbackWidth = 1000,\n    widths = [360, 480, 640, 720, 800, 1000, 1200],\n    sizes = '(min-width: 990px) 50vw, 100vw'\n  } = options;\n  const currentSource = image.currentSrc || image.src;\n  const sameSource = getShopifyImageIdentity(currentSource) === getShopifyImageIdentity(src);\n\n  // Keep the server-rendered responsive source untouched on first paint. In\n  // particular, this avoids downloading the same LCP image twice while\n  // Lighthouse is still identifying the largest visible element.\n  if (sameSource && image.getAttribute('srcset')) return false;\n\n  image.sizes = sizes;\n  image.srcset = widths\n    .map((width) => `${getOptimizedShopifyImageUrl(src, width)} ${width}w`)\n    .join(', ');\n  image.src = getOptimizedShopifyImageUrl(src, fallbackWidth);\n  return true;\n}\n\nfunction ensureProductGalleryThumbs(gallery, galleryItems) {\n  if (!gallery) return [];\n\n  let thumbsContainer = gallery.querySelector('.product__thumbs');\n  if (!thumbsContainer) {\n    thumbsContainer = document.createElement('div');\n    thumbsContainer.className = 'product__thumbs';\n    gallery.appendChild(thumbsContainer);\n  }\n\n  thumbsContainer.querySelectorAll('[data-gallery-generated-thumb]').forEach((thumb) => thumb.remove());\n  let thumbs = Array.from(thumbsContainer.querySelectorAll('[data-gallery-thumb]'));\n\n  for (let index = thumbs.length; index < galleryItems.length; index += 1) {\n    const item = galleryItems[index];\n    const thumb = document.createElement('button');\n    thumb.className = 'product__thumb';\n    thumb.type = 'button';\n    thumb.dataset.galleryThumb = '';\n    thumb.dataset.galleryZoom = '';\n    thumb.dataset.galleryGeneratedThumb = '';\n    thumb.dataset.gallerySrc = item.src;\n    thumb.setAttribute('aria-label', `Voir l'image ${index + 1} en grand`);\n    thumb.setAttribute('aria-pressed', 'false');\n\n    const image = document.createElement('img');\n    image.src = getOptimizedShopifyImageUrl(item.src, 240);\n    image.alt = item.alt || '';\n    image.loading = 'lazy';\n    image.decoding = 'async';\n    thumb.appendChild(image);\n    thumbsContainer.appendChild(thumb);\n  }\n\n  thumbs = Array.from(thumbsContainer.querySelectorAll('[data-gallery-thumb]'));\n  return thumbs;\n}\n\nfunction updateProductGallery(root, galleryItems) {\n  if (!root || !Array.isArray(galleryItems) || galleryItems.length === 0) return;\n\n  const gallery = root.querySelector('[data-product-gallery]');\n  if (gallery) {\n    const mainImage = gallery.querySelector('.product__gallery-main img');\n    const thumbs = ensureProductGalleryThumbs(gallery, galleryItems);\n\n    // Every variant/offer starts at its first image. This also prevents a\n    // Duo selection from keeping a stale Solo slide index.\n    const track = gallery.querySelector('[data-gallery-track]');\n    if (track) track.dataset.galleryIndex = '0';\n\n    if (mainImage) {\n      setResponsiveShopifyImage(mainImage, galleryItems[0].src);\n      mainImage.alt = galleryItems[0].alt || mainImage.alt;\n    }\n\n    const mainButton = gallery.querySelector('.product__gallery-main .product-gallery-zoom');\n    if (mainButton) mainButton.dataset.gallerySrc = galleryItems[0].src;\n\n    thumbs.forEach((thumb, index) => {\n      const item = galleryItems[index];\n      thumb.hidden = !item;\n      if (!item) return;\n\n      thumb.dataset.gallerySrc = item.src;\n      thumb.setAttribute('aria-label', `Voir l'image ${index + 1}`);\n      thumb.classList.toggle('is-active', index === 0);\n      thumb.setAttribute('aria-pressed', String(index === 0));\n\n      const thumbImage = thumb.querySelector('img');\n      if (thumbImage) {\n        setResponsiveShopifyImage(thumbImage, item.src, {\n          fallbackWidth: 240,\n          widths: [120, 160, 240, 320],\n          sizes: '68px'\n        });\n        thumbImage.alt = item.alt || thumbImage.alt;\n      }\n    });\n\n    ensureProductGalleryNavigation(gallery, galleryItems.length);\n    refreshProductGalleryTrack(gallery);\n  }\n\n  const variantMediaImage = root.querySelector('[data-product-variant-media] img');\n  if (variantMediaImage && galleryItems[0]) {\n    variantMediaImage.src = getOptimizedShopifyImageUrl(galleryItems[0].src, 1000);\n    variantMediaImage.alt = galleryItems[0].alt || variantMediaImage.alt;\n    variantMediaImage.removeAttribute('srcset');\n  }\n\n  const stickyImage = root.querySelector('.product-sticky-atc__image');\n  if (stickyImage && galleryItems[0]) {\n    stickyImage.src = getOptimizedShopifyImageUrl(galleryItems[0].src, 320);\n    stickyImage.alt = galleryItems[0].alt || stickyImage.alt;\n    stickyImage.removeAttribute('srcset');\n  }\n}\n\nfunction updateSoloOfferImage(root, galleryItems) {\n  if (!root || !Array.isArray(galleryItems) || galleryItems.length === 0) return;\n\n  root.querySelectorAll('[data-offer-media=\"solo\"] img').forEach((image) => {\n    if (!galleryItems[0]) return;\n    setResponsiveShopifyImage(image, galleryItems[0].src, {\n      fallbackWidth: 480,\n      widths: [160, 240, 320, 480, 640],\n      sizes: '(min-width: 990px) 20vw, 45vw'\n    });\n    image.alt = galleryItems[0].alt || image.alt;\n  });\n}\n\nfunction setActiveGalleryThumb(gallery, targetThumb) {\n  if (!gallery || !targetThumb) return;\n\n  const mainImage = gallery.querySelector('.product__gallery-main img');\n  const nextSrc = targetThumb.dataset.gallerySrc;\n  if (!mainImage || !nextSrc) return;\n\n  setResponsiveShopifyImage(mainImage, nextSrc);\n  mainImage.alt = targetThumb.querySelector('img')?.alt || mainImage.alt;\n\n  const mainButton = gallery.querySelector('.product__gallery-main .product-gallery-zoom');\n  if (mainButton) mainButton.dataset.gallerySrc = nextSrc;\n\n  gallery.querySelectorAll('[data-gallery-thumb]').forEach((thumb) => {\n    const selected = thumb === targetThumb;\n    thumb.classList.toggle('is-active', selected);\n    thumb.setAttribute('aria-pressed', String(selected));\n  });\n\n  const visibleThumbs = Array.from(gallery.querySelectorAll('[data-gallery-thumb]')).filter((thumb) => !thumb.hidden);\n  const targetIndex = visibleThumbs.indexOf(targetThumb);\n  if (targetIndex >= 0) setGalleryTrackPosition(gallery, targetIndex, 0, true);\n\n  targetThumb.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' });\n}\n\nfunction navigateProductGallery(button, direction) {\n  const gallery = button && button.closest('.product__gallery');\n  if (!gallery) return;\n\n  const thumbs = Array.from(gallery.querySelectorAll('[data-gallery-thumb]')).filter((thumb) => !thumb.hidden);\n  if (thumbs.length < 2) return;\n\n  const currentIndex = Math.max(0, thumbs.findIndex((thumb) => thumb.classList.contains('is-active')));\n  const nextIndex = (currentIndex + direction + thumbs.length) % thumbs.length;\n  setActiveGalleryThumb(gallery, thumbs[nextIndex]);\n}\n\nfunction setGalleryTrackPosition(gallery, index, offset = 0, animate = true) {\n  const track = gallery && gallery.querySelector('[data-gallery-track]');\n  const surface = gallery && gallery.querySelector('.product__gallery-main');\n  if (!track || !surface) return;\n\n  const firstSlide = track.firstElementChild;\n  const width = (firstSlide && firstSlide.getBoundingClientRect().width) || track.clientWidth || surface.clientWidth;\n  if (!width) return;\n\n  const maxIndex = Math.max(0, track.children.length - 1);\n  const safeIndex = Math.max(0, Math.min(index, maxIndex));\n  const isMobile = window.matchMedia && window.matchMedia('(max-width: 989px)').matches;\n  if (isMobile) {\n    track.style.transform = 'none';\n    track.style.transition = 'none';\n    if (typeof track.scrollTo === 'function') {\n      track.scrollTo({ left: safeIndex * width, behavior: animate ? 'smooth' : 'auto' });\n    } else {\n      track.scrollLeft = safeIndex * width;\n    }\n  } else {\n    track.style.transition = animate ? 'transform .28s cubic-bezier(.22,.61,.36,1)' : 'none';\n    track.style.transform = `translate3d(${(-safeIndex * width) + offset}px, 0, 0)`;\n  }\n  track.dataset.galleryIndex = String(safeIndex);\n}\n\nfunction refreshProductGalleryTrack(gallery) {\n  if (!gallery) return;\n\n  const surface = gallery.querySelector('.product__gallery-main');\n  const mainButton = surface && surface.querySelector('.product-gallery-zoom');\n  if (!surface || !mainButton) return;\n\n  let track = surface.querySelector('[data-gallery-track]');\n  if (!track) {\n    track = document.createElement('div');\n    track.className = 'product-gallery-track';\n    track.dataset.galleryTrack = '';\n\n    const firstSlide = document.createElement('div');\n    firstSlide.className = 'product-gallery-slide';\n    track.appendChild(firstSlide);\n    firstSlide.appendChild(mainButton);\n    surface.insertBefore(track, surface.firstChild);\n  }\n\n  track.querySelectorAll('[data-gallery-generated-slide]').forEach((slide) => slide.remove());\n\n  const thumbs = Array.from(gallery.querySelectorAll('[data-gallery-thumb]')).filter((thumb) => !thumb.hidden);\n  thumbs.slice(1).forEach((thumb, index) => {\n    const image = thumb.querySelector('img');\n    const slide = document.createElement('button');\n    slide.type = 'button';\n    slide.className = 'product-gallery-slide';\n    slide.dataset.galleryGeneratedSlide = '';\n    slide.dataset.galleryZoom = '';\n    slide.dataset.gallerySrc = thumb.dataset.gallerySrc || '';\n    slide.setAttribute('aria-label', `Agrandir l'image ${index + 2}`);\n\n    const slideImage = document.createElement('img');\n    setResponsiveShopifyImage(\n      slideImage,\n      thumb.dataset.gallerySrc || (image && (image.currentSrc || image.src)) || ''\n    );\n    slideImage.alt = (image && image.alt) || '';\n    slideImage.loading = 'lazy';\n    slideImage.decoding = 'async';\n    slide.appendChild(slideImage);\n    track.appendChild(slide);\n  });\n\n  const currentIndex = Number(track.dataset.galleryIndex || 0);\n  setGalleryTrackPosition(gallery, Math.min(currentIndex, thumbs.length - 1), 0, false);\n\n  // The mobile track is created lazily when a variant or the Duo offer is\n  // selected. Bind the swipe listeners after that creation as well as on the\n  // initial page load, otherwise Duo has no touch handler until a full reload.\n  initProductGallerySwipe();\n}\n\nfunction initProductGallerySwipe() {\n  document.querySelectorAll('[data-product-gallery]').forEach((gallery) => {\n    let track = gallery.querySelector('[data-gallery-track]');\n    if (!track) {\n      // The server-rendered gallery starts as a single image. Create the\n      // scroll track immediately so it is already swipeable before a Duo or\n      // color change triggers a gallery refresh.\n      refreshProductGalleryTrack(gallery);\n      track = gallery.querySelector('[data-gallery-track]');\n    }\n    if (!track || track.dataset.galleryScrollReady === 'true') return;\n\n    track.dataset.galleryScrollReady = 'true';\n    let scrollTimer;\n\n    const syncActiveThumb = () => {\n      const firstSlide = track.firstElementChild;\n      const width = (firstSlide && firstSlide.getBoundingClientRect().width) || track.clientWidth;\n      if (!width) return;\n\n      const index = Math.max(0, Math.min(track.children.length - 1, Math.round(track.scrollLeft / width)));\n      track.dataset.galleryIndex = String(index);\n      const thumbs = Array.from(gallery.querySelectorAll('[data-gallery-thumb]')).filter((thumb) => !thumb.hidden);\n      thumbs.forEach((thumb, thumbIndex) => {\n        const selected = thumbIndex === index;\n        thumb.classList.toggle('is-active', selected);\n        thumb.setAttribute('aria-pressed', String(selected));\n      });\n    };\n\n    track.addEventListener('scroll', () => {\n      syncActiveThumb();\n      window.clearTimeout(scrollTimer);\n      scrollTimer = window.setTimeout(syncActiveThumb, 100);\n    }, { passive: true });\n    track.addEventListener('scrollend', syncActiveThumb, { passive: true });\n\n    let touchStartX = null;\n    let touchStartY = null;\n    let touchMoved = false;\n    track.addEventListener('touchstart', (event) => {\n      if (event.touches.length !== 1) return;\n      touchStartX = event.touches[0].clientX;\n      touchStartY = event.touches[0].clientY;\n      touchMoved = false;\n    }, { passive: true });\n    track.addEventListener('touchmove', (event) => {\n      if (touchStartX === null || event.touches.length !== 1) return;\n      const horizontalDelta = event.touches[0].clientX - touchStartX;\n      const verticalDelta = event.touches[0].clientY - touchStartY;\n      if (Math.abs(horizontalDelta) > 8 && Math.abs(horizontalDelta) > Math.abs(verticalDelta) * 1.15) touchMoved = true;\n    }, { passive: true });\n    const finishTouch = () => {\n      if (touchStartX === null) return;\n      const wasHorizontalSwipe = touchMoved;\n      touchStartX = null;\n      touchStartY = null;\n      touchMoved = false;\n      if (wasHorizontalSwipe) gallery.dataset.gallerySwipeHandled = String(Date.now());\n    };\n    track.addEventListener('touchend', finishTouch, { passive: true });\n    track.addEventListener('touchcancel', finishTouch, { passive: true });\n    syncActiveThumb();\n  });\n}\n\nfunction getToutvaColorKey(text) {\n  const color = String(text || '').toLowerCase();\n  if (color.includes('kaki')) return 'kaki';\n  return color.includes('marron') ? 'marron' : 'noir';\n}\n\nfunction getToutvaSwatchColor(text) {\n  const color = getToutvaColorKey(text);\n  if (color === 'kaki') return '#a89f8c';\n  return color === 'marron' ? '#7a5638' : '#17211e';\n}\n\nfunction getDuoGalleryItem(root) {\n  if (!root) return null;\n  const firstSelect = root.querySelector('[data-duo-select][data-duo-position=\"1\"]');\n  const secondSelect = root.querySelector('[data-duo-select][data-duo-position=\"2\"]');\n  if (!firstSelect || !secondSelect) return null;\n\n  const firstColor = getToutvaColorKey(firstSelect.options[firstSelect.selectedIndex] && firstSelect.options[firstSelect.selectedIndex].textContent);\n  const secondColor = getToutvaColorKey(secondSelect.options[secondSelect.selectedIndex] && secondSelect.options[secondSelect.selectedIndex].textContent);\n  const key = `duoImage${firstColor.charAt(0).toUpperCase()}${firstColor.slice(1)}${secondColor.charAt(0).toUpperCase()}${secondColor.slice(1)}`;\n  const src = root.dataset[key];\n  if (!src) return null;\n\n  return {\n    src,\n    alt: `Offre Duo ToutVa ${firstColor} et ${secondColor}, deux cabas transformables`\n  };\n}\n\nfunction getDuoGalleryItems(root, activeSelect) {\n  if (!root) return [];\n  const items = [];\n  const seen = new Set();\n  const addItem = (item) => {\n    if (!item || !item.src || seen.has(item.src)) return;\n    seen.add(item.src);\n    items.push(item);\n  };\n\n  addItem(getDuoGalleryItem(root));\n  const gallerySelect = activeSelect || root.querySelector('[data-duo-select][data-duo-position=\"1\"]');\n  const selectedOption = gallerySelect && gallerySelect.options[gallerySelect.selectedIndex];\n  getGalleryItemsFromOption(selectedOption).forEach(addItem);\n\n  return items;\n}\n\nfunction updateDuoVisual(root, activeSelect) {\n  if (!root) return;\n  const selectedOffer = root.querySelector('[data-product-offer][aria-pressed=\"true\"]');\n  const isDuo = selectedOffer && selectedOffer.dataset.quantity === '2';\n  const duoItem = getDuoGalleryItem(root);\n\n  const duoOfferImage = root.querySelector('[data-offer-media=\"duo\"] img');\n  if (duoOfferImage && duoItem) {\n    setResponsiveShopifyImage(duoOfferImage, duoItem.src, {\n      fallbackWidth: 480,\n      widths: [160, 240, 320, 480, 640],\n      sizes: '(min-width: 990px) 20vw, 45vw'\n    });\n    duoOfferImage.alt = duoItem.alt;\n  }\n\n  if (isDuo) {\n    const duoGalleryItems = getDuoGalleryItems(root, activeSelect);\n    if (duoGalleryItems.length) updateProductGallery(root, duoGalleryItems);\n  }\n\n  updateProductSelectionPreview(root);\n  updateStickyProductSummary(root);\n}\n\nfunction getGalleryItemsFromOption(option) {\n  if (!option || !option.dataset) return [];\n  const color = option.textContent || option.dataset.galleryAlt || '';\n  const items = [];\n\n  for (let index = 1; index <= 8; index += 1) {\n    const src = option.dataset[`gallerySrc-${index}`] || option.dataset[`gallerySrc${index}`];\n    if (src) items.push({ src, alt: getToutvaGalleryAlt(color, index) });\n  }\n\n  return items;\n}\n\nfunction getToutvaGalleryAlt(colorText, index) {\n  const colorKey = getToutvaColorKey(colorText);\n  const color = colorKey.charAt(0).toUpperCase() + colorKey.slice(1);\n  const descriptions = [\n    `Cabas ToutVa ${color} port\u00E9 \u00E0 l\u2019\u00E9paule`,\n    `ToutVa ${color} ouvert en tapis rond sur fond clair`,\n    `Transformation du cabas ToutVa ${color} en tapis en trois gestes`,\n    `Cabas ToutVa ${color} pos\u00E9 devant un fauteuil en rotin`,\n    `Tapis ToutVa ${color} ouvert avec les essentiels d\u2019une sortie`,\n    `Dimensions du cabas ToutVa ${color} ferm\u00E9 et ouvert en tapis`,\n    `Gros plan sur la mati\u00E8re du cabas ToutVa ${color} r\u00E9sistante aux \u00E9claboussures`,\n    'Poche int\u00E9rieure et fermeture du tapis ToutVa'\n  ];\n\n  return descriptions[index - 1] || `Cabas ToutVa ${color}`;\n}\n\nfunction setProductFormError(root, message) {\n  const errorEl = root && root.querySelector('[data-product-form-error]');\n  if (!errorEl) return;\n  errorEl.textContent = message || '';\n  errorEl.hidden = !message;\n}\n\nfunction updateProductOfferPrice(root, currentVariant) {\n  if (!root) return;\n  const variant = currentVariant || getCurrentProductVariant(root);\n  const priceEl = root.querySelector('[data-product-price]');\n  if (!variant || !priceEl) return;\n\n  const selectedOffer = root.querySelector('[data-product-offer][aria-pressed=\"true\"]');\n  const isDuo = selectedOffer && selectedOffer.dataset.quantity === '2';\n  const currentPrice = isDuo && variant.duo_total ? variant.duo_total : variant.price;\n  const currentCompare = isDuo && variant.duo_compare ? variant.duo_compare : variant.compare_at;\n  priceEl.innerHTML = currentPrice + (currentCompare ? ' <s>' + currentCompare + '</s>' : '');\n}\n\nfunction updateDuoMode(root) {\n  if (!root) return;\n  const selectedOffer = root.querySelector('[data-product-offer][aria-pressed=\"true\"]');\n  const isDuo = selectedOffer && selectedOffer.dataset.quantity === '2';\n  const duoPicker = root.querySelector('[data-duo-picker]');\n  const acceleratedCheckout = root.querySelector('[data-product-accelerated-checkout]');\n\n  root.classList.toggle('is-duo-mode', Boolean(isDuo));\n  if (duoPicker) duoPicker.hidden = !isDuo;\n  if (acceleratedCheckout) acceleratedCheckout.hidden = false;\n\n  if (isDuo) {\n    const mainVariant = root.querySelector('[name=\"id\"]');\n    const firstDuoSelect = root.querySelector('[data-duo-select][data-duo-position=\"1\"]');\n    const secondDuoSelect = root.querySelector('[data-duo-select][data-duo-position=\"2\"]');\n\n    if (mainVariant && firstDuoSelect) {\n      const hasSoloOption = Array.from(firstDuoSelect.options).some((option) => option.value === mainVariant.value);\n      if (hasSoloOption) firstDuoSelect.value = mainVariant.value;\n    }\n    if (firstDuoSelect && secondDuoSelect && secondDuoSelect.value === firstDuoSelect.value && secondDuoSelect.options.length > 1) {\n      const differentOption = Array.from(secondDuoSelect.options).find((option) => option.value !== firstDuoSelect.value);\n      if (differentOption) secondDuoSelect.value = differentOption.value;\n    }\n    if (firstDuoSelect) syncDuoSwatches(firstDuoSelect);\n    if (secondDuoSelect) syncDuoSwatches(secondDuoSelect);\n    syncDuoNativeVariant(root);\n    updateDuoVisual(root);\n  } else {\n    const currentVariant = root.querySelector('[name=\"id\"]');\n    const firstDuoSelect = root.querySelector('[data-duo-select][data-duo-position=\"1\"]');\n    if (currentVariant && firstDuoSelect) {\n      currentVariant.value = firstDuoSelect.value;\n      currentVariant.dispatchEvent(new Event('change', { bubbles: true }));\n      root.querySelectorAll('[data-variant-id]').forEach((button) => {\n        button.setAttribute('aria-pressed', String(button.dataset.variantId === firstDuoSelect.value));\n      });\n    }\n    if (currentVariant) syncProductVariant(root, currentVariant.value);\n  }\n\n  updateProductOfferPrice(root);\n  updateStickyProductSummary(root);\n}\n\nfunction getCurrentProductVariant(root) {\n  if (!root) return null;\n  const dataEl = root.querySelector('[data-product-variants]');\n  const input = root.querySelector('[name=\"id\"]');\n  if (!dataEl || !input) return null;\n\n  let variants = [];\n  try { variants = JSON.parse(dataEl.textContent); } catch (error) { variants = []; }\n  return variants.find((item) => String(item.id) === String(input.value)) || null;\n}\n\nfunction getDuoNativeVariantId(root) {\n  if (!root) return '';\n  const firstSelect = root.querySelector('[data-duo-select][data-duo-position=\"1\"]');\n  const secondSelect = root.querySelector('[data-duo-select][data-duo-position=\"2\"]');\n  if (!firstSelect || !secondSelect) return '';\n\n  const firstColor = getToutvaColorKey(firstSelect.options[firstSelect.selectedIndex] && firstSelect.options[firstSelect.selectedIndex].textContent);\n  const secondColor = getToutvaColorKey(secondSelect.options[secondSelect.selectedIndex] && secondSelect.options[secondSelect.selectedIndex].textContent);\n  if (firstColor === 'marron' && secondColor === 'noir') return root.dataset.duoVariantNoirMarron || '';\n\n  const key = `duoVariant${firstColor.charAt(0).toUpperCase()}${firstColor.slice(1)}${secondColor.charAt(0).toUpperCase()}${secondColor.slice(1)}`;\n  return root.dataset[key] || '';\n}\n\nfunction syncDuoNativeVariant(root) {\n  if (!root) return null;\n  const variantId = getDuoNativeVariantId(root);\n  const input = root.querySelector('[name=\"id\"]');\n  if (!variantId || !input) {\n    setProductFormError(root, 'Cette combinaison Duo est momentan\u00E9ment indisponible.');\n    return null;\n  }\n\n  setProductFormError(root, '');\n  input.value = variantId;\n  input.dispatchEvent(new Event('change', { bubbles: true }));\n  syncProductVariant(root, variantId);\n  return variantId;\n}\n\nfunction getProductSelectionState(root) {\n  if (!root) return null;\n  const variant = getCurrentProductVariant(root);\n  const selectedOffer = root.querySelector('[data-product-offer][aria-pressed=\"true\"]');\n  const isDuo = selectedOffer && selectedOffer.dataset.quantity === '2';\n  const soloLabel = root.dataset.productLabelSolo || 'Solo';\n  const duoLabel = root.dataset.productLabelDuo || 'Duo';\n\n  if (isDuo) {\n    const firstSelect = root.querySelector('[data-duo-select][data-duo-position=\"1\"]');\n    const secondSelect = root.querySelector('[data-duo-select][data-duo-position=\"2\"]');\n    const firstTitle = firstSelect && firstSelect.options[firstSelect.selectedIndex] ? firstSelect.options[firstSelect.selectedIndex].textContent.trim() : '';\n    const secondTitle = secondSelect && secondSelect.options[secondSelect.selectedIndex] ? secondSelect.options[secondSelect.selectedIndex].textContent.trim() : '';\n    const duoItem = getDuoGalleryItem(root);\n    return {\n      isDuo: true,\n      title: `${duoLabel} \u00B7 ${firstTitle}${firstTitle && secondTitle ? ' + ' : ''}${secondTitle}`,\n      image: duoItem\n    };\n  }\n\n  const pressedVariant = root.querySelector('[data-variant-id][aria-pressed=\"true\"] .variant__name');\n  const variantTitle = (variant && variant.title) || (pressedVariant && pressedVariant.textContent.trim()) || '';\n  const galleryItem = variant && Array.isArray(variant.gallery) && variant.gallery.length ? variant.gallery[0] : null;\n  return {\n    isDuo: false,\n    title: `${soloLabel}${variantTitle ? ` \u00B7 ${variantTitle}` : ''}`,\n    image: galleryItem\n  };\n}\n\nfunction updateProductSelectionPreview(root) {\n  if (!root) return;\n  const preview = root.querySelector('[data-product-selection-preview]');\n  if (!preview) return;\n  const state = getProductSelectionState(root);\n  if (!state) return;\n\n  const title = preview.querySelector('[data-product-selection-title]');\n  const image = preview.querySelector('.product-selection-preview__image');\n  if (title) title.textContent = state.title;\n  if (image && state.image && state.image.src) {\n    image.src = getOptimizedShopifyImageUrl(state.image.src, 320);\n    image.alt = state.image.alt || state.title;\n    image.removeAttribute('srcset');\n  }\n}\n\nfunction updateStickyProductSummary(root) {\n  if (!root) return;\n  const sticky = root.querySelector('[data-product-sticky-atc]');\n  if (!sticky) return;\n\n  const variant = getCurrentProductVariant(root);\n  const selectedOffer = root.querySelector('[data-product-offer][aria-pressed=\"true\"]');\n  const isDuo = selectedOffer && selectedOffer.dataset.quantity === '2';\n  const label = sticky.querySelector('[data-product-sticky-offer]');\n  const price = sticky.querySelector('[data-product-sticky-current-price]');\n  const comparePrice = sticky.querySelector('[data-product-sticky-compare-price]');\n  const stickyButton = sticky.querySelector('[data-add-to-cart-sticky]');\n  const buttonLabel = sticky.querySelector('[data-product-sticky-button-label]');\n  const image = sticky.querySelector('.product-sticky-atc__image');\n  const state = getProductSelectionState(root);\n  const currentPrice = variant && isDuo && variant.duo_total ? variant.duo_total : variant && variant.price;\n  const currentComparePrice = variant && isDuo && variant.duo_compare ? variant.duo_compare : variant && variant.compare_at;\n\n  if (label && state) label.textContent = state.title;\n  if (price && currentPrice) price.textContent = currentPrice;\n  if (comparePrice && currentComparePrice) comparePrice.textContent = currentComparePrice;\n  if (buttonLabel && variant) buttonLabel.textContent = variant.available\n    ? (root.dataset.productLabelAdd || 'Ajouter')\n    : (root.dataset.productLabelSoldout || '\u00C9puis\u00E9');\n  if (stickyButton && variant) stickyButton.disabled = !variant.available;\n  if (image && state && state.image && state.image.src) {\n    image.src = getOptimizedShopifyImageUrl(state.image.src, 320);\n    image.alt = state.image.alt || state.title;\n    image.removeAttribute('srcset');\n  }\n}\n\nfunction initProductStickyBars() {\n  const roots = Array.from(document.querySelectorAll('[data-product-root]'));\n  if (!roots.length) return;\n\n  const stickyStates = new WeakMap();\n\n  const update = () => {\n    roots.forEach((root) => {\n      const sticky = root.querySelector('[data-product-sticky-atc]');\n      if (!sticky) return;\n\n      const viewportHeight = window.innerHeight || document.documentElement.clientHeight || 0;\n      const rootRect = root.getBoundingClientRect();\n      const trigger = document.querySelector('[data-product-sticky-trigger]');\n      const triggerRect = trigger && trigger.getBoundingClientRect();\n      const state = stickyStates.get(root) || { activated: false };\n      const productVisible = rootRect.bottom > 0 && rootRect.top < viewportHeight;\n      const triggerReached = triggerRect ? triggerRect.top <= viewportHeight : rootRect.bottom <= 0;\n      const isMobile = window.matchMedia('(max-width: 989px)').matches;\n\n      if (!state.activated && triggerReached) state.activated = true;\n      stickyStates.set(root, state);\n\n      const shouldShow = isMobile\n        ? triggerReached\n        : state.activated && (triggerReached || !productVisible);\n      sticky.hidden = !shouldShow;\n      sticky.classList.toggle('is-visible', shouldShow);\n    });\n  };\n\n  window.addEventListener('scroll', update, { passive: true });\n  window.addEventListener('resize', update);\n  update();\n}\n\nfunction syncDuoSwatches(select) {\n  const picker = select && select.closest('[data-duo-choice]');\n  if (!picker) return;\n\n  picker.querySelectorAll('[data-duo-generated-swatch]').forEach((button) => {\n    const selected = button.dataset.value === select.value;\n    button.classList.toggle('is-selected', selected);\n    button.setAttribute('aria-pressed', String(selected));\n  });\n}\n\nfunction enhanceDuoPickers() {\n  document.querySelectorAll('[data-duo-select]').forEach((select) => {\n    const label = select.closest('label');\n    if (!label || label.querySelector('[data-duo-generated-swatches]')) return;\n\n    label.dataset.duoChoice = '';\n    const swatches = document.createElement('div');\n    swatches.className = 'product-duo-swatches';\n    swatches.dataset.duoGeneratedSwatches = '';\n\n    Array.from(select.options).forEach((option) => {\n      const title = option.textContent.trim();\n      const swatch = document.createElement('button');\n      swatch.type = 'button';\n      swatch.className = 'product-duo-swatch';\n      swatch.dataset.duoGeneratedSwatch = '';\n      swatch.dataset.value = option.value;\n      swatch.setAttribute('aria-pressed', String(option.selected));\n      swatch.style.setProperty('--swatch', getToutvaSwatchColor(title));\n      swatch.innerHTML = `<span aria-hidden=\"true\"></span><em>${title}</em>`;\n      swatches.appendChild(swatch);\n    });\n\n    select.insertAdjacentElement('afterend', swatches);\n    syncDuoSwatches(select);\n  });\n}\n\nfunction syncProductVariant(root, variantId) {\n  if (!root) return;\n  const dataEl = root.querySelector('[data-product-variants]');\n  if (!dataEl) return;\n  let variants = [];\n  try { variants = JSON.parse(dataEl.textContent); } catch (error) { variants = []; }\n  const variant = variants.find((item) => String(item.id) === String(variantId));\n  if (!variant) return;\n\n  updateProductOfferPrice(root, variant);\n  const duoTotal = root.querySelector('[data-product-duo-total]');\n  if (duoTotal && variant.duo_total) duoTotal.textContent = variant.duo_total;\n  const duoUnit = root.querySelector('[data-product-duo-unit]');\n  if (duoUnit && variant.duo_unit) duoUnit.textContent = variant.duo_unit_label || variant.duo_unit;\n  const duoCompare = root.querySelector('[data-product-duo-compare]');\n  if (duoCompare && variant.duo_compare) duoCompare.textContent = variant.duo_compare;\n  const soloPrice = root.querySelector('[data-product-offer][data-quantity=\"1\"] [data-product-solo-price], .product-offer[data-quantity=\"1\"] .product-offer__price');\n  if (soloPrice && !variant.is_duo) {\n    soloPrice.innerHTML = '<span>' + variant.price + '</span>' + (variant.compare_at ? ' <s>' + variant.compare_at + '</s>' : '');\n  }\n  const soloSaving = root.querySelector('[data-product-solo-saving]');\n  if (soloSaving && !variant.is_duo && variant.solo_saving_label) {\n    soloSaving.textContent = variant.solo_saving_label;\n  }\n  root.querySelectorAll('[data-add-to-cart]').forEach((button) => {\n    button.disabled = !variant.available;\n    button.textContent = variant.available ? button.dataset.labelAvailable : button.dataset.labelSoldout;\n  });\n  root.querySelectorAll('[data-add-to-cart-sticky]').forEach((button) => {\n    button.disabled = !variant.available;\n  });\n  if (!variant.is_duo) {\n    updateSoloOfferImage(root, variant.gallery);\n    updateProductGallery(root, variant.gallery);\n  }\n  updateDuoVisual(root);\n  updateProductSelectionPreview(root);\n  updateStickyProductSummary(root);\n}\n\nfunction getGalleryLightboxItems(gallery) {\n  if (!gallery) return [];\n\n  const items = Array.from(gallery.querySelectorAll('[data-gallery-thumb]'))\n    .filter((thumb) => !thumb.hidden && thumb.dataset.gallerySrc)\n    .map((thumb) => {\n      const image = thumb.querySelector('img');\n      return {\n        src: thumb.dataset.gallerySrc,\n        alt: (image && image.alt) || ''\n      };\n    });\n\n  if (items.length) return items;\n\n  const mainImage = gallery.querySelector('.product__gallery-main img');\n  if (!mainImage) return [];\n  return [{ src: mainImage.currentSrc || mainImage.src, alt: mainImage.alt || '' }];\n}\n\nfunction setGalleryLightboxImage(modal, index) {\n  const items = modal && modal._galleryItems;\n  const modalImage = modal && modal.querySelector('.gallery-lightbox__image');\n  if (!modal || !Array.isArray(items) || !items.length || !modalImage) return;\n\n  const safeIndex = (index + items.length) % items.length;\n  const item = items[safeIndex];\n  modal.dataset.galleryIndex = String(safeIndex);\n  modalImage.src = item.src;\n  modalImage.alt = item.alt || '';\n\n  const hasNavigation = items.length > 1;\n  modal.querySelectorAll('[data-gallery-lightbox-prev], [data-gallery-lightbox-next]').forEach((arrow) => {\n    arrow.hidden = !hasNavigation;\n  });\n}\n\nfunction navigateGalleryLightbox(direction) {\n  const modal = document.querySelector('[data-gallery-lightbox]:not([hidden])');\n  if (!modal || !Array.isArray(modal._galleryItems) || !modal._galleryItems.length) return;\n\n  const currentIndex = Number(modal.dataset.galleryIndex || 0);\n  setGalleryLightboxImage(modal, currentIndex + direction);\n}\n\nfunction openProductGalleryLightbox(button) {\n  const gallery = button && button.closest('[data-product-gallery]');\n  const image = button && button.querySelector('img');\n  if (!gallery || !image) return;\n\n  const items = getGalleryLightboxItems(gallery);\n  if (!items.length) return;\n\n  let modal = document.querySelector('[data-gallery-lightbox]');\n  if (!modal) {\n    modal = document.createElement('div');\n    modal.className = 'gallery-lightbox';\n    modal.dataset.galleryLightbox = '';\n    modal.hidden = true;\n    modal.innerHTML = '<div class=\"gallery-lightbox__backdrop\" data-gallery-lightbox-close></div><div class=\"gallery-lightbox__panel\" role=\"dialog\" aria-modal=\"true\" aria-label=\"Photo produit agrandie\"><button type=\"button\" class=\"gallery-lightbox__close\" data-gallery-lightbox-close aria-label=\"Fermer\">\u00D7</button><button type=\"button\" class=\"gallery-lightbox__nav gallery-lightbox__nav--prev\" data-gallery-lightbox-prev aria-label=\"Photo pr\u00E9c\u00E9dente\">\u2039</button><img class=\"gallery-lightbox__image\" alt=\"\" width=\"1600\" height=\"1600\" decoding=\"async\" draggable=\"false\"><button type=\"button\" class=\"gallery-lightbox__nav gallery-lightbox__nav--next\" data-gallery-lightbox-next aria-label=\"Photo suivante\">\u203A</button></div>';\n    modal.querySelectorAll('[data-gallery-lightbox-prev], [data-gallery-lightbox-next]').forEach((arrow) => {\n      arrow.addEventListener('pointerleave', () => arrow.classList.remove('is-pointer-activated'));\n    });\n    document.body.appendChild(modal);\n  }\n\n  modal._galleryItems = items;\n  let index = -1;\n  if (button.dataset.gallerySrc) index = items.findIndex((item) => item.src === button.dataset.gallerySrc);\n  if (index < 0) {\n    const activeThumb = gallery.querySelector('[data-gallery-thumb].is-active');\n    const visibleThumbs = Array.from(gallery.querySelectorAll('[data-gallery-thumb]')).filter((thumb) => !thumb.hidden);\n    index = activeThumb ? visibleThumbs.indexOf(activeThumb) : Number(gallery.querySelector('[data-gallery-track]')?.dataset.galleryIndex || 0);\n  }\n\n  setGalleryLightboxImage(modal, Math.max(0, index));\n  modal.hidden = false;\n  document.documentElement.classList.add('gallery-lightbox-open');\n  const close = modal.querySelector('.gallery-lightbox__close');\n  if (close) close.focus();\n}\n\nfunction closeProductGalleryLightbox() {\n  const modal = document.querySelector('[data-gallery-lightbox]');\n  if (!modal) return;\n  modal.hidden = true;\n  modal._galleryItems = null;\n  document.documentElement.classList.remove('gallery-lightbox-open');\n}\n\ndocument.addEventListener('click', (event) => {\n  const productQuantityChange = event.target.closest('[data-product-quantity-change]');\n  if (productQuantityChange) {\n    const root = productQuantityChange.closest('[data-product-root]') || document;\n    const input = root.querySelector('[data-product-quantity]');\n    const step = Number(productQuantityChange.dataset.productQuantityChange || 0);\n    if (input) {\n      const min = Number(input.min || 1);\n      input.value = String(Math.max(min, Number(input.value || min) + step));\n      input.dispatchEvent(new Event('change', { bubbles: true }));\n    }\n    return;\n  }\n\n  const quantityStep = event.target.closest('[data-quantity-step]');\n  if (quantityStep) {\n    const stepper = quantityStep.closest('.quantity-stepper');\n    const input = stepper && stepper.querySelector('input[type=\"number\"]');\n    const form = quantityStep.closest('form');\n    const step = Number(quantityStep.dataset.quantityStep || 0);\n\n    if (input) {\n      const nextValue = Math.max(Number(input.min || 0), Number(input.value || 0) + step);\n      input.value = String(nextValue);\n      input.dispatchEvent(new Event('change', { bubbles: true }));\n      if (form) {\n        const updateButton = form.querySelector('[name=\"update\"]');\n        if (updateButton) form.requestSubmit(updateButton);\n        else form.requestSubmit();\n      }\n    }\n    return;\n  }\n\n  const galleryZoom = event.target.closest('[data-gallery-zoom]');\n  if (galleryZoom) {\n    const gallery = galleryZoom.closest('[data-product-gallery]');\n    const swipeHandledAt = gallery && Number(gallery.dataset.gallerySwipeHandled || 0);\n    if (swipeHandledAt && Date.now() - swipeHandledAt < 500) {\n      delete gallery.dataset.gallerySwipeHandled;\n      return;\n    }\n\n    if (galleryZoom.matches('[data-gallery-thumb]')) {\n      setActiveGalleryThumb(galleryZoom.closest('.product__gallery'), galleryZoom);\n      return;\n    }\n    openProductGalleryLightbox(galleryZoom);\n    return;\n  }\n\n  const lightboxPrev = event.target.closest('[data-gallery-lightbox-prev]');\n  if (lightboxPrev) {\n    navigateGalleryLightbox(-1);\n    // Pointer clicks should not leave the arrow visually selected. Keyboard\n    // activation keeps focus so the lightbox remains fully accessible.\n    if (event.detail > 0) {\n      lightboxPrev.classList.add('is-pointer-activated');\n      lightboxPrev.blur();\n    }\n    return;\n  }\n\n  const lightboxNext = event.target.closest('[data-gallery-lightbox-next]');\n  if (lightboxNext) {\n    navigateGalleryLightbox(1);\n    if (event.detail > 0) {\n      lightboxNext.classList.add('is-pointer-activated');\n      lightboxNext.blur();\n    }\n    return;\n  }\n\n  if (event.target.closest('[data-gallery-lightbox-close]')) {\n    closeProductGalleryLightbox();\n    return;\n  }\n\n  const searchClose = event.target.closest('[data-search-close]');\n  if (searchClose) {\n    const openSearchToggle = document.querySelector('[data-search-toggle][aria-expanded=\"true\"]');\n    if (openSearchToggle) {\n      const popover = document.getElementById(openSearchToggle.getAttribute('aria-controls'));\n      openSearchToggle.setAttribute('aria-expanded', 'false');\n      if (popover) popover.hidden = true;\n      openSearchToggle.focus();\n    }\n    event.stopPropagation();\n    return;\n  }\n\n  const searchToggle = event.target.closest('[data-search-toggle]');\n  if (searchToggle) {\n    const popover = document.getElementById(searchToggle.getAttribute('aria-controls'));\n    const expanded = searchToggle.getAttribute('aria-expanded') === 'true';\n    searchToggle.setAttribute('aria-expanded', String(!expanded));\n    if (popover) {\n      popover.hidden = expanded;\n      if (!expanded) {\n        const input = popover.querySelector('input[type=\"search\"]');\n        if (input) setTimeout(() => input.focus(), 30);\n      }\n    }\n    event.stopPropagation();\n    return;\n  }\n\n  const openSearchToggle = document.querySelector('[data-search-toggle][aria-expanded=\"true\"]');\n  if (openSearchToggle && !event.target.closest('.header-search')) {\n    const popover = document.getElementById(openSearchToggle.getAttribute('aria-controls'));\n    openSearchToggle.setAttribute('aria-expanded', 'false');\n    if (popover) popover.hidden = true;\n  }\n\n  const accountClose = event.target.closest('[data-account-close]');\n  if (accountClose) {\n    const openAccountToggle = document.querySelector('[data-account-toggle][aria-expanded=\"true\"]');\n    if (openAccountToggle) {\n      const popover = document.getElementById(openAccountToggle.getAttribute('aria-controls'));\n      openAccountToggle.setAttribute('aria-expanded', 'false');\n      if (popover) popover.hidden = true;\n      openAccountToggle.focus();\n    }\n    event.stopPropagation();\n    return;\n  }\n\n  const accountToggle = event.target.closest('[data-account-toggle]');\n  if (accountToggle) {\n    const popover = document.getElementById(accountToggle.getAttribute('aria-controls'));\n    const expanded = accountToggle.getAttribute('aria-expanded') === 'true';\n    accountToggle.setAttribute('aria-expanded', String(!expanded));\n    if (popover) popover.hidden = expanded;\n    event.stopPropagation();\n    return;\n  }\n\n  const openAccountToggle = document.querySelector('[data-account-toggle][aria-expanded=\"true\"]');\n  if (openAccountToggle && !event.target.closest('.header-account')) {\n    const popover = document.getElementById(openAccountToggle.getAttribute('aria-controls'));\n    openAccountToggle.setAttribute('aria-expanded', 'false');\n    if (popover) popover.hidden = true;\n  }\n\n  const toggle = event.target.closest('[data-menu-toggle]');\n  if (toggle) {\n    const menu = document.getElementById(toggle.getAttribute('aria-controls'));\n    const expanded = toggle.getAttribute('aria-expanded') === 'true';\n    toggle.setAttribute('aria-expanded', String(!expanded));\n    menu.hidden = expanded;\n  }\n\n  const galleryPrev = event.target.closest('[data-gallery-prev]');\n  if (galleryPrev) {\n    navigateProductGallery(galleryPrev, -1);\n    return;\n  }\n\n  const galleryNext = event.target.closest('[data-gallery-next]');\n  if (galleryNext) {\n    navigateProductGallery(galleryNext, 1);\n    return;\n  }\n\n  const galleryThumb = event.target.closest('[data-gallery-thumb]');\n  if (galleryThumb) {\n    const gallery = galleryThumb.closest('.product__gallery');\n    setActiveGalleryThumb(gallery, galleryThumb);\n  }\n\n  const selector = event.target.closest('[data-variant-id]');\n  if (selector) {\n    const form = selector.closest('form');\n    const input = form && form.querySelector('[name=\"id\"]');\n    const variantId = selector.dataset.variantId;\n    if (input) input.value = variantId;\n    selector.parentElement.querySelectorAll('[data-variant-id]').forEach((button) => button.setAttribute('aria-pressed', String(button === selector)));\n    const firstDuoSelect = selector.closest('[data-product-root]') && selector.closest('[data-product-root]').querySelector('[data-duo-select][data-duo-position=\"1\"]');\n    if (firstDuoSelect) firstDuoSelect.value = variantId;\n    updateProductGallery(selector.closest('[data-product-root]') || document, getGalleryItemsFromOption(selector));\n    syncProductVariant(selector.closest('[data-product-root]') || document, variantId);\n  }\n\n  const offer = event.target.closest('[data-product-offer]');\n  if (offer) {\n    const root = offer.closest('[data-product-root]') || document;\n    root.querySelectorAll('[data-product-offer]').forEach((button) => {\n      const selected = button === offer;\n      button.classList.toggle('is-selected', selected);\n      button.setAttribute('aria-pressed', String(selected));\n    });\n    updateDuoMode(root);\n  }\n});\n\ndocument.addEventListener('keydown', (event) => {\n  const openLightbox = document.querySelector('[data-gallery-lightbox]:not([hidden])');\n  if (openLightbox && (event.key === 'ArrowLeft' || event.key === 'ArrowRight')) {\n    event.preventDefault();\n    navigateGalleryLightbox(event.key === 'ArrowLeft' ? -1 : 1);\n    return;\n  }\n\n  if (event.key !== 'Escape') return;\n\n  if (document.querySelector('[data-gallery-lightbox]:not([hidden])')) {\n    closeProductGalleryLightbox();\n    return;\n  }\n\n  const openAccountToggle = document.querySelector('[data-account-toggle][aria-expanded=\"true\"]');\n  if (openAccountToggle) {\n    const popover = document.getElementById(openAccountToggle.getAttribute('aria-controls'));\n    openAccountToggle.setAttribute('aria-expanded', 'false');\n    if (popover) popover.hidden = true;\n    openAccountToggle.focus();\n  }\n\n  const openSearchToggle = document.querySelector('[data-search-toggle][aria-expanded=\"true\"]');\n  if (openSearchToggle) {\n    const searchPopover = document.getElementById(openSearchToggle.getAttribute('aria-controls'));\n    openSearchToggle.setAttribute('aria-expanded', 'false');\n    if (searchPopover) searchPopover.hidden = true;\n    openSearchToggle.focus();\n  }\n});\n\ndocument.addEventListener('change', (event) => {\n  const select = event.target.closest('select[name=\"id\"]');\n  if (select) {\n    updateProductGallery(select.closest('[data-product-root]') || document, getGalleryItemsFromOption(select.options[select.selectedIndex]));\n    syncProductVariant(select.closest('[data-product-root]') || document, select.value);\n  }\n\n  const duoSelect = event.target.closest('[data-duo-select]');\n  if (duoSelect) {\n    const root = duoSelect.closest('[data-product-root]') || document;\n    const isFirstDuoSelect = duoSelect.dataset.duoPosition === '1';\n    if (isFirstDuoSelect) {\n      root.querySelectorAll('[data-variant-id]').forEach((button) => button.setAttribute('aria-pressed', String(button.dataset.variantId === duoSelect.value)));\n      updateProductGallery(root, getGalleryItemsFromOption(duoSelect.options[duoSelect.selectedIndex]));\n    }\n    syncDuoSwatches(duoSelect);\n    syncDuoNativeVariant(root);\n    updateDuoVisual(root, duoSelect);\n  }\n});\n\ndocument.addEventListener('click', (event) => {\n  const duoSwatch = event.target.closest('[data-duo-generated-swatch]');\n  if (!duoSwatch) return;\n\n  const picker = duoSwatch.closest('[data-duo-choice]');\n  const select = picker && picker.querySelector('[data-duo-select]');\n  if (!select) return;\n\n  select.value = duoSwatch.dataset.value;\n  select.dispatchEvent(new Event('change', { bubbles: true }));\n});\n\ndocument.addEventListener('submit', (event) => {\n  const form = event.target.closest('.product-form--offer');\n  if (!form) return;\n\n  const drawer = window.ToutvaCartDrawer;\n  if (!drawer || typeof drawer.addItems !== 'function') return;\n\n  const root = form.closest('[data-product-root]') || document;\n  const variantInput = form.querySelector('[name=\"id\"]');\n  const quantityInput = form.querySelector('[name=\"quantity\"]');\n  const variantId = Number(variantInput && variantInput.value);\n  const quantity = Math.max(1, Number(quantityInput && quantityInput.value) || 1);\n  const button = form.querySelector('[data-add-to-cart]');\n  if (!variantId) return;\n\n  event.preventDefault();\n  setProductFormError(root, '');\n  const originalLabel = button && button.textContent;\n  drawer.addItems([{ id: variantId, quantity }], { button, originalLabel, loadingLabel: 'Ajout...' })\n    .catch((error) => {\n      const message = error && (error.description || error.message) ? (error.description || error.message) : 'Impossible d\u2019ajouter ce produit au panier pour le moment.';\n      setProductFormError(root, message);\n    });\n});\n\nfunction initArticleTables() {\n  document.querySelectorAll('.article-page .prose-section__content table').forEach((table, tableIndex) => {\n    if (table.dataset.responsiveReady === 'true') return;\n\n    const headers = Array.from(table.querySelectorAll('thead th')).map((header) => header.textContent.trim());\n    table.querySelectorAll('tbody tr').forEach((row) => {\n      Array.from(row.cells).forEach((cell, cellIndex) => {\n        if (headers[cellIndex]) cell.dataset.label = headers[cellIndex];\n      });\n    });\n\n    table.classList.add('article-table', 'article-table--enhanced');\n    table.dataset.responsiveReady = 'true';\n\n    let wrapper = table.parentElement;\n    if (!wrapper || !wrapper.classList.contains('table-wrap')) {\n      wrapper = document.createElement('div');\n      wrapper.className = 'table-wrap';\n      table.parentNode.insertBefore(wrapper, table);\n      wrapper.appendChild(table);\n    }\n\n    const caption = table.querySelector('caption');\n    wrapper.setAttribute('role', 'region');\n    wrapper.setAttribute('aria-label', caption && caption.textContent.trim()\n      ? caption.textContent.trim()\n      : `Tableau comparatif ${tableIndex + 1}`);\n  });\n}\n\nenhanceDuoPickers();\ndocument.querySelectorAll('[data-product-root]').forEach((root) => {\n  updateDuoMode(root);\n  updateProductSelectionPreview(root);\n  updateStickyProductSummary(root);\n});\ninitProductGallerySwipe();\ninitProductStickyBars();\ninitCartDrawer();\nrestoreNewsletterSubmissionPosition();\ninitPromoPopup();\ninitPromoProductCollisionAvoidance();\ninitProductStepShowcases();\ninitProductStepVideos();\ninitUseCasesCarousels();\ninitKlaviyoNewsletterTracking();\ninitArticleTables();\n\nif (newsletterSubmission) {\n  try {\n    window.sessionStorage.removeItem(NEWSLETTER_SUBMISSION_KEY);\n  } catch (error) {\n    // Non-critical: private browsing can block sessionStorage.\n  }\n}\n"],
  "mappings": "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",
  "names": ["openSearchToggle", "openAccountToggle"]
}
