{
  "version": 3,
  "sources": ["/cdn/shop/t/3/assets/theme.js"],
  "sourcesContent": ["Shopify.formatMoney = function (cents, format) {\n  if (typeof cents == \"string\") {\n    cents = cents.replace(\".\", \"\");\n  }\n\n  var value = \"\";\n  var placeholderRegex = /\\{\\{\\s*(\\w+)\\s*\\}\\}/;\n  var formatString = format || this.money_format;\n\n  function defaultOption(opt, def) {\n    return typeof opt == \"undefined\" ? def : opt;\n  }\n\n  function formatWithDelimiters(number, precision, thousands, decimal) {\n    precision = defaultOption(precision, 2);\n    thousands = defaultOption(thousands, \",\");\n    decimal = defaultOption(decimal, \".\");\n\n    if (isNaN(number) || number == null) {\n      return 0;\n    }\n\n    number = (number / 100.0).toFixed(precision);\n\n    var parts = number.split(\".\"),\n      dollars = parts[0].replace(/(\\d)(?=(\\d\\d\\d)+(?!\\d))/g, \"$1\" + thousands),\n      cents = parts[1] ? decimal + parts[1] : \"\";\n\n    return dollars + cents;\n  }\n\n  switch (formatString.match(placeholderRegex)[1]) {\n    case \"amount\":\n      value = formatWithDelimiters(cents, 2);\n      break;\n\n    case \"amount_no_decimals\":\n      value = formatWithDelimiters(cents, 0);\n      break;\n\n    case \"amount_with_comma_separator\":\n      value = formatWithDelimiters(cents, 2, \".\", \",\");\n      break;\n\n    case \"amount_no_decimals_with_comma_separator\":\n      value = formatWithDelimiters(cents, 0, \".\", \",\");\n      break;\n  }\n\n  return formatString.replace(placeholderRegex, value);\n};\n\nconst slideAnimation = (() => {\n  const animatingElements = {};\n\n  return (setOptions) => {\n    const defaultOptions = {\n      target: false,\n      animationType: \"slideToggle\",\n      duration: 250,\n      easing: \"ease\",\n      isDisplayStyle: \"block\",\n      parent: false,\n    };\n\n    const options = Object.assign({}, defaultOptions, setOptions);\n    const target = options.target;\n    const parent = options.parent;\n\n    if (!target) {\n      return;\n    }\n\n    const uniqueKey = `node-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n    const targetKey = target.dataset.uniqueKey || uniqueKey;\n\n    if (!target.dataset.uniqueKey) {\n      target.dataset.uniqueKey = uniqueKey;\n    }\n\n    if (options.forceAnimating) {\n      animatingElements[targetKey] = false;\n    }\n\n    if (animatingElements[targetKey]) {\n      return;\n    }\n\n    animatingElements[targetKey] = true;\n\n    let animationType = options.animationType;\n    const styles = getComputedStyle(target);\n\n    if (animationType === \"slideToggle\") {\n      animationType = (styles.display === \"none\") ? \"slideDown\" : \"slideUp\";\n    }\n\n    if ((animationType === \"slideUp\" && styles.display === \"none\") ||\n      (animationType === \"slideDown\" && styles.display !== \"none\") ||\n      (animationType !== \"slideUp\" && animationType !== \"slideDown\")) {\n\n      animatingElements[targetKey] = false;\n\n      return false;\n    }\n\n    target.style.overflow = \"hidden\";\n\n    const duration = options.duration;\n    const easing = options.easing;\n    const isDisplayStyle = options.isDisplayStyle;\n\n    if (animationType === \"slideDown\") {\n      target.style.display = isDisplayStyle;\n    }\n\n    const heightVal = {\n      height: target.getBoundingClientRect().height + \"px\",\n      marginTop: styles.marginTop,\n      marginBottom: styles.marginBottom,\n      paddingTop: styles.paddingTop,\n      paddingBottom: styles.paddingBottom,\n    };\n\n    Object.keys(heightVal).forEach((key) => {\n      if (parseFloat(heightVal[key]) === 0) {\n        delete heightVal[key];\n      }\n    });\n\n    if (Object.keys(heightVal).length === 0) {\n      animatingElements[targetKey] = false;\n\n      return false;\n    }\n\n    let slideAnimation;\n\n    if (animationType === \"slideDown\") {\n      Object.keys(heightVal).forEach((key) => {\n        target.style[key] = 0;\n      });\n\n      slideAnimation = target.animate(heightVal, {\n        duration: duration,\n        easing: easing,\n      });\n    } else if (animationType === \"slideUp\") {\n      Object.keys(heightVal).forEach((key) => {\n        target.style[key] = heightVal[key];\n        heightVal[key] = 0;\n      });\n\n      slideAnimation = target.animate(heightVal, {\n        duration: duration,\n        easing: easing,\n      });\n    }\n\n    slideAnimation.finished.then(() => {\n      target.style.overflow = \"\";\n\n      Object.keys(heightVal).forEach((key) => {\n        target.style[key] = \"\";\n      });\n\n      if (animationType === \"slideUp\") {\n        target.style.display = \"none\";\n\n        if (parent.tagName === \"DETAILS\") {\n          parent.removeAttribute(\"open\");\n          parent.setAttribute(\"aria-expanded\", \"false\");\n        }\n      }\n\n      animatingElements[targetKey] = false;\n    });\n\n    parent.classList?.toggle(\"active\");\n  };\n})();\n\n\nclass MenuDrawer extends Drawer {\n  constructor() {\n    super();\n\n    this.collapsibleBlocks = this.querySelectorAll(\".collapsible-block\");\n    this.footer = this.querySelector(\".drawer__footer\");\n\n    this.allowOneOpenedTab();\n    this.setFooterHeight();\n  }\n\n  close() {\n    super.close();\n\n    this.closeAllCollapsibleBlocks();\n  }\n\n  allowOneOpenedTab() {\n    this.collapsibleBlocks.forEach((block) => {\n      const summary = block.querySelector(\"summary\");\n\n      summary.addEventListener(\"focus\", (evt) => {\n        const isSecondLevel = block.closest(\".level-1\");\n\n        if (isSecondLevel) {\n          const parentFirstLevel = block.closest(\".level-0\");\n          const secondLevelTabs = parentFirstLevel.querySelectorAll(\".level-1 .collapsible-block\");\n\n          secondLevelTabs.forEach((innerBlock) => {\n            if (block === innerBlock || !innerBlock.classList.contains(\"active\")) {\n              return;\n            }\n\n            slideAnimation({\n              target: innerBlock.querySelector(\".collapsible-content\"),\n              parent: innerBlock,\n              animationType: \"slideUp\",\n              forceAnimating: true\n            });\n          });\n        } else {\n          this.collapsibleBlocks.forEach((innerBlock) => {\n            if (block === innerBlock || !innerBlock.classList.contains(\"active\")) {\n              return;\n            }\n\n            slideAnimation({\n              target: innerBlock.querySelector(\".collapsible-content\"),\n              parent: innerBlock,\n              animationType: \"slideUp\",\n              forceAnimating: true\n            });\n          });\n        }\n      });\n    });\n  }\n\n  closeAllCollapsibleBlocks() {\n    this.collapsibleBlocks.forEach((block) => {\n      const content = block.querySelector(\".collapsible-content\");\n\n      if (block.classList.contains(\"active\")) {\n        slideAnimation({\n          target: content,\n          parent: block,\n          animationType: \"slideToggle\",\n          forceAnimating: true\n        });\n      }\n    });\n  }\n\n  setFooterHeight() {\n    this.style.setProperty(\"--footer-height\", `${this.footer.getBoundingClientRect().height}px`);\n\n    const resizeObserver = new ResizeObserver((entries) => {\n      for (let entry of entries) {\n        if (entry.target === this.footer) {\n          this.style.setProperty(\"--footer-height\", `${this.footer.getBoundingClientRect().height}px`);\n        }\n      }\n    });\n\n    resizeObserver.observe(this.footer);\n  }\n}\n\nif (!window.customElements.get(\"menu-drawer\")) {\n  customElements.define(\"menu-drawer\", MenuDrawer);\n}\n\n\nclass OpenChildrenToggle extends HTMLElement {\n  constructor() {\n    super();\n\n    this.link = this.querySelector(\"a\");\n\n    this.link.addEventListener(\"click\", (evt) => {\n      evt.preventDefault();\n    }, false);\n\n    this.addEventListener(\"click\", this.onToggle.bind(this), false);\n  }\n\n  onToggle() {\n    this.classList.toggle(\"is-open\");\n  }\n}\n\nif (!window.customElements.get(\"open-children-toggle\")) {\n  customElements.define(\"open-children-toggle\", OpenChildrenToggle);\n}\n\n\nclass SearchDrawer extends Drawer {\n  constructor() {\n    super();\n\n    this.footer = this.querySelector(\".drawer__footer\");\n    this.predictiveSearch = this.querySelector(\"predictive-search\");\n    this.input = this.querySelector(\"input[type='search']\")\n    this.submit = this.querySelector(\"button[type='submit']\");\n\n    this.predictiveSearch?.addEventListener(\"theme:predictive-search:has-results\", () => {\n      this.footer.classList.remove(\"drawer__footer--hidden\");\n      this.submit.removeAttribute(\"disabled\");\n\n      document.dispatchEvent(new CustomEvent(\"hover-button:apply\"));\n    });\n\n    this.predictiveSearch?.addEventListener(\"theme:predictive-search:no-results\", () => {\n      this.footer.classList.add(\"drawer__footer--hidden\");\n      this.submit.setAttribute(\"disabled\", \"disabled\");\n\n      document.dispatchEvent(new CustomEvent(\"hover-button:apply\"));\n    });\n  }\n\n  get focusElement() {\n    return this.querySelector(\"input[type='search']\");\n  }\n}\n\nif (!window.customElements.get(\"search-drawer\")) {\n  customElements.define(\"search-drawer\", SearchDrawer);\n}\n\n\nclass SearchTabs extends HTMLElement {\n  constructor() {\n    super();\n\n    this.tabs = this.querySelectorAll(\".search-tabs__tab\");\n    this.searchBlocks = this.querySelectorAll(\".search-tabs__blocks\");\n\n    this.init();\n  }\n\n  init() {\n    this.tabs.forEach((tab) => {\n      tab.addEventListener(\"click\", () => {\n        const blockId = tab.dataset.blockId;\n\n        this.showContent(blockId);\n\n        this.tabs.forEach((innerTab) => {\n          innerTab.classList.remove(\"button-primary\");\n          innerTab.classList.add(\"button-outline\");\n          innerTab.removeAttribute(\"disabled\");\n        });\n\n        tab.classList.add(\"button-primary\");\n        tab.classList.remove(\"button-outline\");\n        tab.setAttribute(\"disabled\", \"disabled\");\n      });\n    });\n  }\n\n  showContent(blockId) {\n    this.searchBlocks.forEach((productBlock) => {\n      productBlock.classList.add(\"search-tabs__blocks--refreshing\");\n\n      setTimeout(() => {\n        if (productBlock.dataset.blockId === blockId) {\n          productBlock.classList.remove(\"search-tabs__blocks--hidden\");\n        } else {\n          productBlock.classList.add(\"search-tabs__blocks--hidden\");\n        }\n\n        productBlock.classList.add(\"animated-blocks--hide-instantly\");\n        productBlock.classList.remove(\"visible\");\n        productBlock.classList.remove(\"search-tabs__blocks--refreshing\");\n      }, 300);\n\n      setTimeout(() => {\n        if (productBlock.dataset.blockId === blockId) {\n          productBlock.classList.remove(\"animated-blocks--hide-instantly\");\n          productBlock.classList.add(\"visible\");\n        }\n      }, 500);\n    });\n  }\n}\n\nif (!window.customElements.get(\"search-tabs\")) {\n  customElements.define(\"search-tabs\", SearchTabs);\n}\n\n\nclass CartDrawer extends Drawer {\n  constructor() {\n    super();\n\n    this.sectionId = this.dataset.sectionId;\n    this.actions = this.querySelectorAll(\".cart-drawer__action\");\n    this.actionApplyButtons = this.querySelectorAll(\".cart-drawer__action-apply-button\");\n    this.quantityInputs = this.querySelectorAll(\"[name='updates[]']\");\n    this.freeShippingBar = this.querySelector(\"free-shipping-bar\");\n\n    this.debouncedOnChange = theme.helpers.debounce((event) => {\n      this.onChange(event);\n    }, 300);\n\n    this.initCartActions();\n\n    this.addEventListener(\"drawer:open\", () => {\n      this.classList.remove(\"cart-drawer--opened\");\n    });\n  }\n\n  initCartActions() {\n    this.actions = this.querySelectorAll(\".cart-drawer__action\");\n    this.actionApplyButtons = this.querySelectorAll(\".cart-drawer__action-apply-button\");\n    this.quantityInputs = this.querySelectorAll(\"[name='updates[]']\");\n\n    // Inputs\n    this.quantityInputs.forEach((input) => {\n      input.removeEventListener(\"change\", this.debouncedOnChange.bind(this));\n      input.addEventListener(\"change\", this.debouncedOnChange.bind(this));\n    });\n\n    // Inner drawers\n    this.actions.forEach((action) => {\n      action.removeEventListener(\"click\", this.initCartAction.bind(this), false);\n      action.addEventListener(\"click\", this.initCartAction.bind(this), false);\n    });\n\n    // Inner drawer save buttons\n    this.actionApplyButtons.forEach((button) => {\n      button.removeEventListener(\"click\", this.initCartActionApply.bind(this), false);\n      button.addEventListener(\"click\", this.initCartActionApply.bind(this), false);\n    });\n  }\n\n  initCartAction(event) {\n    event.preventDefault();\n\n    const target = event.currentTarget;\n    const action = target.dataset.action;\n\n    if (action === \"shipping\") {\n      const addressCountry = this.querySelector(\"#AddressCountry\");\n      const addressProvince = this.querySelector(\"#AddressProvince\");\n\n      if (!target.classList.contains(\"shipping-inited\")) {\n        if (addressCountry && addressProvince) {\n          new Shopify.CountryProvinceSelector(\n            \"AddressCountry\",\n            \"AddressProvince\",\n            { hideElement: \"AddressProvinceContainer\" }\n          );\n        }\n\n        target.classList.add(\"shipping-inited\");\n      }\n    }\n  }\n\n  initCartActionApply(event) {\n    event.preventDefault();\n\n    const target = event.currentTarget;\n    const action = target.dataset.action;\n    const drawer = target.closest(\"drawer-inner\");\n\n    if (action === \"note\") {\n      const body = JSON.stringify({\n        note: this.querySelector(\".cart-note\").value,\n      });\n\n      target.classList.add(\"loading\");\n\n      fetch(`${window.routes.cartUpdateUrl}`, { ...theme.helpers.fetchConfig(), ...{ body }})\n        .then((response) => {\n          return response.text();\n        }).catch((e) => {\n        throw e;\n      }).finally(() => {\n        target.classList.remove(\"loading\");\n        drawer.close();\n      });\n    } else if (action === \"gift\") {\n      const variantId = +target.dataset.variantId;\n\n      const body = JSON.stringify({\n        id: variantId,\n        quantity: 1,\n        sections: this.getSectionsToRender().map((section) => section.name),\n        sections_url: window.location.pathname,\n      });\n\n      target.classList.add(\"loading\");\n\n      this.classList.add(\"start\", \"loading\");\n\n      setTimeout(() => {\n        drawer.close();\n      }, 200);\n\n      fetch(`${window.routes.cartAddUrl}`, { ...theme.helpers.fetchConfig(), ...{ body } })\n        .then((response) => {\n          return response.text();\n        })\n        .then((state) => {\n          this.updateCart(variantId, state, this);\n\n          this.classList.remove(\"start\", \"loading\");\n        })\n        .catch((e) => {\n          throw e;\n        }).finally(() => {\n        target.classList.remove(\"loading\");\n      });\n    } else if (action === \"shipping\") {\n      target.classList.add(\"loading\");\n\n      const data = {\n        zip: document.querySelector(\"#AddressZip\").value || \"\",\n        country: document.querySelector(\"#AddressCountry\").value || \"\",\n        province: document.querySelector(\"#AddressProvince\").value || \"\",\n      };\n\n      this.getShippingRates(data, target);\n    }\n  }\n\n  getShippingRates(data, button) {\n    fetch(`${window.Shopify.routes.root}cart/shipping_rates.json?shipping_address%5Bzip%5D=${data.zip}&shipping_address%5Bcountry%5D=${data.country}&shipping_address%5Bprovince%5D=${data.province}`)\n      .then((response) => {\n        return response.text();\n      })\n      .then((state) => {\n        const message = document.querySelector(\".shipping-response\");\n        const successBanner = message.querySelector(\".color-success\");\n        const errorBanner = message.querySelector(\".color-error\");\n\n        message.classList.remove(\"!hidden\");\n        successBanner.classList.add(\"!hidden\");\n        errorBanner.classList.add(\"!hidden\");\n\n        const {\n          showDeliveryDays,\n          deliveryDayOne,\n          deliveryDaysOther\n        } = message.dataset;\n\n        const parsedState = JSON.parse(state);\n\n        if (parsedState && parsedState.shipping_rates) {\n          if (parsedState.shipping_rates.length > 0) {\n            successBanner.classList.remove(\"!hidden\");\n\n            const contentBlock = successBanner.querySelector(\"span\");\n            const addressInfo = window.cartStrings.shippingRate.replace(\"{{address}}\", `${data.zip}, ${data.country} ${data.province}`);\n\n            let content = `<p>${addressInfo}</p>`;\n\n            parsedState.shipping_rates.map((rate) => {\n              let daysShipping = \"\";\n\n              if (rate.delivery_days.length > 0 && showDeliveryDays === \"true\") {\n                let typeDay = deliveryDayOne;\n                const day = rate.delivery_days[0];\n                const dayAt = rate.delivery_days.at(-1);\n\n                if (day > 1) {\n                  typeDay = deliveryDaysOther;\n                }\n\n                if (day === dayAt) {\n                  daysShipping = `(${day} ${typeDay})`;\n                } else {\n                  daysShipping = `(${day} - ${dayAt} ${typeDay})`;\n                }\n              }\n\n              content += `<p>${rate.name}: ${Shopify.formatMoney(rate.price, window.settings.moneyFormat)} ${daysShipping}</p>`;\n            });\n\n            contentBlock.innerHTML = content;\n          } else {\n            errorBanner.classList.remove(\"!hidden\");\n\n            const contentBlock = errorBanner.querySelector(\"span\");\n\n            contentBlock.innerHTML = window.cartStrings.noShipping;\n          }\n        } else {\n          errorBanner.classList.remove(\"!hidden\");\n\n          const contentBlock = errorBanner.querySelector(\"span\");\n\n          let content = \"\";\n\n          Object.entries(parsedState).map((error) => {\n            content += `${error[1][0]}<br>`;\n          });\n\n          contentBlock.innerHTML = content;\n        }\n      })\n      .catch((error) => {\n        throw error;\n      }).finally(() => {\n      button?.classList.remove(\"loading\");\n    });\n  }\n\n  onChange(evt) {\n    const target = evt.target;\n\n    this.updateQuantity(target.dataset.index, target.value, target.dataset.value, target);\n\n    this.classList.add(\"cart-drawer--opened\");\n  }\n\n  updateQuantity(id, quantity, currentQuantity, target) {\n    quantity = quantity ? quantity : 0;\n\n    const body = JSON.stringify({\n      line: +id,\n      quantity: +quantity,\n      sections_url: window.location.pathname,\n      sections: this.getSectionsToRender().map((section) => {\n        return section.name;\n      }),\n    });\n\n    this.classList.add(\"start\", \"loading\");\n\n    fetch(`${window.routes.cartChangeUrl}`, { ...theme.helpers.fetchConfig(), ...{ body } })\n      .then((response) => {\n        return response.text();\n      })\n      .then((state) => {\n        this.updateCart(id, state, target);\n      })\n      .catch((e) => {\n        throw e;\n      })\n      .finally(() => {\n        this.classList.remove(\"start\", \"loading\");\n      });\n  }\n\n  updateCart(id, state, target) {\n    const parsedState = JSON.parse(state);\n\n    if (parsedState.errors) {\n      this.updateMessageErrors(id, parsedState.errors, target);\n\n      target.value = target.dataset.value;\n\n      return;\n    }\n\n    const itemCount = parsedState.item_count;\n\n    if (itemCount > 0) {\n      this.classList.remove(\"is-empty\");\n    } else {\n      this.classList.add(\"is-empty\");\n    }\n\n    document.dispatchEvent(new CustomEvent(\"theme:cart:count:update\", {\n      detail: {\n        count: itemCount\n      }\n    }));\n\n    this.getSectionsToRender().forEach((section) => {\n      const html = new DOMParser().parseFromString(parsedState.sections[section.name], \"text/html\");\n      const currentSection = document.getElementById(section.id).querySelector(\"#cart-drawer-form\");\n\n      const currentProducts = currentSection.querySelector(\".cart-drawer__products\");\n      const currentFooter = currentSection.querySelector(\".cart-drawer__footer\");\n\n      const parsedProducts = html.querySelector(\".cart-drawer__products\");\n      const parsedFooter = html.querySelector(\".cart-drawer__footer\");\n\n      if (currentFooter && parsedFooter) {\n        let productsRange = document.createRange();\n        let footerRange = document.createRange();\n\n        productsRange = productsRange.createContextualFragment(parsedProducts.innerHTML);\n        footerRange = footerRange.createContextualFragment(parsedFooter.innerHTML);\n\n        currentProducts.replaceChildren(productsRange);\n        currentFooter.replaceChildren(footerRange);\n      } else {\n        currentSection.innerHTML = html.querySelector(\"#cart-drawer-form\").innerHTML;\n      }\n\n      const focusableElement = currentProducts?.querySelector(\"a\");\n\n      focusableElement?.focus();\n    });\n\n    this.freeShippingBar = this.querySelector(\"free-shipping-bar\");\n\n    if (this.freeShippingBar) {\n      if (parsedState.items_subtotal_price) {\n        this.freeShippingBar.init(parsedState.items_subtotal_price);\n      } else {\n        fetch(`${window.routes.cartUrl}.json`)\n          .then((res) => res.json())\n          .then((cart) => {\n            this.freeShippingBar.init(cart.items_subtotal_price);\n          })\n          .catch((error) => {\n            throw error;\n          });\n      }\n    }\n\n    this.initCartActions();\n\n    document.dispatchEvent(new CustomEvent(\"hover-button:apply\"));\n  }\n\n  updateMessageErrors(line, message, target) {\n    target.setCustomValidity(message);\n    target.reportValidity();\n  }\n\n  getSectionsToRender() {\n    return [\n      {\n        name: this.sectionId,\n        id: \"CartDrawer\",\n      },\n    ];\n  }\n}\n\nif (!window.customElements.get(\"cart-drawer\")) {\n  customElements.define(\"cart-drawer\", CartDrawer);\n}\n\n\nclass CartCount extends HTMLElement {\n  constructor() {\n    super();\n\n    document.addEventListener(\"theme:cart:count:update\", (event) => {\n      const count = event.detail.count;\n\n      const updateCount = (value) => {\n        this.classList.toggle(\"!hidden\", value === 0);\n\n        if (this.classList.contains(\"cart-count--simplified\")) {\n          this.innerHTML = value > 99 ? \"99+\" : value;\n        } else {\n          this.innerHTML = value;\n        }\n      };\n\n      if (Number.isInteger(count)) {\n        updateCount(count);\n      } else {\n        fetch(`${window.routes.cartUrl}.json`)\n          .then((res) => res.json())\n          .then((cart) => {\n            updateCount(cart.item_count);\n          })\n          .catch((error) => {\n            throw error;\n          });\n      }\n    });\n  }\n}\n\nif (!window.customElements.get(\"cart-count\")) {\n  customElements.define(\"cart-count\", CartCount);\n}\n\n\nclass CartRemoveButton extends HTMLElement {\n  constructor() {\n    super();\n\n    this.addEventListener(\"click\", (event) => {\n      event.preventDefault();\n\n      const wrapper = this.closest(\"cart-drawer\") || this.closest(\"cart-page\");\n\n      wrapper?.updateQuantity(this.dataset.index, 0);\n    });\n  }\n}\n\nif (!window.customElements.get(\"cart-remove-button\")) {\n  customElements.define(\"cart-remove-button\", CartRemoveButton);\n}\n\n\nclass CartNote extends HTMLElement {\n  constructor() {\n    super();\n\n    this.addEventListener(\"change\", theme.helpers.debounce((event) => {\n      const body = JSON.stringify({ note: event.target.value });\n\n      fetch(`${window.routes.cartUpdateUrl}`, {\n        ...theme.helpers.fetchConfig(),\n        ...{ body },\n      });\n    }, 300));\n  }\n}\n\nif (!window.customElements.get(\"cart-note\")) {\n  customElements.define(\"cart-note\", CartNote);\n}\n\n\nclass FreeShippingBar extends HTMLElement {\n  constructor() {\n    super();\n\n    this.bar = this.querySelector(\".progress\");\n    this.message = this.querySelector(\".free-shipping-message\");\n\n    this.subtotalPrice = this.dataset.subtotalPrice;\n    this.goal = this.dataset.goal;\n    this.goalNotAchievedText = this.dataset.goalNotAchievedText;\n    this.goalAchievedText = this.dataset.goalAchievedText;\n\n    this.shopifyRate = +Shopify.currency.rate;\n\n    if (this.subtotalPrice && this.goal && this.goalNotAchievedText && this.goalAchievedText && this.shopifyRate) {\n      this.init();\n    }\n  }\n\n  init(passedSubtotalPrice) {\n    if (passedSubtotalPrice) {\n      this.subtotalPrice = passedSubtotalPrice;\n    }\n\n    const subtotalPrice = +this.subtotalPrice / 100;\n    const goalValue = this.goal * this.shopifyRate;\n\n    this.setProgressBar((subtotalPrice / goalValue) * 100);\n    this.setMessage(subtotalPrice, goalValue);\n  }\n\n  setMessage(subtotalPrice, goalValue) {\n    if (!this.message) {\n      return;\n    }\n\n    this.message.classList.remove(\"opacity-0\");\n\n    if (subtotalPrice >= goalValue) {\n      this.message.innerHTML = this.goalAchievedText;\n    } else {\n      const leftAmount = (goalValue - subtotalPrice) * 100;\n      const formattedLeftAmount = Shopify.formatMoney(leftAmount, window.settings.moneyFormat);\n\n      this.message.innerHTML = this.goalNotAchievedText.replace(\"{{ amount }}\", formattedLeftAmount);\n    }\n  }\n\n  setProgressBar(percentage) {\n    percentage = Math.min(percentage, 100);\n\n    this.bar.style.setProperty(\"--progress\", `${percentage}%`);\n  }\n}\n\nif (!window.customElements.get(\"free-shipping-bar\")) {\n  customElements.define(\"free-shipping-bar\", FreeShippingBar);\n}\n\n\nclass ModalTrigger extends ModalBase {\n  constructor() {\n    super();\n\n    this.modalCustomClass = this.dataset.modalCustomClass;\n    this.modalHeaderTitle = this.dataset.modalHeaderTitle;\n\n    this.addEventListener(\"click\", this.openModal.bind(this));\n    this.addEventListener(\"keydown\", this.handleKeyPress.bind(this));\n  }\n\n  openModal(evt) {\n    evt.preventDefault();\n\n    const content = this.querySelector(\".modal-content-markup\");\n\n    this.init({\n      customClass: this.modalCustomClass,\n      headerTitle: this.modalHeaderTitle,\n      content: content,\n    });\n\n    this.open(this);\n  }\n\n  handleKeyPress(evt) {\n    if (evt.key === \"Enter\" || evt.key === \" \") {\n      evt.preventDefault();\n\n      this.openModal(evt);\n    }\n  }\n}\n\nif (!window.customElements.get(\"modal-trigger\")) {\n  customElements.define(\"modal-trigger\", ModalTrigger);\n}\n\n\nclass DrawerTrigger extends HTMLAnchorElement {\n  constructor() {\n    super();\n\n    this.drawerId = this.getAttribute(\"drawer-id\");\n\n    this.addEventListener(\"click\", (event) => {\n      event.preventDefault();\n\n      const drawer = document.getElementById(this.drawerId);\n\n      if (drawer) {\n        drawer.open(this);\n      }\n    });\n  }\n}\n\nif (!window.customElements.get(\"drawer-trigger\")) {\n  customElements.define(\"drawer-trigger\", DrawerTrigger, { extends: \"a\" });\n}\n\n\nclass HeaderSection extends HTMLElement {\n  constructor() {\n    super();\n\n    this.settings = theme.helpers.safelyParseJson(this.getAttribute(\"data-settings\")) || {};\n\n    this.headerSection = document.querySelector(\".header-section\");\n    this.header = this.headerSection.querySelector(\".header\");\n    this.headerInner = this.headerSection.querySelector(\".header__inner\");\n    this.headerMenuDrawerMarkup = this.headerSection.querySelector(\".header-menu-drawer-markup\");\n\n    this.overlay = this.nextElementSibling;\n    this.announcementBar = document.querySelector(\".announcement-bar-section\");\n    this.disclosures = this.querySelectorAll(\".disclosure\");\n    this.collapsibleBlocks = this.querySelectorAll(\".collapsible-block\");\n    this.trigger = this.getAttribute(\"data-trigger\");\n\n    this.headerBounds = this.header.getBoundingClientRect();\n\n    this.headerHeight = this.clientHeight;\n    this.headerInnerHeight = this.headerInner.clientHeight;\n\n    this.currentScrollTop = 0;\n\n    this.showHeaderOverlay();\n    this.moveDrawerOut();\n    this.handleStickyHeader();\n    this.setHeaderHeight();\n    this.setStickyClass();\n    this.closeOpenedCollapsibleBlocks();\n\n    if (this.settings.layoutOnDesktop !== \"logo-center-navigation-drawer\") {\n      this.hideMenuDrawerOnDesktop();\n    }\n\n    document.documentElement.style.setProperty(\"--header-height\", `${Math.round(this.headerHeight)}px`);\n    document.documentElement.style.setProperty(\"--header-inner-height\", `${Math.round(this.headerInnerHeight)}px`);\n\n    this.handleSectionLoadListener = this.handleSectionLoad.bind(this);\n    this.handleBlockSelectListener = this.handleBlockSelect.bind(this);\n    this.handleBlockDeselectListener = this.handleBlockDeselect.bind(this);\n    this.handleScrollListener = theme.helpers.throttle(this.handleScroll.bind(this));\n    this.handleResizeListener = theme.helpers.throttle(this.handleResize.bind(this));\n    this.handleTransitionEndListener = this.handleTransitionEnd.bind(this);\n  }\n\n  connectedCallback() {\n    this.currentScrollTop = 0;\n\n    window.addEventListener(\"scroll\", this.handleScrollListener, { passive: true });\n    window.addEventListener(\"resize\", this.handleResizeListener, { passive: true });\n\n    if (Shopify.designMode) {\n      document.addEventListener(\"shopify:section:load\", this.handleSectionLoadListener);\n      document.addEventListener(\"shopify:block:select\", this.handleBlockSelectListener);\n      document.addEventListener(\"shopify:block:deselect\", this.handleBlockDeselectListener);\n    }\n  }\n\n  disconnectedCallback() {\n    window.removeEventListener(\"scroll\", this.handleScrollListener);\n    window.removeEventListener(\"resize\", this.handleResizeListener);\n\n    if (Shopify.designMode) {\n      document.removeEventListener(\"shopify:section:load\", this.handleSectionLoadListener);\n      document.removeEventListener(\"shopify:block:select\", this.handleBlockSelectListener);\n      document.removeEventListener(\"shopify:block:deselect\", this.handleBlockDeselectListener);\n    }\n  }\n\n  handleSectionLoad() {\n    this.headerBounds = this.header.getBoundingClientRect();\n\n    this.handleStickyHeader();\n    this.moveDrawerOut();\n  }\n\n  handleTransitionEnd() {\n    if (!this.classList.contains(\"open\")) {\n      this.classList.remove(\"header--dropdown-was-opened\");\n    }\n\n    this.overlay.removeEventListener(\"transitionend\", this.handleTransitionEndListener, false);\n  }\n\n  closeOpenedCollapsibleBlocks() {\n    this.collapsibleBlocks.forEach((block) => {\n      const heading = block.querySelector(\".collapsible-heading\");\n      const blockToListen = (this.trigger === \"hover\") ? block : heading;\n\n      blockToListen.addEventListener(\"click\", () => {\n        const blocksToClose = Array.from(this.collapsibleBlocks).filter((innerBlock) => {\n          return block !== innerBlock && innerBlock.classList.contains(\"active\");\n        });\n\n        blocksToClose.forEach((blockToClose) => {\n          const content = blockToClose.querySelector(\".collapsible-content\");\n\n          slideAnimation({\n            target: content,\n            parent: blockToClose,\n            animationType: \"slideToggle\",\n            forceAnimating: true\n          });\n        });\n      });\n    });\n  }\n\n  setStickyClass() {\n    if (!this.settings.enableStickyHeader) {\n      return;\n    }\n\n    this.headerSection.classList.add(`header-section--sticky-${this.settings.stickyHeaderVisibility}`);\n  }\n\n  handleScroll() {\n    this.setHeaderHeight();\n    this.handleStickyHeader();\n    this.closeOpenedMenus();\n  }\n\n  handleResize() {\n    this.setHeaderHeight();\n  }\n\n  closeOpenedMenus() {\n    this.disclosures.forEach((disclosure) => {\n      const button = disclosure.querySelector(\".disclosure__button\");\n\n      if (button.classList.contains(\"open\")) {\n        disclosure.hidePanel();\n      }\n    });\n  }\n\n  setHeaderHeight() {\n    if (this.clientHeight !== this.headerHeight) {\n      document.documentElement.style.setProperty(\"--header-height\", `${Math.round(this.clientHeight)}px`);\n\n      this.headerHeight = this.clientHeight;\n    }\n\n    if (this.headerInner.clientHeight !== this.headerInnerHeight) {\n      document.documentElement.style.setProperty(\"--header-inner-height\", `${Math.round(this.headerInner.clientHeight)}px`);\n\n      this.headerInnerHeight = this.headerInner.clientHeight;\n    }\n  }\n\n  handleBlockSelect(evt) {\n    if (evt.target && evt.target.openSelector) {\n      const isInsideHeader = evt.target.closest(\"[is='header-section']\");\n\n      if (isInsideHeader) {\n        evt.target.openSelector(evt);\n        evt.target.classList.add(\"disclosure--not-close\");\n      }\n    }\n  }\n\n  handleBlockDeselect(evt) {\n    this.disclosures.forEach((item) => {\n      item.classList.remove(\"disclosure--not-close\");\n      item.hidePanel();\n    });\n  }\n\n  showHeaderOverlay() {\n    this.disclosures.forEach((item) => {\n      const button = item.querySelector(\".disclosure__button\");\n\n      if (!button) {\n        return;\n      }\n\n      const observer = new MutationObserver(() => {\n        this.overlay.removeEventListener(\"transitionend\", this.handleTransitionEndListener, false);\n\n        const hasOpenedDisclosure = Array.from(this.disclosures).some((disclosure) => {\n          const button = disclosure.querySelector(\".disclosure__button\");\n\n          if (!button) {\n            return;\n          }\n\n          const isMegaMenu = !!button.closest(\".header__mega-menu\");\n\n          if (isMegaMenu && button.classList.contains(\"open\")) {\n            this.classList.add(\"header--mega-menu-opened\");\n          } else {\n            this.classList.remove(\"header--mega-menu-opened\");\n          }\n\n          this.classList.add(\"header--dropdown-was-opened\");\n\n          return button.classList.contains(\"open\");\n        });\n\n        this.classList.toggle(\"open\", hasOpenedDisclosure);\n        this.announcementBar?.classList.toggle(\"announcement-bar-section--header-opened-menu\", hasOpenedDisclosure);\n\n        this.overlay.addEventListener(\"transitionend\", this.handleTransitionEndListener, false);\n      });\n\n      observer.observe(button, {\n        attributes: true,\n        childList: false,\n        subtree: false\n      });\n    });\n  }\n\n  moveDrawerOut() {\n    const existingDrawer = document.body.querySelector(\":scope > .menu-drawer\");\n    const existingOverlay = existingDrawer?.nextElementSibling;\n\n    if (existingDrawer) {\n      existingDrawer.remove();\n      existingOverlay?.remove();\n    }\n\n    if (this.headerMenuDrawerMarkup) {\n      const clonedContent = this.headerMenuDrawerMarkup.content.cloneNode(true);\n\n      const clonedDrawer = clonedContent.querySelector(\"menu-drawer\");\n      const clonedOverlay = clonedDrawer.nextElementSibling;\n\n      document.body.insertAdjacentElement(\"beforeend\", clonedDrawer);\n      document.body.insertAdjacentElement(\"beforeend\", clonedOverlay);\n\n      const drawer = document.getElementById(\"HeaderMenu\");\n\n      if (window.isHeaderDrawerMenuOpen) {\n        drawer.open();\n      }\n\n      const mutationObserver = new MutationObserver(() => {\n        window.isHeaderDrawerMenuOpen = !!drawer.classList.contains(\"open\");\n      });\n\n      mutationObserver.observe(drawer, {\n        attributes: true,\n        childList: false,\n        subtree: false\n      });\n    }\n  }\n\n  hideMenuDrawerOnDesktop() {\n    document.addEventListener(\"breakpoint:lg:match\", () => {\n      document.getElementById(\"HeaderMenu\")?.close();\n    });\n  }\n\n  handleStickyHeader() {\n    if (!this.settings.enableStickyHeader) {\n      return;\n    }\n\n    const scrollTop = window.scrollY;\n    const announcementBarHeight = this.announcementBar?.offsetHeight || 0;\n\n    if (scrollTop > announcementBarHeight) {\n      this.headerSection.classList.add(\"header-scrolled\");\n    } else {\n      this.headerSection.classList.remove(\"header-scrolled\");\n    }\n\n    if (scrollTop > this.headerBounds.bottom + 100) {\n      if (scrollTop >= this.currentScrollTop) {\n        this.headerSection.classList.add(\"header-hidden\");\n      } else {\n        this.headerSection.classList.remove(\"header-hidden\");\n      }\n    } else {\n      this.headerSection.classList.remove(\"header-hidden\");\n    }\n\n    this.currentScrollTop = scrollTop;\n  }\n}\n\nif (!window.customElements.get(\"header-section\")) {\n  customElements.define(\"header-section\", HeaderSection, { extends: \"header\" });\n}\n\n\nclass FooterBlocksParallax extends HTMLDivElement {\n  constructor() {\n    super();\n\n    this.blocks = this.querySelectorAll(\".footer__blocks--desktop .footer-block\");\n    this.logos = this.querySelectorAll(\".footer__blocks--desktop .footer-block--logo :is(img, svg)\");\n\n    if (theme.params.isMotionReduced) {\n      return;\n    }\n\n    this.initParallax();\n\n    document.addEventListener(\"breakpoint:sm:match\", this.unload.bind(this));\n    document.addEventListener(\"breakpoint:sm:unmatch\", this.initParallax.bind(this));\n\n    if (Shopify.designMode) {\n      document.addEventListener(\"shopify:section:unload\", () => {\n        this.resetAnimation();\n      });\n    }\n  }\n\n  initParallax() {\n    if (!this.logos.length || !this.blocks.length) {\n      return;\n    }\n\n    const animations = [];\n\n    this.blocks.forEach((block) => {\n      animations.push(\n        Motion.scroll(\n          Motion.animate(block, {\n            transform: [\"translateY(100px)\", \"translateY(0)\"]\n          }), {\n            target: this,\n            offset: [\n              [0, 1], [1, 1]\n            ]\n          })\n      );\n    });\n\n    setTimeout(() => {\n      this.logos.forEach((logo) => {\n        animations.push(\n          Motion.scroll(\n            Motion.animate(logo, {\n              transform: [\"scale(0)\", \"scale(1)\"]\n            }), {\n              target: this,\n              offset: [\n                [0, 1], [1, 1]\n              ]\n            })\n        );\n      });\n\n      this.animations = animations;\n    });\n  }\n\n  resetAnimation() {\n    if (theme.params.isMotionReduced || (this.mobileEnabled && (theme.params.isTouchDevice || theme.config.isSmallQuery))) {\n      return;\n    }\n\n    setTimeout(() => {\n      this.blocks.forEach((block) => {\n        Motion.animate(block, {\n          transform: \"translateY(0)\"\n        }, {\n          duration: 0\n        });\n      });\n\n      this.logos.forEach((logo) => {\n        Motion.animate(logo, {\n          transform: \"scale(1)\"\n        }, {\n          duration: 0\n        });\n      });\n    });\n  }\n\n  unload() {\n    setTimeout(() => {\n      this.animations?.forEach((animation) => {\n        animation();\n      });\n\n      this.blocks.forEach((block) => {\n        Motion.animate(block, {\n          transform: \"translateY(0)\"\n        }, {\n          duration: 0\n        });\n      });\n\n      this.logos.forEach((logo) => {\n        Motion.animate(logo, {\n          transform: \"scale(1)\"\n        }, {\n          duration: 0\n        });\n      });\n    });\n  }\n}\n\nif (!window.customElements.get(\"footer-blocks-parallax\")) {\n  customElements.define(\"footer-blocks-parallax\", FooterBlocksParallax, { extends: \"div\" });\n}\n\n\nclass FooterGroup extends HTMLElement {\n  constructor() {\n    super();\n\n    this.footer = this.querySelector(\".footer\");\n\n    if (!this.footer) {\n      return;\n    }\n\n    this.initFooterFollowOnShop();\n\n    document.addEventListener(\"breakpoint:sm:match\", this.moveFollowOnShopToCurrentScreen.bind(this));\n    document.addEventListener(\"breakpoint:sm:unmatch\", this.moveFollowOnShopToCurrentScreen.bind(this));\n  }\n\n  initFooterFollowOnShop() {\n    if (!this.footer) {\n      return;\n    }\n\n    this.followOnShopDesktopBlock = this.footer.querySelector(\".footer__blocks--desktop .follow-on-shop-block\");\n    this.followOnShopMobileBlock = this.footer.querySelector(\".footer__blocks--mobile .follow-on-shop-block\");\n    this.followOnShopDesktop = this.footer.querySelector(\".footer__blocks--desktop .follow-on-shop\");\n    this.followOnShopMobile = this.footer.querySelector(\".footer__blocks--mobile .follow-on-shop\");\n\n    if (this.followOnShopDesktop) {\n      if (theme.config.isSmallQuery) {\n        this.followOnShopPrimary = this.followOnShopMobile;\n        this.followOnShopDesktop.remove();\n      } else {\n        this.followOnShopPrimary = this.followOnShopDesktop;\n        this.followOnShopMobile.remove();\n      }\n\n      this.moveFollowOnShopToCurrentScreen();\n    }\n  }\n\n  moveFollowOnShopToCurrentScreen() {\n    if (theme.config.isSmallQuery) {\n      const hasButtonAlready = this.footer.querySelector(\".footer__blocks--mobile .follow-on-shop\");\n\n      if (hasButtonAlready) {\n        return;\n      }\n\n      if (this.followOnShopPrimary === this.followOnShopDesktop) {\n        this.followOnShopMobileBlock.insertAdjacentElement(\"beforeend\", this.followOnShopDesktop);\n        this.followOnShopMobile = this.footer.querySelector(\".footer__blocks--mobile .follow-on-shop\");\n      }\n    } else {\n      const hasButtonAlready = this.footer.querySelector(\".footer__blocks--desktop .follow-on-shop\");\n\n      if (hasButtonAlready) {\n        return;\n      }\n\n      if (this.followOnShopPrimary === this.followOnShopMobile) {\n        this.followOnShopDesktopBlock.insertAdjacentElement(\"beforeend\", this.followOnShopMobile);\n        this.followOnShopDesktop = this.footer.querySelector(\".footer__blocks--desktop .follow-on-shop\");\n      }\n    }\n  }\n}\n\nif (!window.customElements.get(\"footer-group\")) {\n  customElements.define(\"footer-group\", FooterGroup);\n}\n\n\nclass SwatchDropdown extends HTMLElement {\n  constructor() {\n    super();\n\n    this.spanFor = this.dataset.spanFor;\n    this.dropdown = this.parentElement.querySelector(\".select-custom__inner\");\n\n    if (this.spanFor) {\n      this.addEventListener(\"click\", this.activeFilterSort.bind(this), false);\n    }\n\n    this.setDropdownHeight();\n  }\n\n  setDropdownHeight() {\n    const resizeObserver = new ResizeObserver((entries) => {\n      for (let entry of entries) {\n        if (entry.target === this.dropdown) {\n          this.parentElement.style.setProperty(\"--dropdown-height\", `${entry.target.getBoundingClientRect().height}px`);\n        }\n      }\n    });\n\n    resizeObserver.observe(this.dropdown);\n  }\n\n  activeFilterSort() {\n    const spanBlock = this.querySelector(`#${this.spanFor}`);\n\n    if (!spanBlock) {\n      return;\n    }\n\n    if (spanBlock.classList.contains(\"active\")) {\n      spanBlock.classList.remove(\"active\");\n    } else {\n      spanBlock.classList.add(\"active\");\n    }\n  }\n}\n\nif (!window.customElements.get(\"swatch-dropdown\")) {\n  customElements.define(\"swatch-dropdown\", SwatchDropdown);\n}\n\n\nclass ProductTiers extends HTMLElement {\n  constructor() {\n    super();\n\n    this.formId = this.dataset.form;\n    this.priceDisplayType = this.dataset.priceDisplayType;\n    this.form = document.forms[this.formId];\n    this.tiers = this.querySelectorAll(\".product-tier\");\n\n    this.handleVariantChangeListener = this.handleVariantChange.bind(this);\n  }\n\n  connectedCallback() {\n    this.form?.addEventListener(\"variant:change\", this.handleVariantChangeListener);\n  }\n\n  disconnectedCallback() {\n    this.form?.removeEventListener(\"variant:change\", this.handleVariantChangeListener);\n  }\n\n  handleVariantChange(e) {\n    const variant = e.detail.variant;\n\n    if (!variant || !variant.available) {\n      this.classList.add(\"!hidden\");\n\n      return;\n    }\n\n    const price = variant.price;\n    const priceMoney = Shopify.formatMoney(price, window.settings.moneyFormat);\n\n    this.tiers.forEach((tier, index) => {\n      const settings = theme.helpers.safelyParseJson(tier.dataset.tierSettings) || {};\n\n      const quantity = parseInt(settings.quantity) || 1;\n      const discountType = settings.discountType;\n      const discountValue = parseFloat(settings.discountValue) || 0;\n\n      const totalPrice = price * quantity;\n      let singleDiscountedPrice = 0;\n      let totalDiscountedPrice = 0;\n      let singleDiscountAmount = 0;\n      let totalDiscountAmount = 0;\n\n      if (discountType === \"fixed\") {\n        const discountRate = discountValue * 100;\n\n        singleDiscountedPrice = Math.max(0, Math.ceil(price - discountRate));\n      } else {\n        const discountRate = discountValue / 100;\n        const discountAmount = price * discountRate;\n\n        singleDiscountedPrice = Math.ceil(price - discountAmount);\n      }\n\n      totalDiscountedPrice = singleDiscountedPrice * quantity;\n      singleDiscountAmount = price - singleDiscountedPrice;\n      totalDiscountAmount = totalPrice - totalDiscountedPrice;\n\n      const singleDiscountedPriceMoney = Shopify.formatMoney(singleDiscountedPrice, window.settings.moneyFormat);\n      const totalDiscountedPriceMoney = Shopify.formatMoney(totalDiscountedPrice, window.settings.moneyFormat);\n      const totalPriceMoney = Shopify.formatMoney(totalPrice, window.settings.moneyFormat);\n      const singleDiscountAmountMoney = Shopify.formatMoney(singleDiscountAmount, window.settings.moneyFormat);\n      const totalDiscountAmountMoney = Shopify.formatMoney(totalDiscountAmount, window.settings.moneyFormat);\n\n      const priceValueBlock = tier.querySelector(\"[data-price-value]\");\n      const priceCompareValueBlock = tier.querySelector(\"[data-price-compare-value]\");\n      const priceSaveValueBlock = tier.querySelector(\"[data-price-save-value]\");\n\n      if (index === 0) {\n        priceValueBlock.innerText = priceMoney;\n      } else {\n        if (this.priceDisplayType === \"per-unit\") {\n          priceValueBlock.innerText = singleDiscountedPriceMoney;\n          priceSaveValueBlock.innerText = singleDiscountAmountMoney;\n        } else {\n          priceValueBlock.innerText = totalDiscountedPriceMoney;\n          priceCompareValueBlock.innerText = totalPriceMoney;\n          priceSaveValueBlock.innerText = totalDiscountAmountMoney;\n        }\n      }\n    });\n\n    this.classList.remove(\"!hidden\");\n  }\n}\n\nif (!window.customElements.get(\"product-tiers\")) {\n  customElements.define(\"product-tiers\", ProductTiers);\n}\n\n\nclass ProductTabs extends HTMLElement {\n  constructor() {\n    super();\n\n    this.tabs = this.querySelectorAll(\".product-tabs__tab\");\n    this.productBlocks = this.querySelectorAll(\".product-tabs__blocks\");\n\n    this.init();\n  }\n\n  init() {\n    this.tabs.forEach((tab) => {\n      tab.addEventListener(\"click\", (evt) => {\n        evt.preventDefault();\n\n        const blockId = tab.dataset.blockId;\n\n        this.showContent(blockId);\n\n        this.tabs.forEach((innerTab) => {\n          innerTab.classList.remove(\"underline\");\n          innerTab.removeAttribute(\"disabled\");\n        });\n\n        tab.classList.add(\"underline\");\n        tab.setAttribute(\"disabled\", \"disabled\");\n      });\n    });\n  }\n\n  showContent(blockId) {\n    this.productBlocks.forEach((productBlock) => {\n      productBlock.classList.add(\"product-tabs__blocks--refreshing\");\n\n      setTimeout(() => {\n        if (productBlock.dataset.blockId === blockId) {\n          productBlock.classList.remove(\"product-tabs__blocks--hidden\");\n        } else {\n          productBlock.classList.add(\"product-tabs__blocks--hidden\");\n        }\n\n        productBlock.classList.add(\"animated-blocks--hide-instantly\");\n        productBlock.classList.remove(\"visible\");\n        productBlock.classList.remove(\"product-tabs__blocks--refreshing\");\n      }, 300);\n\n      setTimeout(() => {\n        if (productBlock.dataset.blockId === blockId) {\n          productBlock.classList.remove(\"animated-blocks--hide-instantly\");\n          productBlock.classList.add(\"visible\");\n        }\n      }, 500);\n    });\n  }\n}\n\nif (!window.customElements.get(\"product-tabs\")) {\n  customElements.define(\"product-tabs\", ProductTabs);\n}\n\n\nclass GeoShippingNotice extends HTMLElement {\n  constructor() {\n    super();\n\n    this.settings = theme.helpers.safelyParseJson(this.getAttribute(\"settings\"));\n    this.message = this.querySelector(\".geo-shipping-notice__message\");\n    this.cacheKey = \"geoShippingCountry\";\n\n    this.init();\n  }\n\n  init() {\n    if (!this.message || !this.settings) {\n      return;\n    }\n\n    const excluded = this.settings.excludedCountries.split(\",\").map((c) => c.trim().toUpperCase());\n    const cached = this.getCached();\n\n    if (cached) {\n      this.renderMessage(excluded, cached.country, cached.code);\n\n      return;\n    }\n\n    fetch(`${window.Shopify.routes.root}browsing_context_suggestions.json?country[enabled]=true&country[exclude]=${window.Shopify.country}&language[enabled]=true&language[exclude]=${window.Shopify.language}`)\n      .then((res) => res.json())\n      .then((data) => {\n        const country = data.detected_values?.country?.name || \"your country\";\n        const code = data.detected_values?.country?.handle?.toUpperCase() || \"\";\n\n        this.setCached(country, code);\n        this.renderMessage(excluded, country, code);\n\n        this.classList.remove(\"invisible\");\n      })\n      .catch(() => {\n        this.message.innerText = \"Unable to detect location.\";\n\n        this.classList.add(\"!hidden\");\n      });\n  }\n\n  renderMessage(excluded, country, code) {\n    const flag = code ? String.fromCodePoint(...[...code].map((c) => 127397 + c.charCodeAt())) : \"\uD83C\uDF10\";\n    const isExcluded = excluded.includes(code);\n    const template = isExcluded ? this.settings.messageUnsupported : this.settings.messageSupported;\n\n    this.message.innerHTML = template.replace(\"[country]\", country).replace(\"[flag]\", flag);\n\n    this.classList.remove(\"invisible\");\n  };\n\n  getCached() {\n    const oneDay = 24 * 60 * 60 * 1000;\n\n    try {\n      const cached = JSON.parse(localStorage.getItem(this.cacheKey));\n\n      if (cached && Date.now() - cached.timestamp < oneDay) {\n        return cached;\n      }\n    } catch {}\n\n    localStorage.removeItem(this.cacheKey);\n\n    return null;\n  };\n\n  setCached(country, code) {\n    localStorage.setItem(this.cacheKey, JSON.stringify({\n      country,\n      code,\n      timestamp: Date.now()\n    }));\n  };\n}\n\nif (!window.customElements.get(\"geo-shipping-notice\")) {\n  customElements.define(\"geo-shipping-notice\", GeoShippingNotice);\n}\n\n\nclass StickyAtcBar extends HTMLElement {\n  constructor() {\n    super();\n\n    this.sectionId = this.dataset.sectionId;\n    this.section = document.querySelector(`.product-section[data-section-id=\"${this.sectionId}\"]`);\n    this.position = this.dataset.position;\n    this.select = this.querySelector(\".sticky-atc-bar__select\");\n    this.image = this.querySelector(\".sticky-atc-bar__image img\");\n    this.atcButton = this.section.querySelector(\".product-form__buy-button\");\n    this.mainForm = this.atcButton.closest(\"form\");\n    this.mainVariants = this.section.querySelectorAll(\"variant-radios-detail fieldset\");\n    this.variantsData = this.querySelector(\".product-variants-json\");\n    this.variantsJSON = this.variantsData ? JSON.parse(this.variantsData.textContent) : []\n    this.form = this.querySelector(\"form\");\n    this.quantityInputs = [this.querySelector(\"input[name='quantity']\"), this.section.querySelector(\"input[name='quantity']\")];\n\n    this.buttonRect = null;\n\n    this.init();\n\n    this.handleScrollListener = theme.helpers.throttle(this.handleScroll.bind(this));\n    this.handleVariantChangeListener = this.handleVariantChange.bind(this);\n    this.handleSelectChangeListener = this.handleSelectChange.bind(this);\n  }\n\n  init() {\n    this.moveOutsideSection();\n    this.setInitialPosition();\n    this.observeAtcButton();\n    this.handleScroll();\n    this.syncQuantityInputs();\n    this.setBarHeight();\n  }\n\n  connectedCallback() {\n    window.addEventListener(\"scroll\", this.handleScrollListener, { passive: true });\n    this.mainForm?.addEventListener(\"variant:change\", this.handleVariantChangeListener);\n    this.select.addEventListener(\"change\", this.handleSelectChangeListener);\n  }\n\n  disconnectedCallback() {\n    window.removeEventListener(\"scroll\", this.handleScrollListener);\n    this.mainForm?.removeEventListener(\"variant:change\", this.handleVariantChangeListener);\n    this.select.removeEventListener(\"change\", this.handleSelectChangeListener);\n  }\n\n  setBarHeight() {\n    document.documentElement.style.setProperty(\"--sticky-bar-height\", `${this.getBoundingClientRect().height}px`);\n\n    const resizeObserver = new ResizeObserver((entries) => {\n      for (let entry of entries) {\n        if (entry.target === this) {\n          document.documentElement.style.setProperty(\"--sticky-bar-height\", `${entry.target.getBoundingClientRect().height}px`);\n        }\n      }\n    });\n\n    resizeObserver.observe(this);\n  }\n\n  handleVariantChange(event) {\n    const variant = event.detail.variant;\n\n    if (variant) {\n      const element = this.querySelector('[name=\"id\"]');\n\n      element.value = variant.id;\n      element.dispatchEvent(new Event(\"change\", { bubbles: true }));\n\n      this.select.value = variant.id;\n\n      this.form.dispatchEvent(new CustomEvent(\"variant:change\", {\n        detail: {\n          variant: variant\n        }\n      }));\n    }\n  }\n\n  handleSelectChange() {\n    const option = this.select.options[this.select.selectedIndex];\n    const imageSrc = option.dataset.image;\n    const variantId = +this.select.value;\n    const variant = this.variantsJSON.find((variant) => {\n      return variant.id === variantId;\n    });\n\n    const element = this.querySelector('[name=\"id\"]');\n\n    element.value = variantId;\n    element.dispatchEvent(new Event(\"change\", { bubbles: true }));\n\n    this.mainVariants.forEach((fieldset, index) => {\n      const option = variant[`option${index + 1}`];\n      const select = fieldset.querySelector(\"select\");\n      const radio = fieldset.querySelector(`input[type=\"radio\"][value=\"${CSS.escape(option)}\"]`);\n\n      if (select) {\n        select.value = option;\n        select.dispatchEvent(new Event(\"change\", { bubbles: true }));\n      } else if (radio) {\n        radio.checked = true;\n        radio.dispatchEvent(new Event(\"change\", { bubbles: true }));\n      }\n    });\n\n    if (this.image && imageSrc) {\n      this.image.src = imageSrc;\n      this.image.removeAttribute(\"srcset\");\n    }\n  }\n\n  syncQuantityInputs() {\n    this.quantityInputs.forEach((input) => {\n      input.addEventListener(\"change\", () => {\n        const value = +input.value;\n\n        this.quantityInputs.forEach((otherInput) => {\n          if (otherInput !== input) {\n            otherInput.value = value;\n          }\n        });\n      });\n    });\n  }\n\n  moveOutsideSection() {\n    const existingStickyBar = document.querySelector(\"body > .sticky-atc-bar\");\n\n    existingStickyBar?.remove();\n\n    document.body.appendChild(this);\n  }\n\n  setInitialPosition() {\n    this.buttonRect = this.atcButton.getBoundingClientRect();\n    this.buttonTopOffset = this.atcButton.getBoundingClientRect().top + window.scrollY;\n  }\n\n  handleScroll() {\n    const scrollY = window.scrollY;\n\n    if (!this.buttonRect) {\n      return;\n    }\n\n    const isAbove = scrollY > this.buttonTopOffset + this.atcButton.offsetHeight;\n\n    if (isAbove) {\n      this.showSticky();\n    } else {\n      this.hideSticky();\n    }\n  }\n\n  observeAtcButton() {\n    const observer = new IntersectionObserver(\n      (entries) => {\n        entries.forEach((entry) => {\n          this.setInitialPosition();\n\n          if (entry.isIntersecting) {\n            this.hideSticky();\n          }\n        });\n      },\n      {\n        root: null,\n        threshold: 0,\n      }\n    );\n\n    observer.observe(this.atcButton);\n  }\n\n  showSticky() {\n    this.classList.add(\"visible\");\n    document.body.classList.add(\"sticky-atc-bar-visible\");\n    document.body.classList.add(`sticky-atc-bar-position-${this.position}`);\n  }\n\n  hideSticky() {\n    this.classList.remove(\"visible\");\n    document.body.classList.remove(\"sticky-atc-bar-visible\");\n  }\n}\n\nif (!window.customElements.get(\"sticky-atc-bar\")) {\n  customElements.define(\"sticky-atc-bar\", StickyAtcBar);\n}\n\n\nclass MediaGallery extends HTMLElement {\n  constructor() {\n    super();\n\n    this.section = this.closest(\".product-section\");\n    this.layout = this.dataset.layout;\n    this.enableAltFiltering = this.hasAttribute(\"data-enable-alt-filtering\");\n    this.productSlider = this.querySelector(\"slide-with-thumbs\");\n    this.productDataJSON = this.section.querySelector(\".productJson\");\n    this.productData = this.productDataJSON ? JSON.parse(this.productDataJSON.textContent) : [];\n    this.circleText = this.querySelector(\".circle-text-wrapper\");\n    this.formId = this.getAttribute(\"form\");\n    this.form = document.forms[this.formId];\n    this.filteredIndexes = theme.helpers.safelyParseJson(this.dataset.filteredIndexes) || {};\n\n    this.init();\n\n    this.handleVariantChangeListener = this.handleVariantChange.bind(this);\n\n    document.addEventListener(\"breakpoint:sm:match\", this.unloadCircleAnimation.bind(this));\n    document.addEventListener(\"breakpoint:sm:unmatch\", this.loadCircleAnimation.bind(this));\n  }\n\n  connectedCallback() {\n    this.form?.addEventListener(\"variant:change\", this.handleVariantChangeListener);\n  }\n\n  disconnectedCallback() {\n    this.form?.removeEventListener(\"variant:change\", this.handleVariantChangeListener);\n  }\n\n  init() {\n    this.loadCircleAnimation();\n\n    if (this.enableAltFiltering) {\n      this.saveSliderSlides();\n    }\n  }\n\n  saveSliderSlides() {\n    if (!this.productSlider) {\n      return;\n    }\n\n    const swiperSlider = this.productSlider.querySelector(\".product-slider\");\n\n    if (!swiperSlider) {\n      return;\n    }\n\n    const observer = new MutationObserver(() => {\n      if (!swiperSlider.classList.contains(\"swiper-initialized\")) {\n        return;\n      }\n\n      this.originalSlides = Array.from(this.productSlider?.globalSlide.slides).map((slide) => {\n        const newSlide = slide.cloneNode(true);\n        const images = newSlide.querySelectorAll(\".fade-in-image\");\n\n        images.forEach((image) => {\n          image.classList.remove(\"fade-in-image\");\n        });\n\n        return newSlide.outerHTML;\n      });\n\n      this.originalThumbnailSlides = Array.from(this.productSlider?.thumbnailSlide.slides).map((slide) => {\n        const newSlide = slide.cloneNode(true);\n        const images = newSlide.querySelectorAll(\".fade-in-image\");\n\n        images.forEach((image) => {\n          image.classList.remove(\"fade-in-image\");\n        });\n\n        return newSlide.outerHTML;\n      });\n\n      this.filteredIndexes = this.filteredIndexes.map((index) => {\n        return index - 1;\n      });\n\n      this.filterMediaByAlt(this.filteredIndexes);\n\n      observer.disconnect();\n    });\n\n    observer.observe(swiperSlider, {\n      attributes: true,\n      childList: true,\n      subtree: true\n    });\n  }\n\n  handleVariantChange(event) {\n    const variant = event.detail.variant;\n\n    if (!variant) {\n      return;\n    }\n\n    if (this.enableAltFiltering) {\n      const filteredIndexes = this.getHiddenMediaIndexes(this.productData, variant);\n\n      this.filterMediaByAlt(filteredIndexes);\n    }\n  }\n\n  filterMediaByAlt(filteredIndexes) {\n    if (this.layout === \"grid\") {\n      this.medias = this.querySelectorAll(\".media-gallery__video, .media-gallery__model, .media-gallery__image\");\n\n      this.medias.forEach((media, index) => {\n        media.classList.remove(\"!hidden\");\n      });\n\n      filteredIndexes.forEach((index) => {\n        const media = this.medias[index];\n\n        if (media) {\n          media.classList.add(\"!hidden\");\n        }\n      });\n    } else if (this.layout === \"carousel\") {\n      let firstThumbnailIndex = -1;\n\n      this.productSlider?.thumbnailSlide.slides.forEach((slide, index) => {\n        if (firstThumbnailIndex === -1 && !filteredIndexes.includes(index)) {\n          firstThumbnailIndex = index;\n        }\n      });\n\n      this.productSlider?.globalSlide.removeAllSlides();\n      this.productSlider?.thumbnailSlide.removeAllSlides();\n      this.productSlider?.globalSlide.appendSlide(this.originalSlides);\n      this.productSlider?.thumbnailSlide.appendSlide(this.originalThumbnailSlides);\n\n      this.productSlider?.globalSlide.removeSlide(filteredIndexes);\n      this.productSlider?.thumbnailSlide.removeSlide(filteredIndexes);\n\n      this.productSlider?.globalSlide.update();\n      this.productSlider?.globalSlide.slideTo(0);\n\n      document.dispatchEvent(new CustomEvent(\"theme:images:lazy-load\"));\n      document.dispatchEvent(new CustomEvent(\"theme:zoom:init\"));\n    }\n  }\n\n  getHiddenMediaIndexes(product, variant) {\n    const filteredMediaIndexes = [];\n\n    product.media.forEach((media, index) => {\n      const alt = media.alt;\n      const isFeatured = variant.featured_media && media.position === variant.featured_media.position;\n\n      if (!alt || !alt.includes(\"#\") || alt === product.title || isFeatured) {\n        return;\n      }\n\n      const altParts = alt.split(\"#\");\n      const filterString = altParts[1].trim();\n      const optionPairs = filterString.split(\"_\");\n\n      let shouldHide = false;\n\n      for (const pair of optionPairs) {\n        if (!pair.includes(\"=\")) {\n          continue;\n        }\n\n        const [rawOptionName, rawValues] = pair.split(\"=\");\n        const optionName = rawOptionName.trim().toLowerCase();\n        const expectedValues = rawValues.trim().toLowerCase().split(\",\");\n\n        const optionIndex = product.options.findIndex((optName) => {\n          return optName.toLowerCase() === optionName;\n        });\n\n        if (optionIndex !== -1) {\n          const selectedValue = variant.options[optionIndex]?.toLowerCase();\n\n          if (!expectedValues.includes(selectedValue)) {\n            shouldHide = true;\n\n            break;\n          }\n        }\n      }\n\n      if (shouldHide) {\n        filteredMediaIndexes.push(index);\n      }\n    });\n\n    return filteredMediaIndexes;\n  }\n\n  loadCircleAnimation() {\n    if (theme.params.isMotionReduced || theme.config.isSmallQuery || !this.circleText) {\n      return;\n    }\n\n    const animations = [];\n\n    animations.push(\n      Motion.scroll(\n        Motion.animate(this.circleText, {\n          transform: [\"rotate(90deg)\", \"rotate(270deg)\"]\n        }), {\n          target: this,\n          offset: [\n            [0, 1], [1, 0]\n          ]\n        })\n    );\n\n    this.circleAnimations = animations;\n  }\n\n  unloadCircleAnimation() {\n    setTimeout(() => {\n      if (!this.circleText) {\n        return;\n      }\n\n      this.circleAnimations.forEach((animation) => {\n        animation();\n      });\n\n      Motion.animate(this.circleText, {\n        transform: \"rotate(0deg)\"\n      }, {\n        duration: 0\n      });\n    });\n  }\n}\n\nif (!window.customElements.get(\"media-gallery\")) {\n  customElements.define(\"media-gallery\", MediaGallery);\n}\n\n\nclass SwatchInit extends HTMLElement {\n  constructor() {\n    super();\n\n    this.options = null;\n    this.swatches = this.querySelectorAll(\".product__color-swatch-option\");\n\n    this.swatches.forEach((swatch) => {\n      this.checkSwatches(swatch);\n    });\n  }\n\n  checkSwatches(swatch) {\n    const { color, image, customValue, swatchType } = swatch.dataset;\n\n    if (!color) {\n      return;\n    }\n\n    if (swatchType === \"variant-image\") {\n      if (image) {\n        if (!color.includes(\"rgb(\")) {\n          swatch.classList.add(`color__${color.replace(\" \", \"-\")}`);\n        }\n\n        swatch.style.backgroundColor = null;\n        swatch.style.backgroundImage = `url(${image})`;\n        swatch.style.backgroundSize = \"cover\";\n        swatch.style.backgroundRepeat = \"no-repeat\";\n      } else if (this.checkColor(color)) {\n        swatch.style.backgroundColor = color;\n\n        swatch.classList.add(customValue);\n      } else {\n        swatch.classList.add(customValue);\n      }\n    } else if (swatchType === \"swatches\") {\n      swatch.classList.add(customValue);\n\n      if (this.checkColor(color)) {\n        swatch.style.backgroundColor = color;\n      } else {\n        swatch.classList.add(customValue);\n      }\n    } else {\n      swatch.classList.add(customValue);\n    }\n  }\n\n  checkColor(color) {\n    const optionStyle = new Option().style;\n\n    optionStyle.color = color;\n\n    return optionStyle.color === color;\n  }\n\n  updateOptions() {\n    const activeOptions = this.querySelectorAll(\".product__color-swatch-option.active\");\n\n    this.options = Array.from(activeOptions, (select) => {\n      return select.getAttribute(\"data-value\");\n    });\n\n    this.variantData.find((variant) => {\n      if (this.options.length === 1) {\n        const variantOptions = {\n          1: variant.option1,\n          2: variant.option2,\n          3: variant.option3,\n        };\n\n        if (variantOptions[this.swatchPosition] === this.options[0]) {\n          this.options = variant.options;\n        }\n      }\n    });\n  }\n\n  updateMasterId(variantData) {\n    this.currentVariant = variantData.find((variant) => {\n      return variant.options.every((option, index) => {\n        return this.options[index] === option;\n      })\n    });\n\n    return this.currentVariant;\n  }\n}\n\n\nclass SwatchFunctions extends SwatchInit {\n  constructor() {\n    super();\n\n    this.updateVariables();\n    this.updateOptions();\n    this.updateMasterId(this.getVariantData());\n\n    setTimeout(() => {\n      this.updateMedia(true);\n    }, 0);\n\n    this.addEventListener(\"change\", this.onVariantChange.bind(this));\n  }\n\n  onVariantChange(e) {\n    this.updateVariables(e.target);\n\n    if (!this.productTarget) {\n      return;\n    }\n\n    this.groupFunctionsInit();\n\n    if (!this.currentVariant) {\n      this.groupFunctionsUnavailable();\n    } else {\n      this.groupFunctionsAvailable();\n    }\n\n    this.form?.dispatchEvent(new CustomEvent(\"variant:change\", {\n      detail: {\n        variant: this.currentVariant\n      }\n    }));\n  }\n\n  updateVariables(target) {\n    this.target = target;\n    this.productTarget = this.closest(\".product-container\");\n    this.variantQty = this.productTarget?.querySelector(\".productVariantsQty\");\n    this.variantQtyData = this.variantQty ? JSON.parse(this.variantQty.textContent) : [];\n    this.form = document.getElementById(this.getAttribute(\"form\"));\n    this.inputId = this.form?.querySelector('input[name=\"id\"]');\n    this.atcButton = this.form?.querySelector(\"[name='add']\");\n    this.atcButtonLabel = this.atcButton?.querySelector(\".button-label\");\n    this.stickyAtcButton = document.querySelector(\".sticky-atc-bar [name='add']\");\n    this.stickyAtcButtonLabel = this.stickyAtcButton?.querySelector(\".button-label\");\n    this.prices = this.productTarget?.querySelectorAll(\".product-price\");\n    this.inventoryStatus = this.productTarget?.querySelector(\".product-inventory-wrapper\");\n    this.sku = this.productTarget?.querySelector(\".product-sku-wrapper\");\n    this.mediaGallery = this.productTarget?.querySelector(\"media-gallery\");\n    this.variantPicker = this.productTarget?.querySelector(\".product-detail__variant-picker\");\n    this.badges = this.productTarget?.querySelector(\".product__badges\");\n  }\n\n  groupFunctionsInit() {\n    this.updateOptions();\n    this.updateMasterId();\n    this.updatePickupAvailability();\n    this.updateVariantStatuses();\n    this.updateProductInventory();\n  }\n\n  groupFunctionsUnavailable() {\n    this.setUnavailable();\n  }\n\n  groupFunctionsAvailable() {\n    this.updateURL();\n    this.updateVariantInput();\n    this.renderProductInformation();\n    this.setAvailable();\n  }\n\n  setUnavailable() {\n    if (this.target) {\n      const fieldset = this.target.closest(\"fieldset\");\n      const val = this.target.value;\n      const optionSelected = fieldset.querySelector(\".option_value\");\n\n      optionSelected.textContent = val;\n    }\n\n    if (this.atcButton) {\n      this.atcButton.setAttribute(\"disabled\", \"disabled\");\n    }\n\n    if (this.stickyAtcButton) {\n      this.stickyAtcButton.setAttribute(\"disabled\", \"disabled\");\n    }\n\n    if (this.atcButtonLabel) {\n      this.atcButtonLabel.textContent = window.variantStrings.unavailable;\n    }\n\n    if (this.stickyAtcButtonLabel) {\n      this.stickyAtcButtonLabel.textContent = window.variantStrings.unavailable;\n    }\n\n    this.prices.forEach((price) => {\n      price.classList.add(\"hidden\");\n    });\n\n    if (this.inventoryStatus) {\n      this.inventoryStatus.classList.add(\"hidden\");\n    }\n\n    if (this.sku) {\n      this.sku.classList.add(\"hidden\");\n    }\n  }\n\n  setAvailable() {\n    this.prices.forEach((price) => {\n      price.classList.remove(\"hidden\");\n    });\n\n    if (this.inventoryStatus) {\n      this.inventoryStatus.classList.remove(\"hidden\");\n    }\n\n    if (this.sku) {\n      this.sku.classList.remove(\"hidden\");\n    }\n  }\n\n  updateMedia(firstLoad) {\n    const layout = this.mediaGallery?.dataset.layout;\n\n    if (!layout) {\n      return;\n    }\n\n    if (layout === \"carousel\") {\n      const slider = this.mediaGallery.querySelector(\"slide-with-thumbs\");\n\n      if (!slider) {\n        return;\n      }\n\n      const slides = slider.querySelectorAll(\".product-slider .media-gallery__image.swiper-slide\");\n\n      if (slides.length === 0 || !this.currentVariant?.featured_media) {\n        return;\n      }\n\n      slides.forEach((slide, index) => {\n        const mediaId = slide.getAttribute(\"data-media-id\");\n\n        if (mediaId && mediaId === `${this.dataset.section}-${this.currentVariant.featured_media.id}`) {\n          const position = slide.getAttribute(\"data-position\");\n\n          slider.functionGoto(position - 1);\n        }\n      });\n    } else if (!firstLoad) {\n      const mediaElement = document.querySelector(`[data-media-id=\"${this.dataset.section}-${this.currentVariant.featured_media?.id || ''}\"]`);\n\n      if (mediaElement) {\n        mediaElement.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n      }\n    }\n  }\n\n  updateProductInventory() {\n    const productInventory = this.productTarget?.querySelector(\"product-inventory\");\n\n    if (!productInventory) {\n      return;\n    }\n\n    const productInventories = theme.helpers.safelyParseJson(this.productTarget?.querySelector(\"[data-product-inventories-json]\")?.innerHTML || \"[]\");\n\n    const lowThreshold = window.settings.productInventory.lowThreshold;\n    const normalStockText = window.settings.productInventory.normalStockText;\n    const lowStockText = window.settings.productInventory.lowStockText;\n    const outOfStockText = window.settings.productInventory.outOfStockText;\n\n    const text = productInventory.querySelector(\"span:first-of-type\");\n\n    const setInventoryState = (state, variantInventory) => {\n      productInventory.classList.remove(\"product-inventory--in-stock\", \"product-inventory--low-stock\", \"product-inventory--out-of-stock\");\n\n      switch (state) {\n        case \"in-stock\":\n          productInventory.classList.add(\"product-inventory--in-stock\");\n\n          text.innerHTML = normalStockText;\n\n          break;\n\n        case \"low-stock\":\n          let lowStock = lowStockText;\n\n          productInventory.classList.add(\"product-inventory--low-stock\");\n\n          if (variantInventory) {\n            lowStock = lowStock.replace(\"AMOUNT\", variantInventory?.inventory_quantity);\n          }\n\n          text.innerHTML = lowStock;\n\n          break;\n\n        case \"out-of-stock\":\n          productInventory.classList.add(\"product-inventory--out-of-stock\");\n\n          text.innerHTML = outOfStockText;\n\n          break;\n      }\n    }\n\n    if (!this.currentVariant) {\n      setInventoryState(\"out-of-stock\");\n\n      return;\n    }\n\n    const variantInventory = productInventories.inventories[this.currentVariant.id];\n\n    if (this.currentVariant.available) {\n      if (variantInventory?.inventory_management === \"shopify\") {\n        if (variantInventory?.inventory_policy === \"continue\") {\n          setInventoryState(\"in-stock\");\n        } else {\n          if (variantInventory?.inventory_quantity > 0) {\n            if (variantInventory.inventory_quantity < lowThreshold) {\n              setInventoryState(\"low-stock\", variantInventory);\n            } else {\n              setInventoryState(\"in-stock\");\n            }\n          } else {\n            setInventoryState(\"out-of-stock\");\n          }\n        }\n      } else {\n        setInventoryState(\"in-stock\");\n      }\n    } else {\n      setInventoryState(\"out-of-stock\");\n    }\n  }\n\n  renderProductInformation() {\n    if (this.sku) {\n      this.sku.innerHTML = this.currentVariant.sku ? this.currentVariant.sku : \"N/A\";\n    }\n\n    if (this.variantPicker) {\n      const type = this.variantPicker.dataset.type || \"swatches\";\n\n      const updateOptionValues = (selector) => {\n        const optionElements = this.productTarget.querySelectorAll(selector);\n\n        optionElements.forEach((element, index) => {\n          const optionValue = this.currentVariant[`option${index + 1}`];\n\n          if (optionValue) {\n            element.innerHTML = optionValue;\n          }\n        });\n      };\n\n      if (type === \"swatches\") {\n        updateOptionValues(\".option_value\");\n      } else {\n        updateOptionValues(\".option_drop_value .option_value\");\n        updateOptionValues(\".swatch-dropdown-select-value .option_value\");\n\n        const closestSwatchDropdown = this.target.closest(\"swatch-dropdown\");\n\n        if (closestSwatchDropdown && closestSwatchDropdown.classList.contains(\"active\")) {\n          closestSwatchDropdown.classList.remove(\"active\");\n        }\n      }\n    }\n\n    this.renderBtnStatus();\n    this.updateBadges();\n  }\n\n  updateBadges() {\n    if (!this.badges) {\n      return;\n    }\n\n    const compareAtPrice = this.currentVariant.compare_at_price;\n    const price = this.currentVariant.price;\n    let variantQuantity = 0;\n\n    this.variantQtyData.find((variantQty) => {\n      if (variantQty.id === this.currentVariant.id) {\n        variantQuantity = variantQty.qty;\n      }\n    });\n\n\n    const saleBadge = this.badges.querySelector(\".product__badge--sale\");\n\n    if (saleBadge) {\n      const saleValueBlock = saleBadge.querySelector(\".sale-value\");\n      const type = saleBadge.dataset.type;\n\n      if (compareAtPrice && compareAtPrice > price) {\n        if (type !== \"text\") {\n          let value = Shopify.formatMoney(compareAtPrice - price, window.settings.moneyFormat);\n\n          if (type === \"percent\") {\n            value = `${Math.floor(((compareAtPrice - price) / compareAtPrice) * 100)}%`;\n          }\n\n          saleValueBlock.innerHTML = value;\n        }\n\n        saleBadge.classList.remove(\"!hidden\");\n      } else {\n        saleBadge.classList.add(\"!hidden\");\n      }\n    }\n\n\n    const soldOutBadge = this.badges.querySelector(\".product__badge--sold-out\");\n\n    if (soldOutBadge) {\n      let isSoldOut = false;\n\n      if (this.currentVariant.inventory_management !== null && !this.currentVariant.available) {\n        isSoldOut = true;\n      }\n\n      if (isSoldOut) {\n        soldOutBadge.classList.remove(\"!hidden\");\n      } else {\n        soldOutBadge.classList.add(\"!hidden\");\n      }\n    }\n\n\n    const preOrderBadge = this.badges.querySelector(\".product__badge--pre-order\");\n\n    if (preOrderBadge) {\n      let isPreOrder = false;\n\n      if (this.currentVariant.available && variantQuantity < 1) {\n        isPreOrder = true;\n      }\n\n      if (isPreOrder) {\n        preOrderBadge.classList.remove(\"!hidden\");\n      } else {\n        preOrderBadge.classList.add(\"!hidden\");\n      }\n    }\n  }\n\n  renderBtnStatus() {\n    if (!this.atcButton || !this.atcButtonLabel || !this.stickyAtcButton || !this.stickyAtcButtonLabel) {\n      return;\n    }\n\n    let variantQuantity = 0;\n\n    this.variantQtyData.find((variantQty) => {\n      if (variantQty.id === this.currentVariant.id) {\n        variantQuantity = variantQty.qty;\n      }\n    });\n\n    let buttonIsDisabled = false;\n    let buttonLabel = window.variantStrings.addToCart;\n\n    if (this.currentVariant.inventory_management !== null) {\n      if (this.currentVariant.available) {\n        if (variantQuantity < 1) {\n          buttonLabel = window.variantStrings.preOrder;\n        }\n      } else {\n        buttonIsDisabled = true;\n        buttonLabel = window.variantStrings.soldOut;\n      }\n    }\n\n    if (this.atcButton) {\n      this.atcButton.disabled = buttonIsDisabled;\n    }\n\n    if (this.atcButtonLabel) {\n      this.atcButtonLabel.innerHTML = buttonLabel;\n    }\n\n    if (this.stickyAtcButton) {\n      this.stickyAtcButton.disabled = buttonIsDisabled;\n    }\n\n    if (this.stickyAtcButtonLabel) {\n      this.stickyAtcButtonLabel.innerHTML = buttonLabel;\n    }\n  }\n\n  updateVariantStatuses() {\n    const selectedOptionOneVariants = this.variantData.filter((variant) => {\n      return this.querySelector(\":checked\").value === variant.option1;\n    });\n\n    const inputWrappers = [...this.querySelectorAll(\".product-form__input\")];\n\n    inputWrappers.forEach((option, index) => {\n      if (index === 0) {\n        return;\n      }\n\n      const optionInputs = [...option.querySelectorAll('input[type=\"radio\"], option')];\n      const previousOptionSelected = inputWrappers[index - 1].querySelector(\":checked\").value;\n\n      const availableOptionInputsValue = selectedOptionOneVariants.filter((variant) => {\n        return variant.available && variant[`option${index}`] === previousOptionSelected;\n      }).map((variantOption) => variantOption[`option${index + 1}`]);\n\n      this.setInputAvailability(optionInputs, availableOptionInputsValue);\n    });\n  }\n\n  setInputAvailability(elementList, availableValuesList) {\n    elementList.forEach((element) => {\n      const value = element.getAttribute(\"value\");\n      const availableElement = availableValuesList.includes(value);\n\n      if (element.tagName === \"INPUT\") {\n        element.classList.toggle(\"option-disabled\", !availableElement);\n      } else if (element.tagName === \"OPTION\") {\n        element.innerText = availableElement ? value : window.variantStrings.unavailableWithOption.replace(\"[value]\", value);\n      }\n    });\n  }\n\n  updateOptions() {\n    this.options = [];\n\n    Array.from(this.querySelectorAll(\"select, fieldset\"), (element) => {\n      if (element.tagName === \"SELECT\") {\n        this.options.push(element.value);\n      } else if (element.tagName === \"FIELDSET\") {\n        const optionName = Array.from(element.querySelectorAll(\"input\")).find((radio) => {\n          return radio.checked;\n        })?.value;\n\n        if (optionName) {\n          this.options.push(optionName);\n        }\n      }\n    });\n  }\n\n  updateMasterId() {\n    this.currentVariant = this.getVariantData().find((variant) => {\n      return !variant.options.map((option, index) => {\n        return this.options[index] === option;\n      }).includes(false);\n    });\n  }\n\n  updateURL() {\n    if (!this.currentVariant || this.dataset.updateUrl === \"false\") {\n      return;\n    }\n\n    window.history.replaceState({}, \"\", `${location.origin}${location.pathname}?variant=${this.currentVariant.id}`);\n  }\n\n  updateVariantInput() {\n    if (!this.inputId) {\n      return;\n    }\n\n    this.inputId.value = this.currentVariant.id;\n    this.inputId.dispatchEvent(new Event(\"change\", { bubbles: true }));\n  }\n\n  updatePickupAvailability() {\n    const pickUpAvailability = document.querySelector(\"pickup-availability\");\n\n    if (!pickUpAvailability) {\n      return;\n    }\n\n    if (this.currentVariant && this.currentVariant.available) {\n      if (pickUpAvailability.fetchAvailability) {\n        pickUpAvailability.fetchAvailability(this.currentVariant.id);\n      }\n    } else {\n      pickUpAvailability.removeAttribute(\"available\");\n      pickUpAvailability.innerHTML = \"\";\n    }\n  }\n\n  getVariantData() {\n    const jsonContent = this.querySelector('[type=\"application/json\"]');\n\n    this.variantData = this.variantData || (jsonContent ? JSON.parse(jsonContent.textContent) : []);\n\n    return this.variantData;\n  }\n}\n\n\nclass ProductForm extends ModalBase {\n  constructor() {\n    super();\n\n    this.form = this.querySelector(\"form\");\n    this.form.querySelector(\"[name=id]\").disabled = false;\n    this.cart = document.querySelector(\"cart-page, cart-drawer\");\n    this.submitButton = this.querySelector('[type=\"submit\"]');\n    this.hideErrors = this.dataset.hideErrors === \"true\";\n    this.productItem = this.form.closest(\".product-item\");\n\n    this.form.addEventListener(\"submit\", this.onSubmitHandler.bind(this));\n  }\n\n  onSubmitHandler(evt) {\n    evt.preventDefault();\n\n    if (this.submitButton.getAttribute(\"aria-disabled\") === \"true\") {\n      return;\n    }\n\n    this.activeElement = evt.submitter || evt.currentTarget;\n\n    this.handleErrorMessage();\n    this.submitButton.setAttribute(\"aria-disabled\", \"true\");\n    this.submitButton.classList.add(\"loading\");\n\n    const config = theme.helpers.fetchConfig(\"javascript\");\n\n    config.headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\n    delete config.headers[\"Content-Type\"];\n\n    const formData = new FormData(this.form);\n    const productInfo = this.form.closest(\".product__information\");\n\n    productInfo?.querySelectorAll(\".product-property input\").forEach((property) => {\n      if (property.classList.contains(\"text\") && property.value) {\n        formData.append(property.name, property.value);\n      }\n    });\n\n    if (this.cart) {\n      formData.append(\"sections\", this.cart.getSectionsToRender().map((section) => section.name));\n      formData.append(\"sections_url\", window.location.pathname);\n    }\n\n    const isCartPage = document.body.classList.contains(\"template-cart\");\n\n    if (isCartPage) {\n      formData.append(\"sections\", this.getMainCartSectionRender().map((section) => section.name));\n    }\n\n    config.body = formData;\n\n    if (this.cart) {\n      this.cart.classList.add(\"loading\");\n    }\n\n    fetch(`${window.routes.cartAddUrl}`, config)\n      .then((response) => response.json())\n      .then((response) => {\n        if (response.status) {\n          document.dispatchEvent(new CustomEvent(\"theme:product:error\", {\n            detail: {\n              productVariantId: +formData.get(\"id\"),\n              errors: response.errors || response.description,\n              message: response.message,\n            }\n          }));\n\n          this.handleErrorMessage(response.description);\n\n          if (this.productItem) {\n            this.handleErrorMessagePopup(response.description);\n          }\n\n          return;\n        } else if (response.sections) {\n          if (!response.id && !response.items) {\n            this.handleErrorMessagePopup(window.cartStrings.error);\n\n            return;\n          }\n        } else if (!this.cart) {\n          window.location = window.routes.cartUrl;\n\n          return;\n        }\n\n        fetch(`${window.routes.cartUrl}.json`)\n          .then((res) => res.json())\n          .then((cart) => {\n            document.dispatchEvent(new CustomEvent(\"theme:cart:count:update\", {\n              detail: {\n                count: cart.item_count\n              }\n            }));\n\n            const freeShippingBar = document.querySelector(\"free-shipping-bar\");\n\n            if (freeShippingBar) {\n              freeShippingBar.init(cart.items_subtotal_price);\n            }\n          })\n          .catch((error) => {\n            throw error;\n          });\n\n        document.dispatchEvent(new CustomEvent(\"theme:product:added\", {\n          detail: {\n            productVariantId: +formData.get(\"id\")\n          }\n        }));\n\n        const quickViewModals = document.querySelectorAll(\".modal--visible.modal.quickview\");\n\n        quickViewModals.forEach((modal) => {\n          const closeButton = modal.querySelector(\".modal__close\");\n\n          if (closeButton) {\n            closeButton.dispatchEvent(new Event(\"click\"));\n          }\n        });\n\n        const isCartPage = document.body.classList.contains(\"template-cart\");\n\n        if (!isCartPage) {\n          if (!response.errors) {\n            this.cart.getSectionsToRender().forEach((section) => {\n              const html = new DOMParser().parseFromString(response.sections[section.name], \"text/html\");\n              const currentSection = document.getElementById(section.id).querySelector(\"#cart-drawer-form\");\n\n              const currentProducts = currentSection.querySelector(\".cart-drawer__products\");\n              const currentFooter = currentSection.querySelector(\".cart-drawer__footer\");\n\n              const parsedProducts = html.querySelector(\".cart-drawer__products\");\n              const parsedFooter = html.querySelector(\".cart-drawer__footer\");\n\n              if (currentFooter && parsedFooter) {\n                let productsRange = document.createRange();\n                let footerRange = document.createRange();\n\n                productsRange = productsRange.createContextualFragment(parsedProducts.innerHTML);\n                footerRange = footerRange.createContextualFragment(parsedFooter.innerHTML);\n\n                currentProducts.replaceChildren(productsRange);\n                currentFooter.replaceChildren(footerRange);\n              } else {\n                currentSection.innerHTML = html.querySelector(\"#cart-drawer-form\").innerHTML;\n              }\n            });\n\n            this.cart.initCartActions();\n\n            if (this.cart && this.cart.classList.contains(\"is-empty\")) {\n              this.cart.classList.remove(\"is-empty\");\n            }\n\n            this.cart.open(this.activeElement);\n\n            document.dispatchEvent(new CustomEvent(\"hover-button:apply\"));\n          }\n        } else {\n          if (!response.errors) {\n            this.getMainCartSectionRender().forEach((section) => {\n              const html = new DOMParser().parseFromString(response.sections[section.name], \"text/html\");\n              const currentSection = document.getElementById(section.id);\n\n              const currentProducts = currentSection.querySelector(\".main-cart__content\");\n              const currentTotals = currentSection.querySelector(\".cart-info .totals\");\n              const currentDiscounts = currentSection.querySelector(\".cart-page__discounts\");\n\n              const parsedTotals = html.querySelector(\".cart-info .totals\");\n              const parsedProducts = html.querySelector(\".main-cart__content\");\n              const parsedDiscounts = html.querySelector(\".cart-page__discounts\");\n\n              currentProducts.innerHTML = parsedProducts.innerHTML;\n              currentTotals.innerHTML = parsedTotals.innerHTML;\n\n              if (currentDiscounts && parsedDiscounts) {\n                currentDiscounts.innerHTML = parsedDiscounts.innerHTML;\n              }\n\n              const focusableElement = currentProducts?.querySelector(\"a\");\n\n              focusableElement?.focus();\n            });\n\n            this.cart.initCartActions();\n\n            document.dispatchEvent(new CustomEvent(\"hover-button:apply\"));\n          }\n        }\n      })\n      .catch((e) => {\n        console.error(e);\n      })\n      .finally(() => {\n        this.cart?.classList.remove(\"loading\");\n        this.submitButton.classList.remove(\"loading\");\n\n        if (this.cart && this.cart.classList.contains(\"is-empty\")) {\n          this.cart.classList.remove(\"is-empty\");\n        }\n\n        this.submitButton.removeAttribute(\"aria-disabled\");\n      });\n  }\n\n  getMainCartSectionRender() {\n    return [\n      {\n        name: \"main-cart-items\",\n        id: \"CartPage\",\n      },\n    ];\n  }\n\n  handleErrorMessage(errorMessage = false) {\n    if (this.hideErrors) {\n      return;\n    }\n\n    this.errorMessageWrapper = this.errorMessageWrapper || this.querySelector(\".product-form__error-message-wrapper\");\n\n    if (!this.errorMessageWrapper) {\n      return;\n    }\n\n    this.errorMessage = this.errorMessage || this.errorMessageWrapper.querySelector(\"span\");\n\n    this.errorMessageWrapper.classList.toggle(\"!hidden\", !errorMessage);\n\n    if (errorMessage) {\n      this.errorMessage.textContent = errorMessage;\n    }\n  }\n\n  handleErrorMessagePopup(errorMessage = false) {\n    const url = `${window.location.pathname}?section_id=form-message`;\n\n    fetch(url)\n      .then((response) => response.text())\n      .then((responseText) => {\n        const html = new DOMParser().parseFromString(responseText, \"text/html\");\n        const elementErrorMessage = html.querySelector(\".product-form__error-message-wrapper\");\n        const elementMessage = elementErrorMessage.querySelector(\".product-form__error-message\");\n\n        elementMessage.textContent = errorMessage;\n\n        showToast(elementErrorMessage.innerHTML, 5000, \"modal-error\");\n      })\n      .catch((e) => {\n        throw e;\n      });\n  }\n}\n\nif (!window.customElements.get(\"product-form\")) {\n  customElements.define(\"product-form\", ProductForm);\n}\n\n\nclass CheckoutDynamicButtons extends HTMLElement {\n  constructor() {\n    super();\n\n    this.addFlairToButton();\n  }\n\n  connectedCallback() {\n    this.addFlairToButton();\n  }\n\n  addFlairToButton() {\n    const buyNow = this.querySelector(\".shopify-payment-button__button--unbranded\");\n\n    if (buyNow) {\n      const hasFlair = buyNow.querySelector(\".button__flair\");\n\n      if (hasFlair) {\n        return;\n      }\n\n      buyNow.innerHTML = `<span class=\"button__inner\">${buyNow.innerHTML}</span>`;\n      buyNow.insertAdjacentHTML(\"afterbegin\", `<span class=\"button__flair\"></span>`);\n\n      document.dispatchEvent(new CustomEvent(\"hover-button:apply\"));\n    } else {\n      const mutationObserver = new MutationObserver((mutations) => {\n        const buyNow = this.querySelector(\".shopify-payment-button__button--unbranded\");\n\n        if (!buyNow) {\n          return;\n        }\n\n        const hasFlair = buyNow.querySelector(\".button__flair\");\n\n        if (hasFlair) {\n          return;\n        }\n\n        buyNow.innerHTML = `<span class=\"button__inner\">${buyNow.innerHTML}</span>`;\n        buyNow.insertAdjacentHTML(\"afterbegin\", `<span class=\"button__flair\"></span>`);\n\n        document.dispatchEvent(new CustomEvent(\"hover-button:apply\"));\n\n        mutationObserver.disconnect();\n      });\n\n      mutationObserver.observe(this, {\n        childList: true,\n        subtree: true\n      });\n    }\n  }\n}\n\nif (!window.customElements.get(\"checkout-dynamic-buttons\")) {\n  customElements.define(\"checkout-dynamic-buttons\", CheckoutDynamicButtons);\n}\n\n\nclass PaymentTerms extends HTMLElement {\n  constructor() {\n    super();\n\n    this.formId = this.getAttribute(\"form\");\n    this.form = document.forms[this.formId];\n\n    this.handleVariantChangeListener = this.handleVariantChange.bind(this);\n  }\n\n  connectedCallback() {\n    this.form?.addEventListener(\"variant:change\", this.handleVariantChangeListener);\n  }\n\n  disconnectedCallback() {\n    this.form?.removeEventListener(\"variant:change\", this.handleVariantChangeListener);\n  }\n\n  handleVariantChange(event) {\n    const variant = event.detail.variant;\n\n    if (variant) {\n      const element = this.querySelector('[name=\"id\"]');\n\n      element.value = event.detail.variant[\"id\"];\n      element.dispatchEvent(new Event(\"change\", { bubbles: true }));\n    }\n  }\n}\n\nif (!window.customElements.get(\"payment-terms\")) {\n  customElements.define(\"payment-terms\", PaymentTerms);\n}\n\n\nclass VariantRadios extends SwatchFunctions {\n  constructor() {\n    super();\n  }\n\n  init() {\n    this.querySelectorAll(\".product__color-swatch-option\").forEach((btn) => {\n      this.checkSwatches(btn);\n\n      btn.addEventListener(\"click\", this.onVariantChange.bind(this), false);\n    });\n  }\n\n  onVariantChange(e) {\n    e.preventDefault();\n\n    const target = e.currentTarget;\n\n    this.productTarget = this.closest(\".product-container\");\n    this.swatchPosition = target.dataset.position;\n\n    const variantQtyData = JSON.parse(this.productTarget.querySelector(\".productItemVariantsQty\").textContent);\n\n    if (!target.classList.contains(\"active\")) {\n      const activeSwatches = target.closest(\".product__color-swatches\").querySelectorAll(\".product__color-swatch-option\");\n\n      activeSwatches.forEach((el) => {\n        el.classList.remove(\"active\");\n      });\n\n      target.classList.toggle(\"active\");\n\n      this.groupFunctionsInit(this.getVariantData());\n\n      if (this.currentVariant) {\n        this.groupFunctionsAvailable(variantQtyData);\n      }\n    }\n  }\n\n  groupFunctionsInit(variantData) {\n    this.updateOptions();\n    this.updateMasterId(variantData);\n  }\n\n  groupFunctionsAvailable(variantQtyData) {\n    this.updateMedia();\n  }\n\n  updateMasterId(variantData) {\n    return (this.currentVariant = variantData.find((variant) => {\n      return !variant.options.map((option, index) => {\n        return this.options[index] === option;\n      }).includes(false);\n    }));\n  }\n\n  updateOptions() {\n    this.options = Array.from(this.productTarget.querySelectorAll(\".product__color-swatch-option.active\"), (select) => {\n      select.getAttribute(\"data-value\");\n    });\n\n    if (!this.variantData) {\n      return;\n    }\n\n    this.variantData.find((variant) => {\n      if (this.options.length === 1) {\n        const variantOptions = {\n          1: variant.option1,\n          2: variant.option2,\n          3: variant.option3,\n        };\n\n        if (variantOptions[this.swatchPosition] === this.options[0]) {\n          this.options = variant.options;\n        }\n      }\n    });\n  }\n\n  updateMedia() {\n    if (!this.currentVariant) {\n      return;\n    }\n\n    if (!this.productTarget.querySelector(\".product__media img\").classList.contains(\"hidden\")) {\n      const productItem = this.productTarget.querySelector(\".product__media img\").closest('.product-item');\n\n      if (productItem.querySelector('video') || productItem.querySelector('iframe')) {\n        this.productTarget.querySelector(\".product__media img\").classList.add(\"hidden\");\n\n        productItem.querySelector('video')?.classList.remove(\"hidden\");\n        productItem.querySelector('iframe')?.classList.remove(\"hidden\");\n      }\n    }\n\n    if (!this.currentVariant.featured_media) {\n      return;\n    }\n\n    if (this.productTarget.querySelector(\".product__media img\")) {\n      this.productTarget.querySelector(\".product__media img\").removeAttribute(\"srcset\");\n    }\n\n    if (this.productTarget.querySelector(\".product__media img\")) {\n      this.productTarget.querySelector(\".product__media img\").setAttribute(\"src\", this.currentVariant.featured_media.preview_image.src);\n    }\n\n    if (this.productTarget.querySelector(\".product__media img\").classList.contains(\"hidden\")) {\n      this.productTarget.querySelector(\".product__media img\").classList.remove(\"hidden\");\n\n      const productItem = this.productTarget.querySelector(\".product__media img\").closest('.product-item');\n\n      if (productItem.querySelector(\"video\") || productItem.querySelector(\"iframe\")) {\n        productItem.querySelector(\"video\")?.classList.add(\"hidden\");\n        productItem.querySelector(\"iframe\")?.classList.add(\"hidden\");\n      }\n    }\n  }\n}\n\nif (!window.customElements.get(\"variant-radios\")) {\n  customElements.define(\"variant-radios\", VariantRadios);\n}\n\n\nclass VariantRadiosDetail extends SwatchFunctions {\n  constructor() {\n    super();\n  }\n\n  groupFunctionsAvailable(variantQtyData, target) {\n    this.updateURL();\n    this.updateVariantInput();\n    this.renderProductInformation(this.productTarget, variantQtyData, target);\n    this.updateMedia();\n    this.setAvailable();\n  }\n}\n\nif (!window.customElements.get(\"variant-radios-detail\")) {\n  customElements.define(\"variant-radios-detail\", VariantRadiosDetail);\n}\n\n\nclass SalePrice extends HTMLElement {\n  constructor() {\n    super();\n\n    this.formId = this.getAttribute(\"form\");\n    this.form = document.forms[this.formId];\n    this.priceValue = this.querySelector(\"[data-price-value]\");\n\n    this.handleVariantChangeListener = this.handleVariantChange.bind(this);\n  }\n\n  connectedCallback() {\n    this.form?.addEventListener(\"variant:change\", this.handleVariantChangeListener);\n  }\n\n  disconnectedCallback() {\n    this.form?.removeEventListener(\"variant:change\", this.handleVariantChangeListener);\n  }\n\n  handleVariantChange(e) {\n    const variant = e.detail.variant;\n\n    if (!variant) {\n      return;\n    }\n\n    const formattedPrice = Shopify.formatMoney(variant.price, window.settings.moneyFormat);\n\n    if (variant.compare_at_price) {\n      this.classList.add(\"color-sale-price\", \"medium-weight\");\n    } else {\n      this.classList.remove(\"color-sale-price\", \"medium-weight\");\n    }\n\n    if (!this.priceValue) {\n      return;\n    }\n\n    this.priceValue.innerText = formattedPrice;\n  }\n}\n\nif (!window.customElements.get(\"sale-price\")) {\n  customElements.define(\"sale-price\", SalePrice);\n}\n\n\nclass CompareAtPrice extends HTMLElement {\n  constructor() {\n    super();\n\n    this.formId = this.getAttribute(\"form\");\n    this.form = document.forms[this.formId];\n    this.priceValue = this.querySelector(\"[data-price-value]\");\n\n    this.handleVariantChangeListener = this.handleVariantChange.bind(this);\n  }\n\n  connectedCallback() {\n    this.form?.addEventListener(\"variant:change\", this.handleVariantChangeListener);\n  }\n\n  disconnectedCallback() {\n    this.form?.removeEventListener(\"variant:change\", this.handleVariantChangeListener);\n  }\n\n  handleVariantChange(e) {\n    const variant = e.detail.variant;\n\n    if (!variant) {\n      return;\n    }\n\n    const formattedPrice = Shopify.formatMoney(variant.compare_at_price, window.settings.moneyFormat);\n\n    if (!this.priceValue) {\n      return;\n    }\n\n    this.priceValue.innerText = formattedPrice;\n\n    if (variant.compare_at_price > variant.price) {\n      this.removeAttribute(\"hidden\");\n    } else {\n      this.setAttribute(\"hidden\", \"hidden\");\n    }\n  }\n}\n\nif (!window.customElements.get(\"compare-at-price\")) {\n  customElements.define(\"compare-at-price\", CompareAtPrice);\n}\n\n\nclass UnitPrice extends HTMLElement {\n  constructor() {\n    super();\n\n    this.formId = this.getAttribute(\"form\");\n    this.form = document.forms[this.formId];\n    this.unitPrice = this.querySelector(\"[data-unit-price]\");\n    this.unit = this.querySelector(\"[data-unit]\");\n\n    this.handleVariantChangeListener = this.handleVariantChange.bind(this);\n  }\n\n  connectedCallback() {\n    this.form?.addEventListener(\"variant:change\", this.handleVariantChangeListener);\n  }\n\n  disconnectedCallback() {\n    this.form?.removeEventListener(\"variant:change\", this.handleVariantChangeListener);\n  }\n\n  handleVariantChange(e) {\n    const variant = e.detail.variant;\n\n    if (!variant || !variant.unit_price) {\n      this.setAttribute(\"hidden\", \"hidden\");\n\n      return;\n    }\n\n    const variantReferenceValue = variant.unit_price_measurement.reference_value;\n    const referenceValue = variantReferenceValue !== 1 ? variantReferenceValue : \"\";\n    const referenceUnit = variant.unit_price_measurement.reference_unit;\n    const unitPrice = variant.unit_price;\n\n    this.unitPrice.innerText = Shopify.formatMoney(unitPrice, window.settings.moneyFormat);\n    this.unit.innerText = `${referenceValue} ${referenceUnit}`;\n\n    this.removeAttribute(\"hidden\");\n  }\n}\n\nif (!window.customElements.get(\"unit-price\")) {\n  customElements.define(\"unit-price\", UnitPrice);\n}\n\n\nclass PredictiveSearch extends HTMLElement {\n  constructor() {\n    super();\n\n    this.main = document.getElementById(\"MainContent\");\n    this.form = this.querySelector(\"form\");\n    this.input = this.querySelector(\"input[type='search']\");\n    this.inputPlaceholder2 = this.input.getAttribute(\"data-placeholder-2\");\n    this.inputPlaceholder3 = this.input.getAttribute(\"data-placeholder-3\");\n    this.enableTypewriterEffect = this.hasAttribute(\"data-enable-typewriter-effect\");\n    this.collectionsColorScheme = this.getAttribute(\"data-collections-color-scheme\") || \"default\";\n\n    this.clearAllButton = this.querySelector(\".predictive-search__clear-button\");\n    this.popularTermsWrapper = this.querySelector(\"#search-suggestions\");\n    this.linksWrapper = this.querySelector(\"#search-links\");\n    this.productsWrapper = this.querySelector(\"#search-products\");\n    this.popularTerms = this.popularTermsWrapper?.querySelectorAll(\"a\");\n    this.predictiveSearchResults = this.querySelector(\"#predictive-search\");\n    this.predictiveSearchDropdown = this.querySelector(\".search-page__dropdown\");\n    this.predictiveSearchOverlay = this.querySelector(\"overlay-component\");\n\n    if (this.enableTypewriterEffect) {\n      this.addTypewriterEffectToInput();\n    }\n\n    this.setupEventListeners();\n  }\n\n  setupEventListeners() {\n    this.popularTerms?.forEach((suggestion) => {\n      suggestion.addEventListener(\"click\", () => {\n        this.input.value = suggestion.dataset.term;\n\n        this.input.dispatchEvent(new Event(\"input\"));\n      });\n    });\n\n    this.input.addEventListener(\"input\", theme.helpers.debounce((event) => {\n      this.onChange(event);\n    }, 300).bind(this));\n\n    this.input.addEventListener(\"focus\", this.onFocus.bind(this));\n\n    document.addEventListener(\"focusin\", () => {\n      if (!document.activeElement.closest(\".search-page__dropdown\") && !document.activeElement.closest(\"predictive-search\") && !document.activeElement.closest(\".modal.quickview\")) {\n        this.predictiveSearchDropdown?.classList.add(\"invisible\");\n        this.classList.remove(\"predictive-search--show-overlay\");\n        this.main.style.zIndex = \"1\";\n      }\n    });\n\n    this.predictiveSearchOverlay?.addEventListener(\"click\", () => {\n      this.predictiveSearchDropdown?.classList.add(\"invisible\");\n      this.classList.remove(\"predictive-search--show-overlay\");\n      this.main.style.zIndex = \"1\";\n    });\n\n    this.clearAllButton.addEventListener(\"click\", () => {\n      this.input.value = \"\";\n      this.predictiveSearchResults.classList.remove(\"results\");\n      this.popularTermsWrapper?.classList.remove(\"!hidden\");\n      this.linksWrapper?.classList.remove(\"!hidden\");\n      this.productsWrapper?.classList.remove(\"!hidden\");\n      this.clearAllButton.classList.add(\"!hidden\");\n      this.clearAllButton.setAttribute(\"disabled\", \"disabled\");\n      this.predictiveSearchDropdown?.classList.add(\"invisible\");\n      this.classList.remove(\"predictive-search--show-overlay\");\n      this.main.style.zIndex = \"1\";\n\n      this.dispatchEvent(new CustomEvent(\"theme:predictive-search:no-results\"));\n    });\n\n    document.addEventListener(\"focusout\", this.onFocusOut.bind(this));\n  }\n\n  onFocus() {\n    const searchTerm = this.getQuery();\n\n    this.classList.add(\"predictive-search--show-overlay\");\n    this.main.style.zIndex = \"10\";\n\n    if (!searchTerm.length) {\n      return;\n    }\n\n    if (this.predictiveSearchResults.classList.contains(\"results\")) {\n      this.open();\n    } else {\n      this.getSearchResults(searchTerm);\n    }\n\n    this.clearAllButton.classList.remove(\"!hidden\");\n    this.clearAllButton.removeAttribute(\"disabled\");\n    this.predictiveSearchDropdown?.classList.remove(\"invisible\");\n  }\n\n  onFocusOut() {\n    setTimeout(() => {\n      if (!document.contains(document.activeElement)) {\n        this.close();\n      }\n    });\n  }\n\n  onChange() {\n    const searchTerm = this.getQuery();\n\n    if (!searchTerm.length) {\n      this.clearAllButton.classList.add(\"!hidden\");\n      this.clearAllButton.setAttribute(\"disabled\", \"disabled\");\n      this.close();\n\n      return;\n    }\n\n    this.clearAllButton.classList.remove(\"!hidden\");\n    this.clearAllButton.removeAttribute(\"disabled\");\n\n    this.getSearchResults(searchTerm);\n  }\n\n  getSearchResults(searchTerm) {\n    const cachedResults = {};\n    const queryKey = searchTerm.replace(\" \", \"+\").toLowerCase();\n\n    this.setLiveRegionLoadingState();\n\n    if (cachedResults[queryKey]) {\n      this.renderSearchResults(cachedResults[queryKey]);\n\n      return;\n    }\n\n    fetch(`${window.routes.predictiveSearchUrl}?q=${queryKey}&resources[options][fields]=title,tag,vendor,product_type,variants.title,variants.sku&resources[options][prefix]=last&resources[options][unavailable_products]=last&resources[type]=query,product,collection,page,article&section_id=search-predictive-grid`)\n      .then((response) => {\n        if (!response.ok) {\n          throw new Error(response.status);\n        }\n\n        return response.text();\n      })\n      .then((text) => {\n        const results = new DOMParser().parseFromString(text, \"text/html\").querySelector(`#shopify-section-search-predictive-grid`);\n        const resultsMarkup = results.innerHTML;\n        const noResults = results.querySelector(\".no-results\");\n\n        cachedResults[queryKey] = resultsMarkup;\n\n        this.renderSearchResults(resultsMarkup);\n\n        if (noResults) {\n          this.dispatchEvent(new CustomEvent(\"theme:predictive-search:no-results\"));\n        } else {\n          this.dispatchEvent(new CustomEvent(\"theme:predictive-search:has-results\"));\n        }\n\n        document.dispatchEvent(new CustomEvent(\"hover-button:apply\"));\n      })\n      .catch((error) => {\n        this.close();\n\n        throw error;\n      });\n  }\n\n  renderSearchResults(resultsMarkup) {\n    this.predictiveSearchResults.innerHTML = resultsMarkup;\n    this.predictiveSearchResults.classList.add(\"results\");\n\n    const collectionItems = this.predictiveSearchResults.querySelectorAll(\".collection-item\");\n\n    collectionItems.forEach((item) => {\n      item.classList.add(`color-${this.collectionsColorScheme}`);\n    });\n\n    this.popularTermsWrapper?.classList.add(\"!hidden\");\n    this.linksWrapper?.classList.add(\"!hidden\");\n    this.productsWrapper?.classList.add(\"!hidden\");\n\n    this.setLiveRegionResults();\n    this.open();\n\n    this.popularTerms?.forEach((suggestion) => {\n      const flair = suggestion.querySelector(\".button__flair\");\n\n      flair.style.transform = \"translate(50%, 50%) scale(0)\"\n    });\n\n    this.predictiveSearchDropdown?.classList.remove(\"invisible\");\n    this.classList.add(\"predictive-search--show-overlay\");\n  }\n\n  setLiveRegionLoadingState() {\n    this.form.classList.add(\"loading\");\n    this.predictiveSearchResults.classList.add(\"loading\");\n  }\n\n  setLiveRegionResults() {\n    this.form.classList.remove(\"loading\");\n    this.predictiveSearchResults.classList.remove(\"loading\");\n  }\n\n  getQuery() {\n    return this.input.value.trim();\n  }\n\n  open() {\n    this.input.setAttribute(\"aria-expanded\", \"true\");\n  }\n\n  close(clearSearchTerm = false) {\n    if (clearSearchTerm) {\n      this.input.value = \"\";\n      this.predictiveSearchResults.classList.remove(\"results\");\n      this.popularTermsWrapper?.classList.remove(\"!hidden\");\n      this.linksWrapper?.classList.remove(\"!hidden\");\n      this.productsWrapper?.classList.remove(\"!hidden\");\n    }\n\n    const selected = this.querySelector(\"[aria-selected='true']\");\n\n    if (selected) {\n      selected.setAttribute(\"aria-selected\", \"false\");\n    }\n\n    this.input.setAttribute(\"aria-activedescendant\", \"\");\n    this.input.setAttribute(\"aria-expanded\", \"false\");\n\n    this.predictiveSearchDropdown?.classList.add(\"invisible\");\n\n    this.dispatchEvent(new CustomEvent(\"theme:predictive-search:no-results\"));\n  }\n\n  addTypewriterEffectToInput() {\n    if (!this.inputPlaceholder2 || !this.inputPlaceholder3) {\n      return;\n    }\n\n    const typingSpeed = this.input.dataset.typingSpeed || 100;\n    const deletingSpeed = this.input.dataset.deletingSpeed || 60;\n    const delayAfterDeleting = this.input.dataset.delayAfterDeleting || 500;\n    const delayBeforeFirstDelete = this.input.dataset.delayBeforeFirstDelete || 2000;\n    const delayAfterWordTyped = this.input.dataset.delayAfterWordTyped || 2400;\n    const placeholders = [];\n\n    if (this.input.getAttribute(\"placeholder\")) {\n      placeholders.push(this.input.getAttribute(\"placeholder\"));\n    }\n\n    if (this.inputPlaceholder2) {\n      placeholders.push(this.inputPlaceholder2);\n    }\n\n    if (this.inputPlaceholder3) {\n      placeholders.push(this.inputPlaceholder3);\n    }\n\n    const typeInNextPlaceholder = async (placeholder) => {\n      await new Promise((resolve) => {\n        let currentPlaceholder = this.input.getAttribute(\"placeholder\");\n        let nextPlaceholder = placeholder;\n\n        if (currentPlaceholder.length >= 3 && placeholder.startsWith(currentPlaceholder)) {\n          nextPlaceholder = placeholder.replace(currentPlaceholder, \"\");\n        }\n\n        const typingIntervalId = setInterval(() => {\n          currentPlaceholder = this.input.getAttribute(\"placeholder\");\n\n          this.input.setAttribute(\"placeholder\", currentPlaceholder + nextPlaceholder.charAt(0));\n\n          if (nextPlaceholder.length === 1) {\n            resolve();\n\n            clearInterval(typingIntervalId);\n          } else {\n            nextPlaceholder = nextPlaceholder.substring(1);\n          }\n        }, typingSpeed);\n      });\n    };\n\n    const deleteCurrentPlaceholder = async (nextPlaceholder) => {\n      await new Promise(resolve=>{\n        let prevPlaceholder = this.input.getAttribute(\"placeholder\");\n\n        const deletionIntervalId = setInterval(() => {\n          const newPlaceholder = prevPlaceholder.substring(0, prevPlaceholder.length - 1);\n\n          this.input.setAttribute(\"placeholder\", newPlaceholder);\n\n          prevPlaceholder = newPlaceholder;\n\n          if (prevPlaceholder.length === 0 || prevPlaceholder.length >= 3 && nextPlaceholder.startsWith(prevPlaceholder)) {\n            resolve();\n            clearInterval(deletionIntervalId);\n          }\n        }, deletingSpeed)\n      });\n    };\n\n    let startIndex = 0;\n\n    const showNextPlaceholder = () => {\n      startIndex = (startIndex + 1) % placeholders.length;\n\n      const nextPlaceholder = placeholders[startIndex];\n\n      deleteCurrentPlaceholder.call(this, nextPlaceholder).then(() => {\n        setTimeout(() => {\n          typeInNextPlaceholder.call(this, nextPlaceholder).then(() => {\n            setTimeout(showNextPlaceholder.bind(this), delayAfterWordTyped);\n          });\n        }, delayAfterDeleting);\n      });\n    };\n\n    setTimeout(showNextPlaceholder.bind(this), delayBeforeFirstDelete);\n  }\n}\n\nif (!window.customElements.get(\"predictive-search\")) {\n  customElements.define(\"predictive-search\", PredictiveSearch);\n}\n\n\nclass DisclosureItem extends HTMLElement {\n  constructor() {\n    super();\n\n    this.trigger = this.getAttribute(\"trigger\") || \"click\";\n    this.button = this.querySelector(\".disclosure__button\");\n    this.listWrapper = this.querySelector(\".disclosure__list-wrapper\");\n    this.list = this.querySelector(\".disclosure__list\");\n    this.intervalId = null;\n    this.isClicked = false;\n\n    this.setAttribute(\"aria-expanded\", \"false\");\n\n    document.addEventListener(\"keyup\", this.onContainerKeyUp.bind(this));\n\n    if (this.trigger === \"hover\") {\n      this.button.addEventListener(\"mouseenter\", this.openSelector.bind(this));\n      this.button.addEventListener(\"mouseleave\", this.handleMouseLeave.bind(this));\n      this.listWrapper.addEventListener(\"mouseenter\", this.handleContentMouseEnter.bind(this));\n      this.listWrapper.addEventListener(\"mouseleave\", this.handleMouseLeave.bind(this));\n    }\n\n    this.button.addEventListener(\"click\", this.openSelector.bind(this));\n    this.button.addEventListener(\"focus\", this.openSelector.bind(this));\n\n    this.button.addEventListener(\"pointerdown\", () => {\n      this.isClicked = true;\n    });\n\n    document.addEventListener(\"focusin\", this.handleFocusIn.bind(this));\n\n    this.handleBodyClickListener = this.handleBodyClick.bind(this);\n    this.handleTransitionEndListener = this.handleTransitionEnd.bind(this);\n\n    this.updateHeightVariable();\n  }\n\n  handleTransitionEnd(evt) {\n    if (evt.target !== this.listWrapper) {\n      return;\n    }\n\n    if (this.button.classList.contains(\"open\")) {\n      this.classList.add(\"opened\");\n      this.setAttribute(\"aria-expanded\", \"true\");\n    } else {\n      this.closeAllCollapsibleBlocks();\n      this.setAttribute(\"aria-expanded\", \"false\");\n    }\n\n    this.removeEventListener(\"transitionend\", this.handleTransitionEndListener, false);\n  }\n\n  handleContentMouseEnter() {\n    if (this.intervalId) {\n      clearTimeout(this.intervalId);\n\n      this.intervalId = null;\n    }\n  }\n\n  handleMouseLeave() {\n    this.intervalId = setTimeout(this.hidePanel.bind(this), 200);\n  }\n\n  handleFocusIn() {\n    if (!document.activeElement.closest(\"disclosure-item\")) {\n      this.hidePanel();\n    }\n  }\n\n  closeAllCollapsibleBlocks() {\n    const blocks = this.querySelectorAll(\".collapsible-block\");\n\n    blocks.forEach((block) => {\n      const content = block.querySelector(\".collapsible-content\");\n\n      block.classList.remove(\"active\");\n      content.style.display = \"none\";\n    });\n  }\n\n  openSelector(evt, showForce) {\n    if (this.isClicked && evt.type !== \"click\") {\n      return;\n    }\n\n    evt.preventDefault();\n\n    this.isClicked = false;\n\n    this.classList.remove(\"opened\");\n    this.removeEventListener(\"transitionend\", this.handleTransitionEndListener, false);\n\n    if (this.intervalId) {\n      clearTimeout(this.intervalId);\n\n      this.intervalId = null;\n    }\n\n    if (showForce) {\n      const allButtons = document.querySelectorAll(\".disclosure\");\n\n      allButtons.forEach((button) => {\n        button.hidePanel();\n      });\n\n      this.button.classList.add(\"open\");\n\n      document.body.addEventListener(\"click\", this.handleBodyClickListener);\n    } else if (evt.type === \"click\" && this.trigger === \"hover\") {\n      const url = this.dataset.url;\n\n      if (url) {\n        window.location.href = url;\n      } else {\n        if (this.button.classList.contains(\"open\")) {\n          this.button.classList.remove(\"open\");\n        } else {\n          this.button.classList.add(\"open\");\n        }\n      }\n    } else if (this.trigger === \"click\" && this.button.classList.contains(\"open\")) {\n      this.button.classList.remove(\"open\");\n    } else {\n      const allButtons = document.querySelectorAll(\".disclosure\");\n\n      allButtons.forEach((button) => {\n        button.hidePanel();\n      });\n\n      this.button.classList.add(\"open\");\n\n      document.body.addEventListener(\"click\", this.handleBodyClickListener);\n    }\n\n    this.addEventListener(\"transitionend\", this.handleTransitionEndListener, false);\n  }\n\n  hidePanel() {\n    if (this.classList.contains(\"disclosure--not-close\")) {\n      return;\n    }\n\n    document.body.removeEventListener(\"click\", this.handleBodyClickListener);\n    this.removeEventListener(\"transitionend\", this.handleTransitionEndListener, false);\n\n    this.classList.remove(\"opened\");\n    this.button.classList.remove(\"open\");\n\n    this.addEventListener(\"transitionend\", this.handleTransitionEndListener, false);\n  }\n\n  onContainerKeyUp(event) {\n    if (event.code && event.code.toUpperCase() !== \"ESCAPE\") {\n      return;\n    }\n\n    this.hidePanel();\n    this.button.focus();\n  }\n\n  handleBodyClick(evt) {\n    const target = evt.target;\n\n    if (target !== this && !target.closest(\".disclosure\")) {\n      this.hidePanel();\n    }\n  }\n\n  updateHeightVariable() {\n    const resizeObserver = new ResizeObserver((entries) => {\n      for (let entry of entries) {\n        if (entry.target === this.list) {\n          this.style.setProperty(\"--list-height\", `${entry.target.getBoundingClientRect().height}px`);\n        }\n      }\n    });\n\n    resizeObserver.observe(this.list);\n  }\n}\n\nif (!window.customElements.get(\"disclosure-item\")) {\n  customElements.define(\"disclosure-item\", DisclosureItem);\n}\n\n\nclass SwatchDropdownSelect extends DisclosureItem {\n  constructor() {\n    super();\n\n    this.listItems = this.querySelectorAll(\".disclosure__item\");\n\n    this.listItems.forEach((item) => {\n      item.addEventListener(\"click\", () => {\n        this.hidePanel();\n      });\n    });\n  }\n}\n\nif (!window.customElements.get(\"swatch-dropdown-select\")) {\n  customElements.define(\"swatch-dropdown-select\", SwatchDropdownSelect);\n}\n\n\nclass QuantityInput extends HTMLElement {\n  constructor() {\n    super();\n\n    this.input = this.querySelector(\"input\");\n    this.changeEvent = new Event(\"change\", { bubbles: true });\n    this.input.addEventListener(\"change\", this.onInputChange.bind(this));\n    this.input.addEventListener(\"keypress\", this.onKeyPress.bind(this));\n\n    this.querySelectorAll(\"button\").forEach((button) =>\n      button.addEventListener(\"click\", this.onButtonClick.bind(this))\n    );\n  }\n\n  connectedCallback() {\n    this.validateQtyRules();\n  }\n\n  onInputChange() {\n    this.validateQtyRules();\n  }\n\n  onKeyPress(evt) {\n    const isNumberKey = evt.which >= 48 && evt.which <= 57;\n    const isBackspaceOrDelete = evt.which === 8 || evt.which === 0;\n\n    if (!isNumberKey && !isBackspaceOrDelete) {\n      evt.preventDefault();\n    }\n  }\n\n  onButtonClick(event) {\n    event.preventDefault();\n\n    const previousValue = this.input.value;\n\n    event.target.name === \"plus\" || event.target.closest(\"button\").name === \"plus\" ? this.input.stepUp() : this.input.stepDown();\n\n    if (previousValue !== this.input.value) {\n      this.input.dispatchEvent(this.changeEvent);\n    }\n  }\n\n  validateQtyRules() {\n    const value = parseInt(this.input.value);\n\n    if (this.input.min) {\n      const min = parseInt(this.input.min);\n      const buttonMinus = this.querySelector(\".quantity-input__button[name='minus']\");\n\n      buttonMinus.classList.toggle(\"disabled\", value <= min);\n    }\n\n    if (this.input.max) {\n      const max = parseInt(this.input.max);\n      const buttonPlus = this.querySelector(\".quantity-input__button[name='plus']\");\n\n      buttonPlus.classList.toggle(\"disabled\", value >= max);\n    }\n\n    if (Number.isNaN(value)) {\n      this.input.value = \"1\";\n    }\n  }\n}\n\nif (!window.customElements.get(\"quantity-input\")) {\n  customElements.define(\"quantity-input\", QuantityInput);\n}\n\n\nclass ReviewProduct extends HTMLElement {\n  constructor() {\n    super();\n\n    this.section = this.closest(\".main-product__content\");\n    this.productHandle = this.dataset.productHandle;\n    this.type = this.dataset.type;\n    this.class = this.dataset.class || \"\";\n\n    this.fetchDataReviewProduct();\n    this.watchJudgemeReviewWidget();\n  }\n\n  fetchDataReviewProduct() {\n    if (!this.classList.contains(\"review-product-added\")) {\n      return;\n    }\n\n    const productWidget = this.querySelector(\".product-review-json\").innerHTML;\n    const parsedWidget = new DOMParser().parseFromString(productWidget, \"text/html\").querySelector(\".jdgm-prev-badge\");\n\n    if (!parsedWidget) {\n      return;\n    }\n\n    const reviewsText = parsedWidget.innerText;\n    const score = parsedWidget.dataset.averageRating;\n    const scoreFormatted = score.slice(0, score.length - 1);\n    const ratingPercentage = (score / 5) * 100;\n\n    this.classList.remove(\"review-product-added\");\n\n    const filledStar = `\n      <svg width=\"21\" height=\"21\" viewBox=\"0 0 19 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"shrink-0\">\n        <path d=\"M9.58332 3.32332L10.9443 7.39707L15.2981 7.47424L16.082 7.48814L15.4524 7.95361L11.9983 10.507L13.2707 14.6726L13.4994 15.4214L12.8622 14.9665L9.36632 12.4705L5.79807 14.9675L5.15554 15.4172L5.39166 14.6695L6.68497 10.5742L3.20785 7.95258L2.58203 7.48072L3.36625 7.47424L7.65996 7.43876L9.07896 3.32125L9.33468 2.5791L9.58332 3.32332Z\" fill=\"rgb(var(--color-rating))\"/>\n      </svg>\n    `;\n\n    const notFilledStar = `\n      <svg width=\"21\" height=\"21\" viewBox=\"0 0 19 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" class=\"shrink-0\">\n        <path d=\"M9.58332 3.32332L10.9443 7.39707L15.2981 7.47424L16.082 7.48814L15.4524 7.95361L11.9983 10.507L13.2707 14.6726L13.4994 15.4214L12.8622 14.9665L9.36632 12.4705L5.79807 14.9675L5.15554 15.4172L5.39166 14.6695L6.68497 10.5742L3.20785 7.95258L2.58203 7.48072L3.36625 7.47424L7.65996 7.43876L9.07896 3.32125L9.33468 2.5791L9.58332 3.32332Z\" fill=\"rgba(var(--color-text), 0.1)\"/>\n      </svg>\n    `;\n\n    let markup = \"\";\n\n    if (scoreFormatted !== \"0.0\") {\n      markup = `\n        <div class=\"product-review-widget inline-flex flex-wrap align-center lh-1 ${ this.type === 'compact' ? 'gap-5 fs-10' : 'gap-10 fs-14' } ${ this.class }\" style=\"--rating-percentage: ${ratingPercentage}%;\">\n          <span class=\"relative inline-flex align-center\">\n            <span class=\"inline-flex align-center review-stars review-stars--filled\">\n              ${filledStar}\n              ${filledStar}\n              ${filledStar}\n              ${filledStar}\n              ${filledStar}\n            </span>\n            \n            <span class=\"inline-flex align-center review-stars review-stars--grey\">\n              ${notFilledStar}\n              ${notFilledStar}\n              ${notFilledStar}\n              ${notFilledStar}\n              ${notFilledStar}\n            </span>\n          </span>\n          \n          <span class=\"inline-flex flex-wrap ${ this.type === 'compact' ? 'gap-7' : 'gap-10' }\">\n            ${scoreFormatted}\n            <span class=\"color-bg-text-30 w-1\"></span>\n            <span class=\"product-review-widget__text\">${reviewsText}</span>\n          </span>\n        </div>\n      `;\n    }\n\n    this.innerHTML = markup;\n  }\n\n  watchJudgemeReviewWidget() {\n    const widget = this.section?.querySelector(\".jdgm-preview-badge\");\n\n    if (!widget) {\n      return;\n    }\n\n    widget.closest(\".shopify-block\")?.classList.add(\"!hidden\");\n\n    const observer = new MutationObserver((mutationList, observer) => {\n      const text = widget.querySelector(\".jdgm-prev-badge__text\");\n\n      if (text && text.innerText !== \"\") {\n        const blockText = this.querySelector(\".product-review-widget__text\");\n\n        blockText.innerText = text.innerText;\n      }\n    });\n\n    observer.observe(widget, {\n      attributes: false,\n      childList: true,\n      subtree: true\n    });\n  }\n}\n\nif (!window.customElements.get(\"review-product\")) {\n  customElements.define(\"review-product\", ReviewProduct);\n}\n\n\nclass ScrollingArea extends HTMLElement {\n  constructor() {\n    super();\n\n    this.content = this.querySelector(\".scrolling-area__content\");\n\n    if (!this.content) {\n      return;\n    }\n\n    this.handleScroll();\n    this.handleResize();\n\n    this.handleScrollListener = theme.helpers.throttle(this.handleScroll.bind(this));\n    this.handleResizeListener = theme.helpers.throttle(this.handleResize.bind(this));\n  }\n\n  connectedCallback() {\n    this.content.addEventListener(\"scroll\", this.handleScrollListener, { passive: true });\n\n    window.addEventListener(\"resize\", this.handleResizeListener, { passive: true });\n  }\n\n  disconnectedCallback() {\n    this.content.removeEventListener(\"scroll\", this.handleScrollListener);\n\n    window.removeEventListener(\"resize\", this.handleResizeListener);\n  }\n\n  handleScroll() {\n    const maxScrollLeft = this.content.scrollWidth - this.content.clientWidth;\n\n    if (this.content.scrollLeft < 2) {\n      this.classList.remove(\"scrolling-area--left-shadow\");\n      this.classList.add(\"scrolling-area--right-shadow\");\n    } else if (this.content.scrollLeft >= maxScrollLeft) {\n      this.classList.add(\"scrolling-area--left-shadow\");\n      this.classList.remove(\"scrolling-area--right-shadow\");\n    } else {\n      this.classList.add(\"scrolling-area--left-shadow\");\n      this.classList.add(\"scrolling-area--right-shadow\");\n    }\n  }\n\n  handleResize() {\n    if (window.innerWidth > this.content.scrollWidth) {\n      this.classList.remove(\"scrolling-area--left-shadow\");\n      this.classList.remove(\"scrolling-area--right-shadow\");\n    } else {\n      this.handleScroll();\n    }\n  }\n}\n\nif (!window.customElements.get(\"scrolling-area\")) {\n  customElements.define(\"scrolling-area\", ScrollingArea);\n}\n\n\nclass BackToTop extends HTMLButtonElement {\n  constructor() {\n    super();\n\n    this.handleScrollListener = theme.helpers.throttle(this.updateScrollPercentage.bind(this));\n\n    this.addEventListener(\"click\", this.backToTop.bind(this));\n  }\n\n  connectedCallback() {\n    window.addEventListener(\"scroll\", this.handleScrollListener, { passive: true });\n  }\n\n  disconnectedCallback() {\n    window.removeEventListener(\"scroll\", this.handleScrollListener);\n  }\n\n  backToTop() {\n    if (document.documentElement.scrollTop > 0 || document.body.scrollTop > 0) {\n      window.scrollTo({\n        top: 0,\n        behavior: \"smooth\",\n      });\n    }\n  }\n\n  updateScrollPercentage() {\n    const documentElement = document.documentElement;\n    const body = document.body;\n    const scrollHeight = documentElement.scrollHeight || body.scrollHeight;\n    const scrollTop = documentElement.scrollTop || body.scrollTop;\n    const clientHeight = documentElement.clientHeight || body.clientHeight;\n    const percentage = (scrollTop / (scrollHeight - clientHeight)) * 100;\n    const formattedPercentage = `${percentage.toFixed(2)}%`;\n    const shouldBeVisible = scrollTop > 200;\n\n    this.style.setProperty(\"--custom-height\", formattedPercentage);\n\n    if (this._isVisible !== shouldBeVisible) {\n      this.classList.toggle(\"visible\", shouldBeVisible);\n      this._isVisible = shouldBeVisible;\n    }\n  }\n}\n\nif (!window.customElements.get(\"back-to-top\")) {\n  customElements.define(\"back-to-top\", BackToTop, { extends: \"button\" });\n}\n\n\nclass LocalizationForm extends HTMLElement {\n  constructor() {\n    super();\n\n    this.form = this.querySelector(\"form\");\n    this.input = this.querySelector('input[name=\"language_code\"], input[name=\"country_code\"]');\n    this.items = this.querySelectorAll(\"a\");\n    this.select = this.querySelector(\"select\");\n\n    this.items.forEach((item) => {\n      item.addEventListener(\"click\", this.onItemClick.bind(this));\n    });\n\n    if (this.select) {\n      this.adjustSelectWidth();\n\n      this.select.addEventListener(\"change\", this.onSelectChange.bind(this));\n      window.addEventListener(\"resize\", theme.helpers.throttle(this.adjustSelectWidth.bind(this)), { passive: true });\n    }\n  }\n\n  onItemClick(event) {\n    event.preventDefault();\n\n    this.input.value = event.currentTarget.dataset.value;\n\n    if (this.form) {\n      this.form.submit();\n    }\n  }\n\n  onSelectChange() {\n    this.input.value = this.select.value;\n\n    if (this.form) {\n      this.form.submit();\n    }\n  }\n\n  adjustSelectWidth() {\n    const tempDiv = document.createElement(\"div\");\n    const tempSpan = document.createElement(\"span\");\n\n    tempSpan.style.visibility = \"hidden\";\n    tempSpan.style.whiteSpace = \"nowrap\";\n    tempSpan.style.font = getComputedStyle(this.select).font;\n    tempSpan.classList.add(\"ps-45\", \"pe-45\");\n    tempSpan.innerText = this.select.options[this.select.selectedIndex].text;\n\n    tempDiv.appendChild(tempSpan);\n    document.body.appendChild(tempDiv);\n\n    const width = tempSpan.offsetWidth;\n\n    document.body.removeChild(tempDiv);\n\n    this.select.style.width = `${width}px`;\n  }\n}\n\nif (!window.customElements.get(\"localization-form\")) {\n  customElements.define(\"localization-form\", LocalizationForm);\n}\n\n\nclass CollapsibleBlock extends HTMLDetailsElement {\n  constructor() {\n    super();\n\n    this.summaryElement = this.querySelector(\"summary\");\n    this.trigger = this.getAttribute(\"trigger\") || \"click\";\n\n    this.setAttribute(\"aria-expanded\", this.hasAttribute(\"open\") ? \"true\" : \"false\");\n\n    if (this.trigger === \"hover\") {\n      this.summaryElement.addEventListener(\"click\", this.openUrl.bind(this));\n      this.summaryElement.addEventListener(\"mouseenter\", this.openSelector.bind(this));\n      this.addEventListener(\"mouseleave\", this.openSelector.bind(this));\n    } else {\n      this.summaryElement.addEventListener(\"click\", this.openSelector.bind(this));\n    }\n\n    this.summaryElement.addEventListener(\"focus\", this.openSelector.bind(this));\n\n    document.addEventListener(\"focusin\", (evt) => {\n      const disclosures = [];\n      let activeElement = document.activeElement;\n\n      while (activeElement) {\n        if (activeElement.tagName === \"DISCLOSURE-ITEM\") {\n          disclosures.push(activeElement);\n        }\n\n        activeElement = activeElement.parentElement;\n      }\n\n      disclosures.forEach((disclosure) => {\n        disclosure.openSelector(evt, true);\n      });\n    });\n  }\n\n  openSelector(evt, hideForce) {\n    if (evt.type === \"mouseenter\" && this.classList.contains(\"active\")) {\n      return;\n    }\n\n    if (evt.type === \"mouseleave\" && !this.classList.contains(\"active\")) {\n      return;\n    }\n\n    if ([\"mouseenter\", \"mouseleave\", \"focus\", \"focusin\"].includes(evt.type)) {\n      this.setAttribute(\"open\", \"\");\n    } else {\n      this.removeAttribute(\"open\");\n    }\n\n    const target = evt.currentTarget || evt.target;\n    const parent = target?.parentElement || this;\n\n    if (!target || !parent) {\n      return;\n    }\n\n    this.setAttribute(\"aria-expanded\", \"true\");\n\n    slideAnimation({\n      target: parent.querySelector(\".collapsible-content\"),\n      parent: this,\n      animationType: hideForce ? \"slideUp\" : \"slideToggle\",\n    });\n  }\n\n  openUrl() {\n    const url = this.dataset.url;\n\n    if (url) {\n      window.location.href = url;\n    }\n  }\n}\n\nif (!window.customElements.get(\"collapsible-block\")) {\n  customElements.define(\"collapsible-block\", CollapsibleBlock, { extends: \"details\" });\n}\n\n\nclass PaginateLoadmore extends HTMLElement {\n  constructor() {\n    super();\n\n    this.initLoadMore();\n\n    if (this.classList.contains(\"collection-infinite-scroll\")) {\n      const link = this.querySelector(\"a\");\n\n      link?.addEventListener(\"click\", (e) => {\n        const items = document.querySelectorAll(\".collections-list .collection-item.grid-custom-item\");\n\n        items.forEach((item) => {\n          item.classList.remove(\"hidden\");\n        });\n\n        this.remove();\n      }, false);\n    }\n  }\n\n  initLoadMore() {\n    const loadMoreActions = this.querySelectorAll(\".load-more-actions\");\n\n    loadMoreActions.forEach((loadMore) => {\n      if (loadMore.classList.contains(\"infinite-scrolling\")) {\n        const observer = new IntersectionObserver((entries) => {\n          entries.forEach((entry) => {\n            if (entry.intersectionRatio === 1) {\n              this.loadMoreItem(loadMore);\n            }\n          });\n        }, { threshold: 1.0 });\n\n        observer.observe(loadMore);\n      } else {\n        loadMore.addEventListener(\"click\", (event) => {\n          event.preventDefault();\n\n          const target = event.currentTarget;\n\n          this.loadMoreItem(target);\n        }, false);\n      }\n    });\n  }\n\n  loadMoreItem(target) {\n    const loadMoreUrl = target.getAttribute(\"href\");\n\n    this.toggleLoading(target, true);\n\n    fetch(`${loadMoreUrl}`).then((response) => {\n      if (!response.ok) {\n        throw new Error(response.status);\n      }\n\n      return response.text();\n    }).then((responseText) => {\n      const resultNodes = new DOMParser().parseFromString(responseText, \"text/html\");\n      const resultNodesHtml = resultNodes.querySelectorAll(\".load-more-lists .load-more-lists\");\n\n      resultNodesHtml.forEach((prodNode) => {\n        document.querySelector(\".load-more-lists\").appendChild(prodNode);\n      });\n\n      const loadMoreActions = resultNodes.querySelector(\".load-more-actions\");\n\n      if (loadMoreActions) {\n        target.setAttribute(\"href\", loadMoreActions.getAttribute(\"href\"));\n      } else {\n        target.remove();\n      }\n\n      this.toggleLoading(target, false);\n\n      document.dispatchEvent(new CustomEvent(\"hover-button:apply\"));\n    }).catch((error) => {\n      throw error;\n    });\n  }\n\n  toggleLoading(event, loading) {\n    if (event) {\n      const method = loading ? \"add\" : \"remove\";\n\n      event.classList[method](\"loading\");\n    }\n  }\n}\n\nif (!window.customElements.get(\"load-more-button\")) {\n  customElements.define(\"load-more-button\", PaginateLoadmore);\n}\n\n\nclass TermsConditions extends ModalBase {\n  constructor() {\n    super();\n\n    this.checkbox = this.querySelector(\".terms-conditions__checkbox\");\n    this.checkout = this.closest(\".cart-drawer__footer, .main-cart\")?.querySelector(\".button-checkout\");\n\n    this.init();\n  }\n\n  connectedCallback() {\n    this.checkbox = this.querySelector(\".terms-conditions__checkbox\");\n    this.checkout = this.closest(\".cart-drawer__footer, .main-cart\")?.querySelector(\".button-checkout\");\n\n    this.init();\n  }\n\n  init() {\n    if (!this.checkbox) {\n      return;\n    }\n\n    if (theme.helpers.getCookie(\"terms-conditions\")) {\n      this.checkbox.setAttribute(\"checked\", \"\");\n      this.checkout?.removeAttribute(\"disabled\");\n    }\n\n    this.checkbox.addEventListener(\"change\", (event) => {\n      if (event.currentTarget.checked) {\n        this.checkout?.removeAttribute(\"disabled\");\n\n        theme.helpers.setCookie(\"terms-conditions\", 1, 1);\n      } else {\n        this.checkout?.setAttribute(\"disabled\", \"\");\n\n        theme.helpers.deleteCookie(\"terms-conditions\");\n      }\n    });\n  }\n}\n\nif (!window.customElements.get(\"terms-conditions\")) {\n  customElements.define(\"terms-conditions\", TermsConditions);\n}\n\n\nclass SmartStickyBlock extends HTMLElement {\n  constructor() {\n    super();\n\n    this.stickyHeader = document.querySelector(\".header-section--sticky-always .header\");\n    this.lastScrollY = window.scrollY;\n    this.viewHeight = window.innerHeight;\n    this.elementHeight = this.offsetHeight;\n    this.initialOffset = parseInt(this.dataset.shift || \"20\", 10);\n    this.bottomLimit = this.elementHeight < this.viewHeight ? this.initialOffset : 0;\n\n    window.addEventListener(\"scroll\", theme.helpers.throttle(this.updatePosition.bind(this)));\n  }\n\n  calculateStickiness() {\n    const maxTop = this.viewHeight - this.elementHeight - this.bottomLimit;\n    const styleTop = parseInt(getComputedStyle(this).top, 10);\n    const topGap = this.stickyHeader ? this.stickyHeader.clientHeight + this.initialOffset : this.initialOffset;\n    const scrollingUp = window.scrollY < this.lastScrollY;\n    const targetPosition = this.elementHeight + topGap + this.bottomLimit;\n\n    if (targetPosition > this.viewHeight) {\n      if (scrollingUp) {\n        if (styleTop < topGap) {\n          this.style.top = `${styleTop + (this.lastScrollY - window.scrollY)}px`;\n        } else if (styleTop !== topGap) {\n          this.style.top = `${topGap}px`;\n        }\n      } else {\n        if (styleTop > maxTop) {\n          this.style.top = `${styleTop - (window.scrollY - this.lastScrollY)}px`;\n        } else if (styleTop !== maxTop) {\n          this.style.top = `${maxTop}px`;\n        }\n      }\n    } else {\n      this.style.top = `${topGap}px`;\n    }\n\n    this.lastScrollY = window.scrollY;\n  }\n\n  updatePosition() {\n    this.viewHeight = window.innerHeight;\n    this.elementHeight = this.offsetHeight;\n\n    this.calculateStickiness();\n  }\n}\n\nif (!customElements.get(\"smart-sticky-block\")) {\n  customElements.define(\"smart-sticky-block\", SmartStickyBlock);\n}\n\n\nclass BenefitsSection extends HTMLElement {\n  constructor() {\n    super();\n\n    this.blocks = [];\n    this.firstBlocks = [];\n    this.secondBlocks = [];\n    this.shapes = [];\n    this.animations = [];\n\n    Motion.inView(this, () => {\n      this.classList.add(\"visible\");\n    }, {\n      margin: \"-25% 0px -25% 0px\"\n    });\n\n    this.animateBlocksOnScroll();\n\n    document.addEventListener(\"breakpoint:lg:match\", this.animateBlocksOnScroll.bind(this));\n    document.addEventListener(\"breakpoint:lg:unmatch\", this.animateBlocksOnScroll.bind(this));\n\n    if (Shopify.designMode) {\n      document.addEventListener(\"shopify:section:load\", this.animateBlocksOnScroll.bind(this));\n      document.addEventListener(\"shopify:section:unload\", this.animateBlocksOnScroll.bind(this));\n    }\n  }\n\n  animateBlocksOnScroll() {\n    if (theme.params.isMotionReduced) {\n      return;\n    }\n\n    const scrollOptions = {\n      target: this,\n      offset: [\n        [0, 1], [1, 0]\n      ]\n    };\n\n    // Reset all animations\n    this.animations?.forEach((animation) => {\n      animation();\n    });\n\n    this.animations = [];\n\n    this.blocks = this.querySelectorAll(\".grid.grid-cols .grid-custom-item, .benefits__shapes\");\n\n    this.blocks.forEach((block) => {\n      block.getAnimations().forEach(animation => animation.cancel());\n\n      block.style.removeProperty(\"transform\");\n\n      block.style.transform = \"translateY(0)\";\n    });\n\n    if (theme.config.isLargeQuery) {\n      this.firstBlocks = this.querySelectorAll(\".grid.grid-cols .grid-custom-item:nth-of-type(2n-1)\");\n      this.secondBlocks = this.querySelectorAll(\".grid.grid-cols .grid-custom-item:nth-of-type(2n)\");\n      this.shapes = this.querySelector(\".benefits__shapes\");\n\n      this.firstBlocks.forEach((block) => {\n        this.animations.push(\n          Motion.scroll(\n            Motion.animate(block, {\n              transform: [\"translateY(-50px)\", \"translateY(75px)\"]\n            }), scrollOptions\n          )\n        );\n      });\n\n      this.secondBlocks.forEach((block) => {\n        this.animations.push(\n          Motion.scroll(\n            Motion.animate(block, {\n              transform: [\"translateY(50px)\", \"translateY(-75px)\"]\n            }), scrollOptions\n          )\n        );\n      });\n\n      this.animations.push(\n        Motion.scroll(\n          Motion.animate(this.shapes, {\n            transform: [\"translate(-50%) scale(0.85)\", \"translate(-50%) scale(1.15)\"]\n          }), scrollOptions\n        )\n      );\n    }\n  }\n}\n\nif (!window.customElements.get(\"benefits-section\")) {\n  customElements.define(\"benefits-section\", BenefitsSection);\n}\n\n\nclass CollectionTabs extends HTMLElement {\n  constructor() {\n    super();\n\n    this.tabs = this.querySelectorAll(\".collection-tabs__tab\");\n    this.productBlocks = this.querySelectorAll(\".collection-tabs__products\");\n\n    this.init();\n  }\n\n  init() {\n    this.tabs.forEach((tab) => {\n      tab.addEventListener(\"click\", () => {\n        const blockId = tab.dataset.blockId;\n\n        this.showContent(blockId);\n\n        this.tabs.forEach((innerTab) => {\n          innerTab.classList.remove(\"button-primary\");\n          innerTab.classList.add(\"button-outline\");\n          innerTab.removeAttribute(\"disabled\");\n        });\n\n        tab.classList.add(\"button-primary\");\n        tab.classList.remove(\"button-outline\");\n        tab.setAttribute(\"disabled\", \"disabled\");\n      });\n    });\n  }\n\n  showContent(blockId) {\n    this.productBlocks.forEach((productBlock) => {\n      productBlock.classList.add(\"collection-tabs__products--refreshing\");\n\n      setTimeout(() => {\n        if (productBlock.dataset.blockId === blockId) {\n          productBlock.classList.remove(\"collection-tabs__products--hidden\");\n        } else {\n          productBlock.classList.add(\"collection-tabs__products--hidden\");\n        }\n\n        productBlock.classList.add(\"animated-blocks--hide-instantly\");\n        productBlock.classList.remove(\"visible\");\n        productBlock.classList.remove(\"collection-tabs__products--refreshing\");\n      }, 300);\n\n      setTimeout(() => {\n        if (productBlock.dataset.blockId === blockId) {\n          productBlock.classList.remove(\"animated-blocks--hide-instantly\");\n          productBlock.classList.add(\"visible\");\n        }\n      }, 500);\n    });\n  }\n}\n\nif (!window.customElements.get(\"collection-tabs\")) {\n  customElements.define(\"collection-tabs\", CollectionTabs);\n}\n\n\nclass CountdownTimer extends HTMLElement {\n  constructor() {\n    super();\n\n    this.wrapper = this.closest(\".countdown-timer\");\n\n    this.settings = theme.helpers.safelyParseJson(this.getAttribute(\"settings\"));\n\n    this.showIcon = this.settings?.showIcon || false;\n    this.endTime = this.settings?.endTime || \"\";\n    this.format = this.settings?.format || \"dd:hh:mm:ss\";\n    this.minutesLeft = this.settings?.minutesLeft || \"\";\n    this.hideTimerWhenDateElapses = this.settings?.hideTimerWhenDateElapses || false;\n    this.type = this.settings?.type || \"\";\n    this.timeoutMessage = this.settings?.timeoutMessage || \"\";\n    this.daysLabel = this.settings?.daysLabel || \"\";\n    this.hoursLabel = this.settings?.hoursLabel || \"\";\n    this.minutesLabel = this.settings?.minutesLabel || \"\";\n    this.secondsLabel = this.settings?.secondsLabel || \"\";\n\n    this.interval = null;\n\n    Motion.inView(this, () => {\n      this.init();\n    });\n  }\n\n  init() {\n    if (this.type !== \"flipdown\") {\n      const countdownAppend = this.querySelector(\".countdown-inner\");\n\n      if (countdownAppend) {\n        countdownAppend.innerHTML = this.appendChildHtml().innerHTML;\n      } else {\n        this.innerHTML = this.appendChildHtml().innerHTML;\n      }\n    }\n\n    let isoDate = \"\";\n\n    if (this.endTime) {\n      if (this.isISODate(this.endTime)) {\n        isoDate = this.endTime;\n      } else {\n        if (this.isValidDate(this.endTime)) {\n          const dateParts = this.endTime.split(\"-\");\n\n          isoDate = `${dateParts[2]}-${dateParts[0].padStart(2, \"0\")}-${dateParts[1].padStart(2, \"0\")}T00:00:00Z`;\n        }\n      }\n    }\n\n    this.mainFunction(isoDate);\n  }\n\n  mainFunction(isoDate) {\n    let timeLeft = {};\n\n    const calculateTimeLeft = (difference) => {\n      let timeLeft = {};\n\n      if (this.format.includes(\"dd\")) {\n        timeLeft.days = Math.floor(difference / (1000 * 60 * 60 * 24));\n      }\n\n      if (this.format.includes(\"hh\")) {\n        if (this.format.includes(\"dd\")) {\n          timeLeft.hours = Math.floor((difference / (1000 * 60 * 60)) % 24);\n        } else {\n          timeLeft.hours = Math.floor(difference / (1000 * 60 * 60));\n        }\n      }\n\n      if (this.format.includes(\"mm\")) {\n        if (this.format === \"mm:ss\") {\n          timeLeft.minutes = Math.floor(difference / 1000 / 60);\n        } else {\n          timeLeft.minutes = Math.floor((difference / 1000 / 60) % 60);\n        }\n      }\n\n      if (this.format.includes(\"ss\")) {\n        timeLeft.seconds = Math.floor((difference / 1000) % 60);\n      }\n\n      return timeLeft;\n    };\n\n    if (Date.parse(isoDate) || this.minutesLeft) {\n      const now = new Date();\n      let deadline = new Date(isoDate);\n\n      if (this.minutesLeft) {\n        deadline = new Date(Date.now() + parseInt(this.minutesLeft) * 60000);\n      }\n\n      if (this.type === \"flipdown\") {\n        if (now > deadline) {\n          this.onTimerEnd();\n        } else {\n          new FlipDown(deadline / 1000, this, {\n            headings: [this.daysLabel, this.hoursLabel, this.minutesLabel, this.secondsLabel]\n          }).start().ifEnded(() => {\n            this.onTimerEnd();\n          });\n        }\n      } else {\n        const updateCountdown = () => {\n          const now = new Date();\n          const difference = deadline - now;\n\n          if (difference > 0) {\n            timeLeft = calculateTimeLeft(difference);\n          } else {\n            timeLeft = calculateTimeLeft(0);\n          }\n\n          if (timeLeft.days > 0 || timeLeft.hours > 0 || timeLeft.minutes > 0 || timeLeft.seconds > 0) {\n            Object.entries(timeLeft).forEach(([key, value]) => {\n              const unit = this.querySelector(`.${key}`);\n\n              if (unit) {\n                unit.innerHTML = value.toString().padStart(2, \"0\");\n              }\n            });\n          } else {\n            Object.entries(timeLeft).forEach(([key, value]) => {\n              const unit = this.querySelector(`.${key}`);\n\n              if (unit) {\n                unit.innerHTML = \"00\";\n              }\n            });\n\n            this.onTimerEnd();\n\n            clearInterval(this.interval);\n          }\n\n          this.classList.remove(\"hidden\");\n        };\n\n        this.interval = setInterval(updateCountdown, 1000);\n\n        updateCountdown();\n      }\n    } else {\n      timeLeft = calculateTimeLeft(0);\n\n      Object.entries(timeLeft).forEach(([key, value]) => {\n        const unit = this.querySelector(`.${key}`);\n\n        if (unit) {\n          unit.innerHTML = value.toString().padStart(2, \"0\");\n        }\n      });\n    }\n  }\n\n  onTimerEnd() {\n    if (this.hideTimerWhenDateElapses) {\n      if (this.wrapper) {\n        this.wrapper.remove();\n      } else {\n        this.remove();\n      }\n\n      const productGridWrapper = this.closest(\".product-item--has-countdown\");\n\n      if (productGridWrapper) {\n        productGridWrapper.classList.remove(\"product-item--has-countdown\");\n      }\n    } else if (this.timeoutMessage) {\n      this.innerHTML = this.timeoutMessage;\n\n      this.closest(\".countdown-timer-wrapper\")?.classList.remove(\"shrink-0\");\n    }\n  }\n\n  appendChildHtml() {\n    const container = document.createElement(\"div\");\n\n    container.innerHTML = `${ this.showIcon ? `\n      <div class=\"inline-flex me-5\">\n        <svg width=\"16\" height=\"16\" class=\"shrink-0\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" color=\"currentColor\" fill=\"none\">\n          <path d=\"M12 22C16.9706 22 21 17.9706 21 13C21 8.02944 16.9706 4 12 4C7.02944 4 3 8.02944 3 13C3 17.9706 7.02944 22 12 22Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n          <path d=\"M5 19L3 21M19 19L21 21\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          <path d=\"M19 3.5697L19.5955 3.27195C20.4408 2.84932 20.7583 2.89769 21.4303 3.5697C22.1023 4.2417 22.1507 4.55924 21.728 5.4045L21.4303 6M5 3.5697L4.4045 3.27195C3.55924 2.84932 3.2417 2.89769 2.5697 3.5697C1.89769 4.2417 1.84932 4.55924 2.27195 5.4045L2.5697 6\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"/>\n          <path d=\"M12 9.5V13.5L14 15.5\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          <path d=\"M12 3.5V2\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n          <path d=\"M10 2H14\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n        </svg>\n      </div>` : \"\" }${ !this.minutesLeft ? `${ this.format.includes(\"dd\") ? `<div class=\"countdown-timer__block\"><span class=\"days countdown-timer__counter\"></span><span class=\"countdown-timer__text\"> ${ this.daysLabel }</span></div>` : \"\" }${ this.format.includes(\"hh\") ? `<div class=\"countdown-timer__block\"><span class=\"hours countdown-timer__counter\"></span><span class=\"countdown-timer__text\"> ${ this.hoursLabel }</span></div>` : \"\"}` : \"\"}\n      <div class=\"countdown-timer__block\"><span class=\"minutes countdown-timer__counter\"></span><span class=\"countdown-timer__text\"> ${ this.minutesLeft ? \"m\" : this.minutesLabel }</span></div>\n      <div class=\"countdown-timer__block\"><span class=\"seconds countdown-timer__counter\"></span><span class=\"countdown-timer__text\"> ${ this.minutesLeft ? \"s\" : this.secondsLabel }</span></div>\n    `;\n\n    return container;\n  }\n\n  isISODate(dateString) {\n    return /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z$/.test(dateString);\n  }\n\n  isValidDate(dateString) {\n    return /^\\d{2}-\\d{2}-\\d{4}$/.test(dateString);\n  }\n}\n\nif (!window.customElements.get(\"countdown-timer\")) {\n  customElements.define(\"countdown-timer\", CountdownTimer);\n}\n\n\nclass CounterHighlights extends HTMLElement {\n  constructor() {\n    super();\n\n    this.numbers = this.querySelectorAll(\".counter-highlights__number\");\n\n    Motion.inView(this, () => {\n      this.init();\n    });\n  }\n\n  init() {\n    this.numbers.forEach((number) => {\n      const duration = Number.parseFloat(number.dataset.duration) || 2;\n      const endValue = Number.parseInt(number.dataset.endValue);\n\n      if (Number.isInteger(endValue)) {\n        Motion.animate(0, endValue, {\n          duration: duration,\n          ease: \"circOut\",\n          onUpdate: (latest) => (number.innerHTML = Math.round(latest)),\n        })\n      }\n    });\n  }\n}\n\nif (!window.customElements.get(\"counter-highlights\")) {\n  customElements.define(\"counter-highlights\", CounterHighlights);\n}\n\n\nclass FAQSection extends HTMLElement {\n  constructor() {\n    super();\n\n    this.tabs = this.querySelectorAll(\"[is='collapsible-block']\");\n\n    this.allowOneOpenedTab();\n  }\n\n  allowOneOpenedTab() {\n    this.tabs.forEach((tab) => {\n      const summary = tab.querySelector(\"summary\");\n\n      summary.addEventListener(\"focus\", (evt) => {\n        this.tabs.forEach((innerTab) => {\n          if (tab === innerTab || !innerTab.classList.contains(\"active\")) {\n            return;\n          }\n\n          slideAnimation({\n            target: innerTab.querySelector(\".collapsible-content\"),\n            parent: innerTab,\n            animationType: \"slideUp\",\n            forceAnimating: true\n          });\n        });\n      });\n    });\n  }\n}\n\nif (!window.customElements.get(\"faq-section\")) {\n  customElements.define(\"faq-section\", FAQSection);\n}\n\n\nclass ImageComparison extends HTMLElement {\n  constructor() {\n    super();\n\n    this.container = this.querySelector(\".image-comparison__container\");\n    this.button = this.querySelector(\".image-comparison__button\");\n    this.overlay = this.querySelector(\".image-comparison__overlay\");\n\n    this.handleInteractionStartListener = this.handleInteractionStart.bind(this);\n    this.handleInteractionEndListener = this.handleInteractionEnd.bind(this);\n    this.handleMoveListener = this.handleMove.bind(this);\n    this.handleResizeListener = theme.helpers.throttle(this.handleResize.bind(this));\n\n    Motion.inView(this, () => {\n      this.style.setProperty(\"--container-width\", `${this.container.getBoundingClientRect().width}px`);\n\n      setTimeout(() => {\n        this.classList.add(\"animate\", \"animating\");\n\n        setTimeout(() => {\n          this.classList.remove(\"animating\");\n        }, 1400);\n      }, 800);\n    });\n  }\n\n  connectedCallback() {\n    window.addEventListener(\"resize\", this.handleResizeListener, { passive: true });\n\n    this.button.addEventListener(\"touchstart\", this.handleInteractionStartListener, { passive: true });\n    this.button.addEventListener(\"mousedown\", this.handleInteractionStartListener, { passive: true });\n\n    this.button.addEventListener(\"touchend\", this.handleInteractionEndListener, { passive: true });\n    this.button.addEventListener(\"mouseup\", this.handleInteractionEndListener, { passive: true });\n  }\n\n  disconnectedCallback() {\n    window.removeEventListener(\"resize\", this.handleResizeListener);\n\n    this.button.removeEventListener(\"touchstart\", this.handleInteractionStartListener);\n    this.button.removeEventListener(\"mousedown\", this.handleInteractionStartListener);\n\n    this.button.removeEventListener(\"touchend\", this.handleInteractionEndListener);\n    this.button.removeEventListener(\"mouseup\", this.handleInteractionEndListener);\n  }\n\n  handleResize() {\n    this.style.setProperty(\"--container-width\", `${this.container.getBoundingClientRect().width}px`);\n  }\n\n  handleInteractionStart() {\n    window.bodyScrollLock.disableBodyScroll(document.body);\n\n    document.documentElement.classList.add(\"page-no-scroll\");\n\n    document.addEventListener(\"touchmove\", this.handleMoveListener, { passive: true });\n    document.addEventListener(\"mousemove\", this.handleMoveListener, { passive: true });\n  }\n\n  handleInteractionEnd() {\n    window.bodyScrollLock.clearAllBodyScrollLocks();\n\n    document.documentElement.classList.remove(\"page-no-scroll\");\n\n    document.removeEventListener(\"touchmove\", this.handleMoveListener);\n    document.removeEventListener(\"mousemove\", this.handleMoveListener);\n  }\n\n  handleMove(evt) {\n    let cursorPosition = Math.max(0, this.getCursorPosition(evt));\n\n    if (cursorPosition > this.overlay.offsetWidth) {\n      cursorPosition = this.overlay.offsetWidth;\n    }\n\n    this.moveButton(cursorPosition);\n  }\n\n  getCursorPosition(evt) {\n    const event = evt.changedTouches ? evt.changedTouches[0] : evt;\n    const overlayDimensions = this.overlay.getBoundingClientRect();\n\n    return event.pageX - overlayDimensions.left - window.pageXOffset;\n  }\n\n  moveButton(cursorPosition) {\n    if (!this.button) {\n      return;\n    }\n\n    const position = cursorPosition / this.overlay.offsetWidth * 100;\n\n    this.container.style.setProperty(\"--percent\", `${position}%`);\n  }\n}\n\nif (!window.customElements.get(\"image-comparison\")) {\n  customElements.define(\"image-comparison\", ImageComparison);\n}\n\n\nclass MobileNavigationBar extends HTMLElement {\n  constructor() {\n    super();\n\n    this.headerSection = document.querySelector(\".header-section\");\n\n    document.body.classList.add(\"mobile-navigation-bar-enabled\");\n\n    this.setBarVisibility();\n\n    this.handleScrollListener = theme.helpers.throttle(this.handleScroll.bind(this));\n  }\n\n  connectedCallback() {\n    window.addEventListener(\"scroll\", this.handleScrollListener, { passive: true });\n  }\n\n  disconnectedCallback() {\n    window.removeEventListener(\"scroll\", this.handleScrollListener);\n\n    document.body.classList.remove(\"mobile-navigation-bar-enabled\");\n    document.body.classList.remove(\"mobile-navigation-bar-visible\");\n  }\n\n  handleScroll() {\n    this.setBarVisibility();\n  }\n\n  setBarVisibility() {\n    const scrollPosition = window.scrollY;\n    const headerSection = this.headerSection;\n\n    const isHeaderStickyAlways = headerSection?.classList.contains(\"header-section--sticky-always\");\n    const isHeaderStickyOnScroll = headerSection?.classList.contains(\"header-section--sticky-on-scroll-up\");\n    const isHeaderHidden = headerSection?.classList.contains(\"header-hidden\");\n    const isHeaderStickyOnScrollAndHidden = isHeaderStickyOnScroll && isHeaderHidden;\n    const isHeaderNotSticky = !isHeaderStickyAlways && !isHeaderStickyOnScroll;\n\n    const isNearBottom = scrollPosition > (document.body.offsetHeight - window.innerHeight - 260);\n    const shouldBeVisible = isNearBottom || (scrollPosition > 200 && (isHeaderStickyAlways || isHeaderStickyOnScrollAndHidden || isHeaderNotSticky));\n\n    if (this.classList.contains(\"visible\") !== shouldBeVisible) {\n      this.classList.toggle(\"visible\", shouldBeVisible);\n      document.body.classList.toggle(\"mobile-navigation-bar-visible\", shouldBeVisible);\n    }\n  }\n}\n\nif (!window.customElements.get(\"mobile-navigation-bar\")) {\n  customElements.define(\"mobile-navigation-bar\", MobileNavigationBar);\n}\n\n\nclass NewsletterPopup extends ModalBase {\n  constructor() {\n    super();\n\n    if (window.location.pathname === \"/challenge\" || !theme.helpers.cookiesEnabled()) {\n      return;\n    }\n\n    this.settings = theme.helpers.safelyParseJson(this.getAttribute(\"settings\")) || {};\n\n    this.isTestMode = this.settings.displayMode === \"test\";\n    this.frequency = this.settings.frequency || 10;\n    this.cookieName = \"newsletter-popup:closed\";\n\n    this.content = this.querySelector(\".modal-content-markup\");\n    this.customClass = \"newsletter-popup\";\n\n    if (this.classList.contains(\"newsletter-popup-section--has-image\")) {\n      this.customClass += \" newsletter-popup--has-image\";\n    }\n\n    if (!this.content) {\n      return;\n    }\n\n    const existingModals = document.querySelectorAll(\".modal.newsletter-popup\");\n\n    existingModals.forEach((modal) => {\n      setTimeout(() => {\n        modal.remove();\n      }, 600)\n    });\n\n    this.init({\n      customClass: this.customClass,\n      content: this.content,\n      id: \"NewsletterPopup\",\n      transitionDuration: 1000,\n      closeButtonPosition: \"content\",\n      closeButtonContainerSelector:  \".newsletter-popup__content\"\n    });\n\n    if (this.submitted) {\n      setTimeout(() => {\n        this.open(true);\n      }, 1000)\n\n      return;\n    }\n\n    this.handleScrollListener = theme.helpers.throttle(this.handleScroll.bind(this));\n    this.handleMouseLeaveListener = theme.helpers.throttle(this.handleMouseLeave.bind(this));\n\n    if (this.isTestMode || !theme.helpers.getCookie(this.cookieName)) {\n      this.setPopupVisibility();\n    }\n  }\n\n  get submitted() {\n    const popup = document.querySelector(\".modal.newsletter-popup\");\n\n    return !!popup?.querySelector(\".newsletter-popup__message\");\n  }\n\n  handleScroll() {\n    const body = document.body;\n    const html = document.documentElement;\n    const documentHeight = Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight);\n    const scrollLimit = Math.floor((documentHeight / 100) * this.settings.scrollDepthPercentage);\n    const visibleModal = document.querySelector(\".newsletter-popup.modal--visible\");\n\n    if (window.scrollY > scrollLimit && !visibleModal) {\n      this.open();\n    }\n  }\n\n  handleMouseLeave(event) {\n    const visibleModal = document.querySelector(\".newsletter-popup.modal--visible\");\n\n    if (event.clientY < 0 && !visibleModal) {\n      this.open();\n    }\n  }\n\n  setPopupVisibility() {\n    const visibleModals = document.querySelectorAll(\".newsletter-popup.modal--visible\");\n\n    visibleModals.forEach((modal) => {\n      modal.classList.remove(\"modal--visible\");\n\n      setTimeout(() => {\n        modal.remove();\n      }, 1000);\n    });\n\n    if (this.isTestMode) {\n      if (Shopify && Shopify.designMode) {\n        setTimeout(() => {\n          this.open();\n        }, 1000);\n      }\n    } else {\n      if (this.settings.enableTimeTrigger) {\n        setTimeout(() => {\n          this.open();\n        }, this.settings.timeTriggerTimeout);\n      }\n\n      if (this.settings.enableExitIntentTrigger) {\n        document.removeEventListener(\"mouseleave\", this.handleMouseLeaveListener);\n        document.addEventListener(\"mouseleave\", this.handleMouseLeaveListener);\n      }\n\n      if (this.settings.enableScrollDepthTrigger) {\n        window.removeEventListener(\"scroll\", this.handleScrollListener);\n        window.addEventListener(\"scroll\", this.handleScrollListener, { passive: true });\n      }\n    }\n  }\n\n  open(isSubmitted, activeElement = null) {\n    if (!isSubmitted && !this.isTestMode && theme.helpers.getCookie(this.cookieName)) {\n      return;\n    }\n\n    this.activeElement = activeElement;\n\n    super.open(activeElement);\n  }\n\n  close() {\n    if (this.isBusy) {\n      return;\n    }\n\n    this.isBusy = true;\n\n    this.modal.classList.add(\"modal--is-hiding\");\n    this.modal.classList.remove(\"modal--visible\");\n\n    const visibleModalsOrDrawers = document.querySelector(\".modal.modal--visible, .drawer.open\");\n\n    if (!visibleModalsOrDrawers) {\n      window.bodyScrollLock.clearAllBodyScrollLocks();\n\n      document.documentElement.classList.remove(\"page-no-scroll\");\n    }\n\n    setTimeout(() => {\n      this.modal.classList.remove(\"modal--is-hiding\");\n\n      this.activeElement?.focus();\n    }, 600);\n\n    setTimeout(() => {\n      this.activeElement?.focus();\n    }, 50);\n\n    this.isBusy = false;\n\n    if (this.isTestMode) {\n      theme.helpers.deleteCookie(this.cookieName);\n\n      return;\n    }\n\n    theme.helpers.setCookie(this.cookieName, true, this.frequency);\n  }\n}\n\nif (!window.customElements.get(\"newsletter-popup\")) {\n  customElements.define(\"newsletter-popup\", NewsletterPopup);\n}\n\n\nclass NewsletterPopupTrigger extends HTMLButtonElement {\n  constructor() {\n    super();\n\n    this.modal = document.querySelector(\"newsletter-popup\");\n\n    if (this.modal) {\n      this.addEventListener(\"click\", this.handleClick.bind(this));\n    }\n  }\n\n  handleClick() {\n    theme.helpers.deleteCookie(this.modal.cookieName);\n\n    this.modal.open(false, this);\n  }\n}\n\nif (!window.customElements.get(\"newsletter-popup-trigger\")) {\n  customElements.define(\"newsletter-popup-trigger\", NewsletterPopupTrigger, { extends: \"button\" });\n}\n\n\nclass QuickView extends ModalBase {\n  constructor() {\n    super();\n  }\n\n  onThisClick() {\n    if (this.hasAttribute(\"disabled\")) {\n      return;\n    }\n\n    if (window.innerWidth < 1025 && this.hasAttribute(\"data-mobile-disabled\")) {\n      return;\n    }\n\n    let customClass = this.dataset.customClass || \"quickview\";\n\n    customClass = `${customClass} modal--loading`;\n\n    this.classList.add(\"loading\");\n\n    super.init({\n      customClass: customClass,\n    });\n\n    super.open(this);\n\n    const modals = document.querySelectorAll(\".modal.quickview\");\n    this.modal = modals[modals.length - 1];\n\n    fetch(this.url)\n      .then((response) => response.text())\n      .then((text) => {\n        const parsedHTML = new DOMParser().parseFromString(text, \"text/html\");\n        const content = parsedHTML.querySelector(\".product-quick-view__content\");\n\n        if (!content) {\n          return;\n        }\n\n        const colorScheme = content.dataset.colorScheme;\n        const modalContainer = this.modal?.querySelector(\".modal__content\");\n\n        if (modalContainer) {\n          modalContainer.insertAdjacentElement(\"beforeend\", content);\n        }\n\n        this.enableScrolling();\n\n        this.modal.classList.add(colorScheme);\n\n        this.loadScripts(content);\n\n        document.dispatchEvent(new CustomEvent(\"hover-button:apply\"));\n\n        setTimeout(() => {\n          if (this.modal) {\n            this.modal.classList.remove(\"modal--loading\");\n          }\n        }, 200);\n      })\n      .catch((e) => {\n        console.error(e);\n      })\n      .finally(() => {\n        Shopify.PaymentButton.init();\n\n        const mutationObserver = new MutationObserver((mutations) => {\n          const acceleratedCheckoutStyles = document.getElementById(\"shopify-accelerated-checkout\");\n\n          if (acceleratedCheckoutStyles) {\n            acceleratedCheckoutStyles?.remove();\n\n            mutationObserver.disconnect();\n          }\n        });\n\n        mutationObserver.observe(document.head, {\n          childList: true,\n          subtree: true\n        });\n\n        this.classList.remove(\"loading\");\n\n        theme.accessibility.trapFocus(this.modal, this.focusElement);\n      });\n  }\n\n  loadScripts(html) {\n    const scripts = html.querySelectorAll(\"script\");\n\n    scripts.forEach((script) => {\n      const addedScripts = Array.from(document.querySelectorAll(`script[src='${script.src}'], script[src='${script.src.replace(\"https:\", \"\")}']`)).filter((script) => {\n        return !html.contains(script);\n      });\n\n      if (addedScripts.length) {\n        return;\n      }\n\n      const isModule = script.getAttribute(\"type\") === \"module\";\n      const newScript = document.createElement(\"script\");\n\n      newScript.src = script.src;\n      newScript.textContent = script.textContent;\n\n      if (isModule) {\n        newScript.setAttribute(\"type\", \"module\");\n      }\n\n      document.body.appendChild(newScript);\n    });\n  }\n\n  enableScrolling() {\n    const windowSizeQuery = window.matchMedia(\"screen and (min-width: 1024px)\");\n\n    if (windowSizeQuery.matches) {\n      window.bodyScrollLock.enableBodyScroll(this.modal.querySelector(\".modal__content\") || this.modal);\n      window.bodyScrollLock.disableBodyScroll(this.modal.querySelector(\".main-product__content-wrapper\") || this.modal);\n    }\n\n    windowSizeQuery.onchange = (query) => {\n      if (query.matches) {\n        window.bodyScrollLock.enableBodyScroll(this.modal.querySelector(\".modal__content\") || this.modal);\n        window.bodyScrollLock.disableBodyScroll(this.modal.querySelector(\".main-product__content-wrapper\") || this.modal);\n      } else {\n        window.bodyScrollLock.enableBodyScroll(this.modal.querySelector(\".main-product__content-wrapper\") || this.modal);\n        window.bodyScrollLock.disableBodyScroll(this.modal.querySelector(\".modal__content\") || this.modal);\n      }\n    };\n  }\n}\n\n\nclass QuickViewTrigger extends QuickView {\n  constructor() {\n    super();\n\n    this.url = this.dataset.url;\n\n    this.init();\n  }\n\n  init() {\n    this.addEventListener(\"click\", this.onThisClick.bind(this));\n    this.addEventListener(\"keydown\", this.handleKeyPress.bind(this));\n  }\n\n  handleKeyPress(evt) {\n    if (evt.key === \"Enter\" || evt.key === \" \") {\n      evt.preventDefault();\n\n      this.onThisClick(evt);\n    }\n  }\n}\n\nif (!window.customElements.get(\"quick-view-trigger\")) {\n  customElements.define(\"quick-view-trigger\", QuickViewTrigger);\n}\n\n\nclass RevealMediaWithTextOverlay extends HTMLElement {\n  constructor() {\n    super();\n\n    this.sections = Array.from(this.querySelectorAll(\".reveal-media-with-text-overlay__section\"));\n    this.sectionInners = this.querySelectorAll(\".reveal-media-with-text-overlay__section .section__inner\");\n\n    this.updateHeightShift();\n    this.init();\n\n    document.addEventListener(\"breakpoint:sm:match\", this.updateHeightShift.bind(this));\n    document.addEventListener(\"breakpoint:sm:unmatch\", this.updateHeightShift.bind(this));\n  }\n\n  init() {\n    const headerElement = document.querySelector(\".header-section--sticky-always\");\n    const headerHeight = headerElement ? parseFloat(getComputedStyle(document.documentElement).getPropertyValue(\"--header-height\")) || 0 : 0;\n    const minScale = 0.92;\n\n    Motion.scroll((progress) => {\n      const sectionTop = this.getBoundingClientRect().top + window.scrollY - headerHeight;\n      const scrollInSection = Math.max(0, window.scrollY - sectionTop);\n\n      const sectionHeights = this.sections.map((section) => {\n        return section.getBoundingClientRect().height - this.heightShift;\n      });\n\n      const currentSectionIndex = this.findMatchingIndex(scrollInSection, sectionHeights);\n      const currentSection = this.sections[currentSectionIndex];\n\n      let sectionInner, scaleValue;\n\n      this.sectionInners.forEach((sectionInnerBlock, index) => {\n        sectionInner = sectionInnerBlock;\n        scaleValue = index < currentSectionIndex ? minScale : 1;\n\n        Motion.animate(sectionInner, {\n          transform: [`scale(${scaleValue})`]\n        }, { duration: 0, fill: \"forwards\" });\n      });\n\n      if (currentSectionIndex + 1 === this.sections.length || !currentSection) {\n        const firstSectionInner = this.sections[0].querySelector(\".section__inner\");\n\n        Motion.animate(firstSectionInner, {\n          transform: [`scale(1)`]\n        }, { duration: 0, fill: \"forwards\" });\n\n        return;\n      }\n\n      const currentSectionHeight = currentSection.getBoundingClientRect().height - this.heightShift;\n\n      sectionInner = currentSection.querySelector(\".section__inner\");\n\n      let scrolledInsideCurrentSection = scrollInSection;\n\n      for (let i = 0; i < sectionHeights.length; i++) {\n        const sectionHeight = sectionHeights[i];\n\n        if (scrolledInsideCurrentSection - sectionHeight >= 0) {\n          scrolledInsideCurrentSection -= sectionHeight;\n        } else {\n          break;\n        }\n      }\n\n      scaleValue = 1 - (1 - minScale) * (scrolledInsideCurrentSection / currentSectionHeight);\n\n      Motion.animate(sectionInner, {\n        transform: [`scale(${scaleValue})`]\n      }, { duration: 0, fill: \"forwards\" });\n    }, {\n      target: this,\n      offset: [[0, 1], [1, 1]]\n    });\n  }\n\n  updateHeightShift() {\n    const borderRadius = Number.parseFloat(getComputedStyle(this).getPropertyValue(\"--border-radius\"));\n    const borderRadiusMultiplier = Number.parseInt(getComputedStyle(this).getPropertyValue(\"--border-radius-multiplier\"));\n\n    this.heightShift = borderRadius * borderRadiusMultiplier;\n  }\n\n  findMatchingIndex(value, arr) {\n    let cumulativeSum = 0;\n\n    for (let i = 0; i < arr.length; i++) {\n      cumulativeSum += arr[i];\n\n      if (cumulativeSum > value) {\n        return i;\n      }\n    }\n\n    return -1;\n  }\n}\n\nif (!window.customElements.get(\"reveal-media-with-text-overlay\")) {\n  customElements.define(\"reveal-media-with-text-overlay\", RevealMediaWithTextOverlay);\n}\n\n\nclass ScrollingBanner extends HTMLElement {\n  constructor() {\n    super();\n\n    if (theme.params.isMotionReduced) {\n      return;\n    }\n\n    this.rows = this.querySelectorAll(\".scrolling-banner__row\");\n    this.scrollingType = this.dataset.scrollingType;\n\n    Motion.inView(this, this.init.bind(this), {\n      margin: \"150px 0px 150px 0px\"\n    });\n  }\n\n  init() {\n    this.rows.forEach((row) => {\n      const rowInner = row.querySelector(\".scrolling-banner__row-inner\");\n      const direction = row.dataset.direction;\n      const scrollingSpeed = row.dataset.scrollingSpeed || 15;\n\n      if (rowInner.childElementCount === 1) {\n        const childElement = rowInner.firstElementChild;\n        const parentWidth = rowInner.getBoundingClientRect().width;\n        const childElementWidth = childElement.getBoundingClientRect().width;\n        const maximum = Math.ceil(parentWidth / childElementWidth) + 2;\n\n        for (let i = 0; i < maximum; i++) {\n          const clone = childElement.cloneNode(true);\n\n          clone.setAttribute(\"aria-hidden\", \"true\");\n          rowInner.appendChild(clone);\n        }\n\n        const duration = scrollingSpeed * Math.min(2.5, childElementWidth / parentWidth);\n\n        row.style.setProperty(\"--speed\", `${duration}s`);\n      }\n\n      if (!theme.params.isTouchDevice && (this.scrollingType === \"on-scroll\" || this.scrollingType === \"both\")) {\n        let translate = 30;\n\n        if (direction === \"right\" || theme.params.isRtlDirection) {\n          translate = -30;\n        }\n\n        Motion.scroll(\n          Motion.animate(rowInner, {\n            transform: [`translateX(${translate}%)`, \"translateX(0)\"]\n          }, {\n            easing: \"linear\"\n          }),\n          {\n            target: rowInner,\n            offset: [\"start end\", \"end start\"]\n          }\n        );\n      }\n    });\n  }\n}\n\nif (!window.customElements.get(\"scrolling-banner\")) {\n  customElements.define(\"scrolling-banner\", ScrollingBanner);\n}\n\n\nclass ScrollingVerticalContent extends HTMLElement {\n  constructor() {\n    super();\n\n    this.content = this.querySelector(\".scrolling-vertical-content__content\");\n    this.items = this.querySelectorAll(\".scrolling-vertical-content__block\");\n    this.scrollingItems = this.querySelectorAll(\".scrolling-vertical-content__block[data-scroll-speed]\");\n    this.slider = this.querySelector(\".scrolling-vertical-content__blocks\");\n\n    this.calculateHeight();\n    this.applyClassForVisibleItems();\n\n    this.handleScrollListener = theme.helpers.throttle(this.handleScroll.bind(this));\n    this.handleResizeListener = theme.helpers.throttle(this.handleResize.bind(this));\n    this.handleSectionLoadListener = this.handleSectionLoad.bind(this);\n\n    if (this.scrollingItems.length > 0) {\n      this.scrollParallax();\n      this.calculateHeight();\n    }\n  }\n\n  connectedCallback() {\n    window.addEventListener(\"resize\", this.handleResizeListener, { passive: true });\n\n    if (this.scrollingItems.length > 0) {\n      window.addEventListener(\"scroll\", this.handleScrollListener, { passive: true });\n    }\n\n    if (Shopify.designMode) {\n      document.addEventListener(\"shopify:section:load\", this.handleSectionLoadListener);\n    }\n  }\n\n  disconnectedCallback() {\n    window.removeEventListener(\"resize\", this.handleResizeListener);\n\n    if (this.scrollingItems.length > 0) {\n      window.removeEventListener(\"scroll\", this.handleScrollListener);\n    }\n\n    if (Shopify.designMode) {\n      document.removeEventListener(\"shopify:section:load\", this.handleSectionLoadListener);\n    }\n  }\n\n  handleSectionLoad() {\n    this.scrollParallax();\n    this.calculateHeight();\n  }\n\n  handleScroll() {\n    this.scrollParallax();\n  }\n\n  handleResize() {\n    this.scrollParallax();\n    this.calculateHeight();\n  }\n\n  applyClassForVisibleItems() {\n    if (!this.content) {\n      return;\n    }\n\n    Motion.inView(this, () => {\n      this.classList.add(\"visible\");\n    });\n  }\n\n  scrollParallax() {\n    const windowHeight = document.documentElement.clientHeight;\n    const windowWidth = document.documentElement.clientWidth;\n\n    if (windowWidth < 768 || windowWidth <= windowHeight) {\n      return;\n    }\n\n    const sliderClientRect = this.slider.getBoundingClientRect();\n    const sliderOffsetHeight = this.slider.offsetHeight;\n    const halfDiff = (windowHeight - sliderOffsetHeight) / 2;\n    const baseValue = sliderClientRect.y - halfDiff;\n    const thresholdUpper = windowHeight * 2;\n\n    this.scrollingItems.forEach((item, index) => {\n      const elementY = item.getBoundingClientRect().y;\n      const scrollFactor = +item.dataset.scrollSpeed;\n\n      if (elementY < thresholdUpper && elementY > (item.offsetHeight + windowHeight) * -1) {\n        const scrollingValue = (baseValue * scrollFactor) / 2;\n\n        if (Math.abs(scrollingValue) < windowHeight) {\n          item.style.transform = `translate3d(0, ${scrollingValue}px, 0)`;\n        }\n      }\n    });\n  }\n\n  calculateHeight() {\n    let height = 0;\n\n    this.items.forEach((elm) => {\n      const totalHeight = elm.offsetHeight + elm.offsetTop;\n\n      if (totalHeight > height) {\n        height = totalHeight;\n      }\n    });\n\n    this.slider.style.height = `${height}px`;\n  }\n}\n\nif (!window.customElements.get(\"scrolling-vertical-content\")) {\n  customElements.define(\"scrolling-vertical-content\", ScrollingVerticalContent);\n}\n\n\nclass ShopTheLook extends HTMLElement {\n  constructor() {\n    super();\n\n    this.productsContainer = this.querySelector(\".shop-the-look__products\");\n    this.products = this.querySelectorAll(\".shop-the-look__product\");\n    this.items = this.querySelectorAll(\".shop-the-look__item-inner\");\n    this.carousel = this.querySelector(\".shop-the-look__carousel\");\n    this.productsPosition = this.dataset.productsPosition;\n\n    this.init();\n\n    document.addEventListener(\"breakpoint:lg:match\", this.animateProducts.bind(this));\n    document.addEventListener(\"breakpoint:lg:unmatch\", this.stopAnimatingProducts.bind(this));\n  }\n\n  init() {\n    this.initItems();\n    this.handleSlideChange();\n\n    if (theme.config.isLargeQuery) {\n      this.animateProducts();\n    } else {\n      this.stopAnimatingProducts();\n    }\n  }\n\n  animateProducts() {\n    if (theme.params.isMotionReduced || theme.params.isTouchDevice || theme.config.isSmallQuery || theme.config.isMediumQuery) {\n      return;\n    }\n\n    let transformAnimation = [\"perspective(15cm) rotateX(15deg) rotateY(5deg)\", \"perspective(15cm) rotateX(0deg) rotateY(5deg)\"];\n\n    if (this.productsPosition === \"right\") {\n      transformAnimation = [\"perspective(15cm) rotateX(15deg) rotateY(-5deg)\", \"perspective(15cm) rotateX(0deg) rotateY(-5deg)\"];\n    }\n\n    this.productsAnimation = Motion.scroll(\n      Motion.animate(this.productsContainer, {\n        transform: transformAnimation\n      }), {\n        target: this,\n        offset: [\n          [0, 1], [1, 1]\n        ]\n      });\n  }\n\n  stopAnimatingProducts() {\n    if (this.productsAnimation) {\n      this.productsAnimation();\n    }\n\n    Motion.animate(this.productsContainer, {\n      transform: [\"perspective(1px) rotateX(0) rotateY(0)\"]\n    }, { duration: 0, fill: \"forwards\" });\n\n    this.productsContainer.style.transform = \"none\";\n  }\n\n  initItems() {\n    this.items.forEach((item) => {\n      const itemParent = item.parentElement;\n      const position = +itemParent.dataset.productPosition;\n\n      item.addEventListener(\"mouseenter\", () => {\n        this.goToSlide(itemParent, position);\n        this.showActiveProduct(itemParent);\n      });\n\n      item.addEventListener(\"mouseleave\", () => {\n        this.goToSlide(itemParent, position);\n        this.showActiveProduct(itemParent);\n      });\n\n      item.addEventListener(\"focus\", () => {\n        this.goToSlide(itemParent, position);\n        this.showActiveProduct(itemParent);\n      });\n\n      item.addEventListener(\"click\", (e) => {\n        e.preventDefault();\n\n        this.goToSlide(itemParent, position);\n        this.showActiveProduct(itemParent);\n      });\n    });\n  }\n\n  handleSlideChange() {\n    this.carousel.addEventListener(\"carousel:beforeTransitionStart\", (e) => {\n      const activeIndex = e.target.globalSlide.activeIndex;\n\n      this.items.forEach((item, index) => {\n        const itemParent = item.parentElement;\n\n        if (activeIndex === index) {\n          itemParent.classList.add(\"active\");\n          item.setAttribute(\"aria-current\", \"true\");\n        } else {\n          itemParent.classList.remove(\"active\");\n          item.setAttribute(\"aria-current\", \"false\");\n        }\n      });\n    });\n  }\n\n  goToSlide(currentItem, position) {\n    this.carousel?.globalSlide.slideTo(position, 500);\n  }\n\n  showActiveProduct(currentItem) {\n    this.products.forEach((product) => {\n      product.classList.remove(\"active\");\n    });\n\n    this.items.forEach((item) => {\n      const itemParent = item.parentElement;\n      const id = item.getAttribute(\"aria-controls\");\n\n      if (currentItem === itemParent) {\n        const product = document.getElementById(id);\n\n        itemParent.classList.add(\"active\");\n        item.setAttribute(\"aria-current\", \"true\");\n\n        product?.classList.add(\"active\");\n      } else {\n        itemParent.classList.remove(\"active\");\n        item.setAttribute(\"aria-current\", \"false\");\n      }\n    });\n  }\n}\n\nif (!window.customElements.get(\"shop-the-look\")) {\n  customElements.define(\"shop-the-look\", ShopTheLook);\n}\n\n\nclass ShoppableMedia extends HTMLElement {\n  constructor() {\n    super();\n\n    this.mediaPerRowDesktop = parseInt(this.dataset.mediaPerRowDesktop);\n    this.videos = this.querySelectorAll(\"lazy-video\");\n\n    this.blocks = [];\n    this.firstBlocks = [];\n    this.secondBlocks = [];\n    this.animations = [];\n\n    this.playOnlyOneVideo();\n    this.animateBlocksOnScroll();\n\n    document.addEventListener(\"breakpoint:xs:match\", this.animateBlocksOnScroll.bind(this));\n    document.addEventListener(\"breakpoint:xs:unmatch\", this.animateBlocksOnScroll.bind(this));\n    document.addEventListener(\"breakpoint:lg:match\", this.animateBlocksOnScroll.bind(this));\n    document.addEventListener(\"breakpoint:lg:unmatch\", this.animateBlocksOnScroll.bind(this));\n\n    if (Shopify.designMode) {\n      document.addEventListener(\"shopify:section:load\", this.animateBlocksOnScroll.bind(this));\n      document.addEventListener(\"shopify:section:unload\", this.animateBlocksOnScroll.bind(this));\n    }\n  }\n\n  playOnlyOneVideo() {\n    this.videos.forEach((video) => {\n      video.addEventListener(\"is-playing\", () => {\n        theme.helpers.pauseAllMedia();\n      });\n    });\n  }\n\n  animateBlocksOnScroll() {\n    if (theme.params.isMotionReduced) {\n      return;\n    }\n\n    const scrollOptions = {\n      target: this,\n      offset: [\n        [0, 1], [1, 0]\n      ]\n    };\n\n    // Reset all animations\n    this.animations?.forEach((animation) => {\n      animation();\n    });\n\n    this.animations = [];\n\n    this.blocks = this.querySelectorAll(\".grid-cols .grid-custom-item > div\");\n\n    this.blocks.forEach((block) => {\n      block.getAnimations().forEach(animation => animation.cancel());\n\n      block.style.removeProperty(\"transform\");\n      block.style.transform = \"translateY(0)\";\n    });\n\n    if (theme.config.isMediumQuery && !theme.config.isExtraSmallQuery) {\n      // 2 items per row always\n      this.blocks = this.querySelectorAll(\".grid-cols .grid-custom-item:nth-of-type(even) > div\");\n\n      this.blocks.forEach((block) => {\n        this.animations.push(\n          Motion.scroll(\n            Motion.animate(block, {\n              transform: [\"translateY(0)\", \"translateY(-100px)\"]\n            }), scrollOptions\n          )\n         );\n      });\n    } else if (theme.config.isLargeQuery) {\n      switch (this.mediaPerRowDesktop) {\n        case 2:\n          this.blocks = this.querySelectorAll(\".grid-cols .grid-custom-item:nth-of-type(even) > div\");\n\n          break;\n\n        default:\n          this.blocks = [];\n          this.firstBlocks = [];\n          this.secondBlocks = [];\n\n          break;\n      }\n\n      this.blocks.forEach((block) => {\n        this.animations.push(\n          Motion.scroll(\n            Motion.animate(block, {\n              transform: [\"translateY(50px)\", \"translateY(-100px)\"]\n            }), scrollOptions\n          )\n        );\n      });\n\n      this.firstBlocks.forEach((block) => {\n        this.animations.push(\n          Motion.scroll(\n            Motion.animate(block, {\n              transform: [\"translateY(-50px)\", \"translateY(100px)\"]\n            }), scrollOptions\n          )\n        );\n      });\n\n      this.secondBlocks.forEach((block) => {\n        this.animations.push(\n          Motion.scroll(\n            Motion.animate(block, {\n              transform: [\"translateY(50px)\", \"translateY(-100px)\"]\n            }), scrollOptions\n          )\n        );\n      });\n    }\n  }\n}\n\nif (!window.customElements.get(\"shoppable-media\")) {\n  customElements.define(\"shoppable-media\", ShoppableMedia);\n}\n\n\nclass SlideWithThumbs extends HTMLElement {\n  constructor() {\n    super();\n\n    this.globalSlide = null;\n    this.thumbnailSlide = null;\n    this.thumbnailObserver = null;\n\n    this.init();\n  }\n\n  connectedCallback() {\n    this.init();\n  }\n\n  init() {\n    if (this.globalSlide) {\n      return;\n    }\n\n    const settings = theme.helpers.safelyParseJson(this.getAttribute(\"settings\")) || {};\n\n    const defaultSettings = {\n      autoplay: false,\n      loop: false,\n      itemDesktop: 4,\n      itemTablet: 1,\n      itemMobile: 1,\n      direction: \"horizontal\",\n      autoplaySpeed: 3000,\n      speed: 400,\n      effect: \"slide\",\n      row: 1,\n      spacingOnMobile: 0,\n      spacingOnDesktop: 0,\n      paginationProgressbar: false,\n      autoItem: false,\n      arrowCenterImage: 0,\n      pauseOnMouseEnter: false,\n      hasThumbnails: true,\n      autoplayVideo: false,\n    };\n\n    this.settings = {...defaultSettings, ...settings};\n\n    if (this.settings.hasThumbnails) {\n      this.initThumbnail();\n\n      if (Shopify.designMode) {\n        document.addEventListener(\"shopify:section:load\", () => {\n          this.initThumbnail();\n        });\n      }\n    }\n\n    this.initSlide();\n    this.pauseMedia();\n    this.playMedia();\n  }\n\n  initSlide() {\n    if (this.settings.autoplay) {\n      this.settings.autoplay = {\n        delay: this.settings.autoplaySpeed,\n        pauseOnMouseEnter: this.settings.pauseOnMouseEnter,\n      };\n    }\n\n    if (!this.settings.itemTablet) {\n      if (this.settings.itemDesktop < 2) {\n        this.settings.itemTablet = 1;\n      } else if (this.settings.itemDesktop < 3) {\n        this.settings.itemTablet = 2;\n      } else {\n        this.settings.itemTablet = 3;\n      }\n    }\n\n    const container = this.querySelector(\".product-slider__navigation\");\n    const initSwiper = this.querySelector(\".product-slider\");\n\n    this.globalSlide = new Swiper(initSwiper, {\n      slidesPerView: this.settings.autoItem ? \"auto\" : this.settings.itemMobile,\n      spaceBetween: this.settings.spacingOnMobile,\n      autoplay: this.settings.autoplay,\n      direction: \"horizontal\",\n      loop: this.settings.loop,\n      effect: this.settings.effect,\n      watchSlidesProgress: true,\n      fadeEffect: {\n        crossFade: true\n      },\n      speed: this.settings.speed,\n      autoHeight: false,\n      allowTouchMove: true,\n      navigation: {\n        nextEl: [container?.querySelector(\".swiper-button-next\"), this.querySelector(\".swiper-actions--mobile .swiper-button-next\")],\n        prevEl: [container?.querySelector(\".swiper-button-prev\"), this.querySelector(\".swiper-actions--mobile .swiper-button-prev\")],\n      },\n      pagination: {\n        enabled: true,\n        clickable: true,\n        dynamicBullets: true,\n        el: this.querySelector(\".swiper-pagination\"),\n      },\n      on: {\n        slideChange: () => {\n          const thumbnails = this.querySelectorAll(\".product-thumbnails-slider .swiper-slide-thumb-active\");\n\n          thumbnails[1]?.classList.remove(\"swiper-slide-thumb-active\");\n        },\n      },\n      breakpoints: {\n        768: {\n          slidesPerView: this.settings.itemTablet,\n          spaceBetween: this.settings.spacingOnDesktop,\n          pagination: {\n            enabled: true,\n            clickable: true,\n            dynamicBullets: true,\n            el: this.querySelector(\".swiper-pagination\"),\n          },\n        },\n        1025: {\n          slidesPerView: this.settings.itemDesktop,\n          spaceBetween: this.settings.spacingOnDesktop,\n          pagination: {\n            enabled: true,\n            clickable: true,\n            dynamicBullets: true,\n            el: this.querySelector(\".swiper-pagination\"),\n          },\n        },\n      },\n      thumbs: {\n        swiper: this.thumbnailSlide ? this.thumbnailSlide : null,\n      }\n    });\n  }\n\n  initThumbnail() {\n    const container = this.querySelector(\".product-thumbnails-slider\");\n\n    if (!container) {\n      return;\n    }\n\n    this.thumbnailSlide = new Swiper(container, {\n      direction: \"horizontal\",\n      spaceBetween: 10,\n      slidesPerView: 4,\n      slideToClickedSlide: true,\n      on: {\n        init: () => {\n          const thumbnails = container.querySelectorAll(\".swiper-slide\");\n\n          thumbnails.forEach((thumbnail) => {\n            thumbnail.addEventListener(\"click\", () => {\n              const position = +thumbnail.dataset.position;\n\n              this.functionGoto(position - 1);\n            });\n          });\n        }\n      },\n      breakpoints: {\n        1025: {\n          slidesPerView: 4,\n          spaceBetween: 20,\n        }\n      },\n    });\n\n    this.thumbnailObserver = new MutationObserver(() => {\n      const thumbnails = this.querySelectorAll(\".product-thumbnails-slider .swiper-slide-thumb-active\");\n\n      if (thumbnails[1]) {\n        thumbnails[1]?.classList.remove(\"swiper-slide-thumb-active\");\n      }\n    });\n\n    this.thumbnailObserver.observe(container, {\n      attributes: true,\n      childList: true,\n      subtree: true\n    });\n  }\n\n  pauseMedia() {\n    this.globalSlide.on(\"slideChange\", () => {\n      theme.helpers.pauseAllMedia();\n    });\n  }\n\n  playMedia() {\n    const autoplay = this.settings.autoplayVideo;\n\n    if (!autoplay) {\n      return;\n    }\n\n    const vimeoTag = document.createElement(\"script\");\n\n    vimeoTag.src = \"https://player.vimeo.com/api/player.js\";\n\n    document.head.appendChild(vimeoTag);\n\n    this.globalSlide.on(\"slideChangeTransitionEnd\", function() {\n      const activeSlide = this.slides[this.activeIndex];\n      const video = activeSlide.querySelector(\".media-video\");\n\n      if (video) {\n        if (video.tagName === \"VIDEO\") {\n          video.play();\n        } else if (video.tagName === \"IFRAME\") {\n          if (video.src.includes(\"vimeo\")) {\n            const vimeoPlayer = new Vimeo.Player(video);\n\n            vimeoPlayer.play();\n          }\n\n          if (video.src.includes(\"youtube\")) {\n            video.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"playVideo\",\"args\":\"\"}', '*');\n          }\n        }\n      }\n    });\n  }\n\n  functionGoto(position) {\n    this.globalSlide?.slideTo(position, 500);\n  }\n}\n\nif (!window.customElements.get(\"slide-with-thumbs\")) {\n  customElements.define(\"slide-with-thumbs\", SlideWithThumbs);\n}\n\n\nclass ProductTestimonials extends HTMLElement {\n  constructor() {\n    super();\n\n    this.globalSlide = null;\n    this.thumbnailSlide = null;\n\n    this.mainSlider = this.querySelector(\".product-testimonials__main-slider\");\n    this.productsSlider = this.querySelector(\".product-testimonials__products-slider\");\n    this.productsSliderMobile = this.querySelector(\".product-testimonials__products-slider-mobile\");\n\n    this.init();\n  }\n\n  connectedCallback() {\n    this.init();\n  }\n\n  init() {\n    if (this.globalSlide) {\n      return;\n    }\n\n    const settings = theme.helpers.safelyParseJson(this.getAttribute(\"settings\")) || {};\n\n    const defaultSettings = {\n      autoplay: false,\n      autoplaySpeed: 3000,\n    };\n\n    this.settings = { ...defaultSettings, ...settings };\n\n    this.initThumbnail();\n    this.initSlide();\n\n    if (Shopify.designMode) {\n      document.addEventListener(\"shopify:section:load\", () => {\n        this.initThumbnail();\n      });\n    }\n  }\n\n  initSlide() {\n    if (this.settings.autoplay) {\n      this.settings.autoplay = {\n        delay: this.settings.autoplaySpeed,\n        pauseOnMouseEnter: this.settings.pauseOnMouseEnter,\n      };\n    }\n\n    this.globalSlide = new Swiper(this.mainSlider, {\n      slidesPerView: 1,\n      spaceBetween: 0,\n      speed: 800,\n      autoplay: this.settings.autoplay,\n      direction: \"horizontal\",\n      loop: false,\n      effect: \"fade\",\n      fadeEffect: {\n        crossFade: true\n      },\n      allowTouchMove: true,\n      navigation: {\n        nextEl: [...Array.from(this.querySelectorAll(\".swiper-button-next\"))],\n        prevEl: [...Array.from(this.querySelectorAll(\".swiper-button-prev\"))],\n      },\n      thumbs: {\n        swiper: this.thumbnailSlide ? this.thumbnailSlide : null,\n      },\n      breakpoints: {\n        1025: {\n          allowTouchMove: false,\n        },\n      },\n      on: {\n        slideChange: (slider) => {\n          this.productsSliderMobile.globalSlide.slideTo(slider.realIndex, 500);\n        }\n      }\n    });\n  }\n\n  initThumbnail() {\n    if (!this.productsSlider) {\n      return;\n    }\n\n    this.thumbnailSlide = new Swiper(this.productsSlider, {\n      effect: \"fade\",\n      itemDesktop: 1,\n      itemTablet: 1,\n      itemMobile: 1,\n      autoHeight: true,\n      allowTouchMove: false,\n      fadeEffect: {\n        crossFade: true\n      },\n      on: {\n        beforeTransitionStart: () => {\n          this.productsSlider.classList.add(\"updating\");\n        },\n\n        transitionEnd: () => {\n          this.productsSlider.classList.remove(\"updating\");\n        }\n      }\n    });\n  }\n\n  functionGoto(position) {\n    this.globalSlide?.slideTo(position, 500);\n  }\n}\n\nif (!window.customElements.get(\"product-testimonials\")) {\n  customElements.define(\"product-testimonials\", ProductTestimonials);\n}\n\n\nclass ScrollingTextBanner extends HTMLElement {\n  constructor() {\n    super();\n\n    this.headings = this.querySelectorAll(\".scrolling-text-banner__heading > span\");\n    this.handleResizeListener = theme.helpers.debounce(this.handleResize.bind(this), 150);\n\n    this.load();\n\n    window.addEventListener(\"resize\", this.handleResizeListener, { passive: true });\n  }\n\n  get mobileEnabled() {\n    return true;\n  }\n\n  load() {\n    if (theme.params.isMotionReduced || (!this.mobileEnabled && (theme.params.isTouchDevice || theme.config.isSmallQuery))) {\n      return;\n    }\n\n    this.initParallax();\n  }\n\n  handleResize() {\n    this.resetAnimation();\n    this.initParallax();\n  }\n\n  initParallax() {\n    const animations = [];\n\n    this.headings.forEach((heading) => {\n      const direction = heading.closest(\".scrolling-text-banner__heading--left\") ? \"left\" : \"right\";\n      const sectionWidth = this.getBoundingClientRect().width;\n      const headingWidth = heading.getBoundingClientRect().width;\n      const offset = (sectionWidth - headingWidth) / 3;\n      const calculatedOffset = direction === \"left\" ? offset : offset * -1;\n\n      heading.classList.add(\"inline-block\");\n\n      animations.push(\n        Motion.scroll(\n          Motion.animate(heading, {\n            transform: [`translateX(${calculatedOffset}px)`, \"translateX(0)\"]\n          }), {\n            target: this,\n            offset: [\n              [0, 0.5], [0.5, 0]\n            ]\n          })\n      );\n    });\n\n    this.animations = animations;\n  }\n\n  resetAnimation() {\n    if (theme.params.isMotionReduced || (this.mobileEnabled && (theme.params.isTouchDevice || theme.config.isSmallQuery))) {\n      return;\n    }\n\n    this.animations?.forEach((animation) => {\n      animation();\n    });\n\n    setTimeout(() => {\n      this.headings.forEach((heading) => {\n        Motion.animate(heading, {\n          transform: \"translateX(0)\"\n        }, {\n          duration: 0\n        });\n      });\n    });\n  }\n}\n\nif (!window.customElements.get(\"scrolling-text-banner\")) {\n  customElements.define(\"scrolling-text-banner\", ScrollingTextBanner);\n}\n\n\nclass ScrollingSlides extends HTMLElement {\n  constructor() {\n    super();\n\n    this.slides = Array.from(this.querySelectorAll(\".scrolling-slides__slide\"));\n    this.wrapper = this.querySelector(\".scrolling-slides__wrapper\");\n    this.sectionHeight = 0;\n    this.handleResizeListener = theme.helpers.debounce(this.handleResize.bind(this), 150);\n\n    this.load();\n\n    window.addEventListener(\"resize\", this.handleResizeListener, { passive: true });\n\n    document.addEventListener(\"breakpoint:sm:match\", this.unload.bind(this));\n    document.addEventListener(\"breakpoint:sm:unmatch\", this.load.bind(this));\n  }\n\n  get mobileEnabled() {\n    return false;\n  }\n\n  setSectionHeight() {\n    let width = 0;\n\n    this.slides.forEach((slide, index) => {\n      width += slide.getBoundingClientRect().width;\n    });\n\n    this.sectionHeight = width;\n\n    this.style.setProperty(\"--scrolling-height\", `${width}px`);\n  }\n\n  load() {\n    if (theme.params.isMotionReduced || (!this.mobileEnabled && (theme.params.isTouchDevice || theme.config.isSmallQuery))) {\n      return;\n    }\n\n    this.setSectionHeight();\n    this.initParallax();\n  }\n\n  handleResize() {\n    this.resetAnimation();\n    this.setSectionHeight();\n    this.initParallax();\n  }\n\n  initParallax() {\n    const lastSlide = this.slides[this.slides.length - 1];\n    const slideWidth = lastSlide.getBoundingClientRect().width;\n    const translateToPosition = this.sectionHeight - slideWidth - ((window.innerWidth - slideWidth) / 2);\n\n    const animations = [];\n\n    animations.push(\n      Motion.scroll(\n        Motion.animate(this.wrapper, {\n          transform: [\"translateX(0)\", `translateX(-${translateToPosition}px)`]\n        }), {\n          target: this,\n          offset: [\n            [0, 0], [1, 1]\n          ]\n        })\n    );\n\n    animations.push(\n      Motion.scroll(\n        Motion.animate(this, {\n          \"--overlay-opacity\": [80, 0]\n        }), {\n          target: this,\n          offset: [\n            [1, 0], [1, 1]\n          ]\n        })\n    );\n\n    animations.push(\n      Motion.scroll(\n        Motion.animate(lastSlide, {\n          transform: [\"scale(0.6)\", \"scale(1)\"]\n        }), {\n          target: this,\n          offset: [\n            [1, 0], [1, 1]\n          ]\n        })\n    );\n\n    this.slides.forEach((slide) => {\n      if (slide.classList.contains(\"scrolling-slides__slide--content\")) {\n        return;\n      }\n\n      Motion.inView(slide, (element, enterInfo) => {\n        element.classList.add(\"scrolling-slides__slide--visible\");\n\n        return () => {\n          element.classList.remove(\"scrolling-slides__slide--visible\");\n        }\n      }, {\n        amount: 0.2\n      });\n    });\n\n    this.animations = animations;\n  }\n\n  resetAnimation() {\n    if (theme.params.isMotionReduced || (this.mobileEnabled && (theme.params.isTouchDevice || theme.config.isSmallQuery))) {\n      return;\n    }\n\n    const lastSlide = this.slides[this.slides.length - 1];\n\n    this.animations?.forEach((animation) => {\n      animation();\n    });\n\n    setTimeout(() => {\n      Motion.animate(this.wrapper, {\n        transform: \"translateX(0)\"\n      }, {\n        duration: 0\n      });\n\n      Motion.animate(lastSlide, {\n        transform: \"scale(1)\"\n      }, {\n        duration: 0\n      });\n    });\n\n    this.slides.forEach((slide) => {\n      slide.classList.remove(\"scrolling-slides__slide--visible\");\n    });\n  }\n\n  unload() {\n    this.style.removeProperty(\"--scrolling-height\");\n  }\n}\n\nif (!window.customElements.get(\"scrolling-slides\")) {\n  customElements.define(\"scrolling-slides\", ScrollingSlides);\n}"],
  "mappings": "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",
  "names": ["cents", "slideAnimation", "button", "variant", "option", "variantInventory", "buyNow", "observer", "timeLeft", "script"]
}
