{
  "version": 3,
  "sources": ["/cdn/shop/t/69/assets/theme.js?rev=sasa-v23"],
  "sourcesContent": ["const whiteLabelMapNode = document.querySelector('[data-sasa-white-label-map]');\nlet whiteLabelMap = {};\ntry { whiteLabelMap = JSON.parse(whiteLabelMapNode?.textContent || '{}'); } catch (_) { whiteLabelMap = {}; }\nconst productHandleFromUrl = (url = '') => {\n  const match = String(url).match(/\\/products\\/([^/?#]+)/i);\n  return match ? decodeURIComponent(match[1]) : '';\n};\nconst whiteLabelProduct = (product = {}) => {\n  const handle = product.handle || productHandleFromUrl(product.url || product.product_url || '');\n  const mapped = whiteLabelMap[handle] || null;\n  return mapped ? { ...product, _wlHandle: handle, _wlTitle: mapped.title, _wlImage: mapped.image } : { ...product, _wlHandle: handle, _wlTitle: product.product_title || product.title || '', _wlImage: '' };\n};\n\nclass SasaTheme {\n  constructor() {\n    this.header = document.querySelector('[data-site-header]');\n    this.cartToast = document.querySelector('[data-cart-toast]');\n    this.bindHeader();\n    this.bindProductGalleries();\n    this.bindProductForms();\n    this.bindQuantityControls();\n    this.bindFilters();\n    this.bindCatalogUX();\n    this.bindCollectionDescriptions();\n    this.bindMobileConversionBars();\n    this.bindRevealMotion();\n  }\n\n  bindHeader() {\n    if (!this.header) return;\n    const update = () => this.header.classList.toggle('is-scrolled', window.scrollY > 16);\n    const updateMenuPosition = () => {\n      document.documentElement.style.setProperty('--header-bottom', `${this.header.getBoundingClientRect().bottom}px`);\n    };\n    update();\n    updateMenuPosition();\n    window.addEventListener('scroll', update, { passive: true });\n    window.addEventListener('resize', updateMenuPosition, { passive: true });\n    const mobileMenu = this.header.querySelector('.mobile-menu');\n    const menuToggle = mobileMenu?.querySelector('summary');\n    mobileMenu?.addEventListener('toggle', () => {\n      menuToggle?.setAttribute('aria-expanded', String(mobileMenu.open));\n      document.body.classList.toggle('has-open-menu', mobileMenu.open);\n      if (mobileMenu.open) updateMenuPosition();\n    });\n    document.addEventListener('keydown', (event) => {\n      if (event.key !== 'Escape' || !mobileMenu?.open) return;\n      mobileMenu.open = false;\n      menuToggle?.focus();\n    });\n    document.addEventListener('click', (event) => {\n      if (mobileMenu?.open && !mobileMenu.contains(event.target)) mobileMenu.open = false;\n    });\n    const navigationDropdowns = this.header.querySelectorAll('[data-nav-dropdown]');\n    navigationDropdowns.forEach((dropdown) => dropdown.addEventListener('toggle', () => {\n      if (!dropdown.open) return;\n      navigationDropdowns.forEach((other) => { if (other !== dropdown) other.open = false; });\n    }));\n    document.addEventListener('click', (event) => {\n      navigationDropdowns.forEach((dropdown) => {\n        if (dropdown.open && !dropdown.contains(event.target)) dropdown.open = false;\n      });\n    });\n    document.addEventListener('keydown', (event) => {\n      if (event.key !== 'Escape') return;\n      navigationDropdowns.forEach((dropdown) => {\n        if (!dropdown.open) return;\n        dropdown.open = false;\n        dropdown.querySelector('summary')?.focus();\n      });\n    });\n  }\n\n  bindProductGalleries() {\n    document.querySelectorAll('[data-product-gallery]').forEach((gallery) => {\n      const mediaItems = gallery.querySelectorAll('[data-product-media]');\n      const controls = gallery.querySelectorAll('[data-product-media-target]');\n\n      controls.forEach((control) => control.addEventListener('click', () => {\n        const targetId = control.dataset.productMediaTarget;\n        mediaItems.forEach((item) => {\n          const isActive = item.dataset.productMedia === targetId;\n          item.hidden = !isActive;\n          if (!isActive) item.querySelectorAll('video').forEach((video) => video.pause());\n        });\n        controls.forEach((button) => button.setAttribute('aria-pressed', String(button === control)));\n      }));\n    });\n  }\n\n  bindProductForms() {\n    document.querySelectorAll('[data-product-form]').forEach((form) => {\n      const select = form.querySelector('[data-variant-select]');\n      const productRoot = form.closest('[data-product-root]');\n      const prices = productRoot?.querySelectorAll('[data-product-price], [data-mobile-product-price]');\n      const submit = form.querySelector('[type=\"submit\"]');\n      const mobileSubmit = productRoot?.querySelector('[data-mobile-add]');\n      const sellingPlanRoot = form.querySelector('[data-selling-plan-root]');\n      const sellingPlanInput = sellingPlanRoot?.querySelector('[data-selling-plan-input]');\n      const swatchRoot = productRoot?.querySelector('[data-conv-variant-swatches]');\n      const swatches = swatchRoot ? [...swatchRoot.querySelectorAll('[data-conv-variant-swatch]')] : [];\n      const stockCounter = productRoot?.querySelector('[data-conv-stock-counter]');\n      const stockText = stockCounter?.querySelector('[data-conv-stock-text]');\n      const lowStockThreshold = Number(document.documentElement.dataset.lowStockThreshold || 5);\n\n      const updateSellingPlans = (variantId) => {\n        if (!sellingPlanRoot || !sellingPlanInput) return;\n        const panels = sellingPlanRoot.querySelectorAll('[data-selling-plan-variant]');\n        let activePanel = null;\n        panels.forEach((panel) => {\n          const isActive = panel.dataset.sellingPlanVariant === String(variantId);\n          panel.hidden = !isActive;\n          if (isActive) activePanel = panel;\n        });\n        const selectedOption = activePanel?.querySelector('[data-selling-plan-option]:checked')\n          || activePanel?.querySelector('[data-selling-plan-option]');\n        if (selectedOption && !selectedOption.checked) selectedOption.checked = true;\n        sellingPlanInput.value = selectedOption?.value || '';\n      };\n\n      sellingPlanRoot?.addEventListener('change', (event) => {\n        if (event.target.matches('[data-selling-plan-option]') && sellingPlanInput) {\n          sellingPlanInput.value = event.target.value;\n        }\n      });\n\n      const updateVariantSwatches = (variantId) => {\n        swatches.forEach((swatch) => swatch.classList.toggle('is-active', String(swatch.dataset.convVariantSwatch) === String(variantId)));\n      };\n\n      const updateStockSignal = (option) => {\n        if (!stockCounter || !option) return;\n        const tracked = Boolean(option.dataset.inventoryManagement);\n        const quantity = Number(option.dataset.inventoryQuantity || 0);\n        const show = tracked && quantity > 0 && quantity <= lowStockThreshold;\n        stockCounter.hidden = !show;\n        if (show && stockText) {\n          stockText.textContent = String(stockCounter.dataset.lowStockTemplate || 'Only __COUNT__ left').replace('__COUNT__', String(quantity));\n        }\n      };\n\n      if (select && swatches.length) {\n        select.closest('label')?.classList.add('conv-variant-select-fallback');\n        swatches.forEach((swatch) => swatch.addEventListener('click', () => {\n          if (swatch.disabled) return;\n          select.value = swatch.dataset.convVariantSwatch;\n          select.dispatchEvent(new Event('change', { bubbles: true }));\n        }));\n      }\n\n      select?.addEventListener('change', () => {\n        const option = select.selectedOptions[0];\n        updateVariantSwatches(option.value);\n        updateStockSignal(option);\n        updateSellingPlans(option.value);\n        if (option.dataset.mediaId) {\n          productRoot?.querySelector(`[data-product-media-target=\"${option.dataset.mediaId}\"]`)?.click();\n        }\n        if (option.dataset.price) prices?.forEach((price) => { price.textContent = option.dataset.price; });\n        if (submit) {\n          submit.disabled = option.dataset.available !== 'true';\n          submit.querySelector('span').textContent = option.dataset.available === 'true'\n            ? submit.dataset.availableLabel\n            : submit.dataset.soldOutLabel;\n        }\n        if (mobileSubmit) {\n          mobileSubmit.disabled = option.dataset.available !== 'true';\n          mobileSubmit.textContent = option.dataset.available === 'true'\n            ? mobileSubmit.dataset.availableLabel\n            : mobileSubmit.dataset.soldOutLabel;\n        }\n        if (option.value) {\n          const url = new URL(window.location.href);\n          url.searchParams.set('variant', option.value);\n          window.history.replaceState({}, '', url);\n        }\n      });\n\n      if (select?.selectedOptions?.[0]) {\n        updateVariantSwatches(select.selectedOptions[0].value);\n        updateStockSignal(select.selectedOptions[0]);\n      }\n\n      mobileSubmit?.addEventListener('click', () => {\n        if (mobileSubmit.disabled) return;\n        form.requestSubmit(submit);\n      });\n\n      form.addEventListener('submit', async (event) => {\n        if (!window.fetch || form.dataset.ajax !== 'true') return;\n        const submitter = event.submitter;\n        const isAcceleratedCheckout = submitter?.matches?.('[data-shopify-buy-it-now-button], .shopify-payment-button__button')\n          || submitter?.closest?.('.shopify-payment-button');\n        if (isAcceleratedCheckout) return;\n        event.preventDefault();\n        submit?.setAttribute('aria-busy', 'true');\n        mobileSubmit?.setAttribute('aria-busy', 'true');\n        const wasDisabled = submit?.disabled || false;\n        if (submit) submit.disabled = true;\n        if (mobileSubmit) mobileSubmit.disabled = true;\n        try {\n          const response = await fetch(window.Shopify.routes.root + 'cart/add.js', {\n            method: 'POST',\n            headers: { Accept: 'application/json' },\n            body: new FormData(form),\n          });\n          const item = await response.json();\n          if (!response.ok) throw new Error(item.description || item.message || document.body?.dataset?.sasaI18nAddError || 'Unable to add this product.');\n          const wlItem = whiteLabelProduct(item);\n          this.showToast(document.body?.dataset?.sasaI18nAdded || `${wlItem._wlTitle || item.product_title} added to your cart.`);\n          await this.refreshCartCount();\n          window.SasaShopTrack?.('add_to_cart', { source: 'product_form', product: whiteLabelProduct(item)._wlTitle || item.product_title || '', variant_id: item.variant_id || item.id || '' });\n          window.dispatchEvent(new CustomEvent('sasa:cart-updated', { detail: { open: true } }));\n        } catch (error) {\n          this.showToast(error.message || 'Something went wrong.', true);\n        } finally {\n          submit?.removeAttribute('aria-busy');\n          mobileSubmit?.removeAttribute('aria-busy');\n          if (submit) {\n            const option = select?.selectedOptions[0];\n            submit.disabled = option ? option.dataset.available !== 'true' : wasDisabled;\n          }\n          if (mobileSubmit) {\n            const option = select?.selectedOptions[0];\n            mobileSubmit.disabled = option ? option.dataset.available !== 'true' : wasDisabled;\n          }\n        }\n      });\n    });\n  }\n\n  bindQuantityControls() {\n    document.querySelectorAll('[data-quantity]').forEach((wrapper) => {\n      const input = wrapper.querySelector('input');\n      wrapper.querySelectorAll('button').forEach((button) => button.addEventListener('click', () => {\n        const next = Number(input.value) + Number(button.dataset.step || 0);\n        input.value = Math.max(Number(input.min || 0), next);\n        input.dispatchEvent(new Event('change', { bubbles: true }));\n      }));\n    });\n  }\n\n  bindFilters(root = document) {\n    root.querySelectorAll('[data-sort-by]').forEach((select) => {\n      if (select.dataset.sortBound === 'true') return;\n      select.dataset.sortBound = 'true';\n      select.addEventListener('change', () => {\n        const url = new URL(window.location.href);\n        if (select.value) url.searchParams.set('sort_by', select.value); else url.searchParams.delete('sort_by');\n        url.searchParams.delete('page');\n        window.location.assign(url.toString());\n      });\n    });\n  }\n\n  bindCatalogUX(root = document) {\n    const getCatalogState = () => {\n      const url = new URL(window.location.href);\n      return {\n        category: url.searchParams.get('category') || 'all',\n        query: url.searchParams.get('catalog_q') || ''\n      };\n    };\n\n    root.querySelectorAll('[data-facets-form]').forEach((form) => {\n      if (form.dataset.bound === 'true') return;\n      form.dataset.bound = 'true';\n\n      const submitWithState = () => {\n        const url = new URL(form.action || window.location.href, window.location.origin);\n        const data = new FormData(form);\n        const current = new URL(window.location.href);\n        for (const [key, value] of data.entries()) {\n          if (String(value).length) url.searchParams.append(key, value);\n        }\n        const category = current.searchParams.get('category');\n        const catalogQuery = current.searchParams.get('catalog_q');\n        const sortBy = current.searchParams.get('sort_by');\n        if (category) url.searchParams.set('category', category);\n        if (catalogQuery) url.searchParams.set('catalog_q', catalogQuery);\n        if (sortBy) url.searchParams.set('sort_by', sortBy);\n        url.searchParams.delete('page');\n        window.location.assign(url.toString());\n      };\n\n      form.querySelectorAll('input[type=\"checkbox\"]').forEach((input) => {\n        input.addEventListener('change', submitWithState);\n      });\n      form.addEventListener('submit', (event) => {\n        event.preventDefault();\n        submitWithState();\n      });\n    });\n\n    root.querySelectorAll('[data-catalog-root]').forEach((catalog) => {\n      if (catalog.dataset.catalogBound === 'true') return;\n      catalog.dataset.catalogBound = 'true';\n      const input = catalog.querySelector('[data-catalog-search]');\n      const chips = [...catalog.querySelectorAll('[data-catalog-category]')];\n      const cards = [...catalog.querySelectorAll('.product-card[data-product-category]')];\n      const auxiliary = [...catalog.querySelectorAll('[data-catalog-aux]')];\n      const count = catalog.querySelector('[data-visible-count]');\n      const empty = catalog.querySelector('[data-catalog-empty]');\n      const pagination = catalog.querySelector('[data-catalog-pagination]');\n      const validCategories = new Set(chips.map((chip) => chip.dataset.catalogCategory).filter(Boolean));\n      const state = getCatalogState();\n      let activeCategory = validCategories.has(state.category) ? state.category : 'all';\n      if (input) input.value = state.query;\n\n      const syncChips = () => {\n        chips.forEach((chip) => {\n          const active = chip.dataset.catalogCategory === activeCategory;\n          chip.classList.toggle('is-active', active);\n          chip.setAttribute('aria-pressed', String(active));\n        });\n      };\n\n      const syncUrl = ({ replace = true } = {}) => {\n        const url = new URL(window.location.href);\n        const query = (input?.value || '').trim();\n        if (activeCategory === 'all') url.searchParams.delete('category');\n        else url.searchParams.set('category', activeCategory);\n        if (query) url.searchParams.set('catalog_q', query);\n        else url.searchParams.delete('catalog_q');\n        url.searchParams.delete('page');\n        const method = replace ? 'replaceState' : 'pushState';\n        window.history[method]({}, '', url.toString());\n      };\n\n      const apply = ({ updateUrl = false } = {}) => {\n        const query = (input?.value || '').trim().toLocaleLowerCase(document.documentElement.lang || undefined);\n        let visible = 0;\n        cards.forEach((card) => {\n          const cardCategory = card.dataset.productCategory || 'digital-services';\n          const haystack = (card.dataset.productSearch || '').toLocaleLowerCase(document.documentElement.lang || undefined);\n          const matchesCategory = activeCategory === 'all' || cardCategory === activeCategory;\n          const matchesSearch = !query || haystack.includes(query);\n          const show = matchesCategory && matchesSearch;\n          card.hidden = !show;\n          card.setAttribute('aria-hidden', String(!show));\n          if (show) visible += 1;\n        });\n        const narrowed = activeCategory !== 'all' || Boolean(query);\n        auxiliary.forEach((node) => { node.hidden = narrowed; });\n        if (pagination) pagination.hidden = narrowed;\n        if (count) count.textContent = String(visible);\n        if (empty) empty.hidden = visible !== 0;\n        if (updateUrl) syncUrl();\n      };\n\n      let searchTimer;\n      input?.addEventListener('input', () => {\n        window.clearTimeout(searchTimer);\n        apply();\n        searchTimer = window.setTimeout(() => syncUrl(), 180);\n      });\n      input?.addEventListener('search', () => { apply({ updateUrl: true }); });\n\n      chips.forEach((chip) => chip.addEventListener('click', () => {\n        activeCategory = validCategories.has(chip.dataset.catalogCategory) ? chip.dataset.catalogCategory : 'all';\n        syncChips();\n        apply({ updateUrl: true });\n      }));\n\n      window.addEventListener('popstate', () => {\n        const next = getCatalogState();\n        activeCategory = validCategories.has(next.category) ? next.category : 'all';\n        if (input) input.value = next.query;\n        syncChips();\n        apply();\n      });\n\n      syncChips();\n      apply();\n    });\n  }\n\n  bindCollectionDescriptions() {\n    document.querySelectorAll('[data-collection-description-toggle]').forEach((button) => {\n      const description = document.getElementById(button.getAttribute('aria-controls'));\n      if (!description) return;\n      description.classList.add('is-enhanced');\n      button.hidden = false;\n      button.addEventListener('click', () => {\n        const expanded = button.getAttribute('aria-expanded') === 'true';\n        button.setAttribute('aria-expanded', String(!expanded));\n        description.classList.toggle('is-expanded', !expanded);\n        button.textContent = !expanded ? button.dataset.lessLabel : button.dataset.moreLabel;\n      });\n    });\n  }\n\n  bindMobileConversionBars() {\n    const mobileQuery = window.matchMedia('(max-width: 899px)');\n    const pairs = [\n      [document.querySelector('[data-product-form] [type=\"submit\"]'), document.querySelector('[data-mobile-product-bar]')],\n      [document.querySelector('[data-cart-checkout]'), document.querySelector('[data-mobile-cart-bar]')],\n    ];\n\n    pairs.forEach(([primaryAction, mobileBar]) => {\n      if (!primaryAction || !mobileBar || !('IntersectionObserver' in window)) return;\n      mobileBar.classList.add('is-enhanced');\n      let primaryInView = true;\n      const setVisibility = (visible) => {\n        const shouldShow = visible && mobileQuery.matches;\n        mobileBar.classList.toggle('is-visible', shouldShow);\n        mobileBar.setAttribute('aria-hidden', String(!shouldShow));\n        mobileBar.inert = !shouldShow;\n        mobileBar.querySelectorAll('button, a').forEach((action) => {\n          if (shouldShow) action.removeAttribute('tabindex');\n          else action.setAttribute('tabindex', '-1');\n        });\n      };\n      setVisibility(false);\n      const observer = new IntersectionObserver(([entry]) => {\n        primaryInView = entry.isIntersecting;\n        setVisibility(!primaryInView);\n      }, {\n        threshold: 0.15,\n      });\n      observer.observe(primaryAction);\n      const updateForViewport = () => {\n        setVisibility(!primaryInView);\n      };\n      if (mobileQuery.addEventListener) mobileQuery.addEventListener('change', updateForViewport);\n      else mobileQuery.addListener(updateForViewport);\n    });\n  }\n\n  bindRevealMotion(root = document) {\n    const elements = [\n      ...(root.matches?.('[data-reveal]') ? [root] : []),\n      ...root.querySelectorAll('[data-reveal]'),\n    ].filter((element) => element.dataset.revealBound !== 'true');\n    if (!elements.length) return;\n    const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n    if (reducedMotion || !('IntersectionObserver' in window)) {\n      elements.forEach((element) => {\n        element.dataset.revealBound = 'true';\n        element.classList.add('is-revealed');\n      });\n      return;\n    }\n    const observer = new IntersectionObserver((entries) => {\n      entries.forEach((entry) => {\n        if (!entry.isIntersecting) return;\n        entry.target.classList.add('is-revealed');\n        observer.unobserve(entry.target);\n      });\n    }, { rootMargin: '0px 0px -8% 0px', threshold: 0.08 });\n    elements.forEach((element) => {\n      element.dataset.revealBound = 'true';\n      element.classList.add('is-reveal-ready');\n      observer.observe(element);\n    });\n  }\n\n  async refreshCartCount() {\n    const response = await fetch(window.Shopify.routes.root + 'cart.js');\n    const cart = await response.json();\n    document.querySelectorAll('[data-cart-count]').forEach((node) => {\n      node.textContent = cart.item_count;\n      node.hidden = cart.item_count === 0;\n    });\n  }\n\n  showToast(message, isError = false) {\n    if (!this.cartToast) return;\n    const messageNode = this.cartToast.querySelector('[data-cart-toast-message]');\n    const action = this.cartToast.querySelector('[data-cart-toast-action]');\n    if (messageNode) messageNode.textContent = message;\n    if (action) action.hidden = isError;\n    this.cartToast.classList.toggle('is-error', isError);\n    this.cartToast.hidden = false;\n    window.clearTimeout(this.toastTimer);\n    this.toastTimer = window.setTimeout(() => { this.cartToast.hidden = true; }, 3200);\n  }\n}\n\nif (!customElements.get('product-recommendations')) {\n  customElements.define('product-recommendations', class extends HTMLElement {\n    connectedCallback() {\n      if ('IntersectionObserver' in window) {\n        this.observer = new IntersectionObserver((entries) => {\n          if (!entries.some((entry) => entry.isIntersecting)) return;\n          this.observer.disconnect();\n          this.loadRecommendations();\n        }, { rootMargin: '500px 0px' });\n        this.observer.observe(this);\n        return;\n      }\n      this.loadRecommendations();\n    }\n\n    loadRecommendations() {\n      fetch(this.dataset.url).then((response) => response.text()).then((text) => {\n        const html = new DOMParser().parseFromString(text, 'text/html').querySelector('product-recommendations');\n        if (html?.innerHTML.trim()) {\n          this.innerHTML = html.innerHTML;\n          this.dispatchEvent(new CustomEvent('sasa:recommendations-loaded', { bubbles: true }));\n        }\n      }).catch(() => {});\n    }\n\n    disconnectedCallback() {\n      this.observer?.disconnect();\n    }\n  });\n}\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  window.sasaTheme = new SasaTheme();\n});\n\ndocument.addEventListener('shopify:section:load', (event) => {\n  window.sasaTheme?.bindFilters(event.target);\n  window.sasaTheme?.bindCatalogUX(event.target);\n  window.sasaTheme?.bindCollectionDescriptions(event.target);\n  window.sasaTheme?.bindRevealMotion(event.target);\n});\n\n/* SasaShop Conversion Edition -------------------------------------------------\n   Theme-native conversion utilities inspired by premium Shopify UX patterns:\n   slide-out cart, quick add/view, predictive search, recently viewed, FBT,\n   sticky purchase CTA, optional real-deadline promo popup, and image zoom.\n----------------------------------------------------------------------------- */\n(() => {\n  const rootUrl = window.Shopify?.routes?.root || '/';\n  const qs = (selector, root = document) => root.querySelector(selector);\n  const qsa = (selector, root = document) => [...root.querySelectorAll(selector)];\n  const html = document.documentElement;\n\n  const money = (cents, currency = document.body?.dataset?.currency || 'EUR') => {\n    try {\n      return new Intl.NumberFormat(html.lang || 'en', { style: 'currency', currency }).format(Number(cents || 0) / 100);\n    } catch (_) {\n      return `${(Number(cents || 0) / 100).toFixed(2)} ${currency}`;\n    }\n  };\n\n  const requestCart = () => fetch(`${rootUrl}cart.js`, { headers: { Accept: 'application/json' } }).then((r) => r.json());\n\n  const drawer = qs('[data-conv-cart-drawer]');\n  const drawerItems = qs('[data-conv-cart-items]', drawer || document);\n  const drawerEmpty = qs('[data-conv-cart-empty]', drawer || document);\n  const drawerFoot = qs('[data-conv-cart-foot]', drawer || document);\n  const drawerSubtotal = qs('[data-conv-cart-subtotal]', drawer || document);\n  const drawerSavings = qs('[data-conv-cart-savings]', drawer || document);\n  const drawerSavingsValue = qs('[data-conv-cart-savings-value]', drawer || document);\n  const goal = qs('[data-conv-cart-goal]', drawer || document);\n  const goalText = qs('[data-conv-cart-goal-text]', drawer || document);\n  const goalCount = qs('[data-conv-cart-goal-count]', drawer || document);\n  const goalProgress = qs('[data-conv-cart-goal-progress]', drawer || document);\n  let drawerLastFocus = null;\n\n  const setDrawerOpen = (open) => {\n    if (!drawer) return;\n    if (open) {\n      drawerLastFocus = document.activeElement;\n      drawer.hidden = false;\n      drawer.setAttribute('aria-hidden', 'false');\n      html.classList.add('conv-lock');\n      requestAnimationFrame(() => drawer.classList.add('is-open'));\n      qs('[data-conv-cart-close]', drawer)?.focus({ preventScroll: true });\n      window.SasaShopTrack?.('cart_drawer_open', { item_count: Number(qs('[data-cart-count]')?.textContent || 0) });\n    } else {\n      drawer.classList.remove('is-open');\n      drawer.setAttribute('aria-hidden', 'true');\n      html.classList.remove('conv-lock');\n      window.setTimeout(() => { drawer.hidden = true; }, 260);\n      drawerLastFocus?.focus?.({ preventScroll: true });\n    }\n  };\n\n  const updateCartCounts = (count) => {\n    qsa('[data-cart-count]').forEach((node) => {\n      node.textContent = count;\n      node.hidden = count < 1;\n    });\n    qsa('[data-conv-cart-open]').forEach((node) => {\n      const label = node.getAttribute('aria-label') || '';\n      if (!node.dataset.baseLabel) node.dataset.baseLabel = label;\n      node.setAttribute('aria-label', `${node.dataset.baseLabel}${count ? ` (${count})` : ''}`);\n    });\n  };\n\n  const updateGoal = (cart) => {\n    if (!goal || drawer?.dataset.goalEnabled !== 'true') {\n      if (goal) goal.hidden = true;\n      return;\n    }\n    const target = Math.max(1, Number(drawer.dataset.goalItems || 3));\n    const current = Math.min(cart.item_count, target);\n    const remaining = Math.max(0, target - cart.item_count);\n    const completed = remaining === 0;\n    const template = completed ? drawer.dataset.goalComplete : drawer.dataset.goalMessage;\n    if (goalText) goalText.textContent = String(template || '').replace('__COUNT__', String(remaining));\n    if (goalCount) goalCount.textContent = `${current}/${target}`;\n    if (goalProgress) goalProgress.style.width = `${Math.min(100, (cart.item_count / target) * 100)}%`;\n    goal.classList.toggle('is-complete', completed);\n    const applyPack = qs('[data-conv-pack-discount-apply]', goal);\n    if (applyPack) applyPack.hidden = !completed || drawer?.dataset.packDiscountEnabled !== 'true' || !drawer?.dataset.packDiscountCode;\n    goal.hidden = false;\n  };\n\n  const createCartItem = (item, cart) => {\n    const wl = whiteLabelProduct(item);\n    const article = document.createElement('article');\n    article.className = 'conv-cart-item';\n    article.dataset.key = item.key;\n\n    const media = document.createElement('a');\n    media.className = 'conv-cart-item__media';\n    media.href = item.url;\n    const cartImage = wl._wlImage || item.image;\n    if (cartImage) {\n      const img = document.createElement('img');\n      img.src = cartImage;\n      img.alt = wl._wlTitle || '';\n      img.loading = 'lazy';\n      media.appendChild(img);\n    }\n\n    const copy = document.createElement('div');\n    copy.className = 'conv-cart-item__copy';\n    const title = document.createElement('a');\n    title.href = item.url;\n    title.className = 'conv-cart-item__title';\n    title.textContent = wl._wlTitle || item.product_title || item.title;\n    const variant = document.createElement('small');\n    variant.textContent = item.variant_title && item.variant_title !== 'Default Title' ? item.variant_title : '';\n    const publicProperties = Object.entries(item.properties || {}).filter(([key, value]) => !String(key).startsWith('_') && String(value || '').trim());\n    const propertyList = document.createElement('div');\n    propertyList.className = 'conv-cart-item__properties';\n    publicProperties.forEach(([key, value]) => {\n      const property = document.createElement('small');\n      property.textContent = `${key}: ${value}`;\n      propertyList.appendChild(property);\n    });\n    const price = document.createElement('strong');\n    price.textContent = money(item.final_line_price, cart.currency);\n    copy.append(title, variant, propertyList, price);\n\n    const controls = document.createElement('div');\n    controls.className = 'conv-cart-item__controls';\n    const minus = document.createElement('button');\n    minus.type = 'button'; minus.textContent = '\u2212'; minus.dataset.convCartQty = '-1'; minus.setAttribute('aria-label', drawer?.dataset.labelDecrease || 'Decrease quantity');\n    const qty = document.createElement('span'); qty.textContent = item.quantity;\n    const plus = document.createElement('button'); plus.type = 'button'; plus.textContent = '+'; plus.dataset.convCartQty = '1'; plus.setAttribute('aria-label', drawer?.dataset.labelIncrease || 'Increase quantity');\n    const remove = document.createElement('button'); remove.type = 'button'; remove.textContent = '\u00D7'; remove.className = 'conv-cart-item__remove'; remove.dataset.convCartRemove = 'true'; remove.setAttribute('aria-label', drawer?.dataset.labelRemove || 'Remove');\n    controls.append(minus, qty, plus, remove);\n\n    article.append(media, copy, controls);\n    return article;\n  };\n\n  let crossSellProductId = null;\n  const crossSell = qs('[data-conv-cross-sell]', drawer || document);\n  const crossSellRail = qs('[data-conv-cross-sell-rail]', drawer || document);\n\n  const createCrossSellCard = (product, currency) => {\n    const wl = whiteLabelProduct(product);\n    const variant = (product.variants || []).find((item) => item.available) || (product.variants || [])[0];\n    if (!variant) return null;\n    const article = document.createElement('article');\n    article.className = 'conv-cross-card conv-cross-card--contextual';\n    article.dataset.crossProductId = String(product.id);\n\n    const media = document.createElement('a');\n    media.href = product.url || `${rootUrl}products/${product.handle}`;\n    media.tabIndex = -1;\n    const imageUrl = wl._wlImage || (typeof product.featured_image === 'string' ? product.featured_image : (product.featured_image?.src || product.images?.[0]));\n    if (imageUrl) {\n      const img = document.createElement('img');\n      img.src = imageUrl;\n      img.alt = wl._wlTitle || product.title || '';\n      img.loading = 'lazy';\n      media.appendChild(img);\n    }\n\n    const copy = document.createElement('div');\n    const title = document.createElement('strong');\n    title.textContent = wl._wlTitle || product.title || '';\n    const price = document.createElement('span');\n    price.textContent = money(product.price_min ?? product.price ?? variant.price, currency);\n    copy.append(title, price);\n\n    const add = document.createElement('button');\n    add.type = 'button';\n    add.textContent = '+';\n    add.dataset.convQuickAdd = 'true';\n    add.dataset.variantId = String(variant.id);\n    add.dataset.productId = String(product.id);\n    add.dataset.productTitle = wl._wlTitle || product.title || '';\n    add.disabled = !variant.available;\n\n    article.append(media, copy, add);\n    return article;\n  };\n\n  const updateContextualCrossSell = async (cart) => {\n    if (!crossSell || !crossSellRail || !cart.items?.length) return;\n    const anchorId = String(cart.items[0].product_id || '');\n    if (!anchorId || anchorId === crossSellProductId) return;\n    crossSellProductId = anchorId;\n    const limit = Math.max(1, Math.min(6, Number(crossSell.dataset.convCrossSellLimit || 4)));\n    const inCart = new Set(cart.items.map((item) => String(item.product_id)));\n    const fetchRecommendations = async (intent) => {\n      const response = await fetch(`${rootUrl}recommendations/products.json?product_id=${encodeURIComponent(anchorId)}&limit=${limit}&intent=${intent}`, { headers: { Accept: 'application/json' } });\n      if (!response.ok) return [];\n      const data = await response.json();\n      return Array.isArray(data.products) ? data.products : [];\n    };\n    try {\n      let products = await fetchRecommendations('complementary');\n      if (!products.length) products = await fetchRecommendations('related');\n      products = products.filter((product) => !inCart.has(String(product.id))).slice(0, limit);\n      if (!products.length) return;\n      const fragment = document.createDocumentFragment();\n      products.forEach((product) => {\n        const card = createCrossSellCard(product, cart.currency);\n        if (card) fragment.appendChild(card);\n      });\n      if (fragment.childNodes.length) crossSellRail.replaceChildren(fragment);\n    } catch (_) {\n      // Keep the server-rendered fallback rail when Shopify recommendations are unavailable.\n    }\n  };\n\n  const updateValueGoal = (cart) => {\n    const node = qs('[data-conv-cart-value-goal]', drawer || document);\n    if (!node || drawer?.dataset.valueGoalEnabled !== 'true') return;\n    const target = Math.max(1, Number(drawer.dataset.valueGoalAmount || 0));\n    const current = Number(cart.total_price || 0);\n    const remaining = Math.max(0, target - current);\n    const done = remaining <= 0;\n    const label = done ? drawer.dataset.valueGoalComplete : drawer.dataset.valueGoalLabel;\n    const textNode = qs('[data-conv-cart-value-text]', node);\n    const countNode = qs('[data-conv-cart-value-count]', node);\n    const bar = qs('[data-conv-cart-value-progress]', node);\n    if (textNode) textNode.textContent = done ? String(label || '') : String(label || '').replace('__AMOUNT__', money(remaining, cart.currency));\n    if (countNode) countNode.textContent = `${money(current, cart.currency)} / ${money(target, cart.currency)}`;\n    if (bar) bar.style.width = `${Math.min(100, current / target * 100)}%`;\n    const apply = qs('[data-conv-cart-value-apply]', node);\n    if (apply) apply.hidden = !done || !drawer.dataset.valueGoalCode;\n    node.hidden = false;\n  };\n\n  const renderCart = (cart) => {\n    updateCartCounts(cart.item_count);\n    updateValueGoal(cart);\n    updateGoal(cart);\n    if (!drawer) return;\n    drawerItems?.replaceChildren();\n    const hasItems = cart.item_count > 0;\n    if (drawerEmpty) drawerEmpty.hidden = hasItems;\n    if (drawerFoot) drawerFoot.hidden = !hasItems;\n    if (drawerSubtotal) drawerSubtotal.textContent = money(cart.total_price, cart.currency);\n    if (drawerSavings) { const amount = Number(cart.total_discount || 0); drawerSavings.hidden = amount <= 0; if (drawerSavingsValue) drawerSavingsValue.textContent = amount > 0 ? `\u2212${money(amount, cart.currency)}` : ''; }\n    if (hasItems && drawerItems) cart.items.forEach((item) => drawerItems.appendChild(createCartItem(item, cart)));\n    qsa('[data-cross-product-id]', drawer).forEach((card) => {\n      card.hidden = cart.items.some((item) => String(item.product_id) === String(card.dataset.crossProductId));\n    });\n    if (hasItems) updateContextualCrossSell(cart);\n    const postAdd = qs('[data-conv-post-add]', drawer || document);\n    if (postAdd) postAdd.hidden = !hasItems;\n  };\n\n  const refreshDrawer = async ({ open = false } = {}) => {\n    try {\n      const cart = await requestCart();\n      renderCart(cart);\n      if (open) setDrawerOpen(true);\n      return cart;\n    } catch (_) {\n      return null;\n    }\n  };\n\n  const applyDiscountCode = async (code, { open = true } = {}) => {\n    const cleanCode = String(code || '').trim();\n    if (!cleanCode) return refreshDrawer({ open });\n    const response = await fetch(`${rootUrl}cart/update.js`, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n      body: JSON.stringify({ discount: cleanCode })\n    });\n    const cart = await response.json();\n    if (!response.ok) throw new Error(cart.description || cart.message || document.body?.dataset?.sasaI18nPackError || 'Unable to apply discount.');\n    const hasDiscount = Number(cart.total_discount || 0) > 0\n      || (cart.cart_level_discount_applications || []).length > 0\n      || (cart.items || []).some((item) => (item.discount_allocations || item.line_level_discount_allocations || []).length > 0);\n    if (!hasDiscount) throw new Error(document.body?.dataset?.sasaI18nPackError || 'The configured discount is not active.');\n    renderCart(cart);\n    if (open) setDrawerOpen(true);\n    window.SasaShopTrack?.('discount_apply', { code: cleanCode, success: true });\n    return cart;\n  };\n\n  const addItems = async (items, { open = true } = {}) => {\n    const clean = items.filter((item) => Number(item.id) > 0 && Number(item.quantity || 1) > 0);\n    if (!clean.length) return null;\n    const response = await fetch(`${rootUrl}cart/add.js`, {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n      body: JSON.stringify({ items: clean.map((item) => ({ id: Number(item.id), quantity: Number(item.quantity || 1), ...(item.properties ? { properties: item.properties } : {}) })) })\n    });\n    const payload = await response.json();\n    if (!response.ok) throw new Error(payload.description || payload.message || 'Unable to add product.');\n    await refreshDrawer({ open });\n    window.dispatchEvent(new CustomEvent('sasa:cart-updated', { detail: { open } }));\n    return payload;\n  };\n\n  const bundleDetail = qs('[data-conv-bundle-detail]');\n  const bundleSlot = qs('[data-conv-bundle-slot]', bundleDetail || document);\n  let bundleLastFocus = null;\n  const closeBundleDetail = () => {\n    if (!bundleDetail) return;\n    bundleDetail.classList.remove('is-open');\n    bundleDetail.setAttribute('aria-hidden', 'true');\n    html.classList.remove('conv-lock');\n    setTimeout(() => { bundleDetail.hidden = true; bundleSlot?.replaceChildren(); }, 220);\n    bundleLastFocus?.focus?.({ preventScroll: true });\n  };\n  const openBundleDetail = (trigger) => {\n    if (!bundleDetail || !bundleSlot) return;\n    const card = trigger.closest('.sasa-pack-card');\n    const template = card?.querySelector('[data-conv-bundle-template]');\n    if (!template) return;\n    if (window.SasaShopUX && !window.SasaShopUX.canOpen(bundleDetail)) return;\n    bundleLastFocus = trigger;\n    bundleSlot.replaceChildren(template.content.cloneNode(true));\n    bundleDetail.hidden = false;\n    bundleDetail.setAttribute('aria-hidden', 'false');\n    html.classList.add('conv-lock');\n    requestAnimationFrame(() => { bundleDetail.classList.add('is-open'); qs('[data-conv-bundle-close]', bundleDetail)?.focus({ preventScroll: true }); });\n    window.SasaShopTrack?.('bundle_details_open', { bundle: card?.querySelector('h3')?.textContent?.trim() || '' });\n  };\n\n  document.addEventListener('click', async (event) => {\n    const bundleOpen = event.target.closest('[data-conv-bundle-open]');\n    if (bundleOpen) { event.preventDefault(); openBundleDetail(bundleOpen); return; }\n    if (event.target.closest('[data-conv-bundle-close]')) { event.preventDefault(); closeBundleDetail(); return; }\n    const fixedBundleAdd = event.target.closest('[data-conv-fixed-bundle-add]');\n    if (fixedBundleAdd) {\n      event.preventDefault();\n      if (fixedBundleAdd.disabled || fixedBundleAdd.getAttribute('aria-busy') === 'true') return;\n      const ids = String(fixedBundleAdd.dataset.variantIds || '').split(',').map((id) => Number(id.trim())).filter((id) => id > 0);\n      const productIds = String(fixedBundleAdd.dataset.productIds || '').split(',').map((id) => id.trim());\n      const productCodes = String(fixedBundleAdd.dataset.productCodes || '').split(',').map((code) => code.trim());\n      if (!ids.length) return;\n      fixedBundleAdd.setAttribute('aria-busy', 'true');\n      fixedBundleAdd.classList.remove('is-error');\n      const title = fixedBundleAdd.dataset.bundleTitle || 'SasaShop bundle';\n      const discountCode = String(fixedBundleAdd.dataset.bundleDiscountCode || '').trim();\n      const discountPercent = Number(fixedBundleAdd.dataset.bundleDiscountPercent || 0);\n      const bundleGroup = `sasafixed-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n      try {\n        const baseline = await requestCart();\n        const addResponse = await fetch(`${rootUrl}cart/add.js`, {\n          method: 'POST',\n          headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n          body: JSON.stringify({\n            items: ids.map((id, index) => ({\n              id,\n              quantity: 1,\n              properties: { ...(window.SasaOfferPassport?.propertiesFor({productId:productIds[index],productCode:productCodes[index]}) || {}), '_SasaBundle': title, '_SasaBundleGroup': bundleGroup }\n            }))\n          })\n        });\n        const added = await addResponse.json();\n        if (!addResponse.ok) throw new Error(added.description || added.message || 'Unable to add bundle.');\n\n        let cart = await requestCart();\n        if (discountCode) {\n          const discountResponse = await fetch(`${rootUrl}cart/update.js`, {\n            method: 'POST',\n            headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n            body: JSON.stringify({ discount: discountCode })\n          });\n          cart = await discountResponse.json();\n          const bundleLines = (cart.items || []).filter((item) => item.properties && item.properties._SasaBundleGroup === bundleGroup);\n          const lineDiscountApplied = bundleLines.some((item) => (item.discount_allocations || item.line_level_discount_allocations || []).length > 0);\n          const cartCodeApplied = (cart.cart_level_discount_applications || []).some((app) => {\n            const value = String(app.title || app.code || '').trim().toLowerCase();\n            return value && value === discountCode.toLowerCase();\n          });\n          const discountIncreased = Number(cart.total_discount || 0) > Number(baseline.total_discount || 0);\n          if (!discountResponse.ok || !(lineDiscountApplied || cartCodeApplied || discountIncreased)) {\n            for (const line of bundleLines) {\n              await fetch(`${rootUrl}cart/change.js`, {\n                method: 'POST',\n                headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n                body: JSON.stringify({ id: line.key, quantity: 0 })\n              });\n            }\n            await refreshDrawer({ open: true });\n            throw new Error(`${discountCode} must be active before this discounted bundle can be purchased.`);\n          }\n        }\n\n        renderCart(cart);\n        closeBundleDetail();\n        setDrawerOpen(true);\n        window.SasaShopTrack?.('fixed_bundle_add', {\n          bundle: title,\n          products: ids.length,\n          discount_code: discountCode,\n          discount_percent: discountPercent\n        });\n        window.dispatchEvent(new CustomEvent('sasa:cart-updated', { detail: { open: true } }));\n      } catch (error) {\n        fixedBundleAdd.classList.add('is-error');\n        fixedBundleAdd.setAttribute('title', error?.message || 'Unable to add bundle');\n      } finally {\n        fixedBundleAdd.removeAttribute('aria-busy');\n      }\n      return;\n    }\n\n    const open = event.target.closest('[data-conv-cart-open]');\n    if (open && drawer) {\n      event.preventDefault();\n      await refreshDrawer({ open: true });\n      return;\n    }\n    if (event.target.closest('[data-conv-cart-close]')) {\n      event.preventDefault();\n      setDrawerOpen(false);\n      return;\n    }\n\n    const packDiscount = event.target.closest('[data-conv-pack-discount-apply]');\n    if (packDiscount) {\n      event.preventDefault();\n      if (packDiscount.getAttribute('aria-busy') === 'true') return;\n      packDiscount.setAttribute('aria-busy', 'true');\n      try { await applyDiscountCode(drawer?.dataset.packDiscountCode, { open: true }); }\n      catch (_) { packDiscount.classList.add('is-error'); }\n      finally { packDiscount.removeAttribute('aria-busy'); }\n      return;\n    }\n\n    const quickAdd = event.target.closest('[data-conv-quick-add]');\n    if (quickAdd) {\n      event.preventDefault();\n      if (quickAdd.disabled || quickAdd.getAttribute('aria-busy') === 'true') return;\n      const original = quickAdd.innerHTML;\n      quickAdd.setAttribute('aria-busy', 'true');\n      quickAdd.disabled = true;\n      try {\n        await addItems([{ id: quickAdd.dataset.variantId, quantity: 1, properties: window.SasaOfferPassport?.propertiesForDataset(quickAdd) || {} }], { open: true });\n        window.SasaShopTrack?.('add_to_cart', { source: 'quick_add', variant_id: quickAdd.dataset.variantId || '', product: quickAdd.dataset.productTitle || '' });\n      } catch (_) {\n        quickAdd.classList.add('is-error');\n      } finally {\n        quickAdd.innerHTML = original;\n        quickAdd.removeAttribute('aria-busy');\n        quickAdd.disabled = false;\n      }\n      return;\n    }\n\n    const quantity = event.target.closest('[data-conv-cart-qty]');\n    const remove = event.target.closest('[data-conv-cart-remove]');\n    if ((quantity || remove) && drawer) {\n      const row = event.target.closest('[data-key]');\n      if (!row) return;\n      const currentText = qs('.conv-cart-item__controls span', row)?.textContent || '1';\n      const current = Number(currentText);\n      const next = remove ? 0 : Math.max(0, current + Number(quantity.dataset.convCartQty || 0));\n      const response = await fetch(`${rootUrl}cart/change.js`, {\n        method: 'POST', headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n        body: JSON.stringify({ id: row.dataset.key, quantity: next })\n      });\n      if (response.ok) renderCart(await response.json());\n      return;\n    }\n  });\n\n  window.addEventListener('sasa:cart-updated', (event) => refreshDrawer({ open: Boolean(event.detail?.open) }));\n  refreshDrawer();\n\n  // Quick view ----------------------------------------------------------------\n  const quickView = qs('[data-conv-quick-view-modal]');\n  const qvMedia = qs('[data-conv-qv-media]', quickView || document);\n  const qvTitle = qs('[data-conv-qv-title]', quickView || document);\n  const qvPrice = qs('[data-conv-qv-price]', quickView || document);\n  const qvDescription = qs('[data-conv-qv-description]', quickView || document);\n  const qvLink = qs('[data-conv-qv-link]', quickView || document);\n  const qvAdd = qs('[data-conv-qv-add]', quickView || document);\n  let qvLastFocus = null;\n\n  const closeQV = () => {\n    if (!quickView) return;\n    quickView.classList.remove('is-open');\n    quickView.setAttribute('aria-hidden', 'true');\n    html.classList.remove('conv-lock');\n    window.setTimeout(() => { quickView.hidden = true; }, 220);\n    qvLastFocus?.focus?.({ preventScroll: true });\n  };\n\n  document.addEventListener('click', (event) => {\n    const trigger = event.target.closest('[data-conv-quick-view]');\n    if (trigger && quickView) {\n      event.preventDefault();\n      const card = trigger.closest('.product-card');\n      if (!card) return;\n      qvLastFocus = trigger;\n      qvMedia?.replaceChildren();\n      const sourceImg = qs('.product-card-media img', card);\n      if (sourceImg && qvMedia) {\n        const img = sourceImg.cloneNode(true);\n        img.removeAttribute('loading');\n        qvMedia.appendChild(img);\n      }\n      if (qvTitle) qvTitle.textContent = card.dataset.qvTitle || '';\n      if (qvPrice) qvPrice.textContent = card.dataset.qvPrice || '';\n      if (qvDescription) qvDescription.textContent = card.dataset.qvDescription || '';\n      if (qvLink) qvLink.href = card.dataset.qvUrl || '#';\n      const hasMultipleVariants = card.dataset.qvMultiVariant === 'true';\n      if (qvAdd) {\n        qvAdd.dataset.variantId = card.dataset.qvVariant || '';\n        qvAdd.dataset.productId = card.dataset.productId || '';\n        qvAdd.dataset.productCode = card.dataset.sasaProductCode || '';\n        qvAdd.hidden = hasMultipleVariants;\n        qvAdd.disabled = hasMultipleVariants;\n      }\n      const variantsNote = qs('[data-conv-qv-variants-note]', quickView);\n      if (variantsNote) variantsNote.hidden = !hasMultipleVariants;\n      quickView.hidden = false;\n      quickView.setAttribute('aria-hidden', 'false');\n      html.classList.add('conv-lock');\n      requestAnimationFrame(() => { quickView.classList.add('is-open'); qs('[data-conv-qv-close]', quickView)?.focus({ preventScroll: true }); });\n      window.SasaShopTrack?.('quick_view', { product: card.dataset.qvTitle || '', multi_variant: hasMultipleVariants });\n      return;\n    }\n    if (event.target.closest('[data-conv-qv-close]')) closeQV();\n    if (event.target.closest('[data-conv-qv-add]')) {\n      const id = qvAdd?.dataset.variantId;\n      if (!id) return;\n      addItems([{ id, quantity: 1, properties: window.SasaOfferPassport?.propertiesForDataset(qvAdd) || {} }], { open: true }).then(() => { window.SasaShopTrack?.('add_to_cart', { source: 'quick_view', variant_id: id }); closeQV(); }).catch(() => {});\n    }\n  });\n\n  // Frequently bought together ------------------------------------------------\n  const updateFBT = (container) => {\n    const selected = qsa('[data-conv-fbt-item]:checked', container);\n    const total = selected.reduce((sum, input) => sum + Number(input.dataset.price || 0), 0);\n    const totalNode = qs('[data-conv-fbt-total]', container);\n    if (totalNode) totalNode.textContent = money(total);\n    const button = qs('[data-conv-fbt-add]', container);\n    if (button) button.disabled = selected.length === 0;\n  };\n  document.addEventListener('change', (event) => {\n    const input = event.target.closest('[data-conv-fbt-item]');\n    if (input) updateFBT(input.closest('[data-conv-fbt]'));\n  });\n  document.addEventListener('click', (event) => {\n    const button = event.target.closest('[data-conv-fbt-add]');\n    if (!button) return;\n    const container = button.closest('[data-conv-fbt]');\n    const items = qsa('[data-conv-fbt-item]:checked', container).map((input) => ({ id: input.value, quantity: 1, properties: window.SasaOfferPassport?.propertiesForDataset(input) || {} }));\n    if (!items.length) return;\n    button.setAttribute('aria-busy', 'true');\n    addItems(items, { open: true }).finally(() => button.removeAttribute('aria-busy'));\n  });\n  // Initialize FBT totals without observing the entire document. The old body-wide\n  // MutationObserver could retrigger itself when updateFBT changed textContent,\n  // creating a feedback loop that overloaded Shopify's theme editor.\n  const initFBT = (scope = document) => qsa('[data-conv-fbt]', scope).forEach(updateFBT);\n  initFBT();\n  document.addEventListener('shopify:section:load', (event) => initFBT(event.target));\n  document.addEventListener('sasa:recommendations-loaded', (event) => initFBT(event.target || document));\n\n  // Safely migrate legacy serialized lists without ever printing raw JSON.\n  // The renderer intentionally uses DOM nodes and textContent, not innerHTML.\n  const hydrateLegacyLists = (scope = document) => qsa('[data-sasa-list-legacy]', scope).forEach((holder) => {\n    let values = null;\n    try { values = JSON.parse(holder.dataset.sasaListLegacy || ''); }\n    catch (error) { console.warn('SasaShop ignored an invalid legacy list.', error); }\n    if (!Array.isArray(values)) { holder.remove(); return; }\n    const items = values.filter((value) => ['string','number','boolean'].includes(typeof value) && String(value).trim()).map(String);\n    if (!items.length) { holder.remove(); return; }\n    const list = document.createElement('ul');\n    list.className = 'sasa-rendered-list';\n    items.forEach((value) => { const item = document.createElement('li'); item.textContent = value; list.appendChild(item); });\n    holder.replaceWith(list);\n  });\n  hydrateLegacyLists();\n  document.addEventListener('shopify:section:load', (event) => hydrateLegacyLists(event.target));\n\n  // Recently viewed ------------------------------------------------------------\n  const quarantinedProductIds = new Set(['15835555135871','15835555529087']);\n  const quarantinedHandles = new Set(['sasashop-developer-api-credit-pack-175-usd-balance','sasashop-vip-rewards-tier-access']);\n  const isQuarantinedProduct = (item) => quarantinedProductIds.has(String(item?.id || '')) || quarantinedHandles.has(String(item?.handle || item?.url || '').replace(/^https?:\\/\\/[^/]+/i, '').replace(/^\\/?products\\//, '').split(/[?#]/)[0]);\n  const currentProduct = qs('[data-product-root][data-recent-id]');\n  const recentSection = qs('[data-conv-recently-viewed]');\n  const recentGrid = qs('[data-conv-recent-grid]', recentSection || document);\n  const recentKey = 'sasashop_recent_products_v2';\n  const getRecent = () => {\n    try { return JSON.parse(localStorage.getItem(recentKey) || '[]').filter((item) => !isQuarantinedProduct(item)); } catch (_) { return []; }\n  };\n  const saveRecent = (items) => {\n    try { localStorage.setItem(recentKey, JSON.stringify(items.slice(0, 8))); } catch (_) {}\n  };\n  if (currentProduct && !isQuarantinedProduct({id:currentProduct.dataset.recentId,url:currentProduct.dataset.recentUrl})) {\n    const entry = {\n      id: currentProduct.dataset.recentId,\n      title: currentProduct.dataset.recentTitle,\n      url: currentProduct.dataset.recentUrl,\n      price: currentProduct.dataset.recentPrice,\n      image: currentProduct.dataset.recentImage || ''\n    };\n    const existing = getRecent().filter((item) => String(item.id) !== String(entry.id));\n    saveRecent([entry, ...existing]);\n  }\n  if (recentSection && recentGrid) {\n    const currentId = currentProduct?.dataset.recentId;\n    const items = getRecent().filter((item) => String(item.id) !== String(currentId)).slice(0, 4);\n    if (items.length) {\n      items.forEach((item) => {\n        const card = document.createElement('a');\n        card.className = 'conv-recent-card';\n        card.href = item.url;\n        const media = document.createElement('span');\n        if (item.image) { const img = document.createElement('img'); img.src = item.image; img.alt = item.title; img.loading = 'lazy'; media.appendChild(img); }\n        const copy = document.createElement('span');\n        const title = document.createElement('strong'); title.textContent = item.title;\n        const price = document.createElement('small'); price.textContent = item.price;\n        copy.append(title, price); card.append(media, copy); recentGrid.appendChild(card);\n      });\n      recentSection.hidden = false;\n    }\n  }\n\n  // Predictive search -----------------------------------------------------------\n  let predictiveTimer;\n  const predictiveSearchEnabled = document.body?.dataset?.predictiveSearchEnabled !== 'false';\n  qsa('[data-sasa-search]').forEach((panel) => {\n    const input = qs('[data-sasa-search-input]', panel);\n    const results = qs('[data-conv-predictive-results]', panel);\n    if (!input || !results) return;\n    if (!predictiveSearchEnabled) { results.hidden = true; return; }\n    input.addEventListener('input', () => {\n      clearTimeout(predictiveTimer);\n      const query = input.value.trim();\n      if (query.length < 2) { results.hidden = true; results.replaceChildren(); return; }\n      predictiveTimer = setTimeout(async () => {\n        try {\n          const url = `${rootUrl}search/suggest.json?q=${encodeURIComponent(query)}&resources[type]=product&resources[limit]=5&resources[options][unavailable_products]=hide`;\n          const response = await fetch(url, { headers: { Accept: 'application/json' } });\n          if (!response.ok) throw new Error('Predictive search unavailable');\n          const data = await response.json();\n          const products = (data?.resources?.results?.products || []).filter((product) => !isQuarantinedProduct({id:product.id,handle:product.handle,url:product.url}));\n          results.replaceChildren();\n          products.forEach((product) => {\n            const wl = whiteLabelProduct(product);\n            const link = document.createElement('a'); link.href = product.url; link.className = 'conv-predictive__item';\n            const media = document.createElement('span');\n            const predictiveImage = wl._wlImage || product.featured_image?.url; if (predictiveImage) { const img = document.createElement('img'); img.src = predictiveImage; img.alt = wl._wlTitle || ''; img.loading = 'lazy'; media.appendChild(img); }\n            const copy = document.createElement('span'); const title = document.createElement('strong'); title.textContent = wl._wlTitle || product.title; copy.appendChild(title);\n            link.append(media, copy); results.appendChild(link);\n          });\n          results.hidden = products.length === 0;\n        } catch (_) { results.hidden = true; }\n      }, 160);\n    });\n  });\n\n  // Sticky buy bar --------------------------------------------------------------\n  const sticky = qs('[data-conv-sticky-buy]');\n  const primaryPurchase = qs('#ProductPurchase');\n  const primaryForm = qs('[data-product-form]');\n  if (sticky && primaryPurchase && primaryForm && 'IntersectionObserver' in window) {\n    const observer = new IntersectionObserver(([entry]) => {\n      const show = !entry.isIntersecting && window.matchMedia('(min-width: 900px)').matches;\n      sticky.classList.toggle('is-visible', show);\n      sticky.setAttribute('aria-hidden', String(!show));\n    }, { threshold: 0.05 });\n    observer.observe(primaryPurchase);\n    qs('[data-conv-sticky-add]', sticky)?.addEventListener('click', () => primaryForm.requestSubmit(qs('[type=\"submit\"]', primaryForm)));\n  }\n\n  // Versioned campaign popup with a store-wide absolute deadline ----------------\n  const promo = qs('[data-conv-promo]');\n  if (promo) {\n    const campaignId = String(promo.dataset.campaignId || 'default').trim() || 'default';\n    const campaignStart = new Date(promo.dataset.campaignStart || '').getTime();\n    const campaignEnd = new Date(promo.dataset.countdownEnd || '').getTime();\n    const isCampaignActive = (at = Date.now()) =>\n      Number.isFinite(campaignStart) && Number.isFinite(campaignEnd) && at >= campaignStart && at < campaignEnd;\n    const expireCampaign = () => {\n      qsa('[data-promotion-active]').forEach((node) => { node.hidden = true; node.setAttribute('aria-hidden', 'true'); });\n      qsa('[data-promotion-expired]').forEach((node) => { node.hidden = false; });\n      promo.classList.remove('is-open');\n      html.classList.remove('conv-lock');\n      window.dispatchEvent(new CustomEvent('sasa:promotion-expired', { detail: { campaignId } }));\n    };\n    window.SasaShopPromotion = { campaignId, campaignStart, campaignEnd, isActive: isCampaignActive, expire: expireCampaign };\n    const promoKey = `sasashop_promo_closed_${campaignId}`;\n    let autoAttempted = false;\n    const showPromo = () => {\n      if (autoAttempted || !isCampaignActive()) return;\n      autoAttempted = true;\n      try { if (sessionStorage.getItem(promoKey) === '1') return; } catch (_) {}\n      if (window.SasaShopUX && !window.SasaShopUX.canOpen(promo)) return;\n      promo.hidden = false; promo.setAttribute('aria-hidden', 'false'); html.classList.add('conv-lock');\n      requestAnimationFrame(() => { promo.classList.add('is-open'); qs('[data-conv-promo-close]', promo)?.focus({ preventScroll: true }); });\n      window.SasaShopTrack?.('promo_view', { trigger: 'delay', campaign_id: campaignId });\n    };\n    const closePromo = () => {\n      promo.classList.remove('is-open'); promo.setAttribute('aria-hidden', 'true'); html.classList.remove('conv-lock');\n      window.SasaShopTrack?.('promo_close', { campaign_id: campaignId });\n      try { sessionStorage.setItem(promoKey, '1'); } catch (_) {}\n      setTimeout(() => { promo.hidden = true; }, 220);\n    };\n    qsa('[data-conv-promo-close]', promo).forEach((btn) => btn.addEventListener('click', closePromo));\n    qs('[data-conv-scratch-open]', promo)?.addEventListener('click', closePromo);\n    if (!isCampaignActive()) {\n      expireCampaign();\n    } else {\n      const delay = Math.min(12000, Math.max(8000, Number(promo.dataset.delay || 10000)));\n      window.setTimeout(showPromo, delay);\n      const counter = qs('[data-conv-countdown]', promo);\n      if (counter) {\n        counter.hidden = false;\n        const tick = () => {\n          const diff = Math.max(0, campaignEnd - Date.now());\n          const days = Math.floor(diff / 86400000);\n          const hours = Math.floor(diff / 3600000) % 24;\n          const minutes = Math.floor(diff / 60000) % 60;\n          const seconds = Math.floor(diff / 1000) % 60;\n          qs('[data-days]', counter).textContent = String(days).padStart(2, '0');\n          qs('[data-hours]', counter).textContent = String(hours).padStart(2, '0');\n          qs('[data-minutes]', counter).textContent = String(minutes).padStart(2, '0');\n          qs('[data-seconds]', counter).textContent = String(seconds).padStart(2, '0');\n          if (diff > 0) window.setTimeout(tick, 1000); else expireCampaign();\n        };\n        tick();\n      }\n    }\n  }\n\n  // Image zoom ------------------------------------------------------------------\n  const zoom = qs('[data-conv-image-zoom]');\n  const zoomImg = qs('[data-conv-zoom-image]', zoom || document);\n  const closeZoom = () => { if (!zoom) return; zoom.classList.remove('is-open'); zoom.setAttribute('aria-hidden', 'true'); html.classList.remove('conv-lock'); setTimeout(() => { zoom.hidden = true; }, 200); };\n  document.addEventListener('click', (event) => {\n    const image = event.target.closest('.product-media-stage img');\n    if (image && zoom && zoomImg) {\n      zoomImg.src = image.currentSrc || image.src; zoomImg.alt = image.alt || ''; zoom.hidden = false; zoom.setAttribute('aria-hidden', 'false'); html.classList.add('conv-lock'); requestAnimationFrame(() => { zoom.classList.add('is-open'); qs('[data-conv-zoom-close]', zoom)?.focus({ preventScroll: true }); });\n    }\n    if (event.target.closest('[data-conv-zoom-close]')) closeZoom();\n  });\n\n  document.addEventListener('keydown', (event) => {\n    if (event.key !== 'Escape') return;\n    if (drawer?.classList.contains('is-open')) setDrawerOpen(false);\n    if (quickView?.classList.contains('is-open')) closeQV();\n    if (bundleDetail?.classList.contains('is-open')) closeBundleDetail();\n    if (zoom?.classList.contains('is-open')) closeZoom();\n  });\n})();\n\n(() => {\n  const rootUrl = window.Shopify?.routes?.root || '/';\n  const money = (cents, currency = document.body?.dataset?.currency || 'EUR') => {\n    try { return new Intl.NumberFormat(document.documentElement.lang || 'en', { style: 'currency', currency }).format(Number(cents || 0) / 100); }\n    catch (_) { return `${(Number(cents || 0) / 100).toFixed(2)} ${currency}`; }\n  };\n  const initBuilder = (builder) => {\n    if (!builder || builder.dataset.convBuilderReady === 'true') return;\n    builder.dataset.convBuilderReady = 'true';\n    const inputs = [...builder.querySelectorAll('[data-conv-builder-item]')];\n    const filterButtons = [...builder.querySelectorAll('[data-conv-builder-filter]')];\n    const builderCards = [...builder.querySelectorAll('[data-conv-builder-category]')];\n    filterButtons.forEach((button) => button.addEventListener('click', () => {\n      const category = button.dataset.convBuilderFilter || 'all';\n      filterButtons.forEach((other) => other.classList.toggle('is-active', other === button));\n      builderCards.forEach((card) => { card.hidden = category !== 'all' && card.dataset.convBuilderCategory !== category; });\n    }));\n    const goal = Math.max(1, Number(builder.dataset.goal || 3));\n    const discountEnabled = builder.dataset.discountEnabled === 'true';\n    const discountPercent = Math.max(0, Math.min(90, Number(builder.dataset.discountPercent || 30)));\n    const discountCode = String(builder.dataset.discountCode || '').trim();\n    const count = builder.querySelector('[data-conv-builder-count]');\n    const progress = builder.querySelector('[data-conv-builder-progress]');\n    const original = builder.querySelector('[data-conv-builder-original]');\n    const saving = builder.querySelector('[data-conv-builder-save]');\n    const total = builder.querySelector('[data-conv-builder-total]');\n    const status = builder.querySelector('[data-conv-builder-status]');\n    const add = builder.querySelector('[data-conv-builder-add]');\n    const update = () => {\n      const selected = inputs.filter((input) => input.checked);\n      const subtotal = selected.reduce((sum, input) => sum + Number(input.dataset.price || 0), 0);\n      const save = discountEnabled && selected.length === goal ? Math.round(subtotal * discountPercent / 100) : 0;\n      const final = Math.max(0, subtotal - save);\n      if (count) count.textContent = `${selected.length}/${goal}`;\n      if (progress) progress.style.width = `${Math.min(100, selected.length / goal * 100)}%`;\n      if (original) original.textContent = money(subtotal);\n      if (saving) saving.textContent = save > 0 ? `\u2212${money(save)}` : `\u2212${money(0)}`;\n      if (total) total.textContent = money(final);\n      if (status) status.textContent = '';\n      if (add) add.disabled = selected.length !== goal;\n      inputs.forEach((input) => {\n        if (!input.checked && selected.length >= goal) input.disabled = true;\n        else if (!input.hasAttribute('data-original-disabled')) input.disabled = false;\n      });\n      builder.classList.toggle('is-unlocked', selected.length === goal);\n    };\n    inputs.forEach((input) => {\n      if (input.disabled) input.setAttribute('data-original-disabled', 'true');\n      input.addEventListener('change', update);\n    });\n    add?.addEventListener('click', async () => {\n      const selected = inputs.filter((input) => input.checked).slice(0, goal);\n      if (selected.length !== goal) return;\n      add.setAttribute('aria-busy', 'true');\n      if (status) status.textContent = '';\n      try {\n        const packGroup = `sasapack-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n        const response = await fetch(`${rootUrl}cart/add.js`, {\n          method: 'POST', headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n          body: JSON.stringify({ items: selected.map((input) => ({\n            id: Number(input.value),\n            quantity: 1,\n            properties: {\n              ...(window.SasaOfferPassport?.propertiesForDataset(input) || {}),\n              '_SasaPack': `${goal} products`,\n              '_SasaPackGroup': packGroup\n            }\n          })) })\n        });\n        const payload = await response.json();\n        if (!response.ok) throw new Error(payload.description || 'Unable to add pack');\n        if (discountEnabled && discountCode) {\n          const discountResponse = await fetch(`${rootUrl}cart/update.js`, {\n            method: 'POST', headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n            body: JSON.stringify({ discount: discountCode })\n          });\n          const discountCart = await discountResponse.json();\n          const hasDiscount = Number(discountCart.total_discount || 0) > 0 || (discountCart.cart_level_discount_applications || []).length > 0 || (discountCart.items || []).some((item) => (item.discount_allocations || []).length > 0);\n          if (!discountResponse.ok || !hasDiscount) {\n            // The 3-product offer only makes sense with its promised 30% reward.\n            // Roll back the SasaPack lines instead of leaving an undiscounted pack in the cart.\n            const packLines = (discountCart.items || []).filter((item) => item.properties && item.properties._SasaPackGroup === packGroup);\n            for (const line of packLines) {\n              await fetch(`${rootUrl}cart/change.js`, {\n                method: 'POST', headers: { 'Content-Type': 'application/json', Accept: 'application/json' },\n                body: JSON.stringify({ id: line.key, quantity: 0 })\n              });\n            }\n            window.dispatchEvent(new CustomEvent('sasa:cart-updated', { detail: { open: true } }));\n            throw new Error(document.body?.dataset?.sasaI18nPackError || `${discountCode} must be active before SasaPack can be purchased.`);\n          }\n        }\n        if (status) status.textContent = discountEnabled ? `\u2713 ${discountPercent}%` : '\u2713';\n        window.SasaShopTrack?.('sasapack_add', { products: goal, discount_percent: discountEnabled ? discountPercent : 0, discount_code: discountCode || '' });\n        window.dispatchEvent(new CustomEvent('sasa:cart-updated', { detail: { open: true } }));\n      } catch (error) {\n        add.classList.add('is-error');\n        if (status) status.textContent = error.message || 'Unable to add SasaPack';\n      } finally { add.removeAttribute('aria-busy'); }\n    });\n    update();\n  };\n  const initBuilders = (scope = document) => scope.querySelectorAll?.('[data-conv-bundle-builder]').forEach(initBuilder);\n  initBuilders();\n  document.addEventListener('shopify:section:load', (event) => initBuilders(event.target));\n})();\n\n/* v16 conversion extras: absolute campaign countdown + weighted scratch rewards */\n(() => {\n  const html = document.documentElement;\n  const qsa = (s,r=document)=>[...r.querySelectorAll(s)];\n  const qs = (s,r=document)=>r.querySelector(s);\n  const tickCountdown = (node) => {\n    const isEditorPreview = node.dataset.previewCountdown === 'true' && Boolean(window.Shopify?.designMode);\n    const start = isEditorPreview ? Date.now() - 1000 : new Date(node.dataset.start || '').getTime();\n    const end = isEditorPreview ? Date.now() + 36 * 60 * 60 * 1000 : new Date(node.dataset.end || '').getTime();\n    if ((!isEditorPreview && (!Number.isFinite(start) || Date.now() < start)) || !Number.isFinite(end)) { node.hidden = true; return; }\n    if (end <= Date.now()) { node.hidden = true; window.SasaShopPromotion?.expire?.(); return; }\n    node.hidden = false;\n    const render = () => {\n      const diff=Math.max(0,end-Date.now());\n      const d=Math.floor(diff/86400000),h=Math.floor(diff/3600000)%24,m=Math.floor(diff/60000)%60,s=Math.floor(diff/1000)%60;\n      const set=(sel,val)=>{const el=qs(sel,node);if(el)el.textContent=String(val).padStart(2,'0')};\n      set('[data-days]',d);set('[data-hours]',h);set('[data-minutes]',m);set('[data-seconds]',s);\n      if(diff>0)setTimeout(render,1000); else { node.hidden=true; window.SasaShopPromotion?.expire?.(); }\n    }; render();\n  };\n  qsa('[data-conv-inline-countdown]').forEach(tickCountdown);\n  document.addEventListener('shopify:section:load', (event) => qsa('[data-conv-inline-countdown]', event.target).forEach(tickCountdown));\n\n  const scratch=qs('[data-conv-scratch]');\n  if(!scratch)return;\n  scratch.dataset.controllerLoaded='v22';\n  const claimEndpoint=String(scratch.dataset.claimEndpoint||'').trim();\n  if(!claimEndpoint)return;\n  const secureRandom=typeof window.crypto?.getRandomValues==='function';\n  const secureUuid=typeof window.crypto?.randomUUID==='function';\n  const campaignId=String(scratch.dataset.campaignId||window.SasaShopPromotion?.campaignId||'default').trim()||'default';\n  const campaignStart=new Date(scratch.dataset.campaignStart||'').getTime();\n  const campaignEnd=new Date(scratch.dataset.campaignEnd||'').getTime();\n  const campaignActive=()=>Number.isFinite(campaignStart)&&Number.isFinite(campaignEnd)&&Date.now()>=campaignStart&&Date.now()<campaignEnd;\n  scratch.dataset.campaignRuntimeActive=String(campaignActive());\n  if(!campaignActive()){window.SasaShopPromotion?.expire?.();return;}\n  scratch.dataset.runtimeReady='true';\n  const label=qs('[data-conv-scratch-label]',scratch),code=qs('[data-conv-scratch-code]',scratch),canvas=qs('[data-conv-scratch-canvas]',scratch),status=qs('[data-conv-scratch-status]',scratch),revealButton=qs('[data-conv-scratch-reveal]',scratch);\n  let ctx,down=false,revealed=false,chosen=null,lastFocused=null,claimPromise=null,activePointerId=null,pendingStroke=[],gestureSequence=0,lastScratchPoint=null;\n  const attemptKey=`sasashop_scratch_attempt_${campaignId}`;\n  const autoKey=`sasashop_scratch_auto_${campaignId}`;\n  const browserKey='sasashop_scratch_browser_v1';\n  const rewardKey=`sasashop_scratch_reward_${campaignId}`;\n  const readCookie=(name)=>{const prefix=`${encodeURIComponent(name)}=`;const part=document.cookie.split(';').map(value=>value.trim()).find(value=>value.startsWith(prefix));return part?decodeURIComponent(part.slice(prefix.length)):''};\n  const readValue=(key)=>{try{return localStorage.getItem(key)||readCookie(key)}catch(_){return readCookie(key)}};\n  const writeValue=(key,value,maxAge=86400)=>{let stored=false;try{localStorage.setItem(key,String(value));stored=true}catch(_){}if(!stored)document.cookie=`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}; Max-Age=${maxAge}; Path=/; SameSite=Lax; Secure`;return stored||readCookie(key)===String(value)};\n  const createBrowserToken=()=>{const existing=readValue(browserKey);if(/^[A-Za-z0-9_-]{32,96}$/.test(existing))return existing;let token='';if(secureRandom){const bytes=new Uint8Array(32);window.crypto.getRandomValues(bytes);token=btoa(String.fromCharCode(...bytes)).replace(/\\+/g,'-').replace(/\\//g,'_').replace(/=+$/,'')}else if(secureUuid){token=`${window.crypto.randomUUID()}${window.crypto.randomUUID()}`.replace(/-/g,'')}if(!token)return '';return writeValue(browserKey,token,31536000)?token:''};\n  const lastAttempt=()=>Number(readValue(attemptKey)||0);\n  const attemptAvailable=()=>{const last=lastAttempt();return !last||(Date.now()-last)>=86400000};\n  const markAttempt=()=>writeValue(attemptKey,String(Date.now()),86400);\n  const readStoredReward=()=>{try{const saved=JSON.parse(localStorage.getItem(rewardKey)||'null');if(!saved||Date.now()-Number(saved.claimedAt||0)>=86400000)return null;const savedLabel=String(saved.label||'').trim(),savedCode=String(saved.code||'').trim();return savedLabel&&savedLabel.length<=100&&/^[A-Z0-9-]{6,64}$/.test(savedCode)?{label:savedLabel,code:savedCode}:null}catch(_){return null}};\n  const storeReward=(reward)=>{try{localStorage.setItem(rewardKey,JSON.stringify({claimedAt:Date.now(),label:reward.label,code:reward.code}));return true}catch(_){return false}};\n  const applyChosen=()=>{if(!chosen)return;if(label)label.textContent=chosen.label;if(code)code.textContent=chosen.code;if(canvas){canvas.removeAttribute('aria-disabled');canvas.classList.remove('is-locked')}if(revealButton){revealButton.disabled=false}};\n  const isSpanish=()=>String(document.documentElement.lang||'').toLowerCase().startsWith('es');\n  const setStatus=(message,tone='info')=>{if(!status)return;status.textContent=message;status.dataset.tone=tone;status.hidden=!message;};\n  const lockedMessage=()=>isSpanish()?'Ya has usado tu intento. Podr\u00E1s volver a participar 24 horas despu\u00E9s del intento anterior.':'Your attempt has already been used. You can play again 24 hours after the previous attempt.';\n  const unavailableMessage=()=>isSpanish()?'No se pudo confirmar el premio. Para evitar un cobro duplicado, este intento queda reservado durante 24 horas.':'The reward could not be confirmed. To prevent a duplicate claim, this attempt remains reserved for 24 hours.';\n  const secureBrowserMessage=()=>isSpanish()?'Este navegador no ofrece la generaci\u00F3n segura necesaria para participar. Prueba con una versi\u00F3n actualizada de Chrome, Edge, Firefox o Safari.':'This browser does not provide the secure random generation required to participate. Try an updated version of Chrome, Edge, Firefox or Safari.';\n  const canvasUnavailableMessage=()=>isSpanish()?'Este navegador no puede mostrar la superficie de rasca. Actual\u00EDzalo o prueba con Chrome, Edge, Firefox o Safari.':'This browser cannot display the scratch surface. Update it or try Chrome, Edge, Firefox or Safari.';\n  const setClaimLockedView=()=>{if(chosen)return;setStatus(lockedMessage(),'locked');if(canvas){canvas.setAttribute('aria-disabled','true');canvas.classList.add('is-locked');}if(revealButton)revealButton.disabled=true;};\n  const requestClaim=async()=>{\n    if(claimPromise)return claimPromise;\n    if(!campaignActive()||revealed||chosen||!attemptAvailable())return Boolean(chosen);\n    claimPromise=(async()=>{\n      const browserToken=createBrowserToken();\n      if(!browserToken){setStatus(secureBrowserMessage(),'error');return false;}\n      const controller=new AbortController();\n      const timeout=setTimeout(()=>controller.abort(),8000);\n      markAttempt();\n      setStatus(isSpanish()?'Validando tu intento\u2026':'Validating your attempt\u2026');\n      try{\n        const response=await fetch(claimEndpoint,{method:'POST',mode:'cors',credentials:'omit',cache:'no-store',redirect:'error',headers:{'Content-Type':'application/json'},body:JSON.stringify({browser_token:browserToken,campaign_id:campaignId}),signal:controller.signal});\n        if(response.status===409){setClaimLockedView();return false;}\n        if(!response.ok){setStatus(unavailableMessage(),'error');return false;}\n        const payload=await response.json();\n        const rewardLabel=String(payload?.label||'').trim(),rewardCode=String(payload?.code||'').trim();\n        if(payload?.status!=='claimed'||!rewardLabel||rewardLabel.length>100||!/^[A-Z0-9-]{6,64}$/.test(rewardCode)){setStatus(unavailableMessage(),'error');return false;}\n        chosen={label:rewardLabel,code:rewardCode};storeReward(chosen);\n        applyChosen();setStatus(isSpanish()?'Premio validado. Rasca para descubrirlo.':'Reward validated. Scratch to reveal it.','success');return true;\n      }catch(_){setStatus(unavailableMessage(),'error');return false;}\n      finally{clearTimeout(timeout);}\n    })();\n    try{return await claimPromise;}finally{claimPromise=null;}\n  };\n  const reserveAttempt=async()=>{if(navigator.locks?.request){return navigator.locks.request(attemptKey,{ifAvailable:true},lock=>lock?requestClaim():false)}return requestClaim()};\n  const decodeText=(value='')=>{const area=document.createElement('textarea');area.innerHTML=String(value);return area.value};\n  const coat=()=>{if(!canvas)return false;ctx=canvas.getContext('2d',{willReadFrequently:true});if(!ctx){setStatus(canvasUnavailableMessage(),'error');canvas.setAttribute('aria-disabled','true');canvas.classList.add('is-locked');return false;}ctx.globalCompositeOperation='source-over';const g=ctx.createLinearGradient(0,0,canvas.width,canvas.height);g.addColorStop(0,'#6f54a7');g.addColorStop(.42,'#43385f');g.addColorStop(1,'#171421');ctx.fillStyle=g;ctx.fillRect(0,0,canvas.width,canvas.height);ctx.strokeStyle='rgba(255,255,255,.055)';ctx.lineWidth=1;for(let x=-canvas.height;x<canvas.width+canvas.height;x+=26){ctx.beginPath();ctx.moveTo(x,0);ctx.lineTo(x+canvas.height,canvas.height);ctx.stroke()}const glow=ctx.createRadialGradient(canvas.width*.5,canvas.height*.45,8,canvas.width*.5,canvas.height*.45,220);glow.addColorStop(0,'rgba(162,119,255,.27)');glow.addColorStop(1,'rgba(162,119,255,0)');ctx.fillStyle=glow;ctx.fillRect(0,0,canvas.width,canvas.height);ctx.fillStyle='rgba(255,255,255,.96)';ctx.font='800 29px sans-serif';ctx.textAlign='center';ctx.fillText(decodeText(canvas.dataset.scratchText||'Scratch to reveal'),canvas.width/2,canvas.height/2+4);ctx.fillStyle='rgba(255,255,255,.55)';ctx.font='600 13px sans-serif';ctx.fillText('\u2726  SASASHOP REWARD  \u2726',canvas.width/2,canvas.height/2+34);ctx.globalCompositeOperation='destination-out';ctx.fillStyle='#000';ctx.strokeStyle='#000';return true};\n  const canvasReady=coat();\n  chosen=readStoredReward();\n  applyChosen();\n  if(!canvasReady&&revealButton)revealButton.hidden=false;\n  const pos=(e)=>{const r=canvas.getBoundingClientRect();return{x:(e.clientX-r.left)*(canvas.width/r.width),y:(e.clientY-r.top)*(canvas.height/r.height)}};\n  const scratchAtPoint=(p)=>{if(!ctx||!p||revealed||!chosen)return;ctx.beginPath();if(lastScratchPoint){ctx.moveTo(lastScratchPoint.x,lastScratchPoint.y);ctx.lineTo(p.x,p.y);ctx.lineWidth=68;ctx.lineCap='round';ctx.stroke()}else{ctx.arc(p.x,p.y,34,0,Math.PI*2);ctx.fill()}lastScratchPoint=p;};\n  const reveal=()=>{if(revealed||!chosen)return;revealed=true;if(ctx&&canvas){ctx.clearRect(0,0,canvas.width,canvas.height);canvas.style.pointerEvents='none';canvas.setAttribute('aria-disabled','true')}else if(canvas){canvas.hidden=true;canvas.setAttribute('aria-disabled','true')}if(revealButton)revealButton.hidden=true;setStatus(isSpanish()?'Premio revelado. Copia el c\u00F3digo y \u00FAsalo en el checkout.':'Reward revealed. Copy the code and use it at checkout.','success');window.SasaShopTrack?.('scratch_reveal',{reward:chosen.label||'',campaign_id:campaignId});};\n  const check=()=>{if(!ctx||revealed)return;try{const data=ctx.getImageData(0,0,canvas.width,canvas.height).data;let clear=0,total=0;for(let i=3;i<data.length;i+=64){total++;if(data[i]<50)clear++;}if(total&&clear/total>.42)reveal();}catch(_){}};\n  canvas?.addEventListener('pointerdown',async e=>{if(!ctx){setStatus(canvasUnavailableMessage(),'error');if(revealButton)revealButton.hidden=false;return;}if(revealed||(!attemptAvailable()&&!chosen)){setClaimLockedView();return;}e.preventDefault();const pointerId=e.pointerId,gesture=++gestureSequence;activePointerId=pointerId;down=true;lastScratchPoint=null;pendingStroke=[pos(e)];try{canvas.setPointerCapture?.(pointerId)}catch(_){}if(chosen){pendingStroke.splice(0).forEach(scratchAtPoint);return;}const reserved=await reserveAttempt();if(gesture!==gestureSequence)return;if(!reserved){down=false;pendingStroke=[];activePointerId=null;return;}pendingStroke.splice(0).forEach(scratchAtPoint);if(!down){lastScratchPoint=null;check()}},{passive:false});\n  canvas?.addEventListener('pointermove',e=>{if(e.pointerId!==activePointerId||!down)return;e.preventDefault();const point=pos(e);if(chosen)scratchAtPoint(point);else if(pendingStroke.length<256)pendingStroke.push(point)},{passive:false});\n  const finishPointer=(e)=>{if(activePointerId!==null&&e.pointerId!==activePointerId)return;e.preventDefault?.();const endPoint=ctx?pos(e):null;if(endPoint){if(chosen)scratchAtPoint(endPoint);else if(pendingStroke.length<256)pendingStroke.push(endPoint)}down=false;activePointerId=null;if(chosen){pendingStroke.splice(0).forEach(scratchAtPoint);lastScratchPoint=null;check()}};\n  canvas?.addEventListener('pointerup',finishPointer);\n  canvas?.addEventListener('pointercancel',finishPointer);\n  canvas?.addEventListener('keydown',async e=>{if(e.key!=='Enter'&&e.key!==' ')return;e.preventDefault();if(await reserveAttempt())reveal()});\n  revealButton?.addEventListener('click',async()=>{if(revealed)return;if(!attemptAvailable()&&!chosen){setClaimLockedView();return;}revealButton.disabled=true;const reserved=await reserveAttempt();if(reserved)reveal();else if(attemptAvailable())revealButton.disabled=false;});\n  if(!attemptAvailable())setClaimLockedView();\n  const open=()=>{if(!campaignActive())return;if(window.SasaShopUX&&!window.SasaShopUX.canOpen(scratch))return;lastFocused=document.activeElement;if(!attemptAvailable()&&!chosen)setClaimLockedView();scratch.hidden=false;scratch.setAttribute('aria-hidden','false');html.classList.add('conv-lock');requestAnimationFrame(()=>{scratch.classList.add('is-open');qs('[data-conv-scratch-close]',scratch)?.focus({preventScroll:true})});window.SasaShopTrack?.('scratch_open',{campaign_id:campaignId})};\n  const close=()=>{scratch.classList.remove('is-open');scratch.setAttribute('aria-hidden','true');html.classList.remove('conv-lock');window.SasaShopTrack?.('scratch_close',{campaign_id:campaignId});setTimeout(()=>{scratch.hidden=true;lastFocused?.focus?.({preventScroll:true})},220)};\n  document.addEventListener('click',e=>{if(e.target.closest('[data-conv-scratch-open]')){e.preventDefault();open()}if(e.target.closest('[data-conv-scratch-close]')){e.preventDefault();close()}});\n  qs('[data-conv-scratch-copy]',scratch)?.addEventListener('click',async e=>{if(!chosen||!revealed)return;const button=e.currentTarget;const original=button.textContent;let copied=false;try{if(navigator.clipboard&&window.isSecureContext){await navigator.clipboard.writeText(chosen.code);copied=true}}catch(_){}if(!copied){try{const input=document.createElement('textarea');input.value=chosen.code;input.setAttribute('readonly','');input.style.position='fixed';input.style.opacity='0';document.body.appendChild(input);input.select();input.setSelectionRange(0,input.value.length);copied=document.execCommand('copy');input.remove()}catch(_){copied=false}}if(copied){button.textContent=`\u2713 ${button.dataset.copiedLabel||'Copied'}`;button.classList.add('is-copied');setTimeout(()=>{button.textContent=original;button.classList.remove('is-copied')},1800)}else{code?.focus?.();try{const range=document.createRange();range.selectNodeContents(code);const sel=window.getSelection();sel.removeAllRanges();sel.addRange(range)}catch(_){}}});\n  const delay=Math.max(5,Number(scratch.dataset.delay||12))*1000;\n  const triggerMode=String(scratch.dataset.triggerMode||'both');\n  const frequency=String(scratch.dataset.frequency||'session');\n  const autoAllowed=triggerMode==='auto'||triggerMode==='both';\n  if(autoAllowed){\n    let canShow=true;\n    try{\n      if(frequency==='session') canShow=sessionStorage.getItem(autoKey)!=='1';\n      else if(frequency==='day'){const last=Number(localStorage.getItem(autoKey)||0);canShow=!last||(Date.now()-last)>=86400000;}\n    }catch(_){}\n    if(canShow&&attemptAvailable())setTimeout(()=>{try{if(frequency==='session')sessionStorage.setItem(autoKey,'1');else if(frequency==='day')localStorage.setItem(autoKey,String(Date.now()));}catch(_){}open()},delay);\n  }\n  window.addEventListener('sasa:promotion-expired',()=>{close();qsa('[data-conv-scratch-open]').forEach(node=>{node.hidden=true;node.setAttribute('aria-hidden','true')})},{once:true});\n})();\n\n(() => {\n  const html=document.documentElement;\n  const qs=(s,r=document)=>r.querySelector(s);\n  const support=qs('[data-conv-support]');\n  if(!support)return;\n  const open=()=>{if(window.SasaShopUX&&!window.SasaShopUX.canOpen(support)){return;}support.hidden=false;support.setAttribute('aria-hidden','false');html.classList.add('conv-lock');requestAnimationFrame(()=>{support.classList.add('is-open');qs('[data-conv-support-close]',support)?.focus({preventScroll:true})});qs('[data-support-launcher-open]')?.setAttribute('aria-expanded','true');window.SasaShopTrack?.('support_drawer_open')};\n  const close=()=>{support.classList.remove('is-open');support.setAttribute('aria-hidden','true');html.classList.remove('conv-lock');qs('[data-support-launcher-open]')?.setAttribute('aria-expanded','false');window.SasaShopTrack?.('support_drawer_close');setTimeout(()=>support.hidden=true,220)};\n  document.addEventListener('click',e=>{if(e.target.closest('[data-support-launcher-open]')){e.preventDefault();open()}if(e.target.closest('[data-conv-support-close]')){e.preventDefault();close()}});\n})();\n\n\n/* v15.2 digital-delivery consent gates checkout and accelerated checkout surfaces. */\n(() => {\n  const bindConsent = (scope = document) => {\n    scope.querySelectorAll('[data-digital-consent-product]').forEach((checkbox) => {\n      if (checkbox.dataset.bound === 'true') return;\n      checkbox.dataset.bound = 'true';\n      const form = checkbox.closest('form');\n      const accelerated = form?.querySelector('[data-product-accelerated]');\n      const sync = () => { if (accelerated) accelerated.hidden = !checkbox.checked; };\n      checkbox.addEventListener('change', sync); sync();\n    });\n    const checkoutChecks = [...scope.querySelectorAll('[data-digital-consent-checkout], [data-digital-consent-cart]')];\n    checkoutChecks.forEach((checkbox) => {\n      if (checkbox.dataset.bound === 'true') return;\n      checkbox.dataset.bound = 'true';\n      const container = checkbox.closest('.conv-drawer__foot, .cart-summary, form, section') || document;\n      const buttons = [...container.querySelectorAll('[name=\"checkout\"], [data-sasa-checkout], [data-cart-checkout]')];\n      const accelerated = [...container.querySelectorAll('[data-accelerated-checkout-wrap]')];\n      const sync = () => { buttons.forEach((b) => b.disabled = !checkbox.checked); accelerated.forEach((n) => n.hidden = !checkbox.checked); };\n      checkbox.addEventListener('change', async () => {\n        if (checkbox.checked) {\n          buttons.forEach((b) => b.disabled = true);\n          try {\n            const rootUrl = window.Shopify?.routes?.root || '/';\n            const stamp = new Date().toISOString();\n            const response = await fetch(`${rootUrl}cart/update.js`, { method: 'POST', headers: { 'Content-Type': 'application/json', Accept: 'application/json' }, body: JSON.stringify({ attributes: { 'Digital delivery consent': `Yes \u2014 ${stamp}` } }) });\n            if (!response.ok) throw new Error('Consent could not be saved');\n          } catch (_) { checkbox.checked = false; }\n        }\n        sync();\n      }); sync();\n    });\n  };\n  bindConsent();\n  document.addEventListener('shopify:section:load', (event) => bindConsent(event.target));\n  window.addEventListener('sasa:cart-updated', () => setTimeout(() => bindConsent(document), 30));\n})();\n"],
  "mappings": "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",
  "names": []
}
