{
  "version": 3,
  "sources": ["/cdn/shop/t/19/assets/royal-pop-product-gallery.js?rpaxis=20260801b"],
  "sourcesContent": ["(() => {\n  const MOBILE_MQ = '(max-width: 749px)';\n\n  /* Portal le chip sur body en mobile pour que position:fixed reste viewport-bound\n     (\u00E9vite les anc\u00EAtres transform/filter/overflow qui le font scroller comme absolute). */\n  const initChipPin = (root) => {\n    if (root.dataset.layout === 'split') return;\n    const chip = root.querySelector('.royal-pop-product-media__chip');\n    if (!chip || chip.dataset.rpChipPinned === '1') return;\n    chip.dataset.rpChipPinned = '1';\n\n    const placeholder = document.createComment('rp-chip-home');\n    let portaled = false;\n\n    const placeBack = () => {\n      if (!portaled) return;\n      if (placeholder.parentNode) {\n        placeholder.parentNode.insertBefore(chip, placeholder);\n        placeholder.remove();\n      }\n      portaled = false;\n    };\n\n    const portalOut = () => {\n      if (portaled || !chip.parentNode) return;\n      chip.parentNode.insertBefore(placeholder, chip);\n      document.body.appendChild(chip);\n      portaled = true;\n    };\n\n    const sync = () => {\n      if (window.matchMedia(MOBILE_MQ).matches) {\n        portalOut();\n      } else {\n        placeBack();\n      }\n    };\n\n    sync();\n    window.matchMedia(MOBILE_MQ).addEventListener('change', sync);\n  };\n\n  const clamp = (v, min, max) => Math.max(min, Math.min(max, v));\n\n  /** Positive modulo, keeps wrap-around indices in [0, n). */\n  const wrapMod = (v, n) => ((v % n) + n) % n;\n\n  const initGallery = (root) => {\n    if (!root || root.dataset.royalPopInit === 'true') return;\n    root.dataset.royalPopInit = 'true';\n\n    initChipPin(root);\n\n    const carousel = root.querySelector('[data-royal-pop-carousel]');\n    if (!carousel) return;\n\n    const isSplit = root.dataset.layout === 'split';\n    const slides = [...carousel.querySelectorAll('[data-royal-pop-slide]')];\n    const prevBtn = carousel.querySelector('[data-royal-pop-prev]');\n    const nextBtn = carousel.querySelector('[data-royal-pop-next]');\n    const thumbs = [...carousel.querySelectorAll('[data-royal-pop-thumb]')];\n    const viewport = carousel.querySelector('[data-royal-pop-viewport]');\n    const rail = carousel.querySelector('[data-royal-pop-rail]');\n    const railFill = carousel.querySelector('[data-royal-pop-rail-fill]');\n    const railSegs = [...carousel.querySelectorAll('[data-royal-pop-rail-seg]')];\n    const statusEl = carousel.querySelector('[data-royal-pop-rail-status]');\n    const hintEl = carousel.querySelector('[data-royal-pop-scrub-hint]');\n    if (!slides.length) return;\n    const slideCount = slides.length;\n    const wrapIndex = (i) => wrapMod(Math.round(i), slideCount);\n\n    /** Shortest signed delta on the circular slide ring (for smooth wrap settles). */\n    const shortestDelta = (from, to) => {\n      const fromNorm = wrapMod(from, slideCount);\n      let delta = wrapMod(to, slideCount) - fromNorm;\n      if (delta > slideCount / 2) delta -= slideCount;\n      if (delta < -slideCount / 2) delta += slideCount;\n      return delta;\n    };\n\n    const atmosphere = root.querySelector('.royal-pop-product-media__atmosphere');\n    const viewCapsule = carousel.querySelector('.royal-pop-product-media__view-capsule');\n    const viewGel = carousel.querySelector('[data-royal-pop-view-gel]');\n    let gelReady = false;\n    let lastGelIndex = -1;\n\n    const reduceMotion = () =>\n      window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n    const moveViewGel = (activeIndex, instant) => {\n      if (!viewGel || !viewCapsule || !railSegs.length) return;\n      const btn = railSegs[wrapMod(Math.round(activeIndex), railSegs.length)];\n      if (!btn) return;\n      const trackRect = viewCapsule.getBoundingClientRect();\n      const btnRect = btn.getBoundingClientRect();\n      const x = btnRect.left - trackRect.left;\n      const w = btnRect.width;\n      if (instant || !gelReady || reduceMotion()) {\n        viewGel.classList.add('is-instant');\n      } else {\n        viewGel.classList.remove('is-instant');\n      }\n      viewGel.style.width = `${w}px`;\n      viewGel.style.transform = `translate3d(${x}px, 0, 0)`;\n      if (instant || !gelReady) {\n        void viewGel.offsetWidth;\n        viewGel.classList.remove('is-instant');\n        gelReady = true;\n      }\n      lastGelIndex = wrapMod(Math.round(activeIndex), railSegs.length);\n    };\n\n    const syncAmbientView = (activeIndex) => {\n      const view = String(activeIndex);\n      root.setAttribute('data-view', view);\n      if (atmosphere) atmosphere.setAttribute('data-view', view);\n      const page = document.querySelector('.royal-pop-product-page--split');\n      if (page) page.setAttribute('data-view', view);\n    };\n\n    const syncViewButtons = (activeIndex, instant) => {\n      railSegs.forEach((seg, i) => {\n        const active = i === activeIndex;\n        seg.classList.toggle('is-active', active);\n        seg.setAttribute('aria-selected', active ? 'true' : 'false');\n        seg.tabIndex = active ? 0 : -1;\n      });\n      if (rail) rail.setAttribute('data-active', String(activeIndex));\n      if (isSplit) syncAmbientView(activeIndex);\n      if (instant || activeIndex !== lastGelIndex) moveViewGel(activeIndex, instant);\n    };\n\n    let index = slides.findIndex((slide) => slide.classList.contains('is-active'));\n    if (index < 0) index = 0;\n    let animLock = false;\n    let progress = index;\n\n    const viewLabels = (rail?.dataset.labels || 'Face,Profil,Bracelet')\n      .split(',')\n      .map((s) => s.trim())\n      .filter(Boolean);\n\n    const clearScrubStyles = () => {\n      slides.forEach((slide) => {\n        slide.style.opacity = '';\n        slide.style.visibility = '';\n        slide.style.transform = '';\n        slide.style.zIndex = '';\n        slide.style.transition = '';\n        slide.style.pointerEvents = '';\n      });\n      if (viewport) {\n        viewport.style.removeProperty('--rp-scrub-t');\n        viewport.classList.remove('is-scrubbing');\n      }\n    };\n\n    const applyScrubVisual = (p, { settling = false } = {}) => {\n      progress = p;\n      /* Circular scrub: progress may leave [0, n) while wrapping last\u2194first. */\n      const frac = wrapMod(progress, slideCount);\n      const lo = Math.floor(frac) % slideCount;\n      const hi = (lo + 1) % slideCount;\n      const t = frac - Math.floor(frac);\n      const motionOff = reduceMotion();\n      const nearest = wrapIndex(frac);\n\n      slides.forEach((slide, i) => {\n        let opacity = 0;\n        let tx = 0;\n        if (t < 0.001) {\n          if (i === lo) opacity = 1;\n        } else if (i === lo) {\n          opacity = 1 - t;\n          tx = motionOff ? 0 : t * -14;\n        } else if (i === hi) {\n          opacity = t;\n          tx = motionOff ? 0 : (1 - t) * 14;\n        }\n\n        const visible = opacity > 0.02;\n        slide.style.opacity = String(opacity);\n        slide.style.visibility = visible ? 'visible' : 'hidden';\n        slide.style.pointerEvents = 'none';\n        slide.style.zIndex = String(opacity >= 0.5 ? 2 : 1);\n        const sc = motionOff ? 1 : 0.985 + opacity * 0.015;\n        slide.style.transform = tx\n          ? `translate3d(${tx}px, 0, 0) scale(${sc})`\n          : opacity < 0.999 && !motionOff\n            ? `scale(${sc})`\n            : 'none';\n        slide.style.transition = settling && !motionOff\n          ? 'opacity 0.38s cubic-bezier(0.22, 1, 0.36, 1), transform 0.38s cubic-bezier(0.22, 1, 0.36, 1)'\n          : 'none';\n        slide.classList.toggle('is-active', nearest === i);\n      });\n\n      if (railFill) {\n        railFill.style.setProperty('--rp-rail-index', String(frac));\n        railFill.style.setProperty('--rp-rail-count', String(slideCount));\n        railFill.style.transition = settling && !motionOff\n          ? 'transform 0.38s cubic-bezier(0.22, 1.15, 0.36, 1)'\n          : 'none';\n      }\n      syncViewButtons(nearest, !settling && !gelReady);\n      if (statusEl) {\n        statusEl.textContent = viewLabels[nearest] || `Vue ${nearest + 1}`;\n      }\n      if (viewport) {\n        viewport.style.setProperty('--rp-scrub-t', String(frac));\n      }\n    };\n\n    const update = (opts = {}) => {\n      const dir = opts.dir || 0;\n      clearScrubStyles();\n      progress = index;\n\n      slides.forEach((slide, i) => {\n        const active = i === index;\n        slide.classList.toggle('is-active', active);\n        if (isSplit && !reduceMotion() && active && dir !== 0) {\n          slide.classList.remove('is-enter-left', 'is-enter-right');\n          void slide.offsetWidth;\n          slide.classList.add(dir < 0 ? 'is-enter-left' : 'is-enter-right');\n        }\n      });\n      thumbs.forEach((thumb, i) => {\n        thumb.classList.toggle('is-active', i === index);\n        thumb.setAttribute('aria-current', i === index ? 'true' : 'false');\n      });\n      syncViewButtons(index, !gelReady);\n      if (railFill) {\n        railFill.style.transition = '';\n        railFill.style.setProperty('--rp-rail-index', String(index));\n        railFill.style.setProperty('--rp-rail-count', String(slides.length));\n      }\n      if (statusEl) {\n        statusEl.textContent = viewLabels[index] || `Vue ${index + 1}`;\n      }\n      /* Infinite loop: prev/next stay enabled at both ends. */\n      if (prevBtn) prevBtn.disabled = false;\n      if (nextBtn) nextBtn.disabled = false;\n      if (viewport) {\n        viewport.setAttribute('aria-roledescription', isSplit ? 'visionneuse 360' : 'carousel');\n        viewport.setAttribute(\n          'aria-label',\n          isSplit\n            ? `${viewLabels[index] || `Vue ${index + 1}`}, glisser pour tourner (${index + 1} sur ${slideCount})`\n            : `Image ${index + 1} sur ${slideCount}`\n        );\n      }\n    };\n\n    const goTo = (next, opts = {}) => {\n      if (!slideCount || animLock) return;\n      const raw = next;\n      const target = wrapMod(Math.round(raw), slideCount);\n      if (target === index) return;\n\n      let dir = opts.dir;\n      if (dir == null) {\n        if (raw === index + 1 || (index === slideCount - 1 && raw === slideCount)) dir = 1;\n        else if (raw === index - 1 || (index === 0 && raw === -1)) dir = -1;\n        else {\n          const forward = wrapMod(target - index, slideCount);\n          const backward = wrapMod(index - target, slideCount);\n          dir = forward <= backward ? 1 : -1;\n        }\n      }\n\n      /* Adjacent step (incl. wrap): scrub along \u00B11 so last\u2192first stays smooth. */\n      const isAdjacentStep =\n        raw === index + 1 ||\n        raw === index - 1 ||\n        (index === slideCount - 1 && raw === slideCount) ||\n        (index === 0 && raw === -1);\n\n      if (isSplit && !reduceMotion() && isAdjacentStep) {\n        const animEnd = index + dir;\n        animLock = true;\n        applyScrubVisual(animEnd, { settling: true });\n        window.setTimeout(() => {\n          index = target;\n          progress = target;\n          update({ dir });\n          animLock = false;\n        }, 360);\n        return;\n      }\n\n      index = target;\n      progress = target;\n      update({ dir });\n      if (isSplit && !reduceMotion()) {\n        animLock = true;\n        window.setTimeout(() => {\n          animLock = false;\n        }, 320);\n      }\n    };\n\n    const HINT_KEY = 'rp-topaze-scrub-hint-seen';\n\n    const dismissHint = () => {\n      if (!hintEl || hintEl.classList.contains('is-gone')) return;\n      hintEl.classList.add('is-gone');\n      try {\n        window.localStorage.setItem(HINT_KEY, '1');\n      } catch (_) {}\n    };\n\n    if (isSplit && hintEl) {\n      let seen = false;\n      try {\n        seen = window.localStorage.getItem(HINT_KEY) === '1';\n      } catch (_) {}\n      if (seen) {\n        hintEl.classList.add('is-gone');\n      } else {\n        window.setTimeout(() => {\n          if (!hintEl.classList.contains('is-gone')) dismissHint();\n        }, 6500);\n      }\n    }\n\n    prevBtn?.addEventListener('click', (event) => {\n      event.preventDefault();\n      event.stopPropagation();\n      goTo(index - 1);\n    });\n\n    nextBtn?.addEventListener('click', (event) => {\n      event.preventDefault();\n      event.stopPropagation();\n      goTo(index + 1);\n    });\n\n    thumbs.forEach((thumb) => {\n      thumb.addEventListener('click', (event) => {\n        event.preventDefault();\n        event.stopPropagation();\n        const target = Number(thumb.getAttribute('data-royal-pop-thumb'));\n        if (!Number.isNaN(target)) goTo(target);\n      });\n    });\n\n    railSegs.forEach((seg) => {\n      /* Exclude POV tabs from any ancestor drag/scrub capture (desktop mouse). */\n      seg.addEventListener('pointerdown', (event) => {\n        event.stopPropagation();\n      });\n      seg.addEventListener('click', (event) => {\n        event.preventDefault();\n        event.stopPropagation();\n        const target = Number(seg.getAttribute('data-royal-pop-rail-seg'));\n        if (Number.isNaN(target)) return;\n        animLock = false;\n        dismissHint();\n        goTo(target);\n      });\n\n      seg.addEventListener('keydown', (event) => {\n        if (event.key !== 'ArrowLeft' && event.key !== 'ArrowRight') return;\n        event.preventDefault();\n        const dir = event.key === 'ArrowRight' ? 1 : -1;\n        const next = index + dir;\n        animLock = false;\n        dismissHint();\n        goTo(next);\n        railSegs[wrapMod(next, slideCount)]?.focus();\n      });\n    });\n\n    /* Split: continuous 360\u00B0 scrub with inertia + physical snap. */\n    if (viewport) {\n      let startX = 0;\n      let startY = 0;\n      let dragging = false;\n      let axisLocked = null;\n      let pointerId = null;\n      let startProgress = 0;\n      let settleTimer = null;\n      let lastMoveX = 0;\n      let lastMoveT = 0;\n      let velocityX = 0;\n\n      const scrubRangePx = () => {\n        const w = viewport.clientWidth || 320;\n        /* Full sweep across all views \u2248 half viewport width per step */\n        return Math.max(100, w * 0.48);\n      };\n\n      const onPointerDown = (e) => {\n        if (e.button != null && e.button !== 0) return;\n        if (\n          e.target.closest(\n            'button, a, [data-royal-pop-thumb], [data-royal-pop-rail-seg], [data-royal-pop-rail], .royal-pop-product-media__rail, .royal-pop-product-media__view-tabs, .royal-pop-product-media__view-capsule, .royal-pop-product-media__view-btn'\n          )\n        ) {\n          return;\n        }\n        if (settleTimer) {\n          window.clearTimeout(settleTimer);\n          settleTimer = null;\n        }\n        startX = e.clientX;\n        startY = e.clientY;\n        lastMoveX = e.clientX;\n        lastMoveT = performance.now();\n        velocityX = 0;\n        dragging = true;\n        axisLocked = null;\n        pointerId = e.pointerId;\n        startProgress = isSplit ? progress : index;\n        /* Defer capture + touch-action:none until axis locks to horizontal */\n      };\n\n      const onPointerMove = (e) => {\n        if (!dragging) return;\n        const dx = e.clientX - startX;\n        const dy = e.clientY - startY;\n        const now = performance.now();\n        const dt = Math.max(1, now - lastMoveT);\n        const instV = (e.clientX - lastMoveX) / dt;\n        velocityX = velocityX * 0.65 + instV * 0.35;\n        lastMoveX = e.clientX;\n        lastMoveT = now;\n\n        if (axisLocked == null && (Math.abs(dx) > 8 || Math.abs(dy) > 8)) {\n          axisLocked = Math.abs(dx) > Math.abs(dy) * 1.05 ? 'x' : 'y';\n          if (axisLocked === 'x') {\n            viewport.classList.add('is-dragging');\n            if (isSplit) {\n              viewport.classList.add('is-scrubbing');\n              animLock = false;\n            }\n            viewport.style.touchAction = 'none';\n            try {\n              viewport.setPointerCapture(e.pointerId);\n            } catch (_) {}\n            dismissHint();\n          } else {\n            /* Vertical: release and let the page scroll */\n            dragging = false;\n            axisLocked = 'y';\n            viewport.classList.remove('is-dragging', 'is-scrubbing');\n            viewport.style.touchAction = '';\n            return;\n          }\n        }\n\n        if (axisLocked === 'x') {\n          if (e.cancelable) e.preventDefault();\n          if (isSplit) {\n            const next = startProgress - dx / scrubRangePx();\n            applyScrubVisual(next);\n          } else {\n            const pull = Math.max(-48, Math.min(48, dx * 0.22));\n            viewport.style.setProperty('--rp-drag-x', `${pull}px`);\n            viewport.style.setProperty('--rp-drag-op', String(1 - Math.min(0.18, Math.abs(dx) / 600)));\n          }\n        }\n      };\n\n      const finishDrag = (e) => {\n        if (!dragging && axisLocked !== 'x') {\n          axisLocked = null;\n          velocityX = 0;\n          viewport.classList.remove('is-dragging', 'is-scrubbing');\n          viewport.style.touchAction = '';\n          return;\n        }\n        if (!dragging) return;\n        dragging = false;\n        viewport.classList.remove('is-dragging', 'is-scrubbing');\n        viewport.style.touchAction = '';\n        viewport.style.removeProperty('--rp-drag-x');\n        viewport.style.removeProperty('--rp-drag-op');\n        try {\n          if (pointerId != null) viewport.releasePointerCapture(pointerId);\n        } catch (_) {}\n        pointerId = null;\n\n        const dx = e.clientX - startX;\n        const dy = e.clientY - startY;\n\n        if (axisLocked === 'y') {\n          if (isSplit) {\n            const target = wrapIndex(progress);\n            const animEnd = progress + shortestDelta(progress, target);\n            applyScrubVisual(animEnd, { settling: true });\n            settleTimer = window.setTimeout(() => {\n              index = target;\n              progress = target;\n              update();\n              settleTimer = null;\n            }, 280);\n          }\n          axisLocked = null;\n          velocityX = 0;\n          return;\n        }\n\n        if (isSplit) {\n          /* Physical snap + infinite wrap: coast, then snap along shortest arc */\n          const flick = velocityX * 180; /* px/ms \u2192 progress boost */\n          const coast = clamp(-flick / scrubRangePx(), -0.85, 0.85);\n          const projected = progress + coast;\n          let rawTarget = Math.round(projected);\n          /* Strong flick past midpoint commits to next view (may wrap) */\n          if (Math.abs(velocityX) > 0.55) {\n            rawTarget = velocityX < 0\n              ? Math.ceil(progress - 0.05)\n              : Math.floor(progress + 0.05);\n          }\n          const target = wrapMod(rawTarget, slideCount);\n          const animEnd = progress + shortestDelta(progress, target);\n          applyScrubVisual(animEnd, { settling: true });\n          settleTimer = window.setTimeout(() => {\n            index = target;\n            progress = target;\n            update();\n            settleTimer = null;\n          }, 360);\n        } else {\n          if (axisLocked === 'x' && Math.abs(dx) >= 42 && Math.abs(dx) >= Math.abs(dy)) {\n            goTo(dx < 0 ? index + 1 : index - 1);\n          }\n        }\n        axisLocked = null;\n        velocityX = 0;\n      };\n\n      viewport.addEventListener('pointerdown', onPointerDown);\n      viewport.addEventListener('pointermove', onPointerMove, { passive: false });\n      viewport.addEventListener('pointerup', finishDrag);\n      viewport.addEventListener('pointercancel', finishDrag);\n\n      // Legacy touch fallback (older iOS), non-split only\n      let touchX = 0;\n      viewport.addEventListener(\n        'touchstart',\n        (e) => {\n          touchX = e.changedTouches[0].screenX;\n        },\n        { passive: true }\n      );\n      viewport.addEventListener(\n        'touchend',\n        (e) => {\n          if (isSplit) return;\n          const delta = e.changedTouches[0].screenX - touchX;\n          if (Math.abs(delta) < 40) return;\n          goTo(delta < 0 ? index + 1 : index - 1);\n        },\n        { passive: true }\n      );\n\n      /* Keyboard a11y */\n      if (!viewport.hasAttribute('tabindex')) viewport.tabIndex = 0;\n      viewport.addEventListener('keydown', (e) => {\n        if (e.key === 'ArrowLeft') {\n          e.preventDefault();\n          dismissHint();\n          goTo(index - 1);\n        } else if (e.key === 'ArrowRight') {\n          e.preventDefault();\n          dismissHint();\n          goTo(index + 1);\n        } else if (e.key === 'Home') {\n          e.preventDefault();\n          dismissHint();\n          goTo(0);\n        } else if (e.key === 'End') {\n          e.preventDefault();\n          dismissHint();\n          goTo(slides.length - 1);\n        }\n      });\n    }\n\n    update();\n    requestAnimationFrame(() => moveViewGel(index, true));\n    if (typeof ResizeObserver !== 'undefined' && viewCapsule) {\n      const gelRo = new ResizeObserver(() => moveViewGel(wrapIndex(progress), true));\n      gelRo.observe(viewCapsule);\n    }\n    window.addEventListener('resize', () => moveViewGel(wrapIndex(progress), true), { passive: true });\n\n    const page = document.querySelector('.royal-pop-product-page');\n    if (page && root.dataset.color) page.setAttribute('data-color', root.dataset.color);\n    if (page) {\n      const styles = getComputedStyle(root);\n      const accent = styles.getPropertyValue('--rp-accent').trim();\n      const accent2 = styles.getPropertyValue('--rp-page-accent-2').trim();\n      const glow = styles.getPropertyValue('--rp-accent-glow').trim();\n      if (accent) {\n        page.style.setProperty('--rp-page-accent', accent);\n        page.style.setProperty('--rp-accent', accent);\n        document.body.style.setProperty('--rp-page-accent', accent);\n      }\n      if (accent2) {\n        page.style.setProperty('--rp-page-accent-2', accent2);\n        document.body.style.setProperty('--rp-page-accent-2', accent2);\n      }\n      if (glow) {\n        page.style.setProperty('--rp-accent-glow', glow);\n      }\n    }\n  };\n\n  const initScrollWash = () => {\n    // Wash g\u00E9r\u00E9 uniquement par royal-pop-conversion.js (initAmbientScroll)\n  };\n\n  const initAll = () => {\n    document.querySelectorAll('[data-royal-pop-gallery-root]').forEach(initGallery);\n    initScrollWash();\n  };\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', initAll);\n  } else {\n    initAll();\n  }\n\n  document.addEventListener('shopify:section:load', initAll);\n})();\n\n/* topaze-gallery-infinite-loop-20260731 */\n"],
  "mappings": "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",
  "names": ["page"]
}
