{
  "version": 3,
  "sources": ["/cdn/shop/t/200/assets/global.js"],
  "sourcesContent": ["function getFocusableElements(container) {\n  return Array.from(\n    container.querySelectorAll(\n      \"summary, a[href], button:enabled, [tabindex]:not([tabindex^='-']), [draggable], area, input:not([type=hidden]):enabled, select:enabled, textarea:enabled, object, iframe\"\n    )\n  );\n}\n\n\nclass SectionId {\n  static #separator = '__';\n\n  // for a qualified section id (e.g. 'template--22224696705326__main'), return just the section id (e.g. 'template--22224696705326')\n  static parseId(qualifiedSectionId) {\n    return qualifiedSectionId.split(SectionId.#separator)[0];\n  }\n\n  // for a qualified section id (e.g. 'template--22224696705326__main'), return just the section name (e.g. 'main')\n  static parseSectionName(qualifiedSectionId) {\n    return qualifiedSectionId.split(SectionId.#separator)[1];\n  }\n\n  // for a section id (e.g. 'template--22224696705326') and a section name (e.g. 'recommended-products'), return a qualified section id (e.g. 'template--22224696705326__recommended-products')\n  static getIdForSection(sectionId, sectionName) {\n    return `${sectionId}${SectionId.#separator}${sectionName}`;\n  }\n}\n\nclass HTMLUpdateUtility {\n  /**\n   * Used to swap an HTML node with a new node.\n   * The new node is inserted as a previous sibling to the old node, the old node is hidden, and then the old node is removed.\n   *\n   * The function currently uses a double buffer approach, but this should be replaced by a view transition once it is more widely supported https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API\n   */\n  static viewTransition(oldNode, newContent, preProcessCallbacks = [], postProcessCallbacks = []) {\n    preProcessCallbacks?.forEach((callback) => callback(newContent));\n\n    const newNodeWrapper = document.createElement('div');\n    HTMLUpdateUtility.setInnerHTML(newNodeWrapper, newContent.outerHTML);\n    const newNode = newNodeWrapper.firstChild;\n\n    // dedupe IDs\n    const uniqueKey = Date.now();\n    oldNode.querySelectorAll('[id], [form]').forEach((element) => {\n      element.id && (element.id = `${element.id}-${uniqueKey}`);\n      element.form && element.setAttribute('form', `${element.form.getAttribute('id')}-${uniqueKey}`);\n    });\n\n    oldNode.parentNode.insertBefore(newNode, oldNode);\n    oldNode.classList.add('hidden');\n\n    postProcessCallbacks?.forEach((callback) => callback(newNode));\n\n    setTimeout(() => oldNode.remove(), 500);\n  }\n\n  // Sets inner HTML and reinjects the script tags to allow execution. By default, scripts are disabled when using element.innerHTML.\n  static setInnerHTML(element, html) {\n    element.innerHTML = html;\n    element.querySelectorAll('script').forEach((oldScriptTag) => {\n      const newScriptTag = document.createElement('script');\n      Array.from(oldScriptTag.attributes).forEach((attribute) => {\n        newScriptTag.setAttribute(attribute.name, attribute.value);\n      });\n      newScriptTag.appendChild(document.createTextNode(oldScriptTag.innerHTML));\n      oldScriptTag.parentNode.replaceChild(newScriptTag, oldScriptTag);\n    });\n  }\n}\n\n// CRITICAL FIX: Defer DOM queries to reduce TBT - initialize after page is interactive\n(function initDetailsSummaries() {\n  function setupDetailsSummaries() {\n    document.querySelectorAll('[id^=\"Details-\"] summary').forEach((summary) => {\n      const details = summary.closest('details');\n      if (!details) return; // Only apply to native details elements\n\n      summary.setAttribute('role', 'button');\n      summary.setAttribute('aria-expanded', details.hasAttribute('open'));\n\n      if (summary.nextElementSibling && summary.nextElementSibling.getAttribute('id')) {\n        summary.setAttribute('aria-controls', summary.nextElementSibling.id);\n      }\n\n      summary.addEventListener('click', (event) => {\n        const details = event.currentTarget.closest('details');\n        if (details) {\n          event.currentTarget.setAttribute('aria-expanded', !details.hasAttribute('open'));\n        }\n      });\n\n      if (summary.closest('header-drawer, menu-drawer')) return;\n      summary.parentElement.addEventListener('keyup', onKeyUpEscape);\n    });\n  }\n\n  // Defer initialization to reduce TBT\n  if (document.readyState === 'loading') {\n    if ('requestIdleCallback' in window) {\n      document.addEventListener('DOMContentLoaded', function () {\n        requestIdleCallback(setupDetailsSummaries, { timeout: 1000 });\n      });\n    } else {\n      document.addEventListener('DOMContentLoaded', function () {\n        setTimeout(setupDetailsSummaries, 1000);\n      });\n    }\n  } else {\n    // DOM already loaded\n    if ('requestIdleCallback' in window) {\n      requestIdleCallback(setupDetailsSummaries, { timeout: 1000 });\n    } else {\n      setTimeout(setupDetailsSummaries, 1000);\n    }\n  }\n})();\n\nconst trapFocusHandlers = {};\n\nfunction trapFocus(container, elementToFocus = container) {\n  var elements = getFocusableElements(container);\n  var first = elements[0];\n  var last = elements[elements.length - 1];\n\n  removeTrapFocus();\n\n  trapFocusHandlers.focusin = (event) => {\n    if (event.target !== container && event.target !== last && event.target !== first) return;\n\n    document.addEventListener('keydown', trapFocusHandlers.keydown);\n  };\n\n  trapFocusHandlers.focusout = function () {\n    document.removeEventListener('keydown', trapFocusHandlers.keydown);\n  };\n\n  trapFocusHandlers.keydown = function (event) {\n    if (event.code.toUpperCase() !== 'TAB') return; // If not TAB key\n    // On the last focusable element and tab forward, focus the first element.\n    if (event.target === last && !event.shiftKey) {\n      event.preventDefault();\n      first.focus();\n    }\n\n    //  On the first focusable element and tab backward, focus the last element.\n    if ((event.target === container || event.target === first) && event.shiftKey) {\n      event.preventDefault();\n      last.focus();\n    }\n  };\n\n  document.addEventListener('focusout', trapFocusHandlers.focusout);\n  document.addEventListener('focusin', trapFocusHandlers.focusin);\n\n  elementToFocus.focus();\n\n  if (\n    elementToFocus.tagName === 'INPUT' &&\n    ['search', 'text', 'email', 'url'].includes(elementToFocus.type) &&\n    elementToFocus.value\n  ) {\n    elementToFocus.setSelectionRange(0, elementToFocus.value.length);\n  }\n}\n\n// Here run the querySelector to figure out if the browser supports :focus-visible or not and run code based on it.\ntry {\n  document.querySelector(':focus-visible');\n} catch (e) {\n  focusVisiblePolyfill();\n}\n\nfunction focusVisiblePolyfill() {\n  const navKeys = [\n    'ARROWUP',\n    'ARROWDOWN',\n    'ARROWLEFT',\n    'ARROWRIGHT',\n    'TAB',\n    'ENTER',\n    'SPACE',\n    'ESCAPE',\n    'HOME',\n    'END',\n    'PAGEUP',\n    'PAGEDOWN',\n  ];\n  let currentFocusedElement = null;\n  let mouseClick = null;\n\n  window.addEventListener('keydown', (event) => {\n    if (navKeys.includes(event.code.toUpperCase())) {\n      mouseClick = false;\n    }\n  });\n\n  window.addEventListener('mousedown', (event) => {\n    mouseClick = true;\n  });\n\n  window.addEventListener(\n    'focus',\n    () => {\n      if (currentFocusedElement) currentFocusedElement.classList.remove('focused');\n\n      if (mouseClick) return;\n\n      currentFocusedElement = document.activeElement;\n      currentFocusedElement.classList.add('focused');\n    },\n    true\n  );\n}\n\nfunction pauseAllMedia() {\n  document.querySelectorAll('.js-youtube').forEach((video) => {\n    video.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"' + 'pauseVideo' + '\",\"args\":\"\"}', '*');\n  });\n  document.querySelectorAll('.js-vimeo').forEach((video) => {\n    video.contentWindow.postMessage('{\"method\":\"pause\"}', '*');\n  });\n  document.querySelectorAll('video').forEach((video) => video.pause());\n  document.querySelectorAll('video.card_video').forEach((card_video) => card_video.play());\n  document.querySelectorAll('product-model').forEach((model) => {\n    if (model.modelViewerUI) model.modelViewerUI.pause();\n  });\n}\n\nfunction removeTrapFocus(elementToFocus = null) {\n  document.removeEventListener('focusin', trapFocusHandlers.focusin);\n  document.removeEventListener('focusout', trapFocusHandlers.focusout);\n  document.removeEventListener('keydown', trapFocusHandlers.keydown);\n\n  if (elementToFocus) elementToFocus.focus();\n}\n\nfunction onKeyUpEscape(event) {\n  if (event.code.toUpperCase() !== 'ESCAPE') return;\n\n  const openDetailsElement = event.target.closest('details[open]');\n  if (!openDetailsElement) return;\n\n  const summaryElement = openDetailsElement.querySelector('summary');\n  openDetailsElement.removeAttribute('open');\n  summaryElement.setAttribute('aria-expanded', false);\n  summaryElement.focus();\n}\n\nclass QuantityInput extends HTMLElement {\n  constructor() {\n    super();\n    this.input = this.querySelector('input');\n    this.changeEvent = new Event('change', { bubbles: true });\n    this.input.addEventListener('change', this.onInputChange.bind(this));\n    this.querySelectorAll('button').forEach((button) =>\n      button.addEventListener('click', this.onButtonClick.bind(this))\n    );\n  }\n\n  quantityUpdateUnsubscriber = undefined;\n\n  connectedCallback() {\n    this.validateQtyRules();\n    this.quantityUpdateUnsubscriber = subscribe(PUB_SUB_EVENTS.quantityUpdate, this.validateQtyRules.bind(this));\n  }\n\n  disconnectedCallback() {\n    if (this.quantityUpdateUnsubscriber) {\n      this.quantityUpdateUnsubscriber();\n    }\n  }\n\n  onInputChange(event) {\n    this.validateQtyRules();\n  }\n\n  onButtonClick(event) {\n    event.preventDefault();\n    const previousValue = this.input.value;\n\n    if (event.target.name === 'plus') {\n      if (parseInt(this.input.dataset.min) > parseInt(this.input.step) && this.input.value == 0) {\n        this.input.value = this.input.dataset.min;\n      } else {\n        this.input.stepUp();\n      }\n    } else {\n      this.input.stepDown();\n    }\n\n    if (previousValue !== this.input.value) this.input.dispatchEvent(this.changeEvent);\n\n    if (this.input.dataset.min === previousValue && event.target.name === 'minus') {\n      this.input.value = parseInt(this.input.min);\n    }\n  }\n\n  validateQtyRules() {\n    const value = parseInt(this.input.value);\n    if (this.input.min) {\n      const buttonMinus = this.querySelector(\".quantity__button[name='minus']\");\n      buttonMinus.classList.toggle('disabled', parseInt(value) <= parseInt(this.input.min));\n    }\n    if (this.input.max) {\n      const max = parseInt(this.input.max);\n      const buttonPlus = this.querySelector(\".quantity__button[name='plus']\");\n      buttonPlus.classList.toggle('disabled', value >= max);\n    }\n  }\n}\n\ncustomElements.define('quantity-input', QuantityInput);\n\nfunction debounce(fn, wait) {\n  let t;\n  return (...args) => {\n    clearTimeout(t);\n    t = setTimeout(() => fn.apply(this, args), wait);\n  };\n}\n\nfunction throttle(fn, delay) {\n  let lastCall = 0;\n  return function (...args) {\n    const now = new Date().getTime();\n    if (now - lastCall < delay) {\n      return;\n    }\n    lastCall = now;\n    return fn(...args);\n  };\n}\n\nfunction fetchConfig(type = 'json') {\n  return {\n    method: 'POST',\n    headers: { 'Content-Type': 'application/json', Accept: `application/${type}` },\n  };\n}\n\n/*\n * Shopify Common JS\n *\n */\nif (typeof window.Shopify == 'undefined') {\n  window.Shopify = {};\n}\n\nShopify.bind = function (fn, scope) {\n  return function () {\n    return fn.apply(scope, arguments);\n  };\n};\n\nShopify.setSelectorByValue = function (selector, value) {\n  for (var i = 0, count = selector.options.length; i < count; i++) {\n    var option = selector.options[i];\n    if (value == option.value || value == option.innerHTML) {\n      selector.selectedIndex = i;\n      return i;\n    }\n  }\n};\n\nShopify.addListener = function (target, eventName, callback) {\n  target.addEventListener\n    ? target.addEventListener(eventName, callback, false)\n    : target.attachEvent('on' + eventName, callback);\n};\n\nShopify.postLink = function (path, options) {\n  options = options || {};\n  var method = options['method'] || 'post';\n  var params = options['parameters'] || {};\n\n  var form = document.createElement('form');\n  form.setAttribute('method', method);\n  form.setAttribute('action', path);\n\n  for (var key in params) {\n    var hiddenField = document.createElement('input');\n    hiddenField.setAttribute('type', 'hidden');\n    hiddenField.setAttribute('name', key);\n    hiddenField.setAttribute('value', params[key]);\n    form.appendChild(hiddenField);\n  }\n  document.body.appendChild(form);\n  form.submit();\n  document.body.removeChild(form);\n};\n\nShopify.CountryProvinceSelector = function (country_domid, province_domid, options) {\n  this.countryEl = document.getElementById(country_domid);\n  this.provinceEl = document.getElementById(province_domid);\n  this.provinceContainer = document.getElementById(options['hideElement'] || province_domid);\n\n  Shopify.addListener(this.countryEl, 'change', Shopify.bind(this.countryHandler, this));\n\n  this.initCountry();\n  this.initProvince();\n};\n\nShopify.CountryProvinceSelector.prototype = {\n  initCountry: function () {\n    var value = this.countryEl.getAttribute('data-default');\n    Shopify.setSelectorByValue(this.countryEl, value);\n    this.countryHandler();\n  },\n\n  initProvince: function () {\n    var value = this.provinceEl.getAttribute('data-default');\n    if (value && this.provinceEl.options.length > 0) {\n      Shopify.setSelectorByValue(this.provinceEl, value);\n    }\n  },\n\n  countryHandler: function (e) {\n    var opt = this.countryEl.options[this.countryEl.selectedIndex];\n    var raw = opt.getAttribute('data-provinces');\n    var provinces = JSON.parse(raw);\n\n    this.clearOptions(this.provinceEl);\n    if (provinces && provinces.length == 0) {\n      this.provinceContainer.classList.add('hidden');\n    } else {\n      for (var i = 0; i < provinces.length; i++) {\n        var opt = document.createElement('option');\n        opt.value = provinces[i][0];\n        opt.innerHTML = provinces[i][1];\n        this.provinceEl.appendChild(opt);\n      }\n\n      this.provinceContainer.classList.remove('hidden');\n    }\n  },\n\n  clearOptions: function (selector) {\n    while (selector.firstChild) {\n      selector.removeChild(selector.firstChild);\n    }\n  },\n\n  setOptions: function (selector, values) {\n    for (var i = 0, count = values.length; i < values.length; i++) {\n      var opt = document.createElement('option');\n      opt.value = values[i];\n      opt.innerHTML = values[i];\n      selector.appendChild(opt);\n    }\n  },\n};\n\nclass MenuDrawer extends HTMLElement {\n  constructor() {\n    super();\n\n    this.mainDetailsToggle = this.querySelector('details');\n\n    this.addEventListener('keyup', this.onKeyUp.bind(this));\n    this.addEventListener('focusout', this.onFocusOut.bind(this));\n    this.onMenuRouteIntentHandler = this.onMenuRouteIntent.bind(this);\n    this.bindEvents();\n  }\n\n  bindEvents() {\n    this.querySelectorAll('summary').forEach((summary) =>\n      summary.addEventListener('click', this.onSummaryClick.bind(this))\n    );\n    this.querySelectorAll(\n      'button:not(.localization-selector):not(.country-selector__close-button):not(.country-filter__reset-button):not(.menu-drawer__close-button-top)'\n    ).forEach((button) => button.addEventListener('click', this.onCloseButtonClick.bind(this)));\n    // Handle top-level close button - closes the main drawer\n    const topCloseButton = this.querySelector('.menu-drawer__close-button-top');\n    if (topCloseButton) {\n      topCloseButton.addEventListener('click', (event) => {\n        event.preventDefault();\n        event.stopPropagation();\n        if (this.mainDetailsToggle) {\n          this.closeMenuDrawer(event, this.mainDetailsToggle.querySelector('summary'));\n        }\n      });\n    }\n\n    const menuDrawer = this.getMenuDrawerPanel();\n    if (menuDrawer && !menuDrawer.dataset.routeFeedbackBound) {\n      menuDrawer.dataset.routeFeedbackBound = 'true';\n      menuDrawer.addEventListener('pointerdown', this.onMenuRouteIntentHandler);\n      menuDrawer.addEventListener('click', this.onMenuRouteIntentHandler);\n      menuDrawer.addEventListener('keydown', this.onMenuRouteIntentHandler);\n    }\n  }\n\n  getMenuDrawerPanel() {\n    return this.drawerPanel || this.querySelector('.menu-drawer') || document.getElementById('menu-drawer');\n  }\n\n  cancelMenuDrawerClose() {\n    if (this.menuDrawerCloseCancel) {\n      this.menuDrawerCloseCancel();\n      this.menuDrawerCloseCancel = null;\n    }\n  }\n\n  afterMenuDrawerClose(menuDrawer, done) {\n    const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n    if (!menuDrawer || reducedMotion) {\n      done();\n      return;\n    }\n\n    let closeTimer = null;\n    const finish = () => {\n      if (this.menuDrawerCloseCancel !== cancel) return;\n      cancel();\n      this.menuDrawerCloseCancel = null;\n      done();\n    };\n    const onTransitionEnd = (event) => {\n      if (event.target === menuDrawer && event.propertyName === 'transform') finish();\n    };\n    const cancel = () => {\n      menuDrawer.removeEventListener('transitionend', onTransitionEnd);\n      if (closeTimer) clearTimeout(closeTimer);\n      closeTimer = null;\n    };\n\n    this.menuDrawerCloseCancel = cancel;\n    menuDrawer.addEventListener('transitionend', onTransitionEnd);\n    closeTimer = setTimeout(finish, 320);\n  }\n\n  showMenuCollectionSkeleton(url) {\n    const existingSkeleton = document.querySelector('.menu-collection-skeleton');\n    if (existingSkeleton) return;\n\n    const isLatestOffers = url && url.pathname.replace(/\\/$/, '') === '/pages/latest-offers';\n    const skeleton = document.createElement('div');\n    skeleton.className = `menu-collection-skeleton${isLatestOffers ? ' menu-collection-skeleton--latest-offers' : ''}`;\n    skeleton.setAttribute('aria-hidden', 'true');\n    skeleton.innerHTML = isLatestOffers ? `\n      <div class=\"menu-collection-skeleton__latest-intro\">\n        <span class=\"menu-collection-skeleton__latest-heading menu-collection-skeleton__shimmer\"></span>\n      </div>\n      <div class=\"menu-collection-skeleton__latest-grid\">\n        <span class=\"menu-collection-skeleton__latest-card menu-collection-skeleton__shimmer\"></span>\n        <span class=\"menu-collection-skeleton__latest-card menu-collection-skeleton__shimmer\"></span>\n        <span class=\"menu-collection-skeleton__latest-card menu-collection-skeleton__shimmer\"></span>\n        <span class=\"menu-collection-skeleton__latest-card menu-collection-skeleton__shimmer\"></span>\n      </div>\n    ` : `\n      <div class=\"menu-collection-skeleton__hero menu-collection-skeleton__shimmer\"></div>\n      <div class=\"menu-collection-skeleton__inner\">\n        <div class=\"menu-collection-skeleton__tabs\">\n          <span class=\"menu-collection-skeleton__tab menu-collection-skeleton__shimmer\"></span>\n          <span class=\"menu-collection-skeleton__tab menu-collection-skeleton__shimmer\"></span>\n          <span class=\"menu-collection-skeleton__tab menu-collection-skeleton__shimmer\"></span>\n        </div>\n        <div class=\"menu-collection-skeleton__sort menu-collection-skeleton__shimmer\"></div>\n        <div class=\"menu-collection-skeleton__grid\">\n          <span class=\"menu-collection-skeleton__card menu-collection-skeleton__shimmer\"></span>\n          <span class=\"menu-collection-skeleton__card menu-collection-skeleton__shimmer\"></span>\n          <span class=\"menu-collection-skeleton__card menu-collection-skeleton__shimmer\"></span>\n          <span class=\"menu-collection-skeleton__card menu-collection-skeleton__shimmer\"></span>\n        </div>\n      </div>\n    `;\n    document.body.appendChild(skeleton);\n\n    if (this.menuCollectionSkeletonTimer) clearTimeout(this.menuCollectionSkeletonTimer);\n    this.menuCollectionSkeletonTimer = setTimeout(() => {\n      skeleton.remove();\n      this.menuCollectionSkeletonTimer = null;\n    }, 6000);\n  }\n\n  setMenuRoutePending(url) {\n    document.documentElement.classList.add('menu-route-pending');\n\n    if (url) {\n      if (url.pathname.replace(/\\/$/, '') === '/pages/latest-offers') {\n        document.documentElement.classList.add('menu-latest-offers-pending');\n      }\n      this.showMenuCollectionSkeleton(url);\n      try {\n        if (url.pathname.indexOf('/collections/') === 0) {\n          sessionStorage.setItem('dt:menuCollectionEnter', '1');\n        }\n      } catch (e) {}\n    }\n\n    if (this.menuRoutePendingTimer) clearTimeout(this.menuRoutePendingTimer);\n    this.menuRoutePendingTimer = setTimeout(() => {\n      document.documentElement.classList.remove('menu-route-pending', 'menu-latest-offers-pending');\n      this.menuRoutePendingTimer = null;\n    }, 6000);\n  }\n\n  navigateAfterMenuClose(url) {\n    if (this.menuRouteNavigationTimer) clearTimeout(this.menuRouteNavigationTimer);\n\n    const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n    this.menuRouteNavigationTimer = setTimeout(() => {\n      window.location.assign(url.href);\n    }, reducedMotion ? 0 : 180);\n  }\n\n  getMenuRouteUrl(anchor, event) {\n    if (!anchor || !anchor.href) return null;\n    if (anchor.hasAttribute('download')) return null;\n    if (anchor.target && anchor.target !== '_self') return null;\n    if (event && (event.metaKey || event.ctrlKey || event.shiftKey || event.altKey)) return null;\n\n    let url;\n    try {\n      url = new URL(anchor.href, window.location.href);\n    } catch (e) {\n      return null;\n    }\n\n    if (url.origin !== window.location.origin) return null;\n    if (url.pathname === window.location.pathname && url.search === window.location.search && url.hash) return null;\n\n    return url;\n  }\n\n  onMenuRouteIntent(event) {\n    if (event.type === 'keydown' && event.key !== 'Enter') return;\n    if (event.type !== 'keydown' && event.button !== undefined && event.button !== 0) return;\n    if (event.type !== 'pointerdown' && event.defaultPrevented) return;\n\n    const anchor = event.target && event.target.closest ? event.target.closest('a[href]') : null;\n    const url = this.getMenuRouteUrl(anchor, event);\n    if (!url) return;\n    const isLatestOffers = url.pathname.replace(/\\/$/, '') === '/pages/latest-offers';\n\n    this.setMenuRoutePending(url);\n    if (event.type !== 'pointerdown') {\n      event.preventDefault();\n    }\n    if (event.type !== 'pointerdown' && isLatestOffers) {\n      window.location.assign(url.href);\n    } else if (event.type !== 'pointerdown' && this.mainDetailsToggle && this.mainDetailsToggle.hasAttribute('open')) {\n      this.closeMenuDrawer(event, this.mainDetailsToggle.querySelector('summary'));\n      this.navigateAfterMenuClose(url);\n    } else if (event.type !== 'pointerdown') {\n      this.navigateAfterMenuClose(url);\n    }\n  }\n\n  onKeyUp(event) {\n    if (event.code.toUpperCase() !== 'ESCAPE') return;\n\n    const openDetailsElement = event.target.closest('details[open]');\n    if (!openDetailsElement) return;\n\n    openDetailsElement === this.mainDetailsToggle\n      ? this.closeMenuDrawer(event, this.mainDetailsToggle.querySelector('summary'))\n      : this.closeSubmenu(openDetailsElement);\n  }\n\n  onSummaryClick(event) {\n    const summaryElement = event.currentTarget;\n    const detailsElement = summaryElement.parentNode;\n    const parentMenuElement = detailsElement.closest('.has-submenu');\n    const isOpen = detailsElement.hasAttribute('open');\n    const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');\n\n    function addTrapFocus() {\n      trapFocus(summaryElement.nextElementSibling, detailsElement.querySelector('button'));\n      summaryElement.nextElementSibling.removeEventListener('transitionend', addTrapFocus);\n    }\n\n    if (detailsElement === this.mainDetailsToggle) {\n      if (isOpen) event.preventDefault();\n      isOpen ? this.closeMenuDrawer(event, summaryElement) : this.openMenuDrawer(summaryElement);\n\n      if (window.matchMedia('(max-width: 992px)')) {\n        document.documentElement.style.setProperty('--viewport-height', `${window.innerHeight}px`);\n      }\n    } else {\n      setTimeout(() => {\n        detailsElement.classList.add('menu-opening');\n        summaryElement.setAttribute('aria-expanded', true);\n\n        !reducedMotion || reducedMotion.matches\n          ? addTrapFocus()\n          : summaryElement.nextElementSibling.addEventListener('transitionend', addTrapFocus);\n      }, 100);\n    }\n  }\n\n  openMenuDrawer(summaryElement) {\n    this.cancelMenuDrawerClose();\n    const menuDrawer = this.getMenuDrawerPanel();\n    if (menuDrawer) menuDrawer.classList.remove('menu-closing');\n\n    this.prefetchLatestOffersWhenIdle();\n\n    requestAnimationFrame(() => {\n      this.mainDetailsToggle.classList.add('menu-opening');\n      if (menuDrawer) menuDrawer.classList.add('menu-opening');\n    });\n    summaryElement.setAttribute('aria-expanded', true);\n    trapFocus(this.mainDetailsToggle, summaryElement);\n    document.body.classList.add(`overflow-hidden-${this.dataset.breakpoint}`);\n  }\n\n  prefetchLatestOffersWhenIdle() {\n    if (this.latestOffersPrefetchScheduled) return;\n    if (window.location.pathname.replace(/\\/$/, '') === '/pages/latest-offers') return;\n\n    const connection = window.navigator && (\n      window.navigator.connection || window.navigator.mozConnection || window.navigator.webkitConnection\n    );\n    if (connection && (connection.saveData || /(^|-)2g$/.test(connection.effectiveType || ''))) return;\n\n    this.latestOffersPrefetchScheduled = true;\n    const prefetch = () => {\n      if (document.querySelector('link[data-dt-latest-offers-prefetch]')) return;\n      const link = document.createElement('link');\n      link.rel = 'prefetch';\n      link.as = 'document';\n      link.href = '/pages/latest-offers';\n      link.setAttribute('data-dt-latest-offers-prefetch', '');\n      document.head.appendChild(link);\n    };\n\n    window.requestAnimationFrame(prefetch);\n  }\n\n  closeMenuDrawer(event, elementToFocus = false) {\n    if (event === undefined) return;\n\n    this.cancelMenuDrawerClose();\n\n    const menuDrawer = this.getMenuDrawerPanel();\n    this.mainDetailsToggle.classList.remove('menu-opening');\n    if (menuDrawer) {\n      menuDrawer.classList.remove('menu-opening');\n      menuDrawer.classList.add('menu-closing');\n    }\n\n    elementToFocus?.setAttribute('aria-expanded', false);\n\n    this.afterMenuDrawerClose(menuDrawer, () => {\n      if (this.mainDetailsToggle.hasAttribute('open')) {\n        this.mainDetailsToggle.removeAttribute('open');\n      }\n      const resetNestedDetails = (details) => {\n        if (details !== this.mainDetailsToggle) {\n          details.removeAttribute('open');\n          details.classList.remove('menu-opening');\n        }\n      };\n\n      this.mainDetailsToggle.querySelectorAll('details').forEach(resetNestedDetails);\n      if (menuDrawer) menuDrawer.querySelectorAll('details').forEach(resetNestedDetails);\n      if (menuDrawer) menuDrawer.classList.remove('menu-closing');\n      document.body.classList.remove(`overflow-hidden-${this.dataset.breakpoint}`);\n      removeTrapFocus(elementToFocus);\n      this.onMenuDrawerClosed(menuDrawer);\n    });\n  }\n\n  onMenuDrawerClosed() {}\n\n  onFocusOut() {\n    setTimeout(() => {\n      if (this.mainDetailsToggle.hasAttribute('open') && !this.mainDetailsToggle.contains(document.activeElement))\n        this.closeMenuDrawer();\n    });\n  }\n\n  onCloseButtonClick(event) {\n    const detailsElement = event.currentTarget.closest('details');\n    this.closeSubmenu(detailsElement);\n  }\n\n  closeSubmenu(detailsElement) {\n    detailsElement.classList.remove('menu-opening');\n    detailsElement.querySelector('summary').setAttribute('aria-expanded', false);\n    removeTrapFocus(detailsElement.querySelector('summary'));\n    this.closeAnimation(detailsElement);\n  }\n\n  closeAnimation(detailsElement) {\n    // Main drawer close is handled by closeMenuDrawer; this path is for submenus.\n    if (detailsElement === this.mainDetailsToggle) {\n      return;\n    }\n\n    let animationStart;\n\n    const handleAnimation = (time) => {\n      if (animationStart === undefined) {\n        animationStart = time;\n      }\n\n      const elapsedTime = time - animationStart;\n\n      if (elapsedTime < 400) {\n        window.requestAnimationFrame(handleAnimation);\n      } else {\n        detailsElement.removeAttribute('open');\n        if (detailsElement.closest('details[open]')) {\n          trapFocus(detailsElement.closest('details[open]'), detailsElement.querySelector('summary'));\n        }\n      }\n    };\n\n    window.requestAnimationFrame(handleAnimation);\n  }\n}\n\ncustomElements.define('menu-drawer', MenuDrawer);\n\nclass HeaderDrawer extends HTMLElement {\n  connectedCallback() {\n    if (this.toggle) return;\n    this.toggle = this.querySelector('.dt-nav-toggle');\n    this.dialog = this.querySelector('.dt-nav-dialog');\n    this.pane = this.querySelector('.dt-nav-pane');\n    this.content = this.querySelector('.dt-nav-content');\n    this.homeSlot = this.querySelector('.dt-nav-trigger-slot');\n    this.openSlot = this.querySelector('.dt-nav-toggle-slot');\n    this.menuLabel = this.toggle.getAttribute('aria-label');\n    this.content.querySelectorAll('nav > .dt-nav-category-group, .dt-nav-links > li').forEach((item, index) => {\n      item.setAttribute('data-nav-reveal', '');\n      item.style.setProperty('--nav-delay', `${60 + Math.min(index, 5) * 16}ms`);\n    });\n    this.toggle.addEventListener('click', () => this.setOpen(!this.expanded));\n    this.dialog.addEventListener('cancel', (event) => {\n      event.preventDefault();\n      this.setOpen(false);\n    });\n    this.dialog.addEventListener('click', (event) => {\n      if (event.target === this.dialog) this.setOpen(false);\n    });\n    this.pane.addEventListener('transitionend', (event) => {\n      if (event.target === this.pane && event.pseudoElement === '::before' && event.propertyName === 'opacity') this.finishTransition();\n    });\n    this.viewportWidth = window.innerWidth;\n    this.onResize = () => {\n      // Mobile browser chrome changes height without changing the menu layout.\n      const width = window.innerWidth;\n      if (width === this.viewportWidth) return;\n      this.viewportWidth = width;\n      if (this.expanded) this.setOpen(false);\n    };\n    window.addEventListener('resize', this.onResize);\n  }\n\n  disconnectedCallback() {\n    clearTimeout(this.transitionTimer);\n    window.removeEventListener('resize', this.onResize);\n    if (this.dialog?.open) {\n      this.dialog.close();\n      document.body.style.overflow = this.previousOverflow;\n    }\n  }\n\n  setOpen(expanded) {\n    if (this.expanded === expanded) return;\n    clearTimeout(this.transitionTimer);\n    this.expanded = expanded;\n    this.content.inert = true;\n\n    if (expanded) this.querySelector('.dt-nav-category-group')?.removeAttribute('open');\n\n    if (expanded && !this.dialog.open) {\n      const rect = this.toggle.getBoundingClientRect();\n      this.homeSlot.style.width = `${rect.width}px`;\n      this.homeSlot.style.height = `${rect.height}px`;\n      this.dialog.style.setProperty('--nav-left', `${rect.left}px`);\n      this.dialog.style.setProperty('--nav-top', `${rect.top}px`);\n      this.dialog.style.setProperty('--nav-button-width', `${rect.width}px`);\n      this.dialog.style.setProperty('--nav-button-height', `${rect.height}px`);\n      this.previousOverflow = document.body.style.overflow;\n      document.body.style.overflow = 'hidden';\n      this.dialog.showModal();\n      this.openSlot.appendChild(this.toggle);\n      // Establish the transparent starting state before revealing the glass.\n      getComputedStyle(this.dialog, '::backdrop').opacity;\n      getComputedStyle(this.pane, '::before').opacity;\n    }\n\n    this.toggle.setAttribute('aria-expanded', String(expanded));\n    this.toggle.setAttribute('aria-label', expanded ? 'Close menu' : this.menuLabel);\n    this.dialog.dataset.state = expanded ? 'opening' : 'closing';\n    this.toggle.focus({ preventScroll: true });\n    if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) this.finishTransition();\n    else this.transitionTimer = setTimeout(() => this.finishTransition(), 470);\n  }\n\n  finishTransition() {\n    clearTimeout(this.transitionTimer);\n    if (this.expanded) {\n      this.dialog.dataset.state = 'open';\n      this.content.inert = false;\n    } else {\n      this.dialog.dataset.state = 'closed';\n      this.dialog.close();\n      this.homeSlot.appendChild(this.toggle);\n      document.body.style.overflow = this.previousOverflow;\n      this.toggle.focus({ preventScroll: true });\n    }\n  }\n}\n\ncustomElements.define('header-drawer', HeaderDrawer);\n\nclass ModalDialog extends HTMLElement {\n  constructor() {\n    super();\n    this.querySelector('[id^=\"ModalClose-\"]').addEventListener('click', this.hide.bind(this, false));\n    this.addEventListener('keyup', (event) => {\n      if (event.code.toUpperCase() === 'ESCAPE') this.hide();\n    });\n    if (this.classList.contains('media-modal')) {\n      this.addEventListener('pointerup', (event) => {\n        if (event.pointerType === 'mouse' && !event.target.closest('deferred-media, product-model')) this.hide();\n      });\n    } else {\n      this.addEventListener('click', (event) => {\n        if (event.target === this) this.hide();\n      });\n    }\n  }\n\n  connectedCallback() {\n    if (this.moved) return;\n    this.moved = true;\n    document.body.appendChild(this);\n  }\n\n  show(opener) {\n    this.openedBy = opener;\n    const popup = this.querySelector('.template-popup');\n    document.body.classList.add('overflow-hidden');\n    this.setAttribute('open', '');\n    if (popup) popup.loadContent();\n    trapFocus(this, this.querySelector('[role=\"dialog\"]'));\n    window.pauseAllMedia();\n  }\n\n  hide() {\n    document.body.classList.remove('overflow-hidden');\n    document.body.dispatchEvent(new CustomEvent('modalClosed'));\n    this.removeAttribute('open');\n    // removeTrapFocus(this.openedBy);\n    window.pauseAllMedia();\n  }\n}\ncustomElements.define('modal-dialog', ModalDialog);\n\nclass ModalOpener extends HTMLElement {\n  constructor() {\n    super();\n\n    const button = this.querySelector('button');\n\n    if (!button) return;\n    button.addEventListener('click', () => {\n      const modal = document.querySelector(this.getAttribute('data-modal'));\n      if (modal && typeof modal.show === 'function') modal.show(button);\n    });\n  }\n}\ncustomElements.define('modal-opener', ModalOpener);\n\nclass DeferredMedia extends HTMLElement {\n  constructor() {\n    super();\n    const poster = this.querySelector('[id^=\"Deferred-Poster-\"]');\n    if (!poster) return;\n    poster.addEventListener('click', this.loadContent.bind(this));\n  }\n\n  loadContent(focus = true) {\n    window.pauseAllMedia();\n    if (!this.getAttribute('loaded')) {\n      const content = document.createElement('div');\n      content.appendChild(this.querySelector('template').content.firstElementChild.cloneNode(true));\n\n      this.setAttribute('loaded', true);\n      const deferredElement = this.appendChild(content.querySelector('video, model-viewer, iframe'));\n      if (focus) deferredElement.focus();\n      if (deferredElement.nodeName == 'VIDEO' && deferredElement.getAttribute('autoplay')) {\n        // force autoplay for safari\n        deferredElement.play();\n      }\n    }\n  }\n}\n\ncustomElements.define('deferred-media', DeferredMedia);\n\nwindow.themeCore = Object.assign(window.themeCore || {}, {\n  debounce,\n  throttle,\n  fetchConfig,\n  ModalDialog,\n  DeferredMedia,\n});\nwindow.debounce = window.debounce || debounce;\nwindow.throttle = window.throttle || throttle;\nwindow.fetchConfig = window.fetchConfig || fetchConfig;\nwindow.ModalDialog = window.ModalDialog || ModalDialog;\nwindow.DeferredMedia = window.DeferredMedia || DeferredMedia;\nwindow.dispatchEvent(new CustomEvent('theme:core-ready'));\n\nclass SliderComponent extends HTMLElement {\n  constructor() {\n    super();\n    this.slider = this.querySelector('[id^=\"Slider-\"]');\n    this.sliderItems = this.querySelectorAll('[id^=\"Slide-\"]');\n    this.enableSliderLooping = false;\n    this.currentPageElement = this.querySelector('.slider-counter--current');\n    this.pageTotalElement = this.querySelector('.slider-counter--total');\n    this.prevButton = this.querySelector('button[name=\"previous\"]');\n    this.nextButton = this.querySelector('button[name=\"next\"]');\n\n    this.oriantation = window.matchMedia('(min-width: 768px)').matches ? this.dataset.oriantation ? this.dataset.oriantation : 'horizontal' : 'horizontal';\n    if (this.oriantation == 'vertical') {\n      this.offsetPosition = 'offsetTop';\n      this.scrollPosition = 'scrollTop';\n      this.clientPosition = 'clientHeight';\n    } else {\n      this.offsetPosition = 'offsetLeft';\n      this.scrollPosition = 'scrollLeft';\n      this.clientPosition = 'clientWidth';\n    }\n\n    if (!this.slider || !this.nextButton) return;\n\n    this.initPages();\n    const resizeObserver = new ResizeObserver((entries) => this.initPages());\n    resizeObserver.observe(this.slider);\n\n    this.slider.addEventListener('scroll', this.update.bind(this), { passive: true });\n    this.prevButton.addEventListener('click', this.onButtonClick.bind(this));\n    this.nextButton.addEventListener('click', this.onButtonClick.bind(this));\n\n    // Enable mouse drag/swipe on desktop\n    this.isDragging = false;\n    this.startX = 0;\n    this.scrollLeft = 0;\n    this.initMouseDrag();\n\n    // Initialize dots pagination\n    this.initDots();\n\n  }\n\n  initDots() {\n    const dotsWrapper = this.querySelector('.slider-counter--dots-wrapper');\n    if (!dotsWrapper) return;\n\n    const dots = dotsWrapper.querySelectorAll('.slider-counter__link--dots');\n    dots.forEach((dot, index) => {\n      dot.addEventListener('click', (e) => {\n        e.preventDefault();\n        const slideIndex = parseInt(dot.dataset.slideIndex) || index;\n        if (this.sliderItemsToShow && this.sliderItemsToShow[slideIndex]) {\n          const targetSlide = this.sliderItemsToShow[slideIndex];\n          this.setSlidePosition(targetSlide[this.offsetPosition]);\n        }\n      });\n    });\n  }\n\n\n  initMouseDrag() {\n    if (!this.slider) return;\n\n    // Mouse events for desktop drag\n    this.slider.addEventListener('mousedown', (e) => {\n      // Don't start dragging if clicking on interactive elements\n      const isButton = e.target.closest('a, button, [role=\"button\"], .thumbnail');\n      if (isButton) {\n        // Allow the click event to proceed\n        return;\n      }\n      this.isDragging = true;\n      this.slider.classList.add('cursor-grabbing');\n      this.slider.classList.remove('cursor-grab');\n      this.startX = e.pageX - this.slider.offsetLeft;\n      this.scrollLeft = this.slider[this.scrollPosition];\n    });\n\n    this.slider.addEventListener('mouseleave', () => {\n      this.isDragging = false;\n      this.slider.classList.add('cursor-grab');\n      this.slider.classList.remove('cursor-grabbing');\n    });\n\n    this.slider.addEventListener('mouseup', () => {\n      this.isDragging = false;\n      this.slider.classList.add('cursor-grab');\n      this.slider.classList.remove('cursor-grabbing');\n    });\n\n    this.slider.addEventListener('mousemove', (e) => {\n      if (!this.isDragging) return;\n      // Don't prevent default if over a button\n      const isButton = e.target.closest('a, button, [role=\"button\"], .thumbnail');\n      if (isButton) {\n        this.isDragging = false;\n        this.isDragging = false;\n        this.slider.classList.add('cursor-grab');\n        this.slider.classList.remove('cursor-grabbing');\n        return;\n      }\n      e.preventDefault();\n      const x = e.pageX - this.slider.offsetLeft;\n      const walk = (x - this.startX) * 2; // Scroll speed multiplier\n      this.slider[this.scrollPosition] = this.scrollLeft - walk;\n    });\n\n    // Touch events for mobile (already works, but ensure it's smooth)\n    let touchStartX = 0;\n    let touchScrollLeft = 0;\n    let touchStartTarget = null;\n\n    this.slider.addEventListener('touchstart', (e) => {\n      touchStartTarget = e.target;\n      // Don't start dragging if touching a button\n      if (touchStartTarget.closest('a, button, [role=\"button\"], .thumbnail')) {\n        return;\n      }\n      touchStartX = e.touches[0].pageX - this.slider.offsetLeft;\n      touchScrollLeft = this.slider[this.scrollPosition];\n    });\n\n    this.slider.addEventListener('touchmove', (e) => {\n      // Don't drag if started on a button\n      if (touchStartTarget && touchStartTarget.closest('a, button, [role=\"button\"], .thumbnail')) {\n        return;\n      }\n      if (!this.isDragging) {\n        const x = e.touches[0].pageX - this.slider.offsetLeft;\n        const walk = (x - touchStartX) * 2;\n        this.slider[this.scrollPosition] = touchScrollLeft - walk;\n      }\n    });\n\n    // Set initial cursor style\n    this.slider.classList.add('cursor-grab');\n  }\n\n  initPages() {\n    this.sliderItemsToShow = Array.from(this.sliderItems).filter((element) => element[this.clientPosition] > 0);\n    if (this.sliderItemsToShow.length < 2) return;\n    this.sliderItemOffset = this.sliderItemsToShow[1][this.offsetPosition] - this.sliderItemsToShow[0][this.offsetPosition];\n    this.slidesPerPage = Math.floor(\n      (this.slider.clientHeight - this.sliderItemsToShow[0][this.offsetPosition]) / this.sliderItemOffset\n    );\n    this.totalPages = this.sliderItemsToShow.length - this.slidesPerPage + 1;\n    this.update();\n  }\n\n  resetPages() {\n    this.sliderItems = this.querySelectorAll('[id^=\"Slide-\"]');\n    this.initPages();\n  }\n\n  update() {\n    // Temporarily prevents unneeded updates resulting from variant changes\n    if (!this.slider || !this.nextButton) return;\n\n    // Throttle updates using requestAnimationFrame\n    if (!this.ticking) {\n      window.requestAnimationFrame(() => {\n        const previousPage = this.currentPage;\n        const sliderPosition = this.slider[this.scrollPosition];\n        this.currentPage = Math.round(sliderPosition / this.sliderItemOffset) + 1;\n\n        if (this.currentPageElement && this.pageTotalElement) {\n          this.currentPageElement.textContent = this.currentPage;\n          this.pageTotalElement.textContent = this.totalPages;\n        }\n\n        if (this.currentPage != previousPage) {\n          this.dispatchEvent(\n            new CustomEvent('slideChanged', {\n              detail: {\n                currentPage: this.currentPage,\n                currentElement: this.sliderItemsToShow[this.currentPage - 1],\n              },\n            })\n          );\n        }\n\n        if (this.enableSliderLooping) {\n          this.ticking = false;\n          return;\n        }\n\n        if (this.isSlideVisible(this.sliderItemsToShow[0]) && sliderPosition === 0) {\n          this.prevButton.setAttribute('disabled', 'disabled');\n        } else {\n          this.prevButton.removeAttribute('disabled');\n        }\n\n        if (this.isSlideVisible(this.sliderItemsToShow[this.sliderItemsToShow.length - 1])) {\n          this.nextButton.setAttribute('disabled', 'disabled');\n        } else {\n          this.nextButton.removeAttribute('disabled');\n        }\n\n        this.ticking = false;\n      });\n\n      this.ticking = true;\n    }\n  }\n\n  isSlideVisible(element, offset = 0) {\n    if (!element) return false;\n    const lastVisibleSlide = this.slider[this.clientPosition] + this.slider[this.scrollPosition] - offset;\n    return element[this.offsetPosition] + element[this.clientPosition] <= lastVisibleSlide && element[this.offsetPosition] >= this.slider[this.scrollPosition];\n  }\n\n  onButtonClick(event) {\n    event.preventDefault();\n    const step = event.currentTarget.dataset.step || 1;\n    const sliderPosition = this.slider[this.scrollPosition];\n    this.slideScrollPosition =\n      event.currentTarget.name === 'next'\n        ? sliderPosition + step * this.sliderItemOffset\n        : sliderPosition - step * this.sliderItemOffset;\n    this.setSlidePosition(this.slideScrollPosition);\n  }\n\n  setSlidePosition(position) {\n    const param = this.oriantation == 'vertical' ? { top: position } : { left: position };\n    this.slider.scrollTo(param);\n  }\n}\n\ncustomElements.define('slider-component', SliderComponent);\n\nclass SlideshowComponent extends SliderComponent {\n  constructor() {\n    super();\n    this.sliderControlWrapper = this.querySelector('.slider-buttons');\n    this.enableSliderLooping = true;\n\n    if (!this.sliderControlWrapper) return;\n\n    this.sliderFirstItemNode = this.slider.querySelector('.slideshow__slide');\n    if (this.sliderItemsToShow.length > 0) this.currentPage = 1;\n\n    this.announcementBarSlider = this.querySelector('.announcement-bar-slider');\n    // Value below should match --duration-announcement-bar CSS value\n    this.announcerBarAnimationDelay = this.announcementBarSlider ? 250 : 0;\n\n    this.sliderControlLinksArray = Array.from(this.sliderControlWrapper.querySelectorAll('.slider-counter__link'));\n    this.sliderControlLinksArray.forEach((link) => link.addEventListener('click', this.linkToSlide.bind(this)));\n    this.slider.addEventListener('scroll', this.setSlideVisibility.bind(this), { passive: true });\n    this.setSlideVisibility();\n\n    if (this.announcementBarSlider) {\n      this.announcementBarArrowButtonWasClicked = false;\n\n      this.reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');\n      this.reducedMotion.addEventListener('change', () => {\n        if (this.slider.getAttribute('data-autoplay') === 'true') this.setAutoPlay();\n      });\n\n      [this.prevButton, this.nextButton].forEach((button) => {\n        button.addEventListener(\n          'click',\n          () => {\n            this.announcementBarArrowButtonWasClicked = true;\n          },\n          { once: true }\n        );\n      });\n    }\n\n    if (this.slider.getAttribute('data-autoplay') === 'true') this.setAutoPlay();\n  }\n\n  setAutoPlay() {\n    this.autoplaySpeed = this.slider.dataset.speed * 1000;\n    this.addEventListener('mouseover', this.focusInHandling.bind(this));\n    this.addEventListener('mouseleave', this.focusOutHandling.bind(this));\n    this.addEventListener('focusin', this.focusInHandling.bind(this));\n    this.addEventListener('focusout', this.focusOutHandling.bind(this));\n\n    if (this.querySelector('.slideshow__autoplay')) {\n      this.sliderAutoplayButton = this.querySelector('.slideshow__autoplay');\n      this.sliderAutoplayButton.addEventListener('click', this.autoPlayToggle.bind(this));\n      this.autoplayButtonIsSetToPlay = true;\n      this.play();\n    } else {\n      this.reducedMotion.matches || this.announcementBarArrowButtonWasClicked ? this.pause() : this.play();\n    }\n  }\n\n  onButtonClick(event) {\n    super.onButtonClick(event);\n    this.wasClicked = true;\n\n    const isFirstSlide = this.currentPage === 1;\n    const isLastSlide = this.currentPage === this.sliderItemsToShow.length;\n\n    if (!isFirstSlide && !isLastSlide) {\n      this.applyAnimationToAnnouncementBar(event.currentTarget.name);\n      return;\n    }\n\n    if (isFirstSlide && event.currentTarget.name === 'previous') {\n      this.slideScrollPosition =\n        this.slider.scrollLeft + this.sliderFirstItemNode.clientWidth * this.sliderItemsToShow.length;\n    } else if (isLastSlide && event.currentTarget.name === 'next') {\n      this.slideScrollPosition = 0;\n    }\n\n    this.setSlidePosition(this.slideScrollPosition);\n\n    this.applyAnimationToAnnouncementBar(event.currentTarget.name);\n  }\n\n  setSlidePosition(position) {\n    if (this.setPositionTimeout) clearTimeout(this.setPositionTimeout);\n    this.setPositionTimeout = setTimeout(() => {\n      this.slider.scrollTo({\n        left: position,\n      });\n    }, this.announcerBarAnimationDelay);\n  }\n\n  update() {\n    super.update();\n    this.sliderControlButtons = this.querySelectorAll('.slider-counter__link');\n    this.prevButton.removeAttribute('disabled');\n\n    if (!this.sliderControlButtons.length) return;\n\n    this.sliderControlButtons.forEach((link) => {\n      link.classList.remove('slider-counter__link--active');\n      link.removeAttribute('aria-current');\n    });\n    this.sliderControlButtons[this.currentPage - 1].classList.add('slider-counter__link--active');\n    this.sliderControlButtons[this.currentPage - 1].setAttribute('aria-current', true);\n  }\n\n  autoPlayToggle() {\n    this.togglePlayButtonState(this.autoplayButtonIsSetToPlay);\n    this.autoplayButtonIsSetToPlay ? this.pause() : this.play();\n    this.autoplayButtonIsSetToPlay = !this.autoplayButtonIsSetToPlay;\n  }\n\n  focusOutHandling(event) {\n    if (this.sliderAutoplayButton) {\n      const focusedOnAutoplayButton =\n        event.target === this.sliderAutoplayButton || this.sliderAutoplayButton.contains(event.target);\n      if (!this.autoplayButtonIsSetToPlay || focusedOnAutoplayButton) return;\n      this.play();\n    } else if (!this.reducedMotion.matches && !this.announcementBarArrowButtonWasClicked) {\n      this.play();\n    }\n  }\n\n  focusInHandling(event) {\n    if (this.sliderAutoplayButton) {\n      const focusedOnAutoplayButton =\n        event.target === this.sliderAutoplayButton || this.sliderAutoplayButton.contains(event.target);\n      if (focusedOnAutoplayButton && this.autoplayButtonIsSetToPlay) {\n        this.play();\n      } else if (this.autoplayButtonIsSetToPlay) {\n        this.pause();\n      }\n    } else if (this.announcementBarSlider.contains(event.target)) {\n      this.pause();\n    }\n  }\n\n  play() {\n    this.slider.setAttribute('aria-live', 'off');\n    clearInterval(this.autoplay);\n    this.autoplay = setInterval(this.autoRotateSlides.bind(this), this.autoplaySpeed);\n  }\n\n  pause() {\n    this.slider.setAttribute('aria-live', 'polite');\n    clearInterval(this.autoplay);\n  }\n\n  togglePlayButtonState(pauseAutoplay) {\n    if (pauseAutoplay) {\n      this.sliderAutoplayButton.classList.add('slideshow__autoplay--paused');\n      this.sliderAutoplayButton.setAttribute('aria-label', window.accessibilityStrings.playSlideshow);\n    } else {\n      this.sliderAutoplayButton.classList.remove('slideshow__autoplay--paused');\n      this.sliderAutoplayButton.setAttribute('aria-label', window.accessibilityStrings.pauseSlideshow);\n    }\n  }\n\n  autoRotateSlides() {\n    const slideScrollPosition =\n      this.currentPage === this.sliderItems.length ? 0 : this.slider.scrollLeft + this.sliderItemOffset;\n\n    this.setSlidePosition(slideScrollPosition);\n    this.applyAnimationToAnnouncementBar();\n  }\n\n  setSlideVisibility(event) {\n    if (!this.visibilityTicking) {\n      window.requestAnimationFrame(() => {\n        this.sliderItemsToShow.forEach((item, index) => {\n          const linkElements = item.querySelectorAll('a');\n          if (index === this.currentPage - 1) {\n            if (linkElements.length)\n              linkElements.forEach((button) => {\n                button.removeAttribute('tabindex');\n              });\n            item.setAttribute('aria-hidden', 'false');\n            item.removeAttribute('tabindex');\n          } else {\n            if (linkElements.length)\n              linkElements.forEach((button) => {\n                button.setAttribute('tabindex', '-1');\n              });\n            item.setAttribute('aria-hidden', 'true');\n            item.setAttribute('tabindex', '-1');\n          }\n        });\n        this.wasClicked = false;\n        this.visibilityTicking = false;\n      });\n      this.visibilityTicking = true;\n    }\n  }\n\n  applyAnimationToAnnouncementBar(button = 'next') {\n    if (!this.announcementBarSlider) return;\n\n    const itemsCount = this.sliderItems.length;\n    const increment = button === 'next' ? 1 : -1;\n\n    const currentIndex = this.currentPage - 1;\n    let nextIndex = (currentIndex + increment) % itemsCount;\n    nextIndex = nextIndex === -1 ? itemsCount - 1 : nextIndex;\n\n    const nextSlide = this.sliderItems[nextIndex];\n    const currentSlide = this.sliderItems[currentIndex];\n\n    const animationClassIn = 'announcement-bar-slider--fade-in';\n    const animationClassOut = 'announcement-bar-slider--fade-out';\n\n    const isFirstSlide = currentIndex === 0;\n    const isLastSlide = currentIndex === itemsCount - 1;\n\n    const shouldMoveNext = (button === 'next' && !isLastSlide) || (button === 'previous' && isFirstSlide);\n    const direction = shouldMoveNext ? 'next' : 'previous';\n\n    currentSlide.classList.add(`${animationClassOut}-${direction}`);\n    nextSlide.classList.add(`${animationClassIn}-${direction}`);\n\n    setTimeout(() => {\n      currentSlide.classList.remove(`${animationClassOut}-${direction}`);\n      nextSlide.classList.remove(`${animationClassIn}-${direction}`);\n    }, this.announcerBarAnimationDelay * 2);\n  }\n\n  linkToSlide(event) {\n    event.preventDefault();\n    const slideScrollPosition =\n      this.slider.scrollLeft +\n      this.sliderFirstItemNode.clientWidth *\n      (this.sliderControlLinksArray.indexOf(event.currentTarget) + 1 - this.currentPage);\n    this.slider.scrollTo({\n      left: slideScrollPosition,\n    });\n  }\n}\n\ncustomElements.define('slideshow-component', SlideshowComponent);\n\n\n// Variants\nclass VariantSelects extends HTMLElement {\n  constructor() {\n    super();\n  }\n\n  connectedCallback() {\n    // Use event delegation to catch change events from inputs and selects\n    this.addEventListener('change', (event) => {\n\n      // Ensure we're handling change events from radio inputs or selects\n      const isRadioInput = event.target.type === 'radio';\n      const isSelect = event.target.tagName === 'SELECT';\n\n      if (isRadioInput || isSelect) {\n        const target = this.getInputForEventTarget(event.target);\n        this.updateSelectionMetadata(event);\n        this.setPendingOption(target);\n\n        // Get selected option values - ensure we get them after the input is checked\n        const selectedValues = this.selectedOptionValues;\n\n        publish(PUB_SUB_EVENTS.optionValueSelectionChange, {\n          data: {\n            event,\n            target,\n            selectedOptionValues: selectedValues,\n          },\n        });\n\n        // Fallback: Always try to directly call product-info handler as backup\n        // This ensures the handler runs even if subscription failed or element was replaced\n        // Use setTimeout to let the pub/sub system try first, then fallback if needed\n        setTimeout(() => {\n          if (event.productInfoHandled) return;\n\n          // Find product-info by matching section/product ID instead of just DOM containment\n          const variantSelector = this; // 'this' is the variant-selects/color-swatch element\n          const variantSectionId = variantSelector.dataset.section;\n          const variantProductId = variantSelector.dataset.product;\n\n          // Try to find matching product-info by section or product ID\n          let productInfo = this.closest('product-info');\n          if (!productInfo || (variantSectionId && productInfo.dataset.section !== variantSectionId && productInfo.dataset.originalSection !== variantSectionId)) {\n            // Find by section ID match\n            productInfo = document.querySelector(`product-info[data-section=\"${variantSectionId}\"], product-info[data-original-section=\"${variantSectionId}\"]`);\n          }\n          if (!productInfo && variantProductId) {\n            // Fallback: find by product ID match\n            productInfo = document.querySelector(`product-info[data-product-id=\"${variantProductId}\"]`);\n          }\n          if (!productInfo) {\n            // Last resort: main product page\n            productInfo = document.querySelector('product-info[id^=\"MainProduct\"]');\n          }\n\n          if (productInfo && typeof productInfo.handleOptionValueChange === 'function') {\n            productInfo.handleOptionValueChange({\n              data: {\n                event,\n                target,\n                selectedOptionValues: selectedValues,\n              },\n            });\n          }\n        }, 10);\n      }\n    });\n\n    // Ensure label clicks properly trigger radio inputs\n    // This is a fallback in case the native label behavior doesn't work\n    this.addEventListener('click', (event) => {\n      const label = event.target.closest('label[for]');\n      if (label && this.contains(label)) {\n        const inputId = label.getAttribute('for');\n        if (inputId) {\n          // Clean up the ID (remove any leading #)\n          const cleanId = inputId.replace(/^#/, '');\n          const input = document.getElementById(cleanId) || this.querySelector(`#${CSS.escape(cleanId)}`);\n\n          if (input && input.type === 'radio' && !input.disabled && input.closest('variant-selects, color-swatch') === this) {\n            // Check if input is already checked (browser should have done this)\n            // If not, manually check it and trigger change event\n            if (!input.checked) {\n              input.checked = true;\n              // Trigger change event after a microtask to ensure it fires\n              Promise.resolve().then(() => {\n                input.dispatchEvent(new Event('change', { bubbles: true, cancelable: true }));\n              });\n            }\n          }\n        }\n      }\n    }, { passive: true });\n  }\n\n\n  updateSelectionMetadata({ target }) {\n    const { value, tagName } = target;\n\n    if (tagName === 'SELECT' && target.selectedOptions.length) {\n      Array.from(target.options)\n        .find((option) => option.getAttribute('selected'))\n        .removeAttribute('selected');\n      target.selectedOptions[0].setAttribute('selected', 'selected');\n\n      const swatchValue = target.selectedOptions[0].dataset.optionSwatchValue;\n      const selectedDropdownSwatchValue = target\n        .closest('.product-form__input')\n        .querySelector('[data-selected-value] > .swatch');\n      if (!selectedDropdownSwatchValue) return;\n      if (swatchValue) {\n        selectedDropdownSwatchValue.style.setProperty('--swatch--background', swatchValue);\n        selectedDropdownSwatchValue.classList.remove('swatch--unavailable');\n      } else {\n        selectedDropdownSwatchValue.style.setProperty('--swatch--background', 'unset');\n        selectedDropdownSwatchValue.classList.add('swatch--unavailable');\n      }\n\n      selectedDropdownSwatchValue.style.setProperty(\n        '--swatch-focal-point',\n        target.selectedOptions[0].dataset.optionSwatchFocalPoint || 'unset'\n      );\n    } else if (tagName === 'INPUT' && target.type === 'radio') {\n      const fieldset = target.closest(`fieldset`);\n      if (!fieldset) return;\n\n      // Update data-selected-value (for dropdown swatch display)\n      const selectedSwatchValue = fieldset.querySelector('[data-selected-value]');\n      if (selectedSwatchValue) selectedSwatchValue.innerHTML = value;\n\n      // Update data-selected-swatch-value (used in swatch picker type - this is the main one!)\n      const selectedSwatchValueSpan = fieldset.querySelector('[data-selected-swatch-value]');\n      if (selectedSwatchValueSpan) {\n        selectedSwatchValueSpan.textContent = value;\n      }\n\n      // Update the legend span if it exists (for button/pill picker type)\n      const legend = fieldset.querySelector('legend');\n      if (legend) {\n        const legendSpan = legend.querySelector('span');\n        if (legendSpan && !legendSpan.hasAttribute('data-selected-swatch-value') && !legendSpan.hasAttribute('data-selected-value')) {\n          legendSpan.textContent = value;\n        }\n      }\n    }\n  }\n\n  getInputForEventTarget(target) {\n    return target.tagName === 'SELECT' ? target.selectedOptions[0] : target;\n  }\n\n  setPendingOption(target) {\n    this.querySelectorAll('label.is-loading').forEach((label) => label.classList.remove('is-loading'));\n    if (!target?.id) return;\n\n    const label = this.querySelector(`label[for=\"${CSS.escape(target.id)}\"]`);\n    label?.classList.add('is-loading');\n  }\n\n  get selectedOptionValues() {\n    const selectedInputs = Array.from(\n      this.querySelectorAll('select option[selected], fieldset input[type=\"radio\"]:checked, input[type=\"radio\"]:checked')\n    );\n\n    const result = selectedInputs\n      .map((element) => {\n        // Try dataset first (for data-option-value-id)\n        if (element.dataset && element.dataset.optionValueId) {\n          return element.dataset.optionValueId;\n        }\n        // Fallback: try getAttribute directly\n        const attrValue = element.getAttribute('data-option-value-id');\n        if (attrValue) {\n          return attrValue;\n        }\n        return null;\n      })\n      .filter((value) => value !== null);\n\n    return result;\n  }\n}\n\ncustomElements.define('variant-selects', VariantSelects);\n\n\nclass ProductRecommendations extends HTMLElement {\n  observer = undefined;\n\n  constructor() {\n    super();\n  }\n\n  connectedCallback() {\n    this.initializeRecommendations(this.dataset.productId);\n  }\n\n  initializeRecommendations(productId) {\n    this.observer?.unobserve(this);\n    this.observer = new IntersectionObserver(\n      (entries, observer) => {\n        if (!entries[0].isIntersecting) return;\n        observer.unobserve(this);\n        this.loadRecommendations(productId);\n      },\n      { rootMargin: '0px 0px 400px 0px' }\n    );\n    this.observer.observe(this);\n  }\n\n  loadRecommendations(productId) {\n    fetch(`${this.dataset.url}&product_id=${productId}&section_id=${this.dataset.sectionId}`)\n      .then((response) => response.text())\n      .then((text) => {\n        const html = document.createElement('div');\n        html.innerHTML = text;\n        const recommendations = html.querySelector('product-recommendations');\n\n        if (recommendations?.innerHTML.trim().length) {\n          this.innerHTML = recommendations.innerHTML;\n        }\n\n        if (!this.querySelector('slider-component') && this.classList.contains('complementary-products')) {\n          this.remove();\n        }\n\n        if (html.querySelector('.grid__item')) {\n          this.classList.add('product-recommendations--loaded');\n        }\n      })\n      .catch((e) => {\n        console.error(e);\n      });\n  }\n}\n\ncustomElements.define('product-recommendations', ProductRecommendations);\n\n\n\nclass AccountIcon extends HTMLElement {\n  constructor() {\n    super();\n\n    this.icon = this.querySelector('.icon');\n  }\n\n  connectedCallback() {\n    document.addEventListener('storefront:signincompleted', this.handleStorefrontSignInCompleted.bind(this));\n  }\n\n  handleStorefrontSignInCompleted(event) {\n    if (event?.detail?.avatar) {\n      this.icon?.replaceWith(event.detail.avatar.cloneNode());\n    }\n  }\n}\n\ncustomElements.define('account-icon', AccountIcon);\n\n// Variant hover\nclass ColorSwatch extends VariantSelects {\n  constructor() {\n    super();\n    this.querySelectorAll('fieldset label').forEach((ele) => {\n      ele.addEventListener('click', this.onLabelClick.bind(this));\n    })\n  }\n  onLabelClick(event) {\n    const label = event.target.closest('label');\n    if (!label) return;\n\n    const inputId = label.getAttribute('for');\n    const input = inputId ? this.querySelector(`#${CSS.escape(inputId)}`) : null;\n    if (input && input.type === 'radio') {\n      return;\n    }\n\n    if (label.dataset.href) {\n      window.location.href = label.dataset.href;\n    }\n  }\n}\ncustomElements.define('color-swatch', ColorSwatch);\n\n\n// login popup\nclass ContentDropdown extends HTMLElement {\n  constructor() {\n    super();\n    this.addEventListener('click', this.popUpClick.bind(this));\n    document.addEventListener('click', this.closePopup.bind(this));\n  }\n  popUpClick(event) {\n    event.stopPropagation();\n    this.querySelector(\"#content_dropdown\").classList.toggle(\"hidden\");\n  }\n  closePopup(event) {\n    const userPopup = this.querySelector(\"#content_dropdown\");\n    if (!userPopup.contains(event.target)) {\n      userPopup.classList.add(\"hidden\");\n    }\n  }\n}\ncustomElements.define('content-dropdown', ContentDropdown);\n\n// Collapsible content\nclass CollapseContent extends HTMLElement {\n  constructor() {\n    super();\n    var collapse = this.getElementsByClassName(\"toggle\");\n    Array.from(collapse).forEach((ele) => {\n      ele.setAttribute('tabindex', '0');\n      // Find the collapse element more reliably\n      var content_data = ele.nextElementSibling;\n      // If nextElementSibling doesn't have the collapse class, search for it\n      if (!content_data || !content_data.classList.contains('collapse')) {\n        var parent = ele.parentElement;\n        if (parent) {\n          content_data = parent.querySelector('.collapse');\n        }\n      }\n      var defaultOpen = ele.classList.contains(\"active\");\n      if (content_data && !defaultOpen) {\n        content_data.classList.add('is-collapsed');\n        content_data.setAttribute('data-collapsed', 'true');\n      } else if (content_data && defaultOpen) {\n        content_data.classList.remove('is-collapsed');\n        content_data.setAttribute('data-collapsed', 'false');\n      }\n      ele.addEventListener(\"click\", this.onCollapseClick.bind(this));\n      ele.addEventListener('keydown', this.handleKeyDown.bind(this));\n    });\n  }\n  handleKeyDown(event) {\n    if (event.keyCode === 13) {\n      this.onCollapseClick(event);\n    }\n  }\n  onCollapseClick(event) {\n    const toggle = event.currentTarget;\n    toggle.classList.toggle(\"active\");\n\n    // Find the collapse element more reliably\n    let content_data = toggle.nextElementSibling;\n    if (!content_data || !content_data.classList.contains('collapse')) {\n      const parent = toggle.parentElement;\n      if (parent) {\n        content_data = parent.querySelector('.collapse');\n      }\n    }\n\n    if (!content_data) {\n      console.warn('Collapse content element not found');\n      return;\n    }\n\n    const isCollapsed = content_data.getAttribute('data-collapsed') === 'true';\n    if (isCollapsed) {\n      this.expandCollapse(content_data);\n      toggle.setAttribute('aria-expanded', 'true');\n    } else {\n      this.allCollapse(content_data);\n      toggle.setAttribute('aria-expanded', 'false');\n    }\n  }\n\n  expandCollapse(element) {\n    const collapseHeight = element.scrollHeight;\n    element.classList.remove('is-collapsed');\n    element.style.height = collapseHeight + 'px';\n    element.setAttribute('data-collapsed', 'false');\n\n    const handleTransitionEnd = (event) => {\n      if (event.propertyName === 'height') {\n        element.removeEventListener('transitionend', handleTransitionEnd);\n        element.style.height = 'auto';\n      }\n    };\n    element.addEventListener('transitionend', handleTransitionEnd);\n\n    // Fallback if no transition\n    setTimeout(() => {\n      if (element.style.height === collapseHeight + 'px') {\n        element.style.height = 'auto';\n        element.removeEventListener('transitionend', handleTransitionEnd);\n      }\n    }, 500);\n  }\n\n  allCollapse(element) {\n    const collapseHeight = element.scrollHeight;\n    element.style.height = collapseHeight + 'px';\n    element.offsetHeight; // force reflow\n\n    element.style.height = '0px';\n    element.setAttribute('data-collapsed', 'true');\n\n    const handleTransitionEnd = (event) => {\n      if (event.propertyName === 'height') {\n        element.removeEventListener('transitionend', handleTransitionEnd);\n        element.classList.add('is-collapsed');\n        element.style.height = null;\n      }\n    };\n    element.addEventListener('transitionend', handleTransitionEnd);\n\n    // Fallback if no transition\n    setTimeout(() => {\n      if (element.style.height === '0px') {\n        element.classList.add('is-collapsed');\n        element.style.height = null;\n        element.removeEventListener('transitionend', handleTransitionEnd);\n      }\n    }, 500);\n  }\n}\ncustomElements.define('collapse-content', CollapseContent);\n\n\n\n// Carousel\nclass SliderCarousel extends HTMLElement {\n  constructor() {\n    super();\n    let optionsData = {};\n    let defaults = {};\n    let autoplay = false;\n    if (this.dataset.sectionSetting) {\n      const sectionSetting = JSON.parse(this.dataset.sectionSetting);\n      const space = +this.dataset.spacingGridHorizontal;\n      const spacemobile = +this.dataset.spacingGridHorizontal / 2;\n      optionsData = {\n        slidesPerView: sectionSetting.columns_desktop ? sectionSetting.columns_desktop : 1,\n        spaceBetween: space,\n        loop: false,\n        dragClickables: false,\n        updateOnWindowResize: true,\n        pagination: {\n          clickable: 'true',\n        },\n        breakpoints: {\n          0: {\n            slidesPerView: sectionSetting.columns_mobile,\n            spaceBetween: spacemobile,\n          },\n          768: {\n            slidesPerView: sectionSetting.columns_desktop,\n            spaceBetween: space,\n          }\n        }\n      };\n      if (sectionSetting.content_type == true) {\n        optionsData['breakpoints'] = {\n          0: {\n            spaceBetween: spacemobile,\n            centeredSlides: true,\n            slidesPerView: 1.1,\n          },\n          768: {\n            slidesPerView: 1.2,\n            centeredSlides: true,\n            spaceBetween: space,\n          },\n          992: {\n            slidesPerView: 1.9,\n            centeredSlides: true,\n            spaceBetween: space,\n          }\n        };\n      }\n      if (sectionSetting.content_type == false) {\n        optionsData['breakpoints'] = {\n          0: {\n            spaceBetween: spacemobile,\n            centeredSlides: false,\n            slidesPerView: 1,\n          },\n          768: {\n            slidesPerView: 1,\n            centeredSlides: false,\n            spaceBetween: space,\n          }\n        };\n      }\n      if (sectionSetting.enable_loop == true) {\n        optionsData['loop'] = {\n          loop: true,\n          rewind: true,\n        };\n      }\n      if (sectionSetting.transition == 'tran_slide') {\n        optionsData['effect'] = 'slide';\n      }\n      if (sectionSetting.transition == 'tran_card') {\n        optionsData['effect'] = 'cards';\n      }\n      if (sectionSetting.transition == 'tran_coverflow') {\n        optionsData['effect'] = 'coverflow';\n      }\n\n      if (this.dataset.breakpoints) {\n        const breakpoints = JSON.parse(this.dataset.breakpoints)\n        for (const key in breakpoints) {\n          if (key == 0) {\n            let obj = {\n              slidesPerView: breakpoints[key],\n              spaceBetween: spacemobile,\n            }\n            optionsData['breakpoints'][key] = obj\n          } else {\n            let customspaceBetween = space\n            let breakpointsKey = key\n            if (key.indexOf('m') > -1) {\n              breakpointsKey = key.split('-')[1]\n              customspaceBetween = spacemobile\n            }\n            let obj = {\n              slidesPerView: breakpoints[key],\n              spaceBetween: customspaceBetween,\n            }\n            optionsData['breakpoints'][breakpointsKey] = obj\n          }\n        }\n      }\n      if (sectionSetting.auto_rotate == true) {\n        autoplay = true;\n        optionsData['autoplay'] = {\n          delay: sectionSetting.change_slides_speed * 1000,\n          disableOnInteraction: false,\n        };\n      }\n      if (sectionSetting.pagination_style == 'arrows' || sectionSetting.enable_slide_arrow == true) {\n        optionsData['navigation'] = {\n          nextEl: '.swiper-button-next',\n          prevEl: '.swiper-button-prev',\n        };\n      }\n\n      if (sectionSetting.pagination_style == 'dots' || sectionSetting.pagination_style == 'line' || sectionSetting.pagination_style == 'counter' || sectionSetting.pagination_style == 'numbers') {\n        optionsData['pagination']['el'] = '.swiper-pagination';\n      }\n      if (sectionSetting.pagination_style == 'line') {\n        optionsData['pagination']['type'] = 'bullets';\n        optionsData['pagination']['renderBullet'] = function (index, className) {\n          return '<span class=\"' + className + '\">' + '<i></i>' + '<b></b>' + '</span>';\n        };\n      }\n      if (sectionSetting.pagination_style == 'counter') {\n        optionsData['pagination']['type'] = 'fraction';\n        optionsData['pagination']['renderBullet'] = function (index, className) {\n          return '<span class=\"' + className + '\">' + '<i></i>' + '<b></b>' + '</span>';\n        };\n      }\n      if (sectionSetting.pagination_style == 'numbers') {\n        optionsData['pagination']['renderBullet'] = function (index, className) {\n          return `<span class=\"${className}\">${index + 1}</span>`\n        };\n      }\n    }\n    this.options = {\n      ...defaults,\n      ...optionsData\n    };\n    this.swiperInstance = null;\n  }\n  connectedCallback() {\n    // Wait for Swiper library to be available, then initialize\n    this.initSwiper();\n  }\n  initSwiper() {\n    const swiperEl = this.querySelector('.swiper');\n    if (!swiperEl) return;\n    if (swiperEl.swiper) return;\n\n    if (typeof Swiper === 'undefined') {\n      if (window.ensureSwiperLoaded) {\n        window.ensureSwiperLoaded().then(() => this.initSwiper()).catch(() => {});\n      } else {\n        window.addEventListener('swiperLoaded', () => this.initSwiper(), { once: true });\n      }\n      return;\n    }\n\n    this.swiperInstance = new Swiper(swiperEl, this.options);\n  }\n}\ncustomElements.define('slider-carousel', SliderCarousel);\n\n\n// Image comparison\nclass ImgCompare extends HTMLElement {\n  constructor() {\n    super();\n    this.topImage = this.querySelectorAll('.compare_image')[1];\n    this.inputCompare = this.querySelector('.compare_line');\n    const compare_cursor = this.querySelector('#compare_cursor');\n    compare_cursor.addEventListener('mousemove', this.resizeImg.bind(this));\n    compare_cursor.addEventListener('touchmove', this.resizeImg.bind(this));\n  }\n  resizeImg(event) {\n    this.topImage.style.width = `${event.target.value}%`;\n    this.inputCompare.style.left = `${event.target.value}%`;\n  }\n  connectedCallback() {\n    this.querySelectorAll('.comparewidth').forEach(ele => {\n      ele.style.width = this.clientWidth + 'px';\n    });\n  }\n}\ncustomElements.define('img-compare', ImgCompare);\n\n\n// Video - CRITICAL FIX: Defer DOM query to reduce TBT\n(function initVideoContentRemove() {\n  function setupVideoContentRemove() {\n    document.querySelectorAll('.video-content-remove').forEach((close) => {\n      close.addEventListener('click', (event) => {\n        const parentElement = event.currentTarget.closest('.video_box');\n        if (parentElement) {\n          parentElement.remove();\n        }\n      });\n    });\n  }\n\n  // Defer initialization to reduce TBT\n  if (document.readyState === 'loading') {\n    if ('requestIdleCallback' in window) {\n      document.addEventListener('DOMContentLoaded', function () {\n        requestIdleCallback(setupVideoContentRemove, { timeout: 2000 });\n      });\n    } else {\n      document.addEventListener('DOMContentLoaded', function () {\n        setTimeout(setupVideoContentRemove, 2000);\n      });\n    }\n  } else {\n    if ('requestIdleCallback' in window) {\n      requestIdleCallback(setupVideoContentRemove, { timeout: 2000 });\n    } else {\n      setTimeout(setupVideoContentRemove, 2000);\n    }\n  }\n})();\n\n\n// Menu hover\nclass DesktopWebiMenu extends HTMLElement {\n  constructor() {\n    super();\n    if (window.outerWidth > 991) {\n      const drop = this.dataset.drop ? this.dataset.drop : 'click';\n      this.addEventListener('click', this.onFocusOut.bind(this));\n      this.addEventListener('keydown', this.handleKeyDown.bind(this));\n      this.querySelectorAll('li.menu_space').forEach(ele => {\n        ele.addEventListener('keydown', this.handleLiKeyDown.bind(this));\n        ele.addEventListener(drop, () => {\n          this.onLiClick(ele);\n        });\n        if (drop == 'mouseover') {\n          ele.addEventListener('mouseout', () => {\n            this.closeLi();\n          });\n        }\n      });\n    }\n  }\n  removeSubMenuClass(ele) {\n    ele.querySelectorAll('.submenu_child').forEach((e) => {\n      e.classList.remove('submenu_keyboard')\n    });\n  }\n  addSubMenuClass(ele) {\n    ele.querySelectorAll('.submenu_child').forEach((e) => {\n      e.classList.add('submenu_keyboard')\n    });\n  }\n  handleLiKeyDown(event) {\n    if (event.keyCode === 13) {\n      if (event.target.classList.contains('menuclick')) {\n        event.target.classList.remove('menuclick');\n        this.removeSubMenuClass(event.target);\n      }\n      else\n        this.onLiClick(event.target);\n      if (event.target.classList.contains('onlychild_focus')) {\n        event.preventDefault();\n      }\n    }\n  }\n  handleKeyDown(event) {\n    if (event.keyCode === 13) {\n      this.onFocusOut(event);\n      if (event.target.classList.contains('onlychild_focus')) {\n        event.preventDefault();\n      }\n    }\n  }\n  onLiClick(ele) {\n    if (ele.nodeName != 'LI') return;\n    this.closeLi();\n    ele.classList.add('menuclick');\n    this.addSubMenuClass(ele);\n\n    // Position dropdown menu relative to clicked element for sticky headers\n    const dropdown = ele.querySelector('.menudrop_hover');\n    if (dropdown) {\n      // Check if this is a click dropdown menu that needs positioning\n      const clickDropMenu = ele.querySelector('.click_dropmenu');\n      if (clickDropMenu) {\n        this.positionDropdown(ele, dropdown);\n      }\n    }\n  }\n\n  positionDropdown(menuItem, dropdown) {\n    // Add class to indicate this dropdown is positioned via JS\n    dropdown.classList.add('js-positioned');\n\n    // Get the menu item's position relative to viewport\n    const rect = menuItem.getBoundingClientRect();\n\n    // Set the dropdown position - use fixed positioning to account for sticky header\n    dropdown.style.setProperty('position', 'fixed', 'important');\n    dropdown.style.setProperty('top', `${rect.bottom}px`, 'important');\n    dropdown.style.setProperty('left', `${rect.left}px`, 'important');\n    dropdown.style.setProperty('right', 'auto', 'important');\n\n    // Function to update dropdown position\n    const updatePosition = () => {\n      if (!menuItem.classList.contains('menuclick')) {\n        return;\n      }\n\n      const newRect = menuItem.getBoundingClientRect();\n      const dropdownWidth = dropdown.offsetWidth || 250;\n      const viewportWidth = window.innerWidth;\n\n      dropdown.style.setProperty('top', `${newRect.bottom}px`, 'important');\n\n      // Ensure dropdown doesn't go off-screen horizontally\n      if (newRect.left + dropdownWidth > viewportWidth) {\n        dropdown.style.setProperty('left', `${Math.max(10, viewportWidth - dropdownWidth - 10)}px`, 'important');\n      } else {\n        dropdown.style.setProperty('left', `${newRect.left}px`, 'important');\n      }\n    };\n\n    // Initial position calculation\n    updatePosition();\n\n    // Store reference for cleanup\n    if (!this.activeDropdowns) {\n      this.activeDropdowns = new Map();\n    }\n\n    // Remove old listeners if exists for this dropdown\n    if (this.activeDropdowns.has(dropdown)) {\n      const oldListeners = this.activeDropdowns.get(dropdown);\n      window.removeEventListener('scroll', oldListeners.scroll);\n      window.removeEventListener('resize', oldListeners.resize);\n    }\n\n    // Cleanup function\n    const cleanup = () => {\n      if (this.activeDropdowns && this.activeDropdowns.has(dropdown)) {\n        const listeners = this.activeDropdowns.get(dropdown);\n        window.removeEventListener('scroll', listeners.scroll);\n        window.removeEventListener('resize', listeners.resize);\n        this.activeDropdowns.delete(dropdown);\n      }\n    };\n\n    // Create scroll handler\n    const handleScroll = () => {\n      if (!menuItem.classList.contains('menuclick')) {\n        cleanup();\n        return;\n      }\n      if (!this.ticking) {\n        window.requestAnimationFrame(() => {\n          updatePosition();\n          this.ticking = false;\n        });\n        this.ticking = true;\n      }\n    };\n\n    // Create resize handler\n    const handleResize = () => {\n      if (!menuItem.classList.contains('menuclick')) {\n        cleanup();\n        return;\n      }\n      if (!this.ticking) {\n        window.requestAnimationFrame(() => {\n          updatePosition();\n          this.ticking = false;\n        });\n        this.ticking = true;\n      }\n    };\n\n    // Store and add listeners\n    this.activeDropdowns.set(dropdown, { scroll: handleScroll, resize: handleResize });\n    window.addEventListener('scroll', handleScroll, { passive: true });\n    window.addEventListener('resize', handleResize, { passive: true });\n  }\n  closeLi() {\n    this.querySelectorAll('li.menuclick').forEach((ele) => {\n      ele.classList.remove('menuclick');\n      this.removeSubMenuClass(ele);\n\n      // Clean up scroll and resize listeners for closed dropdowns\n      const dropdown = ele.querySelector('.menudrop_hover');\n      if (dropdown && this.activeDropdowns && this.activeDropdowns.has(dropdown)) {\n        const listeners = this.activeDropdowns.get(dropdown);\n        window.removeEventListener('scroll', listeners.scroll);\n        window.removeEventListener('resize', listeners.resize);\n        this.activeDropdowns.delete(dropdown);\n        // Reset dropdown positioning\n        dropdown.classList.remove('js-positioned');\n        dropdown.style.removeProperty('position');\n        dropdown.style.removeProperty('top');\n        dropdown.style.removeProperty('left');\n        dropdown.style.removeProperty('right');\n      }\n    })\n  }\n  onFocusOut(event) {\n    event.stopPropagation();\n    if (this.contains(event.target) && (!this.querySelector('.wbmenu_js').contains(event.target))) {\n      if (this.classList.contains('open')) {\n        this.classList.remove('open');\n        this.closeLi();\n      }\n      else this.classList.add('open');\n    } else if (!this.querySelector('.wbmenu_js').contains(event.target)) {\n      this.classList.remove('open');\n      this.closeLi();\n    }\n    if (\"ontouchstart\" in document.documentElement && event.target.closest('.header__menu-item').classList.contains('summary'))\n      event.preventDefault();\n  }\n}\ncustomElements.define('desktop-webi-menu', DesktopWebiMenu);\n\nclass DrawerIcon extends HTMLElement {\n  constructor() {\n    super();\n    this.querySelectorAll('.drawericon_inner').forEach(ele => {\n      ele.addEventListener('click', this.onIconClick.bind(this))\n    });\n    this.contentElements = this.querySelectorAll('.drawer_tab');\n    this.prevTag = '';\n  }\n\n  onIconClick(event) {\n    let mainDiv = event.target.closest('button');\n    this.contentElements.forEach(ele => {\n      if (ele.dataset.contant == mainDiv.dataset.label) {\n        if (this.prevTag == ele.dataset.contant) {\n          this.querySelector('.drawericon').classList.remove('active');\n          this.prevTag = '';\n        }\n        else {\n          this.querySelector('.drawericon').classList.add('active');\n          this.prevTag = ele.dataset.contant;\n        }\n        ele.classList.toggle('active');\n        mainDiv.classList.toggle('active');\n      } else {\n        ele.classList.remove('active');\n        this.querySelector('button[data-label=\"' + ele.dataset.contant + '\"]').classList.remove('active');\n      }\n    });\n  }\n\n}\ncustomElements.define('drawer-icon', DrawerIcon);\n\n\n// Bulk modal\nclass BulkModal extends HTMLElement {\n  constructor() {\n    super();\n  }\n  connectedCallback() {\n    const handleIntersection = (entries, observer) => {\n      if (!entries[0].isIntersecting) return;\n      observer.unobserve(this);\n      if (this.innerHTML.trim() === '') {\n        const productUrl = this.dataset.url.split('?')[0];\n        fetch(`${productUrl}?section_id=bulk-quick-order-list`)\n          .then((response) => response.text())\n          .then((responseText) => {\n            const html = new DOMParser().parseFromString(responseText, 'text/html');\n            const sourceQty = html.querySelector('.quick-order-list-container').parentNode;\n            this.innerHTML = sourceQty.innerHTML;\n          })\n          .catch((e) => {\n            console.error(e);\n          });\n      }\n    };\n    new IntersectionObserver(handleIntersection.bind(this)).observe(\n      document.querySelector(`#QuickBulk-${this.dataset.productId}-${this.dataset.sectionId}`)\n    );\n  }\n}\n\ncustomElements.define('bulk-modal', BulkModal);\n\n\n\n// Bulk add\nclass BulkAdd extends HTMLElement {\n  constructor() {\n    super();\n    this.queue = [];\n    this.requestStarted = false;\n    this.ids = [];\n  }\n\n  startQueue(id, quantity) {\n    this.queue.push({ id, quantity });\n    const interval = setInterval(() => {\n      if (this.queue.length > 0) {\n        if (!this.requestStarted) {\n          this.sendRequest(this.queue);\n        }\n      } else {\n        clearInterval(interval);\n      }\n    }, 250);\n  }\n\n  sendRequest(queue) {\n    this.requestStarted = true;\n    const items = {};\n    queue.forEach((queueItem) => {\n      items[parseInt(queueItem.id)] = queueItem.quantity;\n    });\n    this.queue = this.queue.filter((queueElement) => !queue.includes(queueElement));\n    const quickBulkElement = this.closest('quick-order-list') || this.closest('quick-add-bulk');\n    quickBulkElement.updateMultipleQty(items);\n  }\n\n  resetQuantityInput(id) {\n    const input = this.querySelector(`#Quantity-${id}`);\n    input.value = input.getAttribute('value');\n    this.isEnterPressed = false;\n  }\n\n  setValidity(event, index, message) {\n    event.target.setCustomValidity(message);\n    event.target.reportValidity();\n    this.resetQuantityInput(index);\n    event.target.select();\n  }\n\n  validateQuantity(event) {\n    const inputValue = parseInt(event.target.value);\n    const index = event.target.dataset.index;\n\n    if (inputValue < event.target.dataset.min) {\n      this.setValidity(event, index, window.quickOrderListStrings.min_error.replace('[min]', event.target.dataset.min));\n    } else if (inputValue > parseInt(event.target.max)) {\n      this.setValidity(event, index, window.quickOrderListStrings.max_error.replace('[max]', event.target.max));\n    } else if (inputValue % parseInt(event.target.step) != 0) {\n      this.setValidity(event, index, window.quickOrderListStrings.step_error.replace('[step]', event.target.step));\n    } else {\n      event.target.setCustomValidity('');\n      event.target.reportValidity();\n      this.startQueue(index, inputValue);\n    }\n  }\n\n  getSectionsUrl() {\n    if (window.location.pathname == '/search') {\n      const urlParams = new URLSearchParams(window.location.search);\n      const queryString = urlParams.get('q');\n      return `${window.location.pathname}?q=${queryString}`;\n    } else {\n      if (window.pageNumber) {\n        return `${window.location.pathname}?page=${window.pageNumber}`;\n      } else {\n        return `${window.location.pathname}`;\n      }\n    }\n  }\n\n  getSectionInnerHTML(html, selector) {\n    return new DOMParser().parseFromString(html, 'text/html').querySelector(selector).innerHTML;\n  }\n}\n\nif (!customElements.get('bulk-add')) {\n  customElements.define('bulk-add', BulkAdd);\n}\n\n\n// Product card image gallery\n(function () {\n  if (window.cardImageGalleryInitialized) return;\n  window.cardImageGalleryInitialized = true;\n\n  function getGalleryImages(card) {\n    if (card.cardGalleryImages) return card.cardGalleryImages;\n\n    const source = card.querySelector('[data-card-gallery-images]');\n    if (!source) return [];\n\n    try {\n      card.cardGalleryImages = JSON.parse(source.textContent).filter((image) => image && image.src);\n    } catch (error) {\n      card.cardGalleryImages = [];\n    }\n\n    const mediaItem = card.querySelector('[data-card-gallery-current-image]');\n    const currentImage = card.querySelector('[data-card-gallery-image]');\n    const currentPath = normalizeImagePath(currentImage && (currentImage.currentSrc || currentImage.src));\n\n    if (currentPath && !card.cardGalleryImages.some((image) => normalizeImagePath(image.src) === currentPath)) {\n      card.cardGalleryImages.unshift({\n        id: mediaItem?.dataset.cardGalleryCurrentImage || currentPath,\n        src: currentImage.currentSrc || currentImage.src,\n        srcset: currentImage.srcset || '',\n        alt: currentImage.alt || '',\n        width: currentImage.naturalWidth || currentImage.width,\n        height: currentImage.naturalHeight || currentImage.height\n      });\n    }\n\n    return card.cardGalleryImages;\n  }\n\n  function imageUrlWithWidth(src, width) {\n    try {\n      const url = new URL(src, document.baseURI);\n      url.searchParams.set('width', String(width));\n      return url.toString();\n    } catch (error) {\n      return src;\n    }\n  }\n\n  function galleryImageFromMedia(media) {\n    const preview = media?.preview_image || media;\n    if (!preview?.src) return null;\n\n    const width = Number(preview.width) || 0;\n    const responsiveWidths = [165, 360, 533, 720, 900, 1100].filter((candidate) => !width || candidate <= width);\n\n    return {\n      id: media.id || preview.id || preview.src,\n      src: imageUrlWithWidth(preview.src, 370),\n      srcset: responsiveWidths.map((candidate) => `${imageUrlWithWidth(preview.src, candidate)} ${candidate}w`).join(', '),\n      alt: media.alt || preview.alt || '',\n      width,\n      height: Number(preview.height) || 0\n    };\n  }\n\n  function warmCardGallery(card) {\n    if (!card) return Promise.resolve([]);\n    if (card.cardGalleryLoaded) return Promise.resolve(getGalleryImages(card));\n    if (card.cardGalleryPromise) return card.cardGalleryPromise;\n\n    const source = card.querySelector('[data-card-gallery-images]');\n    const url = source?.dataset.cardGalleryUrl;\n    if (!url || typeof window.fetch !== 'function') return Promise.resolve(getGalleryImages(card));\n\n    card.cardGalleryPromise = window.fetch(url, { credentials: 'same-origin', headers: { Accept: 'application/json' } })\n      .then((response) => {\n        if (!response.ok) throw new Error(`Product gallery request failed: ${response.status}`);\n        return response.json();\n      })\n      .then((product) => {\n        const images = (product.media || [])\n          .filter((media) => media && media.media_type === 'image')\n          .map(galleryImageFromMedia)\n          .filter(Boolean);\n\n        if (images.length) {\n          card.cardGalleryImages = images;\n          source.textContent = JSON.stringify(images);\n        }\n        card.cardGalleryLoaded = true;\n        return getGalleryImages(card);\n      })\n      .catch(() => getGalleryImages(card));\n\n    return card.cardGalleryPromise;\n  }\n\n  function getVariantImageIds(card) {\n    if (card.cardGalleryVariantImageIds) return card.cardGalleryVariantImageIds;\n\n    const source = card.querySelector('[data-card-gallery-variant-image-ids]');\n    if (!source) return [];\n\n    try {\n      card.cardGalleryVariantImageIds = JSON.parse(source.textContent).map(String);\n    } catch (error) {\n      card.cardGalleryVariantImageIds = [];\n    }\n\n    return card.cardGalleryVariantImageIds;\n  }\n\n  function normalizeImagePath(value) {\n    if (!value) return '';\n\n    try {\n      return new URL(value, document.baseURI).pathname;\n    } catch (error) {\n      return value.split('?')[0];\n    }\n  }\n\n  function getCurrentImageIndex(card, images) {\n    const mediaItem = card.querySelector('[data-card-gallery-current-image]');\n    const image = card.querySelector('[data-card-gallery-image]');\n    const currentId = mediaItem && mediaItem.dataset.cardGalleryCurrentImage;\n    let currentIndex = images.findIndex((item) => String(item.id) === String(currentId));\n\n    if (currentIndex >= 0 || !image) return currentIndex;\n\n    const currentPath = normalizeImagePath(image.currentSrc || image.src);\n    return images.findIndex((item) => normalizeImagePath(item.src) === currentPath);\n  }\n\n  function getActiveGalleryImages(card) {\n    const images = getGalleryImages(card);\n    const variantImageIds = new Set(getVariantImageIds(card));\n    const currentIndex = getCurrentImageIndex(card, images);\n    if (images.length < 2 || !variantImageIds.size || currentIndex < 0) return images;\n\n    let startIndex = currentIndex;\n    while (startIndex > 0 && !variantImageIds.has(String(images[startIndex].id))) {\n      startIndex -= 1;\n    }\n\n    let endIndex = startIndex + 1;\n    while (endIndex < images.length && !variantImageIds.has(String(images[endIndex].id))) {\n      endIndex += 1;\n    }\n\n    return images.slice(startIndex, endIndex);\n  }\n\n  function setCardImage(card, nextImage, animateDirection) {\n    const mediaItem = card.querySelector('[data-card-gallery-current-image]');\n    const image = card.querySelector('[data-card-gallery-image]');\n    if (!mediaItem || !image || !nextImage) return;\n\n    image.src = nextImage.src;\n    image.srcset = nextImage.srcset || '';\n    image.alt = nextImage.alt || '';\n    if (nextImage.width) image.width = nextImage.width;\n    if (nextImage.height) image.height = nextImage.height;\n    mediaItem.dataset.cardGalleryCurrentImage = String(nextImage.id);\n\n    if (\n      animateDirection &&\n      image.animate &&\n      !window.matchMedia('(prefers-reduced-motion: reduce)').matches\n    ) {\n      image.animate(\n        [\n          { opacity: 0.72, transform: `translateX(${animateDirection > 0 ? '5%' : '-5%'})` },\n          { opacity: 1, transform: 'translateX(0)' }\n        ],\n        { duration: 180, easing: 'cubic-bezier(0.2, 0.8, 0.2, 1)' }\n      );\n    }\n  }\n\n  function updateCardImageFromCard(card, direction, animate) {\n    if (!card) return;\n\n    const images = getActiveGalleryImages(card);\n    if (images.length < 2) return;\n\n    let currentIndex = getCurrentImageIndex(card, images);\n    if (currentIndex < 0) currentIndex = 0;\n\n    const nextImage = images[(currentIndex + direction + images.length) % images.length];\n    setCardImage(card, nextImage, animate ? direction : 0);\n  }\n\n  function updateCardImage(button) {\n    const card = button.closest('product-info, .product-card-wrapper');\n    const direction = button.dataset.cardGalleryDirection === 'prev' ? -1 : 1;\n    updateCardImageFromCard(card, direction);\n  }\n\n  function hasCoarsePointer() {\n    return window.matchMedia && window.matchMedia('(pointer: coarse)').matches;\n  }\n\n  function getCardWrapper(card) {\n    if (!card) return null;\n    if (card.classList && card.classList.contains('product-card-wrapper')) return card;\n    return card.querySelector('.product-card-wrapper');\n  }\n\n  function revealCardGallery(wrapper, blockNextMediaClick) {\n    if (hasCoarsePointer()) return;\n    if (!wrapper || !wrapper.querySelector('[data-card-gallery-images]')) return;\n\n    wrapper.classList.add('is-card-gallery-visible');\n    if (blockNextMediaClick) wrapper.dataset.cardGalleryBlockClick = 'true';\n\n    window.clearTimeout(wrapper.cardGalleryTimer);\n    wrapper.cardGalleryTimer = window.setTimeout(function () {\n      wrapper.classList.remove('is-card-gallery-visible');\n      delete wrapper.dataset.cardGalleryBlockClick;\n    }, 3500);\n  }\n\n  function captureCardImage(card) {\n    const mediaItem = card.querySelector('[data-card-gallery-current-image]');\n    const image = card.querySelector('[data-card-gallery-image]');\n    if (!mediaItem || !image) return null;\n\n    return {\n      id: mediaItem.dataset.cardGalleryCurrentImage || '',\n      src: image.getAttribute('src') || '',\n      srcset: image.getAttribute('srcset') || '',\n      alt: image.getAttribute('alt') || '',\n      width: image.getAttribute('width') || '',\n      height: image.getAttribute('height') || ''\n    };\n  }\n\n  function restoreCardImage(card) {\n    const state = card.cardGalleryHoverRestore;\n    const mediaItem = card.querySelector('[data-card-gallery-current-image]');\n    const image = card.querySelector('[data-card-gallery-image]');\n    if (!state || !mediaItem || !image) return;\n\n    image.setAttribute('src', state.src);\n    image.setAttribute('srcset', state.srcset);\n    image.setAttribute('alt', state.alt);\n    if (state.width) image.setAttribute('width', state.width);\n    if (state.height) image.setAttribute('height', state.height);\n    mediaItem.dataset.cardGalleryCurrentImage = state.id;\n    delete card.cardGalleryHoverRestore;\n    delete card.cardGalleryHoverImages;\n    delete card.cardGalleryHoverIndex;\n  }\n\n  document.addEventListener('pointermove', function (event) {\n    if (event.pointerType !== 'mouse' || hasCoarsePointer()) return;\n    if (!(event.target instanceof Element)) return;\n\n    const mediaLink = event.target.closest('.dt-collection-grid-shell .card__media a');\n    if (!mediaLink) return;\n\n    const card = getCardWrapper(mediaLink.closest('product-info, .product-card-wrapper'));\n    if (!card) return;\n\n    warmCardGallery(card);\n\n    if (!card.cardGalleryHoverRestore) {\n      card.cardGalleryHoverRestore = captureCardImage(card);\n      card.cardGalleryHoverImages = getActiveGalleryImages(card);\n    }\n\n    const images = card.cardGalleryHoverImages || [];\n    const bounds = mediaLink.getBoundingClientRect();\n    if (images.length < 2 || bounds.width <= 0) return;\n\n    const progress = Math.max(0, Math.min(0.9999, (event.clientX - bounds.left) / bounds.width));\n    const nextIndex = Math.floor(progress * images.length);\n    if (card.cardGalleryHoverIndex === nextIndex) return;\n\n    card.cardGalleryHoverIndex = nextIndex;\n    setCardImage(card, images[nextIndex], 0);\n  }, { passive: true });\n\n  document.addEventListener('pointerout', function (event) {\n    if (event.pointerType !== 'mouse' || !(event.target instanceof Element)) return;\n\n    const mediaLink = event.target.closest('.dt-collection-grid-shell .card__media a');\n    if (!mediaLink || (event.relatedTarget instanceof Node && mediaLink.contains(event.relatedTarget))) return;\n\n    const card = getCardWrapper(mediaLink.closest('product-info, .product-card-wrapper'));\n    if (card) restoreCardImage(card);\n  }, { passive: true });\n\n  let cardGallerySwipe = null;\n\n  document.addEventListener('pointerdown', function (event) {\n    if (!(event.target instanceof Element)) return;\n    if (event.pointerType === 'mouse') return;\n    if (event.target.closest('[data-card-gallery-direction]')) return;\n\n    const mediaLink = event.target.closest('.card__media a');\n    if (!mediaLink) return;\n\n    const wrapper = getCardWrapper(mediaLink.closest('product-info, .product-card-wrapper'));\n    if (!wrapper) return;\n\n    warmCardGallery(wrapper);\n\n    cardGallerySwipe = {\n      wrapper,\n      startX: event.clientX,\n      startY: event.clientY,\n      pointerId: event.pointerId,\n      didSwipe: false\n    };\n  }, { passive: true });\n\n  document.addEventListener('pointermove', function (event) {\n    if (!cardGallerySwipe || event.pointerId !== cardGallerySwipe.pointerId) return;\n\n    const movedX = event.clientX - cardGallerySwipe.startX;\n    const movedY = event.clientY - cardGallerySwipe.startY;\n    const absX = Math.abs(movedX);\n    const absY = Math.abs(movedY);\n    if (cardGallerySwipe.didSwipe || absX < 34 || absX < absY * 1.25) return;\n\n    cardGallerySwipe.didSwipe = true;\n    updateCardImageFromCard(cardGallerySwipe.wrapper, movedX < 0 ? 1 : -1, true);\n    cardGallerySwipe.wrapper.dataset.cardGalleryBlockClick = 'true';\n    event.preventDefault();\n  }, { passive: false });\n\n  document.addEventListener('pointerup', function (event) {\n    if (!cardGallerySwipe || event.pointerId !== cardGallerySwipe.pointerId) return;\n    cardGallerySwipe = null;\n  }, { passive: true });\n\n  document.addEventListener('pointercancel', function (event) {\n    if (!cardGallerySwipe || event.pointerId !== cardGallerySwipe.pointerId) return;\n    cardGallerySwipe = null;\n  }, { passive: true });\n\n  document.addEventListener('change', function (event) {\n    if (!(event.target instanceof Element) || !event.target.matches('.wc_selector_operation')) return;\n\n    const input = event.target;\n    if (input.disabled || input.getAttribute('aria-disabled') === 'true') return;\n\n    const productInfo = input.closest('product-info');\n    if (!productInfo) return;\n\n    const card = getCardWrapper(productInfo);\n    if (!card) return;\n\n    const imageUrl = input.dataset.variantImage;\n    const variantId = input.dataset.variantId;\n    const variantMediaId = input.dataset.variantMediaId;\n    const variantTitle = input.value || input.getAttribute('aria-label') || '';\n    const productForm = productInfo.querySelector('product-form');\n    const cardImage = card.querySelector('[data-card-gallery-image], .card__media img');\n    const mediaItem = card.querySelector('[data-card-gallery-current-image]');\n\n    if (imageUrl && cardImage) {\n      cardImage.src = imageUrl;\n      cardImage.srcset = imageUrl;\n      if (mediaItem && variantMediaId) mediaItem.dataset.cardGalleryCurrentImage = variantMediaId;\n    }\n\n    if (imageUrl && productForm) {\n      const productTitle = productForm.dataset.productTitle || '';\n      productForm.dataset.productImage = imageUrl;\n      productForm.dataset.productImageAlt = variantTitle ? `${productTitle} ${variantTitle}`.trim() : productTitle;\n    }\n\n    const cardLink = card.querySelector('.card__media a');\n    if (cardLink && variantId) {\n      const baseUrl = (cardLink.getAttribute('href') || '').split('?')[0];\n      if (baseUrl) {\n        const variantUrl = `${baseUrl}?variant=${variantId}`;\n        cardLink.setAttribute('href', variantUrl);\n        if (productForm) productForm.dataset.productUrl = variantUrl;\n      }\n    }\n\n    if (variantId) {\n      const variantInput = productInfo.querySelector('input.product-variant-id');\n      const addButton = productInfo.querySelector('[name=\"add\"]');\n      if (variantInput) {\n        variantInput.value = variantId;\n        variantInput.removeAttribute('disabled');\n      }\n      if (addButton) addButton.disabled = false;\n    }\n\n    if (productForm && variantTitle) {\n      productForm.dataset.productVariantTitle = variantTitle;\n      productForm.dataset.productVariantOptionName = input.name && input.name.toLowerCase().includes('color') ? 'Color' : '';\n    }\n\n    warmCardGallery(card);\n\n    window.requestAnimationFrame(function () {\n      const images = getGalleryImages(card);\n      const image = card.querySelector('[data-card-gallery-image]');\n      const mediaItem = card.querySelector('[data-card-gallery-current-image]');\n      const currentPath = normalizeImagePath(image && (image.currentSrc || image.src));\n      const currentImage = images.find((item) => normalizeImagePath(item.src) === currentPath);\n\n      if (currentImage && mediaItem) {\n        mediaItem.dataset.cardGalleryCurrentImage = String(currentImage.id);\n      }\n\n      delete card.cardGalleryHoverRestore;\n      delete card.cardGalleryHoverImages;\n      delete card.cardGalleryHoverIndex;\n    });\n  });\n\n  document.addEventListener('click', function (event) {\n    if (!(event.target instanceof Element)) return;\n    const button = event.target.closest('[data-card-gallery-direction]');\n    if (button) {\n      if (hasCoarsePointer()) return;\n      event.preventDefault();\n      event.stopPropagation();\n      updateCardImage(button);\n      revealCardGallery(getCardWrapper(button.closest('product-info, .product-card-wrapper')), false);\n      return;\n    }\n\n    const mediaLink = event.target.closest('.card__media a');\n    if (!mediaLink) return;\n\n    const wrapper = getCardWrapper(mediaLink.closest('product-info, .product-card-wrapper'));\n    if (wrapper && wrapper.dataset.cardGalleryBlockClick === 'true') {\n      event.preventDefault();\n      event.stopPropagation();\n      delete wrapper.dataset.cardGalleryBlockClick;\n    }\n  });\n})();\n\n\n\n\n// Product card blank-area click-through on collection grids\n(function () {\n  if (window.productCardClickThroughInitialized) return;\n  window.productCardClickThroughInitialized = true;\n\n  const interactiveSelector = [\n    'a',\n    'button',\n    'input',\n    'label',\n    'select',\n    'textarea',\n    'modal-opener',\n    'modal-dialog',\n    '[role=\"button\"]',\n    '[tabindex]:not([tabindex=\"-1\"])',\n    '.dt-card-wishlist',\n    '.wishlist-card-button',\n    '[data-wishlist-card-button]',\n    '.slider-button'\n  ].join(',');\n\n  let touchCardTap = null;\n\n  function isModifiedClick(event) {\n    return event.button !== 0 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey;\n  }\n\n  function isCardInteractiveTarget(target) {\n    return target.closest(interactiveSelector);\n  }\n\n  function getCardFromPoint(x, y) {\n    if (!document.elementsFromPoint) return null;\n\n    const elements = document.elementsFromPoint(x, y);\n    for (const element of elements) {\n      const card = element.closest && element.closest('product-info.card-main-wrapper[data-layout=\"card\"][data-card-url]');\n      if (card) return card;\n    }\n\n    for (const element of elements) {\n      const item = element.closest && element.closest('.collection-products .product, .collection-products .grid__item, .product-grid .grid__item');\n      const card = item && item.querySelector('product-info.card-main-wrapper[data-layout=\"card\"][data-card-url]');\n      if (card) return card;\n    }\n\n    return null;\n  }\n\n  function getCardFromEvent(event) {\n    const targetCard = event.target.closest('product-info.card-main-wrapper[data-layout=\"card\"][data-card-url]');\n    return targetCard || getCardFromPoint(event.clientX, event.clientY);\n  }\n\n  function showPdpTransition(cardUrl) {\n    if (typeof window.dtShowPdpTransition === 'function') {\n      window.dtShowPdpTransition(cardUrl);\n    } else {\n      try {\n        if (window.sessionStorage && cardUrl.indexOf('/products/') === 0) {\n          sessionStorage.setItem('dt:pdpTransition', '1');\n        }\n      } catch (error) {}\n    }\n  }\n\n  function openCardPdp(card) {\n    const cardUrl = card && card.dataset.cardUrl;\n    if (!cardUrl) return;\n\n    showPdpTransition(cardUrl);\n    window.location.href = cardUrl;\n  }\n\n  document.addEventListener('pointerdown', function (event) {\n    if (!(event.target instanceof Element) || event.pointerType === 'mouse') return;\n\n    const card = getCardFromEvent(event);\n    if (!card || isCardInteractiveTarget(event.target)) {\n      touchCardTap = null;\n      return;\n    }\n\n    touchCardTap = {\n      card,\n      pointerId: event.pointerId,\n      startX: event.clientX,\n      startY: event.clientY\n    };\n  }, { passive: true });\n\n  document.addEventListener('pointerup', function (event) {\n    if (!touchCardTap || event.pointerId !== touchCardTap.pointerId) return;\n\n    const tap = touchCardTap;\n    touchCardTap = null;\n\n    if (!(event.target instanceof Element)) return;\n    if (getCardFromEvent(event) !== tap.card || isCardInteractiveTarget(event.target)) return;\n\n    const movedX = Math.abs(event.clientX - tap.startX);\n    const movedY = Math.abs(event.clientY - tap.startY);\n    if (movedX > 8 || movedY > 8) return;\n\n    event.preventDefault();\n    event.stopPropagation();\n    openCardPdp(tap.card);\n  }, { passive: false });\n\n  document.addEventListener('pointercancel', function (event) {\n    if (!touchCardTap || event.pointerId !== touchCardTap.pointerId) return;\n    touchCardTap = null;\n  }, { passive: true });\n\n  document.addEventListener('click', function (event) {\n    if (event.defaultPrevented || isModifiedClick(event)) return;\n    if (!(event.target instanceof Element)) return;\n\n    const card = getCardFromEvent(event);\n    if (!card || isCardInteractiveTarget(event.target)) return;\n\n    openCardPdp(card);\n  });\n})();\n\n\n// page scroll\n\n// page scroll\ndocument.addEventListener('DOMContentLoaded', function () {\n  function updateProgressBar() {\n    const progressBar = document.querySelector('.indicatorebar_inner');\n    if (progressBar) {\n      // Use requestAnimationFrame to decouple read/write and prevent layout thrashing\n      window.requestAnimationFrame(() => {\n        const totalHeight = document.body.scrollHeight - window.innerHeight;\n        const progress = (window.pageYOffset / totalHeight) * 100;\n        progressBar.style.width = progress + '%';\n      });\n    }\n  }\n\n  // Throttle scroll updates using requestAnimationFrame\n  let ticking = false;\n  window.addEventListener('scroll', function () {\n    if (!ticking) {\n      window.requestAnimationFrame(function () {\n        updateProgressBar();\n        ticking = false;\n      });\n      ticking = true;\n    }\n  }, { passive: true });\n\n  // Debounce resize updates\n  window.addEventListener('resize', debounce(updateProgressBar, 150));\n\n  // Initial call\n  updateProgressBar();\n});\n\n// page scrollbar width - Debounced to prevent layout thrashing on resize\nfunction updateScrollbarWidth() {\n  const scrollbar = window.innerWidth - document.documentElement.clientWidth;\n  document.documentElement.style.setProperty('--scrollbar-width', `${scrollbar}px`);\n}\n\nconst debouncedUpdateScrollbarWidth = debounce(updateScrollbarWidth, 200);\n\ndocument.addEventListener('DOMContentLoaded', updateScrollbarWidth);\nwindow.addEventListener('resize', debouncedUpdateScrollbarWidth);\n"],
  "mappings": "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",
  "names": ["details", "label", "mediaItem"]
}
