{
  "version": 3,
  "sources": ["/cdn/shop/t/2/assets/cg-pdp.js?nc=1792104575"],
  "sourcesContent": ["// Sections cg-pdp-* de la fiche produit.\n// 1. [data-cg-reveal] re\u00E7oit .is-visible quand il entre \u00E0 l'\u00E9cran (trac\u00E9 du sch\u00E9ma d'acidit\u00E9).\n// 2. [data-cg-to-buy] remonte au bloc d'achat (section product-information) au lieu de suivre l'ancre.\n// 3. [data-cg-count] dans un [data-cg-reveal] compte de 0 \u00E0 sa valeur \u00E0 l'apparition (chiffres du probl\u00E8me).\n// 4. Sch\u00E9ma [data-cg-ph] (section solution) : \u00AB sans \u00BB puis \u00AB avec \u00BB \u00E0 l'apparition, boutons [data-cg-ph-set]\n//    pour rejouer, survol d'une \u00E9tape [data-cg-ph-step] = pastille du sch\u00E9ma mise en avant.\n// 5. Sliders [data-cg-slider] : fl\u00E8ches [data-cg-slide=\"-1|1\"] (une carte \u00E0 la fois, gris\u00E9es aux bouts),\n//    boutons [data-cg-more] qui ouvrent le d\u00E9tail de leur carte [data-cg-card].\n// 6. Frises [data-cg-progress] : --cg-progress (0 \u00E0 1) suit le d\u00E9filement et les \u00E9tapes [data-cg-step]\n//    pass\u00E9es sous 70 % de la hauteur de l'\u00E9cran (80 % sur mobile) re\u00E7oivent .is-reached (la section re\u00E7oit .is-ready).\n\nif (!window.cgPdpReady) {\n  window.cgPdpReady = true;\n\n  const reduceMotion = () => window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n  const countUp = (root) => {\n    root.querySelectorAll('[data-cg-count]').forEach((el) => {\n      const end = parseInt(el.dataset.cgCount, 10);\n      if (!end) return;\n      const start = performance.now();\n      const step = (now) => {\n        const t = Math.min((now - start) / 1400, 1);\n        el.textContent = String(Math.round(end * (1 - Math.pow(1 - t, 3))));\n        if (t < 1) requestAnimationFrame(step);\n      };\n      requestAnimationFrame(step);\n    });\n  };\n\n  const setPh = (el, state) => {\n    el.dataset.state = state;\n    el.querySelectorAll('[data-cg-ph-set]').forEach((btn) => {\n      btn.setAttribute('aria-pressed', String(btn.dataset.cgPhSet === state));\n    });\n  };\n\n  const playPh = (el) => {\n    if (!el.matches('[data-cg-ph]') || el.dataset.touched) return;\n    setPh(el, 'sans');\n    setTimeout(() => {\n      if (!el.dataset.touched) setPh(el, 'avec');\n    }, 2300);\n  };\n\n  const reveal = (root = document) => {\n    const items = root.querySelectorAll('[data-cg-reveal]:not(.is-visible)');\n    if (!items.length) return;\n    if (!('IntersectionObserver' in window)) {\n      items.forEach((el) => el.classList.add('is-visible'));\n      return;\n    }\n    const animate = !reduceMotion();\n    if (animate) {\n      items.forEach((el) => {\n        el.querySelectorAll('[data-cg-count]').forEach((n) => (n.textContent = '0'));\n        if (el.matches('[data-cg-ph]')) setPh(el, 'idle');\n      });\n    }\n    const io = new IntersectionObserver(\n      (entries) => {\n        entries.forEach((entry) => {\n          if (!entry.isIntersecting) return;\n          entry.target.classList.add('is-visible');\n          if (animate) {\n            countUp(entry.target);\n            playPh(entry.target);\n          }\n          io.unobserve(entry.target);\n        });\n      },\n      { threshold: 0.35 }\n    );\n    items.forEach((el) => io.observe(el));\n  };\n\n  const syncSlider = (slider) => {\n    const track = slider.querySelector('[data-cg-slider-track]');\n    if (!track) return;\n    const max = track.scrollWidth - track.clientWidth - 2;\n    slider.querySelectorAll('[data-cg-slide]').forEach((btn) => {\n      btn.disabled = btn.dataset.cgSlide === '-1' ? track.scrollLeft <= 2 : track.scrollLeft >= max;\n    });\n  };\n\n  const initSliders = (root = document) => {\n    root.querySelectorAll('[data-cg-slider]').forEach((slider) => {\n      const track = slider.querySelector('[data-cg-slider-track]');\n      if (!track || track.dataset.cgBound) return;\n      track.dataset.cgBound = '1';\n      track.addEventListener('scroll', () => syncSlider(slider), { passive: true });\n      window.addEventListener('resize', () => syncSlider(slider), { passive: true });\n      syncSlider(slider);\n    });\n  };\n\n  document.addEventListener('click', (event) => {\n    const slideBtn = event.target.closest('[data-cg-slide]');\n    if (slideBtn) {\n      const track = slideBtn.closest('[data-cg-slider]')?.querySelector('[data-cg-slider-track]');\n      const card = track?.firstElementChild;\n      if (!card) return;\n      const step = card.offsetWidth + parseFloat(getComputedStyle(track).columnGap || '0');\n      track.scrollBy({ left: Number(slideBtn.dataset.cgSlide) * step, behavior: reduceMotion() ? 'auto' : 'smooth' });\n      return;\n    }\n    const moreBtn = event.target.closest('[data-cg-more]');\n    if (moreBtn) {\n      const open = moreBtn.closest('[data-cg-card]').classList.toggle('is-open');\n      moreBtn.setAttribute('aria-expanded', String(open));\n      return;\n    }\n    const phBtn = event.target.closest('[data-cg-ph-set]');\n    if (phBtn) {\n      const chart = phBtn.closest('[data-cg-ph]');\n      chart.dataset.touched = '1';\n      setPh(chart, phBtn.dataset.cgPhSet);\n      return;\n    }\n    const link = event.target.closest('[data-cg-to-buy]');\n    if (!link) return;\n    const target = document.querySelector('.product-information');\n    if (!target) return;\n    event.preventDefault();\n    const reduce = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n    target.scrollIntoView({ behavior: reduce ? 'auto' : 'smooth', block: 'start' });\n  });\n\n  const focusStep = (event, on) => {\n    const step = event.target.closest('[data-cg-ph-step]');\n    if (!step || (!on && step.contains(event.relatedTarget))) return;\n    const chart = step.closest('.cg-pdp')?.querySelector('[data-cg-ph]');\n    if (!chart) return;\n    if (on) chart.dataset.focus = step.dataset.cgPhStep;\n    else delete chart.dataset.focus;\n  };\n  document.addEventListener('mouseover', (event) => focusStep(event, true));\n  document.addEventListener('mouseout', (event) => focusStep(event, false));\n\n  let progressTick = false;\n  const updateProgress = () => {\n    progressTick = false;\n    const mark = window.innerHeight * (window.matchMedia('(max-width: 749px)').matches ? 0.8 : 0.7);\n    document.querySelectorAll('[data-cg-progress]').forEach((el) => {\n      const box = el.getBoundingClientRect();\n      if (box.bottom < -200 || box.top > window.innerHeight + 200) return;\n      el.style.setProperty('--cg-progress', Math.min(Math.max((mark - box.top) / box.height, 0), 1).toFixed(3));\n      el.querySelectorAll('[data-cg-step]').forEach((step) => {\n        step.classList.toggle('is-reached', box.top + step.offsetTop + 16 <= mark);\n      });\n    });\n  };\n  const requestProgress = () => {\n    if (progressTick) return;\n    progressTick = true;\n    requestAnimationFrame(updateProgress);\n  };\n  const initProgress = (root = document) => {\n    root.querySelectorAll('[data-cg-progress]').forEach((el) => {\n      el.closest('.cg-pdp')?.classList.add('is-ready');\n      el.style.setProperty('--cg-progress', '0');\n    });\n    requestProgress();\n  };\n  window.addEventListener('scroll', requestProgress, { passive: true });\n  window.addEventListener('resize', requestProgress, { passive: true });\n\n  reveal();\n  initSliders();\n  initProgress();\n  document.addEventListener('shopify:section:load', (event) => {\n    reveal(event.target);\n    initSliders(event.target);\n    initProgress(event.target);\n  });\n}\n"],
  "mappings": "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",
  "names": []
}
