{
  "version": 3,
  "sources": ["/cdn/shop/t/66/assets/difiney-ugc-carousel.js?cb=20260906-seamless-4"],
  "sourcesContent": ["(() => {\n  if (customElements.get('ugc-review-carousel')) return;\n\n  class DfyUgcCarousel extends HTMLElement {\n    connectedCallback() {\n      if (document.readyState === 'loading') {\n        this.onReady = () => this.initialize();\n        document.addEventListener('DOMContentLoaded', this.onReady, { once: true });\n      } else {\n        this.initialize();\n      }\n    }\n\n    initialize() {\n      if (!this.isConnected) return;\n      if (this.dataset.initialized === 'true') return;\n\n      this.cards = Array.from(this.querySelectorAll('[data-ugc-card]'));\n      if (!this.cards.length) return;\n\n      this.stage = this.querySelector('[data-ugc-stage]');\n      this.dots = Array.from(this.querySelectorAll('[data-ugc-dot]'));\n      this.activeIndex = 0;\n      this.inViewport = false;\n      this.nearViewport = false;\n      this.autoplay = this.dataset.autoplay === 'true';\n      this.loop = this.dataset.loop === 'true';\n      this.reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n      this.currency = this.dataset.currency || window.Shopify?.currency?.active || 'USD';\n      this.locale = this.dataset.locale || document.documentElement.lang || 'en-US';\n      this.productData = this.readJson('[data-ugc-product-json]') || { variants: [] };\n      this.cleanup = [];\n      this.drag = null;\n      this.modalIndex = 0;\n      this.lastFocused = null;\n      // A section move reconnects this element after its modal was portalled\n      // to body. Reuse that detached modal instead of losing expanded playback.\n      this.modal = this.querySelector('[data-ugc-modal]') || this.modal;\n      this.pendingPlayback = null;\n\n      this.bindControls();\n      this.bindVideos();\n      this.bindVariantUpdates();\n      this.bindVisibility();\n      this.bindResponsiveLayout();\n      if (this.modal && this.modal.parentNode !== document.body) document.body.appendChild(this.modal);\n      this.setActive(0, { reset: false, play: false });\n      this.dataset.initialized = 'true';\n    }\n\n    disconnectedCallback() {\n      document.removeEventListener('DOMContentLoaded', this.onReady);\n      this.cleanup?.forEach((callback) => callback());\n      this.observer?.disconnect();\n      this.hydrationObserver?.disconnect();\n      this.pauseAll();\n      this.closeModal(false);\n      this.modal?.remove();\n      delete this.dataset.initialized;\n    }\n\n    readJson(selector) {\n      try {\n        return JSON.parse(this.querySelector(selector)?.textContent || '');\n      } catch (error) {\n        console.error('[DIFINEY UGC] Invalid product data', error);\n        return null;\n      }\n    }\n\n    listen(target, event, handler, options) {\n      target?.addEventListener(event, handler, options);\n      this.cleanup.push(() => target?.removeEventListener(event, handler, options));\n    }\n\n    bindControls() {\n      this.listen(this, 'click', (event) => {\n        if (!this.suppressSwipeClick) return;\n        this.suppressSwipeClick = false;\n        event.preventDefault();\n        event.stopImmediatePropagation();\n      }, true);\n      this.listen(this.querySelector('[data-ugc-prev]'), 'click', () => this.go(-1));\n      this.listen(this.querySelector('[data-ugc-next]'), 'click', () => this.go(1));\n      this.dots.forEach((dot) => this.listen(dot, 'click', () => this.setActive(Number(dot.dataset.index))));\n\n      this.cards.forEach((card, index) => {\n        this.listen(card, 'click', (event) => {\n          if (event.target.closest('button, input, a')) return;\n          if (index !== this.activeIndex) this.setActive(index);\n        });\n      });\n\n      this.listen(this, 'click', (event) => {\n        const mute = event.target.closest('[data-ugc-mute]');\n        if (mute) return this.toggleMute(mute.closest('[data-ugc-card]'));\n\n        const resume = event.target.closest('[data-ugc-resume]');\n        if (resume) return this.playCard(resume.closest('[data-ugc-card]'));\n\n        const expand = event.target.closest('[data-ugc-expand]');\n        if (expand) return this.openModal();\n\n        const add = event.target.closest('[data-ugc-add]');\n        if (add) return this.addToCart(add);\n\n        if (event.target.closest('[data-ugc-close]')) return this.closeModal();\n        if (event.target.closest('[data-ugc-modal-prev]')) return this.changeModal(-1);\n        if (event.target.closest('[data-ugc-modal-next]')) return this.changeModal(1);\n        if (event.target.closest('[data-ugc-modal-mute]')) return this.toggleModalMute();\n        if (event.target.closest('[data-ugc-modal-play]')) return this.toggleModalPlay();\n      });\n\n      this.listen(this.modal, 'click', (event) => {\n        if (event.target.closest('[data-ugc-close]')) return this.closeModal();\n        if (event.target.closest('[data-ugc-modal-prev]')) return this.changeModal(-1);\n        if (event.target.closest('[data-ugc-modal-next]')) return this.changeModal(1);\n        if (event.target.closest('[data-ugc-modal-mute]')) return this.toggleModalMute();\n        if (event.target.closest('[data-ugc-modal-play]')) return this.toggleModalPlay();\n      });\n\n      this.bindRange(this.modal?.querySelector('[data-ugc-modal-progress]'), () => this.modal?.querySelector('[data-ugc-modal-video]'), true);\n      this.bindSwipe(this.stage, (direction) => this.go(direction));\n      this.bindSwipe(this.modal?.querySelector('[data-ugc-modal-card]'), (direction) => this.changeModal(direction));\n\n      this.listen(document, 'keydown', (event) => {\n        const modal = this.modal;\n        if (!modal || modal.hidden) return;\n        if (event.key === 'Escape') {\n          event.preventDefault();\n          this.closeModal();\n        } else if (event.key === 'ArrowLeft' && event.target.type !== 'range') {\n          this.changeModal(-1);\n        } else if (event.key === 'ArrowRight' && event.target.type !== 'range') {\n          this.changeModal(1);\n        } else if (event.key === 'Tab') {\n          this.trapFocus(event, modal);\n        }\n      });\n    }\n\n    bindVideos() {\n      this.cards.forEach((card) => {\n        const video = card.querySelector('[data-ugc-video]');\n        const progress = card.querySelector('[data-ugc-progress]');\n        if (!video) return;\n\n        this.listen(video, 'click', () => {\n          if (card !== this.cards[this.activeIndex]) return;\n          video.paused ? this.playCard(card) : this.pauseCard(card);\n        });\n        this.listen(video, 'keydown', (event) => {\n          if (card !== this.cards[this.activeIndex] || !['Enter', ' '].includes(event.key)) return;\n          event.preventDefault();\n          video.paused ? this.playCard(card) : this.pauseCard(card);\n        });\n        this.listen(video, 'timeupdate', () => this.updateCardTime(card));\n        this.listen(video, 'loadedmetadata', () => this.updateCardTime(card));\n        this.listen(video, 'loadstart', () => card.classList.add('is-buffering'));\n        this.listen(video, 'waiting', () => card.classList.add('is-buffering'));\n        this.listen(video, 'stalled', () => card.classList.add('is-buffering'));\n        this.listen(video, 'canplay', () => {\n          video.dataset.ready = 'true';\n        });\n        this.listen(video, 'playing', () => {\n          video.dataset.ready = 'true';\n          card.dataset.videoStarted = 'true';\n          card.classList.remove('is-buffering');\n          this.markSlidePlayback(card);\n        });\n        this.listen(video, 'play', () => video.setAttribute('aria-label', 'Pause customer review video'));\n        this.listen(video, 'pause', () => video.setAttribute('aria-label', 'Play customer review video'));\n        this.bindRange(progress, () => video, true);\n      });\n\n      const modalVideo = this.modal?.querySelector('[data-ugc-modal-video]');\n      if (modalVideo) {\n        this.listen(modalVideo, 'click', () => this.toggleModalPlay());\n        this.listen(modalVideo, 'keydown', (event) => {\n          if (!['Enter', ' '].includes(event.key)) return;\n          event.preventDefault();\n          this.toggleModalPlay();\n        });\n        this.listen(modalVideo, 'timeupdate', () => this.updateModalTime());\n        this.listen(modalVideo, 'loadedmetadata', () => this.updateModalTime());\n        this.listen(modalVideo, 'play', () => this.setModalPlayState(true));\n        this.listen(modalVideo, 'pause', () => this.setModalPlayState(false));\n      }\n    }\n\n    bindRange(range, getVideo, continuePlaying) {\n      if (!range) return;\n      const seek = () => {\n        const video = getVideo();\n        if (!video || !Number.isFinite(video.duration) || !video.duration) return;\n        video.currentTime = (Number(range.value) / 100) * video.duration;\n      };\n      this.listen(range, 'input', seek);\n      this.listen(range, 'change', () => {\n        seek();\n        if (continuePlaying) getVideo()?.play().catch(() => {});\n      });\n    }\n\n    bindSwipe(element, onSwipe) {\n      if (!element) return;\n      this.listen(element, 'pointerdown', (event) => {\n        if (event.target.closest('button, input, a')) return;\n        this.drag = { id: event.pointerId, x: event.clientX, y: event.clientY, dx: 0, horizontal: false };\n        this.suppressSwipeClick = false;\n      });\n      this.listen(element, 'pointermove', (event) => {\n        if (!this.drag || this.drag.id !== event.pointerId) return;\n        const dx = event.clientX - this.drag.x;\n        const dy = event.clientY - this.drag.y;\n        if (!this.drag.horizontal && Math.abs(dx) > 8) this.drag.horizontal = Math.abs(dx) > Math.abs(dy);\n        if (!this.drag.horizontal) return;\n        element.setPointerCapture?.(event.pointerId);\n        this.drag.dx = dx;\n        event.preventDefault();\n        if (element === this.stage) this.renderPositions(dx);\n      });\n      const finish = (event) => {\n        if (!this.drag || this.drag.id !== event.pointerId) return;\n        const dx = this.drag.dx;\n        const horizontal = this.drag.horizontal;\n        this.drag = null;\n        this.suppressSwipeClick = horizontal;\n        if (element === this.stage) this.renderPositions();\n        if (event.type !== 'pointercancel' && horizontal && Math.abs(dx) > 42) onSwipe(dx < 0 ? 1 : -1);\n      };\n      this.listen(element, 'pointerup', finish);\n      this.listen(element, 'pointercancel', finish);\n    }\n\n    bindVisibility() {\n      this.hydrationObserver = new IntersectionObserver((entries) => {\n        this.nearViewport = Boolean(entries[0]?.isIntersecting);\n        if (this.nearViewport) {\n          this.cards.forEach((card) => this.hydratePoster(card));\n          this.hydrateNearby();\n        }\n      }, { rootMargin: '1000px 0px 1000px 0px', threshold: 0 });\n      this.hydrationObserver.observe(this);\n\n      this.observer = new IntersectionObserver((entries) => {\n        const visible = entries[0]?.isIntersecting && entries[0].intersectionRatio >= 0.12;\n        this.inViewport = Boolean(visible);\n        if (this.inViewport && this.autoplay && !this.isModalOpen()) this.playActive();\n        else this.pauseInlineVideos();\n      }, { rootMargin: '0px', threshold: [0, 0.12, 0.3] });\n      this.observer.observe(this);\n\n      this.listen(document, 'visibilitychange', () => {\n        if (document.hidden) this.pauseAll();\n        else if (this.inViewport && this.autoplay && !this.isModalOpen()) this.playActive();\n      });\n    }\n\n    bindResponsiveLayout() {\n      let frame = 0;\n      const render = () => {\n        window.cancelAnimationFrame(frame);\n        frame = window.requestAnimationFrame(() => this.renderPositions());\n      };\n      this.listen(window, 'resize', render, { passive: true });\n      this.listen(window, 'orientationchange', render, { passive: true });\n      this.cleanup.push(() => window.cancelAnimationFrame(frame));\n    }\n\n    bindVariantUpdates() {\n      const update = (variant) => {\n        if (!variant?.id) return;\n        const fullVariant = this.productData.variants.find((item) => Number(item.id) === Number(variant.id));\n        if (fullVariant) this.updateInheritedCards(fullVariant);\n      };\n\n      this.listen(document, 'difiney:variant-change', (event) => update(event.detail?.variant));\n      this.listen(document, 'variant-change', (event) => update(event.detail?.data?.variant || event.detail?.variant));\n      this.listen(document, 'change', (event) => {\n        const input = event.target.closest?.('form[action*=\"/cart/add\"] input[name=\"id\"]');\n        if (input && !this.contains(input)) update({ id: Number(input.value) });\n      }, true);\n    }\n\n    updateInheritedCards(variant) {\n      this.cards.filter((card) => card.dataset.inheritsPdp === 'true').forEach((card) => this.updateCardVariant(card, variant));\n      if (this.isModalOpen()) this.populateModal();\n    }\n\n    updateCardVariant(card, variant) {\n      if (!variant?.id) return;\n      const available = variant.available !== false;\n      const image = variant.image || variant.featured_image?.src || card.dataset.productImage;\n      card.dataset.variantId = variant.id;\n      card.dataset.price = variant.price ?? card.dataset.price;\n      card.dataset.comparePrice = variant.compareAtPrice ?? variant.compare_at_price ?? 0;\n      card.dataset.available = String(available);\n      if (image) card.dataset.productImage = image;\n\n      const variantTitle = variant.title && variant.title !== 'Default Title' ? variant.title : '';\n      const displayTitle = variantTitle ? `${card.dataset.productTitle} - ${variantTitle}` : card.dataset.productTitle;\n      card.dataset.variantTitle = variantTitle;\n      card.dataset.productDisplayTitle = displayTitle;\n\n      const price = card.querySelector('[data-ugc-product-price]');\n      if (price) price.textContent = this.money(Number(card.dataset.price));\n      const compare = card.querySelector('[data-ugc-product-compare]');\n      const comparePrice = Number(card.dataset.comparePrice || 0);\n      if (compare) {\n        compare.textContent = this.money(comparePrice);\n        compare.classList.toggle('is-hidden', !comparePrice || comparePrice <= Number(card.dataset.price));\n      }\n      const title = card.querySelector('[data-ugc-product-title]');\n      if (title) title.textContent = displayTitle;\n      const productImage = card.querySelector('.dfy-ugc__product-image');\n      if (productImage && image) productImage.src = image;\n      const add = card.querySelector('[data-ugc-add]');\n      if (add) {\n        add.dataset.variantId = variant.id;\n        add.disabled = !available;\n        add.setAttribute('aria-disabled', String(!available));\n        add.setAttribute('aria-label', `Add ${displayTitle} to cart`);\n      }\n    }\n\n    relativeDistance(index) {\n      let distance = index - this.activeIndex;\n      if (this.loop && this.cards.length > 1) {\n        const half = this.cards.length / 2;\n        if (distance > half) distance -= this.cards.length;\n        if (distance < -half) distance += this.cards.length;\n      }\n      return distance;\n    }\n\n    renderPositions(dragPixels = 0) {\n      const mobile = window.matchMedia('(max-width: 749px)').matches;\n      this.cards.forEach((card, index) => {\n        const distance = this.relativeDistance(index);\n        const abs = Math.abs(distance);\n        const shown = mobile ? abs <= 1 : abs <= 2;\n        let x = 0;\n        let scale = 1;\n        let opacity = 1;\n        let z = 10;\n        if (abs === 1) {\n          x = distance * (mobile ? 86 : 79);\n          scale = .9;\n          opacity = .93;\n          z = 7;\n        } else if (abs === 2) {\n          x = distance * 73;\n          scale = .79;\n          opacity = .76;\n          z = 4;\n        } else if (abs > 2) {\n          x = distance * 60;\n          scale = .75;\n          opacity = 0;\n          z = 1;\n        }\n        card.style.setProperty('--dfy-x', `calc(${x}% + ${dragPixels}px)`);\n        card.style.setProperty('--dfy-scale', scale);\n        card.style.setProperty('--dfy-opacity', shown ? opacity : 0);\n        card.style.setProperty('--dfy-z', z);\n        card.dataset.position = String(distance);\n        card.classList.toggle('is-active', distance === 0);\n        card.setAttribute('aria-current', String(distance === 0));\n        card.setAttribute('aria-hidden', String(!shown));\n        card.inert = !shown;\n      });\n    }\n\n    normalizedIndex(index) {\n      if (this.loop) return (index + this.cards.length) % this.cards.length;\n      return Math.max(0, Math.min(this.cards.length - 1, index));\n    }\n\n    go(direction) { this.setActive(this.activeIndex + direction); }\n\n    setActive(index, options = {}) {\n      const next = this.normalizedIndex(index);\n      const changed = next !== this.activeIndex;\n      const previous = this.activeIndex;\n      const targetCard = this.cards[next];\n\n      // Attach the target source before the visual transition starts. Adjacent\n      // cards are already warm, so this is normally a no-op.\n      if (this.nearViewport) this.hydrateCard(targetCard, 'auto');\n      this.pauseInlineVideos();\n      this.cards.forEach((card) => {\n        const video = card.querySelector('[data-ugc-video]');\n        if (video) video.muted = true;\n        this.updateMuteButton(card);\n      });\n      this.activeIndex = next;\n      if (changed && options.play !== false && this.inViewport && this.autoplay && !this.isModalOpen()) {\n        this.pendingPlayback = {\n          index: next,\n          previous,\n          requestedAt: performance.now(),\n        };\n      }\n      if (changed) {\n        delete this.cards[next]?.dataset.userPaused;\n        this.cards[next]?.classList.remove('is-user-paused');\n      }\n      this.dots.forEach((dot, dotIndex) => {\n        dot.classList.toggle('is-active', dotIndex === next);\n        dot.setAttribute('aria-current', String(dotIndex === next));\n      });\n      this.hydrateNearby();\n      if (options.play !== false && this.inViewport && this.autoplay && !this.isModalOpen()) this.playActive();\n      this.renderPositions();\n    }\n\n    hydrateNearby() {\n      if (!this.nearViewport) return;\n      const current = this.activeIndex;\n      const previous = this.normalizedIndex(current - 1);\n      const next = this.normalizedIndex(current + 1);\n\n      // Keep only the current and upcoming video actively downloading. The\n      // previous video keeps its existing buffer for fast reverse navigation,\n      // while distant videos stop competing for the same media connections.\n      this.cards.forEach((card, index) => {\n        const video = card.querySelector('[data-ugc-video]');\n        if (!video || video.dataset.hydrated !== 'true') return;\n        if (index === current || index === next) video.preload = 'auto';\n        else if (index === previous) video.preload = 'metadata';\n        else video.preload = 'none';\n      });\n\n      this.hydrateCard(this.cards[current], 'auto');\n      this.hydrateCard(this.cards[next], 'auto');\n      this.hydrateCard(this.cards[previous], 'metadata');\n    }\n\n    hydrateCard(card, preload = 'metadata') {\n      const video = card?.querySelector('[data-ugc-video]');\n      if (!video) return video;\n      this.hydratePoster(card);\n      if (preload === 'auto') video.preload = 'auto';\n      else if (video.preload === 'none') video.preload = preload;\n      if (video.dataset.hydrated === 'true') return video;\n      video.querySelectorAll('source[data-src]').forEach((source) => {\n        source.src = source.dataset.src;\n        source.removeAttribute('data-src');\n      });\n      card.classList.add('is-buffering');\n      video.dataset.hydrated = 'true';\n      video.load();\n      return video;\n    }\n\n    hydratePoster(card) {\n      const video = card?.querySelector('[data-ugc-video]');\n      if (!video || video.poster || !video.dataset.poster) return video;\n      video.poster = video.dataset.poster;\n      video.removeAttribute('data-poster');\n      return video;\n    }\n\n    playActive() {\n      const card = this.cards[this.activeIndex];\n      if (card?.dataset.userPaused === 'true') return;\n      const video = this.hydrateCard(card, 'auto');\n      if (!video) return;\n      this.pauseInlineVideos(video);\n      video.play().catch(() => card.classList.add('is-buffering'));\n    }\n\n    markSlidePlayback(card) {\n      const index = this.cards.indexOf(card);\n      const pending = this.pendingPlayback;\n      if (!pending || pending.index !== index) return;\n\n      const latency = Math.max(0, performance.now() - pending.requestedAt);\n      this.pendingPlayback = null;\n      try {\n        performance.measure('slide_to_playback_latency', {\n          start: pending.requestedAt,\n          end: performance.now(),\n          detail: { from: pending.previous, to: index },\n        });\n      } catch (error) {}\n      this.dispatchEvent(new CustomEvent('difiney:ugc-slide-playing', {\n        bubbles: true,\n        detail: { from: pending.previous, to: index, latency },\n      }));\n    }\n\n    playCard(card) {\n      const index = this.cards.indexOf(card);\n      if (index !== this.activeIndex) this.setActive(index, { play: false });\n      delete card?.dataset.userPaused;\n      card?.classList.remove('is-user-paused');\n      const video = this.hydrateCard(card, 'auto');\n      if (video) video.play().catch(() => card.classList.add('is-buffering'));\n    }\n\n    pauseCard(card) {\n      if (card) {\n        card.dataset.userPaused = 'true';\n        card.classList.add('is-user-paused');\n      }\n      card?.querySelector('[data-ugc-video]')?.pause();\n    }\n\n    pauseInlineVideos(except = null) {\n      (this.cards || []).forEach((card) => {\n        const video = card.querySelector('[data-ugc-video]');\n        if (video && video !== except) video.pause();\n      });\n    }\n\n    pauseAll() {\n      this.pauseInlineVideos();\n      this.modal?.querySelector('[data-ugc-modal-video]')?.pause();\n    }\n\n    toggleMute(card) {\n      const index = this.cards.indexOf(card);\n      if (index !== this.activeIndex) this.setActive(index, { play: false });\n      const video = this.hydrateCard(card, 'auto');\n      if (!video) return;\n      video.muted = !video.muted;\n      this.updateMuteButton(card);\n      video.play().catch(() => {});\n    }\n\n    updateMuteButton(card) {\n      const video = card?.querySelector('[data-ugc-video]');\n      const button = card?.querySelector('[data-ugc-mute]');\n      if (!video || !button) return;\n      button.setAttribute('aria-pressed', String(video.muted));\n      button.setAttribute('aria-label', video.muted ? 'Unmute customer video' : 'Mute customer video');\n    }\n\n    updateCardTime(card) {\n      const video = card.querySelector('[data-ugc-video]');\n      if (!video) return;\n      const duration = Number.isFinite(video.duration) ? video.duration : 0;\n      const progress = card.querySelector('[data-ugc-progress]');\n      if (progress && duration && document.activeElement !== progress) progress.value = String((video.currentTime / duration) * 100);\n      const current = card.querySelector('[data-ugc-current]');\n      const total = card.querySelector('[data-ugc-duration]');\n      if (current) current.textContent = this.time(video.currentTime);\n      if (total) total.textContent = this.time(duration);\n    }\n\n    time(seconds) {\n      if (!Number.isFinite(seconds)) return '0:00';\n      const minutes = Math.floor(seconds / 60);\n      return `${minutes}:${String(Math.floor(seconds % 60)).padStart(2, '0')}`;\n    }\n\n    money(cents) {\n      try {\n        return new Intl.NumberFormat(this.locale, { style: 'currency', currency: this.currency }).format((Number(cents) || 0) / 100);\n      } catch (error) {\n        return `$${((Number(cents) || 0) / 100).toFixed(2)}`;\n      }\n    }\n\n    isModalOpen() {\n      const modal = this.modal;\n      return Boolean(modal && !modal.hidden);\n    }\n\n    openModal() {\n      const modal = this.modal;\n      if (!modal) return;\n      this.lastFocused = document.activeElement;\n      this.modalIndex = this.activeIndex;\n      const sourceVideo = this.hydrateCard(this.cards[this.modalIndex], 'auto');\n      this.modalReturnWasPlaying = Boolean(sourceVideo && !sourceVideo.paused);\n      this.pauseInlineVideos();\n      this.populateModal({ preserveTime: true });\n      modal.hidden = false;\n      modal.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('dfy-ugc-modal-open');\n      modal.querySelector('[data-ugc-close]')?.focus();\n      this.modal?.querySelector('[data-ugc-modal-video]')?.play().catch(() => {});\n    }\n\n    populateModal({ preserveTime = false } = {}) {\n      const card = this.cards[this.modalIndex];\n      const sourceVideo = this.hydrateCard(card, 'auto');\n      const modalVideo = this.modal?.querySelector('[data-ugc-modal-video]');\n      if (!card || !modalVideo) return;\n      const startTime = preserveTime && Number.isFinite(sourceVideo?.currentTime) ? sourceVideo.currentTime : 0;\n      modalVideo.pause();\n      modalVideo.replaceChildren();\n      const modalSources = [\n        { src: sourceVideo?.dataset.modalHls, type: 'application/x-mpegURL' },\n        { src: sourceVideo?.dataset.modalMp4, type: 'video/mp4' },\n      ].filter((source) => source.src);\n      const sources = modalSources.length\n        ? modalSources\n        : Array.from(sourceVideo?.querySelectorAll('source') || []).map((source) => ({\n            src: source.src || source.dataset.src,\n            type: source.type,\n          }));\n      sources.forEach((source) => {\n        const clone = document.createElement('source');\n        clone.src = source.src;\n        if (source.type) clone.type = source.type;\n        modalVideo.appendChild(clone);\n      });\n      modalVideo.poster = sourceVideo?.poster || '';\n      modalVideo.preload = 'auto';\n      modalVideo.muted = true;\n      const restoreTime = () => {\n        if (Number.isFinite(modalVideo.duration)) modalVideo.currentTime = Math.min(startTime, Math.max(0, modalVideo.duration - 0.05));\n      };\n      modalVideo.addEventListener('loadedmetadata', restoreTime, { once: true });\n      modalVideo.load();\n      if (modalVideo.readyState >= 1) restoreTime();\n      this.setModalPlayState(true);\n      this.updateModalMuteButton();\n    }\n\n    changeModal(direction) {\n      this.syncModalTimeToCard();\n      this.modalIndex = this.normalizedIndex(this.modalIndex + direction);\n      this.setActive(this.modalIndex, { play: false });\n      this.populateModal({ preserveTime: true });\n      this.modal?.querySelector('[data-ugc-modal-video]')?.play().catch(() => {});\n    }\n\n    syncModalTimeToCard() {\n      const modalVideo = this.modal?.querySelector('[data-ugc-modal-video]');\n      const cardVideo = this.cards[this.modalIndex]?.querySelector('[data-ugc-video]');\n      if (!modalVideo || !cardVideo || !Number.isFinite(modalVideo.currentTime)) return;\n      const syncTime = () => {\n        try { cardVideo.currentTime = modalVideo.currentTime; } catch (error) {}\n      };\n      if (cardVideo.readyState >= 1) syncTime();\n      else cardVideo.addEventListener('loadedmetadata', syncTime, { once: true });\n    }\n\n    closeModal(resume = true) {\n      const modal = this.modal;\n      if (!modal || modal.hidden) return;\n      this.syncModalTimeToCard();\n      this.modal?.querySelector('[data-ugc-modal-video]')?.pause();\n      modal.hidden = true;\n      modal.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('dfy-ugc-modal-open');\n      if (resume && this.inViewport && this.autoplay) this.playActive();\n      if (resume) this.lastFocused?.focus?.();\n    }\n\n    toggleModalMute() {\n      const video = this.modal?.querySelector('[data-ugc-modal-video]');\n      if (!video) return;\n      video.muted = !video.muted;\n      this.updateModalMuteButton();\n      video.play().catch(() => {});\n    }\n\n    updateModalMuteButton() {\n      const video = this.modal?.querySelector('[data-ugc-modal-video]');\n      const button = this.modal?.querySelector('[data-ugc-modal-mute]');\n      if (!video || !button) return;\n      button.setAttribute('aria-pressed', String(video.muted));\n      button.setAttribute('aria-label', video.muted ? 'Unmute expanded video' : 'Mute expanded video');\n    }\n\n    toggleModalPlay() {\n      const video = this.modal?.querySelector('[data-ugc-modal-video]');\n      if (!video) return;\n      video.paused ? video.play().catch(() => {}) : video.pause();\n    }\n\n    setModalPlayState(playing) {\n      this.modal?.querySelector('[data-ugc-modal-video]')?.setAttribute('aria-label', playing ? 'Pause expanded video' : 'Play expanded video');\n      this.modal?.querySelector('[data-ugc-modal-card]')?.setAttribute('data-playing', String(playing));\n      const button = this.modal?.querySelector('[data-ugc-modal-play]');\n      button?.setAttribute('aria-label', playing ? 'Pause expanded video' : 'Play expanded video');\n    }\n\n    updateModalTime() {\n      const video = this.modal?.querySelector('[data-ugc-modal-video]');\n      if (!video) return;\n      const duration = Number.isFinite(video.duration) ? video.duration : 0;\n      const progress = this.modal?.querySelector('[data-ugc-modal-progress]');\n      if (progress && duration && document.activeElement !== progress) progress.value = String((video.currentTime / duration) * 100);\n      const current = this.modal?.querySelector('[data-ugc-modal-current]');\n      const total = this.modal?.querySelector('[data-ugc-modal-duration]');\n      if (current) current.textContent = this.time(video.currentTime);\n      if (total) total.textContent = this.time(duration);\n    }\n\n    trapFocus(event, modal) {\n      const focusable = Array.from(modal.querySelectorAll('button:not([disabled]), input:not([disabled]), [tabindex=\"0\"]')).filter((item) => item.offsetParent !== null);\n      if (!focusable.length) return;\n      const first = focusable[0];\n      const last = focusable[focusable.length - 1];\n      if (event.shiftKey && document.activeElement === first) { event.preventDefault(); last.focus(); }\n      else if (!event.shiftKey && document.activeElement === last) { event.preventDefault(); first.focus(); }\n    }\n\n    async addToCart(button) {\n      const variantId = Number(button.dataset.variantId);\n      if (!variantId || button.disabled || window.__dfyCartAddPending) return;\n      const card = button.closest('[data-ugc-card]') || this.cards[this.modalIndex];\n      const status = card?.querySelector('[data-ugc-status]');\n      button.disabled = true;\n      button.setAttribute('aria-busy', 'true');\n      if (status) status.textContent = 'Adding\u2026';\n      window.__dfyCartAddPending = true;\n\n      try {\n        const cart = document.querySelector('cart-drawer');\n        const sectionIds = cart?.getSectionsToRender?.().map((section) => section.id) || ['cart-drawer', 'cart-icon-bubble'];\n        const payload = { items: [{ id: variantId, quantity: 1 }], sections: sectionIds, sections_url: window.location.pathname };\n        const response = await this.cartRequest(payload, 0);\n        if (this.isModalOpen()) this.closeModal(false);\n        if (cart) await this.renderCartContents(cart, response);\n        if (window.publish && window.PUB_SUB_EVENTS?.cartUpdate) {\n          try {\n            await window.publish(window.PUB_SUB_EVENTS.cartUpdate, {\n              source: 'product-form',\n              productVariantId: variantId,\n              cartData: response,\n            });\n          } catch (subscriberError) {\n            console.warn('[DIFINEY UGC] Cart subscriber failed after successful add', subscriberError);\n          }\n        }\n        if (status) status.textContent = 'Added to cart';\n      } catch (error) {\n        console.error('[DIFINEY UGC] Add to cart failed', error);\n        if (status) status.textContent = error.message || 'Unable to add this item. Please try again.';\n      } finally {\n        window.__dfyCartAddPending = false;\n        button.disabled = card?.dataset.available === 'false';\n        button.removeAttribute('aria-busy');\n      }\n    }\n\n    async cartRequest(payload, attempt) {\n      const root = window.Shopify?.routes?.root || '/';\n      const response = await fetch(`${root}cart/add.js`, {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n        body: JSON.stringify(payload),\n      });\n      const raw = await response.text();\n      let data;\n      try { data = JSON.parse(raw); } catch (error) { data = null; }\n      if (!response.ok || !data) {\n        console.error('[DIFINEY UGC] /cart/add.js response', { status: response.status, body: raw });\n        const challenge = response.status === 429;\n        if (challenge && attempt < 1) {\n          await new Promise((resolve) => window.setTimeout(resolve, 900));\n          return this.cartRequest(payload, attempt + 1);\n        }\n        throw new Error(data?.description || data?.message || `Cart request failed (${response.status})`);\n      }\n      return data;\n    }\n\n    async renderCartContents(cart, parsedState) {\n      const requiredSections = cart.getSectionsToRender?.().map((section) => section.id) || [];\n      const hasCompleteSections =\n        requiredSections.length > 0 &&\n        parsedState.sections &&\n        requiredSections.every((sectionId) => parsedState.sections[sectionId]);\n\n      if (hasCompleteSections) {\n        try {\n          await cart.renderContents(parsedState);\n          return;\n        } catch (renderError) {\n          console.warn('[DIFINEY UGC] Initial cart drawer render failed; refreshing sections', renderError);\n        }\n      }\n\n      if (!requiredSections.length) throw new Error('Item was added, but the cart drawer could not refresh.');\n      const root = window.Shopify?.routes?.root || '/';\n      const cartUrl = window.routes?.cart_url || `${root}cart`;\n      const sectionUrl = `${window.location.pathname}${window.location.search}`;\n      const refreshUrl = `${cartUrl}?sections=${encodeURIComponent(requiredSections.join(','))}&sections_url=${encodeURIComponent(sectionUrl)}`;\n      const refreshResponse = await fetch(refreshUrl, {\n        cache: 'no-store',\n        headers: { Accept: 'application/json', 'X-Requested-With': 'XMLHttpRequest' },\n      });\n      const refreshText = await refreshResponse.text();\n      let refreshedSections;\n\n      try {\n        refreshedSections = JSON.parse(refreshText);\n      } catch (parseError) {\n        console.error('[DIFINEY UGC] Cart section refresh returned non-JSON', {\n          status: refreshResponse.status,\n          response: refreshText,\n        });\n        throw new Error('Item was added, but the cart drawer could not refresh. Please open your cart to review it.');\n      }\n\n      if (\n        !refreshResponse.ok ||\n        !refreshedSections ||\n        !requiredSections.every((sectionId) => refreshedSections[sectionId])\n      ) {\n        console.error('[DIFINEY UGC] Cart section refresh failed', {\n          status: refreshResponse.status,\n          response: refreshedSections,\n          requiredSections,\n        });\n        throw new Error('Item was added, but the cart drawer could not refresh.');\n      }\n\n      await cart.renderContents({ ...parsedState, sections: refreshedSections });\n    }\n  }\n\n  customElements.define('ugc-review-carousel', DfyUgcCarousel);\n})();\n"],
  "mappings": "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",
  "names": []
}
