{
  "version": 3,
  "sources": ["/cdn/shop/t/3/assets/theme.js?kkk=84708"],
  "sourcesContent": ["window.FoxTheme = window.FoxTheme || {};\nFoxTheme.config = {\n  hasLocalStorage: false,\n  mqlMobile: false,\n  mqlTablet: false,\n  mediaQueryMobile: 'screen and (max-width: 767px)',\n  mediaQueryTablet: 'screen and (max-width: 1023px)',\n  motionReduced: window.matchMedia('(prefers-reduced-motion: reduce)').matches,\n  isTouch: 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0,\n  isRTL: document.documentElement.getAttribute('dir') === 'rtl',\n};\nconsole.log(\n  '%c' +\n    window.FoxTheme.settings.themeName +\n    ' theme (v' +\n    window.FoxTheme.settings.themeVersion +\n    ') by Foxecom | Learn more https://foxecom.com/products/sleek-shopify-theme',\n  'font-size: 14px; color: #FF5C00;'\n);\n(function () {\n  // Detect browser has support local storage.\n  try {\n    const key = 'sleek: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') => {\n      return {\n        method: 'POST',\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) {\n      if (!FoxTheme.config.hasLocalStorage) return;\n\n      const now = new Date();\n      const item = {\n        value: value,\n        expiry: now.getTime() + expiryInDays * 86400000,\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      const now = new Date();\n      // Compare the expiry time of the item with the current time.\n      if (now.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    getGridColumnGap: (container) => {\n      const gapByDevice = {};\n      const gapCSSVariables = {\n        desktop: '--column-gap',\n        tabletLarge: '--column-gap-tablet-large',\n        tablet: '--column-gap-tablet',\n        mobile: '--column-gap-mobile',\n      };\n\n      const computedStyles = window.getComputedStyle(container);\n\n      for (const [device, cssVar] of Object.entries(gapCSSVariables)) {\n        const rawValue = computedStyles.getPropertyValue(cssVar).trim();\n        const match = rawValue.match(/^(\\d*\\.?\\d+)(px|rem)$/);\n\n        let numericGap = 0;\n        if (match) {\n          const [originalValue, numberStr, unit] = match;\n          numericGap = unit === 'rem' ? parseFloat(numberStr) * 10 : parseFloat(numberStr);\n        }\n\n        gapByDevice[device] = numericGap;\n      }\n\n      return gapByDevice;\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 = [\n          FoxTheme.Swiper.Navigation,\n          FoxTheme.Swiper.Pagination,\n          FoxTheme.Swiper.Keyboard,\n          FoxTheme.Swiper.Mousewheel,\n        ];\n        if (modules) {\n          defaultModules = defaultModules.concat(modules);\n        }\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\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}\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    // Check if the _overlay property is already set\n    if (!this._overlay) {\n      // If not set, find the element and cache it\n      this._overlay = this.querySelector('.fixed-overlay');\n    }\n\n    // Return the cached element\n    return this._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  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(\n      'keyup',\n      (event) => {\n        if (event.code === 'Escape') {\n          this.hide();\n        }\n      },\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(\n        'shopify:section:select',\n        (event) => {\n          this.show(null, !event.detail.load);\n        },\n        {\n          signal: this.abortController.signal,\n        }\n      );\n      section.addEventListener(\n        'shopify:section:deselect',\n        () => {\n          this.hide();\n        },\n        {\n          signal: this.abortController.signal,\n        }\n      );\n    }\n  }\n\n  disconnectedCallback() {\n    this.abortController.abort();\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\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\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    if (this.open) {\n      this.hide();\n    } else {\n      this.show(event.currentTarget);\n    }\n  }\n\n  hide() {\n    if (this.open) {\n      this.removeAttribute('open');\n      return FoxTheme.utils.waitForEvent(this, this.events.handleAfterHide);\n    }\n  }\n\n  show(activeElement = null, animate = true) {\n    if (!this.shouleBeShow()) {\n      return;\n    }\n\n    if (!this.open) {\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\n  handleAfterHide() {\n    setTimeout(() => {\n      // Remove trap focus from the active element\n      FoxTheme.a11y.removeTrapFocus(this.activeElement);\n\n      // Conditionally manage locking behavior\n      if (this.isLockingNeeded) {\n        // Decrement the lock layer count for the ModalElement\n        const currentModalCount = clearModalComponentCount.get(ModalComponent) - 1;\n        clearModalComponentCount.set(ModalComponent, currentModalCount);\n\n        // Toggle the 'open' class on the body based on the current lock count\n        document.body.classList.toggle(this.classes.show, currentModalCount > 0);\n      }\n    });\n  }\n\n  handleAfterShow() {\n    // Trap focus on the specified elements\n    FoxTheme.a11y.trapFocus(this, this.focusElement);\n\n    // Check if locking is needed\n    if (this.isLockingNeeded) {\n      // Increment the lock layer count for the ModalElement\n      const currentLockCount = clearModalComponentCount.get(ModalComponent) + 1;\n      clearModalComponentCount.set(ModalComponent, currentLockCount);\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  shouleBeShow() {\n    return true;\n  }\n\n  prepareToShow() {}\n\n  handleShowTransition() {\n    // Start a timeout to set an attribute\n    setTimeout(() => {\n      this.setAttribute('active', '');\n    }, 75);\n\n    // Return a promise that resolves when the transition ends\n    return new Promise((resolve) => {\n      this.overlay.addEventListener('transitionend', resolve, { once: true });\n    });\n  }\n\n  handleHideTransition() {\n    // Immediately remove the 'active' attribute\n    this.removeAttribute('active');\n\n    // Return a promise that resolves when the transition ends\n    return new Promise((resolve) => {\n      this.overlay.addEventListener('transitionend', resolve, { once: true });\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 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  handleAfterAnimated() {}\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\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    }\n\n    this.style.height = 'auto';\n    this.style.overflow = 'visible';\n\n    this.handleAfterAnimated();\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  onCartUpdate(event) {\n    if (event.cart.errors) return;\n\n    if (event.cart.item_count > 99) {\n      this.innerHTML = `<span class=\"text-sm\">99+</span>`;\n      this.classList.add('cart-count--small-medium');\n    } else {\n      this.innerText = event.cart.item_count;\n      this.classList.remove('cart-count--small-medium');\n    }\n    this.hidden = this.itemCount === 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\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    this.currentValue = this.value;\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    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    setTimeout(() => {\n      this.validateQtyRules();\n    }, 350);\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    } else {\n      const buttonPlus = this.querySelector('button[name=\"plus\"]');\n      if (buttonPlus) buttonPlus.removeAttribute('disabled');\n    }\n  }\n\n  updateQuantityRules({ data: { sectionId, productId, parsedHTML } }) {\n    if (sectionId !== this.sectionId || productId !== this.productId) return;\n\n    // Helper function to find element in both document and template content\n    const findElementById = (container, id) => {\n      // First try direct search\n      let element = container.getElementById ? container.getElementById(id) : container.querySelector(`#${id}`);\n\n      if (!element) {\n        // Search in template contents\n        const templates = container.querySelectorAll('template');\n        for (const template of templates) {\n          element = template.content.getElementById\n            ? template.content.getElementById(id)\n            : template.content.querySelector(`#${id}`);\n          if (element) break;\n        }\n      }\n\n      return element;\n    };\n\n    const selectors = ['.quantity__input', '.quantity__rules', '.quantity__label'];\n    const quantityFormUpdated = findElementById(parsedHTML, `QuantityForm-${sectionId}`);\n    const quantityForm = this.closest(`#QuantityForm-${sectionId}`);\n\n    if (!quantityFormUpdated) {\n      console.warn(`QuantityForm-${sectionId} not found in parsedHTML`);\n      return;\n    }\n\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    return (this.playerProxy =\n      this.playerProxy ||\n      new Proxy(this.initializePlayer(), {\n        get: (target, prop) => {\n          return async () => {\n            target = await target;\n            this.handlePlayerAction(target, prop);\n          };\n        },\n      }));\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      this.player.play();\n    }\n  }\n\n  pause() {\n    if (this.playing) {\n      this.player.pause();\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 player = new YT.Player(this.querySelector('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 player = new Vimeo.Player(this.querySelector('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      this.appendChild(this.querySelector('template').content.firstElementChild.cloneNode(true));\n      this.setAttribute('loaded', '');\n      this.closest('.media')?.classList.remove('loading');\n\n      const player = this.querySelector('video');\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 (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 ProductBundleVariantSelector extends HTMLElement {\n  constructor() {\n    super();\n\n    this.cssClasses = {\n      soldOut: 'f-price--sold-out',\n      onSale: 'f-price--on-sale',\n      noCompare: 'f-price--no-compare',\n    };\n\n    this.priceElement = this.querySelector('.f-price');\n    this.variantSelect = this.querySelector('select');\n\n    this.variantSelect && this.variantSelect.addEventListener('change', this.handleVariantChange.bind(this));\n  }\n\n  handleVariantChange(event) {\n    const variantSelect = event.target;\n    const selectedVariant = variantSelect.options[variantSelect.selectedIndex];\n    const compareAtPrice = parseInt(selectedVariant.dataset.compare_at_price || 0);\n    const price = parseInt(selectedVariant.dataset.price || 0);\n    const available = selectedVariant.dataset.available === 'true';\n    const priceVaries = variantSelect.dataset.price_varies === 'true';\n    const compareAtPriceVaries = variantSelect.dataset.compare_at_price_varies === 'true';\n\n    // Remove classes\n    this.priceElement.classList.remove(this.cssClasses.soldOut);\n    this.priceElement.classList.remove(this.cssClasses.onSale);\n    this.priceElement.classList.remove(this.cssClasses.noCompare);\n\n    // Add classes\n    if (!available) {\n      this.priceElement.classList.add(this.cssClasses.soldOut);\n    } else if (compareAtPrice > price && available) {\n      this.priceElement.classList.add(this.cssClasses.onSale);\n    }\n    if (!priceVaries && compareAtPriceVaries) {\n      this.priceElement.classList.add(this.cssClasses.noCompare);\n    }\n\n    // Change price\n    const regularPriceElement = this.querySelector('.f-price__regular');\n    regularPriceElement.querySelector('.f-price-item--regular').innerHTML = `${FoxTheme.Currency.formatMoney(\n      price,\n      FoxTheme.settings.moneyFormat\n    )}`;\n\n    const salePriceElement = this.querySelector('.f-price__sale');\n    salePriceElement.querySelector('.f-price-item--regular').innerHTML = `<s>${FoxTheme.Currency.formatMoney(\n      compareAtPrice,\n      FoxTheme.settings.moneyFormat\n    )}</s>`;\n    salePriceElement.querySelector('.f-price-item--sale').innerHTML = `${FoxTheme.Currency.formatMoney(\n      price,\n      FoxTheme.settings.moneyFormat\n    )}`;\n  }\n}\ncustomElements.define('product-bundle-variant-selector', ProductBundleVariantSelector);\n\nclass ProductsBundle extends HTMLElement {\n  constructor() {\n    super();\n\n    this.cssClasses = {\n      hover: 'is-hover',\n      active: 'is-active',\n    };\n\n    this.cartDrawerElement = document.querySelector('cart-drawer');\n    this.addToCartButtonElement = this.querySelector('button');\n\n    this.addToCartButtonElement &&\n      this.addToCartButtonElement.addEventListener('click', this.handleButtonClick.bind(this));\n\n    this.productBundleBlocks = this.querySelectorAll('[data-block-id]');\n    this.productBundleBlocks.forEach((block) =>\n      block.addEventListener('mouseenter', this.handleBlockHover.bind(this, 'enter'))\n    );\n    this.productBundleBlocks.forEach((block) =>\n      block.addEventListener('mouseleave', this.handleBlockHover.bind(this, 'leave'))\n    );\n  }\n\n  handleBlockHover(type, event) {\n    if (type === 'enter') {\n      this.classList.add(this.cssClasses.hover);\n      this.toggleBlockActive(event.target, true);\n    } else {\n      this.classList.remove(this.cssClasses.hover);\n      this.toggleBlockActive(null, false);\n    }\n  }\n\n  toggleBlockActive(target, isActive) {\n    this.productBundleBlocks.forEach((block) => {\n      if (target) {\n        if (block.dataset.blockId === target.dataset.blockId) {\n          block.classList.add(this.cssClasses.active);\n        } else {\n          block.classList.remove(this.cssClasses.active);\n        }\n      } else {\n        block.classList.remove(this.cssClasses.active);\n      }\n    });\n  }\n\n  handleButtonClick(event) {\n    event.preventDefault();\n    this.lastClickedElement = event.submitter || event.currentTarget;\n\n    const productIds = this.querySelectorAll('[name=\"id\"]');\n    const items = {\n      items: [...productIds]\n        .map((e) => e.value)\n        .map((e) => ({\n          id: e,\n          quantity: 1,\n        })),\n    };\n\n    if (document.body.classList.contains('cart-template') || FoxTheme.settings.cartType != 'drawer') {\n      FoxTheme.utils.postLink(FoxTheme.routes.cart_add_url, {\n        parameters: {\n          ...items,\n        },\n      });\n      return;\n    }\n\n    this.showErrorMessage();\n    this.toggleButtonLoading(true);\n\n    let sectionsToBundle = [];\n    document.documentElement.dispatchEvent(\n      new CustomEvent('cart:grouped-sections', { bubbles: true, detail: { sections: sectionsToBundle } })\n    );\n\n    const body = JSON.stringify({\n      ...items,\n      sections: sectionsToBundle,\n      section_url: window.pathname,\n    });\n\n    fetch(`${FoxTheme.routes.cart_add_url}`, { ...FoxTheme.utils.fetchConfig('javascript'), ...{ body } })\n      .then((response) => response.json())\n      .then(async (parsedState) => {\n        if (parsedState.status) {\n          this.showErrorMessage(parsedState.description);\n          return;\n        }\n        if (parsedState.status === 422) {\n          document.dispatchEvent(\n            new CustomEvent('product-ajax:error', {\n              detail: {\n                errorMessage: parsedState.description,\n              },\n            })\n          );\n        } else {\n          const cartJson = await (\n            await fetch(`${FoxTheme.routes.cart_url}`, { ...FoxTheme.utils.fetchConfig() })\n          ).json();\n          cartJson['sections'] = parsedState['sections'];\n\n          FoxTheme.pubsub.publish(FoxTheme.pubsub.PUB_SUB_EVENTS.cartUpdate, { cart: cartJson });\n          document.dispatchEvent(\n            new CustomEvent('product-ajax:added', {\n              detail: {\n                product: parsedState,\n              },\n            })\n          );\n          this.cartDrawerElement && this.cartDrawerElement.show(this.lastClickedElement);\n        }\n      })\n      .catch((e) => {\n        console.error(e);\n      })\n      .finally(() => {\n        this.toggleButtonLoading(false);\n      });\n  }\n\n  showErrorMessage(errorMessage = false) {\n    this.errorMessageElement = this.errorMessageElement || this.querySelector('.product-form__error-message');\n    if (this.errorMessageElement) {\n      this.errorMessageElement.hidden = !errorMessage;\n\n      if (errorMessage) this.errorMessageElement.textContent = errorMessage;\n    } else {\n      errorMessage && alert(errorMessage);\n    }\n  }\n\n  toggleButtonLoading(status) {\n    if (status) {\n      this.addToCartButtonElement.classList.add('btn--loading');\n      this.addToCartButtonElement.setAttribute('disabled', true);\n    } else {\n      this.addToCartButtonElement.classList.remove('btn--loading');\n      this.addToCartButtonElement.removeAttribute('disabled');\n    }\n  }\n}\ncustomElements.define('products-bundle', ProductsBundle);\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 = 'sleektheme: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\nclass MotionElement extends HTMLElement {\n  constructor() {\n    super();\n  }\n\n  connectedCallback() {\n    if (FoxTheme.config.motionReduced) return;\n    this.preInitialize();\n    FoxTheme.Motion.inView(\n      this,\n      async () => {\n        if (!this.isInstant && this.media) await FoxTheme.utils.imageReady(this.media);\n        this.initialize();\n      },\n      { margin: '0px 0px -50px 0px' }\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    return Array.from(this.querySelectorAll('img, iframe, svg'));\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    switch (this.animationType) {\n      case 'fade-in':\n        FoxTheme.Motion.animate(this, { opacity: 0.01 }, { duration: 0 });\n        break;\n\n      case 'fade-up':\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      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.3)' }, { duration: 0 });\n        break;\n\n      case 'zoom-out-sm':\n        FoxTheme.Motion.animate(this, { transform: 'scale(1.1)' }, { duration: 0 });\n    }\n  }\n\n  async initialize() {\n    if (this.isHold) return;\n\n    switch (this.animationType) {\n      case 'fade-in':\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        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  }\n\n  async resetAnimation(duration) {\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        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      case 'zoom-in-lg':\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      case 'zoom-out':\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.16, 1, 0.3, 1],\n          }\n        ).finished;\n        break;\n\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.16, 1, 0.3, 1],\n          }\n        ).finished;\n        break;\n    }\n  }\n\n  refreshAnimation() {\n    this.removeAttribute('hold');\n    this.preInitialize();\n    setTimeout(() => {\n      this.initialize();\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      tabSelect: 'tab-selector',\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.domNodes.tabNavs.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.querySelectorAll('button[role=\"tab\"]')));\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    if (evt.target.tagName === 'A' && evt.target.hasAttribute('href')) return;\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, tabSelect } = 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.onTabChange();\n\n      this.dispatchEvent(\n        new CustomEvent('tabChange', {\n          bubbles: true,\n          detail: { selectedIndex: tabIndex, selectedTab: newTab },\n        })\n      );\n\n      if (tabSelect) {\n        tabSelect.querySelector('select').value = tabIndex;\n      }\n    }\n  };\n\n  onTabChange() {}\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  }\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\nclass ProductTabs extends TabsComponent {\n  constructor() {\n    super();\n  }\n\n  onTabChange() {\n    const productsList = this.selectedTab.querySelector(`.products-list`);\n    if (productsList) {\n      return;\n    }\n\n    const template = this.selectedTab.querySelector(`template`);\n    const tabContent = template.content.cloneNode(true).firstElementChild;\n    this.selectedTab.appendChild(tabContent);\n  }\n}\ncustomElements.define('product-tabs', ProductTabs);\n\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}\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 (document.body.classList.contains('cart-template') || FoxTheme.settings.cartType === 'page') return;\n\n    event.preventDefault();\n    if (this.submitButtonElement.hasAttribute('aria-disabled')) 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      this.formErrorMessage.innerText = errorMessage;\n    }\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          return;\n        }\n\n        const cartJson = await (await fetch(`${FoxTheme.routes.cart_url}`, { ...FoxTheme.utils.fetchConfig() })).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        this.submitButtonElement.removeAttribute('aria-disabled');\n\n        if (!this.hasError) {\n          this.submitButtonElement.removeAttribute('aria-disabled');\n        }\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\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 HighlightText extends HTMLElement {\n  constructor() {\n    super();\n\n    FoxTheme.Motion.inView(this, this.init.bind(this));\n  }\n\n  init() {\n    this.classList.add('animate');\n  }\n}\ncustomElements.define('highlight-text', HighlightText, { extends: 'em' });\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 subscribedMessageEl = this.querySelector(this.selectors.subscribedMessage);\n      subscribedMessageEl && subscribedMessageEl.classList.remove('hidden');\n\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"],
  "mappings": "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",
  "names": []
}
