{
  "version": 3,
  "sources": ["/cdn/shop/t/5/assets/reel-shopping.js?cache_bust=1786959375"],
  "sourcesContent": ["(() => {\n  class DeviKariReel {\n    constructor(root) {\n      this.root = root;\n      this.track = root.querySelector('[data-reel-track]');\n      this.productsUrl = root.dataset.productsUrl || '/collections/reel-products/products.json?limit=250';\n      this.analyticsUrl = root.dataset.analyticsUrl || '';\n      this.cards = [];\n      this.imagePreloadRadius = 2;\n      this.productsById = new Map();\n      this.detailSheet = root.querySelector('[data-detail-sheet]');\n      this.cartDrawer = root.querySelector('[data-cart-drawer]');\n      this.sizeSheet = root.querySelector('[data-size-sheet]');\n      this.tutorial = root.querySelector('[data-reel-tutorial]');\n      this.toast = root.querySelector('[data-reel-toast]');\n      this.cartCount = document.querySelector('[data-dk-cart-count]');\n      this.activeIndex = 0;\n      this.lastTapAt = 0;\n      this.lastDetailTapAt = 0;\n      this.tapTimer = null;\n      this.longPressTimer = null;\n      this.longPressActive = false;\n      this.pointer = null;\n      this.imageIndexByProduct = new Map();\n      this.selectedVariantByProduct = new Map();\n      this.likedProducts = [];\n      this.likedProductIds = new Set();\n      this.initWishlistState();\n      this.activeDetailProductId = null;\n      this.activeCartTab = 'bag';\n      this.activeWishlistSizeProductId = null;\n      this.isSizeOpen = false;\n      this.isDetailOpen = false;\n      this.isCartOpen = false;\n      this.productsLoaded = false;\n      this.productsLoading = false;\n      this.analyticsSessionId = this.getAnalyticsSessionId();\n      this.analyticsVisitorId = this.getAnalyticsVisitorId();\n      this.lastCart = null;\n      this.reelReturnElement = null;\n      this.cartOpenedFromClosedReel = false;\n      this.tutorialIndex = 0;\n      this.isTutorialOpen = false;\n      this.tutorialSeenInMemory = false;\n      this.tutorialPointer = null;\n      this.tutorialLongPressTimer = null;\n      this.dragFrame = 0;\n      this.dragState = null;\n      this.tutorialSteps = [\n        { key: 'swipe_up', title: 'Swipe up', body: 'Next suit', className: 'is-step-up' },\n        { key: 'swipe_right', title: 'Swipe right', body: 'Like this suit', className: 'is-step-right' },\n        { key: 'swipe_left', title: 'Swipe left', body: 'More photos', className: 'is-step-left' },\n        { key: 'double_tap', title: 'Double tap', body: 'Choose size and add to bag', className: 'is-step-double' },\n        { key: 'hold', title: 'Hold', body: 'Suit notes', className: 'is-step-hold' },\n      ];\n\n      if (!this.root || !this.track) return;\n      this.bind();\n      this.render();\n    }\n\n    bind() {\n      document.querySelectorAll('[data-reel-open]').forEach((button) => {\n        button.addEventListener('click', (event) => {\n          event.preventDefault();\n          this.open();\n        });\n        button.addEventListener('pointerenter', () => this.prefetchProducts(), { once: true });\n        button.addEventListener('touchstart', () => this.prefetchProducts(), { once: true, passive: true });\n        button.addEventListener('focus', () => this.prefetchProducts(), { once: true });\n      });\n\n      document.querySelectorAll('a[href=\"#reel\"]').forEach((link) => {\n        link.addEventListener('click', (event) => {\n          event.preventDefault();\n          this.open();\n        });\n      });\n\n      document.querySelectorAll('[data-dk-search-open]').forEach((button) => {\n        button.addEventListener('click', (event) => this.openSearch(button, event));\n      });\n\n      document.querySelectorAll('[data-dk-cart-open]').forEach((button) => {\n        button.addEventListener('click', () => this.openCartDrawer(button));\n      });\n\n      document.querySelectorAll('[data-dk-wishlist-open]').forEach((button) => {\n        button.addEventListener('click', () => this.openCartDrawer(button, 'wishlist'));\n      });\n\n      this.root.querySelectorAll('[data-reel-close]').forEach((button) => {\n        button.addEventListener('click', () => this.close());\n      });\n\n      this.root.addEventListener('pointerdown', (event) => this.onPointerDown(event));\n      this.root.addEventListener('pointermove', (event) => this.onPointerMove(event));\n      this.root.addEventListener('pointerup', (event) => this.onPointerUp(event));\n      this.root.addEventListener('pointercancel', () => {\n        if (this.isTutorialOpen) {\n          this.clearTutorialLongPress();\n          this.tutorialPointer = null;\n          return;\n        }\n        this.cancelPointer();\n      });\n\n      this.root.addEventListener('click', (event) => this.onClick(event));\n      document.addEventListener('keydown', (event) => {\n        if (!this.root.classList.contains('is-open')) return;\n\n        if (event.key === 'Tab') {\n          this.trapFocus(event);\n          return;\n        }\n\n        if (event.key !== 'Escape') return;\n\n        if (this.isTutorialOpen) {\n          this.completeTutorial('skipped');\n          return;\n        }\n        if (this.isDetailOpen) {\n          this.closeDetailSheet();\n          return;\n        }\n        if (this.isSizeOpen) {\n          this.closeSizeSheet();\n          return;\n        }\n        if (this.isCartOpen) {\n          this.closeCartDrawer();\n          return;\n        }\n        this.close();\n      });\n\n      this.sizeSheet?.querySelector('[data-size-close]')?.addEventListener('click', () => this.closeSizeSheet());\n      this.sizeSheet?.querySelector('[data-size-add]')?.addEventListener('click', () => this.addSelectedVariantToCart());\n      this.detailSheet?.querySelectorAll('[data-detail-close]').forEach((button) => {\n        button.addEventListener('click', () => this.closeDetailSheet());\n      });\n      this.detailSheet?.querySelector('.dk-reel-detail__panel')?.addEventListener('click', (event) => {\n        this.onDetailPanelClick(event);\n      });\n      this.detailSheet?.querySelector('[data-detail-add]')?.addEventListener('click', () => this.addSelectedVariantToCart());\n      this.cartDrawer?.querySelectorAll('[data-cart-close]').forEach((button) => {\n        button.addEventListener('click', () => this.closeCartDrawer());\n      });\n      this.cartDrawer?.addEventListener('click', (event) => this.onCartClick(event));\n      this.tutorial?.addEventListener('click', (event) => this.onTutorialClick(event));\n      this.bindNavPrefetch();\n      this.scheduleProductPrefetch();\n    }\n\n    async open() {\n      this.reelReturnElement = document.activeElement;\n      this.root.classList.add('is-open');\n      this.root.setAttribute('aria-hidden', 'false');\n      document.body.classList.add('dk-reel-is-open');\n      await this.loadProducts();\n      if (this.shouldShowTutorial()) {\n        this.openTutorial();\n      } else {\n        this.focusFirstElement(this.root);\n      }\n      this.haptic(12);\n      this.trackReelEvent('reel_opened', {});\n      this.trackCurrentProductSeen();\n    }\n\n    close() {\n      this.closeCartDrawer();\n      this.closeDetailSheet();\n      this.closeSizeSheet();\n      this.closeTutorial(false);\n      this.clearTapTimer();\n      this.root.classList.remove('is-open');\n      this.root.setAttribute('aria-hidden', 'true');\n      document.body.classList.remove('dk-reel-is-open');\n      this.cancelPointer();\n      this.trackReelEvent('reel_closed', {});\n      this.restoreFocus(this.reelReturnElement || document.querySelector('[data-reel-open]'));\n      this.reelReturnElement = null;\n    }\n\n    onClick(event) {\n      if (this.isTutorialOpen) return;\n\n      const card = this.getActiveCard();\n      if (!card) return;\n\n      const sizeButton = event.target.closest('[data-size-option], [data-detail-size-option]');\n      if (sizeButton) {\n        this.selectSize(sizeButton.dataset.variantId);\n        return;\n      }\n\n      if (event.target.closest('[data-reel-like]')) {\n        this.likeActiveProduct();\n        this.animateProductExit(card, 'right', () => this.nextProduct('button_like'));\n        return;\n      }\n\n      if (event.target.closest('[data-reel-next-image]')) {\n        this.nextImage(card);\n        return;\n      }\n\n      if (event.target.closest('[data-reel-bag]')) {\n        const product = this.productsById.get(String(card.dataset.productId));\n        if (!this.hasAvailableVariant(product)) {\n          this.showToast('Sold out');\n          this.trackReelEvent('sold_out_add_blocked', this.productPayload(card));\n          return;\n        }\n        this.openSizeSheet(card);\n        return;\n      }\n\n      if (event.target.closest('[data-reel-product-link]')) {\n        this.trackReelEvent('product_page_clicked', this.productPayload(card));\n      }\n    }\n\n    onPointerDown(event) {\n      if (this.isTutorialOpen) {\n        this.onTutorialPointerDown(event);\n        return;\n      }\n      if (!this.root.classList.contains('is-open') || this.isSizeOpen || this.isDetailOpen) return;\n      if (event.target.closest('button, a, [data-size-sheet], [data-detail-sheet]')) return;\n\n      const card = this.getActiveCard();\n      if (!card) return;\n\n      this.pointer = {\n        id: event.pointerId,\n        startX: event.clientX,\n        startY: event.clientY,\n        lastX: event.clientX,\n        lastY: event.clientY,\n        startAt: performance.now(),\n        card,\n      };\n\n      card.setPointerCapture?.(event.pointerId);\n      card.classList.add('is-dragging');\n      this.longPressTimer = window.setTimeout(() => {\n        if (!this.pointer) return;\n        this.longPressActive = true;\n        card.classList.add('is-notes-visible');\n        this.trackReelEvent('product_notes_opened', this.productPayload(card));\n      }, 420);\n    }\n\n    onPointerMove(event) {\n      if (this.isTutorialOpen) {\n        this.onTutorialPointerMove(event);\n        return;\n      }\n      if (!this.pointer || event.pointerId !== this.pointer.id) return;\n\n      const dx = event.clientX - this.pointer.startX;\n      const dy = event.clientY - this.pointer.startY;\n      this.pointer.lastX = event.clientX;\n      this.pointer.lastY = event.clientY;\n\n      if (Math.hypot(dx, dy) > 12 && !this.longPressActive) {\n        this.clearLongPress();\n      }\n\n      if (this.longPressActive) return;\n\n      const card = this.pointer.card;\n      const dragY = Math.max(-120, Math.min(120, dy));\n      const rotate = Math.max(-5, Math.min(5, dx / 28));\n      this.queueDragFrame(card, dx * 0.12, dragY, rotate);\n      this.updateDragFeedback(card, dx, dy);\n    }\n\n    onPointerUp(event) {\n      if (this.isTutorialOpen) {\n        this.onTutorialPointerUp(event);\n        return;\n      }\n      if (!this.pointer || event.pointerId !== this.pointer.id) return;\n\n      const pointer = this.pointer;\n      const dx = event.clientX - pointer.startX;\n      const dy = event.clientY - pointer.startY;\n      const dt = Math.max(1, performance.now() - pointer.startAt);\n      const velocityY = Math.abs(dy) / dt;\n      const card = pointer.card;\n      const wasLongPress = this.longPressActive;\n\n      this.cancelPointer();\n\n      if (wasLongPress) return;\n\n      const isTap = Math.hypot(dx, dy) < 10;\n      if (isTap) {\n        const now = performance.now();\n        if (now - this.lastTapAt < 280) {\n          this.clearTapTimer();\n          this.lastTapAt = 0;\n          this.closeDetailSheet();\n          this.openSizeSheet(card);\n        } else {\n          this.lastTapAt = now;\n          this.openDetailSheet(card);\n          this.tapTimer = window.setTimeout(() => {\n            this.lastTapAt = 0;\n          }, 300);\n        }\n        return;\n      }\n\n      if (dy < -56 || (dy < -28 && velocityY > 0.55)) {\n        this.animateProductExit(card, 'up', () => this.nextProduct('swipe_up'));\n        return;\n      }\n\n      if (dy > 56 || (dy > 28 && velocityY > 0.55)) {\n        this.animateProductExit(card, 'down', () => this.previousProduct('swipe_down'));\n        return;\n      }\n\n      if (dx > 64) {\n        this.likeActiveProduct();\n        this.animateProductExit(card, 'right', () => this.nextProduct('swipe_right_like'));\n        return;\n      }\n\n      if (dx < -64) {\n        this.nextImage(card);\n        return;\n      }\n\n      this.render();\n    }\n\n    cancelPointer() {\n      this.clearLongPress();\n      if (this.pointer?.card) {\n        this.pointer.card.classList.remove('is-dragging', 'is-notes-visible');\n        this.pointer.card.style.transform = '';\n        this.clearGestureFeedback(this.pointer.card);\n      }\n      if (this.dragFrame) window.cancelAnimationFrame(this.dragFrame);\n      this.dragFrame = 0;\n      this.dragState = null;\n      this.longPressActive = false;\n      this.pointer = null;\n    }\n\n    clearLongPress() {\n      if (this.longPressTimer) window.clearTimeout(this.longPressTimer);\n      this.longPressTimer = null;\n    }\n\n    clearTapTimer() {\n      if (this.tapTimer) window.clearTimeout(this.tapTimer);\n      this.tapTimer = null;\n    }\n\n    render() {\n      this.cards = [...this.root.querySelectorAll('[data-reel-card]')];\n      this.cards.forEach((card, index) => {\n        const isBuffered = this.cardDistance(index, this.activeIndex) <= this.imagePreloadRadius;\n        card.classList.toggle('is-active', index === this.activeIndex);\n        card.classList.toggle('is-before', index < this.activeIndex);\n        card.classList.toggle('is-after', index > this.activeIndex);\n        card.classList.toggle('is-buffered', isBuffered);\n        card.classList.toggle('is-liked', this.likedProductIds.has(card.dataset.productId));\n        card.style.transform = '';\n        this.clearGestureFeedback(card);\n        if (isBuffered) {\n          this.hydrateCardImages(card, index === this.activeIndex);\n          this.renderImages(card);\n        } else {\n          this.dehydrateCardImages(card);\n        }\n      });\n    }\n\n    async loadProducts() {\n      if (this.productsLoaded || this.productsLoading) {\n        this.render();\n        return;\n      }\n\n      this.productsLoading = true;\n      this.track.innerHTML = this.loadingMarkup('Loading reels', 'Finding pieces from DeviKari.');\n\n      try {\n        const response = await fetch(this.productsUrl, { headers: { Accept: 'application/json' } });\n        if (!response.ok) throw new Error('Unable to load reel products');\n        const data = await response.json();\n        const products = Array.isArray(data.products) ? data.products : [];\n\n        if (!products.length) {\n          this.track.innerHTML = this.loadingMarkup('Reel collection empty', 'Add products to collection handle reel-products.');\n          return;\n        }\n\n        this.productsById = new Map(products.map((product) => [String(product.id), product]));\n        this.track.innerHTML = products.map((product, index) => this.productCardMarkup(product, index)).join('');\n        this.productsLoaded = true;\n        this.render();\n      } catch (error) {\n        this.track.innerHTML = this.loadingMarkup('Could not load reels', 'Check reel-products collection and refresh.');\n        this.trackReelEvent('products_load_failed', { message: error.message });\n      } finally {\n        this.productsLoading = false;\n      }\n    }\n\n    bindNavPrefetch() {\n      document.querySelectorAll('.dk-mobile-nav a[href]').forEach((link) => {\n        link.addEventListener('click', (event) => this.onNavLinkClick(event, link));\n      });\n    }\n\n    openSearch(button, event) {\n      if (event) event.stopPropagation();\n\n      const stickyHeader = document.querySelector('sticky-header');\n      if (stickyHeader && typeof stickyHeader.reveal === 'function') {\n        stickyHeader.reveal();\n      }\n\n      const searchToggle = document.querySelector('.header__search summary');\n      if (searchToggle) {\n        searchToggle.click();\n        window.setTimeout(() => document.querySelector('.search-modal input[type=\"search\"]')?.focus(), 80);\n        return;\n      }\n\n      window.location.href = button.dataset.searchFallback || '/search';\n    }\n\n    async openCartDrawer(button, tab = 'bag') {\n      if (!this.cartDrawer) {\n        window.location.href = button.dataset.cartFallback || '/cart';\n        return;\n      }\n\n      this.reelReturnElement = document.activeElement;\n      this.cartOpenedFromClosedReel = !this.root.classList.contains('is-open');\n      if (this.cartOpenedFromClosedReel) {\n        this.root.classList.add('is-open');\n        this.root.setAttribute('aria-hidden', 'false');\n        document.body.classList.add('dk-reel-is-open');\n      }\n\n      this.isCartOpen = true;\n      this.cartDrawer.classList.add('is-open');\n      this.cartDrawer.setAttribute('aria-hidden', 'false');\n      this.activeCartTab = tab;\n      this.updateCartTabsUI();\n      await this.renderCartDrawer();\n      this.trackReelEvent('cart_drawer_opened', {});\n      this.focusFirstElement(this.cartDrawer);\n    }\n\n    closeCartDrawer() {\n      if (!this.cartDrawer) return;\n      this.isCartOpen = false;\n      this.cartDrawer.classList.remove('is-open');\n      this.cartDrawer.setAttribute('aria-hidden', 'true');\n      if (this.cartOpenedFromClosedReel) {\n        this.root.classList.remove('is-open');\n        this.root.setAttribute('aria-hidden', 'true');\n        document.body.classList.remove('dk-reel-is-open');\n        this.restoreFocus(this.reelReturnElement || document.querySelector('[data-dk-cart-open]'));\n        this.reelReturnElement = null;\n        this.cartOpenedFromClosedReel = false;\n      }\n    }\n\n    async onCartClick(event) {\n      // 1. Tab switches\n      const tabButton = event.target.closest('[data-cart-tab]');\n      if (tabButton) {\n        event.preventDefault();\n        this.activeCartTab = tabButton.dataset.cartTab;\n        this.updateCartTabsUI();\n        this.renderCartDrawer();\n        return;\n      }\n\n      const wishlistRemoveBtn = event.target.closest('[data-wishlist-remove]');\n      if (wishlistRemoveBtn) {\n        event.preventDefault();\n        const productId = String(wishlistRemoveBtn.dataset.productId);\n        this.likedProductIds.delete(productId);\n        this.likedProducts = this.likedProducts.filter(p => String(p.id) !== productId);\n        this.writeLocalList('dkLikedProducts', this.likedProducts);\n        \n        // Remove .is-liked class from the card in the reel if it's rendered\n        const card = this.root.querySelector(`[data-reel-card][data-product-id=\"${productId}\"]`);\n        if (card) card.classList.remove('is-liked');\n\n        this.updateLikeUI(productId, false);\n        this.syncWishlistWithBackend(this.likedProducts);\n\n        this.haptic(8);\n        this.renderCartDrawer();\n        return;\n      }\n\n      const wishlistAddBtn = event.target.closest('[data-wishlist-add]');\n      if (wishlistAddBtn) {\n        event.preventDefault();\n        const productId = String(wishlistAddBtn.dataset.productId);\n        const product = this.productsById.get(productId);\n        if (!product) return;\n        if (!this.hasAvailableVariant(product)) {\n          this.showToast('Sold out');\n          this.trackReelEvent('sold_out_add_blocked', this.productPayloadFromProduct(product));\n          return;\n        }\n        const variant = this.defaultVariant(product);\n        if (!variant) return;\n\n        this.selectedVariantByProduct.set(productId, String(variant.id));\n\n        if (this.requiresSizeChoice(product)) {\n          this.closeCartDrawer();\n          this.openSizeSheet(product);\n          return;\n        }\n\n        await this.addVariantToCart(product, variant.id, null);\n        this.renderCartDrawer();\n        return;\n      }\n\n      // 3. Original bag actions\n      const checkoutButton = event.target.closest('[data-cart-checkout]');\n      if (checkoutButton) {\n        if (checkoutButton.getAttribute('aria-disabled') === 'true') {\n          event.preventDefault();\n          return;\n        }\n\n        this.trackReelEvent('checkout_clicked', this.cartPayload());\n        return;\n      }\n\n      const removeButton = event.target.closest('[data-cart-remove]');\n      if (removeButton) {\n        await this.changeCartLine(Number(removeButton.dataset.line), 0);\n        return;\n      }\n\n      const quantityButton = event.target.closest('[data-cart-quantity]');\n      if (!quantityButton) return;\n      const line = Number(quantityButton.dataset.line);\n      const quantity = Math.max(0, Number(quantityButton.dataset.quantity));\n      await this.changeCartLine(line, quantity);\n    }\n\n    async renderCartDrawer() {\n      const itemsNode = this.cartDrawer?.querySelector('[data-cart-items]');\n      const subtotalNode = this.cartDrawer?.querySelector('[data-cart-subtotal]');\n      if (!itemsNode || !subtotalNode) return;\n\n      // 1. Fetch products if wishlist is active but map is empty (direct cart open boundary case)\n      if (this.activeCartTab === 'wishlist' && this.productsById.size === 0) {\n        try {\n          const response = await fetch(this.productsUrl, { headers: { Accept: 'application/json' } });\n          if (response.ok) {\n            const data = await response.json();\n            const products = Array.isArray(data.products) ? data.products : [];\n            this.productsById = new Map(products.map((p) => [String(p.id), p]));\n          }\n        } catch (e) {\n          console.error('Could not prefetch products for wishlist drawer:', e);\n        }\n      }\n\n      // 2. Load shopify cart data\n      const response = await fetch(window.routes?.cart_url ? `${window.routes.cart_url}.js` : '/cart.js');\n      let cart = { items: [], total_price: 0, item_count: 0 };\n      if (response.ok) {\n        cart = await response.json();\n      }\n      this.lastCart = cart;\n\n      // 3. Update global cart counts\n      subtotalNode.textContent = this.formatCartMoney(cart.total_price);\n      this.updateCartCount(cart.item_count || 0);\n      this.updateCheckoutState(cart.item_count || 0);\n\n      // 4. Update tab count elements\n      const bagCountEl = this.cartDrawer?.querySelector('[data-cart-tab-count=\"bag\"]');\n      const wishlistCountEl = this.cartDrawer?.querySelector('[data-cart-tab-count=\"wishlist\"]');\n      if (bagCountEl) bagCountEl.textContent = cart.item_count || 0;\n      if (wishlistCountEl) wishlistCountEl.textContent = this.likedProductIds.size || 0;\n\n      // 5. Render active tab\n      if (this.activeCartTab === 'bag') {\n        if (!cart.items?.length) {\n          itemsNode.innerHTML = '<p class=\"dk-reel-cart__empty\">Your bag is empty.</p>';\n          return;\n        }\n\n        itemsNode.innerHTML = cart.items.map((item, index) => `\n          <article class=\"dk-reel-cart__item\">\n            <a class=\"dk-reel-cart__item-link\" href=\"${this.escapeAttribute(item.url || '#')}\" data-cart-product-link>\n              ${item.image ? `<img src=\"${this.escapeAttribute(this.imageUrl(item.image, 220))}\" alt=\"${this.escapeAttribute(item.product_title)}\">` : ''}\n              <div>\n                <h3>${this.escapeHtml(item.product_title)}</h3>\n                <p>${this.escapeHtml(item.variant_title || '')}</p>\n                <strong>${this.formatCartMoney(item.final_line_price)}</strong>\n              </div>\n            </a>\n            <div>\n              <div class=\"dk-reel-cart__qty\" aria-label=\"Quantity controls\">\n                <button type=\"button\" data-cart-quantity data-line=\"${index + 1}\" data-quantity=\"${Math.max(0, item.quantity - 1)}\" aria-label=\"Decrease quantity\">-</button>\n                <span>${Number(item.quantity || 0)}</span>\n                <button type=\"button\" data-cart-quantity data-line=\"${index + 1}\" data-quantity=\"${Number(item.quantity || 0) + 1}\" aria-label=\"Increase quantity\">+</button>\n              </div>\n              <button type=\"button\" data-cart-remove data-line=\"${index + 1}\" aria-label=\"Remove ${this.escapeAttribute(item.product_title)}\">Remove</button>\n            </div>\n          </article>\n        `).join('');\n      } else {\n        const wishlistContainer = this.cartDrawer?.querySelector('[data-wishlist-items]');\n        if (wishlistContainer) {\n          if (this.likedProductIds.size === 0) {\n            wishlistContainer.innerHTML = '<p class=\"dk-reel-cart__empty\">Your wishlist is empty.</p>';\n          } else {\n            const wishlistItemsMarkup = [];\n            let wishlistChanged = false;\n            for (const storedProduct of this.likedProducts) {\n              const currentProduct = this.productsById.get(String(storedProduct.id));\n              const currentImage = currentProduct?.images?.[0]?.src || '';\n              const product = {\n                ...storedProduct,\n                title: currentProduct?.title || storedProduct.title,\n                handle: currentProduct?.handle || storedProduct.handle,\n                price: currentProduct?.variants?.[0]?.price ?? storedProduct.price,\n                image: currentImage || storedProduct.image,\n              };\n\n              if (\n                product.title !== storedProduct.title\n                || product.handle !== storedProduct.handle\n                || product.price !== storedProduct.price\n                || product.image !== storedProduct.image\n              ) {\n                Object.assign(storedProduct, product);\n                wishlistChanged = true;\n              }\n\n              const productId = String(product.id);\n              const productTitle = product.title || 'Product';\n              const productHandle = product.handle || '';\n              const productPrice = product.price || '';\n              const productImage = product.image || '';\n              const canAddToBag = this.hasAvailableVariant(currentProduct);\n\n              wishlistItemsMarkup.push(`\n                <article class=\"dk-reel-cart__item dk-reel-wishlist__item\" data-product-id=\"${productId}\">\n                  <a class=\"dk-reel-cart__item-link\" href=\"/products/${productHandle}\" data-cart-product-link>\n                    ${productImage ? `<img src=\"${this.escapeAttribute(this.imageUrl(productImage, 220))}\" alt=\"${this.escapeAttribute(productTitle)}\">` : ''}\n                    <div>\n                      <h3>${this.escapeHtml(productTitle)}</h3>\n                      <div class=\"dk-reel-wishlist__item-meta\">\n                        <strong>${this.formatMoney(productPrice)}</strong>\n                        ${canAddToBag ? '' : '<p>Sold out</p>'}\n                      </div>\n                    </div>\n                  </a>\n                  <div class=\"dk-reel-wishlist__actions\">\n                    <button type=\"button\" class=\"dk-reel-wishlist__add-btn\" data-wishlist-add data-product-id=\"${productId}\" ${canAddToBag ? '' : 'disabled'}>\n                      ${canAddToBag ? (this.requiresSizeChoice(currentProduct) ? 'Choose Size' : 'Add to Bag') : 'Sold Out'}\n                    </button>\n                    <button type=\"button\" class=\"dk-reel-wishlist__remove-btn\" data-wishlist-remove data-product-id=\"${productId}\" aria-label=\"Remove ${this.escapeAttribute(productTitle)}\">\n                      <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"><path d=\"M18 6 6 18M6 6l12 12\" /></svg>\n                    </button>\n                  </div>\n                </article>\n              `);\n            }\n            if (wishlistChanged) {\n              this.writeLocalList('dkLikedProducts', this.likedProducts);\n              this.syncWishlistWithBackend(this.likedProducts);\n            }\n            wishlistContainer.innerHTML = wishlistItemsMarkup.join('');\n          }\n        }\n      }\n    }\n\n    async changeCartLine(line, quantity) {\n      try {\n        const url = window.routes?.cart_change_url ? `${window.routes.cart_change_url}.js` : '/cart/change.js';\n        const response = await fetch(url, {\n          method: 'POST',\n          headers: {\n            Accept: 'application/json',\n            'Content-Type': 'application/json',\n          },\n          body: JSON.stringify({ line, quantity }),\n        });\n\n        if (!response.ok) throw new Error('Unable to update bag');\n        await this.renderCartDrawer();\n      } catch (error) {\n        this.showToast('Could not update bag');\n        this.trackReelEvent('cart_update_failed', { line, quantity, message: error.message });\n      }\n    }\n\n    updateCheckoutState(itemCount) {\n      const checkout = this.cartDrawer?.querySelector('[data-cart-checkout]');\n      if (!checkout) return;\n      checkout.classList.toggle('is-disabled', itemCount === 0);\n      checkout.setAttribute('aria-disabled', itemCount === 0 ? 'true' : 'false');\n      checkout.tabIndex = itemCount === 0 ? -1 : 0;\n    }\n\n    onNavLinkClick(event, link) {\n      const target = new URL(link.href, window.location.origin);\n      const current = new URL(window.location.href);\n      const samePage = target.pathname === current.pathname && target.search === current.search;\n\n      if (!samePage) return;\n\n      event.preventDefault();\n      this.closeSizeSheet();\n      if (this.root.classList.contains('is-open')) this.close();\n      window.scrollTo({ top: 0, behavior: 'smooth' });\n    }\n\n    scheduleProductPrefetch() {\n      if (!this.shouldPrefetchProducts()) return;\n\n      const preload = () => {\n        this.prefetchProducts();\n      };\n\n      if ('requestIdleCallback' in window) {\n        window.requestIdleCallback(preload, { timeout: 4500 });\n        return;\n      }\n\n      window.setTimeout(preload, 3200);\n    }\n\n    prefetchProducts() {\n      if (!this.productsLoaded && !this.productsLoading && this.shouldPrefetchProducts()) this.loadProducts();\n    }\n\n    shouldPrefetchProducts() {\n      const isMobile = window.matchMedia?.('(max-width: 768px)').matches;\n      const saveData = Boolean(window.navigator?.connection?.saveData);\n      return Boolean(isMobile) && !saveData;\n    }\n\n    productCardMarkup(product, index) {\n      const imageMarkup = (product.images || []).slice(0, 4).map((image, imageIndex) => {\n        const src = this.imageUrl(image.src, imageIndex === 0 ? 1200 : 900);\n        return `\n          <img\n            class=\"dk-reel-card__image${imageIndex === 0 ? ' is-active' : ''}\"\n            data-src=\"${this.escapeAttribute(src)}\"\n            alt=\"${this.escapeAttribute(image.alt || product.title)}\"\n            width=\"${Number(image.width || 1000)}\"\n            height=\"${Number(image.height || 1400)}\"\n            loading=\"${index === 0 && imageIndex === 0 ? 'eager' : 'lazy'}\"\n            decoding=\"async\"\n            ${index === 0 && imageIndex === 0 ? 'fetchpriority=\"high\"' : ''}\n          >\n        `;\n      }).join('');\n\n      const variants = (product.variants || []).map((variant) => `\n        <button\n          type=\"button\"\n          data-size-template\n          data-variant-id=\"${this.escapeAttribute(variant.id)}\"\n          data-variant-title=\"${this.escapeAttribute(variant.title || variant.option1 || 'Size')}\"\n          data-variant-available=\"${variant.available ? 'true' : 'false'}\"\n        >\n          ${this.escapeHtml(variant.title || variant.option1 || 'Size')}\n        </button>\n      `).join('');\n\n      const tags = this.visibleTags(product.tags).map((tag) => `<span>${this.escapeHtml(tag)}</span>`).join('');\n      const price = this.formatMoney(product.variants?.[0]?.price);\n      const compareAt = this.formatMoney(product.variants?.[0]?.compare_at_price);\n      const showCompare = Number(product.variants?.[0]?.compare_at_price || 0) > Number(product.variants?.[0]?.price || 0);\n      const notes = this.productNotes(product);\n      const productUrl = `/products/${product.handle}`;\n      const isSoldOut = !this.hasAvailableVariant(product);\n\n      return `\n        <article\n          class=\"dk-reel-card\"\n          data-reel-card\n          data-product-id=\"${this.escapeAttribute(product.id)}\"\n          data-product-handle=\"${this.escapeAttribute(product.handle)}\"\n          data-product-index=\"${index}\"\n          data-product-title=\"${this.escapeAttribute(product.title)}\"\n          data-product-price=\"${this.escapeAttribute(price)}\"\n          data-product-url=\"${this.escapeAttribute(productUrl)}\"\n          aria-label=\"${this.escapeAttribute(product.title)}\"\n        >\n          <div class=\"dk-reel-card__media\" data-reel-media>\n            ${imageMarkup || `<div class=\"dk-reel-card__placeholder\"><span>${this.escapeHtml(product.title)}</span></div>`}\n          </div>\n          <div class=\"dk-reel-card__shade\" aria-hidden=\"true\"></div>\n          <div class=\"dk-reel-card__notes\" data-reel-notes>\n            <p class=\"dk-reel-card__notes-eyebrow\">Suit Notes</p>\n            <h3>${this.escapeHtml(product.title)}</h3>\n            <p>${this.escapeHtml(notes)}</p>\n            <div class=\"dk-reel-card__notes-tags\">${tags}</div>\n          </div>\n          <div class=\"dk-reel-card__copy\">\n            <p class=\"dk-reel-card__brand\">DeviKari</p>\n            <h2>${this.escapeHtml(product.title)}</h2>\n            <div class=\"dk-reel-card__price\">\n              <span>${this.escapeHtml(price)}</span>\n              ${showCompare ? `<s>${this.escapeHtml(compareAt)}</s>` : ''}\n              ${isSoldOut ? '<em>Sold out</em>' : ''}\n            </div>\n            <div class=\"dk-reel-card__meta\">${tags}</div>\n          </div>\n          <div class=\"dk-reel-card__sizes\" hidden>${variants}</div>\n          <div class=\"dk-reel-card__rail\" aria-label=\"Reel actions\">\n            <button class=\"dk-reel-card__rail-button\" type=\"button\" aria-label=\"Like product\" data-reel-like>\n              <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\"><path d=\"M20.8 5.8a5.2 5.2 0 0 0-7.4 0L12 7.2l-1.4-1.4a5.2 5.2 0 1 0-7.4 7.4L12 22l8.8-8.8a5.2 5.2 0 0 0 0-7.4Z\" /></svg>\n            </button>\n            <button class=\"dk-reel-card__rail-button\" type=\"button\" aria-label=\"Next image\" data-reel-next-image>\n              <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\"><path d=\"M4 7a3 3 0 0 1 3-3h10a3 3 0 0 1 3 3v10a3 3 0 0 1-3 3H7a3 3 0 0 1-3-3V7Zm3.5 9.5 3.2-3.2 2.1 2.1 3.2-4.1 2.5 5.2\" /></svg>\n            </button>\n            <button class=\"dk-reel-card__rail-button dk-reel-card__rail-button--bag\" type=\"button\" aria-label=\"${isSoldOut ? 'Sold out' : 'Choose size and add to bag'}\" data-reel-bag ${isSoldOut ? 'disabled aria-disabled=\"true\"' : ''}>\n              <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\"><path d=\"M6.2 8h11.6l-.8 11a2 2 0 0 1-2 1.8H9a2 2 0 0 1-2-1.8L6.2 8Zm3 0a2.8 2.8 0 1 1 5.6 0\" /></svg>\n            </button>\n            <a class=\"dk-reel-card__rail-button\" href=\"${this.escapeAttribute(productUrl)}\" aria-label=\"Open product page\" data-reel-product-link>\n              <svg aria-hidden=\"true\" viewBox=\"0 0 24 24\"><path d=\"M7 17 17 7M9 7h8v8\" /></svg>\n            </a>\n          </div>\n          <div class=\"dk-reel-card__hint\" data-reel-hint aria-hidden=\"true\"></div>\n        </article>\n      `;\n    }\n\n    loadingMarkup(title, body) {\n      return `\n        <div class=\"dk-reel__empty\" data-reel-loading>\n          <p>${this.escapeHtml(title)}</p>\n          <span>${this.escapeHtml(body)}</span>\n        </div>\n      `;\n    }\n\n    productNotes(product) {\n      const text = this.stripHtml(product.body_html || '').replace(\n        ' is a dummy DeviKari product for reel UX testing.',\n        ' is a DeviKari suit set styled for mobile discovery.',\n      );\n      return text || 'Soft occasion-ready suit set with lightweight styling notes.';\n    }\n\n    visibleTags(tags = '') {\n      return String(tags)\n        .split(',')\n        .map((tag) => tag.trim())\n        .filter((tag) => tag && tag !== 'dummy' && tag !== 'reel-products')\n        .slice(0, 3);\n    }\n\n    imageUrl(src, width) {\n      if (!src) return '';\n      const separator = src.includes('?') ? '&' : '?';\n      return `${src}${separator}width=${width}`;\n    }\n\n    formatMoney(value) {\n      const amount = Number(value || 0);\n      if (!Number.isFinite(amount)) return '';\n      return new Intl.NumberFormat('en-IN', {\n        style: 'currency',\n        currency: 'INR',\n        maximumFractionDigits: 0,\n      }).format(amount);\n    }\n\n    formatCartMoney(value) {\n      const amount = Number(value || 0) / 100;\n      return new Intl.NumberFormat('en-IN', {\n        style: 'currency',\n        currency: 'INR',\n        maximumFractionDigits: 0,\n      }).format(amount);\n    }\n\n    stripHtml(value) {\n      const element = document.createElement('div');\n      element.innerHTML = value;\n      return element.textContent?.trim() || '';\n    }\n\n    escapeHtml(value) {\n      return String(value ?? '')\n        .replaceAll('&', '&amp;')\n        .replaceAll('<', '&lt;')\n        .replaceAll('>', '&gt;')\n        .replaceAll('\"', '&quot;')\n        .replaceAll(\"'\", '&#039;');\n    }\n\n    escapeAttribute(value) {\n      return this.escapeHtml(value);\n    }\n\n    renderImages(card) {\n      const images = [...card.querySelectorAll('.dk-reel-card__image')];\n      if (!images.length) return;\n      const activeImage = this.imageIndexByProduct.get(card.dataset.productId) || 0;\n      images.forEach((image, index) => image.classList.toggle('is-active', index === activeImage));\n    }\n\n    hydrateCardImages(card, isActiveCard = false) {\n      const images = [...card.querySelectorAll('.dk-reel-card__image')];\n      images.forEach((image, index) => {\n        if (image.src || !image.dataset.src) return;\n        image.src = image.dataset.src;\n        if (isActiveCard && index === 0) {\n          image.loading = 'eager';\n          image.fetchPriority = 'high';\n        }\n      });\n    }\n\n    dehydrateCardImages(card) {\n      card.querySelectorAll('.dk-reel-card__image[src]').forEach((image) => {\n        image.removeAttribute('src');\n        image.loading = 'lazy';\n        image.fetchPriority = 'low';\n      });\n    }\n\n    cardDistance(index, activeIndex) {\n      const total = this.cards.length;\n      if (!total) return 0;\n      const distance = Math.abs(index - activeIndex);\n      return Math.min(distance, total - distance);\n    }\n\n    nextProduct(source = 'next') {\n      if (!this.cards.length) return;\n      this.activeIndex = (this.activeIndex + 1) % this.cards.length;\n      this.render();\n      this.flash(source === 'swipe_right_like' || source === 'button_like' ? 'LIKED' : 'NEXT');\n      this.trackCurrentProductSeen();\n    }\n\n    previousProduct(source = 'previous') {\n      if (!this.cards.length) return;\n      this.activeIndex = (this.activeIndex - 1 + this.cards.length) % this.cards.length;\n      this.render();\n      this.flash(source === 'swipe_down' ? 'BACK' : 'PREV');\n      this.trackCurrentProductSeen();\n    }\n\n    nextImage(card) {\n      const images = [...card.querySelectorAll('.dk-reel-card__image')];\n      if (!images.length) return;\n      const productId = card.dataset.productId;\n      const current = this.imageIndexByProduct.get(productId) || 0;\n      const next = (current + 1) % images.length;\n      this.imageIndexByProduct.set(productId, next);\n      card.classList.add('is-changing-image');\n      this.renderImages(card);\n      window.setTimeout(() => card.classList.remove('is-changing-image'), 260);\n      this.flash('PHOTO');\n      this.haptic(8);\n      this.trackReelEvent('product_image_next', { ...this.productPayload(card), imageIndex: next });\n    }\n\n    likeActiveProduct() {\n      const card = this.getActiveCard();\n      if (!card) return;\n      const productId = String(card.dataset.productId);\n      if (!this.likedProductIds.has(productId)) {\n        const image = card.querySelector('.dk-reel-card__image')?.src || '';\n        const productData = {\n          id: productId,\n          title: card.dataset.productTitle || '',\n          handle: card.dataset.productHandle || '',\n          price: card.dataset.productPrice || '',\n          image: image\n        };\n        const selectedVariantId = this.selectedVariantByProduct.get(productId);\n        if (selectedVariantId) {\n          productData.selected_variant_id = String(selectedVariantId);\n        }\n        this.toggleLikeProduct(productData);\n      }\n    }\n\n    toggleLikeActiveProduct() {\n      const card = this.getActiveCard();\n      if (!card) return;\n      const productId = String(card.dataset.productId);\n      const image = card.querySelector('.dk-reel-card__image')?.src || '';\n      const productData = {\n        id: productId,\n        title: card.dataset.productTitle || '',\n        handle: card.dataset.productHandle || '',\n        price: card.dataset.productPrice || '',\n        image: image\n      };\n      const selectedVariantId = this.selectedVariantByProduct.get(productId);\n      if (selectedVariantId) {\n        productData.selected_variant_id = String(selectedVariantId);\n      }\n      this.toggleLikeProduct(productData);\n    }\n\n    toggleLikeProduct(productData) {\n      const productId = String(productData.id);\n      const index = this.likedProducts.findIndex(p => String(p.id) === productId);\n      if (index > -1) {\n        this.updateLikeUI(productId, true);\n        this.haptic(8);\n        this.flash('LIKED');\n        return;\n      } else {\n        if (productData.selected_variant_id) {\n          this.selectedVariantByProduct.set(productId, String(productData.selected_variant_id));\n        }\n        this.likedProducts.push(productData);\n        this.likedProductIds.add(productId);\n        this.writeLocalList('dkLikedProducts', this.likedProducts);\n        this.updateLikeUI(productId, true);\n        this.haptic([10, 24, 14]);\n        this.trackReelEvent('product_liked', productData);\n        this.syncWishlistWithBackend(this.likedProducts);\n      }\n\n      if (this.isCartOpen) {\n        this.renderCartDrawer();\n      }\n    }\n\n    updateLikeUI(productId, isLiked) {\n      const card = this.root.querySelector(`[data-reel-card][data-product-id=\"${productId}\"]`);\n      if (card) {\n        card.classList.toggle('is-liked', isLiked);\n      }\n      const pageBtn = document.querySelector(`[data-dk-wishlist-toggle][data-product-id=\"${productId}\"]`);\n      if (pageBtn) {\n        pageBtn.classList.toggle('is-liked', isLiked);\n      }\n      const countVal = this.likedProducts.length;\n      document.querySelectorAll('[data-dk-wishlist-count]').forEach(el => {\n        el.textContent = countVal;\n        el.toggleAttribute('hidden', countVal === 0);\n      });\n      document.querySelectorAll('[data-dk-wishlist-count-bubble]').forEach(el => {\n        el.toggleAttribute('hidden', countVal === 0);\n      });\n    }\n\n    syncWishlistWithBackend(wishlist) {\n      if (!window.dkCustomerId) return;\n      fetch('/apps/devikari/wishlist', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify({\n          customerId: window.dkCustomerId,\n          wishlist: wishlist\n        })\n      }).catch(e => console.warn('Wishlist sync failed:', e));\n    }\n\n    async initWishlistState() {\n      let loaded = false;\n      if (window.dkCustomerId) {\n        try {\n          const res = await fetch(`/apps/devikari/wishlist?customerId=${window.dkCustomerId}`);\n          if (res.ok) {\n            const data = await res.json();\n            this.likedProducts = data.wishlist || [];\n            this.likedProductIds = new Set(this.likedProducts.map(p => String(p.id)));\n            this.writeLocalList('dkLikedProducts', this.likedProducts);\n            loaded = true;\n            this.render();\n            this.likedProducts.forEach(p => {\n              if (p.selected_variant_id) {\n                this.selectedVariantByProduct.set(String(p.id), String(p.selected_variant_id));\n              }\n              this.updateLikeUI(String(p.id), true);\n            });\n          }\n        } catch (e) {\n          console.warn('Failed to fetch remote wishlist on init', e);\n        }\n      }\n      if (!loaded) {\n        this.likedProducts = this.readLocalList('dkLikedProducts') || [];\n        this.likedProductIds = new Set(this.likedProducts.map(p => String(p.id)));\n        this.render();\n        this.likedProducts.forEach(p => {\n          if (p.selected_variant_id) {\n            this.selectedVariantByProduct.set(String(p.id), String(p.selected_variant_id));\n          }\n          this.updateLikeUI(String(p.id), true);\n        });\n      }\n      // Trigger header icon counts update\n      const countVal = this.likedProducts.length;\n      document.querySelectorAll('[data-dk-wishlist-count]').forEach(el => {\n        el.textContent = countVal;\n        el.toggleAttribute('hidden', countVal === 0);\n      });\n      document.querySelectorAll('[data-dk-wishlist-count-bubble]').forEach(el => {\n        el.toggleAttribute('hidden', countVal === 0);\n      });\n    }\n\n    animateProductExit(card, direction, afterExit) {\n      if (!card) return;\n      if (this.dragFrame) window.cancelAnimationFrame(this.dragFrame);\n      this.dragFrame = 0;\n      card.classList.add(`is-exiting-${direction}`);\n      window.setTimeout(() => {\n        card.classList.remove(`is-exiting-${direction}`);\n        afterExit();\n      }, 210);\n    }\n\n    updateDragFeedback(card, dx, dy) {\n      const absX = Math.abs(dx);\n      const absY = Math.abs(dy);\n      const hint = card.querySelector('[data-reel-hint]');\n      if (!hint) return;\n\n      let nextState = '';\n      let text = '';\n\n      if (absY > absX && dy < -32) {\n        nextState = 'next';\n        text = 'NEXT';\n      } else if (absY > absX && dy > 32) {\n        nextState = 'back';\n        text = 'BACK';\n      } else if (absX >= absY && dx > 32) {\n        nextState = 'like';\n        text = 'LIKE';\n      } else if (absX >= absY && dx < -32) {\n        nextState = 'photo';\n        text = 'PHOTO';\n      }\n\n      if (this.dragState === nextState) return;\n      this.clearGestureFeedback(card);\n      this.dragState = nextState;\n      hint.textContent = text;\n      if (nextState) card.classList.add(`is-gesture-${nextState}`);\n    }\n\n    clearGestureFeedback(card) {\n      const hint = card.querySelector('[data-reel-hint]');\n      if (hint) hint.textContent = '';\n      card.classList.remove('is-gesture-like', 'is-gesture-photo', 'is-gesture-next', 'is-gesture-back');\n      this.dragState = null;\n    }\n\n    queueDragFrame(card, x, y, rotate) {\n      this.pendingDrag = { card, x, y, rotate };\n      if (this.dragFrame) return;\n      this.dragFrame = window.requestAnimationFrame(() => {\n        const drag = this.pendingDrag;\n        this.dragFrame = 0;\n        if (!drag?.card) return;\n        drag.card.style.transform = `translate3d(${drag.x}px, ${drag.y}px, 0) rotate(${drag.rotate}deg)`;\n      });\n    }\n\n    openDetailSheet(card = this.getActiveCard()) {\n      if (!card || !this.detailSheet) return;\n\n      const product = this.productsById.get(String(card.dataset.productId));\n      if (!product) return;\n\n      this.isDetailOpen = true;\n      this.activeDetailProductId = String(product.id);\n      this.detailSheet.classList.add('is-open');\n      this.detailSheet.setAttribute('aria-hidden', 'false');\n\n      const title = this.detailSheet.querySelector('[data-detail-title]');\n      const price = this.detailSheet.querySelector('[data-detail-price]');\n      const tags = this.detailSheet.querySelector('[data-detail-tags]');\n      const notes = this.detailSheet.querySelector('[data-detail-notes]');\n      const media = this.detailSheet.querySelector('[data-detail-media]');\n      const sizes = this.detailSheet.querySelector('[data-detail-sizes]');\n      const link = this.detailSheet.querySelector('[data-detail-link]');\n      const message = this.detailSheet.querySelector('[data-detail-message]');\n\n      if (title) title.textContent = product.title || '';\n      if (price) price.innerHTML = this.priceMarkup(product);\n      if (tags) tags.innerHTML = this.visibleTags(product.tags).map((tag) => `<span>${this.escapeHtml(tag)}</span>`).join('');\n      if (notes) notes.textContent = this.productNotes(product);\n      if (media && media.dataset.productId !== String(product.id)) {\n        media.innerHTML = this.detailMediaMarkup(product);\n        media.dataset.productId = String(product.id);\n      }\n      this.ensureDefaultVariantSelected(product);\n      if (sizes) sizes.innerHTML = this.variantOptionsMarkup(product, 'detail');\n      if (link) link.href = `/products/${product.handle}`;\n      if (message) message.textContent = '';\n\n      this.updateAddButtons(product.id);\n      this.trackReelEvent('product_detail_opened', this.productPayload(card));\n      this.focusFirstElement(this.detailSheet);\n    }\n\n    closeDetailSheet() {\n      if (!this.detailSheet) return;\n      this.isDetailOpen = false;\n      this.activeDetailProductId = null;\n      this.lastDetailTapAt = 0;\n      this.detailSheet.classList.remove('is-open');\n      this.detailSheet.setAttribute('aria-hidden', 'true');\n    }\n\n    onDetailPanelClick(event) {\n      if (event.target.closest('button, a')) return;\n      const now = performance.now();\n      if (now - this.lastDetailTapAt < 280) {\n        this.lastDetailTapAt = 0;\n        this.closeDetailSheet();\n        this.openSizeSheet(this.getActiveCard());\n        return;\n      }\n      this.lastDetailTapAt = now;\n    }\n\n    detailMediaMarkup(product) {\n      const images = (product.images || []).slice(0, 3);\n      if (!images.length) return `<div class=\"dk-reel-detail__placeholder\">${this.escapeHtml(product.title)}</div>`;\n      return images.map((image, index) => `\n        <img\n          src=\"${this.escapeAttribute(this.imageUrl(image.src, index === 0 ? 900 : 700))}\"\n          alt=\"${this.escapeAttribute(image.alt || product.title)}\"\n          width=\"${Number(image.width || 900)}\"\n          height=\"${Number(image.height || 1200)}\"\n          loading=\"${index === 0 ? 'eager' : 'lazy'}\"\n          decoding=\"async\"\n        >\n      `).join('');\n    }\n\n    variantOptionsMarkup(product, mode) {\n      const selectedVariantId = this.selectedVariantByProduct.get(String(product.id));\n      return (product.variants || []).map((variant) => `\n        <button\n          type=\"button\"\n          class=\"${selectedVariantId === String(variant.id) ? 'is-selected' : ''}\"\n          data-${mode}-size-option\n          data-size-option\n          data-variant-id=\"${this.escapeAttribute(variant.id)}\"\n          data-product-id=\"${this.escapeAttribute(product.id)}\"\n          ${variant.available ? '' : 'disabled'}\n        >\n          ${this.escapeHtml(variant.title || variant.option1 || 'Size')}\n        </button>\n      `).join('');\n    }\n\n    priceMarkup(product) {\n      const variant = product.variants?.[0];\n      const price = this.formatMoney(variant?.price);\n      const compareAt = this.formatMoney(variant?.compare_at_price);\n      const showCompare = Number(variant?.compare_at_price || 0) > Number(variant?.price || 0);\n      return `<span>${this.escapeHtml(price)}</span>${showCompare ? `<s>${this.escapeHtml(compareAt)}</s>` : ''}`;\n    }\n\n    defaultVariant(product) {\n      const variants = product?.variants || [];\n      if (!variants.length) return null;\n      const available = variants.filter((variant) => variant.available);\n      const candidates = available.length ? available : variants;\n      const medium = candidates.find((variant) => {\n        const title = String(variant.title || variant.option1 || '').toLowerCase();\n        return title === 'm' || title === 'medium' || title.includes('medium');\n      });\n      return medium || candidates[0];\n    }\n\n    ensureDefaultVariantSelected(product) {\n      if (!product?.id) return;\n      const productId = String(product.id);\n      if (this.selectedVariantByProduct.has(productId)) return;\n      const variant = this.defaultVariant(product);\n      if (variant) this.selectedVariantByProduct.set(productId, String(variant.id));\n    }\n\n    hasAvailableVariant(product) {\n      const variants = product?.variants || [];\n      return variants.some((variant) => variant.available);\n    }\n\n    variantIsAvailable(product, variantId) {\n      const variant = (product?.variants || []).find((item) => String(item.id) === String(variantId));\n      return Boolean(variant?.available);\n    }\n\n    requiresSizeChoice(product) {\n      const variants = product?.variants || [];\n      if (variants.length <= 1) return false;\n      return variants.some((variant) => {\n        const title = String(variant.title || variant.option1 || '').toLowerCase();\n        return title && title !== 'default title';\n      });\n    }\n\n    openSizeSheet(productOrCard = this.getActiveCard()) {\n      if (!productOrCard || !this.sizeSheet) return;\n\n      const isCard = productOrCard instanceof HTMLElement;\n      const productId = String(isCard ? productOrCard.dataset.productId : productOrCard.id);\n      const productTitle = isCard ? productOrCard.dataset.productTitle : productOrCard.title;\n      \n      const product = this.productsById.get(productId);\n      if (!product) return;\n      if (!this.hasAvailableVariant(product)) {\n        this.showToast('Sold out');\n        this.trackReelEvent('sold_out_add_blocked', isCard ? this.productPayload(productOrCard) : this.productPayloadFromProduct(product));\n        return;\n      }\n\n      const productPrice = isCard ? productOrCard.dataset.productPrice : this.formatMoney(product.variants?.[0]?.price);\n\n      this.isSizeOpen = true;\n      this.sizeSheet.classList.add('is-open');\n      this.sizeSheet.setAttribute('aria-hidden', 'false');\n      this.sizeSheet.dataset.productId = productId;\n      this.sizeSheet.dataset.productTitle = productTitle;\n\n      const title = this.sizeSheet.querySelector('[data-size-product-title]');\n      const price = this.sizeSheet.querySelector('[data-size-product-price]');\n      const options = this.sizeSheet.querySelector('[data-size-options]');\n      const message = this.sizeSheet.querySelector('[data-size-message]');\n      const add = this.sizeSheet.querySelector('[data-size-add]');\n\n      if (title) title.textContent = productTitle || '';\n      if (price) price.textContent = productPrice || '';\n      if (message) message.textContent = '';\n      if (options) options.innerHTML = '';\n\n      this.ensureDefaultVariantSelected(product);\n      const selected = this.selectedVariantByProduct.get(productId);\n      \n      (product.variants || []).forEach((variant) => {\n        const button = document.createElement('button');\n        button.type = 'button';\n        button.textContent = variant.title || variant.option1 || 'Size';\n        button.dataset.sizeOption = 'true';\n        button.dataset.variantId = String(variant.id);\n        button.disabled = !variant.available;\n        button.classList.toggle('is-selected', selected === String(variant.id));\n        options?.append(button);\n      });\n\n      if (add) add.disabled = !selected;\n      \n      this.trackReelEvent('size_sheet_opened', { productId, productTitle });\n      this.focusFirstElement(this.sizeSheet);\n    }\n\n    closeSizeSheet() {\n      if (!this.sizeSheet) return;\n      this.isSizeOpen = false;\n      this.sizeSheet.classList.remove('is-open');\n      this.sizeSheet.setAttribute('aria-hidden', 'true');\n    }\n\n    selectSize(variantId) {\n      const card = this.getActiveCard();\n      const productId = this.activeDetailProductId || this.sizeSheet.dataset.productId || card?.dataset.productId;\n      if (!productId || !variantId) return;\n      this.selectedVariantByProduct.set(String(productId), variantId);\n      this.root.querySelectorAll('[data-size-option]').forEach((button) => {\n        button.classList.toggle('is-selected', button.dataset.variantId === variantId);\n      });\n      this.updateAddButtons(productId);\n      this.clearSheetMessages();\n\n      if (this.isCartOpen) {\n        this.renderCartDrawer();\n      }\n\n      this.trackReelEvent('size_selected', { variantId, productId });\n    }\n\n    updateCartTabsUI() {\n      if (!this.cartDrawer) return;\n      const tabs = this.cartDrawer.querySelectorAll('[data-cart-tab]');\n      tabs.forEach((tab) => {\n        const isActive = tab.dataset.cartTab === this.activeCartTab;\n        tab.classList.toggle('is-active', isActive);\n      });\n      \n      const bagContainer = this.cartDrawer.querySelector('[data-cart-items]');\n      const wishlistContainer = this.cartDrawer.querySelector('[data-wishlist-items]');\n      const bagFooter = this.cartDrawer.querySelector('[data-cart-bag-footer]');\n      const footer = this.cartDrawer.querySelector('.dk-reel-cart__footer');\n      \n      if (bagContainer && wishlistContainer && bagFooter && footer) {\n        if (this.activeCartTab === 'bag') {\n          bagContainer.removeAttribute('hidden');\n          wishlistContainer.setAttribute('hidden', 'true');\n          bagFooter.removeAttribute('hidden');\n          footer.removeAttribute('hidden');\n        } else {\n          bagContainer.setAttribute('hidden', 'true');\n          wishlistContainer.removeAttribute('hidden');\n          bagFooter.setAttribute('hidden', 'true');\n          footer.setAttribute('hidden', 'true');\n        }\n      }\n    }\n\n    async addSelectedVariantToCart() {\n      const card = this.getActiveCard();\n      if (!card) return;\n\n      const productId = this.activeDetailProductId || this.sizeSheet.dataset.productId || card.dataset.productId;\n      const variantId = this.selectedVariantByProduct.get(String(productId));\n      const product = this.productsById.get(String(productId));\n      const add = this.sizeSheet.querySelector('[data-size-add]');\n      const message = this.sizeSheet.querySelector('[data-size-message]');\n      const detailAdd = this.detailSheet?.querySelector('[data-detail-add]');\n      const detailMessage = this.detailSheet?.querySelector('[data-detail-message]');\n\n      if (!variantId) {\n        if (message) message.textContent = 'Select size first';\n        if (detailMessage) detailMessage.textContent = 'Select size first';\n        return;\n      }\n      if (!this.variantIsAvailable(product, variantId)) {\n        if (message) message.textContent = 'Sold out';\n        if (detailMessage) detailMessage.textContent = 'Sold out';\n        this.trackReelEvent('sold_out_add_blocked', product ? this.productPayloadFromProduct(product) : this.productPayload(card));\n        return;\n      }\n\n      try {\n        [add, detailAdd].forEach((button) => {\n          if (!button) return;\n          button.disabled = true;\n          button.textContent = 'Adding...';\n        });\n        const sourceCard = String(card.dataset.productId) === String(productId) ? card : null;\n        await this.addVariantToCart(product, variantId, sourceCard);\n        this.closeSizeSheet();\n        this.closeDetailSheet();\n      } catch (error) {\n        if (message) message.textContent = 'Could not add. Try again.';\n        if (detailMessage) detailMessage.textContent = 'Could not add. Try again.';\n        this.trackReelEvent('add_to_cart_failed', { ...this.productPayload(card), variantId, message: error.message });\n      } finally {\n        [add, detailAdd].forEach((button) => {\n          if (!button) return;\n          button.textContent = 'Add to Bag';\n        });\n        this.updateAddButtons(productId);\n      }\n    }\n\n    async addVariantToCart(product, variantId, card = this.getActiveCard()) {\n      const payload = card ? this.productPayload(card) : this.productPayloadFromProduct(product);\n      if (!this.variantIsAvailable(product, variantId)) {\n        this.showToast('Sold out');\n        this.trackReelEvent('sold_out_add_blocked', payload);\n        return;\n      }\n      this.trackReelEvent('add_to_cart_clicked', { ...payload, variantId });\n      const url = window.routes?.cart_add_url ? `${window.routes.cart_add_url}.js` : '/cart/add.js';\n      const response = await fetch(url, {\n        method: 'POST',\n        headers: {\n          Accept: 'application/json',\n          'Content-Type': 'application/json',\n        },\n        body: JSON.stringify({ id: Number(variantId), quantity: 1 }),\n      });\n\n      if (!response.ok) throw new Error('Unable to add item to cart');\n      await response.json();\n      await this.refreshCartCount();\n      this.showToast('Added to bag');\n      this.haptic([12, 32, 18]);\n      this.trackReelEvent('add_to_cart_success', { ...payload, variantId });\n    }\n\n    updateAddButtons(productId) {\n      const selected = this.selectedVariantByProduct.get(String(productId));\n      const product = this.productsById.get(String(productId));\n      const canAdd = Boolean(selected) && this.variantIsAvailable(product, selected);\n      const sizeAdd = this.sizeSheet?.querySelector('[data-size-add]');\n      const detailAdd = this.detailSheet?.querySelector('[data-detail-add]');\n      [sizeAdd, detailAdd].forEach((button) => {\n        if (button) button.disabled = !canAdd;\n      });\n    }\n\n    clearSheetMessages() {\n      this.sizeSheet?.querySelector('[data-size-message]')?.replaceChildren();\n      this.detailSheet?.querySelector('[data-detail-message]')?.replaceChildren();\n    }\n\n    async refreshCartCount() {\n      const response = await fetch(window.routes?.cart_url ? `${window.routes.cart_url}.js` : '/cart.js');\n      if (!response.ok) return;\n      const cart = await response.json();\n      this.updateCartCount(cart.item_count || 0);\n    }\n\n    updateCartCount(count) {\n      const value = Number(count || 0);\n      document.querySelectorAll('[data-dk-cart-count]').forEach((element) => {\n        element.textContent = value;\n      });\n    }\n\n    flash(text) {\n      const feedback = this.root.querySelector('[data-reel-feedback]');\n      if (!feedback) return;\n      feedback.textContent = text;\n      feedback.classList.remove('is-visible');\n      window.requestAnimationFrame(() => feedback.classList.add('is-visible'));\n      window.setTimeout(() => feedback.classList.remove('is-visible'), 540);\n    }\n\n    showToast(message) {\n      if (!this.toast) return;\n      this.toast.textContent = message;\n      this.toast.classList.add('is-visible');\n      window.setTimeout(() => this.toast.classList.remove('is-visible'), 1800);\n    }\n\n    onTutorialClick(event) {\n      if (event.target.closest('[data-tutorial-skip]')) {\n        this.completeTutorial('skipped');\n        return;\n      }\n\n      if (event.target.closest('[data-tutorial-done]')) {\n        this.completeTutorial('completed');\n        return;\n      }\n\n      if (event.target.closest('[data-tutorial-next]')) {\n        this.advanceTutorial('button');\n      }\n    }\n\n    shouldShowTutorial() {\n      // Temporary QA mode: show tutorial every time. Re-enable hasSeenTutorial() before launch.\n      return window.matchMedia?.('(max-width: 768px)').matches;\n    }\n\n    openTutorial() {\n      if (!this.tutorial) return;\n      this.isTutorialOpen = true;\n      this.tutorial.classList.add('is-open');\n      this.tutorial.setAttribute('aria-hidden', 'false');\n      this.renderTutorialStep(0);\n      this.focusFirstElement(this.tutorial);\n      this.trackReelEvent('reel_tutorial_opened', {});\n    }\n\n    closeTutorial(restoreFocus = true) {\n      if (!this.tutorial) return;\n      this.isTutorialOpen = false;\n      this.tutorial.classList.remove('is-open');\n      this.tutorial.setAttribute('aria-hidden', 'true');\n      this.clearTutorialLongPress();\n      this.tutorialPointer = null;\n      if (restoreFocus) this.focusFirstElement(this.root);\n    }\n\n    completeTutorial(outcome) {\n      this.writeTutorialSeen();\n      this.closeTutorial();\n      this.trackReelEvent(outcome === 'completed' ? 'reel_tutorial_completed' : 'reel_tutorial_skipped', {});\n    }\n\n    renderTutorialStep(index) {\n      if (!this.tutorial) return;\n      this.tutorialIndex = Math.max(0, Math.min(this.tutorialSteps.length - 1, index));\n      const step = this.tutorialSteps[this.tutorialIndex];\n      const demo = this.tutorial.querySelector('[data-tutorial-demo]');\n      const title = this.tutorial.querySelector('[data-tutorial-title]');\n      const body = this.tutorial.querySelector('[data-tutorial-body]');\n      const progress = this.tutorial.querySelector('[data-tutorial-progress]');\n      const nextButton = this.tutorial.querySelector('[data-tutorial-next]');\n      const doneButton = this.tutorial.querySelector('[data-tutorial-done]');\n      const isLast = this.tutorialIndex === this.tutorialSteps.length - 1;\n\n      title && (title.textContent = step.title);\n      body && (body.textContent = step.body);\n      progress && (progress.textContent = `Demo ${this.tutorialIndex + 1} of ${this.tutorialSteps.length}`);\n\n      if (demo) {\n        demo.className = `dk-reel-tutorial__demo ${step.className}`;\n      }\n\n      nextButton?.toggleAttribute('hidden', isLast);\n      doneButton?.toggleAttribute('hidden', !isLast);\n      this.trackReelEvent('reel_tutorial_step_seen', {\n        step: step.key,\n        index: this.tutorialIndex,\n      });\n    }\n\n    advanceTutorial(method) {\n      const step = this.tutorialSteps[this.tutorialIndex];\n      this.trackReelEvent('reel_tutorial_step_completed', {\n        step: step?.key,\n        index: this.tutorialIndex,\n        method,\n      });\n\n      if (this.tutorialIndex >= this.tutorialSteps.length - 1) {\n        this.completeTutorial('completed');\n        return;\n      }\n\n      this.renderTutorialStep(this.tutorialIndex + 1);\n      this.haptic(8);\n    }\n\n    onTutorialPointerDown(event) {\n      if (event.target.closest('button, a')) return;\n      const now = performance.now();\n      this.tutorialPointer = {\n        id: event.pointerId,\n        startX: event.clientX,\n        startY: event.clientY,\n        startAt: now,\n      };\n\n      this.tutorial?.setPointerCapture?.(event.pointerId);\n      this.clearTutorialLongPress();\n      this.tutorialLongPressTimer = window.setTimeout(() => {\n        if (this.tutorialSteps[this.tutorialIndex]?.key !== 'hold') return;\n        this.advanceTutorial('gesture_hold');\n      }, 520);\n    }\n\n    onTutorialPointerMove(event) {\n      if (!this.tutorialPointer || event.pointerId !== this.tutorialPointer.id) return;\n      const dx = event.clientX - this.tutorialPointer.startX;\n      const dy = event.clientY - this.tutorialPointer.startY;\n      if (Math.hypot(dx, dy) > 14) this.clearTutorialLongPress();\n    }\n\n    onTutorialPointerUp(event) {\n      if (!this.tutorialPointer || event.pointerId !== this.tutorialPointer.id) return;\n\n      const pointer = this.tutorialPointer;\n      const dx = event.clientX - pointer.startX;\n      const dy = event.clientY - pointer.startY;\n      const dt = Math.max(1, performance.now() - pointer.startAt);\n      const stepKey = this.tutorialSteps[this.tutorialIndex]?.key;\n      this.tutorialPointer = null;\n      this.clearTutorialLongPress();\n\n      if (stepKey === 'double_tap' && Math.hypot(dx, dy) < 12) {\n        const now = performance.now();\n        if (now - this.lastTapAt < 300) {\n          this.lastTapAt = 0;\n          this.advanceTutorial('gesture_double_tap');\n        } else {\n          this.lastTapAt = now;\n        }\n        return;\n      }\n\n      if (dt > 520 || Math.hypot(dx, dy) < 36) return;\n      if (stepKey === 'swipe_up' && dy < -48 && Math.abs(dy) > Math.abs(dx)) {\n        this.advanceTutorial('gesture_swipe_up');\n        return;\n      }\n\n      if (stepKey === 'swipe_right' && dx > 52 && Math.abs(dx) > Math.abs(dy)) {\n        this.advanceTutorial('gesture_swipe_right');\n        return;\n      }\n\n      if (stepKey === 'swipe_left' && dx < -52 && Math.abs(dx) > Math.abs(dy)) {\n        this.advanceTutorial('gesture_swipe_left');\n      }\n    }\n\n    clearTutorialLongPress() {\n      if (this.tutorialLongPressTimer) window.clearTimeout(this.tutorialLongPressTimer);\n      this.tutorialLongPressTimer = null;\n    }\n\n    hasSeenTutorial() {\n      // Launch behavior: read localStorage key dkReelTutorialSeen here.\n      // Temporarily disabled so tutorial appears on every reel open during QA.\n      return false;\n    }\n\n    writeTutorialSeen() {\n      this.tutorialSeenInMemory = true;\n      // Launch behavior: persist localStorage key dkReelTutorialSeen here.\n      // Temporarily disabled so tutorial appears on every reel open during QA.\n    }\n\n    haptic(pattern) {\n      if (!window.navigator?.vibrate) return;\n      this.runSafely(() => window.navigator.vibrate(pattern));\n    }\n\n    trapFocus(event) {\n      const surface = this.activeFocusSurface();\n      const focusable = this.focusableElements(surface);\n      if (!focusable.length) {\n        event.preventDefault();\n        return;\n      }\n\n      const first = focusable[0];\n      const last = focusable[focusable.length - 1];\n\n      if (event.shiftKey && document.activeElement === first) {\n        event.preventDefault();\n        last.focus();\n        return;\n      }\n\n      if (!event.shiftKey && document.activeElement === last) {\n        event.preventDefault();\n        first.focus();\n      }\n    }\n\n    activeFocusSurface() {\n      if (this.isTutorialOpen && this.tutorial) return this.tutorial;\n      if (this.isCartOpen && this.cartDrawer) return this.cartDrawer;\n      if (this.isSizeOpen && this.sizeSheet) return this.sizeSheet;\n      if (this.isDetailOpen && this.detailSheet) return this.detailSheet;\n      return this.root;\n    }\n\n    focusFirstElement(surface) {\n      window.setTimeout(() => {\n        const first = this.focusableElements(surface)[0];\n        first?.focus({ preventScroll: true });\n      }, 0);\n    }\n\n    focusableElements(surface) {\n      if (!surface) return [];\n      const selector = [\n        'a[href]',\n        'button:not([disabled])',\n        'input:not([disabled])',\n        'select:not([disabled])',\n        'textarea:not([disabled])',\n        '[tabindex]:not([tabindex=\"-1\"])',\n      ].join(',');\n\n      return [...surface.querySelectorAll(selector)].filter((element) => (\n        !element.closest('[aria-hidden=\"true\"]')\n        && (element.offsetWidth > 0 || element.offsetHeight > 0 || element.getClientRects().length > 0)\n      ));\n    }\n\n    restoreFocus(element) {\n      if (!element || typeof element.focus !== 'function') return;\n      window.setTimeout(() => element.focus({ preventScroll: true }), 0);\n    }\n\n    getActiveCard() {\n      return this.cards[this.activeIndex];\n    }\n\n    trackCurrentProductSeen() {\n      const card = this.getActiveCard();\n      if (!card) return;\n      this.trackReelEvent('product_seen', this.productPayload(card));\n    }\n\n    productPayload(card) {\n      const product = this.productsById.get(String(card.dataset.productId));\n      const variant = product?.variants?.[0];\n      const price = Number(variant?.price || 0);\n\n      return {\n        productId: card.dataset.productId,\n        handle: card.dataset.productHandle,\n        title: card.dataset.productTitle,\n        index: Number(card.dataset.productIndex || 0),\n        productUrl: card.dataset.productUrl,\n        value: Number.isFinite(price) ? price : undefined,\n        currency: 'INR',\n      };\n    }\n\n    productPayloadFromProduct(product) {\n      const variant = product?.variants?.[0];\n      const price = Number(variant?.price || 0);\n\n      return {\n        productId: product?.id ? String(product.id) : '',\n        handle: product?.handle || '',\n        title: product?.title || '',\n        index: undefined,\n        productUrl: product?.handle ? `/products/${product.handle}` : '',\n        value: Number.isFinite(price) ? price : undefined,\n        currency: 'INR',\n      };\n    }\n\n    trackReelEvent(eventName, payload) {\n      const event = {\n        eventName,\n        payload,\n        sessionId: this.analyticsSessionId,\n        at: new Date().toISOString(),\n      };\n\n      window.DeviKariReelEvents = window.DeviKariReelEvents || [];\n      window.DeviKariReelEvents.push(event);\n      this.emitTrackingHook(event);\n      this.runSafely(() => this.pushDataLayerEvent(event));\n      this.runSafely(() => this.sendMetaPixelEvent(event));\n      this.runSafely(() => this.sendGoogleSheetsAnalytics(event));\n    }\n\n    cartPayload() {\n      const cart = this.lastCart || {};\n      return {\n        itemCount: Number(cart.item_count || 0),\n        value: Number(cart.total_price || 0) / 100,\n        currency: cart.currency || 'INR',\n      };\n    }\n\n    pushDataLayerEvent(event) {\n      if (!Array.isArray(window.dataLayer)) return;\n      window.dataLayer.push({\n        event: `devikari_${event.eventName}`,\n        devikari: event,\n      });\n    }\n\n    sendMetaPixelEvent(event) {\n      if (typeof window.fbq !== 'function') return;\n\n      const payload = event.payload || {};\n      const metaPayload = {\n        content_ids: payload.productId ? [String(payload.productId)] : undefined,\n        content_name: payload.title,\n        content_type: payload.productId ? 'product' : undefined,\n        value: payload.value,\n        currency: payload.currency || 'INR',\n      };\n\n      if (event.eventName === 'product_detail_opened') {\n        window.fbq('track', 'ViewContent', metaPayload);\n        return;\n      }\n\n      if (event.eventName === 'add_to_cart_success') {\n        window.fbq('track', 'AddToCart', {\n          ...metaPayload,\n          contents: payload.variantId ? [{ id: String(payload.variantId), quantity: 1 }] : undefined,\n        });\n        return;\n      }\n\n      if (event.eventName === 'checkout_clicked') {\n        window.fbq('track', 'InitiateCheckout', {\n          value: payload.value,\n          currency: payload.currency || 'INR',\n          num_items: payload.itemCount,\n        });\n        return;\n      }\n\n      const customEvents = new Set([\n        'reel_opened',\n        'reel_closed',\n        'reel_tutorial_opened',\n        'reel_tutorial_step_seen',\n        'reel_tutorial_step_completed',\n        'reel_tutorial_completed',\n        'reel_tutorial_skipped',\n        'product_seen',\n        'product_liked',\n        'product_image_next',\n        'size_selected',\n        'cart_drawer_opened',\n      ]);\n\n      if (customEvents.has(event.eventName)) {\n        window.fbq('trackCustom', `DeviKari_${event.eventName}`, metaPayload);\n      }\n    }\n\n    emitTrackingHook(event) {\n      if (typeof window.DeviKariTrackReelEvent !== 'function') return;\n      this.runSafely(() => window.DeviKariTrackReelEvent(event));\n    }\n\n    sendGoogleSheetsAnalytics(event) {\n      if (!this.analyticsUrl) return;\n      if (!['product_seen', 'product_liked'].includes(event.eventName)) return;\n\n      const payload = event.payload || {};\n      const body = JSON.stringify({\n        source: 'devikari-reel',\n        eventName: event.eventName,\n        at: event.at,\n        sessionId: event.sessionId,\n        visitorId: this.analyticsVisitorId,\n        productId: payload.productId || payload.id || '',\n        productName: payload.title || '',\n        handle: payload.handle || '',\n        productUrl: payload.productUrl || '',\n        index: payload.index,\n      });\n\n      if (navigator.sendBeacon) {\n        const blob = new Blob([body], { type: 'text/plain;charset=utf-8' });\n        if (navigator.sendBeacon(this.analyticsUrl, blob)) return;\n      }\n\n      fetch(this.analyticsUrl, {\n        method: 'POST',\n        mode: 'no-cors',\n        keepalive: true,\n        headers: {\n          'Content-Type': 'text/plain;charset=utf-8',\n        },\n        body,\n      }).catch(() => {});\n    }\n\n    runSafely(callback) {\n      try {\n        callback();\n      } catch {\n        // Analytics should never block commerce interactions.\n      }\n    }\n\n    getAnalyticsSessionId() {\n      const key = 'dkReelSessionId';\n      try {\n        const existing = sessionStorage.getItem(key);\n        if (existing) return existing;\n\n        const value = window.crypto?.randomUUID?.() || `dk_${Date.now()}_${Math.random().toString(16).slice(2)}`;\n        sessionStorage.setItem(key, value);\n        return value;\n      } catch {\n        return `dk_${Date.now()}_${Math.random().toString(16).slice(2)}`;\n      }\n    }\n\n    getAnalyticsVisitorId() {\n      const key = 'dkReelVisitorId';\n      try {\n        const existing = localStorage.getItem(key);\n        if (existing) return existing;\n\n        const value = window.crypto?.randomUUID?.() || `dkv_${Date.now()}_${Math.random().toString(16).slice(2)}`;\n        localStorage.setItem(key, value);\n        return value;\n      } catch {\n        return `dkv_${Date.now()}_${Math.random().toString(16).slice(2)}`;\n      }\n    }\n\n    readSessionList(key) {\n      try {\n        return JSON.parse(sessionStorage.getItem(key) || '[]');\n      } catch {\n        return [];\n      }\n    }\n\n    writeSessionList(key, values) {\n      try {\n        sessionStorage.setItem(key, JSON.stringify(values));\n      } catch {\n        // sessionStorage can be blocked in private browsing.\n      }\n    }\n\n    readLocalList(key) {\n      try {\n        return JSON.parse(localStorage.getItem(key) || '[]');\n      } catch {\n        return [];\n      }\n    }\n\n    writeLocalList(key, values) {\n      try {\n        localStorage.setItem(key, JSON.stringify(values));\n      } catch {\n        // localStorage can be blocked in private browsing.\n      }\n    }\n  }\n\n  window.addEventListener('DOMContentLoaded', () => {\n    let likedProducts = [];\n    try {\n      likedProducts = JSON.parse(localStorage.getItem('dkLikedProducts') || '[]');\n    } catch (e) {\n      likedProducts = [];\n    }\n    const countVal = Array.isArray(likedProducts) ? likedProducts.length : 0;\n\n    document.querySelectorAll('[data-dk-wishlist-count]').forEach(el => {\n      el.textContent = countVal;\n      el.toggleAttribute('hidden', countVal === 0);\n    });\n    document.querySelectorAll('[data-dk-wishlist-count-bubble]').forEach(el => {\n      el.toggleAttribute('hidden', countVal === 0);\n    });\n\n    const root = document.querySelector('[data-reel-overlay]');\n    if (root) {\n      const reel = new DeviKariReel(root);\n      window.DeviKariReel = reel;\n\n      // Handle product page wishlist toggle click events\n      document.body.addEventListener('click', (event) => {\n        const toggleBtn = event.target.closest('[data-dk-wishlist-toggle]');\n        if (toggleBtn) {\n          event.preventDefault();\n          const productId = String(toggleBtn.dataset.productId);\n          \n          // Get selected variant ID from the product page form input\n          const selectedVariantInput = document.querySelector(`form[id^=\"product-form-\"] input[name=\"id\"]`);\n          const selectedVariantId = selectedVariantInput && !selectedVariantInput.disabled ? selectedVariantInput.value : '';\n          \n          const productData = {\n            id: productId,\n            title: toggleBtn.dataset.productTitle || '',\n            handle: toggleBtn.dataset.productHandle || '',\n            price: toggleBtn.dataset.productPrice || '',\n            image: toggleBtn.dataset.productImage || ''\n          };\n\n          if (selectedVariantId) {\n            productData.selected_variant_id = String(selectedVariantId);\n          }\n\n          reel.toggleLikeProduct(productData);\n        }\n      });\n\n    }\n  });\n})();\n"],
  "mappings": "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",
  "names": ["response"]
}
