{
  "version": 3,
  "sources": ["/cdn/shop/t/19/assets/theme.js?av=20260512.01"],
  "sourcesContent": ["window.FoxTheme = window.FoxTheme || {};\nFoxTheme.config = {\n  hasLocalStorage: false,\n  mqlMobile: false,\n  mqlTablet: false,\n  mqlLaptop: false,\n  mqlSmallDesktop: false,\n  mediaQueryMobile: 'screen and (max-width: 767px)',\n  mediaQueryTablet: 'screen and (max-width: 1023px)',\n  mediaQueryLaptop: 'screen and (max-width: 1279px)',\n  mediaQuerySmallDesktop: 'screen and (max-width: 1535px)',\n  motionReduced: window.matchMedia('(prefers-reduced-motion: reduce)').matches,\n  isTouch: (() => {\n    const hasTouch = 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;\n    const hasPointerFine = window.matchMedia('(pointer: fine)').matches;\n    return hasTouch && !hasPointerFine;\n  })(),\n  isRTL: document.documentElement.getAttribute('dir') === 'rtl',\n};\nconsole.log(\n  '%c' + window.FoxTheme.settings.themeName + ' theme (v' + window.FoxTheme.settings.themeVersion + ') by Foxecom',\n  'font-size: 14px; color: #FF5C00;'\n);\n(function () {\n  // Detect browser has support local storage.\n  try {\n    const key = 'hyper:test';\n    window.localStorage.setItem(key, 'test');\n    window.localStorage.removeItem(key);\n    FoxTheme.config.hasLocalStorage = true;\n  } catch (err) {}\n\n  FoxTheme.DOMready = function (callback) {\n    document.readyState != 'loading' ? callback() : document.addEventListener('DOMContentLoaded', callback);\n  };\n\n  FoxTheme.a11y = {\n    trapFocusHandlers: {},\n    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    trapFocus: (container, elementToFocus = container) => {\n      var elements = FoxTheme.a11y.getFocusableElements(container);\n      var first = elements[0];\n      var last = elements[elements.length - 1];\n\n      FoxTheme.a11y.removeTrapFocus();\n\n      FoxTheme.a11y.trapFocusHandlers.focusin = (event) => {\n        if (event.target !== container && event.target !== last && event.target !== first) return;\n\n        document.addEventListener('keydown', FoxTheme.a11y.trapFocusHandlers.keydown);\n      };\n\n      FoxTheme.a11y.trapFocusHandlers.focusout = function () {\n        document.removeEventListener('keydown', FoxTheme.a11y.trapFocusHandlers.keydown);\n      };\n\n      FoxTheme.a11y.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', FoxTheme.a11y.trapFocusHandlers.focusout);\n      document.addEventListener('focusin', FoxTheme.a11y.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    removeTrapFocus: (elementToFocus = null) => {\n      document.removeEventListener('focusin', FoxTheme.a11y.trapFocusHandlers.focusin);\n      document.removeEventListener('focusout', FoxTheme.a11y.trapFocusHandlers.focusout);\n      document.removeEventListener('keydown', FoxTheme.a11y.trapFocusHandlers.keydown);\n\n      if (elementToFocus) elementToFocus.focus();\n    },\n  };\n\n  FoxTheme.utils = {\n    throttle: (callback) => {\n      let requestId = null,\n        lastArgs;\n      const later = (context) => () => {\n        requestId = null;\n        callback.apply(context, lastArgs);\n      };\n      const throttled = (...args) => {\n        lastArgs = args;\n        if (requestId === null) {\n          requestId = requestAnimationFrame(later(this));\n        }\n      };\n      throttled.cancel = () => {\n        cancelAnimationFrame(requestId);\n        requestId = null;\n      };\n      return throttled;\n    },\n    setScrollbarWidth: () => {\n      const scrollbarWidth = window.innerWidth - document.body.clientWidth;\n      scrollbarWidth > 0 && document.documentElement.style.setProperty('--scrollbar-width', `${scrollbarWidth}px`);\n    },\n    waitForEvent: (element, eventName) => {\n      return new Promise((resolve) => {\n        // Event handler that checks if the event target is the expected element\n        const eventHandler = (event) => {\n          if (event.target === element) {\n            element.removeEventListener(eventName, eventHandler); // Clean up listener\n            resolve(event); // Resolve the promise with the event\n          }\n        };\n\n        // Attach the event handler to the element\n        element.addEventListener(eventName, eventHandler);\n      });\n    },\n    queryDomNodes: (selectors = {}, context = document) => {\n      const domNodes = Object.entries(selectors).reduce((acc, [name, selector]) => {\n        const findOne = typeof selector === 'string';\n        const queryMethod = findOne ? 'querySelector' : 'querySelectorAll';\n        const sl = findOne ? selector : selector[0];\n\n        acc[name] = context && context[queryMethod](sl);\n        if (!findOne && acc[name]) {\n          acc[name] = [...acc[name]];\n        }\n        return acc;\n      }, {});\n      return domNodes;\n    },\n    addEventDelegate: ({ context = document.documentElement, event = 'click', selector, handler, capture = false }) => {\n      const listener = function (e) {\n        // loop parent nodes from the target to the delegation node\n        for (let target = e.target; target && target !== this; target = target.parentNode) {\n          if (target.matches(selector)) {\n            handler.call(target, e, target);\n            break;\n          }\n        }\n      };\n      context.addEventListener(event, listener, capture);\n      return () => {\n        context.removeEventListener(event, listener, capture);\n      };\n    },\n    getSectionId: (element) => {\n      if (element.hasAttribute('data-section-id')) {\n        return element.dataset.sectionId;\n      } else {\n        if (!element.classList.contains('shopify-section')) {\n          element = element.closest('.shopify-section');\n        }\n        return element.id.replace('shopify-section-', '');\n      }\n    },\n    debounce: (fn, wait) => {\n      let t;\n      return (...args) => {\n        clearTimeout(t);\n        t = setTimeout(() => fn.apply(this, args), wait);\n      };\n    },\n    fetchConfig: (type = 'json', method = 'POST') => {\n      return {\n        method,\n        headers: { 'Content-Type': 'application/json', Accept: `application/${type}` },\n      };\n    },\n    /**\n     * Store key-value pair with expiration time in localStorage\n     * Use storage instead of cookie to make it work properly on Safari IOS (in iframe).\n     */\n    setStorage(key, value, expiryInDays = null) {\n      if (!FoxTheme.config.hasLocalStorage) return;\n\n      const item = {\n        value: value,\n      };\n\n      if (expiryInDays !== null) {\n        const now = new Date();\n        item.expiry = now.getTime() + expiryInDays * 86400000;\n      }\n\n      window.localStorage.setItem(key, JSON.stringify(item));\n    },\n    getStorage(key) {\n      if (!FoxTheme.config.hasLocalStorage) return null;\n\n      const itemStr = window.localStorage.getItem(key);\n      // If the item doesn't exist, return null.\n      if (!itemStr) {\n        return null;\n      }\n      const item = JSON.parse(itemStr);\n      // Compare the expiry time of the item with the current time.\n      if (item.expiry && new Date().getTime() > item.expiry) {\n        // If the item has expired, remove it from storage and return null.\n        window.localStorage.removeItem(key);\n        return null;\n      }\n      return item.value;\n    },\n    postLink: (path, options) => {\n      options = options || {};\n      const method = options['method'] || 'post';\n      const params = options['parameters'] || {};\n\n      const form = document.createElement('form');\n      form.setAttribute('method', method);\n      form.setAttribute('action', path);\n\n      for (const key in params) {\n        for (const index in params[key]) {\n          for (const key2 in params[key][index]) {\n            const hiddenField = document.createElement('input');\n            hiddenField.setAttribute('type', 'hidden');\n            hiddenField.setAttribute('name', `${key}[${index}][${key2}]`);\n            hiddenField.setAttribute('value', params[key][index][key2]);\n            form.appendChild(hiddenField);\n          }\n        }\n      }\n      document.body.appendChild(form);\n      form.submit();\n      document.body.removeChild(form);\n    },\n    imageReady: (imageOrArray) => {\n      if (!imageOrArray) {\n        return Promise.resolve();\n      }\n      imageOrArray = imageOrArray instanceof Element ? [imageOrArray] : Array.from(imageOrArray);\n      return Promise.all(\n        imageOrArray.map((image) => {\n          return new Promise((resolve) => {\n            if ((image.tagName === 'IMG' && image.complete) || !image.offsetParent) {\n              resolve();\n            } else {\n              image.onload = () => resolve();\n            }\n          });\n        })\n      );\n    },\n    displayedMedia: (media) => {\n      return Array.from(media).find((item) => {\n        const style = window.getComputedStyle(item);\n        return style.display !== 'none';\n      });\n    },\n  };\n\n  FoxTheme.pubsub = {\n    PUB_SUB_EVENTS: {\n      cartUpdate: 'cart-update',\n      quantityUpdate: 'quantity-update',\n      quantityRules: 'quantity-rules',\n      quantityBoundries: 'quantity-boundries',\n      variantChange: 'variant-change',\n      cartError: 'cart-error',\n      facetUpdate: 'facet-update',\n      optionValueSelectionChange: 'option-value-selection-change',\n    },\n    subscribers: {},\n    subscribe: (eventName, callback) => {\n      if (FoxTheme.pubsub.subscribers[eventName] === undefined) {\n        FoxTheme.pubsub.subscribers[eventName] = [];\n      }\n\n      FoxTheme.pubsub.subscribers[eventName] = [...FoxTheme.pubsub.subscribers[eventName], callback];\n\n      return function unsubscribe() {\n        FoxTheme.pubsub.subscribers[eventName] = FoxTheme.pubsub.subscribers[eventName].filter((cb) => {\n          return cb !== callback;\n        });\n      };\n    },\n\n    publish: (eventName, data) => {\n      if (FoxTheme.pubsub.subscribers[eventName]) {\n        FoxTheme.pubsub.subscribers[eventName].forEach((callback) => {\n          callback(data);\n        });\n      }\n    },\n  };\n\n  FoxTheme.focusVisiblePolyfill = function () {\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\n  FoxTheme.Carousel = (function () {\n    class Carousel {\n      constructor(container, options, modules = null) {\n        this.container = container;\n        let defaultModules = [FoxTheme.Swiper.Navigation, FoxTheme.Swiper.Pagination, FoxTheme.Swiper.A11y];\n        if (modules) {\n          defaultModules = defaultModules.concat(modules);\n        }\n        this.options = {\n          modules: defaultModules,\n          ...options,\n        };\n      }\n\n      init() {\n        this.slider = new FoxTheme.Swiper.Swiper(this.container, this.options);\n      }\n    }\n    return Carousel;\n  })();\n\n  FoxTheme.delayUntilInteraction = (function () {\n    class ScriptLoader {\n      constructor(callback, delay = 5000) {\n        this.loadScriptTimer = setTimeout(callback, delay);\n        this.userInteractionEvents = [\n          'mouseover',\n          'mousemove',\n          'keydown',\n          'touchstart',\n          'touchend',\n          'touchmove',\n          'wheel',\n        ];\n\n        this.onScriptLoader = this.triggerScriptLoader.bind(this, callback);\n        this.userInteractionEvents.forEach((event) => {\n          window.addEventListener(event, this.onScriptLoader, {\n            passive: !0,\n          });\n        });\n      }\n\n      triggerScriptLoader(callback) {\n        callback();\n        clearTimeout(this.loadScriptTimer);\n        this.userInteractionEvents.forEach((event) => {\n          window.removeEventListener(event, this.onScriptLoader, {\n            passive: !0,\n          });\n        });\n      }\n    }\n\n    return ScriptLoader;\n  })();\n\n  FoxTheme.Currency = (function () {\n    const moneyFormat = '${{amount}}'; // eslint-disable-line camelcase\n\n    function formatMoney(cents, format) {\n      if (typeof cents === 'string') {\n        cents = cents.replace('.', '');\n      }\n      let value = '';\n      const placeholderRegex = /\\{\\{\\s*(\\w+)\\s*\\}\\}/;\n      const formatString = format || moneyFormat;\n\n      function formatWithDelimiters(number, precision, thousands, decimal) {\n        thousands = thousands || ',';\n        decimal = decimal || '.';\n\n        if (isNaN(number) || number === null) {\n          return 0;\n        }\n\n        number = (number / 100.0).toFixed(precision);\n\n        const parts = number.split('.');\n        const dollarsAmount = parts[0].replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, '$1' + thousands);\n        const centsAmount = parts[1] ? decimal + parts[1] : '';\n\n        return dollarsAmount + centsAmount;\n      }\n\n      switch (formatString.match(placeholderRegex)[1]) {\n        case 'amount':\n          value = formatWithDelimiters(cents, 2);\n          break;\n        case 'amount_no_decimals':\n          value = formatWithDelimiters(cents, 0);\n          break;\n        case 'amount_with_comma_separator':\n          value = formatWithDelimiters(cents, 2, '.', ',');\n          break;\n        case 'amount_no_decimals_with_comma_separator':\n          value = formatWithDelimiters(cents, 0, '.', ',');\n          break;\n        case 'amount_no_decimals_with_space_separator':\n          value = formatWithDelimiters(cents, 0, ' ');\n          break;\n        case 'amount_with_apostrophe_separator':\n          value = formatWithDelimiters(cents, 2, \"'\");\n          break;\n      }\n\n      return formatString.replace(placeholderRegex, value);\n    }\n\n    function getBaseUnit(variant) {\n      if (!variant) {\n        return;\n      }\n\n      if (!variant.unit_price_measurement || !variant.unit_price_measurement.reference_value) {\n        return;\n      }\n\n      return variant.unit_price_measurement.reference_value === 1\n        ? variant.unit_price_measurement.reference_unit\n        : variant.unit_price_measurement.reference_value + variant.unit_price_measurement.reference_unit;\n    }\n\n    return {\n      formatMoney: formatMoney,\n      getBaseUnit: getBaseUnit,\n    };\n  })();\n\n  new FoxTheme.delayUntilInteraction(() => {\n    document.body.removeAttribute('data-initializing');\n  });\n\n  FoxTheme.DOMready(FoxTheme.utils.setScrollbarWidth);\n  // window.addEventListener('resize', FoxTheme.utils.throttle(FoxTheme.utils.setScrollbarWidth));\n\n  const mql = window.matchMedia(FoxTheme.config.mediaQueryMobile);\n  FoxTheme.config.mqlMobile = mql.matches;\n  mql.onchange = (event) => {\n    if (event.matches) {\n      FoxTheme.config.mqlMobile = true;\n      document.dispatchEvent(new CustomEvent('matchMobile'));\n    } else {\n      FoxTheme.config.mqlMobile = false;\n      document.dispatchEvent(new CustomEvent('unmatchMobile'));\n    }\n  };\n\n  const mqlTablet = window.matchMedia(FoxTheme.config.mediaQueryTablet);\n  FoxTheme.config.mqlTablet = mqlTablet.matches;\n  mqlTablet.onchange = (event) => {\n    if (event.matches) {\n      FoxTheme.config.mqlTablet = true;\n      document.dispatchEvent(new CustomEvent('matchTablet'));\n    } else {\n      FoxTheme.config.mqlTablet = false;\n      document.dispatchEvent(new CustomEvent('unmatchTablet'));\n    }\n  };\n\n  const mqlLaptop = window.matchMedia(FoxTheme.config.mediaQueryLaptop);\n  FoxTheme.config.mqlLaptop = mqlLaptop.matches;\n  mqlLaptop.onchange = (event) => {\n    if (event.matches) {\n      FoxTheme.config.mqlLaptop = true;\n      document.dispatchEvent(new CustomEvent('matchLaptop'));\n    } else {\n      FoxTheme.config.mqlLaptop = false;\n      document.dispatchEvent(new CustomEvent('unmatchLaptop'));\n    }\n  };\n\n  const mqlSmallDesktop = window.matchMedia(FoxTheme.config.mediaQuerySmallDesktop);\n  FoxTheme.config.mqlSmallDesktop = mqlSmallDesktop.matches;\n  mqlSmallDesktop.onchange = (event) => {\n    if (event.matches) {\n      FoxTheme.config.mqlSmallDesktop = true;\n      document.dispatchEvent(new CustomEvent('matchSmallDesktop'));\n    } else {\n      FoxTheme.config.mqlSmallDesktop = false;\n      document.dispatchEvent(new CustomEvent('unmatchSmallDesktop'));\n    }\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  FoxTheme.focusVisiblePolyfill();\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('product-model').forEach((model) => {\n    if (model.modelViewerUI) model.modelViewerUI.pause();\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    if (!oldNode || !newContent) return;\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.style.display = 'none';\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}\nclass PageTransition extends HTMLElement {\n  constructor() {\n    super();\n\n    window.addEventListener('beforeunload', () => {\n      document.body.classList.add('page-loading');\n    });\n\n    window.addEventListener('DOMContentLoaded', () => {\n      FoxTheme.Motion.animate(this, { visibility: 'hidden', opacity: 0 }, { duration: 1 });\n\n      document.body.classList.add('page-loaded');\n      document.dispatchEvent(new CustomEvent('page:loaded'));\n    });\n\n    window.addEventListener('pageshow', (event) => {\n      if (event.persisted) {\n        document.body.classList.remove('page-loading');\n      }\n    });\n  }\n}\ncustomElements.define('page-transition', PageTransition);\n\nconst clearModalComponentCount = new WeakMap();\nclass ModalComponent extends HTMLElement {\n  constructor() {\n    super();\n    this.events = {\n      handleAfterHide: 'modal:handleAfterHide',\n      handleAfterShow: 'modal:handleAfterShow',\n    };\n\n    this.classes = {\n      show: 'modal-show',\n      showing: 'modal-showing',\n    };\n  }\n\n  static get observedAttributes() {\n    return ['id', 'open'];\n  }\n\n  get isLockingNeeded() {\n    return false;\n  }\n\n  get requiresBodyAppended() {\n    return false;\n  }\n\n  get controls() {\n    return Array.from(document.querySelectorAll(`[aria-controls=\"${this.id}\"]`));\n  }\n\n  get designMode() {\n    return this.hasAttribute('shopify-design-mode');\n  }\n\n  get open() {\n    return this.hasAttribute('open');\n  }\n\n  get overlay() {\n    return (this._overlay = this._overlay || this.querySelector('.fixed-overlay'));\n  }\n\n  get focusElement() {\n    const button = this.querySelector('button');\n    if (button) return button;\n\n    const focusableElements = FoxTheme.a11y.getFocusableElements(this);\n    return focusableElements[0] || this;\n  }\n\n  connectedCallback() {\n    // Initialize the AbortController\n    this.abortController = new AbortController();\n\n    // Add click event listeners to all controls\n    this.controls.forEach((button) => {\n      button.addEventListener('click', this.onButtonClick.bind(this), {\n        signal: this.abortController.signal,\n      });\n    });\n\n    // Add keyup event listener to document for handling the Escape key\n    document.addEventListener('keyup', (event) => event.code === 'Escape' && this.hide(), {\n      signal: this.abortController.signal,\n    });\n\n    // Additional setup for Shopify design mode\n    if (this.designMode && Shopify.designMode) {\n      const section = this.closest('.shopify-section');\n      section.addEventListener('shopify:section:select', (event) => this.show(null, !event.detail.load), {\n        signal: this.abortController.signal,\n      });\n      section.addEventListener('shopify:section:deselect', this.hide.bind(this), {\n        signal: this.abortController.signal,\n      });\n    }\n  }\n\n  disconnectedCallback() {\n    this.abortController?.abort();\n    Shopify.designMode && document.body.classList.remove(this.classes.show);\n  }\n\n  attributeChangedCallback(name, oldValue, newValue) {\n    switch (name) {\n      case 'open':\n        this.controls.forEach((button) => button.setAttribute('aria-expanded', newValue === null ? 'false' : 'true'));\n\n        if (oldValue === null && (newValue === '' || newValue === 'immediate')) {\n          this.hidden = false;\n          this.removeAttribute('inert');\n\n          this.parentElementBeforeAppend = null;\n          if (this.requiresBodyAppended && this.parentElement !== document.body) {\n            this.parentElementBeforeAppend = this.parentElement;\n            document.body.append(this);\n          }\n          const handleShowTransitionPromise = this.handleShowTransition(newValue !== 'immediate') || Promise.resolve();\n          handleShowTransitionPromise.then(() => {\n            this.handleAfterShow();\n            this.dispatchEvent(new CustomEvent(this.events.handleAfterShow, { bubbles: true }));\n          });\n        } else if (oldValue !== null && newValue === null) {\n          this.setAttribute('inert', '');\n\n          const handleHideTransitionPromise = this.handleHideTransition() || Promise.resolve();\n          handleHideTransitionPromise.then(() => {\n            this.handleAfterHide();\n\n            if (!this.hasAttribute('inert')) return;\n            if (this.parentElement === document.body && this.parentElementBeforeAppend) {\n              this.parentElementBeforeAppend.appendChild(this);\n              this.parentElementBeforeAppend = null;\n            }\n            this.dispatchEvent(new CustomEvent(this.events.handleAfterHide, { bubbles: true }));\n            this.hidden = true;\n          });\n        }\n        this.dispatchEvent(new CustomEvent('toggle', { bubbles: true }));\n\n        break;\n    }\n  }\n\n  onButtonClick(event) {\n    event.preventDefault();\n\n    if (this.open) {\n      this.hide();\n    } else {\n      this.show(event.currentTarget);\n    }\n  }\n\n  hide() {\n    if (!this.open) return;\n    this.prepareToHide();\n    this.removeAttribute('open');\n\n    return FoxTheme.utils.waitForEvent(this, this.events.handleAfterHide);\n  }\n\n  show(activeElement = null, animate = true) {\n    if (this.open) return;\n    this.prepareToShow();\n    this.activeElement = activeElement;\n    this.setAttribute('open', animate ? '' : 'immediate');\n\n    if (this.isLockingNeeded) {\n      document.body.classList.add(this.classes.showing);\n    }\n\n    return FoxTheme.utils.waitForEvent(this, this.events.handleAfterShow);\n  }\n\n  handleAfterHide() {\n    setTimeout(() => {\n      FoxTheme.a11y.removeTrapFocus(this.activeElement);\n      if (this.isLockingNeeded) {\n        const currentModalCount = clearModalComponentCount.get(ModalComponent) - 1;\n        clearModalComponentCount.set(ModalComponent, currentModalCount);\n        document.body.classList.toggle(this.classes.show, currentModalCount > 0);\n      }\n    });\n  }\n\n  handleAfterShow() {\n    FoxTheme.a11y.trapFocus(this, this.focusElement);\n    if (this.isLockingNeeded) {\n      const currentModalCount = clearModalComponentCount.get(ModalComponent) + 1;\n      clearModalComponentCount.set(ModalComponent, currentModalCount);\n\n      // Manage class changes on the document body\n      document.body.classList.remove(this.classes.showing);\n      document.body.classList.add(this.classes.show);\n    }\n  }\n\n  prepareToShow() {}\n\n  prepareToHide() {}\n\n  handleShowTransition() {\n    setTimeout(() => {\n      this.setAttribute('active', '');\n    }, 100);\n\n    return new Promise((resolve) => {\n      this.overlay.addEventListener(\n        'transitionend',\n        () => {\n          resolve();\n        },\n        { once: true }\n      );\n    });\n  }\n\n  handleHideTransition() {\n    this.removeAttribute('active');\n\n    return new Promise((resolve) => {\n      this.overlay.addEventListener(\n        'transitionend',\n        () => {\n          resolve();\n        },\n        { once: true }\n      );\n    });\n  }\n}\ncustomElements.define('modal-component', ModalComponent);\nclearModalComponentCount.set(ModalComponent, 0);\n\nclass BasicModal extends ModalComponent {\n  constructor() {\n    super();\n  }\n\n  get isLockingNeeded() {\n    return true;\n  }\n\n  get requiresBodyAppended() {\n    return true;\n  }\n}\ncustomElements.define('basic-modal', BasicModal);\n\nclass DrawerComponent extends ModalComponent {\n  constructor() {\n    super();\n    this.events = {\n      handleAfterHide: 'drawer:handleAfterHide',\n      handleAfterShow: 'drawer:handleAfterShow',\n    };\n  }\n  get isLockingNeeded() {\n    return true;\n  }\n  get requiresBodyAppended() {\n    return true;\n  }\n}\ncustomElements.define('drawer-component', DrawerComponent);\n\nclass SpotlightPick extends DrawerComponent {\n  constructor() {\n    super();\n  }\n\n  get requiresBodyAppended() {\n    return false;\n  }\n\n  get toggleButton() {\n    return this.controls.find((control) => control.hasAttribute('data-toggle-spotlight'));\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    if (this.toggleButton) {\n      this.toggleTeaser(this.toggleButton, false, 0);\n    }\n  }\n\n  onButtonClick(event) {\n    event.preventDefault();\n    const { target, currentTarget } = event;\n    if (target.hasAttribute('data-close-teaser')) {\n      this.toggleTeaser(this.toggleButton, true);\n      return;\n    }\n\n    super.onButtonClick(event);\n  }\n\n  toggleTeaser(toggleEl, shouldHide, hideDurationHours = 4) {\n    const currentTime = new Date().getTime();\n    const hideDuration = hideDurationHours * 60 * 60 * 1000;\n\n    if (shouldHide) {\n      toggleEl.classList.add('hidden');\n      localStorage.setItem('spotlight:teaserHidden', 'true');\n      localStorage.setItem('spotlight:teaserHideTime', currentTime);\n      localStorage.setItem('spotlight:teaserHideDuration', hideDuration);\n    } else {\n      const teaserHidden = localStorage.getItem('spotlight:teaserHidden');\n      const teaserHideTime = localStorage.getItem('spotlight:teaserHideTime');\n      const teaserHideDuration = localStorage.getItem('spotlight:teaserHideDuration');\n\n      if (teaserHidden === 'true' && teaserHideTime) {\n        const timeElapsed = currentTime - parseInt(teaserHideTime);\n\n        if (timeElapsed < parseInt(teaserHideDuration)) {\n          toggleEl.classList.add('hidden');\n        } else {\n          localStorage.removeItem('spotlight:teaserHidden');\n          localStorage.removeItem('spotlight:teaserHideTime');\n          localStorage.removeItem('spotlight:teaserHideDuration');\n          toggleEl.classList.remove('hidden');\n        }\n      } else {\n        toggleEl.classList.remove('hidden');\n      }\n    }\n  }\n}\ncustomElements.define('spotlight-pick', SpotlightPick);\n\nclass AccordionDetails extends HTMLDetailsElement {\n  constructor() {\n    super();\n    this.initAccordion();\n  }\n\n  initAccordion() {\n    this.isOpen = this.hasAttribute('open');\n    this.summaryElement = this.querySelector('summary');\n    this.contentElement = this.querySelector('summary + *');\n    this.setAttribute('aria-expanded', this.isOpen ? 'true' : 'false');\n\n    this.summaryElement.addEventListener('click', this.toggleAccordion.bind(this));\n\n    if (Shopify.designMode) {\n      this.designModeEventSetup();\n    }\n  }\n\n  static get observedAttributes() {\n    return ['open'];\n  }\n\n  get open() {\n    return this.isOpen;\n  }\n\n  set open(value) {\n    if (value !== this.isOpen) {\n      this.isOpen = value;\n\n      if (this.isConnected) {\n        this.animateAccordion(value);\n      } else {\n        if (value) {\n          this.setAttribute('open', '');\n        } else {\n          this.removeAttribute('open');\n        }\n      }\n\n      this.setAttribute('aria-expanded', value ? 'true' : 'false');\n      this.setAttribute('aria-controls', this.contentElement.id);\n\n      this.handleAfterToggle();\n    }\n  }\n\n  handleAfterToggle() {}\n\n  toggleAccordion(event) {\n    event.preventDefault();\n    this.open = !this.open;\n  }\n\n  close() {\n    this.isOpen = false;\n    this.animateAccordion(false);\n  }\n\n  async animateAccordion(isOpen) {\n    this.style.overflow = 'hidden';\n\n    if (isOpen) {\n      this.setAttribute('open', '');\n      this.parentElement.classList.add('active');\n\n      await FoxTheme.Motion.timeline([\n        [\n          this,\n          { height: [`${this.summaryElement.clientHeight + 1}px`, `${this.scrollHeight + 1}px`] },\n          { duration: 0.25, easing: 'ease' },\n        ],\n        [\n          this.contentElement,\n          { opacity: [0, 1], transform: ['translateY(10px)', 'translateY(0)'] },\n          { duration: 0.15, at: '<' },\n        ],\n      ]).finished;\n    } else {\n      await FoxTheme.Motion.timeline([\n        [this.contentElement, { opacity: 0 }, { duration: 0.15 }],\n        [\n          this,\n          { height: [`${this.clientHeight + 1}px`, `${this.summaryElement.clientHeight + 1}px`] },\n          { duration: 0.25, at: '<', easing: 'ease' },\n        ],\n      ]).finished;\n\n      this.removeAttribute('open');\n      this.parentElement.classList.remove('active');\n    }\n\n    this.style.height = 'auto';\n    this.style.overflow = 'visible';\n  }\n\n  designModeEventSetup() {\n    this.addEventListener('shopify:block:select', () => {\n      this.open = true;\n    });\n\n    this.addEventListener('shopify:block:deselect', () => {\n      this.open = false;\n    });\n  }\n\n  attributeChangedCallback(name, oldValue, newValue) {\n    if (name === 'open') {\n      this.setAttribute('aria-controls', this.contentElement.id);\n    }\n  }\n}\ncustomElements.define('accordion-details', AccordionDetails, { extends: 'details' });\n\nclass AccordionGroup extends AccordionDetails {\n  constructor() {\n    super();\n  }\n\n  handleAfterToggle() {\n    if (this.isOpen) {\n      const parent = this.closest('.accordion-parent') || document;\n      const siblingsAccordions = parent.querySelectorAll('details[is=\"accordion-group\"]');\n\n      siblingsAccordions.forEach((details) => {\n        if (details !== this) {\n          details.open = false;\n        }\n      });\n    }\n  }\n}\ncustomElements.define('accordion-group', AccordionGroup, { extends: 'details' });\n\nclass ProgressBar extends HTMLElement {\n  constructor() {\n    super();\n\n    if (this.hasAttribute('style')) return;\n\n    if (this.dataset.from) {\n      this.initProgress();\n    }\n\n    FoxTheme.Motion.inView(this, this.init.bind(this));\n  }\n\n  init() {\n    this.setPercentage(this.dataset.value, this.dataset.max);\n  }\n\n  initProgress() {\n    this.setPercentage(this.dataset.from, this.dataset.max);\n  }\n\n  setPercentage(val1, val2) {\n    this.style.setProperty('--percent', `${(parseInt(val1) / parseInt(val2)) * 100}%`);\n  }\n}\ncustomElements.define('progress-bar', ProgressBar);\n\nclass CartCount extends HTMLElement {\n  constructor() {\n    super();\n  }\n\n  cartUpdateUnsubscriber = undefined;\n\n  connectedCallback() {\n    this.cartUpdateUnsubscriber = FoxTheme.pubsub.subscribe(\n      FoxTheme.pubsub.PUB_SUB_EVENTS.cartUpdate,\n      this.onCartUpdate.bind(this)\n    );\n  }\n\n  disconnectedCallback() {\n    if (this.cartUpdateUnsubscriber) {\n      this.cartUpdateUnsubscriber();\n    }\n  }\n\n  get itemCount() {\n    return parseInt(this.innerText);\n  }\n\n  get type() {\n    return this.dataset.type;\n  }\n\n  onCartUpdate(event) {\n    if (event.cart.errors) return;\n\n    let count = event.cart.item_count > 99 ? '99+' : event.cart.item_count;\n\n    if (this.type === 'blank') {\n      count = `(${count})`;\n    }\n\n    if (this.classList.contains('cart-count--absolute')) {\n      if (event.cart.item_count > 99) {\n        this.innerHTML = `<span class=\"text-sm-extra\">${count}</span>`;\n        this.classList.add('cart-count--small-medium');\n      } else {\n        this.innerText = count;\n        this.classList.remove('cart-count--small-medium');\n      }\n    } else {\n      this.innerText = count;\n    }\n\n    this.hidden = this.itemCount === 0 || event.cart.item_count === 0;\n\n    const method = this.itemCount === 0 ? 'remove' : 'add';\n    document.documentElement.classList[method]('cart-has-items');\n  }\n}\ncustomElements.define('cart-count', CartCount);\n\nclass QuantityInput extends HTMLElement {\n  quantityUpdateUnsubscriber = undefined;\n  quantityBoundriesUnsubscriber = undefined;\n  quantityRulesUnsubscriber = undefined;\n\n  constructor() {\n    super();\n  }\n\n  get sectionId() {\n    return this.getAttribute('data-section-id');\n  }\n\n  get productId() {\n    return this.getAttribute('data-product-id');\n  }\n\n  get input() {\n    return this.querySelector('input');\n  }\n\n  get value() {\n    return this.input.value;\n  }\n\n  connectedCallback() {\n    this.abortController = new AbortController();\n\n    this.buttons = Array.from(this.querySelectorAll('button'));\n    this.changeEvent = new Event('change', { bubbles: true });\n\n    this.input.addEventListener('change', this.onInputChange.bind(this));\n    this.input.addEventListener('focus', () => setTimeout(() => this.input.select()));\n\n    this.buttons.forEach((button) => button.addEventListener('click', this.onButtonClick.bind(this)), {\n      signal: this.abortController.signal,\n    });\n\n    this.validateQtyRules();\n\n    this.quantityUpdateUnsubscriber = FoxTheme.pubsub.subscribe(\n      FoxTheme.pubsub.PUB_SUB_EVENTS.quantityUpdate,\n      this.validateQtyRules.bind(this)\n    );\n    this.quantityBoundriesUnsubscriber = FoxTheme.pubsub.subscribe(\n      FoxTheme.pubsub.PUB_SUB_EVENTS.quantityBoundries,\n      this.setQuantityBoundries.bind(this)\n    );\n    this.quantityRulesUnsubscriber = FoxTheme.pubsub.subscribe(\n      FoxTheme.pubsub.PUB_SUB_EVENTS.quantityRules,\n      this.updateQuantityRules.bind(this)\n    );\n  }\n\n  disconnectedCallback() {\n    this.abortController.abort();\n\n    if (this.quantityUpdateUnsubscriber) {\n      this.quantityUpdateUnsubscriber();\n    }\n    if (this.quantityBoundriesUnsubscriber) {\n      this.quantityBoundriesUnsubscriber();\n    }\n    if (this.quantityRulesUnsubscriber) {\n      this.quantityRulesUnsubscriber();\n    }\n  }\n\n  onButtonClick(event) {\n    event.preventDefault();\n    const previousValue = this.input.value;\n\n    if (event.currentTarget.name === 'plus') {\n      if (parseInt(this.input.getAttribute('data-min')) > parseInt(this.input.step) && this.input.value == 0) {\n        this.input.value = this.input.getAttribute('data-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.getAttribute('data-min') === previousValue && event.currentTarget.name === 'minus') {\n      this.input.value = parseInt(this.input.min);\n    }\n  }\n\n  onInputChange() {\n    if (this.input.value === '') {\n      this.input.value = parseInt(this.input.min);\n    }\n    this.validateQtyRules();\n  }\n\n  validateQtyRules() {\n    const value = parseInt(this.input.value);\n    if (this.input.min) {\n      const buttonMinus = this.querySelector('button[name=\"minus\"]');\n      if (buttonMinus) buttonMinus.toggleAttribute('disabled', parseInt(value) <= parseInt(this.input.min));\n    }\n    if (this.input.max) {\n      const buttonPlus = this.querySelector('button[name=\"plus\"]');\n      if (buttonPlus) buttonPlus.toggleAttribute('disabled', parseInt(value) >= parseInt(this.input.max));\n    }\n  }\n\n  updateQuantityRules({ data: { sectionId, productId, parsedHTML } }) {\n    if (sectionId !== this.sectionId || productId !== this.productId) return;\n    const selectors = ['.quantity__input', '.quantity__rules', '.quantity__label'];\n    const quantityFormUpdated = parsedHTML.getElementById(`QuantityForm-${sectionId}`);\n    const quantityForm = this.closest(`#QuantityForm-${sectionId}`);\n    for (let selector of selectors) {\n      const current = quantityForm.querySelector(selector);\n      const updated = quantityFormUpdated?.querySelector(selector);\n      if (!current || !updated) continue;\n\n      if (selector === '.quantity__input') {\n        const attributes = ['data-cart-quantity', 'data-min', 'data-max', 'step'];\n        for (let attribute of attributes) {\n          const valueUpdated = updated.getAttribute(attribute);\n          if (valueUpdated !== null) {\n            current.setAttribute(attribute, valueUpdated);\n          } else {\n            current.removeAttribute(attribute);\n          }\n        }\n      } else {\n        current.innerHTML = updated.innerHTML;\n      }\n    }\n  }\n\n  setQuantityBoundries({ data: { sectionId, productId } }) {\n    if (sectionId !== this.sectionId || productId !== this.productId) return;\n    const data = {\n      cartQuantity: this.input.hasAttribute('data-cart-quantity')\n        ? parseInt(this.input.getAttribute('data-cart-quantity'))\n        : 0,\n      min: this.input.hasAttribute('data-min') ? parseInt(this.input.getAttribute('data-min')) : 1,\n      max: this.input.hasAttribute('data-max') ? parseInt(this.input.getAttribute('data-max')) : null,\n      step: this.input.hasAttribute('step') ? parseInt(this.input.getAttribute('step')) : 1,\n    };\n\n    let min = data.min;\n    const max = data.max === null ? data.max : data.max - data.cartQuantity;\n    if (max !== null) min = Math.min(min, max);\n    if (data.cartQuantity >= data.min) min = Math.min(min, data.step);\n\n    this.input.min = min;\n\n    if (max) {\n      this.input.max = max;\n    } else {\n      this.input.removeAttribute('max');\n    }\n    this.input.value = min;\n\n    FoxTheme.pubsub.publish(FoxTheme.pubsub.PUB_SUB_EVENTS.quantityUpdate, undefined);\n  }\n}\ncustomElements.define('quantity-input', QuantityInput);\n\nclass QuantitySelector extends HTMLElement {\n  constructor() {\n    super();\n  }\n\n  connectedCallback() {\n    this.abortController = new AbortController();\n\n    this.input = this.querySelector('input');\n    this.buttons = Array.from(this.querySelectorAll('button'));\n    this.changeEvent = new Event('change', { bubbles: true });\n\n    this.buttons.forEach((button) => button.addEventListener('click', this.onButtonClick.bind(this)), {\n      signal: this.abortController.signal,\n    });\n  }\n\n  disconnectedCallback() {\n    this.abortController.abort();\n  }\n\n  onButtonClick(event) {\n    event.preventDefault();\n    const previousValue = this.input.value;\n\n    if (event.currentTarget.name === 'plus') {\n      this.input.quantity = this.input.quantity + 1;\n    } else {\n      this.input.quantity = this.input.quantity - 1;\n    }\n\n    if (previousValue !== this.input.value) this.input.dispatchEvent(this.changeEvent);\n  }\n}\ncustomElements.define('quantity-selector', QuantitySelector);\n\nconst onYouTubeApiLoaded = new Promise((resolve) => {\n  window.onYouTubeIframeAPIReady = () => resolve();\n});\nclass VideoElement extends HTMLElement {\n  constructor() {\n    super();\n\n    if (this.posterElement) {\n      this.posterElement.addEventListener('click', this.handlePosterClick.bind(this));\n    }\n\n    if (this.autoplay) {\n      FoxTheme.Motion.inView(this, () => {\n        if (!this.paused) {\n          this.play();\n        }\n\n        return () => {\n          this.pause();\n        };\n      });\n    }\n  }\n\n  get posterElement() {\n    return this.querySelector('[id^=\"DeferredPoster-\"]');\n  }\n\n  get controlledElement() {\n    return this.hasAttribute('aria-controls') ? document.getElementById(this.getAttribute('aria-controls')) : null;\n  }\n\n  get autoplay() {\n    return this.hasAttribute('autoplay');\n  }\n\n  get playing() {\n    return this.hasAttribute('playing');\n  }\n\n  get player() {\n    if (this.playerProxy) {\n      return this.playerProxy;\n    }\n\n    // Wrap initializePlayer to ensure it always returns a Promise or object (never null directly)\n    const playerInit = this.initializePlayer();\n    const playerPromise = playerInit instanceof Promise ? playerInit : Promise.resolve(playerInit);\n\n    // Create a proxy with a placeholder object to avoid \"Cannot create proxy with null\" error\n    const placeholder = {};\n    this.playerProxy = new Proxy(placeholder, {\n      get: (target, prop) => {\n        return async () => {\n          const resolvedPlayer = await playerPromise;\n          if (!resolvedPlayer) {\n            console.warn('VideoElement: player is null, cannot perform action:', prop);\n            return;\n          }\n          this.handlePlayerAction(resolvedPlayer, prop);\n        };\n      },\n    });\n\n    return this.playerProxy;\n  }\n\n  static get observedAttributes() {\n    return ['playing'];\n  }\n\n  handlePosterClick(event) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    if (this.playing) {\n      this.paused = true;\n      this.pause();\n    } else {\n      this.paused = false;\n      this.play();\n    }\n  }\n\n  play() {\n    if (!this.playing) {\n      const playerResult = this.player;\n      if (playerResult) {\n        playerResult.play();\n      }\n    }\n  }\n\n  pause() {\n    if (this.playing) {\n      const playerResult = this.player;\n      if (playerResult) {\n        playerResult.pause();\n      }\n    }\n  }\n\n  attributeChangedCallback(name, oldValue, newValue) {\n    if (name === 'playing') {\n      if (oldValue === null && newValue === '') {\n        return this.dispatchEvent(new CustomEvent('video:play', { bubbles: true }));\n      }\n\n      if (newValue === null) {\n        return this.dispatchEvent(new CustomEvent('video:pause', { bubbles: true }));\n      }\n    }\n  }\n\n  initializePlayer() {\n    if (this.hasAttribute('source')) {\n      this.setAttribute('loaded', '');\n      this.closest('.media')?.classList.remove('loading');\n\n      return new Promise(async (resolve) => {\n        const templateElement = this.querySelector('template');\n        if (templateElement) {\n          templateElement.replaceWith(templateElement.content.firstElementChild.cloneNode(true));\n        }\n        const muteVideo = this.hasAttribute('autoplay') || window.matchMedia('screen and (max-width: 1023px)').matches;\n        const script = document.createElement('script');\n        script.type = 'text/javascript';\n        if (this.getAttribute('source') === 'youtube') {\n          if (!window.YT || !window.YT.Player) {\n            script.src = 'https://www.youtube.com/iframe_api';\n            document.head.appendChild(script);\n            await new Promise((resolve2) => {\n              script.onload = resolve2;\n            });\n          }\n          await onYouTubeApiLoaded;\n          const iframe = this.querySelector('iframe');\n          if (!iframe) {\n            console.warn('VideoElement: iframe not found for YouTube player');\n            resolve(null);\n            return;\n          }\n          const player = new YT.Player(iframe, {\n            events: {\n              onReady: () => {\n                if (muteVideo) {\n                  player.mute();\n                }\n                resolve(player);\n              },\n              onStateChange: (event) => {\n                if (event.data === YT.PlayerState.PLAYING) {\n                  this.setAttribute('playing', '');\n                } else if (event.data === YT.PlayerState.ENDED || event.data === YT.PlayerState.PAUSED) {\n                  this.removeAttribute('playing');\n                }\n              },\n            },\n          });\n        }\n        if (this.getAttribute('source') === 'vimeo') {\n          if (!window.Vimeo || !window.Vimeo.Player) {\n            script.src = 'https://player.vimeo.com/api/player.js';\n            document.head.appendChild(script);\n            await new Promise((resolve2) => {\n              script.onload = resolve2;\n            });\n          }\n          const iframe = this.querySelector('iframe');\n          if (!iframe) {\n            console.warn('VideoElement: iframe not found for Vimeo player');\n            resolve(null);\n            return;\n          }\n          const player = new Vimeo.Player(iframe);\n          if (muteVideo) {\n            player.setMuted(true);\n          }\n          player.on('play', () => {\n            this.setAttribute('playing', '');\n          });\n          player.on('pause', () => this.removeAttribute('playing'));\n          player.on('ended', () => this.removeAttribute('playing'));\n          resolve(player);\n        }\n      });\n    } else {\n      const templateElement = this.querySelector('template');\n      if (!templateElement) {\n        console.warn('VideoElement: template not found');\n        return null;\n      }\n\n      const templateContent = templateElement.content.firstElementChild;\n      this.appendChild(templateContent.cloneNode(true));\n      this.setAttribute('loaded', '');\n      this.closest('.media')?.classList.remove('loading');\n\n      // Check if template contains iframe instead of video (edge case: iframe without source attribute)\n      const iframe = this.querySelector('iframe');\n      if (iframe) {\n        console.warn('VideoElement: iframe found but no source attribute set. Cannot initialize player.');\n        return null;\n      }\n\n      const player = this.querySelector('video');\n      if (!player) {\n        console.warn('VideoElement: video element not found after cloning template');\n        return null;\n      }\n\n      // Double check: ensure player is a valid video element\n      if (!(player instanceof HTMLVideoElement) || typeof player.addEventListener !== 'function') {\n        console.warn('VideoElement: player is not a valid HTMLVideoElement');\n        return null;\n      }\n\n      player.addEventListener('play', () => {\n        this.setAttribute('playing', '');\n        this.removeAttribute('suspended');\n      });\n      player.addEventListener('pause', () => {\n        if (!player.seeking && player.paused) {\n          this.removeAttribute('playing');\n        }\n      });\n      return player;\n    }\n  }\n\n  handlePlayerAction(target, prop) {\n    if (!target) {\n      console.warn('VideoElement: player target is null, cannot perform action:', prop);\n      return;\n    }\n\n    if (this.getAttribute('source') === 'youtube') {\n      prop === 'play' ? target.playVideo() : target.pauseVideo();\n    } else {\n      if (prop === 'play' && !this.hasAttribute('source')) {\n        target.play().catch((error) => {\n          if (error.name === 'NotAllowedError') {\n            this.setAttribute('suspended', '');\n            target.controls = true;\n            const replacementImageSrc = target.previousElementSibling?.currentSrc;\n            if (replacementImageSrc) {\n              target.poster = replacementImageSrc;\n            }\n          }\n        });\n      } else {\n        target[prop]();\n      }\n    }\n  }\n}\ncustomElements.define('video-element', VideoElement);\n\nclass LocalizationForm extends HTMLElement {\n  constructor() {\n    super();\n    this.elements = {\n      input: this.querySelector('input[name=\"locale_code\"], input[name=\"country_code\"]'),\n      button: this.querySelector('button'),\n      panel: this.querySelector('.disclosure-list'),\n    };\n\n    this.elements.panel.removeAttribute('hidden');\n    this.elements.button.addEventListener('click', this.openSelector.bind(this));\n    this.elements.button.addEventListener('focusout', this.closeSelector.bind(this));\n    this.addEventListener('keyup', this.onContainerKeyUp.bind(this));\n\n    this.querySelectorAll('a').forEach((item) => item.addEventListener('click', this.onItemClick.bind(this)));\n\n    this.handleDropdownPos();\n  }\n\n  handleDropdownPos() {\n    const offsetButton = this.elements.button.getBoundingClientRect().right;\n    if (window.innerWidth - offsetButton < 220) {\n      this.elements.button.nextElementSibling &&\n        this.elements.button.nextElementSibling.classList.add('disclosure-list__right');\n    }\n  }\n\n  hidePanel() {\n    this.elements.button.setAttribute('aria-expanded', 'false');\n    this.removeAttribute('open');\n  }\n\n  onContainerKeyUp(event) {\n    if (event.code.toUpperCase() !== 'ESCAPE') return;\n\n    this.hidePanel();\n    this.elements.button.focus();\n  }\n\n  onItemClick(event) {\n    event.preventDefault();\n    const form = this.querySelector('form');\n    this.elements.input.value = event.currentTarget.dataset.value;\n    if (form) form.submit();\n  }\n\n  openSelector() {\n    this.elements.button.focus();\n    this.toggleAttribute('open');\n    this.elements.button.setAttribute(\n      'aria-expanded',\n      (this.elements.button.getAttribute('aria-expanded') === 'false').toString()\n    );\n  }\n\n  closeSelector(event) {\n    const shouldClose =\n      (event.relatedTarget && event.relatedTarget.nodeName === 'BUTTON') ||\n      (event.relatedTarget && !event.relatedTarget.classList.contains('disclosure-list__option'));\n    if (event.relatedTarget === null || shouldClose) {\n      this.hidePanel(shouldClose);\n    }\n  }\n}\ncustomElements.define('localization-form', LocalizationForm);\n\nclass GridList extends HTMLElement {\n  constructor() {\n    super();\n\n    if (FoxTheme.config.motionReduced || this.hasAttribute('motion-reduced')) return;\n\n    this.hideGridItems();\n    FoxTheme.Motion.inView(this, this.showGridItems.bind(this), { margin: '0px 0px -50px 0px' });\n  }\n\n  get gridItems() {\n    return this.querySelectorAll('.f-column');\n  }\n\n  get visibleGridItems() {\n    return this.querySelectorAll('.f-column:not([style])');\n  }\n\n  hideGridItems() {\n    FoxTheme.Motion.animate(\n      this.gridItems,\n      { transform: 'translateY(3.5rem)', opacity: 0.01, visibility: 'hidden' },\n      { duration: 0 }\n    );\n  }\n\n  showGridItems() {\n    FoxTheme.Motion.animate(\n      this.gridItems,\n      { transform: ['translateY(3.5rem)', 'translateY(0)'], opacity: [0.01, 1], visibility: ['hidden', 'visible'] },\n      {\n        duration: 0.5,\n        delay: FoxTheme.config.motionReduced ? 0 : FoxTheme.Motion.stagger(0.1),\n        easing: [0, 0, 0.3, 1],\n      }\n    );\n  }\n\n  reShowVisibleGridItems() {\n    FoxTheme.Motion.animate(\n      this.visibleGridItems,\n      { transform: ['translateY(3.5rem)', 'translateY(0)'], opacity: [0.01, 1], visibility: ['hidden', 'visible'] },\n      { duration: 0.5, delay: FoxTheme.config.motionReduced ? 0 : FoxTheme.Motion.stagger(0.1), easing: [0, 0, 0.3, 1] }\n    );\n  }\n}\ncustomElements.define('grid-list', GridList);\n\nclass AnnouncementBar extends HTMLElement {\n  constructor() {\n    super();\n    this.announcementItemsWrapper = this.querySelector('.swiper-wrapper');\n\n    FoxTheme.Motion.inView(this, this.initializeCarousel.bind(this), { margin: '200px 0px 200px 0px' });\n  }\n\n  getNextSlideButton() {\n    return this.querySelector('.swiper-button-next');\n  }\n\n  getPrevSlideButton() {\n    return this.querySelector('.swiper-button-prev');\n  }\n\n  get getSlideItems() {\n    return (this._cachedSlideItems = this._cachedSlideItems || Array.from(this.announcementItemsWrapper.children));\n  }\n\n  isAutoplayEnabled() {\n    return this.hasAttribute('autoplay');\n  }\n\n  getAutoplaySpeed() {\n    return this.hasAttribute('autoplay') ? parseInt(this.getAttribute('autoplay-speed')) * 1000 : 5000;\n  }\n\n  initializeCarousel() {\n    if (this.getSlideItems.length > 1) {\n      this.carousel = new FoxTheme.Carousel(\n        this,\n        {\n          navigation: {\n            nextEl: this.getNextSlideButton(),\n            prevEl: this.getPrevSlideButton(),\n          },\n          loop: true,\n          autoplay: this.isAutoplayEnabled() ? { delay: this.getAutoplaySpeed(), pauseOnMouseEnter: true } : false,\n        },\n        [FoxTheme.Swiper.Autoplay]\n      );\n      this.carousel && this.carousel.init();\n\n      if (Shopify.designMode) {\n        this.addEventListener('shopify:block:select', (event) => {\n          this.carousel.slider.slideToLoop(this.getSlideItems.indexOf(event.target));\n        });\n      }\n    }\n  }\n}\ncustomElements.define('announcement-bar', AnnouncementBar);\n\nclass SelectElement extends HTMLElement {\n  constructor() {\n    super();\n\n    FoxTheme.Motion.inView(this, this.init.bind(this), { margin: '200px 0px 200px 0px' });\n\n    this.select = this.querySelector('select');\n\n    this.select && this.select.addEventListener('change', this.handleSelectChange.bind(this));\n  }\n\n  init() {\n    const style = window.getComputedStyle(this);\n    const value = this.select.options[this.select.selectedIndex].text;\n\n    const text = document.createElement('span');\n    text.style.fontFamily = style.fontFamily;\n    text.style.fontSize = style.fontSize;\n    text.style.fontWeight = style.fontWeight;\n    text.style.visibility = 'hidden';\n    text.style.position = 'absolute';\n    text.innerHTML = value;\n\n    document.body.appendChild(text);\n    const width = text.clientWidth;\n\n    this.style.setProperty('--width', `${width}px`);\n    text.remove();\n  }\n\n  handleSelectChange() {\n    this.init();\n  }\n}\ncustomElements.define('select-element', SelectElement);\n\nclass ProductRecentlyViewed extends HTMLElement {\n  constructor() {\n    super();\n\n    if (FoxTheme.config.hasLocalStorage) {\n      const productId = parseInt(this.dataset.productId);\n      const cookieName = 'hypertheme:recently-viewed';\n      const items = JSON.parse(window.localStorage.getItem(cookieName) || '[]');\n\n      if (items.includes(productId)) {\n        items.splice(items.indexOf(productId), 1);\n      }\n\n      items.unshift(productId);\n\n      window.localStorage.setItem(cookieName, JSON.stringify(items.slice(0, 20)));\n    }\n  }\n}\ncustomElements.define('product-recently-viewed', ProductRecentlyViewed);\n\n/**\n * MotionObserverManager - Shared IntersectionObserver for all motion-elements\n *\n * Benefits:\n * - Reduces memory usage: 1 observer instead of N observers (N = number of motion-elements)\n * - Better performance on Safari with many elements (60+ images)\n * - Prevents memory leaks from multiple observer instances\n *\n * Memory impact: ~98% reduction in observer overhead\n * Example: 60 elements \u00D7 50KB = 3MB \u2192 1 observer = 50KB\n */\nclass MotionObserverManager {\n  constructor() {\n    this.observer = null;\n    this.elements = new WeakMap(); // WeakMap ensures proper garbage collection\n    this.initialize();\n  }\n\n  initialize() {\n    if (FoxTheme.config.motionReduced) return;\n\n    this.observer = new IntersectionObserver(\n      (entries) => {\n        entries.forEach((entry) => {\n          if (entry.isIntersecting) {\n            const callback = this.elements.get(entry.target);\n            if (callback) {\n              callback();\n              this.unobserve(entry.target);\n            }\n          }\n        });\n      },\n      { rootMargin: '0px 0px -80px 0px' }\n    );\n  }\n\n  observe(element, callback) {\n    if (!this.observer) return;\n    this.elements.set(element, callback);\n    this.observer.observe(element);\n  }\n\n  unobserve(element) {\n    if (!this.observer) return;\n    this.observer.unobserve(element);\n    this.elements.delete(element);\n  }\n\n  disconnect() {\n    if (this.observer) {\n      this.observer.disconnect();\n      this.elements = new WeakMap();\n    }\n  }\n}\n\n// Create singleton instance\nFoxTheme.MotionObserver = new MotionObserverManager();\n\n/**\n * MotionElement - Optimized custom element for animations\n *\n * Key optimizations:\n * - Shared IntersectionObserver via MotionObserverManager\n * - Event-based parent waiting (no setTimeout polling)\n * - Proper cleanup in disconnectedCallback\n * - Cached media elements (no repeated DOM queries)\n * - AbortController pattern for cancellable animations\n *\n * Fixes Safari crash issues with 60+ product images\n */\nclass MotionElement extends HTMLElement {\n  constructor() {\n    super();\n\n    // Instance properties for cleanup tracking\n    this._parentCheckTimer = null;\n    this._abortController = null;\n    this._cachedMediaElements = null;\n    this._isObserving = false;\n    this._parentEventHandler = null;\n  }\n\n  connectedCallback() {\n    if (FoxTheme.config.motionReduced) return;\n\n    const parentMotionElement = this.closest('motion-element:not(:scope)');\n\n    if (parentMotionElement) {\n      this.waitForParent(parentMotionElement);\n    } else {\n      this.preInitialize();\n      this.setupObserver();\n    }\n  }\n\n  disconnectedCallback() {\n    this.cleanup();\n  }\n\n  cleanup() {\n    // Clear parent check timer\n    if (this._parentCheckTimer) {\n      clearTimeout(this._parentCheckTimer);\n      this._parentCheckTimer = null;\n    }\n\n    // Remove parent event listener\n    if (this._parentEventHandler) {\n      const parent = this.closest('motion-element:not(:scope)');\n      if (parent) {\n        parent.removeEventListener('motion-initialized', this._parentEventHandler);\n      }\n      this._parentEventHandler = null;\n    }\n\n    // Unobserve from IntersectionObserver\n    if (this._isObserving) {\n      FoxTheme.MotionObserver.unobserve(this);\n      this._isObserving = false;\n    }\n\n    // Abort any pending animations\n    if (this._abortController) {\n      this._abortController.abort();\n      this._abortController = null;\n    }\n\n    // Clear cached elements\n    this._cachedMediaElements = null;\n\n    // Remove initialized attribute\n    this.removeAttribute('data-initialized');\n  }\n\n  waitForParent(parentMotionElement) {\n    // Use event-based approach instead of polling for better performance\n    if (parentMotionElement.hasAttribute('data-initialized')) {\n      this.preInitialize();\n      this.setupObserver();\n    } else {\n      // Listen for parent initialization event\n      this._parentEventHandler = () => {\n        this.preInitialize();\n        this.setupObserver();\n      };\n      parentMotionElement.addEventListener('motion-initialized', this._parentEventHandler, { once: true });\n\n      // Fallback timeout in case event doesn't fire (max 5 seconds to prevent infinite waiting)\n      this._parentCheckTimer = setTimeout(() => {\n        if (!this.hasAttribute('data-initialized')) {\n          this.preInitialize();\n          this.setupObserver();\n        }\n      }, 5000);\n    }\n  }\n\n  setupObserver() {\n    this._isObserving = true;\n    FoxTheme.MotionObserver.observe(this, async () => {\n      try {\n        if (!this.isInstant && this.mediaElements.length > 0) {\n          await FoxTheme.utils.imageReady(this.mediaElements);\n        }\n        await this.initialize();\n      } catch (error) {\n        // Silently handle errors from disconnected elements\n        if (this.isConnected) {\n          console.warn('Motion animation error:', error);\n        }\n      }\n    });\n  }\n\n  get isHold() {\n    return this.hasAttribute('hold');\n  }\n\n  get isInstant() {\n    return this.hasAttribute('data-instantly');\n  }\n\n  get mediaElements() {\n    // Cache media elements to avoid repeated DOM queries (performance optimization)\n    if (!this._cachedMediaElements) {\n      this._cachedMediaElements = Array.from(this.querySelectorAll('img, iframe, svg'));\n    }\n    return this._cachedMediaElements;\n  }\n\n  get animationType() {\n    return this.dataset.motion || 'fade-up';\n  }\n\n  get animationDelay() {\n    return parseInt(this.dataset.motionDelay || 0) / 1000;\n  }\n\n  preInitialize() {\n    if (this.isHold) return;\n\n    // Create abort controller for animations\n    this._abortController = new AbortController();\n\n    switch (this.animationType) {\n      case 'fade-in':\n        this.style.visibility = 'hidden';\n        FoxTheme.Motion.animate(this, { opacity: 0.01 }, { duration: 0 });\n        break;\n\n      case 'fade-up':\n        this.style.visibility = 'hidden';\n        FoxTheme.Motion.animate(this, { transform: 'translateY(2.5rem)', opacity: 0.01 }, { duration: 0 });\n        break;\n\n      case 'zoom-in':\n        FoxTheme.Motion.animate(this, { transform: 'scale(0.8)' }, { duration: 0 });\n        break;\n\n      case 'zoom-in-lg':\n        FoxTheme.Motion.animate(this, { transform: 'scale(0)' }, { duration: 0 });\n        break;\n\n      case 'zoom-out':\n        FoxTheme.Motion.animate(this, { transform: 'scale(1.08)' }, { duration: 0 });\n        break;\n\n      case 'zoom-out-sm':\n        FoxTheme.Motion.animate(this, { transform: 'scale(1.03)' }, { duration: 0 });\n        break;\n    }\n  }\n\n  async initialize() {\n    if (this.isHold) return;\n\n    // Check if element is still connected before animating\n    if (!this.isConnected) return;\n\n    this.setAttribute('data-initialized', 'true');\n\n    // Dispatch custom event for child elements to listen\n    this.dispatchEvent(new CustomEvent('motion-initialized', { bubbles: false }));\n\n    try {\n      switch (this.animationType) {\n        case 'fade-in':\n          this.style.visibility = 'visible';\n          await FoxTheme.Motion.animate(\n            this,\n            { opacity: 1 },\n            { duration: 1.5, delay: this.animationDelay, easing: [0, 0, 0.3, 1] }\n          ).finished;\n          break;\n\n        case 'fade-up':\n          this.style.visibility = 'visible';\n          await FoxTheme.Motion.animate(\n            this,\n            { transform: 'translateY(0)', opacity: 1 },\n            { duration: 0.5, delay: this.animationDelay, easing: [0, 0, 0.3, 1] }\n          ).finished;\n          break;\n\n        case 'zoom-in':\n          await FoxTheme.Motion.animate(\n            this,\n            { transform: 'scale(1)' },\n            { duration: 1.3, delay: this.animationDelay, easing: [0, 0, 0.3, 1] }\n          ).finished;\n          break;\n\n        case 'zoom-in-lg':\n          await FoxTheme.Motion.animate(\n            this,\n            { transform: 'scale(1)' },\n            { duration: 0.5, delay: this.animationDelay, easing: [0, 0, 0.3, 1] }\n          ).finished;\n          break;\n\n        case 'zoom-out':\n          await FoxTheme.Motion.animate(\n            this,\n            { transform: 'scale(1)' },\n            { duration: 1.5, delay: this.animationDelay, easing: [0, 0, 0.3, 1] }\n          ).finished;\n          break;\n\n        case 'zoom-out-sm':\n          await FoxTheme.Motion.animate(\n            this,\n            { transform: 'scale(1)' },\n            { duration: 1, delay: this.animationDelay, easing: [0, 0, 0.3, 1] }\n          ).finished;\n          break;\n      }\n    } catch (error) {\n      // Animation was cancelled or element was removed\n      if (error.name !== 'AbortError' && this.isConnected) {\n        console.warn('Motion animation error:', error);\n      }\n    }\n  }\n\n  async resetAnimation(duration) {\n    if (!this.isConnected) return;\n\n    try {\n      switch (this.animationType) {\n        case 'fade-in':\n          await FoxTheme.Motion.animate(\n            this,\n            { opacity: 0 },\n            {\n              duration: duration ? duration : 1.5,\n              delay: this.animationDelay,\n              easing: duration ? 'none' : [0, 0, 0.3, 1],\n            }\n          ).finished;\n          break;\n\n        case 'fade-up':\n          await FoxTheme.Motion.animate(\n            this,\n            { transform: 'translateY(2.5rem)', opacity: 0 },\n            {\n              duration: duration ? duration : 0.5,\n              delay: this.animationDelay,\n              easing: duration ? 'none' : [0, 0, 0.3, 1],\n            }\n          ).finished;\n          break;\n\n        case 'zoom-in':\n        case 'zoom-in-lg':\n        case 'zoom-out':\n        case 'zoom-out-sm':\n          await FoxTheme.Motion.animate(\n            this,\n            { transform: 'scale(0)' },\n            {\n              duration: duration ? duration : 1.3,\n              delay: this.animationDelay,\n              easing: duration ? 'none' : [0, 0, 0.3, 1],\n            }\n          ).finished;\n          break;\n      }\n    } catch (error) {\n      if (error.name !== 'AbortError' && this.isConnected) {\n        console.warn('Motion reset error:', error);\n      }\n    }\n  }\n\n  refreshAnimation() {\n    this.removeAttribute('hold');\n    this.preInitialize();\n    setTimeout(() => {\n      if (this.isConnected) {\n        this.initialize();\n      }\n    }, 50); // Delay a bit to make animation re init properly.\n  }\n}\ncustomElements.define('motion-element', MotionElement);\n\nclass TabsComponent extends HTMLElement {\n  constructor() {\n    super();\n    this.selectors = {\n      tabHeader: '[role=\"tablist\"]',\n      tabPanels: ['[role=\"tabpanel\"]'],\n      tabNavs: ['[role=\"tab\"]'],\n      tabNav: '.tabs__nav-js',\n    };\n    this.domNodes = FoxTheme.utils.queryDomNodes(this.selectors, this);\n\n    this.selectedIndex = 0;\n    this.selectedTab = this.domNodes.tabPanels[this.selectedIndex];\n    this.scrollToActiveTab = this.dataset.scrollToActiveTab === 'true';\n    this.scrollOffset = 20;\n    this.headerEl = document.querySelector('.header-section header[is=\"sticky-header\"]');\n\n    this.init();\n    this.setActiveTab(0);\n\n    this.tabChange = new CustomEvent('tabChange', {\n      bubbles: true,\n      detail: { selectedTab: this.selectedTab },\n    });\n  }\n\n  connectedCallback() {\n    this.setActiveTab(0);\n  }\n\n  init = () => {\n    this.buttons.forEach((tab) => {\n      tab.addEventListener('click', this.onTabClick.bind(this));\n    });\n    this.domNodes.tabHeader && this.domNodes.tabHeader.addEventListener('keydown', this.handleKeyDown.bind(this));\n    this.setAccessible();\n  };\n\n  static get observedAttributes() {\n    return ['data-selected'];\n  }\n\n  get buttons() {\n    return (this._buttons = this._buttons || Array.from(this.domNodes.tabNavs));\n  }\n\n  getHeaderHeight() {\n    let headerHeight = 0;\n\n    if (this.headerEl) {\n      const height = Math.round(this.headerEl.offsetHeight);\n      if (this.headerEl.isAlwaysSticky) {\n        headerHeight = height;\n      } else {\n        const isSticky = document.body.classList.contains(this.headerEl.classes.pinned);\n\n        if (window.scrollY > this.offsetTop - this.scrollOffset) {\n          headerHeight = height;\n        }\n\n        if (isSticky && window.scrollY >= this.offsetTop - this.scrollOffset - height) {\n          headerHeight = height;\n        }\n      }\n    }\n\n    return headerHeight;\n  }\n\n  scrollToTop() {\n    let offsetTop = this.offsetTop - this.scrollOffset - this.getHeaderHeight();\n    window.scrollTo({ top: offsetTop, behavior: 'smooth' });\n  }\n\n  onTabClick(evt) {\n    evt.preventDefault();\n    const currentTab = evt.currentTarget;\n    const index = currentTab ? Number(currentTab.dataset.index) : 0;\n    this.setActiveTab(index);\n\n    if (this.scrollToActiveTab) {\n      this.scrollToTop();\n    }\n  }\n\n  setActiveTab = (tabIndex) => {\n    const { tabNavs, tabPanels } = this.domNodes;\n    if (tabIndex !== -1) {\n      const newHeader = tabNavs && tabNavs[tabIndex];\n      const newTab = tabPanels && tabPanels[tabIndex];\n      this.setAttribute('data-selected', tabIndex);\n\n      tabNavs.forEach((nav) => nav.setAttribute('aria-selected', false));\n\n      newHeader && newHeader.setAttribute('aria-selected', true);\n\n      this.selectedIndex = tabIndex;\n      this.selectedTab = newTab;\n\n      this.dispatchEvent(\n        new CustomEvent('tabChange', {\n          bubbles: true,\n          detail: { selectedIndex: tabIndex, selectedTab: newTab },\n        })\n      );\n    }\n  };\n\n  setAccessible() {\n    const { tabNavs, tabPanels } = this.domNodes;\n    tabNavs.forEach((tab, index) => {\n      if (tab.id) tabPanels[index].setAttribute('aria-labelledby', tab.id);\n      tab.setAttribute('aria-selected', index === 0);\n      tab.setAttribute('data-index', index);\n      if (index !== 0) {\n        // tab.setAttribute('tabindex', -1);\n      }\n    });\n    tabPanels.forEach((panel, index) => {\n      if (panel.id) tabNavs[index].setAttribute('aria-controls', panel.id);\n      panel.setAttribute('tabindex', 0);\n    });\n  }\n\n  handleKeyDown(e) {\n    const { tabNavs } = this.domNodes;\n    if (e.keyCode === 39 || e.keyCode === 37) {\n      tabNavs[this.selectedIndex].setAttribute('tabindex', -1);\n      if (e.keyCode === 39) {\n        this.selectedIndex++;\n        // If we're at the end, go to the start.\n        if (this.selectedIndex >= tabNavs.length) {\n          this.selectedIndex = 0;\n        }\n        // Move left.\n      } else if (e.keyCode === 37) {\n        this.selectedIndex--;\n        // If we're at the start, move to the end.\n        if (this.selectedIndex < 0) {\n          this.selectedIndex = tabNavs.length - 1;\n        }\n      }\n\n      tabNavs[this.selectedIndex].setAttribute('tabindex', 0);\n      tabNavs[this.selectedIndex].focus();\n    }\n  }\n\n  getSelected() {\n    return {\n      index: this.selectedIndex,\n      element: this.selectedTab,\n    };\n  }\n\n  attributeChangedCallback(name, oldValue, newValue) {\n    if (name === 'data-selected' && oldValue !== null && oldValue !== newValue) {\n      const fromButton = this.buttons[parseInt(oldValue)];\n      const toButton = this.buttons[parseInt(newValue)];\n      this.transition(\n        document.getElementById(fromButton.getAttribute('aria-controls')),\n        document.getElementById(toButton.getAttribute('aria-controls'))\n      );\n\n      this.scrollToActiveButton(toButton);\n    }\n  }\n\n  scrollToActiveButton(toButton) {\n    if (!this.domNodes.tabNav) return;\n    const containerGap = 15;\n    const scrollRect = toButton.getBoundingClientRect();\n    const boxRect = this.domNodes.tabNav.getBoundingClientRect();\n    const scrollLeft = this.domNodes.tabNav.scrollLeft;\n    const scrollOffset = scrollRect.x + scrollLeft - boxRect.x - containerGap;\n\n    this.domNodes.tabNav.scrollTo({\n      left: scrollOffset,\n      behavior: 'smooth',\n    });\n  }\n\n  async transition(fromPanel, toPanel) {\n    await FoxTheme.Motion.animate(\n      fromPanel,\n      { transform: ['translateY(0)', 'translateY(2rem)'], opacity: [1, 0] },\n      { duration: 0.3 }\n    ).finished;\n\n    fromPanel.hidden = true;\n    toPanel.hidden = false;\n\n    FoxTheme.Motion.animate(\n      toPanel,\n      { transform: ['translateY(2rem)', 'translateY(0)'], opacity: [0, 1] },\n      { duration: 0.3 }\n    ).finished;\n\n    toPanel.querySelector('grid-list') && toPanel.querySelector('grid-list').showGridItems();\n  }\n}\ncustomElements.define('tabs-component', TabsComponent);\n/*\nUncomment when use\nclass TabSelector extends HTMLElement {\n  constructor() {\n    super();\n\n    this.tabs = this.closest('tabs-component');\n\n    this.querySelector('select').addEventListener('change', (e) => {\n      this.tabs.setActiveTab(e.target.value);\n    });\n\n    this.tabs.addEventListener('tabChange', this.onTabChange.bind(this));\n  }\n\n  onTabChange(event) {\n    this.querySelector('select').value = event.detail.selectedIndex;\n  }\n}\ncustomElements.define('tab-selector', TabSelector);\n*/\nclass Parallax extends HTMLElement {\n  get parallax() {\n    return this.dataset.parallax ? parseFloat(this.dataset.parallax) : false;\n  }\n\n  get parallaxDirection() {\n    return this.dataset.parallaxDirection || 'vertical';\n  }\n\n  get parallaxMediaElements() {\n    return Array.from(this.querySelectorAll('img, video, iframe, svg, video-element'));\n  }\n\n  connectedCallback() {\n    if (this.shouldInitializeParallax()) {\n      this.setupParallax();\n    }\n  }\n\n  shouldInitializeParallax() {\n    return !FoxTheme.config.motionReduced && this.parallax;\n  }\n\n  setupParallax() {\n    const parallaxScale = 1 + this.parallax;\n    const parallaxTranslate = (this.parallax * 100) / (1 + this.parallax);\n\n    let parallaxTransformProperties = {};\n\n    if (this.parallaxDirection === 'vertical') {\n      parallaxTransformProperties = {\n        transform: [\n          `scale(${parallaxScale}) translateY(0)`,\n          `scale(${parallaxScale}) translateY(${parallaxTranslate}%)`,\n        ],\n        transformOrigin: ['bottom', 'bottom'],\n      };\n    } else if (this.parallaxDirection === 'horizontal') {\n      parallaxTransformProperties = {\n        transform: [\n          `scale(${parallaxScale}) translateX(0)`,\n          `scale(${parallaxScale}) translateX(${parallaxTranslate}%)`,\n        ],\n        transformOrigin: ['right', 'right'],\n      };\n    } else {\n      parallaxTransformProperties = {\n        transform: [`scale(1)`, `scale(${parallaxScale})`],\n        transformOrigin: ['center', 'center'],\n      };\n    }\n\n    FoxTheme.Motion.scroll(\n      FoxTheme.Motion.animate(this.parallaxMediaElements, parallaxTransformProperties, { easing: 'linear' }),\n      {\n        target: this,\n        offset: ['start end', 'end start'],\n      }\n    );\n  }\n}\ncustomElements.define('parallax-element', Parallax);\n\nclass ProductForm extends HTMLFormElement {\n  constructor() {\n    super();\n\n    this.productIdInput = this.querySelector('[name=id]');\n    this.productIdInput.disabled = false;\n    this.addEventListener('submit', this.handleFormSubmit);\n  }\n\n  get cartDrawerElement() {\n    return document.querySelector('cart-drawer');\n  }\n\n  get submitButtonElement() {\n    return (this._submitButtonElement = this._submitButtonElement || this.querySelector('[type=\"submit\"]'));\n  }\n\n  get isHideErrors() {\n    return this.dataset.hideErrors === 'true';\n  }\n\n  handleFormSubmit = (event) => {\n    if (FoxTheme.settings.cartType === 'page') return;\n\n    event.preventDefault();\n    if (this.submitButtonElement.getAttribute('aria-disabled') === 'true') return;\n    this.lastSubmittedElement = event.submitter || event.currentTarget;\n\n    this.displayFormErrors();\n\n    let sectionsToBundle = [];\n    document.documentElement.dispatchEvent(\n      new CustomEvent('cart:grouped-sections', { bubbles: true, detail: { sections: sectionsToBundle } })\n    );\n\n    const config = FoxTheme.utils.fetchConfig('javascript');\n    config.headers['X-Requested-With'] = 'XMLHttpRequest';\n    delete config.headers['Content-Type'];\n\n    this.formData = new FormData(this);\n    this.formData.append('sections', sectionsToBundle);\n    this.formData.append('sections_url', window.location.pathname);\n\n    config.body = this.formData;\n\n    this.submitButtonElement.setAttribute('aria-disabled', 'true');\n    this.submitButtonElement.classList.add('btn--loading');\n\n    this.handleFormSubmission(config);\n  };\n\n  displayFormErrors = (errorMessage = false) => {\n    if (this.isHideErrors) return;\n\n    this.formErrorMessage = this.formErrorMessage || this.querySelector('.product-form__error-message');\n    if (!this.formErrorMessage) {\n      if (errorMessage !== false) {\n        alert(errorMessage);\n      }\n    } else {\n      this.formErrorMessage.toggleAttribute('hidden', !errorMessage);\n      if (errorMessage !== false) {\n        this.formErrorMessage.innerText = errorMessage;\n      }\n    }\n  };\n\n  resetFormState() {\n    this.hasError = false;\n    this.submitButtonElement.removeAttribute('aria-disabled');\n    this.displayFormErrors();\n  }\n\n  handleFormSubmission = (config) => {\n    fetch(`${FoxTheme.routes.cart_add_url}`, config)\n      .then((response) => response.json())\n      .then(async (parsedState) => {\n        if (parsedState.status) {\n          this.handleCartError(parsedState);\n          const cartJsonSub = await (\n            await fetch(`${FoxTheme.routes.cart_url}`, { ...FoxTheme.utils.fetchConfig('json', 'GET') })\n          ).json();\n\n          this.updateCartState(cartJsonSub);\n          document.dispatchEvent(\n            new CustomEvent('cart:refresh', {\n              bubbles: true,\n              detail: {\n                open: true,\n              },\n            })\n          );\n          return;\n        }\n\n        const cartJson = await (\n          await fetch(`${FoxTheme.routes.cart_url}`, { ...FoxTheme.utils.fetchConfig('json', 'GET') })\n        ).json();\n        cartJson['sections'] = parsedState['sections'];\n\n        this.updateCartState(cartJson);\n        this.dispatchProductAddedEvent(parsedState);\n\n        this.showCartDrawer();\n      })\n      .catch((error) => {\n        console.log(error);\n      })\n      .finally(() => {\n        this.submitButtonElement.classList.remove('btn--loading');\n        // if (!this.hasError) {\n        // }\n        this.submitButtonElement.removeAttribute('aria-disabled'); // Move out of hasError check to make it working with sticky ATC minimalist.\n      });\n  };\n\n  handleCartError = (parsedState) => {\n    FoxTheme.pubsub.publish(FoxTheme.pubsub.PUB_SUB_EVENTS.cartError, {\n      source: 'product-form',\n      productVariantId: this.formData.get('id'),\n      errors: parsedState.errors || parsedState.description,\n      message: parsedState.message,\n    });\n    this.displayFormErrors(parsedState.description);\n    document.dispatchEvent(\n      new CustomEvent('product-ajax:error', {\n        detail: {\n          errorMessage: parsedState.description,\n        },\n      })\n    );\n    this.hasError = true;\n  };\n\n  updateCartState = (cartJson) => {\n    FoxTheme.pubsub.publish(FoxTheme.pubsub.PUB_SUB_EVENTS.cartUpdate, { cart: cartJson });\n  };\n\n  dispatchProductAddedEvent = (parsedState) => {\n    document.dispatchEvent(\n      new CustomEvent('product-ajax:added', {\n        detail: {\n          product: parsedState,\n        },\n      })\n    );\n  };\n\n  showCartDrawer = () => {\n    const quickViewModal = this.closest('quick-view-modal');\n    if (quickViewModal) {\n      if (this.cartDrawerElement && !this.cartDrawerElement.open) {\n        document.body.addEventListener(\n          quickViewModal.events.handleAfterHide,\n          () => {\n            setTimeout(() => {\n              this.cartDrawerElement.show(this.lastSubmittedElement);\n            });\n          },\n          { once: true }\n        );\n      }\n\n      quickViewModal.hide(true);\n    } else {\n      this.cartDrawerElement && this.cartDrawerElement.show(this.lastSubmittedElement);\n    }\n  };\n}\ncustomElements.define('product-form', ProductForm, { extends: 'form' });\n\nclass NewsletterForm extends HTMLFormElement {\n  constructor() {\n    super();\n\n    this.selectors = {\n      subscribedMessage: '[id*=Newsletter-error-subscribed]',\n      modal: '[id*=NewsletterAlertModal-]',\n    };\n\n    this.init();\n  }\n\n  /**\n   * Show message when user re-subscribe with exists email.\n   */\n  init() {\n    const liveUrl = window.location.href;\n    const result = liveUrl.includes('form_type=customer');\n    const inputVal = this.querySelector('[id*=\"NewsletterForm\"]').value.length;\n    const modalEl = this.querySelector(this.selectors.modal);\n\n    if (result && inputVal != 0) {\n      const messageElement = this.querySelector(this.selectors.subscribedMessage);\n      messageElement && messageElement.classList.remove('hidden');\n      if (!window.isNewsletterModalShow) {\n        modalEl && modalEl.show();\n        window.isNewsletterModalShow = true;\n      }\n    }\n\n    const alertEl = this.querySelector('.form-message--main');\n    if (alertEl) {\n      if (!window.isNewsletterModalShow) {\n        modalEl && modalEl.show();\n        window.isNewsletterModalShow = true;\n      }\n    }\n  }\n}\ncustomElements.define('newsletter-form', NewsletterForm, { extends: 'form' });\n\nclass ColorSwatch extends HTMLUListElement {\n  constructor() {\n    super();\n\n    this.selectors = {\n      card: '.product-card',\n      mainImg: '.product-card__image--main img',\n      swatches: '.swatch-item',\n      variantImg: '.color-swatch--variant-image',\n    };\n\n    this.hoverTracker = null;\n  }\n\n  connectedCallback() {\n    this.optionNodes = this.querySelectorAll(this.selectors.swatches);\n    this.init();\n  }\n\n  init() {\n    this.abortController = new AbortController();\n\n    this.pcard = this.closest(this.selectors.card);\n    this.mainImage = this.pcard.querySelector(this.selectors.mainImg);\n\n    this.optionNodes.forEach((button) => {\n      button.addEventListener('mouseenter', this.onMouseEnter.bind(this), {\n        signal: this.abortController.signal,\n      });\n    });\n  }\n\n  onMouseEnter(e) {\n    const { target } = e;\n    const variantImage = target.querySelector(this.selectors.variantImg);\n\n    clearTimeout(this.hoverTracker);\n    this.hoverTracker = setTimeout(() => {\n      this.selected && this.selected.removeAttribute('aria-selected');\n      target.setAttribute('aria-selected', true);\n      this.selected = target;\n\n      if (this.mainImage && variantImage) {\n        this.mainImage.src = variantImage.src;\n        this.mainImage.srcset = variantImage.srcset;\n      }\n    }, 50);\n  }\n\n  disconnectedCallback() {\n    this.abortController.abort();\n  }\n}\ncustomElements.define('color-swatch', ColorSwatch, { extends: 'ul' });\n\nclass ScrollingPromotion extends HTMLElement {\n  constructor() {\n    super();\n    if (FoxTheme.config.motionReduced) return;\n    this.promotion = this.querySelector('.promotion');\n    this.repeatTimes = typeof this.dataset.repeats !== 'undefined' ? Number(this.dataset.repeats) : 10;\n\n    FoxTheme.Motion.inView(this, this.init.bind(this), { margin: '200px 0px 200px 0px' });\n  }\n  init() {\n    if (this.childElementCount === 1) {\n      this.promotion.classList.add('promotion--animated');\n\n      for (let index = 0; index < this.repeatTimes; index++) {\n        this.clone = this.promotion.cloneNode(true);\n        this.appendChild(this.clone);\n      }\n\n      // Pause when out of view.\n      const observer = new IntersectionObserver(\n        (entries, _observer) => {\n          entries.forEach((entry) => {\n            if (entry.isIntersecting) {\n              this.scrollingPlay();\n            } else {\n              this.scrollingPause();\n            }\n          });\n        },\n        { rootMargin: '0px 0px 50px 0px' }\n      );\n\n      observer.observe(this);\n    }\n  }\n\n  scrollingPlay() {\n    this.classList.remove('scrolling-promotion--paused');\n  }\n\n  scrollingPause() {\n    this.classList.add('scrolling-promotion--paused');\n  }\n}\ncustomElements.define('scrolling-promotion', ScrollingPromotion);\n\nclass ReadMore extends HTMLElement {\n  constructor() {\n    super();\n\n    this.selectors = {\n      content: '.read-more__content',\n      button: '.read-more__toggle',\n      buttonText: '.btn__text',\n    };\n\n    this.classes = {\n      isDisabled: 'is-disabled',\n      isCollapsed: 'is-collapsed',\n    };\n\n    this.abortController = new AbortController();\n\n    this.toggleClass = this.dataset.toggleClass;\n    this.showText = this.dataset.showText;\n    this.hideText = this.dataset.hideText;\n    this.lineClamp = parseInt(this.dataset.lineClamp);\n    this.buttonEl = this.querySelector(this.selectors.button);\n    this.contentEl = this.querySelector(this.selectors.content);\n\n    this.buttonEl.addEventListener('click', this.onClick.bind(this), {\n      signal: this.abortController.signal,\n    });\n\n    this.init();\n  }\n\n  init() {\n    const lineHeight = parseFloat(window.getComputedStyle(this.contentEl).lineHeight);\n    const contentHeight = this.contentEl.scrollHeight;\n    const maxHeight = lineHeight * this.lineClamp;\n\n    if (contentHeight <= maxHeight) {\n      this.buttonEl.style.display = 'none';\n      return;\n    }\n\n    this.classList.remove(this.classes.isDisabled);\n    this.contentEl.classList.remove(this.toggleClass);\n    this.showLess();\n  }\n\n  showMore() {\n    this.contentEl.classList.remove(this.toggleClass);\n    this.classList.remove(this.classes.isCollapsed);\n    this.buttonEl.querySelector(this.selectors.buttonText).textContent = this.hideText;\n    this.resetHeight();\n  }\n\n  showLess() {\n    this.contentEl.classList.add(this.toggleClass);\n    this.classList.add(this.classes.isCollapsed);\n    this.buttonEl.querySelector(this.selectors.buttonText).textContent = this.showText;\n    this.setHeight();\n  }\n\n  setHeight() {\n    const lineHeight = parseFloat(window.getComputedStyle(this.contentEl).lineHeight);\n    const lines = parseInt(window.getComputedStyle(this.contentEl).getPropertyValue('--line-clamp'));\n    const maxHeight = lineHeight * lines;\n    this.contentEl.style.setProperty('max-height', maxHeight + 'px');\n  }\n\n  resetHeight() {\n    this.contentEl.style.removeProperty('max-height');\n  }\n\n  onClick(evt) {\n    if (this.contentEl.classList.contains(this.toggleClass)) {\n      this.showMore();\n    } else {\n      this.showLess();\n    }\n  }\n\n  disconnectedCallback() {\n    this.abortController.abort();\n  }\n}\ncustomElements.define('read-more', ReadMore);\n\nclass CopyToClipboard extends HTMLDivElement {\n  constructor() {\n    super();\n\n    this.classes = {\n      copied: 'tooltip--is-visible',\n    };\n    this.clickHandler = this.onClick.bind(this);\n    this.clickTracker = null;\n  }\n\n  get button() {\n    return this.querySelector('button');\n  }\n\n  connectedCallback() {\n    this.button.addEventListener('click', this.clickHandler);\n  }\n\n  onClick(event) {\n    event.preventDefault();\n    const valueToCopy = this.dataset.copyValue;\n\n    try {\n      navigator.clipboard.writeText(valueToCopy);\n      this.classList.add(this.classes.copied);\n      clearTimeout(this.clickTracker);\n      this.clickTracker = setTimeout(() => {\n        this.classList.remove(this.classes.copied);\n      }, 3000);\n    } catch (error) {}\n  }\n\n  disconnectedCallback() {\n    this.removeEventListener('click', this.clickHandler);\n  }\n}\ncustomElements.define('copy-to-clipboard', CopyToClipboard, { extends: 'div' });\n\nclass ScrollProgressBar extends HTMLElement {\n  constructor() {\n    super();\n  }\n\n  get totalWidth() {\n    return this.contentContainer.offsetWidth;\n  }\n\n  get targetId() {\n    return this.getAttribute('target');\n  }\n\n  get target() {\n    return document.getElementById(this.targetId);\n  }\n\n  get targetScrollLeft() {\n    return this.target.scrollLeft;\n  }\n\n  set targetScrollLeft(value) {\n    this.target.scrollLeft = value;\n  }\n\n  connectedCallback() {\n    // Create media query list\n    this.mediaQuery = window.matchMedia(FoxTheme.config.mediaQueryMobile);\n\n    // Create ResizeObserver\n    this.resizeObserver = new ResizeObserver(() => {\n      if (this.mediaQuery.matches) {\n        this.init();\n      }\n    });\n\n    // Store media query handler\n    this.mediaQueryHandler = (event) => {\n      if (event.matches) {\n        this.init();\n      } else {\n        this.disable();\n      }\n    };\n\n    // Add media query change listener\n    this.mediaQuery.addEventListener('change', this.mediaQueryHandler);\n\n    // Initial check\n    if (!this.mediaQuery.matches) {\n      this.disable();\n      return;\n    }\n\n    this.init();\n  }\n\n  init() {\n    if (!this.target) {\n      console.error('Target element not found');\n      return;\n    }\n\n    this.contentContainer = this.target.children[0];\n    this.progressBar = this.querySelector('.progress-bar');\n\n    const targetStyle = window.getComputedStyle(this.target);\n    this.targetPadding = parseFloat(targetStyle.paddingLeft) + parseFloat(targetStyle.paddingRight);\n\n    // Start observing target for size changes\n    this.resizeObserver.observe(this.target);\n\n    // Check if content overflows\n    const viewportWidth = this.target.clientWidth - this.targetPadding;\n\n    if (this.totalWidth <= viewportWidth) {\n      this.disable();\n      return;\n    }\n\n    // Calculate initial progress\n    this.calculateInitialProgress();\n\n    // Add scroll listener\n    this.scrollHandler = () => {\n      requestAnimationFrame(() => this.updateProgress());\n    };\n    this.target.addEventListener('scroll', this.scrollHandler);\n\n    // Show progress bar and do initial update\n    this.style.display = 'block';\n    this.updateProgress();\n  }\n\n  disable() {\n    // Remove scroll listener if exists\n    if (this.scrollHandler && this.target) {\n      this.target.removeEventListener('scroll', this.scrollHandler);\n    }\n\n    // Hide progress bar\n    this.style.display = 'none';\n\n    // Reset progress\n    if (this.progressBar) {\n      this.progressBar.style.width = '0%';\n    }\n\n    // Stop observing target\n    if (this.target) {\n      this.resizeObserver.unobserve(this.target);\n    }\n  }\n\n  disconnectedCallback() {\n    // Clean up media query listener with stored handler\n    this.mediaQuery.removeEventListener('change', this.mediaQueryHandler);\n    // Disconnect resize observer\n    this.resizeObserver.disconnect();\n    this.disable();\n  }\n\n  calculateInitialProgress() {\n    const viewportWidth = this.target.clientWidth - this.targetPadding;\n    this.initialProgress = (viewportWidth / this.totalWidth) * 100;\n\n    this.target.addEventListener('scroll', () => {\n      requestAnimationFrame(() => this.updateProgress());\n    });\n    this.updateProgress();\n  }\n\n  updateProgress() {\n    const factor = FoxTheme.config.isRTL ? -1 : 1;\n    const viewportWidth = this.target.clientWidth - this.targetPadding;\n    const scrolled = factor * this.targetScrollLeft;\n    const maxScroll = this.totalWidth - viewportWidth;\n\n    const scrollProgress = (scrolled / maxScroll) * (100 - this.initialProgress);\n    const totalProgress = this.initialProgress + scrollProgress;\n\n    const clampedProgress = Math.min(100, Math.max(this.initialProgress, totalProgress));\n\n    this.progressBar.style.width = `${clampedProgress}%`;\n  }\n}\n\ncustomElements.define('scroll-progress-bar', ScrollProgressBar);\n\nclass ScrollPagination extends ScrollProgressBar {\n  constructor() {\n    super();\n  }\n\n  get columns() {\n    return this.target.querySelectorAll('.swipe-mobile__inner > .f-column:not(.hidden)');\n  }\n\n  disable() {\n    super.disable();\n\n    this.querySelector('.scroll-pagination__prev').removeEventListener('click', this.handleDecreaseScroll.bind(this));\n    this.querySelector('.scroll-pagination__next').removeEventListener('click', this.handleIncreaseScroll.bind(this));\n  }\n\n  init() {\n    super.init();\n\n    this.columnWidth = this.columns[0].offsetWidth;\n\n    this.querySelector('.scroll-pagination__prev').addEventListener('click', this.handleDecreaseScroll.bind(this));\n    this.querySelector('.scroll-pagination__next').addEventListener('click', this.handleIncreaseScroll.bind(this));\n  }\n\n  handleDecreaseScroll(e) {\n    if (this.targetScrollLeft <= this.columnWidth) {\n      e.preventDefault();\n      return;\n    }\n\n    this.targetScrollLeft -= this.columnWidth;\n\n    window.scrollBy({\n      left: this.targetScrollLeft,\n      behavior: 'smooth',\n    });\n  }\n\n  handleIncreaseScroll(e) {\n    if (this.targetScrollLeft >= this.totalWidth) {\n      e.preventDefault();\n      return;\n    }\n\n    this.targetScrollLeft += this.columnWidth;\n\n    window.scrollBy({\n      left: this.targetScrollLeft,\n      behavior: 'smooth',\n    });\n  }\n\n  updateProgress() {\n    const current = Math.round(this.targetScrollLeft / this.columnWidth) + 1;\n    this.querySelector('.scroll-pagination__current').innerText = current;\n  }\n}\n\ncustomElements.define('scroll-pagination', ScrollPagination);\n\nclass MasonryLayout extends HTMLElement {\n  constructor() {\n    super();\n  }\n\n  get gridContainer() {\n    return this.querySelector('.f-grid') !== null ? this.querySelector('.f-grid') : this;\n  }\n\n  get gridItems() {\n    return this.querySelectorAll('.f-column');\n  }\n\n  get rowGap() {\n    const rowGap = window.getComputedStyle(this.gridContainer).getPropertyValue('--f-row-gap');\n\n    return parseFloat(rowGap.replace('rem', '')) * 10;\n  }\n\n  get columnNumber() {\n    return window.getComputedStyle(this.gridContainer).getPropertyValue('--f-grid-columns') || 1;\n  }\n\n  connectedCallback() {\n    this.init();\n    // const events = ['matchLaptop','unmatchLaptop','matchTablet','unmatchTablet','matchMobile','unmatchMobile'];\n    // events.forEach(event => document.addEventListener(event, this.init.bind(this)));\n    window.addEventListener('resize', FoxTheme.utils.debounce(this.init.bind(this), 100), false);\n  }\n\n  init() {\n    if (FoxTheme.config.mqlMobile) {\n      this.disable();\n    } else {\n      this.calculatePositioning();\n    }\n  }\n\n  disable() {\n    Array.from(this.gridItems).forEach((item) => item.style.removeProperty('--offset-top'));\n  }\n\n  calculatePositioning() {\n    this.disable();\n    if (this.columnNumber <= 1) return;\n    Array.from(this.gridItems)\n      .slice(this.columnNumber)\n      .forEach((col, i) => {\n        const prevItem = this.gridItems[i].children[0];\n        const currentItem = col.children[0];\n\n        const prevItemPos = prevItem.getBoundingClientRect().bottom;\n        const currentItemPos = currentItem.getBoundingClientRect().top;\n\n        const offsetTop = prevItemPos - currentItemPos + this.rowGap;\n\n        col.style.setProperty('--offset-top', `${offsetTop}px`);\n      });\n  }\n}\ncustomElements.define('masonry-layout', MasonryLayout);\n\nif (!customElements.get('show-more')) {\n  class ShowMore extends ReadMore {\n    constructor() {\n      super();\n    }\n\n    get buttonWrapper() {\n      return this.querySelector('.read-more__btn');\n    }\n\n    get originalHeight() {\n      return this.contentEl.children[0].offsetHeight;\n    }\n\n    get swipeMobile() {\n      return this.dataset.swipeMobile === 'true';\n    }\n\n    get disableOnMobile() {\n      return this.dataset.disableOnMobile === 'true';\n    }\n\n    connectedCallback() {\n      const events = ['matchMobile', 'unmatchMobile', 'matchTablet', 'unmatchTablet', 'matchLaptop', 'unmatchLaptop'];\n\n      events.forEach((event) => document.addEventListener(event, this.init.bind(this)));\n    }\n\n    init() {\n      this.maxHeight = parseInt(this.dataset.maxHeight);\n\n      if (FoxTheme.config.mqlMobile && this.dataset.maxHeightMobile) {\n        this.maxHeight = parseInt(this.dataset.maxHeightMobile);\n      }\n\n      this.buttonWrapper.classList.toggle('!hidden', this.originalHeight <= this.maxHeight);\n\n      if (this.disable()) {\n        this.showMore();\n        return;\n      }\n\n      super.init();\n    }\n\n    setHeight() {\n      this.contentEl.style.setProperty('--max-height', this.maxHeight + 'px');\n    }\n\n    resetHeight() {\n      this.contentEl.style.removeProperty('--max-height');\n    }\n\n    disable() {\n      return (\n        (FoxTheme.config.mqlMobile && this.disableOnMobile) ||\n        this.maxHeight <= 0 ||\n        this.originalHeight <= this.maxHeight\n      );\n    }\n  }\n  customElements.define('show-more', ShowMore);\n}\n\nclass HighlightText extends HTMLElement {\n  constructor() {\n    super();\n    FoxTheme.Motion.inView(this, this.init.bind(this));\n  }\n  init() {\n    this.classList.add('animate');\n  }\n}\ncustomElements.define('highlight-text', HighlightText, { extends: 'em' });\n\ncustomElements.define(\n  'swipe-wrapper',\n  class SwipeWrapper extends HTMLDivElement {\n    constructor() {\n      super();\n\n      this.swipeEl = null;\n      this.resizeObserver = null;\n      this.scrollHandler = this.updateScrollClasses.bind(this);\n      this.classes = {\n        active: 'swipe--active',\n        begin: 'swipe--begin',\n        end: 'swipe--end',\n      };\n    }\n\n    connectedCallback() {\n      this.swipeEl = this.querySelector('.swipe__element');\n      if (!this.swipeEl) return;\n\n      this.init();\n\n      this.swipeEl.addEventListener('scroll', this.scrollHandler);\n      if (this.swipeEl.offsetParent !== null) {\n        this.updateScrollClasses();\n      }\n\n      this.resizeObserver = new ResizeObserver(() => {\n        // Check if element is visible and measurable\n        if (this.swipeEl.offsetParent !== null) {\n          this.updateScrollClasses();\n        }\n      });\n      this.resizeObserver.observe(this.swipeEl);\n    }\n\n    disconnectCallback() {\n      if (this.swipeEl) {\n        this.swipeEl.removeEventListener('scroll', this.scrollHandler);\n      }\n      if (this.resizeObserver) {\n        this.resizeObserver.disconnect();\n      }\n    }\n\n    init() {\n      if (this.swipeEl.classList.contains('swipe-all')) {\n        this.setActive(true);\n        return;\n      }\n\n      const swipeMobile = this.swipeEl.classList.contains('swipe-mobile');\n      if (swipeMobile) {\n        const mql = window.matchMedia(FoxTheme.config.mediaQueryMobile);\n        const update = () => {\n          this.setActive(mql.matches);\n        };\n        update();\n        mql.addEventListener('change', update);\n      }\n\n      const swipeTablet = this.swipeEl.classList.contains('swipe-tablet');\n      if (swipeTablet) {\n        const mql = window.matchMedia(FoxTheme.config.mediaQueryTablet);\n        const update = () => {\n          this.setActive(mql.matches);\n        };\n        update();\n        mql.addEventListener('change', update);\n      }\n    }\n\n    setActive(isActive = true) {\n      this.classList.toggle(this.classes.active, isActive);\n    }\n\n    updateScrollClasses() {\n      const scrollLeft = this.swipeEl.scrollLeft;\n      const clientWidth = this.swipeEl.clientWidth;\n      const scrollWidth = this.swipeEl.scrollWidth;\n\n      const atStart = scrollLeft <= 0;\n      const atEnd = Math.ceil(scrollLeft + clientWidth) >= scrollWidth;\n\n      this.classList.toggle(this.classes.begin, atStart);\n      this.classList.toggle(this.classes.end, atEnd);\n    }\n  },\n  { extends: 'div' }\n);\n"],
  "mappings": "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",
  "names": []
}
