{
  "version": 3,
  "sources": ["/cdn/shop/t/42/assets/povellea-card-v2.js?pcc_build=2026072006"],
  "sourcesContent": ["/* POVELLEA CARD JS BUILD: 2026-07-22-DIRHAM-01 */\r\n/* Povellea collection cards \u2014 variants, AJAX cart state and quick view. */\r\n(function () {\r\n  'use strict';\r\n\r\n  if (customElements.get('povellea-collection-grid-v2')) return;\r\n\r\n  const PV_L10N = (window.PovelleaI18n && window.PovelleaI18n.listing) || {};\r\n\r\n  class PovelleaCollectionGrid extends HTMLElement {\r\n    constructor() {\r\n      super();\r\n      this.controller = null;\r\n      this.signal = null;\r\n      this.config = {};\r\n      this.cart = null;\r\n      this.cartRefreshTimer = null;\r\n      this.toastTimer = null;\r\n      this.observer = null;\r\n      this.variantObserver = null;\r\n      this.modal = null;\r\n      this.modalContent = null;\r\n      this.modalRecord = null;\r\n      this.modalImages = [];\r\n      this.modalIndex = 0;\r\n      this.modalLastFocused = null;\r\n      this.modalCloseTimer = null;\r\n      this.modalTransitionTimer = null;\r\n      this.modalTransitioning = false;\r\n      this.modalPreloads = [];\r\n      this.modalPreloadedSources = new Set();\r\n      this.modalPointerStart = null;\r\n      this.lockedScrollY = 0;\r\n      this.bodyWasLocked = false;\r\n      this.filterBusy = false;\r\n      this.filterLastFocused = null;\r\n      this.filterCloseTimer = null;\r\n    }\r\n\r\n    connectedCallback() {\r\n      if (this.controller) return;\r\n\r\n      this.controller = new AbortController();\r\n      this.signal = this.controller.signal;\r\n      this.config = this.readJson(this.querySelector('[data-povellea-config]')) || {};\r\n      this.toast = this.querySelector('[data-povellea-toast]');\r\n\r\n      this.initializeModal();\r\n      this.initializeEvents();\r\n      this.initializeObserver();\r\n      this.initializeVariantObserver();\r\n      this.hydrateCards();\r\n      this.refreshCart();\r\n    }\r\n\r\n    disconnectedCallback() {\r\n      if (!this.controller) return;\r\n\r\n      this.controller.abort();\r\n      this.controller = null;\r\n      this.signal = null;\r\n\r\n      if (this.cartRefreshTimer) clearTimeout(this.cartRefreshTimer);\r\n      if (this.toastTimer) clearTimeout(this.toastTimer);\r\n      if (this.modalCloseTimer) clearTimeout(this.modalCloseTimer);\r\n      if (this.modalTransitionTimer) clearTimeout(this.modalTransitionTimer);\r\n      if (this.filterCloseTimer) clearTimeout(this.filterCloseTimer);\r\n      this.cartRefreshTimer = null;\r\n      this.toastTimer = null;\r\n      this.modalCloseTimer = null;\r\n      this.modalTransitionTimer = null;\r\n      this.modalTransitioning = false;\r\n      this.modalPreloads = [];\r\n      this.modalPreloadedSources.clear();\r\n      this.filterCloseTimer = null;\r\n\r\n      this.observer?.disconnect();\r\n      this.observer = null;\r\n      this.variantObserver?.disconnect();\r\n      this.variantObserver = null;\r\n\r\n      this.closeModal(true);\r\n      this.closeFilter(true, false);\r\n      this.modal?.remove();\r\n      this.modal = null;\r\n\r\n      if (this.toast && !this.contains(this.toast)) this.toast.remove();\r\n      this.cart = null;\r\n    }\r\n\r\n    listen(target, eventName, handler, options) {\r\n      if (!target || !this.signal) return;\r\n      target.addEventListener(\r\n        eventName,\r\n        handler,\r\n        Object.assign({}, options || {}, { signal: this.signal })\r\n      );\r\n    }\r\n\r\n    readJson(node) {\r\n      if (!node) return null;\r\n      try {\r\n        return JSON.parse(node.textContent);\r\n      } catch (error) {\r\n        console.error('[Povellea collection] Invalid JSON.', error);\r\n        return null;\r\n      }\r\n    }\r\n\r\n    initializeEvents() {\r\n      this.listen(this, 'click', (event) => {\r\n        const optionButton = event.target.closest('[data-option-value]');\r\n        if (optionButton && this.contains(optionButton)) {\r\n          this.selectOption(optionButton);\r\n          return;\r\n        }\r\n\r\n        const addButton = event.target.closest('[data-cart-add]');\r\n        if (addButton && this.contains(addButton)) {\r\n          const record = this.getRecord(addButton.closest('[data-povellea-card]'));\r\n          if (record) this.changeQuantity(record, 1);\r\n          return;\r\n        }\r\n\r\n        const minusButton = event.target.closest('[data-cart-minus]');\r\n        if (minusButton && this.contains(minusButton)) {\r\n          const record = this.getRecord(minusButton.closest('[data-povellea-card]'));\r\n          if (record) this.changeQuantity(record, Math.max(0, record.quantity - 1));\r\n          return;\r\n        }\r\n\r\n        const plusButton = event.target.closest('[data-cart-plus]');\r\n        if (plusButton && this.contains(plusButton)) {\r\n          const record = this.getRecord(plusButton.closest('[data-povellea-card]'));\r\n          if (record) this.changeQuantity(record, record.quantity + 1);\r\n          return;\r\n        }\r\n\r\n        const viewButton = event.target.closest('[data-product-view]');\r\n        if (viewButton && this.contains(viewButton)) {\r\n          const record = this.getRecord(viewButton.closest('[data-povellea-card]'));\r\n          if (record) this.openModal(record, viewButton);\r\n          return;\r\n        }\r\n\r\n        const filterOpen = event.target.closest('[data-filter-open]');\r\n        if (filterOpen && this.contains(filterOpen)) {\r\n          event.preventDefault();\r\n          this.openFilter(filterOpen);\r\n          return;\r\n        }\r\n\r\n        const filterClose = event.target.closest('[data-filter-close]');\r\n        if (filterClose && this.contains(filterClose)) {\r\n          event.preventDefault();\r\n          this.closeFilter();\r\n          return;\r\n        }\r\n\r\n        const filterUrl = event.target.closest('[data-filter-url]');\r\n        if (filterUrl && this.contains(filterUrl)) {\r\n          event.preventDefault();\r\n          this.renderCollectionUrl(filterUrl.href);\r\n        }\r\n      });\r\n\r\n      this.listen(this, 'submit', (event) => {\r\n        const form = event.target.closest('[data-filter-form]');\r\n        if (!form || !this.contains(form)) return;\r\n        event.preventDefault();\r\n        this.applyFilterForm(form);\r\n      });\r\n\r\n      this.listen(this, 'change', (event) => {\r\n        const sortSelect = event.target.closest('[data-sort-select]');\r\n        if (sortSelect && this.contains(sortSelect)) {\r\n          this.applySort(sortSelect.value);\r\n          return;\r\n        }\r\n\r\n        const filterForm = event.target.closest('[data-filter-form]');\r\n        if (filterForm && this.contains(filterForm)) this.scheduleFilterPreview(filterForm);\r\n      });\r\n\r\n      this.listen(this, 'input', (event) => {\r\n        const priceInput = event.target.closest('[data-filter-form] input[type=\"number\"]');\r\n        const filterForm = priceInput?.closest('[data-filter-form]');\r\n        if (filterForm && this.contains(filterForm)) this.scheduleFilterPreview(filterForm);\r\n      });\r\n\r\n      const warmVariantImages = (event) => {\r\n        const optionButton = event.target.closest('[data-option-value]');\r\n        if (!optionButton || !this.contains(optionButton)) return;\r\n        const record = this.getRecord(optionButton.closest('[data-povellea-card]'));\r\n        if (record) this.preloadVariantImages(record);\r\n      };\r\n\r\n      this.listen(this, 'pointerover', warmVariantImages, { passive: true });\r\n      this.listen(this, 'focusin', warmVariantImages);\r\n\r\n      this.listen(document, 'keydown', (event) => {\r\n        const drawer = this.querySelector('[data-filter-drawer]');\r\n        if (event.key === 'Escape' && drawer && !drawer.hidden) {\r\n          event.preventDefault();\r\n          this.closeFilter();\r\n          return;\r\n        }\r\n\r\n        if (event.key === 'Tab' && drawer && !drawer.hidden) this.trapFilterFocus(event, drawer);\r\n      });\r\n\r\n      this.listen(window, 'popstate', () => {\r\n        this.renderCollectionUrl(window.location.href, false);\r\n      });\r\n\r\n      const handleCartEvent = (event) => {\r\n        if (event.detail?.cart?.items) {\r\n          this.cart = event.detail.cart;\r\n          this.syncAllCards();\r\n          return;\r\n        }\r\n        this.scheduleCartRefresh();\r\n      };\r\n\r\n      this.listen(document, 'cart:change', handleCartEvent);\r\n      this.listen(document, 'cart:updated', handleCartEvent);\r\n      this.listen(document.documentElement, 'cart:refresh', handleCartEvent);\r\n    }\r\n\r\n    openFilter(trigger) {\r\n      const drawer = this.querySelector('[data-filter-drawer]');\r\n      if (!drawer) return;\r\n\r\n      if (this.filterCloseTimer) clearTimeout(this.filterCloseTimer);\r\n      this.filterLastFocused = trigger || document.activeElement;\r\n      trigger?.setAttribute('aria-expanded', 'true');\r\n      drawer.hidden = false;\r\n      document.documentElement.classList.add('povellea-filter-open');\r\n\r\n      requestAnimationFrame(() => {\r\n        drawer.classList.add('is-open');\r\n        drawer.querySelector('[data-filter-close]')?.focus({ preventScroll: true });\r\n      });\r\n    }\r\n\r\n    closeFilter(immediate, restoreFocus = true) {\r\n      const drawer = this.querySelector('[data-filter-drawer]');\r\n      document.documentElement.classList.remove('povellea-filter-open');\r\n\r\n      if (!drawer || drawer.hidden) {\r\n        this.filterLastFocused?.setAttribute?.('aria-expanded', 'false');\r\n        if (!restoreFocus) this.filterLastFocused = null;\r\n        return;\r\n      }\r\n\r\n      drawer.classList.remove('is-open');\r\n      const finish = () => {\r\n        if (drawer.isConnected) drawer.hidden = true;\r\n        this.filterLastFocused?.setAttribute?.('aria-expanded', 'false');\r\n        if (restoreFocus && this.filterLastFocused?.isConnected) {\r\n          this.filterLastFocused.focus({ preventScroll: true });\r\n        }\r\n        this.filterLastFocused = null;\r\n      };\r\n\r\n      if (immediate) {\r\n        finish();\r\n      } else {\r\n        if (this.filterCloseTimer) clearTimeout(this.filterCloseTimer);\r\n        this.filterCloseTimer = window.setTimeout(finish, 220);\r\n      }\r\n    }\r\n\r\n    applyFilterForm(form) {\r\n      this.renderCollectionUrl(this.buildFilterUrl(form).href);\r\n    }\r\n\r\n    buildFilterUrl(form) {\r\n      const url = new URL(form.action, window.location.origin);\r\n      const formData = new FormData(form);\r\n\r\n      for (const [name, value] of formData.entries()) {\r\n        const cleanValue = String(value).trim();\r\n        if (cleanValue) url.searchParams.append(name, cleanValue);\r\n      }\r\n\r\n      url.searchParams.delete('page');\r\n      return url;\r\n    }\r\n\r\n    scheduleFilterPreview(form) {\r\n      const applyButton = form.querySelector('[data-filter-apply]');\r\n      const estimatedCount = this.estimateFilterCount(form);\r\n      if (estimatedCount === null) {\r\n        if (applyButton) applyButton.textContent = PV_L10N.showMatchingProducts || 'Show matching products';\r\n        return;\r\n      }\r\n      this.setFilterCountButton(applyButton, estimatedCount);\r\n    }\r\n\r\n    estimateFilterCount(form) {\r\n      const applyButton = form.querySelector('[data-filter-apply]');\r\n      const baseCount = Number(applyButton?.dataset.baseCount || applyButton?.dataset.resultCount || 0);\r\n      const groupCounts = [];\r\n      let ambiguous = Array.from(form.querySelectorAll('input[type=\"number\"]'))\r\n        .some((input) => String(input.value || '').trim() !== '');\r\n\r\n      form.querySelectorAll('.povellea-filter__group').forEach((group) => {\r\n        const selected = Array.from(group.querySelectorAll('input[type=\"checkbox\"]:checked'));\r\n        if (!selected.length) return;\r\n        if (selected.length > 1) ambiguous = true;\r\n\r\n        const total = selected.reduce((sum, input) => {\r\n          const valueCount = Number(input.closest('.povellea-filter__value')?.querySelector('small')?.textContent || 0);\r\n          return sum + valueCount;\r\n        }, 0);\r\n\r\n        groupCounts.push(total);\r\n      });\r\n\r\n      if (groupCounts.length > 1) ambiguous = true;\r\n      if (ambiguous) return null;\r\n      return groupCounts.length ? Math.min(...groupCounts) : baseCount;\r\n    }\r\n\r\n    setFilterCountButton(button, count) {\r\n      if (!button || count === undefined || count === null || Number.isNaN(Number(count))) return;\r\n      const safeCount = Math.max(0, Number(count));\r\n      button.dataset.resultCount = String(safeCount);\r\n      button.textContent = safeCount === 1\r\n        ? (PV_L10N.showProduct || 'Show __COUNT__ product').replace('__COUNT__', safeCount)\r\n        : (PV_L10N.showProducts || 'Show __COUNT__ products').replace('__COUNT__', safeCount);\r\n    }\r\n\r\n    trapFilterFocus(event, drawer) {\r\n      const panel = drawer.querySelector('.povellea-filter__panel');\r\n      if (!panel) return;\r\n\r\n      const focusable = Array.from(panel.querySelectorAll(\r\n        'button:not([disabled]):not([hidden]), a[href]:not([hidden]), input:not([disabled]):not([type=\"hidden\"]), select:not([disabled]), summary, [tabindex]:not([tabindex=\"-1\"])'\r\n      )).filter((element) => element.offsetParent !== null);\r\n\r\n      if (!focusable.length) return;\r\n      const first = focusable[0];\r\n      const last = focusable[focusable.length - 1];\r\n\r\n      if (event.shiftKey && document.activeElement === first) {\r\n        event.preventDefault();\r\n        last.focus();\r\n      } else if (!event.shiftKey && document.activeElement === last) {\r\n        event.preventDefault();\r\n        first.focus();\r\n      }\r\n    }\r\n\r\n    applySort(sortValue) {\r\n      const url = new URL(window.location.href);\r\n      if (sortValue) {\r\n        url.searchParams.set('sort_by', sortValue);\r\n      } else {\r\n        url.searchParams.delete('sort_by');\r\n      }\r\n      url.searchParams.delete('page');\r\n      this.renderCollectionUrl(url.href);\r\n    }\r\n\r\n    async renderCollectionUrl(href, updateHistory = true) {\r\n      if (this.filterBusy) return;\r\n\r\n      const publicUrl = new URL(href, window.location.origin);\r\n      if (publicUrl.origin !== window.location.origin) {\r\n        window.location.assign(publicUrl.href);\r\n        return;\r\n      }\r\n\r\n      publicUrl.searchParams.delete('section_id');\r\n      const requestUrl = new URL(publicUrl.href);\r\n      requestUrl.searchParams.set('section_id', this.config.sectionId);\r\n\r\n      this.filterBusy = true;\r\n      this.classList.add('is-filter-loading');\r\n      this.closeFilter(true, false);\r\n\r\n      try {\r\n        const response = await fetch(requestUrl.href, {\r\n          credentials: 'same-origin',\r\n          headers: { Accept: 'text/html', 'X-Povellea-Collection': '1' }\r\n        });\r\n\r\n        if (!response.ok) throw new Error(`Shopify filter request failed (${response.status}).`);\r\n\r\n        const html = await response.text();\r\n        const documentFragment = new DOMParser().parseFromString(html, 'text/html');\r\n        const freshRoot = documentFragment.querySelector('povellea-collection-grid-v2');\r\n        const freshFilter = freshRoot?.querySelector('[data-povellea-filter-shell]');\r\n        const freshGrid = freshRoot?.querySelector('#ProductGridContainer');\r\n        const currentFilter = this.querySelector('[data-povellea-filter-shell]');\r\n        const currentGrid = this.querySelector('#ProductGridContainer');\r\n\r\n        if (!freshRoot || !freshGrid || !currentGrid) {\r\n          throw new Error('Shopify returned an incomplete collection section.');\r\n        }\r\n\r\n        if (freshFilter && currentFilter) currentFilter.replaceWith(freshFilter);\r\n        currentGrid.innerHTML = freshGrid.innerHTML;\r\n\r\n        if (updateHistory) history.pushState({}, '', publicUrl.href);\r\n        this.hydrateCards();\r\n        this.syncAllCards();\r\n        window.scrollTo({\r\n          top: Math.max(0, this.getBoundingClientRect().top + window.scrollY - 110),\r\n          behavior: 'smooth'\r\n        });\r\n      } catch (error) {\r\n        console.error('[Povellea collection] Filtering failed.', error);\r\n        this.showToast(this.config.labels?.error || PV_L10N.errorGeneric || 'Something went wrong. Please try again.');\r\n      } finally {\r\n        this.filterBusy = false;\r\n        this.classList.remove('is-filter-loading');\r\n      }\r\n    }\r\n\r\n    initializeObserver() {\r\n      if (!('MutationObserver' in window)) return;\r\n\r\n      this.observer = new MutationObserver((mutations) => {\r\n        const addedCards = mutations.some((mutation) => {\r\n          return Array.from(mutation.addedNodes).some((node) => {\r\n            if (node.nodeType !== 1) return false;\r\n            if (node.matches?.('[data-povellea-card]')) return !node.__povelleaRecord;\r\n            return Array.from(node.querySelectorAll?.('[data-povellea-card]') || [])\r\n              .some((card) => !card.__povelleaRecord);\r\n          });\r\n        });\r\n\r\n        if (!addedCards) return;\r\n        this.hydrateCards();\r\n        this.syncAllCards();\r\n      });\r\n\r\n      this.observer.observe(this, { childList: true, subtree: true });\r\n    }\r\n\r\n    initializeVariantObserver() {\r\n      if (!('IntersectionObserver' in window)) return;\r\n\r\n      this.variantObserver = new IntersectionObserver((entries) => {\r\n        entries.forEach((entry) => {\r\n          if (!entry.isIntersecting) return;\r\n          const record = this.getRecord(entry.target);\r\n          if (record) this.preloadVariantImages(record);\r\n          this.variantObserver?.unobserve(entry.target);\r\n        });\r\n      }, { rootMargin: '320px 0px' });\r\n    }\r\n\r\n    preloadVariantImages(record) {\r\n      if (!record?.data?.variants) return;\r\n\r\n      record.data.variants.forEach((variant) => {\r\n        const src = variant.image?.card;\r\n        if (!src || record.preloadedVariantUrls.has(src)) return;\r\n\r\n        record.preloadedVariantUrls.add(src);\r\n        const image = new Image();\r\n        image.decoding = 'async';\r\n        image.src = src;\r\n        record.variantPreloads.push(image);\r\n      });\r\n    }\r\n\r\n    updateCardVariantImage(record, variant) {\r\n      const primaryImage = record.element.querySelector('.povellea-collection-card__image--primary');\r\n      if (!primaryImage || !record.defaultImage) return;\r\n\r\n      const target = variant.image?.card\r\n        ? {\r\n            src: variant.image.card,\r\n            srcset: '',\r\n            alt: variant.image.alt || record.data.title || ''\r\n          }\r\n        : record.defaultImage;\r\n\r\n      const currentTarget = primaryImage.dataset.variantImageSrc || primaryImage.getAttribute('src') || '';\r\n      if (currentTarget === target.src) return;\r\n\r\n      const token = ++record.imageSwitchToken;\r\n      const loader = new Image();\r\n      loader.decoding = 'async';\r\n      let applied = false;\r\n\r\n      const applyImage = () => {\r\n        if (applied) return;\r\n        if (token !== record.imageSwitchToken || Number(record.selectedVariant?.id) !== Number(variant.id)) return;\r\n        applied = true;\r\n\r\n        primaryImage.classList.remove('is-variant-switching');\r\n        if (target.srcset) {\r\n          primaryImage.setAttribute('srcset', target.srcset);\r\n        } else {\r\n          primaryImage.removeAttribute('srcset');\r\n        }\r\n        primaryImage.src = target.src;\r\n        primaryImage.alt = target.alt;\r\n        primaryImage.dataset.variantImageSrc = target.src;\r\n        void primaryImage.offsetWidth;\r\n        primaryImage.classList.add('is-variant-switching');\r\n      };\r\n\r\n      loader.onload = applyImage;\r\n      loader.onerror = () => {};\r\n      loader.src = target.src;\r\n      if (loader.complete && loader.naturalWidth > 0) applyImage();\r\n\r\n      this.updateCardHoverImage(record, variant);\r\n    }\r\n\r\n    // The hover reveal has to follow the selection, not sit on the product's\r\n    // second photograph: a Beige card was revealing the Amber one underneath.\r\n    // Only products whose imagery is answered from ALT text are touched, and a\r\n    // combination with no second photograph of its own hides the reveal rather\r\n    // than showing another colour or the opposite side.\r\n    updateCardHoverImage(record, variant) {\r\n      if (!record?.data?.alt_variant_media) return;\r\n\r\n      const hoverImage = record.element.querySelector('.povellea-collection-card__image--secondary');\r\n      if (!hoverImage) return;\r\n\r\n      const hover = variant.hover;\r\n      if (!hover?.card) {\r\n        hoverImage.hidden = true;\r\n        return;\r\n      }\r\n\r\n      if (hoverImage.dataset.variantImageSrc === hover.card) {\r\n        hoverImage.hidden = false;\r\n        return;\r\n      }\r\n\r\n      // Hide it for as long as it is still the PREVIOUS selection's photograph.\r\n      // The replacement is fetched on demand and a cold one can take a second,\r\n      // which is long enough to hover in - and what would be revealed in that\r\n      // window is the side the shopper just moved away from.\r\n      hoverImage.hidden = true;\r\n\r\n      const loader = new Image();\r\n      loader.decoding = 'async';\r\n      let applied = false;\r\n\r\n      const applyHover = () => {\r\n        if (applied) return;\r\n        if (Number(record.selectedVariant?.id) !== Number(variant.id)) return;\r\n        applied = true;\r\n\r\n        hoverImage.removeAttribute('srcset');\r\n        hoverImage.src = hover.card;\r\n        hoverImage.alt = hover.alt || record.data.title || '';\r\n        hoverImage.dataset.variantImageSrc = hover.card;\r\n        hoverImage.hidden = false;\r\n      };\r\n\r\n      loader.onload = applyHover;\r\n      loader.onerror = () => {\r\n        hoverImage.hidden = true;\r\n      };\r\n      loader.src = hover.card;\r\n      if (loader.complete && loader.naturalWidth > 0) applyHover();\r\n    }\r\n\r\n    hydrateCards() {\r\n      this.querySelectorAll('[data-povellea-card]').forEach((card) => {\r\n        const record = this.getRecord(card);\r\n        if (!record) return;\r\n\r\n        if (this.variantObserver) {\r\n          this.variantObserver.observe(card);\r\n        } else {\r\n          this.preloadVariantImages(record);\r\n        }\r\n      });\r\n    }\r\n\r\n    getRecord(card) {\r\n      if (!card) return null;\r\n      if (card.__povelleaRecord) return card.__povelleaRecord;\r\n\r\n      const data = this.readJson(card.querySelector('[data-product-json]'));\r\n      if (!data || !Array.isArray(data.variants)) return null;\r\n\r\n      const selectedId = Number(card.dataset.selectedVariantId || 0);\r\n      const selectedVariant = data.variants.find((variant) => Number(variant.id) === selectedId)\r\n        || data.variants.find((variant) => variant.available)\r\n        || data.variants[0]\r\n        || null;\r\n\r\n      // D1 (Anas 2026-10-02): a card with options opens with NOTHING chosen,\r\n      // like the product page. A group with a single value is the only one\r\n      // answered for the customer. `complete` gates the add to cart.\r\n      const optionGroups = Array.from(card.querySelectorAll('[data-variant-options] fieldset[data-option-index]'));\r\n      const hasChoice = optionGroups.length > 0;\r\n      const openingOptions = hasChoice\r\n        ? (selectedVariant?.options || []).map((value, index) => {\r\n          const values = new Set(data.variants.map((variant) => variant.options?.[index]));\r\n          return values.size === 1 ? value : null;\r\n        })\r\n        : (selectedVariant?.options ? selectedVariant.options.slice() : []);\r\n\r\n      const record = {\r\n        element: card,\r\n        data,\r\n        selectedVariant,\r\n        selectedOptions: openingOptions,\r\n        complete: !hasChoice || openingOptions.every((value) => value != null),\r\n        quantity: 0,\r\n        lineKey: null,\r\n        busy: false,\r\n        defaultImage: null,\r\n        variantPreloads: [],\r\n        preloadedVariantUrls: new Set(),\r\n        imageSwitchToken: 0,\r\n        hasInteractedWithVariant: false\r\n      };\r\n\r\n      const primaryImage = card.querySelector('.povellea-collection-card__image--primary');\r\n      if (primaryImage) {\r\n        record.defaultImage = {\r\n          src: primaryImage.getAttribute('src') || primaryImage.currentSrc || '',\r\n          srcset: primaryImage.getAttribute('srcset') || '',\r\n          alt: primaryImage.getAttribute('alt') || data.title || ''\r\n        };\r\n        primaryImage.dataset.variantImageSrc = record.defaultImage.src;\r\n      }\r\n\r\n      const hoverImage = card.querySelector('.povellea-collection-card__image--secondary');\r\n      if (hoverImage && !hoverImage.dataset.variantImageSrc) {\r\n        hoverImage.dataset.variantImageSrc = hoverImage.getAttribute('src') || '';\r\n      }\r\n\r\n      card.__povelleaRecord = record;\r\n      this.renderVariant(record);\r\n      return record;\r\n    }\r\n\r\n    selectOption(button) {\r\n      if (button.disabled) return;\r\n\r\n      const card = button.closest('[data-povellea-card]');\r\n      const record = this.getRecord(card);\r\n      if (!record || record.busy) return;\r\n\r\n      const optionIndex = Number(button.dataset.optionIndex);\r\n      const value = button.dataset.optionValue;\r\n      if (!Number.isInteger(optionIndex) || value == null) return;\r\n\r\n      const desiredOptions = record.selectedOptions.slice();\r\n      desiredOptions[optionIndex] = value;\r\n      record.selectedOptions = desiredOptions;\r\n      record.hasInteractedWithVariant = true;\r\n\r\n      // D1: only the customer's own choices are kept. Until every group is\r\n      // chosen, the card previews the first variant that matches what IS\r\n      // chosen (photo and price) without arming the add to cart.\r\n      const complete = desiredOptions.every((option) => option != null && option !== '');\r\n      const matches = (candidate) => desiredOptions.every((option, index) => {\r\n        return option == null || option === '' || candidate.options?.[index] === option;\r\n      });\r\n      const variant = complete\r\n        ? record.data.variants.find((candidate) => candidate.options?.every((option, index) => option === desiredOptions[index]))\r\n        : (record.data.variants.find((candidate) => candidate.available && matches(candidate))\r\n          || record.data.variants.find(matches));\r\n\r\n      if (variant) record.selectedVariant = variant;\r\n      record.complete = Boolean(complete && variant);\r\n\r\n      this.renderVariant(record);\r\n      this.syncChoicePrompt(record);\r\n      this.syncRecordFromCart(record);\r\n    }\r\n\r\n    choiceText(groupName) {\r\n      const ar = (document.documentElement.lang || 'en').toLowerCase().indexOf('ar') === 0;\r\n      const strings = (window.PovelleaI18n && window.PovelleaI18n.choice) || {};\r\n      const name = String(groupName || '').trim();\r\n      const key = name.toLowerCase();\r\n      if (/colou?r|\u0627\u0644\u0644\u0648\u0646|\u0644\u0648\u0646/.test(key)) return strings.colour || (ar ? '\u0627\u062E\u062A\u0631 \u0627\u0644\u0644\u0648\u0646' : 'Choose a colour');\r\n      if (/side|orientation|\u0627\u0644\u062C\u0647\u0629|\u0627\u0644\u0627\u062A\u062C\u0627\u0647|\u062C\u0647\u0629/.test(key)) return strings.side || (ar ? '\u0627\u062E\u062A\u0631 \u0627\u0644\u062C\u0647\u0629' : 'Choose a side');\r\n      if (/size|\u0627\u0644\u0645\u0642\u0627\u0633|\u0627\u0644\u062D\u062C\u0645|\u0645\u0642\u0627\u0633/.test(key)) return strings.size || (ar ? '\u0627\u062E\u062A\u0631 \u0627\u0644\u0645\u0642\u0627\u0633' : 'Choose a size');\r\n      return (strings.option || (ar ? '\u0627\u062E\u062A\u0631 __NAME__' : 'Choose __NAME__')).replace('__NAME__', ar ? name : name.toLowerCase());\r\n    }\r\n\r\n    // Shows (show = true) or refreshes the quiet \"Choose a colour\" line inside\r\n    // every option group of this card that is still open. Lines are lifted\r\n    // group by group as the customer chooses.\r\n    syncChoicePrompt(record, show) {\r\n      record.element.querySelectorAll('[data-variant-options] fieldset[data-option-index]').forEach((fieldset) => {\r\n        const index = Number(fieldset.dataset.optionIndex);\r\n        const open = record.selectedOptions[index] == null || record.selectedOptions[index] === '';\r\n        let prompt = fieldset.querySelector('[data-card-choice]');\r\n        if (!open) {\r\n          fieldset.classList.remove('is-choice-missing');\r\n          if (prompt) prompt.hidden = true;\r\n          return;\r\n        }\r\n        if (!show) return;\r\n        if (!prompt) {\r\n          prompt = document.createElement('p');\r\n          prompt.className = 'povellea-collection-card__choice';\r\n          prompt.setAttribute('data-card-choice', '');\r\n          prompt.setAttribute('role', 'status');\r\n          prompt.setAttribute('aria-live', 'polite');\r\n          const legend = fieldset.querySelector('legend');\r\n          if (legend) legend.insertAdjacentElement('afterend', prompt);\r\n          else fieldset.prepend(prompt);\r\n        }\r\n        prompt.textContent = this.choiceText(fieldset.querySelector('legend')?.textContent);\r\n        prompt.hidden = false;\r\n        fieldset.classList.remove('is-choice-missing');\r\n        void fieldset.offsetWidth;\r\n        fieldset.classList.add('is-choice-missing');\r\n      });\r\n    }\r\n\r\n    renderVariant(record) {\r\n      const variant = record.selectedVariant;\r\n      if (!variant) return;\r\n\r\n      record.element.dataset.selectedVariantId = String(variant.id);\r\n\r\n      record.element.querySelectorAll('[data-option-value]').forEach((button) => {\r\n        const optionIndex = Number(button.dataset.optionIndex);\r\n        const isActive = record.selectedOptions[optionIndex] === button.dataset.optionValue;\r\n        button.classList.toggle('is-active', isActive);\r\n        button.setAttribute('aria-pressed', isActive ? 'true' : 'false');\r\n\r\n        const canExist = record.data.variants.some((candidate) => {\r\n          return candidate.options?.[optionIndex] === button.dataset.optionValue;\r\n        });\r\n\r\n        button.disabled = !canExist;\r\n      });\r\n\r\n      const currentPrice = record.element.querySelector('[data-card-price]');\r\n      const comparePrice = record.element.querySelector('[data-card-compare]');\r\n      const saleBadge = record.element.querySelector('[data-card-sale]');\r\n      const compare = Number(variant.compare_at_price || 0);\r\n      const price = Number(variant.price || 0);\r\n      const onSale = compare > price;\r\n\r\n      if (currentPrice) currentPrice.innerHTML = this.formatMoney(price);\r\n      if (comparePrice) {\r\n        comparePrice.innerHTML = onSale ? this.formatMoney(compare) : '';\r\n        comparePrice.hidden = !onSale;\r\n      }\r\n      if (saleBadge) saleBadge.hidden = !onSale;\r\n\r\n      if (record.hasInteractedWithVariant) this.updateCardVariantImage(record, variant);\r\n\r\n      const addButton = record.element.querySelector('[data-cart-add]');\r\n      const availability = record.element.querySelector('[data-card-availability]');\r\n      // An open choice keeps the button pressable: the press is what shows the\r\n      // customer which option is still missing.\r\n      const available = record.complete === false ? true : Boolean(variant.available);\r\n\r\n      if (addButton) {\r\n        addButton.disabled = record.busy || !available;\r\n        if (!record.busy) {\r\n          addButton.textContent = available\r\n            ? (this.config.labels?.add || PV_L10N.addToCart || 'ADD TO CART')\r\n            : (this.config.labels?.unavailable || PV_L10N.unavailable || 'Unavailable');\r\n        }\r\n      }\r\n\r\n      if (availability) {\r\n        availability.textContent = available ? '' : (this.config.labels?.unavailable || PV_L10N.unavailable || 'Unavailable');\r\n        availability.hidden = available;\r\n      }\r\n    }\r\n\r\n    scheduleCartRefresh() {\r\n      if (this.cartRefreshTimer) clearTimeout(this.cartRefreshTimer);\r\n      this.cartRefreshTimer = window.setTimeout(() => {\r\n        this.cartRefreshTimer = null;\r\n        this.refreshCart();\r\n      }, 80);\r\n    }\r\n\r\n    async refreshCart() {\r\n      try {\r\n        this.cart = await this.fetchJson(this.config.routes?.cart);\r\n        this.syncAllCards();\r\n        return this.cart;\r\n      } catch (error) {\r\n        console.error('[Povellea collection] Could not read cart.', error);\r\n        return null;\r\n      }\r\n    }\r\n\r\n    syncAllCards() {\r\n      this.querySelectorAll('[data-povellea-card]').forEach((card) => {\r\n        const record = this.getRecord(card);\r\n        if (record) this.syncRecordFromCart(record);\r\n      });\r\n    }\r\n\r\n    isPackageLine(line) {\r\n      return Boolean(line?.properties?._package_key);\r\n    }\r\n\r\n    getStandardLines(variantId) {\r\n      if (!this.cart?.items) return [];\r\n      return this.cart.items.filter((line) => {\r\n        return Number(line.variant_id) === Number(variantId) && !this.isPackageLine(line);\r\n      });\r\n    }\r\n\r\n    syncRecordFromCart(record) {\r\n      if (record.complete === false) {\r\n        record.quantity = 0;\r\n        record.lineKey = null;\r\n        this.renderCartState(record);\r\n        return;\r\n      }\r\n      const variantId = record.selectedVariant?.id;\r\n      const lines = this.getStandardLines(variantId);\r\n      record.quantity = lines.reduce((sum, line) => sum + Number(line.quantity || 0), 0);\r\n      record.lineKey = lines[0]?.key || null;\r\n      this.renderCartState(record);\r\n    }\r\n\r\n    renderCartState(record) {\r\n      const hasQuantity = record.quantity > 0;\r\n      const addButton = record.element.querySelector('[data-cart-add]');\r\n      const quantityControl = record.element.querySelector('[data-cart-quantity]');\r\n      const quantityOutput = record.element.querySelector('[data-cart-output]');\r\n      const addedStatus = record.element.querySelector('[data-card-added]');\r\n      const countBadge = record.element.querySelector('[data-card-count]');\r\n\r\n      record.element.classList.toggle('is-in-cart', hasQuantity);\r\n\r\n      if (addButton) addButton.hidden = hasQuantity;\r\n      if (quantityControl) quantityControl.hidden = !hasQuantity;\r\n      if (quantityOutput) quantityOutput.textContent = String(record.quantity);\r\n      if (addedStatus) addedStatus.hidden = !hasQuantity;\r\n      if (countBadge) {\r\n        countBadge.textContent = String(record.quantity);\r\n        countBadge.hidden = !hasQuantity;\r\n        countBadge.setAttribute('aria-label', (PV_L10N.inCartCount || '__COUNT__ in cart').replace('__COUNT__', record.quantity));\r\n      }\r\n    }\r\n\r\n    async changeQuantity(record, nextQuantity) {\r\n      if (record.busy) return;\r\n      if (record.complete === false) {\r\n        this.syncChoicePrompt(record, true);\r\n        return;\r\n      }\r\n      if (!record.selectedVariant?.available) return;\r\n      const quantity = Math.max(0, Number(nextQuantity || 0));\r\n      const previousQuantity = record.quantity;\r\n      const previousLineKey = record.lineKey;\r\n\r\n      record.quantity = quantity;\r\n      record.busy = true;\r\n      this.renderCartState(record);\r\n      this.setRecordBusy(record, true);\r\n\r\n      try {\r\n        let returnedCart = null;\r\n\r\n        if (previousQuantity === 0 && quantity > 0) {\r\n          const result = await this.fetchJson(this.config.routes?.add, {\r\n            method: 'POST',\r\n            body: JSON.stringify({\r\n              items: [{ id: Number(record.selectedVariant.id), quantity }]\r\n            })\r\n          });\r\n          record.lineKey = result?.items?.[0]?.key || result?.key || record.lineKey;\r\n        } else if (previousLineKey) {\r\n          returnedCart = await this.fetchJson(this.config.routes?.change, {\r\n            method: 'POST',\r\n            body: JSON.stringify({ id: previousLineKey, quantity })\r\n          });\r\n        } else if (quantity > 0) {\r\n          const result = await this.fetchJson(this.config.routes?.add, {\r\n            method: 'POST',\r\n            body: JSON.stringify({\r\n              items: [{ id: Number(record.selectedVariant.id), quantity }]\r\n            })\r\n          });\r\n          record.lineKey = result?.items?.[0]?.key || result?.key || record.lineKey;\r\n        }\r\n\r\n        if (returnedCart?.items) {\r\n          this.cart = returnedCart;\r\n          this.syncAllCards();\r\n          this.notifyCartUpdated(this.cart);\r\n        } else {\r\n          this.refreshCart().then((cart) => {\r\n            if (cart) this.notifyCartUpdated(cart);\r\n          });\r\n        }\r\n\r\n        if (quantity > 0) {\r\n          this.showToast(this.config.labels?.added || PV_L10N.addedToCart || 'Added to cart');\r\n        }\r\n      } catch (error) {\r\n        record.quantity = previousQuantity;\r\n        record.lineKey = previousLineKey;\r\n        this.renderCartState(record);\r\n        console.error('[Povellea collection] Cart update failed.', error);\r\n        this.showToast(error.message || this.config.labels?.error || PV_L10N.errorGeneric || 'Something went wrong. Please try again.');\r\n      } finally {\r\n        record.busy = false;\r\n        this.setRecordBusy(record, false);\r\n        this.renderVariant(record);\r\n        this.renderCartState(record);\r\n      }\r\n    }\r\n\r\n    setRecordBusy(record, busy) {\r\n      const addButton = record.element.querySelector('[data-cart-add]');\r\n      const controls = record.element.querySelectorAll('[data-cart-minus], [data-cart-plus]');\r\n\r\n      record.element.setAttribute('aria-busy', busy ? 'true' : 'false');\r\n      controls.forEach((button) => { button.disabled = busy; });\r\n\r\n      if (addButton) {\r\n        const pressable = record.complete === false || Boolean(record.selectedVariant?.available);\r\n        addButton.disabled = busy || !pressable;\r\n        addButton.textContent = pressable\r\n          ? (this.config.labels?.add || PV_L10N.addToCart || 'ADD TO CART')\r\n          : (this.config.labels?.unavailable || PV_L10N.unavailable || 'Unavailable');\r\n      }\r\n    }\r\n\r\n    async fetchJson(url, options) {\r\n      if (!url) throw new Error('Missing Shopify cart route.');\r\n\r\n      const requestOptions = Object.assign({ credentials: 'same-origin' }, options || {});\r\n      requestOptions.headers = Object.assign({\r\n        Accept: 'application/json',\r\n        'Content-Type': 'application/json',\r\n        'X-Povellea-Collection': '1'\r\n      }, options?.headers || {});\r\n\r\n      const response = await fetch(url, requestOptions);\r\n      const payload = await response.json().catch(() => ({}));\r\n\r\n      if (!response.ok) {\r\n        throw new Error(payload.description || payload.message || `Shopify request failed (${response.status}).`);\r\n      }\r\n\r\n      return payload;\r\n    }\r\n\r\n    formatMoney(cents) {\r\n      const value = Number(cents || 0);\r\n      let amount;\r\n      try {\r\n        amount = new Intl.NumberFormat(document.documentElement.lang || 'en-AE', {\r\n          minimumFractionDigits: 2,\r\n          maximumFractionDigits: 2\r\n        }).format(value / 100);\r\n      } catch (error) {\r\n        amount = (value / 100).toFixed(2);\r\n      }\r\n\r\n      return '<span class=\"uae-dirham-price\">' +\r\n        '<span class=\"uae-dirham-sr-only\">AED </span>' +\r\n        '<span>' + amount + '</span>' +\r\n        '</span>';\r\n    }\r\n\r\n    notifyCartUpdated(cart) {\r\n      // Was `cart.item_count`, the raw line count. In a cart holding a package\r\n      // that is wrong: one package is several lines but one thing the customer\r\n      // added, so a package plus a normal product reported 4 here and 2\r\n      // everywhere else. global.js owns the package-aware count and the [hidden]\r\n      // state; delegate rather than keep a fifth copy of the loop.\r\n      window.PovelleaCartCount?.sync(cart);\r\n\r\n      const detail = { cart, source: 'povellea-collection-grid-v2' };\r\n      document.dispatchEvent(new CustomEvent('cart:updated', { bubbles: true, detail }));\r\n      document.dispatchEvent(new CustomEvent('cart:change', { bubbles: true, detail }));\r\n      document.documentElement.dispatchEvent(new CustomEvent('cart:refresh', { bubbles: true, detail }));\r\n    }\r\n\r\n    showToast(message) {\r\n      if (!this.toast) return;\r\n      if (this.toastTimer) clearTimeout(this.toastTimer);\r\n\r\n      this.toast.textContent = message;\r\n      this.toast.hidden = false;\r\n      requestAnimationFrame(() => this.toast?.classList.add('is-visible'));\r\n\r\n      this.toastTimer = window.setTimeout(() => {\r\n        this.toast?.classList.remove('is-visible');\r\n        window.setTimeout(() => {\r\n          if (this.toast) this.toast.hidden = true;\r\n        }, 190);\r\n      }, 1800);\r\n    }\r\n\r\n    initializeModal() {\r\n      const template = this.querySelector('[data-povellea-modal-template]');\r\n      if (!template?.content?.firstElementChild) return;\r\n\r\n      this.modal = template.content.firstElementChild.cloneNode(true);\r\n      const inheritedProperties = [\r\n        '--pcc-accent',\r\n        '--pcc-card-bg',\r\n        '--pcc-media-bg',\r\n        '--pcc-action-radius',\r\n        '--pcc-action-font-size',\r\n        '--pcc-action-font-weight',\r\n        '--pcc-count-radius',\r\n        '--pcc-modal-radius',\r\n        '--pcc-modal-image-radius',\r\n        '--pcc-modal-thumb-radius'\r\n      ];\r\n\r\n      inheritedProperties.forEach((property) => {\r\n        const value = getComputedStyle(this).getPropertyValue(property);\r\n        if (value) this.modal.style.setProperty(property, value);\r\n      });\r\n\r\n      document.body.appendChild(this.modal);\r\n      if (this.toast) {\r\n        inheritedProperties.forEach((property) => {\r\n          const value = getComputedStyle(this).getPropertyValue(property);\r\n          if (value) this.toast.style.setProperty(property, value);\r\n        });\r\n        document.body.appendChild(this.toast);\r\n      }\r\n\r\n      this.modalContent = this.modal.querySelector('[data-modal-content]');\r\n      this.modalImage = this.modal.querySelector('[data-modal-image]');\r\n      this.modalThumbs = this.modal.querySelector('[data-modal-thumbs]');\r\n      this.modalTitle = this.modal.querySelector('[data-modal-title]');\r\n      this.modalPrice = this.modal.querySelector('[data-modal-price]');\r\n      this.modalDescription = this.modal.querySelector('[data-modal-description]');\r\n      this.modalDetails = this.modal.querySelector('[data-modal-details]');\r\n      this.modalPrevious = this.modal.querySelector('[data-modal-previous]');\r\n      this.modalNext = this.modal.querySelector('[data-modal-next]');\r\n      this.modalSwipeArea = this.modal.querySelector('[data-modal-swipe-area]');\r\n\r\n      this.listen(this.modal, 'click', (event) => {\r\n        if (event.target === this.modal || event.target.closest('[data-modal-close]')) {\r\n          this.closeModal();\r\n          return;\r\n        }\r\n\r\n        if (event.target.closest('[data-modal-previous]')) {\r\n          this.navigateModal(-1);\r\n          return;\r\n        }\r\n\r\n        if (event.target.closest('[data-modal-next]')) {\r\n          this.navigateModal(1);\r\n          return;\r\n        }\r\n\r\n        const thumb = event.target.closest('[data-modal-thumb]');\r\n        if (thumb) {\r\n          const nextIndex = Number(thumb.dataset.modalIndex || 0);\r\n          this.navigateModalTo(nextIndex, nextIndex >= this.modalIndex ? 1 : -1);\r\n        }\r\n      });\r\n\r\n      const warmModalThumb = (event) => {\r\n        const thumb = event.target.closest('[data-modal-thumb]');\r\n        if (!thumb) return;\r\n        this.preloadModalImage(Number(thumb.dataset.modalIndex || 0));\r\n      };\r\n\r\n      this.listen(this.modal, 'pointerover', warmModalThumb, { passive: true });\r\n      this.listen(this.modal, 'focusin', warmModalThumb);\r\n\r\n      this.listen(document, 'keydown', (event) => {\r\n        if (!this.modal || this.modal.hidden) return;\r\n\r\n        if (event.key === 'Escape') {\r\n          event.preventDefault();\r\n          this.closeModal();\r\n          return;\r\n        }\r\n\r\n        if (event.key === 'ArrowLeft') this.navigateModal(-1);\r\n        if (event.key === 'ArrowRight') this.navigateModal(1);\r\n\r\n        if (event.key === 'Tab') this.trapModalFocus(event);\r\n      });\r\n\r\n      this.listen(this.modalSwipeArea, 'pointerdown', (event) => {\r\n        this.modalPointerStart = { x: event.clientX, y: event.clientY };\r\n      }, { passive: true });\r\n\r\n      this.listen(this.modalSwipeArea, 'pointerup', (event) => {\r\n        if (!this.modalPointerStart) return;\r\n        const deltaX = event.clientX - this.modalPointerStart.x;\r\n        const deltaY = event.clientY - this.modalPointerStart.y;\r\n        this.modalPointerStart = null;\r\n\r\n        if (Math.abs(deltaX) > 45 && Math.abs(deltaX) > Math.abs(deltaY)) {\r\n          this.navigateModal(deltaX < 0 ? 1 : -1);\r\n        }\r\n      }, { passive: true });\r\n    }\r\n\r\n    openModal(record, trigger) {\r\n      if (!this.modal) return;\r\n\r\n      this.modalRecord = record;\r\n      this.modalImages = Array.isArray(record.data.images) ? record.data.images.slice() : [];\r\n\r\n      if (!this.modalImages.length) {\r\n        const image = record.element.querySelector('.povellea-collection-card__image');\r\n        if (image) {\r\n          this.modalImages.push({\r\n            src: image.currentSrc || image.src,\r\n            thumb: image.currentSrc || image.src,\r\n            alt: record.data.title || ''\r\n          });\r\n        }\r\n      }\r\n\r\n      const selectedImageId = Number(record.selectedVariant?.image?.id || 0);\r\n      const selectedImageIndex = selectedImageId\r\n        ? this.modalImages.findIndex((image) => Number(image.id) === selectedImageId)\r\n        : -1;\r\n      this.modalIndex = selectedImageIndex >= 0 ? selectedImageIndex : 0;\r\n      this.resetModalTransition();\r\n      this.modalLastFocused = trigger || document.activeElement;\r\n      this.modalTitle.textContent = record.data.title || '';\r\n      this.modalPrice.innerHTML = this.formatMoney(record.selectedVariant?.price || 0);\r\n      this.modalDescription.textContent = record.data.description || '';\r\n      this.modalDetails.href = record.data.url || '#';\r\n\r\n      this.renderModalThumbs();\r\n      this.renderModalImage();\r\n      this.preloadModalNeighbors(this.modalIndex);\r\n      this.lockBody();\r\n\r\n      if (this.modalCloseTimer) clearTimeout(this.modalCloseTimer);\r\n      this.modal.hidden = false;\r\n      requestAnimationFrame(() => {\r\n        this.modal?.classList.add('is-open');\r\n        this.modalContent?.focus({ preventScroll: true });\r\n      });\r\n    }\r\n\r\n    closeModal(immediate) {\r\n      if (!this.modal || this.modal.hidden) {\r\n        this.unlockBody();\r\n        return;\r\n      }\r\n\r\n      this.modal.classList.remove('is-open');\r\n      this.unlockBody();\r\n\r\n      const finish = () => {\r\n        if (!this.modal) return;\r\n        this.modal.hidden = true;\r\n        this.modalRecord = null;\r\n        this.modalImages = [];\r\n        this.modalPreloads = [];\r\n        this.modalPreloadedSources.clear();\r\n        this.resetModalTransition();\r\n        this.modalLastFocused?.focus?.({ preventScroll: true });\r\n        this.modalLastFocused = null;\r\n      };\r\n\r\n      if (immediate) {\r\n        finish();\r\n      } else {\r\n        if (this.modalCloseTimer) clearTimeout(this.modalCloseTimer);\r\n        this.modalCloseTimer = window.setTimeout(finish, 220);\r\n      }\r\n    }\r\n\r\n    navigateModal(direction) {\r\n      if (this.modalImages.length <= 1 || this.modalTransitioning) return;\r\n      const nextIndex = (this.modalIndex + direction + this.modalImages.length) % this.modalImages.length;\r\n      this.navigateModalTo(nextIndex, direction);\r\n    }\r\n\r\n    navigateModalTo(nextIndex, direction) {\r\n      if (this.modalTransitioning || nextIndex === this.modalIndex) return;\r\n      if (nextIndex < 0 || nextIndex >= this.modalImages.length) return;\r\n\r\n      this.modalIndex = nextIndex;\r\n      this.preloadModalNeighbors(nextIndex);\r\n      this.transitionModalImage(direction >= 0 ? 1 : -1);\r\n    }\r\n\r\n    renderModalImage() {\r\n      const image = this.modalImages[this.modalIndex];\r\n      if (!this.modalImage) return;\r\n\r\n      if (image) {\r\n        this.modalImage.className = 'povellea-product-modal__image';\r\n        this.modalImage.fetchPriority = 'high';\r\n        this.modalImage.src = image.src || '';\r\n        this.modalImage.alt = image.alt || this.modalRecord?.data?.title || '';\r\n        this.modalImage.hidden = false;\r\n      } else {\r\n        this.modalImage.removeAttribute('src');\r\n        this.modalImage.alt = '';\r\n        this.modalImage.hidden = true;\r\n      }\r\n\r\n      this.updateModalNavigation();\r\n    }\r\n\r\n    transitionModalImage(direction) {\r\n      const image = this.modalImages[this.modalIndex];\r\n      const currentImage = this.modalImage;\r\n      if (!image || !currentImage || !this.modalSwipeArea) return;\r\n\r\n      this.modalTransitioning = true;\r\n      const directionName = direction > 0 ? 'next' : 'previous';\r\n      const nextImage = document.createElement('img');\r\n      nextImage.className = `povellea-product-modal__image is-entering-${directionName}`;\r\n      nextImage.dataset.modalImage = '';\r\n      nextImage.width = 1600;\r\n      nextImage.height = 1600;\r\n      nextImage.alt = image.alt || this.modalRecord?.data?.title || '';\r\n      nextImage.loading = 'eager';\r\n      nextImage.decoding = 'async';\r\n      nextImage.draggable = false;\r\n      nextImage.fetchPriority = 'high';\r\n      nextImage.src = image.src || '';\r\n      currentImage.after(nextImage);\r\n      this.updateModalNavigation();\r\n\r\n      let started = false;\r\n      const startTransition = () => {\r\n        if (started || !nextImage.isConnected) return;\r\n        started = true;\r\n\r\n        requestAnimationFrame(() => {\r\n          requestAnimationFrame(() => {\r\n            nextImage.classList.add('is-active');\r\n            currentImage.classList.add(`is-leaving-${directionName}`);\r\n\r\n            if (this.modalTransitionTimer) clearTimeout(this.modalTransitionTimer);\r\n            this.modalTransitionTimer = window.setTimeout(() => {\r\n              currentImage.remove();\r\n              nextImage.className = 'povellea-product-modal__image';\r\n              this.modalImage = nextImage;\r\n              this.modalTransitioning = false;\r\n              this.modalTransitionTimer = null;\r\n            }, 330);\r\n          });\r\n        });\r\n      };\r\n\r\n      const decodeAndStart = () => {\r\n        if (typeof nextImage.decode === 'function') {\r\n          nextImage.decode().catch(() => {}).then(startTransition);\r\n        } else {\r\n          startTransition();\r\n        }\r\n      };\r\n\r\n      if (nextImage.complete) {\r\n        decodeAndStart();\r\n      } else {\r\n        nextImage.addEventListener('load', decodeAndStart, { once: true });\r\n        nextImage.addEventListener('error', startTransition, { once: true });\r\n      }\r\n    }\r\n\r\n    updateModalNavigation() {\r\n      const multiple = this.modalImages.length > 1;\r\n      if (this.modalPrevious) this.modalPrevious.hidden = !multiple;\r\n      if (this.modalNext) this.modalNext.hidden = !multiple;\r\n\r\n      this.modalThumbs?.querySelectorAll('[data-modal-thumb]').forEach((thumb, index) => {\r\n        const active = index === this.modalIndex;\r\n        thumb.classList.toggle('is-active', active);\r\n        thumb.setAttribute('aria-current', active ? 'true' : 'false');\r\n        if (active) thumb.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });\r\n      });\r\n    }\r\n\r\n    preloadModalImage(index) {\r\n      const image = this.modalImages[index];\r\n      if (!image?.src || this.modalPreloadedSources.has(image.src)) return;\r\n\r\n      this.modalPreloadedSources.add(image.src);\r\n      const preload = new Image();\r\n      preload.decoding = 'async';\r\n      preload.fetchPriority = 'auto';\r\n      preload.src = image.src;\r\n      this.modalPreloads.push(preload);\r\n    }\r\n\r\n    preloadModalNeighbors(index) {\r\n      const length = this.modalImages.length;\r\n      if (length <= 1) return;\r\n\r\n      this.preloadModalImage((index + 1) % length);\r\n      this.preloadModalImage((index - 1 + length) % length);\r\n    }\r\n\r\n    resetModalTransition() {\r\n      if (this.modalTransitionTimer) clearTimeout(this.modalTransitionTimer);\r\n      this.modalTransitionTimer = null;\r\n      this.modalTransitioning = false;\r\n\r\n      if (!this.modal) return;\r\n      const images = Array.from(this.modal.querySelectorAll('.povellea-product-modal__image'));\r\n      const keepImage = this.modalImage?.isConnected ? this.modalImage : images[0];\r\n      images.forEach((image) => {\r\n        if (image !== keepImage) image.remove();\r\n      });\r\n      if (keepImage) {\r\n        keepImage.className = 'povellea-product-modal__image';\r\n        keepImage.dataset.modalImage = '';\r\n        this.modalImage = keepImage;\r\n      }\r\n    }\r\n\r\n    renderModalThumbs() {\r\n      if (!this.modalThumbs) return;\r\n      this.modalThumbs.replaceChildren();\r\n\r\n      this.modalImages.forEach((image, index) => {\r\n        const button = document.createElement('button');\r\n        button.type = 'button';\r\n        button.className = 'povellea-product-modal__thumb';\r\n        button.dataset.modalThumb = '';\r\n        button.dataset.modalIndex = String(index);\r\n        button.setAttribute('aria-label', (PV_L10N.showImage || 'Show image __INDEX__').replace('__INDEX__', index + 1));\r\n\r\n        const thumbImage = document.createElement('img');\r\n        thumbImage.src = image.thumb || image.src || '';\r\n        thumbImage.alt = '';\r\n        thumbImage.loading = 'eager';\r\n        thumbImage.draggable = false;\r\n        button.appendChild(thumbImage);\r\n        this.modalThumbs.appendChild(button);\r\n      });\r\n\r\n      this.modalThumbs.hidden = this.modalImages.length <= 1;\r\n    }\r\n\r\n    trapModalFocus(event) {\r\n      const focusable = Array.from(this.modal.querySelectorAll(\r\n        'button:not([disabled]):not([hidden]), a[href]:not([hidden]), [tabindex]:not([tabindex=\"-1\"]):not([hidden])'\r\n      )).filter((element) => element.offsetParent !== null);\r\n\r\n      if (!focusable.length) {\r\n        event.preventDefault();\r\n        this.modalContent?.focus();\r\n        return;\r\n      }\r\n\r\n      const first = focusable[0];\r\n      const last = focusable[focusable.length - 1];\r\n\r\n      if (event.shiftKey && document.activeElement === first) {\r\n        event.preventDefault();\r\n        last.focus();\r\n      } else if (!event.shiftKey && document.activeElement === last) {\r\n        event.preventDefault();\r\n        first.focus();\r\n      }\r\n    }\r\n\r\n    lockBody() {\r\n      if (this.bodyWasLocked) return;\r\n      this.lockedScrollY = window.scrollY;\r\n      this.bodyWasLocked = true;\r\n      document.body.style.position = 'fixed';\r\n      document.body.style.top = `-${this.lockedScrollY}px`;\r\n      document.body.style.width = '100%';\r\n      document.body.style.overflow = 'hidden';\r\n    }\r\n\r\n    unlockBody() {\r\n      if (!this.bodyWasLocked) return;\r\n      document.body.style.position = '';\r\n      document.body.style.top = '';\r\n      document.body.style.width = '';\r\n      document.body.style.overflow = '';\r\n      window.scrollTo(0, this.lockedScrollY);\r\n      this.bodyWasLocked = false;\r\n    }\r\n  }\r\n\r\n  customElements.define('povellea-collection-grid-v2', PovelleaCollectionGrid);\r\n})();\r\n"],
  "mappings": "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",
  "names": []
}
