{
  "version": 3,
  "sources": ["/cdn/shop/t/8/assets/theme.js?section_id=api-cart-items"],
  "sourcesContent": ["/*\n * @license\n * Broadcast Theme (c) Invisible Themes\n *\n * This file is included for advanced development by\n * Shopify Agencies.  Modified versions of the theme\n * code are not supported by Shopify or Invisible Themes.\n *\n * In order to use this file you will need to change\n * theme.js to theme.dev.js in /layout/theme.liquid\n *\n */\n\n(function (scrollLock, Flickity, FlickityFade) {\n  \"use strict\";\n\n  (function () {\n    const env = { NODE_ENV: \"production\" };\n    try {\n      if (process) {\n        process.env = Object.assign({}, process.env);\n        Object.assign(process.env, env);\n        return;\n      }\n    } catch (e) {} // avoid ReferenceError: process is not defined\n    globalThis.process = { env: env };\n  })();\n\n  window.theme = window.theme || {};\n\n  window.theme.sizes = {\n    mobile: 480,\n    small: 750,\n    large: 990,\n    widescreen: 1400,\n  };\n\n  window.theme.focusable =\n    'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n\n  function appendCartItems() {\n    if (document.querySelector(\"cart-items\")) return;\n\n    // Add cart items tag when the cart drawer section is missing so we can still run the JS associated with the error handling\n    const cartItems = document.createElement(\"cart-items\");\n    document.body.appendChild(cartItems);\n  }\n\n  function floatLabels(container) {\n    const floats = container.querySelectorAll(\".form-field\");\n    floats.forEach((element) => {\n      const label = element.querySelector(\"label\");\n      const input = element.querySelector(\"input, textarea\");\n      if (label && input) {\n        input.addEventListener(\"keyup\", (event) => {\n          if (event.target.value !== \"\") {\n            label.classList.add(\"label--float\");\n          } else {\n            label.classList.remove(\"label--float\");\n          }\n        });\n        if (input.value && input.value.length) {\n          label.classList.add(\"label--float\");\n        }\n      }\n    });\n  }\n\n  let screenOrientation = getScreenOrientation();\n  window.initialWindowHeight = Math.min(\n    window.screen.height,\n    window.innerHeight,\n  );\n\n  function readHeights() {\n    const h = {};\n    h.windowHeight = Math.min(window.screen.height, window.innerHeight);\n    h.footerHeight = getHeight('[data-section-type*=\"footer\"]');\n    h.headerHeight = getHeight(\"[data-header-height]\");\n    h.stickyHeaderHeight = document.querySelector(\"[data-header-sticky]\")\n      ? h.headerHeight\n      : 0;\n    h.collectionNavHeight = getHeight(\"[data-collection-nav]\");\n    h.logoHeight = getFooterLogoWithPadding();\n\n    return h;\n  }\n\n  function setVarsOnResize() {\n    document.addEventListener(\"theme:resize\", resizeVars);\n    setVars();\n  }\n\n  function setVars() {\n    const {\n      windowHeight,\n      headerHeight,\n      logoHeight,\n      footerHeight,\n      collectionNavHeight,\n    } = readHeights();\n\n    document.documentElement.style.setProperty(\n      \"--full-height\",\n      `${windowHeight}px`,\n    );\n    document.documentElement.style.setProperty(\n      \"--three-quarters\",\n      `${windowHeight * (3 / 4)}px`,\n    );\n    document.documentElement.style.setProperty(\n      \"--two-thirds\",\n      `${windowHeight * (2 / 3)}px`,\n    );\n    document.documentElement.style.setProperty(\n      \"--one-half\",\n      `${windowHeight / 2}px`,\n    );\n    document.documentElement.style.setProperty(\n      \"--one-third\",\n      `${windowHeight / 3}px`,\n    );\n\n    document.documentElement.style.setProperty(\n      \"--collection-nav-height\",\n      `${collectionNavHeight}px`,\n    );\n    document.documentElement.style.setProperty(\n      \"--header-height\",\n      `${headerHeight}px`,\n    );\n    document.documentElement.style.setProperty(\n      \"--footer-height\",\n      `${footerHeight}px`,\n    );\n    document.documentElement.style.setProperty(\n      \"--content-full\",\n      `${windowHeight - headerHeight - logoHeight / 2}px`,\n    );\n    document.documentElement.style.setProperty(\n      \"--content-min\",\n      `${windowHeight - headerHeight - footerHeight}px`,\n    );\n  }\n\n  function resizeVars() {\n    // restrict the heights that are changed on resize to avoid iOS jump when URL bar is shown and hidden\n    const {\n      windowHeight,\n      headerHeight,\n      logoHeight,\n      footerHeight,\n      collectionNavHeight,\n    } = readHeights();\n    const currentScreenOrientation = getScreenOrientation();\n\n    if (\n      currentScreenOrientation !== screenOrientation ||\n      window.innerWidth > window.theme.sizes.mobile\n    ) {\n      // Only update the heights on screen orientation change or larger than mobile devices\n      document.documentElement.style.setProperty(\n        \"--full-height\",\n        `${windowHeight}px`,\n      );\n      document.documentElement.style.setProperty(\n        \"--three-quarters\",\n        `${windowHeight * (3 / 4)}px`,\n      );\n      document.documentElement.style.setProperty(\n        \"--two-thirds\",\n        `${windowHeight * (2 / 3)}px`,\n      );\n      document.documentElement.style.setProperty(\n        \"--one-half\",\n        `${windowHeight / 2}px`,\n      );\n      document.documentElement.style.setProperty(\n        \"--one-third\",\n        `${windowHeight / 3}px`,\n      );\n\n      // Update the screen orientation state\n      screenOrientation = currentScreenOrientation;\n    }\n\n    document.documentElement.style.setProperty(\n      \"--collection-nav-height\",\n      `${collectionNavHeight}px`,\n    );\n\n    document.documentElement.style.setProperty(\n      \"--header-height\",\n      `${headerHeight}px`,\n    );\n    document.documentElement.style.setProperty(\n      \"--footer-height\",\n      `${footerHeight}px`,\n    );\n    document.documentElement.style.setProperty(\n      \"--content-full\",\n      `${windowHeight - headerHeight - logoHeight / 2}px`,\n    );\n    document.documentElement.style.setProperty(\n      \"--content-min\",\n      `${windowHeight - headerHeight - footerHeight}px`,\n    );\n  }\n\n  function getScreenOrientation() {\n    if (window.matchMedia(\"(orientation: portrait)\").matches) {\n      return \"portrait\";\n    }\n\n    if (window.matchMedia(\"(orientation: landscape)\").matches) {\n      return \"landscape\";\n    }\n  }\n\n  function getHeight(selector) {\n    const el = document.querySelector(selector);\n    if (el) {\n      return el.offsetHeight;\n    } else {\n      return 0;\n    }\n  }\n\n  function getFooterLogoWithPadding() {\n    const height = getHeight(\"[data-footer-logo]\");\n    if (height > 0) {\n      return height + 20;\n    } else {\n      return 0;\n    }\n  }\n\n  function debounce(fn, time) {\n    let timeout;\n    return function () {\n      // eslint-disable-next-line prefer-rest-params\n      if (fn) {\n        const functionCall = () => fn.apply(this, arguments);\n        clearTimeout(timeout);\n        timeout = setTimeout(functionCall, time);\n      }\n    };\n  }\n\n  function getWindowWidth() {\n    return (\n      document.documentElement.clientWidth ||\n      document.body.clientWidth ||\n      window.innerWidth\n    );\n  }\n\n  function getWindowHeight() {\n    return (\n      document.documentElement.clientHeight ||\n      document.body.clientHeight ||\n      window.innerHeight\n    );\n  }\n\n  function isDesktop() {\n    return getWindowWidth() >= window.theme.sizes.small;\n  }\n\n  function isMobile() {\n    return getWindowWidth() < window.theme.sizes.small;\n  }\n\n  let lastWindowWidth = getWindowWidth();\n  let lastWindowHeight = getWindowHeight();\n\n  function dispatch$1() {\n    document.dispatchEvent(\n      new CustomEvent(\"theme:resize\", {\n        bubbles: true,\n      }),\n    );\n\n    if (lastWindowWidth !== getWindowWidth()) {\n      document.dispatchEvent(\n        new CustomEvent(\"theme:resize:width\", {\n          bubbles: true,\n        }),\n      );\n\n      lastWindowWidth = getWindowWidth();\n    }\n\n    if (lastWindowHeight !== getWindowHeight()) {\n      document.dispatchEvent(\n        new CustomEvent(\"theme:resize:height\", {\n          bubbles: true,\n        }),\n      );\n\n      lastWindowHeight = getWindowHeight();\n    }\n  }\n\n  function resizeListener() {\n    window.addEventListener(\n      \"resize\",\n      debounce(function () {\n        dispatch$1();\n      }, 50),\n    );\n  }\n\n  let prev = window.scrollY;\n  let up = null;\n  let down = null;\n  let wasUp = null;\n  let wasDown = null;\n  let scrollLockTimer = 0;\n\n  function dispatch() {\n    const position = window.scrollY;\n    if (position > prev) {\n      down = true;\n      up = false;\n    } else if (position < prev) {\n      down = false;\n      up = true;\n    } else {\n      up = null;\n      down = null;\n    }\n    prev = position;\n    document.dispatchEvent(\n      new CustomEvent(\"theme:scroll\", {\n        detail: {\n          up,\n          down,\n          position,\n        },\n        bubbles: false,\n      }),\n    );\n    if (up && !wasUp) {\n      document.dispatchEvent(\n        new CustomEvent(\"theme:scroll:up\", {\n          detail: { position },\n          bubbles: false,\n        }),\n      );\n    }\n    if (down && !wasDown) {\n      document.dispatchEvent(\n        new CustomEvent(\"theme:scroll:down\", {\n          detail: { position },\n          bubbles: false,\n        }),\n      );\n    }\n    wasDown = down;\n    wasUp = up;\n  }\n\n  function lock(e) {\n    // Prevent body scroll lock race conditions\n    setTimeout(() => {\n      if (scrollLockTimer) {\n        clearTimeout(scrollLockTimer);\n      }\n\n      scrollLock.disablePageScroll(e.detail, {\n        allowTouchMove: (el) => el.tagName === \"TEXTAREA\",\n      });\n\n      document.documentElement.setAttribute(\"data-scroll-locked\", \"\");\n    });\n  }\n\n  function unlock(e) {\n    const timeout = e.detail;\n\n    if (timeout) {\n      scrollLockTimer = setTimeout(removeScrollLock, timeout);\n    } else {\n      removeScrollLock();\n    }\n  }\n\n  function removeScrollLock() {\n    scrollLock.clearQueueScrollLocks();\n    scrollLock.enablePageScroll();\n    document.documentElement.removeAttribute(\"data-scroll-locked\");\n  }\n\n  function scrollListener() {\n    let timeout;\n    window.addEventListener(\n      \"scroll\",\n      function () {\n        if (timeout) {\n          window.cancelAnimationFrame(timeout);\n        }\n        timeout = window.requestAnimationFrame(function () {\n          dispatch();\n        });\n      },\n      { passive: true },\n    );\n\n    window.addEventListener(\"theme:scroll:lock\", lock);\n    window.addEventListener(\"theme:scroll:unlock\", unlock);\n  }\n\n  const wrap = (toWrap, wrapperClass = \"\", wrapperOption) => {\n    const wrapper = wrapperOption || document.createElement(\"div\");\n    wrapper.classList.add(wrapperClass);\n    toWrap.parentNode.insertBefore(wrapper, toWrap);\n    return wrapper.appendChild(toWrap);\n  };\n\n  function wrapElements(container) {\n    // Target tables to make them scrollable\n    const tableSelectors = \".rte table\";\n    const tables = container.querySelectorAll(tableSelectors);\n    tables.forEach((table) => {\n      wrap(table, \"rte__table-wrapper\");\n      table.setAttribute(\"data-scroll-lock-scrollable\", \"\");\n    });\n\n    // Target iframes to make them responsive\n    const iframeSelectors =\n      '.rte iframe[src*=\"youtube.com/embed\"], .rte iframe[src*=\"player.vimeo\"], .rte iframe#admin_bar_iframe';\n    const frames = container.querySelectorAll(iframeSelectors);\n    frames.forEach((frame) => {\n      wrap(frame, \"rte__video-wrapper\");\n    });\n  }\n\n  function isTouchDevice() {\n    return (\n      \"ontouchstart\" in window ||\n      navigator.maxTouchPoints > 0 ||\n      navigator.msMaxTouchPoints > 0\n    );\n  }\n\n  function isTouch() {\n    if (isTouchDevice()) {\n      document.documentElement.className =\n        document.documentElement.className.replace(\n          \"no-touch\",\n          \"supports-touch\",\n        );\n      window.theme.touch = true;\n    } else {\n      window.theme.touch = false;\n    }\n  }\n\n  function ariaToggle(container) {\n    const toggleButtons = container.querySelectorAll(\"[data-aria-toggle]\");\n    if (toggleButtons.length) {\n      toggleButtons.forEach((element) => {\n        element.addEventListener(\"click\", function (event) {\n          event.preventDefault();\n          const currentTarget = event.currentTarget;\n          currentTarget.setAttribute(\n            \"aria-expanded\",\n            currentTarget.getAttribute(\"aria-expanded\") == \"false\"\n              ? \"true\"\n              : \"false\",\n          );\n          const toggleID = currentTarget.getAttribute(\"aria-controls\");\n          const toggleElement = document.querySelector(`#${toggleID}`);\n          const removeExpandingClass = () => {\n            toggleElement.classList.remove(\"expanding\");\n            toggleElement.removeEventListener(\n              \"transitionend\",\n              removeExpandingClass,\n            );\n          };\n          const addExpandingClass = () => {\n            toggleElement.classList.add(\"expanding\");\n            toggleElement.removeEventListener(\n              \"transitionstart\",\n              addExpandingClass,\n            );\n          };\n\n          toggleElement.addEventListener(\"transitionstart\", addExpandingClass);\n          toggleElement.addEventListener(\"transitionend\", removeExpandingClass);\n\n          toggleElement.classList.toggle(\"expanded\");\n        });\n      });\n    }\n  }\n\n  function loading() {\n    document.body.classList.add(\"is-loaded\");\n  }\n\n  const classes$B = {\n    loading: \"is-loading\",\n  };\n\n  const selectors$M = {\n    img: \"img.is-loading\",\n  };\n\n  /*\n      Catch images loaded events and add class \"is-loaded\" to them and their containers\n    */\n  function loadedImagesEventHook() {\n    document.addEventListener(\n      \"load\",\n      (e) => {\n        if (\n          e.target.tagName.toLowerCase() == \"img\" &&\n          e.target.classList.contains(classes$B.loading)\n        ) {\n          e.target.classList.remove(classes$B.loading);\n          e.target.parentNode.classList.remove(classes$B.loading);\n\n          if (\n            e.target.parentNode.parentNode.classList.contains(classes$B.loading)\n          ) {\n            e.target.parentNode.parentNode.classList.remove(classes$B.loading);\n          }\n        }\n      },\n      true,\n    );\n  }\n\n  /*\n      Remove \"is-loading\" class to the loaded images and their containers\n    */\n  function removeLoadingClassFromLoadedImages(container) {\n    container.querySelectorAll(selectors$M.img).forEach((img) => {\n      if (img.complete) {\n        img.classList.remove(classes$B.loading);\n        img.parentNode.classList.remove(classes$B.loading);\n\n        if (img.parentNode.parentNode.classList.contains(classes$B.loading)) {\n          img.parentNode.parentNode.classList.remove(classes$B.loading);\n        }\n      }\n    });\n  }\n\n  function isVisible(el) {\n    var style = window.getComputedStyle(el);\n    return style.display !== \"none\" && style.visibility !== \"hidden\";\n  }\n\n  /**\n   * Moves focus to an HTML element\n   * eg for In-page links, after scroll, focus shifts to content area so that\n   * next `tab` is where user expects. Used in bindInPageLinks()\n   * eg move focus to a modal that is opened. Used in trapFocus()\n   *\n   * @param {Element} container - Container DOM element to trap focus inside of\n   * @param {Object} options - Settings unique to your theme\n   * @param {string} options.className - Class name to apply to element on focus.\n   */\n  function forceFocus(element, options) {\n    options = options || {};\n\n    var savedTabIndex = element.tabIndex;\n\n    element.tabIndex = -1;\n    element.dataset.tabIndex = savedTabIndex;\n    element.focus();\n    if (typeof options.className !== \"undefined\") {\n      element.classList.add(options.className);\n    }\n    element.addEventListener(\"blur\", callback);\n\n    function callback(event) {\n      event.target.removeEventListener(event.type, callback);\n\n      element.tabIndex = savedTabIndex;\n      delete element.dataset.tabIndex;\n      if (typeof options.className !== \"undefined\") {\n        element.classList.remove(options.className);\n      }\n    }\n  }\n\n  /**\n   * If there's a hash in the url, focus the appropriate element\n   * This compensates for older browsers that do not move keyboard focus to anchor links.\n   * Recommendation: To be called once the page in loaded.\n   *\n   * @param {Object} options - Settings unique to your theme\n   * @param {string} options.className - Class name to apply to element on focus.\n   * @param {string} options.ignore - Selector for elements to not include.\n   */\n\n  function focusHash(options) {\n    options = options || {};\n    var hash = window.location.hash;\n    var element = document.getElementById(hash.slice(1));\n\n    // if we are to ignore this element, early return\n    if (element && options.ignore && element.matches(options.ignore)) {\n      return false;\n    }\n\n    if (hash && element) {\n      forceFocus(element, options);\n    }\n  }\n\n  /**\n   * When an in-page (url w/hash) link is clicked, focus the appropriate element\n   * This compensates for older browsers that do not move keyboard focus to anchor links.\n   * Recommendation: To be called once the page in loaded.\n   *\n   * @param {Object} options - Settings unique to your theme\n   * @param {string} options.className - Class name to apply to element on focus.\n   * @param {string} options.ignore - CSS selector for elements to not include.\n   */\n\n  function bindInPageLinks(options) {\n    options = options || {};\n    var links = Array.prototype.slice.call(\n      document.querySelectorAll('a[href^=\"#\"]'),\n    );\n\n    function queryCheck(selector) {\n      return document.getElementById(selector) !== null;\n    }\n\n    return links.filter(function (link) {\n      if (link.hash === \"#\" || link.hash === \"\") {\n        return false;\n      }\n\n      if (options.ignore && link.matches(options.ignore)) {\n        return false;\n      }\n\n      if (!queryCheck(link.hash.substr(1))) {\n        return false;\n      }\n\n      var element = document.querySelector(link.hash);\n\n      if (!element) {\n        return false;\n      }\n\n      link.addEventListener(\"click\", function () {\n        forceFocus(element, options);\n      });\n\n      return true;\n    });\n  }\n\n  function focusable(container) {\n    var elements = Array.prototype.slice.call(\n      container.querySelectorAll(\n        \"[tabindex],\" +\n          \"[draggable],\" +\n          \"a[href],\" +\n          \"area,\" +\n          \"button:enabled,\" +\n          \"input:not([type=hidden]):enabled,\" +\n          \"object,\" +\n          \"select:enabled,\" +\n          \"textarea:enabled\",\n      ),\n    );\n\n    // Filter out elements that are not visible.\n    // Copied from jQuery https://github.com/jquery/jquery/blob/2d4f53416e5f74fa98e0c1d66b6f3c285a12f0ce/src/css/hiddenVisibleSelectors.js\n    return elements.filter(function (element) {\n      return !!(\n        (element.offsetWidth ||\n          element.offsetHeight ||\n          element.getClientRects().length) &&\n        isVisible(element)\n      );\n    });\n  }\n\n  /**\n   * Traps the focus in a particular container\n   *\n   * @param {Element} container - Container DOM element to trap focus inside of\n   * @param {Element} elementToFocus - Element to be focused on first\n   * @param {Object} options - Settings unique to your theme\n   * @param {string} options.className - Class name to apply to element on focus.\n   */\n\n  var trapFocusHandlers = {};\n\n  function trapFocus(container, options) {\n    options = options || {};\n    var elements = focusable(container);\n    var elementToFocus = options.elementToFocus || container;\n    var first = elements[0];\n    var last = elements[elements.length - 1];\n\n    removeTrapFocus();\n\n    trapFocusHandlers.focusin = function (event) {\n      if (\n        container !== event.target &&\n        !container.contains(event.target) &&\n        first &&\n        first === event.target\n      ) {\n        first.focus();\n      }\n\n      if (\n        event.target !== container &&\n        event.target !== last &&\n        event.target !== first\n      )\n        return;\n      document.addEventListener(\"keydown\", trapFocusHandlers.keydown);\n    };\n\n    trapFocusHandlers.focusout = function () {\n      document.removeEventListener(\"keydown\", trapFocusHandlers.keydown);\n    };\n\n    trapFocusHandlers.keydown = function (event) {\n      if (event.code !== \"Tab\") return; // If not TAB key\n\n      // On the last focusable element and tab forward, focus the first element.\n      if (event.target === last && !event.shiftKey) {\n        event.preventDefault();\n        first.focus();\n      }\n\n      //  On the first focusable element and tab backward, focus the last element.\n      if (\n        (event.target === container || event.target === first) &&\n        event.shiftKey\n      ) {\n        event.preventDefault();\n        last.focus();\n      }\n    };\n\n    document.addEventListener(\"focusout\", trapFocusHandlers.focusout);\n    document.addEventListener(\"focusin\", trapFocusHandlers.focusin);\n\n    forceFocus(elementToFocus, options);\n  }\n\n  /**\n   * Removes the trap of focus from the page\n   */\n  function removeTrapFocus() {\n    document.removeEventListener(\"focusin\", trapFocusHandlers.focusin);\n    document.removeEventListener(\"focusout\", trapFocusHandlers.focusout);\n    document.removeEventListener(\"keydown\", trapFocusHandlers.keydown);\n  }\n\n  /**\n   * Auto focus the last element\n   */\n  function autoFocusLastElement() {\n    if (\n      window.a11y.lastElement &&\n      document.body.classList.contains(\"is-focused\")\n    ) {\n      setTimeout(() => {\n        window.a11y.lastElement?.focus();\n      });\n    }\n  }\n\n  /**\n   * Add a preventive message to external links and links that open to a new window.\n   * @param {string} elements - Specific elements to be targeted\n   * @param {object} options.messages - Custom messages to overwrite with keys: newWindow, external, newWindowExternal\n   * @param {string} options.messages.newWindow - When the link opens in a new window (e.g. target=\"_blank\")\n   * @param {string} options.messages.external - When the link is to a different host domain.\n   * @param {string} options.messages.newWindowExternal - When the link is to a different host domain and opens in a new window.\n   * @param {object} options.prefix - Prefix to namespace \"id\" of the messages\n   */\n  function accessibleLinks(elements, options) {\n    if (typeof elements !== \"string\") {\n      throw new TypeError(elements + \" is not a String.\");\n    }\n\n    elements = document.querySelectorAll(elements);\n\n    if (elements.length === 0) {\n      return;\n    }\n\n    options = options || {};\n    options.messages = options.messages || {};\n\n    var messages = {\n      newWindow: options.messages.newWindow || \"Opens in a new window.\",\n      external: options.messages.external || \"Opens external website.\",\n      newWindowExternal:\n        options.messages.newWindowExternal ||\n        \"Opens external website in a new window.\",\n    };\n\n    var prefix = options.prefix || \"a11y\";\n\n    var messageSelectors = {\n      newWindow: prefix + \"-new-window-message\",\n      external: prefix + \"-external-message\",\n      newWindowExternal: prefix + \"-new-window-external-message\",\n    };\n\n    function generateHTML(messages) {\n      var container = document.createElement(\"ul\");\n      var htmlMessages = Object.keys(messages).reduce(function (html, key) {\n        return (html +=\n          \"<li id=\" + messageSelectors[key] + \">\" + messages[key] + \"</li>\");\n      }, \"\");\n\n      container.setAttribute(\"hidden\", true);\n      container.innerHTML = htmlMessages;\n\n      document.body.appendChild(container);\n    }\n\n    function externalSite(link) {\n      return link.hostname !== window.location.hostname;\n    }\n\n    elements.forEach(function (link) {\n      var target = link.getAttribute(\"target\");\n      var rel = link.getAttribute(\"rel\");\n      var isExternal = externalSite(link);\n      var isTargetBlank = target === \"_blank\";\n      var missingRelNoopener = rel === null || rel.indexOf(\"noopener\") === -1;\n\n      if (isTargetBlank && missingRelNoopener) {\n        var relValue = rel === null ? \"noopener\" : rel + \" noopener\";\n        link.setAttribute(\"rel\", relValue);\n      }\n\n      if (isExternal && isTargetBlank) {\n        link.setAttribute(\n          \"aria-describedby\",\n          messageSelectors.newWindowExternal,\n        );\n      } else if (isExternal) {\n        link.setAttribute(\"aria-describedby\", messageSelectors.external);\n      } else if (isTargetBlank) {\n        link.setAttribute(\"aria-describedby\", messageSelectors.newWindow);\n      }\n    });\n\n    generateHTML(messages);\n  }\n\n  var a11y = /*#__PURE__*/ Object.freeze({\n    __proto__: null,\n    forceFocus: forceFocus,\n    focusHash: focusHash,\n    bindInPageLinks: bindInPageLinks,\n    focusable: focusable,\n    trapFocus: trapFocus,\n    removeTrapFocus: removeTrapFocus,\n    autoFocusLastElement: autoFocusLastElement,\n    accessibleLinks: accessibleLinks,\n  });\n\n  /*\n      Trigger event after animation completes\n    */\n  function waitForAnimationEnd(element) {\n    return new Promise((resolve) => {\n      function onAnimationEnd(event) {\n        if (event.target != element) return;\n\n        element.removeEventListener(\"animationend\", onAnimationEnd);\n        resolve();\n      }\n\n      element?.addEventListener(\"animationend\", onAnimationEnd);\n    });\n  }\n\n  const selectors$L = {\n    drawerInner: \"[data-drawer-inner]\",\n    drawerClose: \"[data-drawer-close]\",\n    drawerMenu: \"[data-drawer-menu]\",\n    underlay: \"[data-drawer-underlay]\",\n    stagger: \"[data-stagger-animation]\",\n    wrapper: \"[data-header-wrapper]\",\n    focusable:\n      'button, [href], select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n  };\n\n  const classes$A = {\n    animated: \"drawer--animated\",\n    open: \"is-open\",\n    closing: \"is-closing\",\n    isFocused: \"is-focused\",\n    headerStuck: \"js__header__stuck\",\n  };\n\n  class HeaderDrawer extends HTMLElement {\n    constructor() {\n      super();\n\n      this.isAnimating = false;\n      this.drawer = this;\n      this.drawerMenu = this.querySelector(selectors$L.drawerMenu);\n\n      this.drawerInner = this.querySelector(selectors$L.drawerInner);\n      this.underlay = this.querySelector(selectors$L.underlay);\n      this.triggerButton = null;\n\n      this.staggers = this.querySelectorAll(selectors$L.stagger);\n      this.showDrawer = this.showDrawer.bind(this);\n      this.hideDrawer = this.hideDrawer.bind(this);\n\n      this.connectDrawer();\n      this.closers();\n    }\n\n    connectDrawer() {\n      this.addEventListener(\"theme:drawer:toggle\", (e) => {\n        this.triggerButton = e.detail?.button;\n\n        if (this.classList.contains(classes$A.open)) {\n          this.dispatchEvent(\n            new CustomEvent(\"theme:drawer:close\", {\n              bubbles: true,\n            }),\n          );\n        } else {\n          this.dispatchEvent(\n            new CustomEvent(\"theme:drawer:open\", {\n              bubbles: true,\n            }),\n          );\n        }\n      });\n\n      this.addEventListener(\"theme:drawer:close\", this.hideDrawer);\n      this.addEventListener(\"theme:drawer:open\", this.showDrawer);\n\n      document.addEventListener(\"theme:cart-drawer:open\", this.hideDrawer);\n    }\n\n    closers() {\n      this.querySelectorAll(selectors$L.drawerClose)?.forEach((button) => {\n        button.addEventListener(\"click\", () => {\n          this.hideDrawer();\n        });\n      });\n\n      document.addEventListener(\"keyup\", (event) => {\n        if (event.code !== \"Escape\") {\n          return;\n        }\n\n        this.hideDrawer();\n      });\n\n      this.underlay.addEventListener(\"click\", () => {\n        this.hideDrawer();\n      });\n    }\n\n    showDrawer() {\n      if (this.isAnimating) return;\n\n      this.isAnimating = true;\n\n      this.triggerButton?.setAttribute(\"aria-expanded\", true);\n      this.classList.add(classes$A.open, classes$A.animated);\n\n      document.dispatchEvent(\n        new CustomEvent(\"theme:scroll:lock\", { bubbles: true }),\n      );\n\n      if (this.drawerInner) {\n        removeTrapFocus();\n\n        waitForAnimationEnd(this.drawerInner).then(() => {\n          this.isAnimating = false;\n\n          trapFocus(this.drawerInner, {\n            elementToFocus: this.querySelector(selectors$L.focusable),\n          });\n        });\n      }\n    }\n\n    hideDrawer() {\n      if (this.isAnimating || !this.classList.contains(classes$A.open)) return;\n\n      this.isAnimating = true;\n\n      this.classList.add(classes$A.closing);\n      this.classList.remove(classes$A.open);\n\n      if (this.drawerMenu) {\n        this.drawerMenu.style.height = \"auto\";\n      }\n\n      removeTrapFocus();\n\n      if (this.triggerButton) {\n        this.triggerButton.setAttribute(\"aria-expanded\", false);\n\n        if (document.body.classList.contains(classes$A.isFocused)) {\n          this.triggerButton.focus();\n        }\n      }\n\n      document.dispatchEvent(\n        new CustomEvent(\"theme:scroll:unlock\", { bubbles: true }),\n      );\n\n      waitForAnimationEnd(this.drawerInner).then(() => {\n        this.classList.remove(classes$A.closing, classes$A.animated);\n\n        this.isAnimating = false;\n\n        // Reset menu items state after drawer hiding animation completes\n        document.dispatchEvent(\n          new CustomEvent(\"theme:sliderule:close\", { bubbles: false }),\n        );\n      });\n    }\n\n    disconnectedCallback() {\n      document.removeEventListener(\"theme:cart-drawer:open\", this.hideDrawer);\n    }\n  }\n\n  const selectors$K = {\n    inputSearch: 'input[type=\"search\"]',\n    focusedElements: '[aria-selected=\"true\"] a',\n    resetButton: 'button[type=\"reset\"]',\n  };\n\n  const classes$z = {\n    hidden: \"hidden\",\n  };\n\n  class HeaderSearchForm extends HTMLElement {\n    constructor() {\n      super();\n\n      this.input = this.querySelector(selectors$K.inputSearch);\n      this.resetButton = this.querySelector(selectors$K.resetButton);\n\n      if (this.input) {\n        this.input.form.addEventListener(\"reset\", this.onFormReset.bind(this));\n        this.input.addEventListener(\n          \"input\",\n          debounce((event) => {\n            this.onChange(event);\n          }, 300).bind(this),\n        );\n      }\n    }\n\n    toggleResetButton() {\n      const resetIsHidden = this.resetButton.classList.contains(\n        classes$z.hidden,\n      );\n      if (this.input.value.length > 0 && resetIsHidden) {\n        this.resetButton.classList.remove(classes$z.hidden);\n      } else if (this.input.value.length === 0 && !resetIsHidden) {\n        this.resetButton.classList.add(classes$z.hidden);\n      }\n    }\n\n    onChange() {\n      this.toggleResetButton();\n    }\n\n    shouldResetForm() {\n      return !document.querySelector(selectors$K.focusedElements);\n    }\n\n    onFormReset(event) {\n      // Prevent default so the form reset doesn't set the value gotten from the url on page load\n      event.preventDefault();\n      // Don't reset if the user has selected an element on the predictive search dropdown\n      if (this.shouldResetForm()) {\n        this.input.value = \"\";\n        this.toggleResetButton();\n        event.target.querySelector(selectors$K.inputSearch).focus();\n      }\n    }\n  }\n\n  customElements.define(\"header-search-form\", HeaderSearchForm);\n\n  const selectors$J = {\n    allVisibleElements: '[role=\"option\"]',\n    ariaSelected: '[aria-selected=\"true\"]',\n    popularSearches: \"[data-popular-searches]\",\n    predictiveSearch: \"predictive-search\",\n    predictiveSearchResults: \"[data-predictive-search-results]\",\n    predictiveSearchStatus: \"[data-predictive-search-status]\",\n    searchInput: 'input[type=\"search\"]',\n    searchPopdown: \"[data-popdown]\",\n    searchResultsLiveRegion: \"[data-predictive-search-live-region-count-value]\",\n    searchResultsGroupsWrapper: \"[data-search-results-groups-wrapper]\",\n    searchForText: \"[data-predictive-search-search-for-text]\",\n    sectionPredictiveSearch: \"#shopify-section-predictive-search\",\n    selectedLink: '[aria-selected=\"true\"] a',\n    selectedOption: '[aria-selected=\"true\"] a, button[aria-selected=\"true\"]',\n  };\n\n  class PredictiveSearch extends HeaderSearchForm {\n    constructor() {\n      super();\n      this.a11y = a11y;\n      this.abortController = new AbortController();\n      this.allPredictiveSearchInstances = document.querySelectorAll(\n        selectors$J.predictiveSearch,\n      );\n      this.cachedResults = {};\n      this.input = this.querySelector(selectors$J.searchInput);\n      this.isOpen = false;\n      this.predictiveSearchResults = this.querySelector(\n        selectors$J.predictiveSearchResults,\n      );\n      this.searchPopdown = this.closest(selectors$J.searchPopdown);\n      this.popularSearches = this.searchPopdown?.querySelector(\n        selectors$J.popularSearches,\n      );\n      this.searchTerm = \"\";\n    }\n\n    connectedCallback() {\n      this.input.addEventListener(\"focus\", this.onFocus.bind(this));\n      this.input.form.addEventListener(\"submit\", this.onFormSubmit.bind(this));\n\n      this.addEventListener(\"focusout\", this.onFocusOut.bind(this));\n      this.addEventListener(\"keyup\", this.onKeyup.bind(this));\n      this.addEventListener(\"keydown\", this.onKeydown.bind(this));\n    }\n\n    getQuery() {\n      return this.input.value.trim();\n    }\n\n    onChange() {\n      super.onChange();\n      const newSearchTerm = this.getQuery();\n\n      if (!this.searchTerm || !newSearchTerm.startsWith(this.searchTerm)) {\n        // Remove the results when they are no longer relevant for the new search term\n        // so they don't show up when the dropdown opens again\n        this.querySelector(selectors$J.searchResultsGroupsWrapper)?.remove();\n      }\n\n      // Update the term asap, don't wait for the predictive search query to finish loading\n      this.updateSearchForTerm(this.searchTerm, newSearchTerm);\n\n      this.searchTerm = newSearchTerm;\n\n      if (!this.searchTerm.length) {\n        this.reset();\n        return;\n      }\n\n      this.getSearchResults(this.searchTerm);\n    }\n\n    onFormSubmit(event) {\n      if (\n        !this.getQuery().length ||\n        this.querySelector(selectors$J.selectedLink)\n      )\n        event.preventDefault();\n    }\n\n    onFormReset(event) {\n      super.onFormReset(event);\n      if (super.shouldResetForm()) {\n        this.searchTerm = \"\";\n        this.abortController.abort();\n        this.abortController = new AbortController();\n        this.closeResults(true);\n      }\n    }\n\n    shouldResetForm() {\n      return !document.querySelector(selectors$J.selectedLink);\n    }\n\n    onFocus() {\n      const currentSearchTerm = this.getQuery();\n\n      if (!currentSearchTerm.length) return;\n\n      if (this.searchTerm !== currentSearchTerm) {\n        // Search term was changed from other search input, treat it as a user change\n        this.onChange();\n      } else if (this.getAttribute(\"results\") === \"true\") {\n        this.open();\n      } else {\n        this.getSearchResults(this.searchTerm);\n      }\n    }\n\n    onFocusOut() {\n      setTimeout(() => {\n        if (!this.contains(document.activeElement)) this.close();\n      });\n    }\n\n    onKeyup(event) {\n      if (!this.getQuery().length) this.close(true);\n      event.preventDefault();\n\n      switch (event.code) {\n        case \"ArrowUp\":\n          this.switchOption(\"up\");\n          break;\n        case \"ArrowDown\":\n          this.switchOption(\"down\");\n          break;\n        case \"Enter\":\n          this.selectOption();\n          break;\n      }\n    }\n\n    onKeydown(event) {\n      // Prevent the cursor from moving in the input when using the up and down arrow keys\n      if (event.code === \"ArrowUp\" || event.code === \"ArrowDown\") {\n        event.preventDefault();\n      }\n    }\n\n    updateSearchForTerm(previousTerm, newTerm) {\n      const searchForTextElement = this.querySelector(\n        selectors$J.searchForText,\n      );\n      const currentButtonText = searchForTextElement?.innerText;\n\n      if (currentButtonText) {\n        if (\n          currentButtonText.match(new RegExp(previousTerm, \"g\"))?.length > 1\n        ) {\n          // The new term matches part of the button text and not just the search term, do not replace to avoid mistakes\n          return;\n        }\n        const newButtonText = currentButtonText.replace(previousTerm, newTerm);\n        searchForTextElement.innerText = newButtonText;\n      }\n    }\n\n    switchOption(direction) {\n      if (!this.getAttribute(\"open\")) return;\n\n      const moveUp = direction === \"up\";\n      const selectedElement = this.querySelector(selectors$J.ariaSelected);\n\n      // Filter out hidden elements (duplicated page and article resources) thanks\n      // to this https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent\n      const allVisibleElements = Array.from(\n        this.querySelectorAll(selectors$J.allVisibleElements),\n      ).filter((element) => element.offsetParent !== null);\n\n      let activeElementIndex = 0;\n\n      if (moveUp && !selectedElement) return;\n\n      let selectedElementIndex = -1;\n      let i = 0;\n\n      while (selectedElementIndex === -1 && i <= allVisibleElements.length) {\n        if (allVisibleElements[i] === selectedElement) {\n          selectedElementIndex = i;\n        }\n        i++;\n      }\n\n      this.statusElement.textContent = \"\";\n\n      if (!moveUp && selectedElement) {\n        activeElementIndex =\n          selectedElementIndex === allVisibleElements.length - 1\n            ? 0\n            : selectedElementIndex + 1;\n      } else if (moveUp) {\n        activeElementIndex =\n          selectedElementIndex === 0\n            ? allVisibleElements.length - 1\n            : selectedElementIndex - 1;\n      }\n\n      if (activeElementIndex === selectedElementIndex) return;\n\n      const activeElement = allVisibleElements[activeElementIndex];\n\n      activeElement.setAttribute(\"aria-selected\", true);\n      if (selectedElement) selectedElement.setAttribute(\"aria-selected\", false);\n\n      this.input.setAttribute(\"aria-activedescendant\", activeElement.id);\n    }\n\n    selectOption() {\n      const selectedOption = this.querySelector(selectors$J.selectedOption);\n\n      if (selectedOption) selectedOption.click();\n    }\n\n    getSearchResults(searchTerm) {\n      const queryKey = searchTerm.replace(\" \", \"-\").toLowerCase();\n      this.setLiveRegionLoadingState();\n\n      if (this.cachedResults[queryKey]) {\n        this.renderSearchResults(this.cachedResults[queryKey]);\n        return;\n      }\n\n      fetch(\n        `${theme.routes.predictive_search_url}?q=${encodeURIComponent(searchTerm)}&section_id=predictive-search`,\n        { signal: this.abortController.signal },\n      )\n        .then((response) => {\n          if (!response.ok) {\n            var error = new Error(response.status);\n            this.close();\n            throw error;\n          }\n\n          return response.text();\n        })\n        .then((text) => {\n          const resultsMarkup = new DOMParser()\n            .parseFromString(text, \"text/html\")\n            .querySelector(selectors$J.sectionPredictiveSearch).innerHTML;\n          // Save bandwidth keeping the cache in all instances synced\n          this.allPredictiveSearchInstances.forEach(\n            (predictiveSearchInstance) => {\n              predictiveSearchInstance.cachedResults[queryKey] = resultsMarkup;\n            },\n          );\n          this.renderSearchResults(resultsMarkup);\n        })\n        .catch((error) => {\n          if (error?.code === 20) {\n            // Code 20 means the call was aborted\n            return;\n          }\n          this.close();\n          throw error;\n        });\n    }\n\n    setLiveRegionLoadingState() {\n      this.statusElement =\n        this.statusElement ||\n        this.querySelector(selectors$J.predictiveSearchStatus);\n      this.loadingText =\n        this.loadingText || this.getAttribute(\"data-loading-text\");\n\n      this.setLiveRegionText(this.loadingText);\n      this.setAttribute(\"loading\", true);\n    }\n\n    setLiveRegionText(statusText) {\n      this.statusElement.setAttribute(\"aria-hidden\", \"false\");\n      this.statusElement.textContent = statusText;\n\n      setTimeout(() => {\n        this.statusElement.setAttribute(\"aria-hidden\", \"true\");\n      }, 1000);\n    }\n\n    renderSearchResults(resultsMarkup) {\n      this.predictiveSearchResults.innerHTML = resultsMarkup;\n\n      this.setAttribute(\"results\", true);\n\n      this.setLiveRegionResults();\n      this.open();\n    }\n\n    setLiveRegionResults() {\n      this.removeAttribute(\"loading\");\n      this.setLiveRegionText(\n        this.querySelector(selectors$J.searchResultsLiveRegion).textContent,\n      );\n    }\n\n    open() {\n      this.setAttribute(\"open\", true);\n      this.input.setAttribute(\"aria-expanded\", true);\n      this.isOpen = true;\n      this.predictiveSearchResults.style.setProperty(\n        \"--full-screen\",\n        `${window.visualViewport.height}px`,\n      );\n    }\n\n    close(clearSearchTerm = false) {\n      this.closeResults(clearSearchTerm);\n      this.isOpen = false;\n      this.predictiveSearchResults.style.removeProperty(\"--full-screen\");\n    }\n\n    closeResults(clearSearchTerm = false) {\n      if (clearSearchTerm) {\n        this.input.value = \"\";\n        this.removeAttribute(\"results\");\n      }\n      const selected = this.querySelector(selectors$J.ariaSelected);\n\n      if (selected) selected.setAttribute(\"aria-selected\", false);\n\n      this.input.setAttribute(\"aria-activedescendant\", \"\");\n      this.removeAttribute(\"loading\");\n      this.removeAttribute(\"open\");\n      this.input.setAttribute(\"aria-expanded\", false);\n      this.predictiveSearchResults?.removeAttribute(\"style\");\n    }\n\n    reset() {\n      this.predictiveSearchResults.innerHTML = \"\";\n\n      this.input.val = \"\";\n      this.a11y.removeTrapFocus();\n\n      if (this.popularSearches) {\n        this.input.dispatchEvent(new Event(\"blur\", { bubbles: false }));\n        this.a11y.trapFocus(this.searchPopdown, {\n          elementToFocus: this.input,\n        });\n      }\n    }\n  }\n\n  const selectors$I = {\n    popoutList: \"[data-popout-list]\",\n    popoutToggle: \"[data-popout-toggle]\",\n    popoutToggleText: \"[data-popout-toggle-text]\",\n    popoutInput: \"[data-popout-input]\",\n    popoutOptions: \"[data-popout-option]\",\n    productGridImage: \"[data-product-image]\",\n    productGridItem: \"[data-grid-item]\",\n    section: \"[data-section-type]\",\n  };\n\n  const classes$y = {\n    listVisible: \"popout-list--visible\",\n    visible: \"is-visible\",\n    active: \"is-active\",\n    popoutListTop: \"popout-list--top\",\n  };\n\n  const attributes$s = {\n    ariaExpanded: \"aria-expanded\",\n    ariaCurrent: \"aria-current\",\n    dataValue: \"data-value\",\n    popoutToggleText: \"data-popout-toggle-text\",\n    submit: \"submit\",\n  };\n\n  class Popout extends HTMLElement {\n    constructor() {\n      super();\n    }\n\n    connectedCallback() {\n      this.popoutList = this.querySelector(selectors$I.popoutList);\n      this.popoutToggle = this.querySelector(selectors$I.popoutToggle);\n      this.popoutToggleText = this.querySelector(selectors$I.popoutToggleText);\n      this.popoutInput = this.querySelector(selectors$I.popoutInput);\n      this.popoutOptions = this.querySelectorAll(selectors$I.popoutOptions);\n      this.productGridItem = this.popoutList.closest(\n        selectors$I.productGridItem,\n      );\n      this.fireSubmitEvent = this.hasAttribute(attributes$s.submit);\n\n      this.popupToggleFocusoutEvent = (evt) => this.onPopupToggleFocusout(evt);\n      this.popupListFocusoutEvent = (evt) => this.onPopupListFocusout(evt);\n      this.popupToggleClickEvent = (evt) => this.onPopupToggleClick(evt);\n      this.keyUpEvent = (evt) => this.onKeyUp(evt);\n      this.bodyClickEvent = (evt) => this.onBodyClick(evt);\n\n      this._connectOptions();\n      this._connectToggle();\n      this._onFocusOut();\n      this.popupListSetDimensions();\n    }\n\n    onPopupToggleClick(evt) {\n      const button = evt.currentTarget;\n      const ariaExpanded =\n        button.getAttribute(attributes$s.ariaExpanded) === \"true\";\n\n      if (this.productGridItem) {\n        const productGridItemImage = this.productGridItem.querySelector(\n          selectors$I.productGridImage,\n        );\n\n        if (productGridItemImage) {\n          productGridItemImage.classList.toggle(\n            classes$y.visible,\n            !ariaExpanded,\n          );\n        }\n\n        this.popoutList.style.maxHeight = `${Math.abs(this.popoutToggle.getBoundingClientRect().bottom - this.productGridItem.getBoundingClientRect().bottom)}px`;\n      }\n\n      evt.currentTarget.setAttribute(attributes$s.ariaExpanded, !ariaExpanded);\n      this.popoutList.classList.toggle(classes$y.listVisible);\n      this.popupListSetDimensions();\n      this.toggleListPosition();\n\n      document.body.addEventListener(\"click\", this.bodyClickEvent);\n    }\n\n    onPopupToggleFocusout(evt) {\n      const popoutLostFocus = this.contains(evt.relatedTarget);\n\n      if (!popoutLostFocus) {\n        this._hideList();\n      }\n    }\n\n    onPopupListFocusout(evt) {\n      const childInFocus = evt.currentTarget.contains(evt.relatedTarget);\n      const isVisible = this.popoutList.classList.contains(\n        classes$y.listVisible,\n      );\n\n      if (isVisible && !childInFocus) {\n        this._hideList();\n      }\n    }\n\n    toggleListPosition() {\n      const button = this.querySelector(selectors$I.popoutToggle);\n      const ariaExpanded =\n        button.getAttribute(attributes$s.ariaExpanded) === \"true\";\n      const windowHeight = window.innerHeight;\n      const popoutTop = this.getBoundingClientRect().top;\n\n      const removeTopClass = () => {\n        this.popoutList.classList.remove(classes$y.popoutListTop);\n        this.popoutList.removeEventListener(\"transitionend\", removeTopClass);\n      };\n\n      if (ariaExpanded) {\n        if (windowHeight / 2 > popoutTop) {\n          this.popoutList.classList.add(classes$y.popoutListTop);\n        }\n      } else {\n        this.popoutList.addEventListener(\"transitionend\", removeTopClass);\n      }\n    }\n\n    popupListSetDimensions() {\n      this.popoutList.style.setProperty(\"--max-width\", \"100vw\");\n      this.popoutList.style.setProperty(\"--max-height\", \"100vh\");\n\n      requestAnimationFrame(() => {\n        this.popoutList.style.setProperty(\n          \"--max-width\",\n          `${parseInt(document.body.clientWidth - this.popoutList.getBoundingClientRect().left)}px`,\n        );\n        this.popoutList.style.setProperty(\n          \"--max-height\",\n          `${parseInt(window.innerHeight - this.popoutList.getBoundingClientRect().top)}px`,\n        );\n      });\n    }\n\n    popupOptionsClick(evt) {\n      const link = evt.target.closest(selectors$I.popoutOptions);\n      if (link.attributes.href.value === \"#\") {\n        evt.preventDefault();\n\n        const attrValue = evt.currentTarget.hasAttribute(attributes$s.dataValue)\n          ? evt.currentTarget.getAttribute(attributes$s.dataValue)\n          : \"\";\n\n        this.popoutInput.value = attrValue;\n\n        if (this.popoutInput.disabled) {\n          this.popoutInput.removeAttribute(\"disabled\");\n        }\n\n        if (this.fireSubmitEvent) {\n          this._submitForm(attrValue);\n        } else {\n          const currentTarget = evt.currentTarget.parentElement;\n          const listTargetElement = this.popoutList.querySelector(\n            `.${classes$y.active}`,\n          );\n          const targetAttribute = this.popoutList.querySelector(\n            `[${attributes$s.ariaCurrent}]`,\n          );\n\n          this.popoutInput.dispatchEvent(new Event(\"change\"));\n\n          if (listTargetElement) {\n            listTargetElement.classList.remove(classes$y.active);\n            currentTarget.classList.add(classes$y.active);\n          }\n\n          if (\n            this.popoutInput.name == \"quantity\" &&\n            !currentTarget.nextSibling\n          ) {\n            this.classList.add(classes$y.active);\n          }\n\n          if (\n            targetAttribute &&\n            targetAttribute.hasAttribute(`${attributes$s.ariaCurrent}`)\n          ) {\n            targetAttribute.removeAttribute(`${attributes$s.ariaCurrent}`);\n            evt.currentTarget.setAttribute(\n              `${attributes$s.ariaCurrent}`,\n              \"true\",\n            );\n          }\n\n          if (attrValue !== \"\") {\n            this.popoutToggleText.innerHTML = attrValue;\n\n            if (\n              this.popoutToggleText.hasAttribute(\n                attributes$s.popoutToggleText,\n              ) &&\n              this.popoutToggleText.getAttribute(\n                attributes$s.popoutToggleText,\n              ) !== \"\"\n            ) {\n              this.popoutToggleText.setAttribute(\n                attributes$s.popoutToggleText,\n                attrValue,\n              );\n            }\n          }\n          this.onPopupToggleFocusout(evt);\n          this.onPopupListFocusout(evt);\n        }\n      }\n    }\n\n    onKeyUp(evt) {\n      if (evt.code !== \"Escape\") {\n        return;\n      }\n      this._hideList();\n      this.popoutToggle.focus();\n    }\n\n    onBodyClick(evt) {\n      const isOption = this.contains(evt.target);\n      const isVisible = this.popoutList.classList.contains(\n        classes$y.listVisible,\n      );\n\n      if (isVisible && !isOption) {\n        this._hideList();\n      }\n    }\n\n    _connectToggle() {\n      this.popoutToggle.addEventListener(\"click\", this.popupToggleClickEvent);\n    }\n\n    _connectOptions() {\n      if (this.popoutOptions.length) {\n        this.popoutOptions.forEach((element) => {\n          element.addEventListener(\"click\", (evt) =>\n            this.popupOptionsClick(evt),\n          );\n        });\n      }\n    }\n\n    _onFocusOut() {\n      this.addEventListener(\"keyup\", this.keyUpEvent);\n      this.popoutToggle.addEventListener(\n        \"focusout\",\n        this.popupToggleFocusoutEvent,\n      );\n      this.popoutList.addEventListener(\"focusout\", this.popupListFocusoutEvent);\n    }\n\n    _submitForm() {\n      const form = this.closest(\"form\");\n      if (form) {\n        form.submit();\n      }\n    }\n\n    _hideList() {\n      this.popoutList.classList.remove(classes$y.listVisible);\n      this.popoutToggle.setAttribute(attributes$s.ariaExpanded, false);\n      this.toggleListPosition();\n      document.body.removeEventListener(\"click\", this.bodyClickEvent);\n    }\n  }\n\n  const selectors$H = {\n    aos: \"[data-aos]:not(.aos-animate)\",\n    aosAnchor: \"[data-aos-anchor]\",\n    aosIndividual: \"[data-aos]:not([data-aos-anchor]):not(.aos-animate)\",\n  };\n\n  const classes$x = {\n    aosAnimate: \"aos-animate\",\n  };\n\n  const observerConfig = {\n    attributes: false,\n    childList: true,\n    subtree: true,\n  };\n\n  let anchorContainers = [];\n\n  const mutationCallback = (mutationList) => {\n    for (const mutation of mutationList) {\n      if (mutation.type === \"childList\") {\n        const element = mutation.target;\n        const elementsToAnimate = element.querySelectorAll(selectors$H.aos);\n        const anchors = element.querySelectorAll(selectors$H.aosAnchor);\n\n        if (elementsToAnimate.length) {\n          elementsToAnimate.forEach((element) => {\n            aosItemObserver.observe(element);\n          });\n        }\n\n        if (anchors.length) {\n          // Get all anchors and attach observers\n          initAnchorObservers(anchors);\n        }\n      }\n    }\n  };\n\n  /*\n      Observe each element that needs to be animated\n    */\n  const aosItemObserver = new IntersectionObserver(\n    (entries, observer) => {\n      entries.forEach((entry) => {\n        if (entry.isIntersecting) {\n          entry.target.classList.add(classes$x.aosAnimate);\n\n          // Stop observing element after it was animated\n          observer.unobserve(entry.target);\n        }\n      });\n    },\n    {\n      root: null,\n      rootMargin: \"0px\",\n      threshold: [0, 0.1, 0.25, 0.5, 0.75, 1],\n    },\n  );\n\n  /*\n      Observe anchor elements\n    */\n  const aosAnchorObserver = new IntersectionObserver(\n    (entries, observer) => {\n      entries.forEach((entry) => {\n        if (entry.intersectionRatio) {\n          const elementsToAnimate = entry.target.querySelectorAll(\n            selectors$H.aos,\n          );\n\n          if (elementsToAnimate.length) {\n            elementsToAnimate.forEach((item) => {\n              item.classList.add(classes$x.aosAnimate);\n            });\n          }\n\n          // Stop observing anchor element after inner elements were animated\n          observer.unobserve(entry.target);\n        }\n      });\n    },\n    {\n      root: null,\n      rootMargin: \"0px\",\n      threshold: [0.1, 0.25, 0.5, 0.75, 1],\n    },\n  );\n\n  /*\n      Watch for mutations in the body and start observing the newly added animated elements and anchors\n    */\n  function bodyMutationObserver() {\n    const bodyObserver = new MutationObserver(mutationCallback);\n    bodyObserver.observe(document.body, observerConfig);\n  }\n\n  /*\n      Observe animated elements that have attribute [data-aos]\n    */\n  function elementsIntersectionObserver() {\n    const elementsToAnimate = document.querySelectorAll(\n      selectors$H.aosIndividual,\n    );\n\n    if (elementsToAnimate.length) {\n      elementsToAnimate.forEach((element) => {\n        aosItemObserver.observe(element);\n      });\n    }\n  }\n\n  /*\n      Observe animated elements that have attribute [data-aos]\n    */\n  function anchorsIntersectionObserver() {\n    const anchors = document.querySelectorAll(selectors$H.aosAnchor);\n\n    if (anchors.length) {\n      // Get all anchors and attach observers\n      initAnchorObservers(anchors);\n    }\n  }\n\n  function initAnchorObservers(anchors) {\n    if (!anchors.length) return;\n\n    anchors.forEach((anchor) => {\n      const containerId = anchor.dataset.aosAnchor;\n\n      // Avoid adding multiple observers to the same element\n      if (containerId && anchorContainers.indexOf(containerId) === -1) {\n        const container = document.querySelector(containerId);\n\n        if (container) {\n          aosAnchorObserver.observe(container);\n          anchorContainers.push(containerId);\n        }\n      }\n    });\n  }\n\n  function initAnimations() {\n    elementsIntersectionObserver();\n    anchorsIntersectionObserver();\n    bodyMutationObserver();\n\n    // Remove unloaded section from the anchors array on section:unload event\n    document.addEventListener(\"shopify:section:unload\", (e) => {\n      const sectionId = \"#\" + e.target.querySelector(\"[data-section-id]\")?.id;\n      const sectionIndex = anchorContainers.indexOf(sectionId);\n\n      if (sectionIndex !== -1) {\n        anchorContainers.splice(sectionIndex, 1);\n      }\n    });\n  }\n\n  const selectors$G = {\n    deferredMediaButton: \"[data-deferred-media-button]\",\n    media: \"video, model-viewer, iframe\",\n    youtube: '[data-host=\"youtube\"]',\n    vimeo: '[data-host=\"vimeo\"]',\n    productGridItem: \"[data-grid-item]\",\n    section: \".shopify-section\",\n    template: \"template\",\n    video: \"video\",\n    productModel: \"product-model\",\n  };\n\n  const attributes$r = {\n    loaded: \"loaded\",\n    autoplay: \"autoplay\",\n  };\n\n  class DeferredMedia extends HTMLElement {\n    constructor() {\n      super();\n      const poster = this.querySelector(selectors$G.deferredMediaButton);\n      poster?.addEventListener(\"click\", this.loadContent.bind(this));\n      this.section = this.closest(selectors$G.section);\n      this.productGridItem = this.closest(selectors$G.productGridItem);\n      this.hovered = false;\n\n      this.mouseEnterEvent = () => this.mouseEnterActions();\n      this.mouseLeaveEvent = () => this.mouseLeaveActions();\n    }\n\n    connectedCallback() {\n      if (this.productGridItem) {\n        this.section.addEventListener(\"mouseover\", this.mouseOverEvent, {\n          once: true,\n        });\n\n        this.addEventListener(\"mouseenter\", this.mouseEnterEvent);\n\n        this.addEventListener(\"mouseleave\", this.mouseLeaveEvent);\n      }\n    }\n\n    disconnectedCallback() {\n      if (this.productGridItem) {\n        this.section.removeEventListener(\"mouseover\", this.mouseOverEvent, {\n          once: true,\n        });\n\n        this.removeEventListener(\"mouseenter\", this.mouseEnterEvent);\n\n        this.removeEventListener(\"mouseleave\", this.mouseLeaveEvent);\n      }\n    }\n\n    mouseEnterActions() {\n      this.hovered = true;\n\n      this.videoActions();\n\n      if (!this.getAttribute(attributes$r.loaded)) {\n        this.loadContent();\n      }\n    }\n\n    mouseLeaveActions() {\n      this.hovered = false;\n\n      this.videoActions();\n    }\n\n    videoActions() {\n      if (this.getAttribute(attributes$r.loaded)) {\n        const youtube = this.querySelector(selectors$G.youtube);\n        const vimeo = this.querySelector(selectors$G.vimeo);\n        const mediaExternal = youtube || vimeo;\n        const mediaNative = this.querySelector(selectors$G.video);\n        if (mediaExternal) {\n          let action = this.hovered ? \"playVideo\" : \"pauseVideo\";\n          let string = `{\"event\":\"command\",\"func\":\"${action}\",\"args\":\"\"}`;\n\n          if (vimeo) {\n            action = this.hovered ? \"play\" : \"pause\";\n            string = `{\"method\":\"${action}\"}`;\n          }\n\n          mediaExternal.contentWindow.postMessage(string, \"*\");\n\n          mediaExternal.addEventListener(\"load\", (e) => {\n            // Call videoActions() again when iframe is loaded to prevent autoplay being triggered if it loads after the \"mouseleave\" event\n            this.videoActions();\n          });\n        } else if (mediaNative) {\n          if (this.hovered) {\n            mediaNative.play();\n          } else {\n            mediaNative.pause();\n          }\n        }\n      }\n    }\n\n    loadContent(focus = true) {\n      this.pauseAllMedia();\n\n      if (!this.getAttribute(attributes$r.loaded)) {\n        const content = document.createElement(\"div\");\n        const templateContent = this.querySelector(\n          selectors$G.template,\n        ).content.firstElementChild.cloneNode(true);\n        content.appendChild(templateContent);\n        this.setAttribute(attributes$r.loaded, true);\n\n        const mediaElement = this.appendChild(\n          content.querySelector(selectors$G.media),\n        );\n        if (focus) mediaElement.focus();\n        if (\n          mediaElement.nodeName == \"VIDEO\" &&\n          mediaElement.getAttribute(attributes$r.autoplay)\n        ) {\n          // Force autoplay on Safari browsers\n          mediaElement.play();\n        }\n\n        if (this.productGridItem) {\n          this.videoActions();\n        }\n      }\n    }\n\n    pauseAllMedia() {\n      document.querySelectorAll(selectors$G.youtube).forEach((video) => {\n        video.contentWindow.postMessage(\n          '{\"event\":\"command\",\"func\":\"pauseVideo\",\"args\":\"\"}',\n          \"*\",\n        );\n      });\n      document.querySelectorAll(selectors$G.vimeo).forEach((video) => {\n        video.contentWindow.postMessage('{\"method\":\"pause\"}', \"*\");\n      });\n      document\n        .querySelectorAll(selectors$G.video)\n        .forEach((video) => video.pause());\n      document.querySelectorAll(selectors$G.productModel).forEach((model) => {\n        if (model.modelViewerUI) model.modelViewerUI.pause();\n      });\n    }\n  }\n\n  /*\n      Observe whether or not elements are visible in their container.\n      Used for sections with horizontal sliders built by native scrolling\n    */\n\n  const classes$w = {\n    visible: \"is-visible\",\n  };\n\n  class IsInView {\n    constructor(container, itemSelector) {\n      if (!container || !itemSelector) return;\n\n      this.observer = null;\n      this.container = container;\n      this.itemSelector = itemSelector;\n\n      this.init();\n    }\n\n    init() {\n      const options = {\n        root: this.container,\n        threshold: [0.01, 0.5, 0.75, 0.99],\n      };\n\n      this.observer = new IntersectionObserver((entries) => {\n        entries.forEach((entry) => {\n          if (entry.intersectionRatio >= 0.99) {\n            entry.target.classList.add(classes$w.visible);\n          } else {\n            entry.target.classList.remove(classes$w.visible);\n          }\n        });\n      }, options);\n\n      this.container.querySelectorAll(this.itemSelector)?.forEach((item) => {\n        this.observer.observe(item);\n      });\n    }\n\n    destroy() {\n      this.observer.disconnect();\n    }\n  }\n\n  const classes$v = {\n    dragging: \"is-dragging\",\n    enabled: \"is-enabled\",\n    scrolling: \"is-scrolling\",\n    visible: \"is-visible\",\n  };\n\n  const selectors$F = {\n    image: \"img, svg\",\n    productImage: \"[data-product-image]\",\n    slide: \"[data-grid-item]\",\n    slider: \"[data-grid-slider]\",\n  };\n\n  class DraggableSlider {\n    constructor(sliderElement) {\n      this.slider = sliderElement;\n      this.isDown = false;\n      this.startX = 0;\n      this.scrollLeft = 0;\n      this.velX = 0;\n      this.scrollAnimation = null;\n      this.isScrolling = false;\n      this.duration = 800; // Change this value if you want to increase or decrease the velocity\n\n      this.scrollStep = this.scrollStep.bind(this);\n      this.scrollToSlide = this.scrollToSlide.bind(this);\n      this.handleMouseDown = this.handleMouseDown.bind(this);\n      this.handleMouseLeave = this.handleMouseLeave.bind(this);\n      this.handleMouseUp = this.handleMouseUp.bind(this);\n      this.handleMouseMove = this.handleMouseMove.bind(this);\n      this.handleMouseWheel = this.handleMouseWheel.bind(this);\n\n      this.slider.addEventListener(\"mousedown\", this.handleMouseDown);\n      this.slider.addEventListener(\"mouseleave\", this.handleMouseLeave);\n      this.slider.addEventListener(\"mouseup\", this.handleMouseUp);\n      this.slider.addEventListener(\"mousemove\", this.handleMouseMove);\n      this.slider.addEventListener(\"wheel\", this.handleMouseWheel, {\n        passive: true,\n      });\n\n      this.slider.classList.add(classes$v.enabled);\n    }\n\n    handleMouseDown(e) {\n      e.preventDefault();\n      this.isDown = true;\n      this.startX = e.pageX - this.slider.offsetLeft;\n      this.scrollLeft = this.slider.scrollLeft;\n      this.cancelMomentumTracking();\n    }\n\n    handleMouseLeave() {\n      if (!this.isDown) return;\n      this.isDown = false;\n      this.beginMomentumTracking();\n    }\n\n    handleMouseUp() {\n      this.isDown = false;\n      this.beginMomentumTracking();\n    }\n\n    handleMouseMove(e) {\n      if (!this.isDown) return;\n      e.preventDefault();\n\n      const x = e.pageX - this.slider.offsetLeft;\n      const ratio = 1; // Increase the number to make it scroll-fast\n      const walk = (x - this.startX) * ratio;\n      const prevScrollLeft = this.slider.scrollLeft;\n      const direction = walk > 0 ? 1 : -1;\n\n      this.slider.classList.add(classes$v.dragging, classes$v.scrolling);\n      this.slider.scrollLeft = this.scrollLeft - walk;\n\n      if (this.slider.scrollLeft !== prevScrollLeft) {\n        this.velX = this.slider.scrollLeft - prevScrollLeft || direction;\n      }\n    }\n\n    handleMouseWheel() {\n      this.cancelMomentumTracking();\n      this.slider.classList.remove(classes$v.scrolling);\n    }\n\n    beginMomentumTracking() {\n      this.isScrolling = false;\n      this.slider.classList.remove(classes$v.dragging);\n      this.cancelMomentumTracking();\n      this.scrollToSlide();\n    }\n\n    cancelMomentumTracking() {\n      cancelAnimationFrame(this.scrollAnimation);\n    }\n\n    scrollToSlide() {\n      if (!this.velX && !this.isScrolling) return;\n\n      const slide = this.slider.querySelector(\n        `${selectors$F.slide}.${classes$v.visible}`,\n      );\n      if (!slide) return;\n\n      const gap = parseInt(window.getComputedStyle(slide).marginRight) || 0;\n      const slideWidth = slide.offsetWidth + gap;\n      const targetPosition = slide.offsetLeft;\n      const direction = this.velX > 0 ? 1 : -1;\n      const slidesToScroll = Math.floor(Math.abs(this.velX) / 100) || 1;\n\n      this.startPosition = this.slider.scrollLeft;\n      this.distance = targetPosition - this.startPosition;\n      this.startTime = performance.now();\n      this.isScrolling = true;\n\n      // Make sure it will move to the next slide if you don't drag far enough\n      if (direction < 0 && this.velX < slideWidth) {\n        this.distance -= slideWidth * slidesToScroll;\n      }\n\n      // Make sure it will move to the previous slide if you don't drag far enough\n      if (direction > 0 && this.velX < slideWidth) {\n        this.distance += slideWidth * slidesToScroll;\n      }\n\n      // Run scroll animation\n      this.scrollAnimation = requestAnimationFrame(this.scrollStep);\n    }\n\n    scrollStep() {\n      const currentTime = performance.now() - this.startTime;\n      const scrollPosition = parseFloat(\n        this.easeOutCubic(Math.min(currentTime, this.duration)),\n      ).toFixed(1);\n\n      this.slider.scrollLeft = scrollPosition;\n\n      if (currentTime < this.duration) {\n        this.scrollAnimation = requestAnimationFrame(this.scrollStep);\n      } else {\n        this.slider.classList.remove(classes$v.scrolling);\n\n        // Reset velocity\n        this.velX = 0;\n        this.isScrolling = false;\n      }\n    }\n\n    easeOutCubic(t) {\n      t /= this.duration;\n      t--;\n      return this.distance * (t * t * t + 1) + this.startPosition;\n    }\n\n    destroy() {\n      this.slider.classList.remove(classes$v.enabled);\n      this.slider.removeEventListener(\"mousedown\", this.handleMouseDown);\n      this.slider.removeEventListener(\"mouseleave\", this.handleMouseLeave);\n      this.slider.removeEventListener(\"mouseup\", this.handleMouseUp);\n      this.slider.removeEventListener(\"mousemove\", this.handleMouseMove);\n      this.slider.removeEventListener(\"wheel\", this.handleMouseWheel);\n    }\n  }\n\n  /*\n      Trigger event after all animations complete in a specific section\n    */\n  function waitForAllAnimationsEnd(section) {\n    return new Promise((resolve, rejected) => {\n      const animatedElements = section.querySelectorAll(\"[data-aos]\");\n      let animationCount = 0;\n\n      function onAnimationEnd(event) {\n        animationCount++;\n\n        if (animationCount === animatedElements.length) {\n          // All animations have ended\n          resolve();\n        }\n\n        event.target.removeEventListener(\"animationend\", onAnimationEnd);\n      }\n\n      animatedElements.forEach((element) => {\n        element.addEventListener(\"animationend\", onAnimationEnd);\n      });\n\n      if (!animationCount) rejected();\n    });\n  }\n\n  const selectors$E = {\n    buttonArrow: \"[data-button-arrow]\",\n    collectionImage: \"[data-collection-image]\",\n    columnImage: \"[data-column-image]\",\n    productImage: \"[data-product-image]\",\n    slide: \"[data-grid-item]\",\n    slider: \"[data-grid-slider]\",\n  };\n\n  const attributes$q = {\n    buttonPrev: \"data-button-prev\",\n    buttonNext: \"data-button-next\",\n    alignArrows: \"align-arrows\",\n  };\n\n  const classes$u = {\n    arrows: \"slider__arrows\",\n    visible: \"is-visible\",\n    scrollSnapDisabled: \"scroll-snap-disabled\",\n  };\n\n  class GridSlider extends HTMLElement {\n    constructor() {\n      super();\n\n      this.isInitialized = false;\n      this.draggableSlider = null;\n      this.positionArrows = this.positionArrows.bind(this);\n      this.onButtonArrowClick = (e) => this.buttonArrowClickEvent(e);\n      this.slidesObserver = null;\n      this.firstLastSlidesObserver = null;\n      this.isDragging = false;\n      this.toggleSlider = this.toggleSlider.bind(this);\n    }\n\n    connectedCallback() {\n      this.init();\n      this.addEventListener(\"theme:grid-slider:init\", this.init);\n    }\n\n    init() {\n      this.slider = this.querySelector(selectors$E.slider);\n      this.slides = this.querySelectorAll(selectors$E.slide);\n      this.buttons = this.querySelectorAll(selectors$E.buttonArrow);\n      this.slider.classList.add(classes$u.scrollSnapDisabled);\n      this.toggleSlider();\n      document.addEventListener(\"theme:resize:width\", this.toggleSlider);\n\n      waitForAllAnimationsEnd(this)\n        .then(() => {\n          this.slider.classList.remove(classes$u.scrollSnapDisabled);\n        })\n        .catch(() => {\n          this.slider.classList.remove(classes$u.scrollSnapDisabled);\n        });\n    }\n\n    toggleSlider() {\n      const sliderWidth = this.slider.clientWidth;\n      const slidesWidth = this.getSlidesWidth();\n      const isEnabled = sliderWidth < slidesWidth;\n\n      if (isEnabled && (isDesktop() || !window.theme.touch)) {\n        if (this.isInitialized) return;\n\n        this.slidesObserver = new IsInView(this.slider, selectors$E.slide);\n\n        this.initArrows();\n        this.isInitialized = true;\n\n        // Create an instance of DraggableSlider\n        this.draggableSlider = new DraggableSlider(this.slider);\n      } else {\n        this.destroy();\n      }\n    }\n\n    initArrows() {\n      // Create arrow buttons if don't exist\n      if (!this.buttons.length) {\n        const buttonsWrap = document.createElement(\"div\");\n        buttonsWrap.classList.add(classes$u.arrows);\n        buttonsWrap.innerHTML =\n          theme.sliderArrows.prev + theme.sliderArrows.next;\n\n        // Append buttons outside the slider element\n        this.append(buttonsWrap);\n        this.buttons = this.querySelectorAll(selectors$E.buttonArrow);\n        this.buttonPrev = this.querySelector(`[${attributes$q.buttonPrev}]`);\n        this.buttonNext = this.querySelector(`[${attributes$q.buttonNext}]`);\n      }\n\n      this.toggleArrowsObserver();\n\n      if (this.hasAttribute(attributes$q.alignArrows)) {\n        this.positionArrows();\n        this.arrowsResizeObserver();\n      }\n\n      this.buttons.forEach((buttonArrow) => {\n        buttonArrow.addEventListener(\"click\", this.onButtonArrowClick);\n      });\n    }\n\n    buttonArrowClickEvent(e) {\n      e.preventDefault();\n\n      const firstVisibleSlide = this.slider.querySelector(\n        `${selectors$E.slide}.${classes$u.visible}`,\n      );\n      let slide = null;\n\n      if (e.target.hasAttribute(attributes$q.buttonPrev)) {\n        slide = firstVisibleSlide?.previousElementSibling;\n      }\n\n      if (e.target.hasAttribute(attributes$q.buttonNext)) {\n        slide = firstVisibleSlide?.nextElementSibling;\n      }\n\n      this.goToSlide(slide);\n    }\n\n    removeArrows() {\n      this.querySelector(`.${classes$u.arrows}`)?.remove();\n    }\n\n    // Go to prev/next slide on arrow click\n    goToSlide(slide) {\n      if (!slide) return;\n\n      this.slider.scrollTo({\n        top: 0,\n        left: slide.offsetLeft,\n        behavior: \"smooth\",\n      });\n    }\n\n    getSlidesWidth() {\n      return (\n        this.slider.querySelector(selectors$E.slide)?.clientWidth *\n        this.slider.querySelectorAll(selectors$E.slide).length\n      );\n    }\n\n    toggleArrowsObserver() {\n      // Add disable class/attribute on prev/next button\n\n      if (this.buttonPrev && this.buttonNext) {\n        const slidesCount = this.slides.length;\n        const firstSlide = this.slides[0];\n        const lastSlide = this.slides[slidesCount - 1];\n\n        const config = {\n          attributes: true,\n          childList: false,\n          subtree: false,\n        };\n\n        const callback = (mutationList) => {\n          for (const mutation of mutationList) {\n            if (mutation.type === \"attributes\") {\n              const slide = mutation.target;\n              const isDisabled = Boolean(\n                slide.classList.contains(classes$u.visible),\n              );\n\n              if (slide == firstSlide) {\n                this.buttonPrev.disabled = isDisabled;\n              }\n\n              if (slide == lastSlide) {\n                this.buttonNext.disabled = isDisabled;\n              }\n            }\n          }\n        };\n\n        if (firstSlide && lastSlide) {\n          this.firstLastSlidesObserver = new MutationObserver(callback);\n          this.firstLastSlidesObserver.observe(firstSlide, config);\n          this.firstLastSlidesObserver.observe(lastSlide, config);\n        }\n      }\n    }\n\n    positionArrows() {\n      const targetElement =\n        this.slider.querySelector(selectors$E.productImage) ||\n        this.slider.querySelector(selectors$E.collectionImage) ||\n        this.slider.querySelector(selectors$E.columnImage) ||\n        this.slider;\n\n      if (!targetElement) return;\n\n      this.style.setProperty(\n        \"--button-position\",\n        `${targetElement.clientHeight / 2}px`,\n      );\n    }\n\n    arrowsResizeObserver() {\n      document.addEventListener(\"theme:resize:width\", this.positionArrows);\n    }\n\n    disconnectedCallback() {\n      this.destroy();\n      document.removeEventListener(\"theme:resize:width\", this.toggleSlider);\n    }\n\n    destroy() {\n      this.isInitialized = false;\n      this.draggableSlider?.destroy();\n      this.draggableSlider = null;\n      this.slidesObserver?.destroy();\n      this.slidesObserver = null;\n      this.removeArrows();\n\n      document.removeEventListener(\"theme:resize:width\", this.positionArrows);\n    }\n  }\n\n  const selectors$D = {\n    time: \"time\",\n    days: \"[data-days]\",\n    hours: \"[data-hours]\",\n    minutes: \"[data-minutes]\",\n    seconds: \"[data-seconds]\",\n    shopifySection: \".shopify-section\",\n    countdownBlock: \"[data-countdown-block]\",\n    tickerText: \"[data-ticker-text]\",\n  };\n\n  const attributes$p = {\n    expirationBehavior: \"data-expiration-behavior\",\n    clone: \"data-clone\",\n  };\n\n  const classes$t = {\n    showMessage: \"show-message\",\n    hideCountdown: \"hidden\",\n  };\n\n  const settings$1 = {\n    hideSection: \"hide-section\",\n    showMessage: \"show-message\",\n  };\n\n  class CountdownTimer extends HTMLElement {\n    constructor() {\n      super();\n\n      this.section = this.closest(selectors$D.shopifySection);\n      this.countdownParent =\n        this.closest(selectors$D.countdownBlock) || this.section;\n      this.expirationBehavior = this.getAttribute(\n        attributes$p.expirationBehavior,\n      );\n\n      this.time = this.querySelector(selectors$D.time);\n      this.days = this.querySelector(selectors$D.days);\n      this.hours = this.querySelector(selectors$D.hours);\n      this.minutes = this.querySelector(selectors$D.minutes);\n      this.seconds = this.querySelector(selectors$D.seconds);\n\n      // Get the current and expiration dates in Unix timestamp format (milliseconds)\n      this.endDate = Date.parse(this.time.dateTime);\n      this.daysInMs = 1000 * 60 * 60 * 24;\n      this.hoursInMs = this.daysInMs / 24;\n      this.minutesInMs = this.hoursInMs / 60;\n      this.secondsInMs = this.minutesInMs / 60;\n\n      this.shouldHideOnComplete =\n        this.expirationBehavior === settings$1.hideSection;\n      this.shouldShowMessage =\n        this.expirationBehavior === settings$1.showMessage;\n\n      this.update = this.update.bind(this);\n    }\n\n    connectedCallback() {\n      if (isNaN(this.endDate)) {\n        this.onComplete();\n        return;\n      }\n\n      if (this.endDate <= Date.now()) {\n        this.onComplete();\n        return;\n      }\n      // Initial update to avoid showing old time\n      this.update();\n      // Update the countdown every second\n      this.interval = setInterval(this.update, 1000);\n    }\n\n    disconnectedCallback() {\n      this.stopTimer();\n    }\n\n    convertTime(timeInMs) {\n      const days = this.formatDigits(parseInt(timeInMs / this.daysInMs, 10));\n      timeInMs -= days * this.daysInMs;\n\n      const hours = this.formatDigits(parseInt(timeInMs / this.hoursInMs, 10));\n      timeInMs -= hours * this.hoursInMs;\n\n      const minutes = this.formatDigits(\n        parseInt(timeInMs / this.minutesInMs, 10),\n      );\n      timeInMs -= minutes * this.minutesInMs;\n\n      const seconds = this.formatDigits(\n        parseInt(timeInMs / this.secondsInMs, 10),\n      );\n\n      return {\n        days: days,\n        hours: hours,\n        minutes: minutes,\n        seconds: seconds,\n      };\n    }\n\n    // Make numbers less than 10 to appear with a leading zero like 01, 02, 03\n    formatDigits(number) {\n      if (number < 10) number = \"0\" + number;\n      return number;\n    }\n\n    render(timer) {\n      this.days.textContent = timer.days;\n      this.hours.textContent = timer.hours;\n      this.minutes.textContent = timer.minutes;\n      this.seconds.textContent = timer.seconds;\n    }\n\n    stopTimer() {\n      clearInterval(this.interval);\n    }\n\n    onComplete() {\n      this.render({\n        days: 0,\n        hours: 0,\n        minutes: 0,\n        seconds: 0,\n      });\n\n      if (this.shouldHideOnComplete) {\n        this.countdownParent?.classList.add(classes$t.hideCountdown);\n        this.countdownParent?.dispatchEvent(\n          new CustomEvent(\"theme:countdown:hide\", {\n            detail: {\n              element: this,\n            },\n            bubbles: true,\n          }),\n        );\n      }\n\n      if (this.shouldShowMessage) {\n        this.classList?.add(classes$t.showMessage);\n\n        // Prevent cloned elements to dispatch events multiple times as it causes call stack\n        if (\n          this.closest(selectors$D.tickerText).hasAttribute(attributes$p.clone)\n        )\n          return;\n\n        this.countdownParent?.dispatchEvent(\n          new CustomEvent(\"theme:countdown:expire\", {\n            bubbles: true,\n          }),\n        );\n      }\n    }\n\n    // Function to update the countdown\n    update() {\n      const timeNow = new Date().getTime();\n      const timeDiff = this.endDate - timeNow;\n\n      if (timeDiff < 1000) {\n        this.stopTimer();\n        this.onComplete();\n      }\n\n      const timeRemaining = this.convertTime(timeDiff);\n      this.render(timeRemaining);\n    }\n  }\n\n  const selectors$C = {\n    animates: \"data-animates\",\n    drawerMenu: \"[data-drawer-menu]\",\n    links: \"[data-links]\",\n    sliderule: \"[data-sliderule]\",\n    slideruleOpen: \"data-sliderule-open\",\n    slideruleClose: \"data-sliderule-close\",\n    sliderulePane: \"data-sliderule-pane\",\n    drawerContent: \"[data-drawer-content]\",\n    focusable:\n      'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n    children: `:scope > [data-animates],\n             :scope > * > [data-animates],\n             :scope > * > * > [data-animates],\n             :scope > * > .sliderule-grid  > *`,\n  };\n\n  const classes$s = {\n    isOpen: \"is-open\",\n    isVisible: \"is-visible\",\n    isHiding: \"is-hiding\",\n    isHidden: \"is-hidden\",\n    focused: \"is-focused\",\n    scrolling: \"is-scrolling\",\n  };\n\n  const attributes$o = {\n    sliderule: \"data-sliderule\",\n  };\n\n  class HeaderMobileSliderule extends HTMLElement {\n    constructor() {\n      super();\n\n      this.key = this.id;\n      this.drawerMenu = this.closest(selectors$C.drawerMenu);\n      this.sliderule = this.querySelector(selectors$C.sliderule);\n      const btnSelector = `[${selectors$C.slideruleOpen}='${this.key}']`;\n      this.exitSelector = `[${selectors$C.slideruleClose}='${this.key}']`;\n      this.trigger = this.querySelector(btnSelector);\n      this.exit = document.querySelectorAll(this.exitSelector);\n      this.pane = this.trigger.closest(`[${selectors$C.sliderulePane}]`);\n      this.childrenElements = this.querySelectorAll(selectors$C.children);\n      this.drawerContent = this.closest(selectors$C.drawerContent);\n      this.cachedButton = null;\n      this.accessibility = a11y;\n\n      this.trigger.setAttribute(\"aria-haspopup\", true);\n      this.trigger.setAttribute(\"aria-expanded\", false);\n      this.trigger.setAttribute(\"aria-controls\", this.key);\n      this.closeSliderule = this.closeSliderule.bind(this);\n\n      this.clickEvents();\n      this.keyboardEvents();\n\n      document.addEventListener(\"theme:sliderule:close\", this.closeSliderule);\n    }\n\n    clickEvents() {\n      this.trigger.addEventListener(\"click\", () => {\n        this.cachedButton = this.trigger;\n        this.showSliderule();\n      });\n      this.exit.forEach((element) => {\n        element.addEventListener(\"click\", () => {\n          this.hideSliderule();\n        });\n      });\n    }\n\n    keyboardEvents() {\n      this.addEventListener(\"keyup\", (evt) => {\n        evt.stopPropagation();\n        if (evt.code !== \"Escape\") {\n          return;\n        }\n\n        this.hideSliderule();\n      });\n    }\n\n    trapFocusSliderule(showSliderule = true) {\n      const trapFocusButton = showSliderule\n        ? this.querySelector(this.exitSelector)\n        : this.cachedButton;\n\n      this.accessibility.removeTrapFocus();\n\n      if (trapFocusButton && this.drawerContent) {\n        this.accessibility.trapFocus(this.drawerContent, {\n          elementToFocus: document.body.classList.contains(classes$s.focused)\n            ? trapFocusButton\n            : null,\n        });\n      }\n    }\n\n    hideSliderule(close = false) {\n      const newPosition = parseInt(this.pane.dataset.sliderulePane, 10) - 1;\n      this.pane.setAttribute(selectors$C.sliderulePane, newPosition);\n      this.pane.classList.add(classes$s.isHiding);\n      this.sliderule.classList.add(classes$s.isHiding);\n      const hiddenSelector = close\n        ? `[${selectors$C.animates}].${classes$s.isHidden}`\n        : `[${selectors$C.animates}=\"${newPosition}\"]`;\n      const hiddenItems = this.pane.querySelectorAll(hiddenSelector);\n      if (hiddenItems.length) {\n        hiddenItems.forEach((element) => {\n          element.classList.remove(classes$s.isHidden);\n        });\n      }\n\n      const isDrawerMenuOpen = this.closest(\"header-drawer\").classList.contains(\n        classes$s.isOpen,\n      );\n\n      if (newPosition > 0 && isDrawerMenuOpen) {\n        const sliderulePrev = this.sliderule.closest(\n          `[${attributes$o.sliderule}=\"${newPosition}\"]`,\n        );\n        const linksHeight = sliderulePrev.querySelector(\n          selectors$C.links,\n        ).scrollHeight;\n\n        setTimeout(() => {\n          this.drawerMenu.style.height = `${linksHeight}px`;\n        }, 500);\n      } else {\n        setTimeout(() => {\n          this.drawerMenu.style.height = `auto`;\n        }, 500);\n      }\n\n      const children = close\n        ? this.pane.querySelectorAll(\n            `.${classes$s.isVisible}, .${classes$s.isHiding}`,\n          )\n        : this.childrenElements;\n      children.forEach((element, index) => {\n        const lastElement = children.length - 1 == index;\n        element.classList.remove(classes$s.isVisible);\n        if (close) {\n          element.classList.remove(classes$s.isHiding);\n          this.pane.classList.remove(classes$s.isHiding);\n        }\n        const removeHidingClass = () => {\n          if (\n            parseInt(this.pane.getAttribute(selectors$C.sliderulePane)) ===\n            newPosition\n          ) {\n            this.sliderule.classList.remove(classes$s.isVisible);\n          }\n          this.sliderule.classList.remove(classes$s.isHiding);\n          this.pane.classList.remove(classes$s.isHiding);\n\n          if (lastElement) {\n            this.accessibility.removeTrapFocus();\n            if (!close) {\n              this.trapFocusSliderule(false);\n            }\n          }\n\n          element.removeEventListener(\"animationend\", removeHidingClass);\n        };\n\n        if (window.theme.settings.enableAnimations) {\n          element.addEventListener(\"animationend\", removeHidingClass);\n        } else {\n          removeHidingClass();\n        }\n      });\n    }\n\n    showSliderule() {\n      let lastScrollableFrame = null;\n      const parent = this.closest(`.${classes$s.isVisible}`);\n      let lastScrollableElement = this.pane;\n\n      if (parent) {\n        lastScrollableElement = parent;\n      }\n\n      lastScrollableElement.scrollTo({\n        top: 0,\n        left: 0,\n        behavior: \"smooth\",\n      });\n\n      lastScrollableElement.classList.add(classes$s.scrolling);\n\n      const lastScrollableIsScrolling = () => {\n        if (lastScrollableElement.scrollTop <= 0) {\n          lastScrollableElement.classList.remove(classes$s.scrolling);\n          if (lastScrollableFrame) {\n            cancelAnimationFrame(lastScrollableFrame);\n          }\n        } else {\n          lastScrollableFrame = requestAnimationFrame(\n            lastScrollableIsScrolling,\n          );\n        }\n      };\n\n      lastScrollableFrame = requestAnimationFrame(lastScrollableIsScrolling);\n\n      const oldPosition = parseInt(this.pane.dataset.sliderulePane, 10);\n      const newPosition = oldPosition + 1;\n      this.sliderule.classList.add(classes$s.isVisible);\n      this.pane.setAttribute(selectors$C.sliderulePane, newPosition);\n\n      if (newPosition > 0) {\n        const linksHeight = this.sliderule.scrollHeight;\n        this.drawerMenu.style.height = `${linksHeight}px`;\n      }\n\n      const hiddenItems = this.pane.querySelectorAll(\n        `[${selectors$C.animates}=\"${oldPosition}\"]`,\n      );\n      if (hiddenItems.length) {\n        hiddenItems.forEach((element, index) => {\n          const lastElement = hiddenItems.length - 1 == index;\n          element.classList.add(classes$s.isHiding);\n          const removeHidingClass = () => {\n            element.classList.remove(classes$s.isHiding);\n            if (\n              parseInt(this.pane.getAttribute(selectors$C.sliderulePane)) !==\n              oldPosition\n            ) {\n              element.classList.add(classes$s.isHidden);\n            }\n\n            if (lastElement) {\n              this.trapFocusSliderule();\n            }\n            element.removeEventListener(\"animationend\", removeHidingClass);\n          };\n\n          if (window.theme.settings.enableAnimations) {\n            element.addEventListener(\"animationend\", removeHidingClass);\n          } else {\n            removeHidingClass();\n          }\n        });\n      }\n    }\n\n    closeSliderule() {\n      if (\n        this.pane &&\n        this.pane.hasAttribute(selectors$C.sliderulePane) &&\n        parseInt(this.pane.getAttribute(selectors$C.sliderulePane)) > 0\n      ) {\n        this.hideSliderule(true);\n        if (parseInt(this.pane.getAttribute(selectors$C.sliderulePane)) > 0) {\n          this.pane.setAttribute(selectors$C.sliderulePane, 0);\n        }\n      }\n    }\n\n    disconnectedCallback() {\n      document.removeEventListener(\n        \"theme:sliderule:close\",\n        this.closeSliderule,\n      );\n    }\n  }\n\n  // Safari requestIdleCallback polyfill\n  window.requestIdleCallback =\n    window.requestIdleCallback ||\n    function (cb) {\n      var start = Date.now();\n      return setTimeout(function () {\n        cb({\n          didTimeout: false,\n          timeRemaining: function () {\n            return Math.max(0, 50 - (Date.now() - start));\n          },\n        });\n      }, 1);\n    };\n  window.cancelIdleCallback =\n    window.cancelIdleCallback ||\n    function (id) {\n      clearTimeout(id);\n    };\n\n  if (window.theme.settings.enableAnimations) {\n    initAnimations();\n  }\n\n  resizeListener();\n  scrollListener();\n  isTouch();\n  setVars();\n  loadedImagesEventHook();\n\n  window.addEventListener(\"DOMContentLoaded\", () => {\n    setVarsOnResize();\n    ariaToggle(document);\n    floatLabels(document);\n    wrapElements(document);\n    removeLoadingClassFromLoadedImages(document);\n    loading();\n    appendCartItems();\n\n    requestIdleCallback(() => {\n      if (Shopify.visualPreviewMode) {\n        document.documentElement.classList.add(\"preview-mode\");\n      }\n    });\n  });\n\n  document.addEventListener(\"shopify:section:load\", (e) => {\n    const container = e.target;\n    floatLabels(container);\n    wrapElements(container);\n    ariaToggle(document);\n    setVarsOnResize();\n  });\n\n  if (!customElements.get(\"header-drawer\")) {\n    customElements.define(\"header-drawer\", HeaderDrawer);\n  }\n\n  if (!customElements.get(\"mobile-sliderule\")) {\n    customElements.define(\"mobile-sliderule\", HeaderMobileSliderule);\n  }\n\n  if (!customElements.get(\"popout-select\")) {\n    customElements.define(\"popout-select\", Popout);\n  }\n\n  if (!customElements.get(\"predictive-search\")) {\n    customElements.define(\"predictive-search\", PredictiveSearch);\n  }\n\n  if (!customElements.get(\"deferred-media\")) {\n    customElements.define(\"deferred-media\", DeferredMedia);\n  }\n\n  if (!customElements.get(\"grid-slider\")) {\n    customElements.define(\"grid-slider\", GridSlider);\n  }\n\n  if (!customElements.get(\"countdown-timer\")) {\n    customElements.define(\"countdown-timer\", CountdownTimer);\n  }\n\n  /**\n   * Module to show Recently Viewed Products\n   *\n   * Copyright (c) 2014 Caroline Schnapp (11heavens.com)\n   * Dual licensed under the MIT and GPL licenses:\n   * http://www.opensource.org/licenses/mit-license.php\n   * http://www.gnu.org/licenses/gpl.html\n   *\n   */\n\n  Shopify.Products = (function () {\n    const config = {\n      howManyToShow: 4,\n      howManyToStoreInMemory: 10,\n      wrapperId: \"recently-viewed-products\",\n      section: null,\n      target: \"api-product-grid-item\",\n      onComplete: null,\n    };\n\n    let productHandleQueue = [];\n    let wrapper = null;\n    let howManyToShowItems = null;\n\n    const today = new Date();\n    const expiresDate = new Date();\n    const daysToExpire = 90;\n    expiresDate.setTime(today.getTime() + 3600000 * 24 * daysToExpire);\n\n    const cookie = {\n      configuration: {\n        expires: expiresDate.toGMTString(),\n        path: \"/\",\n        domain: window.location.hostname,\n        sameSite: \"none\",\n        secure: true,\n      },\n      name: \"shopify_recently_viewed\",\n      write: function (recentlyViewed) {\n        const recentlyViewedString = encodeURIComponent(\n          recentlyViewed.join(\" \"),\n        );\n        document.cookie = `${this.name}=${recentlyViewedString}; expires=${this.configuration.expires}; path=${this.configuration.path}; domain=${this.configuration.domain}; sameSite=${this.configuration.sameSite}; secure=${this.configuration.secure}`;\n      },\n      read: function () {\n        let recentlyViewed = [];\n        let cookieValue = null;\n\n        if (\n          document.cookie.indexOf(\"; \") !== -1 &&\n          document.cookie.split(\"; \").find((row) => row.startsWith(this.name))\n        ) {\n          cookieValue = document.cookie\n            .split(\"; \")\n            .find((row) => row.startsWith(this.name))\n            .split(\"=\")[1];\n        }\n\n        if (cookieValue !== null) {\n          recentlyViewed = decodeURIComponent(cookieValue).split(\" \");\n        }\n\n        return recentlyViewed;\n      },\n      destroy: function () {\n        const cookieVal = null;\n        document.cookie = `${this.name}=${cookieVal}; expires=${this.configuration.expires}; path=${this.configuration.path}; domain=${this.configuration.domain}`;\n      },\n      remove: function (productHandle) {\n        const recentlyViewed = this.read();\n        const position = recentlyViewed.indexOf(productHandle);\n        if (position !== -1) {\n          recentlyViewed.splice(position, 1);\n          this.write(recentlyViewed);\n        }\n      },\n    };\n\n    const finalize = (wrapper, section) => {\n      wrapper.classList.remove(\"hidden\");\n      const cookieItemsLength = cookie.read().length;\n\n      if (\n        Shopify.recentlyViewed &&\n        howManyToShowItems &&\n        cookieItemsLength &&\n        cookieItemsLength < howManyToShowItems &&\n        wrapper.children.length\n      ) {\n        let allClassesArr = [];\n        let addClassesArr = [];\n        let objCounter = 0;\n        for (const property in Shopify.recentlyViewed) {\n          objCounter += 1;\n          const objString = Shopify.recentlyViewed[property];\n          const objArr = objString.split(\" \");\n          const propertyIdx = parseInt(property.split(\"_\")[1]);\n          allClassesArr = [...allClassesArr, ...objArr];\n\n          if (\n            cookie.read().length === propertyIdx ||\n            (objCounter === Object.keys(Shopify.recentlyViewed).length &&\n              !addClassesArr.length)\n          ) {\n            addClassesArr = [...addClassesArr, ...objArr];\n          }\n        }\n\n        for (let i = 0; i < wrapper.children.length; i++) {\n          const element = wrapper.children[i];\n          if (allClassesArr.length) {\n            element.classList.remove(...allClassesArr);\n          }\n\n          if (addClassesArr.length) {\n            element.classList.add(...addClassesArr);\n          }\n        }\n      }\n\n      // If we have a callback.\n      if (config.onComplete) {\n        try {\n          config.onComplete(wrapper, section);\n        } catch (error) {\n          console.log(error);\n        }\n      }\n    };\n\n    const moveAlong = (\n      shown,\n      productHandleQueue,\n      wrapper,\n      section,\n      target,\n      howManyToShow,\n    ) => {\n      if (productHandleQueue.length && shown < howManyToShow) {\n        fetch(\n          `${window.theme.routes.root}products/${productHandleQueue[0]}?section_id=${target}`,\n        )\n          .then((response) => response.text())\n          .then((product) => {\n            const aosDelay = shown * 100;\n            const aosAnchor = wrapper.id ? `#${wrapper.id}` : \"\";\n            const fresh = document.createElement(\"div\");\n            let productReplaced = product;\n            productReplaced = productReplaced.includes(\"||itemAnimationDelay||\")\n              ? productReplaced.replaceAll(\"||itemAnimationDelay||\", aosDelay)\n              : productReplaced;\n            productReplaced = productReplaced.includes(\n              \"||itemAnimationAnchor||\",\n            )\n              ? productReplaced.replaceAll(\"||itemAnimationAnchor||\", aosAnchor)\n              : productReplaced;\n            fresh.innerHTML = productReplaced;\n\n            wrapper.innerHTML +=\n              fresh.querySelector(\"[data-api-content]\").innerHTML;\n\n            productHandleQueue.shift();\n            shown++;\n            moveAlong(\n              shown,\n              productHandleQueue,\n              wrapper,\n              section,\n              target,\n              howManyToShow,\n            );\n          })\n          .catch(() => {\n            cookie.remove(productHandleQueue[0]);\n            productHandleQueue.shift();\n            moveAlong(\n              shown,\n              productHandleQueue,\n              wrapper,\n              section,\n              target,\n              howManyToShow,\n            );\n          });\n      } else {\n        finalize(wrapper, section);\n      }\n    };\n\n    return {\n      showRecentlyViewed: function (params) {\n        const paramsNew = params || {};\n        const shown = 0;\n\n        // Update defaults.\n        Object.assign(config, paramsNew);\n\n        // Read cookie.\n        productHandleQueue = cookie.read();\n\n        // Element where to insert.\n        wrapper = document.querySelector(`#${config.wrapperId}`);\n\n        // How many products to show.\n        howManyToShowItems = config.howManyToShow;\n        config.howManyToShow = Math.min(\n          productHandleQueue.length,\n          config.howManyToShow,\n        );\n\n        // If we have any to show.\n        if (config.howManyToShow && wrapper) {\n          // Getting each product with an Ajax call and rendering it on the page.\n          moveAlong(\n            shown,\n            productHandleQueue,\n            wrapper,\n            config.section,\n            config.target,\n            howManyToShowItems,\n          );\n        }\n      },\n\n      getConfig: function () {\n        return config;\n      },\n\n      clearList: function () {\n        cookie.destroy();\n      },\n\n      recordRecentlyViewed: function (params) {\n        const paramsNew = params || {};\n\n        // Update defaults.\n        Object.assign(config, paramsNew);\n\n        // Read cookie.\n        let recentlyViewed = cookie.read();\n\n        // If we are on a product page.\n        if (window.location.pathname.indexOf(\"/products/\") !== -1) {\n          // What is the product handle on this page.\n          let productHandle = decodeURIComponent(window.location.pathname)\n            .match(\n              /\\/products\\/([a-z0-9\\-]|[\\u3000-\\u303F]|[\\u3040-\\u309F]|[\\u30A0-\\u30FF]|[\\uFF00-\\uFFEF]|[\\u4E00-\\u9FAF]|[\\u2605-\\u2606]|[\\u2190-\\u2195]|[\\u203B]|[\\w\\u0430-\\u044f]|[\\u0400-\\u04FF]|[\\u0900-\\u097F]|[\\u0590-\\u05FF\\u200f\\u200e]|[\\u0621-\\u064A\\u0660-\\u0669 ])+/,\n            )[0]\n            .split(\"/products/\")[1];\n\n          if (config.handle) {\n            productHandle = config.handle;\n          }\n\n          // In what position is that product in memory.\n          const position = recentlyViewed.indexOf(productHandle);\n\n          // If not in memory.\n          if (position === -1) {\n            // Add product at the start of the list.\n            recentlyViewed.unshift(productHandle);\n            // Only keep what we need.\n            recentlyViewed = recentlyViewed.splice(\n              0,\n              config.howManyToStoreInMemory,\n            );\n          } else {\n            // Remove the product and place it at start of list.\n            recentlyViewed.splice(position, 1);\n            recentlyViewed.unshift(productHandle);\n          }\n\n          // Update cookie.\n          cookie.write(recentlyViewed);\n        }\n      },\n\n      hasProducts: cookie.read().length > 0,\n    };\n  })();\n\n  const classes$r = {\n    focus: \"is-focused\",\n  };\n\n  const selectors$B = {\n    inPageLink: \"[data-skip-content]\",\n    linkesWithOnlyHash: 'a[href=\"#\"]',\n  };\n\n  class Accessibility {\n    constructor() {\n      this.init();\n    }\n\n    init() {\n      this.a11y = a11y;\n\n      // DOM Elements\n      this.html = document.documentElement;\n      this.body = document.body;\n      this.inPageLink = document.querySelector(selectors$B.inPageLink);\n      this.linkesWithOnlyHash = document.querySelectorAll(\n        selectors$B.linkesWithOnlyHash,\n      );\n\n      // A11Y init methods\n      this.a11y.focusHash();\n      this.a11y.bindInPageLinks();\n\n      // Events\n      this.clickEvents();\n      this.focusEvents();\n    }\n\n    /**\n     * Clicked events accessibility\n     *\n     * @return  {Void}\n     */\n\n    clickEvents() {\n      if (this.inPageLink) {\n        this.inPageLink.addEventListener(\"click\", (event) => {\n          event.preventDefault();\n        });\n      }\n\n      if (this.linkesWithOnlyHash) {\n        this.linkesWithOnlyHash.forEach((item) => {\n          item.addEventListener(\"click\", (event) => {\n            event.preventDefault();\n          });\n        });\n      }\n    }\n\n    /**\n     * Focus events\n     *\n     * @return  {Void}\n     */\n\n    focusEvents() {\n      document.addEventListener(\"mousedown\", () => {\n        this.body.classList.remove(classes$r.focus);\n      });\n\n      document.addEventListener(\"keyup\", (event) => {\n        if (event.code !== \"Tab\") {\n          return;\n        }\n\n        this.body.classList.add(classes$r.focus);\n      });\n    }\n  }\n\n  window.a11y = new Accessibility();\n\n  /**\n   * Currency Helpers\n   * -----------------------------------------------------------------------------\n   * A collection of useful functions that help with currency formatting\n   *\n   * Current contents\n   * - formatMoney - Takes an amount in cents and returns it as a formatted dollar value.\n   *\n   */\n\n  const moneyFormat = \"${{amount}}\";\n\n  /**\n   * Format money values based on your shop currency settings\n   * @param  {Number|string} cents - value in cents or dollar amount e.g. 300 cents\n   * or 3.00 dollars\n   * @param  {String} format - shop money_format setting\n   * @return {String} value - formatted value\n   */\n  function formatMoney(cents, format) {\n    if (typeof cents === \"string\") {\n      cents = cents.replace(\".\", \"\");\n    }\n    let value = \"\";\n    const placeholderRegex = /\\{\\{\\s*(\\w+)\\s*\\}\\}/;\n    const formatString = format || moneyFormat;\n\n    function formatWithDelimiters(\n      number,\n      precision = 2,\n      thousands = \",\",\n      decimal = \".\",\n    ) {\n      if (isNaN(number) || number == null) {\n        return 0;\n      }\n\n      number = (number / 100.0).toFixed(precision);\n\n      const parts = number.split(\".\");\n      const dollarsAmount = parts[0].replace(\n        /(\\d)(?=(\\d\\d\\d)+(?!\\d))/g,\n        `$1${thousands}`,\n      );\n      const centsAmount = parts[1] ? decimal + parts[1] : \"\";\n\n      return dollarsAmount + centsAmount;\n    }\n\n    switch (formatString.match(placeholderRegex)[1]) {\n      case \"amount\":\n        value = formatWithDelimiters(cents, 2);\n        break;\n      case \"amount_no_decimals\":\n        value = formatWithDelimiters(cents, 0);\n        break;\n      case \"amount_with_comma_separator\":\n        value = formatWithDelimiters(cents, 2, \".\", \",\");\n        break;\n      case \"amount_no_decimals_with_comma_separator\":\n        value = formatWithDelimiters(cents, 0, \".\", \",\");\n        break;\n      case \"amount_with_apostrophe_separator\":\n        value = formatWithDelimiters(cents, 2, \"'\", \".\");\n        break;\n      case \"amount_no_decimals_with_space_separator\":\n        value = formatWithDelimiters(cents, 0, \" \", \"\");\n        break;\n      case \"amount_with_space_separator\":\n        value = formatWithDelimiters(cents, 2, \" \", \",\");\n        break;\n      case \"amount_with_period_and_space_separator\":\n        value = formatWithDelimiters(cents, 2, \" \", \".\");\n        break;\n    }\n\n    return formatString.replace(placeholderRegex, value);\n  }\n\n  const throttle = (fn, wait) => {\n    let prev, next;\n    return function invokeFn(...args) {\n      const now = Date.now();\n      next = clearTimeout(next);\n      if (!prev || now - prev >= wait) {\n        // eslint-disable-next-line prefer-spread\n        fn.apply(null, args);\n        prev = now;\n      } else {\n        next = setTimeout(invokeFn.bind(null, ...args), wait - (now - prev));\n      }\n    };\n  };\n\n  function FetchError(object) {\n    this.status = object.status || null;\n    this.headers = object.headers || null;\n    this.json = object.json || null;\n    this.body = object.body || null;\n  }\n  FetchError.prototype = Error.prototype;\n\n  const classes$q = {\n    animated: \"is-animated\",\n    active: \"is-active\",\n    added: \"is-added\",\n    disabled: \"is-disabled\",\n    empty: \"is-empty\",\n    error: \"has-error\",\n    headerStuck: \"js__header__stuck\",\n    hidden: \"is-hidden\",\n    hiding: \"is-hiding\",\n    loading: \"is-loading\",\n    open: \"is-open\",\n    removed: \"is-removed\",\n    success: \"is-success\",\n    visible: \"is-visible\",\n    expanded: \"is-expanded\",\n    updated: \"is-updated\",\n    variantSoldOut: \"variant--soldout\",\n    variantUnavailable: \"variant--unavailable\",\n  };\n\n  const selectors$A = {\n    apiContent: \"[data-api-content]\",\n    apiLineItems: \"[data-api-line-items]\",\n    apiUpsellItems: \"[data-api-upsell-items]\",\n    apiCartPrice: \"[data-api-cart-price]\",\n    animation: \"[data-animation]\",\n    additionalCheckoutButtons: \".additional-checkout-buttons\",\n    buttonSkipUpsellProduct: \"[data-skip-upsell-product]\",\n    cartBarAdd: \"[data-add-to-cart-bar]\",\n    cartCloseError: \"[data-cart-error-close]\",\n    cartDrawer: \"cart-drawer\",\n    cartDrawerClose: \"[data-cart-drawer-close]\",\n    cartEmpty: \"[data-cart-empty]\",\n    cartErrors: \"[data-cart-errors]\",\n    cartItemRemove: \"[data-item-remove]\",\n    cartPage: \"[data-cart-page]\",\n    cartForm: \"[data-cart-form]\",\n    cartTermsCheckbox: \"[data-cart-acceptance-checkbox]\",\n    cartCheckoutButtonWrapper: \"[data-cart-checkout-buttons]\",\n    cartCheckoutButton: \"[data-cart-checkout-button]\",\n    cartTotal: \"[data-cart-total]\",\n    checkoutButtons: \"[data-checkout-buttons]\",\n    errorMessage: \"[data-error-message]\",\n    formCloseError: \"[data-close-error]\",\n    formErrorsContainer: \"[data-cart-errors-container]\",\n    formWrapper: \"[data-form-wrapper]\",\n    freeShipping: \"[data-free-shipping]\",\n    freeShippingGraph: \"[data-progress-graph]\",\n    freeShippingProgress: \"[data-progress-bar]\",\n    headerWrapper: \"[data-header-wrapper]\",\n    item: \"[data-item]\",\n    itemsHolder: \"[data-items-holder]\",\n    leftToSpend: \"[data-left-to-spend]\",\n    navDrawer: \"[data-drawer]\",\n    outerSection: \"[data-section-id]\",\n    priceHolder: \"[data-cart-price-holder]\",\n    quickAddHolder: \"[data-quick-add-holder]\",\n    quickAddModal: \"[data-quick-add-modal]\",\n    qtyInput: 'input[name=\"updates[]\"]',\n    upsellProductsHolder: \"[data-upsell-products]\",\n    upsellWidget: \"[data-upsell-widget]\",\n    termsErrorMessage: \"[data-terms-error-message]\",\n    collapsibleBody: \"[data-collapsible-body]\",\n    recentlyViewedHolderId: \"recently-viewed-products-cart\",\n    noscript: \"noscript\",\n  };\n\n  const attributes$n = {\n    cartTotal: \"data-cart-total\",\n    disabled: \"disabled\",\n    freeShipping: \"data-free-shipping\",\n    freeShippingLimit: \"data-free-shipping-limit\",\n    item: \"data-item\",\n    itemIndex: \"data-item-index\",\n    itemTitle: \"data-item-title\",\n    open: \"open\",\n    quickAddHolder: \"data-quick-add-holder\",\n    quickAddVariant: \"data-quick-add-variant\",\n    scrollLocked: \"data-scroll-locked\",\n    upsellAutoOpen: \"data-upsell-auto-open\",\n    name: \"name\",\n  };\n\n  class CartItems extends HTMLElement {\n    constructor() {\n      super();\n    }\n\n    connectedCallback() {\n      // DOM Elements\n      this.cartPage = document.querySelector(selectors$A.cartPage);\n      this.cartForm = document.querySelector(selectors$A.cartForm);\n      this.cartDrawer = document.querySelector(selectors$A.cartDrawer);\n      this.cartEmpty = document.querySelector(selectors$A.cartEmpty);\n      this.cartTermsCheckbox = document.querySelector(\n        selectors$A.cartTermsCheckbox,\n      );\n      this.cartCheckoutButtonWrapper = document.querySelector(\n        selectors$A.cartCheckoutButtonWrapper,\n      );\n      this.cartCheckoutButton = document.querySelector(\n        selectors$A.cartCheckoutButton,\n      );\n      this.checkoutButtons = document.querySelector(\n        selectors$A.checkoutButtons,\n      );\n      this.itemsHolder = document.querySelector(selectors$A.itemsHolder);\n      this.priceHolder = document.querySelector(selectors$A.priceHolder);\n      this.items = document.querySelectorAll(selectors$A.item);\n      this.cartTotal = document.querySelector(selectors$A.cartTotal);\n      this.freeShipping = document.querySelectorAll(selectors$A.freeShipping);\n      this.cartErrorHolder = document.querySelector(selectors$A.cartErrors);\n      this.cartCloseErrorMessage = document.querySelector(\n        selectors$A.cartCloseError,\n      );\n      this.headerWrapper = document.querySelector(selectors$A.headerWrapper);\n      this.navDrawer = document.querySelector(selectors$A.navDrawer);\n      this.upsellProductsHolder = document.querySelector(\n        selectors$A.upsellProductsHolder,\n      );\n      this.subtotal = window.theme.subtotal;\n\n      // Define Cart object depending on if we have cart drawer or cart page\n      this.cart = this.cartDrawer || this.cartPage;\n\n      // Cart events\n      this.animateItems = this.animateItems.bind(this);\n      this.addToCart = this.addToCart.bind(this);\n      this.cartAddEvent = this.cartAddEvent.bind(this);\n      this.updateProgress = this.updateProgress.bind(this);\n      this.onCartDrawerClose = this.onCartDrawerClose.bind(this);\n\n      // Set global event listeners for \"Add to cart\" and Announcement bar wheel progress\n      document.addEventListener(\"theme:cart:add\", this.cartAddEvent);\n      document.addEventListener(\"theme:announcement:init\", this.updateProgress);\n\n      if (theme.settings.cartType == \"drawer\") {\n        document.addEventListener(\"theme:cart-drawer:open\", this.animateItems);\n        document.addEventListener(\n          \"theme:cart-drawer:close\",\n          this.onCartDrawerClose,\n        );\n      }\n\n      // Upsell products\n      this.skipUpsellProductsArray = [];\n      this.skipUpsellProductEvent();\n      this.checkSkippedUpsellProductsFromStorage();\n      this.toggleCartUpsellWidgetVisibility();\n\n      // Free Shipping values\n      this.circumference = 28 * Math.PI; // radius - stroke * 4 * PI\n      this.freeShippingLimit = this.freeShipping.length\n        ? Number(\n            this.freeShipping[0].getAttribute(attributes$n.freeShippingLimit),\n          ) *\n          100 *\n          window.Shopify.currency.rate\n        : 0;\n\n      this.freeShippingMessageHandle(this.subtotal);\n      this.updateProgress();\n\n      this.build = this.build.bind(this);\n      this.updateCart = this.updateCart.bind(this);\n      this.productAddCallback = this.productAddCallback.bind(this);\n      this.formSubmitHandler = throttle(this.formSubmitHandler.bind(this), 50);\n\n      if (this.cartPage) {\n        this.animateItems();\n      }\n\n      if (this.cart) {\n        // Recently viewed products\n        this.recentlyViewedProducts();\n\n        // Checking\n        this.hasItemsInCart = this.hasItemsInCart.bind(this);\n        this.cartCount = this.getCartItemCount();\n      }\n\n      // Set classes\n      this.toggleClassesOnContainers =\n        this.toggleClassesOnContainers.bind(this);\n\n      // Flags\n      this.totalItems = this.items.length;\n\n      this.cartUpdateFailed = false;\n\n      // Cart Events\n      this.cartEvents();\n      this.cartRemoveEvents();\n      this.cartUpdateEvents();\n\n      document.addEventListener(\"theme:product:add\", this.productAddCallback);\n      document.addEventListener(\n        \"theme:product:add-error\",\n        this.productAddCallback,\n      );\n      document.addEventListener(\"theme:cart:refresh\", this.getCart.bind(this));\n\n      document.dispatchEvent(\n        new CustomEvent(\"theme:cart:load\", { bubbles: true }),\n      );\n    }\n\n    disconnectedCallback() {\n      document.removeEventListener(\"theme:cart:add\", this.cartAddEvent);\n      document.removeEventListener(\"theme:cart:refresh\", this.cartAddEvent);\n      document.removeEventListener(\n        \"theme:announcement:init\",\n        this.updateProgress,\n      );\n      document.removeEventListener(\n        \"theme:product:add\",\n        this.productAddCallback,\n      );\n      document.removeEventListener(\n        \"theme:product:add-error\",\n        this.productAddCallback,\n      );\n\n      document.dispatchEvent(\n        new CustomEvent(\"theme:cart:unload\", { bubbles: true }),\n      );\n\n      if (document.documentElement.hasAttribute(attributes$n.scrollLocked)) {\n        document.dispatchEvent(\n          new CustomEvent(\"theme:scroll:unlock\", { bubbles: true }),\n        );\n      }\n    }\n\n    onCartDrawerClose() {\n      this.resetAnimatedItems();\n\n      if (this.cartDrawer?.classList.contains(classes$q.open)) {\n        this.cart.classList.remove(classes$q.updated);\n      }\n\n      this.cartEmpty.classList.remove(classes$q.updated);\n      this.cartErrorHolder.classList.remove(classes$q.expanded);\n      this.cart.querySelectorAll(selectors$A.animation).forEach((item) => {\n        const removeHidingClass = () => {\n          item.classList.remove(classes$q.hiding);\n          item.removeEventListener(\"animationend\", removeHidingClass);\n        };\n\n        item.classList.add(classes$q.hiding);\n        item.addEventListener(\"animationend\", removeHidingClass);\n      });\n    }\n\n    /**\n     * Cart update event hook\n     *\n     * @return  {Void}\n     */\n\n    cartUpdateEvents() {\n      this.items = document.querySelectorAll(selectors$A.item);\n\n      this.items.forEach((item) => {\n        item.addEventListener(\"theme:cart:update\", (event) => {\n          this.updateCart(\n            {\n              id: event.detail.id,\n              quantity: event.detail.quantity,\n            },\n            item,\n          );\n        });\n      });\n    }\n\n    /**\n     * Cart events\n     *\n     * @return  {Void}\n     */\n\n    cartRemoveEvents() {\n      const cartItemRemove = document.querySelectorAll(\n        selectors$A.cartItemRemove,\n      );\n\n      cartItemRemove.forEach((button) => {\n        const item = button.closest(selectors$A.item);\n        button.addEventListener(\"click\", (event) => {\n          event.preventDefault();\n\n          if (button.classList.contains(classes$q.disabled)) return;\n\n          this.updateCart(\n            {\n              id: button.dataset.id,\n              quantity: 0,\n            },\n            item,\n          );\n        });\n      });\n\n      if (this.cartCloseErrorMessage) {\n        this.cartCloseErrorMessage.addEventListener(\"click\", (event) => {\n          event.preventDefault();\n\n          this.cartErrorHolder.classList.remove(classes$q.expanded);\n        });\n      }\n    }\n\n    /**\n     * Cart event add product to cart\n     *\n     * @return  {Void}\n     */\n\n    cartAddEvent(event) {\n      let formData = \"\";\n      let button = event.detail.button;\n\n      if (button.hasAttribute(\"disabled\")) return;\n      const form = button.closest(\"form\");\n      // Validate form\n      if (!form.checkValidity()) {\n        form.reportValidity();\n        return;\n      }\n      formData = new FormData(form);\n\n      const hasInputsInNoScript = [...form.elements].some((el) =>\n        el.closest(selectors$A.noscript),\n      );\n      if (hasInputsInNoScript) {\n        formData = this.handleFormDataDuplicates([...form.elements], formData);\n      }\n\n      if (form !== null && form.querySelector('[type=\"file\"]')) {\n        return;\n      }\n      if (theme.settings.cartType === \"drawer\" && this.cartDrawer) {\n        event.preventDefault();\n      }\n      this.addToCart(formData, button);\n    }\n\n    /**\n     * Modify the `formData` object in case there are key/value pairs with an overlapping `key`\n     *  - the presence of form input fields inside a `noscript` tag leads to a duplicate `key`, which overwrites the existing `value` when the `FormData` is constructed\n     *  - such key/value pairs discrepancies occur in the Theme editor, when any setting is updated, and right before one presses the \"Save\" button\n     *\n     * @param   {Array}  A list of all `HTMLFormElement.elements` DOM nodes\n     * @param   {Object}  `FormData` object, created with the `FormData()` constructor\n     *\n     * @return  {Object} Updated `FormData` object that does not contain any duplicate keys\n     */\n    handleFormDataDuplicates(elements, formData) {\n      if (!elements.length || typeof formData !== \"object\") return formData;\n\n      elements.forEach((element) => {\n        if (element.closest(selectors$A.noscript)) {\n          const key = element.getAttribute(attributes$n.name);\n          const value = element.value;\n\n          if (key) {\n            const values = formData.getAll(key);\n            if (values.length > 1) values.splice(values.indexOf(value), 1);\n\n            formData.delete(key);\n            formData.set(key, values[0]);\n          }\n        }\n      });\n\n      return formData;\n    }\n\n    /**\n     * Cart events\n     *\n     * @return  {Void}\n     */\n\n    cartEvents() {\n      if (this.cartTermsCheckbox) {\n        this.cartTermsCheckbox.removeEventListener(\n          \"change\",\n          this.formSubmitHandler,\n        );\n        this.cartCheckoutButtonWrapper.removeEventListener(\n          \"click\",\n          this.formSubmitHandler,\n        );\n        this.cartForm.removeEventListener(\"submit\", this.formSubmitHandler);\n\n        this.cartTermsCheckbox.addEventListener(\n          \"change\",\n          this.formSubmitHandler,\n        );\n        this.cartCheckoutButtonWrapper.addEventListener(\n          \"click\",\n          this.formSubmitHandler,\n        );\n        this.cartForm.addEventListener(\"submit\", this.formSubmitHandler);\n      }\n    }\n\n    formSubmitHandler() {\n      const termsAccepted = document.querySelector(\n        selectors$A.cartTermsCheckbox,\n      ).checked;\n      const termsError = document.querySelector(selectors$A.termsErrorMessage);\n\n      // Disable form submit if terms and conditions are not accepted\n      if (!termsAccepted) {\n        if (document.querySelector(selectors$A.termsErrorMessage).length > 0) {\n          return;\n        }\n\n        termsError.innerText = theme.strings.cartAcceptanceError;\n        this.cartCheckoutButton.setAttribute(attributes$n.disabled, true);\n        termsError.classList.add(classes$q.expanded);\n      } else {\n        termsError.classList.remove(classes$q.expanded);\n        this.cartCheckoutButton.removeAttribute(attributes$n.disabled);\n      }\n    }\n\n    /**\n     * Cart event remove out of stock error\n     *\n     * @return  {Void}\n     */\n\n    formErrorsEvents(errorContainer) {\n      const buttonErrorClose = errorContainer.querySelector(\n        selectors$A.formCloseError,\n      );\n      buttonErrorClose?.addEventListener(\"click\", (e) => {\n        e.preventDefault();\n\n        if (errorContainer) {\n          errorContainer.classList.remove(classes$q.visible);\n        }\n      });\n    }\n\n    /**\n     * Get response from the cart\n     *\n     * @return  {Void}\n     */\n\n    getCart() {\n      fetch(theme.routes.cart_url + \"?section_id=api-cart-items\")\n        .then(this.cartErrorsHandler)\n        .then((response) => response.text())\n        .then((response) => {\n          const element = document.createElement(\"div\");\n          element.innerHTML = response;\n\n          const cleanResponse = element.querySelector(selectors$A.apiContent);\n          this.build(cleanResponse);\n        })\n        .catch((error) => console.log(error));\n    }\n\n    /**\n     * Add item(s) to the cart and show the added item(s)\n     *\n     * @param   {String}  formData\n     * @param   {DOM Element}  button\n     *\n     * @return  {Void}\n     */\n\n    addToCart(formData, button) {\n      if (this.cart) {\n        this.cart.classList.add(classes$q.loading);\n      }\n\n      const quickAddHolder = button?.closest(selectors$A.quickAddHolder);\n\n      if (button) {\n        button.classList.add(classes$q.loading);\n        button.disabled = true;\n      }\n\n      if (quickAddHolder) {\n        quickAddHolder.classList.add(classes$q.visible);\n      }\n\n      fetch(theme.routes.cart_add_url, {\n        method: \"POST\",\n        headers: {\n          \"X-Requested-With\": \"XMLHttpRequest\",\n          Accept: \"application/javascript\",\n        },\n        body: formData,\n      })\n        .then((response) => response.json())\n        .then((response) => {\n          if (response.status) {\n            this.addToCartError(response, button);\n\n            if (button) {\n              button.classList.remove(classes$q.loading);\n              button.disabled = false;\n            }\n\n            return;\n          }\n\n          if (this.cart) {\n            if (button) {\n              button.classList.remove(classes$q.loading);\n              button.classList.add(classes$q.added);\n\n              button.dispatchEvent(\n                new CustomEvent(\"theme:product:add\", {\n                  detail: {\n                    response: response,\n                    button: button,\n                  },\n                  bubbles: true,\n                }),\n              );\n            }\n            if (theme.settings.cartType === \"page\") {\n              window.location = theme.routes.cart_url;\n            }\n            this.getCart();\n          } else {\n            // Redirect to cart page if \"Add to cart\" is successful\n            window.location = theme.routes.cart_url;\n          }\n        })\n        .catch((error) => {\n          this.addToCartError(error, button);\n          this.enableCartButtons();\n        });\n    }\n\n    /**\n     * Update cart\n     *\n     * @param   {Object}  updateData\n     *\n     * @return  {Void}\n     */\n\n    updateCart(updateData = {}, currentItem = null) {\n      this.cart.classList.add(classes$q.loading);\n\n      let updatedQuantity = updateData.quantity;\n      if (currentItem !== null) {\n        if (updatedQuantity) {\n          currentItem.classList.add(classes$q.loading);\n        } else {\n          currentItem.classList.add(classes$q.removed);\n        }\n      }\n      this.disableCartButtons();\n\n      const newItem =\n        this.cart.querySelector(`[${attributes$n.item}=\"${updateData.id}\"]`) ||\n        currentItem;\n      const lineIndex = newItem?.hasAttribute(attributes$n.itemIndex)\n        ? parseInt(newItem.getAttribute(attributes$n.itemIndex))\n        : 0;\n      const itemTitle = newItem?.hasAttribute(attributes$n.itemTitle)\n        ? newItem.getAttribute(attributes$n.itemTitle)\n        : null;\n\n      if (lineIndex === 0) return;\n\n      const data = {\n        line: lineIndex,\n        quantity: updatedQuantity,\n      };\n\n      fetch(theme.routes.cart_change_url, {\n        method: \"post\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          Accept: \"application/json\",\n        },\n        body: JSON.stringify(data),\n      })\n        .then((response) => {\n          return response.text();\n        })\n        .then((state) => {\n          const parsedState = JSON.parse(state);\n\n          if (parsedState.errors) {\n            this.cartUpdateFailed = true;\n            this.updateErrorText(itemTitle);\n            this.toggleErrorMessage();\n            this.resetLineItem(currentItem);\n            this.enableCartButtons();\n\n            return;\n          }\n\n          this.getCart();\n        })\n        .catch((error) => {\n          console.log(error);\n          this.enableCartButtons();\n        });\n    }\n\n    /**\n     * Reset line item initial state\n     *\n     * @return  {Void}\n     */\n    resetLineItem(item) {\n      const qtyInput = item.querySelector(selectors$A.qtyInput);\n      const qty = qtyInput.getAttribute(\"value\");\n      qtyInput.value = qty;\n      item.classList.remove(classes$q.loading);\n    }\n\n    /**\n     * Disable cart buttons and inputs\n     *\n     * @return  {Void}\n     */\n    disableCartButtons() {\n      const inputs = this.cart.querySelectorAll(\"input\");\n      const buttons = this.cart.querySelectorAll(\n        `button, ${selectors$A.cartItemRemove}`,\n      );\n\n      if (inputs.length) {\n        inputs.forEach((item) => {\n          item.classList.add(classes$q.disabled);\n          item.blur();\n          item.disabled = true;\n        });\n      }\n\n      if (buttons.length) {\n        buttons.forEach((item) => {\n          item.setAttribute(attributes$n.disabled, true);\n        });\n      }\n    }\n\n    /**\n     * Enable cart buttons and inputs\n     *\n     * @return  {Void}\n     */\n    enableCartButtons() {\n      const inputs = this.cart.querySelectorAll(\"input\");\n      const buttons = this.cart.querySelectorAll(\n        `button, ${selectors$A.cartItemRemove}`,\n      );\n\n      if (inputs.length) {\n        inputs.forEach((item) => {\n          item.classList.remove(classes$q.disabled);\n          item.disabled = false;\n        });\n      }\n\n      if (buttons.length) {\n        buttons.forEach((item) => {\n          item.removeAttribute(attributes$n.disabled);\n        });\n      }\n\n      this.cart.classList.remove(classes$q.loading);\n    }\n\n    /**\n     * Update error text\n     *\n     * @param   {String}  itemTitle\n     *\n     * @return  {Void}\n     */\n\n    updateErrorText(itemTitle) {\n      this.cartErrorHolder.querySelector(selectors$A.errorMessage).innerText =\n        itemTitle;\n    }\n\n    /**\n     * Toggle error message\n     *\n     * @return  {Void}\n     */\n\n    toggleErrorMessage() {\n      if (!this.cartErrorHolder) return;\n\n      this.cartErrorHolder.classList.toggle(\n        classes$q.expanded,\n        this.cartUpdateFailed,\n      );\n\n      // Reset cart error events flag\n      this.cartUpdateFailed = false;\n    }\n\n    /**\n     * Handle errors\n     *\n     * @param   {Object}  response\n     *\n     * @return  {Object}\n     */\n\n    cartErrorsHandler(response) {\n      if (!response.ok) {\n        return response.json().then(function (json) {\n          const e = new FetchError({\n            status: response.statusText,\n            headers: response.headers,\n            json: json,\n          });\n          throw e;\n        });\n      }\n      return response;\n    }\n\n    /**\n     * Add to cart error handle\n     *\n     * @param   {Object}  data\n     * @param   {DOM Element/Null} button\n     *\n     * @return  {Void}\n     */\n\n    addToCartError(data, button) {\n      if (button !== null) {\n        const outerContainer =\n          button.closest(selectors$A.outerSection) ||\n          button.closest(selectors$A.quickAddHolder) ||\n          button.closest(selectors$A.quickAddModal);\n        let errorContainer = outerContainer?.querySelector(\n          selectors$A.formErrorsContainer,\n        );\n        const buttonUpsellHolder = button.closest(selectors$A.quickAddHolder);\n\n        if (\n          buttonUpsellHolder &&\n          buttonUpsellHolder.querySelector(selectors$A.formErrorsContainer)\n        ) {\n          errorContainer = buttonUpsellHolder.querySelector(\n            selectors$A.formErrorsContainer,\n          );\n        }\n\n        if (errorContainer) {\n          let errorMessage = `${data.message}: ${data.description}`;\n\n          if (data.message == data.description) {\n            errorMessage = data.message;\n          }\n\n          errorContainer.innerHTML = `<div class=\"errors\">${errorMessage}<button type=\"button\" class=\"errors__close\" data-close-error><svg aria-hidden=\"true\" focusable=\"false\" role=\"presentation\" width=\"24px\" height=\"24px\" stroke-width=\"1\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" color=\"currentColor\" class=\"icon icon-cancel\"><path d=\"M6.758 17.243L12.001 12m5.243-5.243L12 12m0 0L6.758 6.757M12.001 12l5.243 5.243\" stroke=\"currentColor\" stroke-width=\"1\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path></svg></button></div>`;\n          errorContainer.classList.add(classes$q.visible);\n          this.formErrorsEvents(errorContainer);\n        }\n\n        button.dispatchEvent(\n          new CustomEvent(\"theme:product:add-error\", {\n            detail: {\n              response: data,\n              button: button,\n            },\n            bubbles: true,\n          }),\n        );\n      }\n\n      const quickAddHolder = button?.closest(selectors$A.quickAddHolder);\n\n      if (quickAddHolder) {\n        quickAddHolder.dispatchEvent(\n          new CustomEvent(\"theme:cart:error\", {\n            bubbles: true,\n            detail: {\n              message: data.message,\n              description: data.description,\n              holder: quickAddHolder,\n            },\n          }),\n        );\n      }\n\n      this.cart?.classList.remove(classes$q.loading);\n    }\n\n    /**\n     * Add product to cart events\n     *\n     * @return  {Void}\n     */\n    productAddCallback(event) {\n      let buttons = [];\n      let quickAddHolder = null;\n      const hasError = event.type == \"theme:product:add-error\";\n      const buttonATC = event.detail.button;\n      const cartBarButtonATC = document.querySelector(selectors$A.cartBarAdd);\n\n      buttons.push(buttonATC);\n      quickAddHolder = buttonATC.closest(selectors$A.quickAddHolder);\n\n      if (cartBarButtonATC) {\n        buttons.push(cartBarButtonATC);\n      }\n\n      buttons.forEach((button) => {\n        button.classList.remove(classes$q.loading);\n        if (!hasError) {\n          button.classList.add(classes$q.added);\n        }\n      });\n\n      setTimeout(() => {\n        buttons.forEach((button) => {\n          button.classList.remove(classes$q.added);\n          const isVariantUnavailable =\n            button\n              .closest(selectors$A.formWrapper)\n              ?.classList.contains(classes$q.variantSoldOut) ||\n            button\n              .closest(selectors$A.formWrapper)\n              ?.classList.contains(classes$q.variantUnavailable);\n\n          if (!isVariantUnavailable) {\n            button.disabled = false;\n          }\n        });\n\n        quickAddHolder?.classList.remove(classes$q.visible);\n      }, 1000);\n    }\n\n    /**\n     * Toggle classes on different containers and messages\n     *\n     * @return  {Void}\n     */\n\n    toggleClassesOnContainers() {\n      const hasItemsInCart = this.hasItemsInCart();\n\n      this.cart.classList.toggle(classes$q.empty, !hasItemsInCart);\n\n      if (!hasItemsInCart && this.cartDrawer) {\n        setTimeout(() => {\n          trapFocus(this.cartDrawer, {\n            elementToFocus: this.cartDrawer.querySelector(\n              selectors$A.cartDrawerClose,\n            ),\n          });\n        }, 100);\n      }\n    }\n\n    /**\n     * Build cart depends on results\n     *\n     * @param   {Object}  data\n     *\n     * @return  {Void}\n     */\n\n    build(data) {\n      const cartItemsData = data.querySelector(selectors$A.apiLineItems);\n      const upsellItemsData = data.querySelector(selectors$A.apiUpsellItems);\n      const cartEmptyData = Boolean(\n        cartItemsData === null && upsellItemsData === null,\n      );\n      const priceData = data.querySelector(selectors$A.apiCartPrice);\n      const cartTotal = data.querySelector(selectors$A.cartTotal);\n\n      if (this.priceHolder && priceData) {\n        this.priceHolder.innerHTML = priceData.innerHTML;\n      }\n\n      if (cartEmptyData) {\n        this.itemsHolder.innerHTML = data.innerHTML;\n\n        if (this.upsellProductsHolder) {\n          this.upsellProductsHolder.innerHTML = \"\";\n        }\n      } else {\n        this.itemsHolder.innerHTML = cartItemsData.innerHTML;\n\n        if (this.upsellProductsHolder) {\n          this.upsellProductsHolder.innerHTML = upsellItemsData.innerHTML;\n        }\n\n        this.skipUpsellProductEvent();\n        this.checkSkippedUpsellProductsFromStorage();\n        this.toggleCartUpsellWidgetVisibility();\n      }\n\n      this.newTotalItems =\n        cartItemsData && cartItemsData.querySelectorAll(selectors$A.item).length\n          ? cartItemsData.querySelectorAll(selectors$A.item).length\n          : 0;\n      this.subtotal =\n        cartTotal && cartTotal.hasAttribute(attributes$n.cartTotal)\n          ? parseInt(cartTotal.getAttribute(attributes$n.cartTotal))\n          : 0;\n      this.cartCount = this.getCartItemCount();\n\n      document.dispatchEvent(\n        new CustomEvent(\"theme:cart:change\", {\n          bubbles: true,\n          detail: {\n            cartCount: this.cartCount,\n          },\n        }),\n      );\n\n      // Update cart total price\n      this.cartTotal.innerHTML =\n        this.subtotal === 0\n          ? window.theme.strings.free\n          : formatMoney(this.subtotal, theme.moneyWithCurrencyFormat);\n\n      if (this.totalItems !== this.newTotalItems) {\n        this.totalItems = this.newTotalItems;\n\n        this.toggleClassesOnContainers();\n      }\n\n      // Add class \"is-updated\" line items holder to reduce cart items animation delay via CSS variables\n      if (this.cartDrawer?.classList.contains(classes$q.open)) {\n        this.cart.classList.add(classes$q.updated);\n      }\n\n      // Remove cart loading class\n      this.cart.classList.remove(classes$q.loading);\n\n      // Prepare empty cart buttons for animation\n      if (!this.hasItemsInCart()) {\n        this.cartEmpty\n          .querySelectorAll(selectors$A.animation)\n          .forEach((item) => {\n            item.classList.remove(classes$q.animated);\n          });\n      }\n\n      this.freeShippingMessageHandle(this.subtotal);\n      this.cartRemoveEvents();\n      this.cartUpdateEvents();\n      this.toggleErrorMessage();\n      this.enableCartButtons();\n      this.updateProgress();\n      this.animateItems();\n\n      document.dispatchEvent(\n        new CustomEvent(\"theme:product:added\", {\n          bubbles: true,\n        }),\n      );\n    }\n\n    /**\n     * Get cart item count\n     *\n     * @return  {Void}\n     */\n\n    getCartItemCount() {\n      return Array.from(\n        this.cart.querySelectorAll(selectors$A.qtyInput),\n      ).reduce(\n        (total, quantityInput) => total + parseInt(quantityInput.value),\n        0,\n      );\n    }\n\n    /**\n     * Check for items in the cart\n     *\n     * @return  {Void}\n     */\n\n    hasItemsInCart() {\n      return this.totalItems > 0;\n    }\n\n    /**\n     * Show/hide free shipping message\n     *\n     * @param   {Number}  total\n     *\n     * @return  {Void}\n     */\n\n    freeShippingMessageHandle(total) {\n      if (!this.freeShipping.length) return;\n\n      this.freeShipping.forEach((message) => {\n        const hasQualifiedShippingMessage =\n          message.hasAttribute(attributes$n.freeShipping) &&\n          message.getAttribute(attributes$n.freeShipping) === \"true\" &&\n          total >= 0;\n        message.classList.toggle(\n          classes$q.success,\n          hasQualifiedShippingMessage && total >= this.freeShippingLimit,\n        );\n      });\n    }\n\n    /**\n     * Update progress when update cart\n     *\n     * @return  {Void}\n     */\n\n    updateProgress() {\n      this.freeShipping = document.querySelectorAll(selectors$A.freeShipping);\n\n      if (!this.freeShipping.length) return;\n\n      const percentValue = isNaN(this.subtotal / this.freeShippingLimit)\n        ? 100\n        : this.subtotal / this.freeShippingLimit;\n      const percent = Math.min(percentValue * 100, 100);\n      const dashoffset =\n        this.circumference - ((percent / 100) * this.circumference) / 2;\n      const leftToSpend = formatMoney(\n        this.freeShippingLimit - this.subtotal,\n        theme.moneyFormat,\n      );\n\n      this.freeShipping.forEach((item) => {\n        const progressBar = item.querySelector(\n          selectors$A.freeShippingProgress,\n        );\n        const progressGraph = item.querySelector(selectors$A.freeShippingGraph);\n        const leftToSpendMessage = item.querySelector(selectors$A.leftToSpend);\n\n        if (leftToSpendMessage) {\n          leftToSpendMessage.innerHTML = leftToSpend.replace(\".00\", \"\");\n        }\n\n        // Set progress bar value\n        if (progressBar) {\n          progressBar.value = percent;\n        }\n\n        // Set circle progress\n        if (progressGraph) {\n          progressGraph.style.setProperty(\n            \"--stroke-dashoffset\",\n            `${dashoffset}`,\n          );\n        }\n      });\n    }\n\n    /**\n     * Skip upsell product\n     */\n    skipUpsellProductEvent() {\n      if (this.upsellProductsHolder === null) {\n        return;\n      }\n      const skipButtons = this.upsellProductsHolder.querySelectorAll(\n        selectors$A.buttonSkipUpsellProduct,\n      );\n\n      if (skipButtons.length) {\n        skipButtons.forEach((button) => {\n          button.addEventListener(\"click\", (event) => {\n            event.preventDefault();\n            const productID = button\n              .closest(selectors$A.quickAddHolder)\n              .getAttribute(attributes$n.quickAddHolder);\n\n            if (!this.skipUpsellProductsArray.includes(productID)) {\n              this.skipUpsellProductsArray.push(productID);\n            }\n\n            // Add skipped upsell product to session storage\n            window.sessionStorage.setItem(\n              \"skip_upsell_products\",\n              this.skipUpsellProductsArray,\n            );\n\n            // Remove upsell product from cart\n            this.removeUpsellProduct(productID);\n            this.toggleCartUpsellWidgetVisibility();\n          });\n        });\n      }\n    }\n\n    /**\n     * Check for skipped upsell product added to session storage\n     */\n    checkSkippedUpsellProductsFromStorage() {\n      const skippedUpsellItemsFromStorage = window.sessionStorage.getItem(\n        \"skip_upsell_products\",\n      );\n      if (!skippedUpsellItemsFromStorage) return;\n\n      const skippedUpsellItemsFromStorageArray =\n        skippedUpsellItemsFromStorage.split(\",\");\n\n      skippedUpsellItemsFromStorageArray.forEach((productID) => {\n        if (!this.skipUpsellProductsArray.includes(productID)) {\n          this.skipUpsellProductsArray.push(productID);\n        }\n\n        this.removeUpsellProduct(productID);\n      });\n    }\n\n    removeUpsellProduct(productID) {\n      if (!this.upsellProductsHolder) return;\n\n      // Remove skipped upsell product from Cart\n      const upsellProduct = this.upsellProductsHolder.querySelector(\n        `[${attributes$n.quickAddHolder}=\"${productID}\"]`,\n      );\n\n      if (upsellProduct) {\n        upsellProduct.parentNode.remove();\n      }\n    }\n\n    /**\n     * Show or hide cart upsell products widget visibility\n     */\n    toggleCartUpsellWidgetVisibility() {\n      if (!this.upsellProductsHolder) return;\n\n      // Hide upsell container if no items\n      const upsellItems = this.upsellProductsHolder.querySelectorAll(\n        selectors$A.quickAddHolder,\n      );\n      const upsellWidget = this.upsellProductsHolder.closest(\n        selectors$A.upsellWidget,\n      );\n\n      if (!upsellWidget) return;\n\n      upsellWidget.classList.toggle(classes$q.hidden, !upsellItems.length);\n\n      if (\n        upsellItems.length &&\n        !upsellWidget.hasAttribute(attributes$n.open) &&\n        upsellWidget.hasAttribute(attributes$n.upsellAutoOpen)\n      ) {\n        upsellWidget.setAttribute(attributes$n.open, true);\n        const upsellWidgetBody = upsellWidget.querySelector(\n          selectors$A.collapsibleBody,\n        );\n\n        if (upsellWidgetBody) {\n          upsellWidgetBody.style.height = \"auto\";\n        }\n      }\n    }\n\n    /**\n     * Remove initially added AOS classes to allow animation on cart drawer open\n     *\n     * @return  {Void}\n     */\n    resetAnimatedItems() {\n      this.cart.querySelectorAll(selectors$A.animation).forEach((item) => {\n        item.classList.remove(classes$q.animated);\n        item.classList.remove(classes$q.hiding);\n      });\n    }\n\n    /**\n     * Cart elements opening animation\n     *\n     * @return  {Void}\n     */\n    animateItems(e) {\n      requestAnimationFrame(() => {\n        let cart = this.cart;\n\n        if (e && e.detail && e.detail.target) {\n          cart = e.detail.target;\n        }\n\n        cart?.querySelectorAll(selectors$A.animation).forEach((item) => {\n          item.classList.add(classes$q.animated);\n        });\n      });\n    }\n\n    recentlyViewedProducts() {\n      const recentlyViewedHolder = this.cart.querySelector(\n        `#${selectors$A.recentlyViewedHolderId}`,\n      );\n      if (recentlyViewedHolder) {\n        Shopify.Products.showRecentlyViewed({\n          howManyToShow: 3,\n          wrapperId: selectors$A.recentlyViewedHolderId,\n          section: this,\n          target: \"api-upsell-product\",\n        });\n      }\n    }\n  }\n\n  if (!customElements.get(\"cart-items\")) {\n    customElements.define(\"cart-items\", CartItems);\n  }\n\n  const attributes$m = {\n    count: \"data-cart-count\",\n    limit: \"data-limit\",\n  };\n\n  class CartCount extends HTMLElement {\n    constructor() {\n      super();\n\n      this.cartCount = null;\n      this.limit = this.getAttribute(attributes$m.limit);\n      this.onCartChangeCallback = this.onCartChange.bind(this);\n    }\n\n    connectedCallback() {\n      document.addEventListener(\"theme:cart:change\", this.onCartChangeCallback);\n    }\n\n    disconnectedCallback() {\n      document.addEventListener(\"theme:cart:change\", this.onCartChangeCallback);\n    }\n\n    onCartChange(event) {\n      this.cartCount = event.detail.cartCount;\n      this.update();\n    }\n\n    update() {\n      if (this.cartCount !== null) {\n        this.setAttribute(attributes$m.count, this.cartCount);\n        let countValue = this.cartCount;\n\n        if (this.limit && this.cartCount >= this.limit) {\n          countValue = \"9+\";\n        }\n\n        this.innerText = countValue;\n      }\n    }\n  }\n\n  if (!customElements.get(\"cart-count\")) {\n    customElements.define(\"cart-count\", CartCount);\n  }\n\n  const classes$p = {\n    open: \"is-open\",\n    closing: \"is-closing\",\n    duplicate: \"drawer--duplicate\",\n    drawerEditorError: \"drawer-editor-error\",\n  };\n\n  const selectors$z = {\n    cartDrawer: \"cart-drawer\",\n    cartDrawerClose: \"[data-cart-drawer-close]\",\n    cartDrawerSection: '[data-section-type=\"cart-drawer\"]',\n    cartDrawerInner: \"[data-cart-drawer-inner]\",\n    shopifySection: \".shopify-section\",\n  };\n\n  const attributes$l = {\n    drawerUnderlay: \"data-drawer-underlay\",\n  };\n\n  class CartDrawer extends HTMLElement {\n    constructor() {\n      super();\n\n      this.cartDrawerIsOpen = false;\n\n      this.cartDrawerClose = this.querySelector(selectors$z.cartDrawerClose);\n      this.cartDrawerInner = this.querySelector(selectors$z.cartDrawerInner);\n      this.openCartDrawer = this.openCartDrawer.bind(this);\n      this.closeCartDrawer = this.closeCartDrawer.bind(this);\n      this.toggleCartDrawer = this.toggleCartDrawer.bind(this);\n      this.openCartDrawerOnProductAdded =\n        this.openCartDrawerOnProductAdded.bind(this);\n      this.openCartDrawerOnSelect = this.openCartDrawerOnSelect.bind(this);\n      this.closeCartDrawerOnDeselect =\n        this.closeCartDrawerOnDeselect.bind(this);\n      this.cartDrawerSection = this.closest(selectors$z.shopifySection);\n\n      this.closeCartEvents();\n    }\n\n    connectedCallback() {\n      const drawerSection = this.closest(selectors$z.shopifySection);\n\n      /* Prevent duplicated cart drawers */\n      if (window.theme.hasCartDrawer) {\n        if (!window.Shopify.designMode) {\n          drawerSection.remove();\n          return;\n        } else {\n          const errorMessage = document.createElement(\"div\");\n          errorMessage.classList.add(classes$p.drawerEditorError);\n          errorMessage.innerText = \"Cart drawer section already exists.\";\n\n          if (!this.querySelector(`.${classes$p.drawerEditorError}`)) {\n            this.querySelector(selectors$z.cartDrawerInner).append(\n              errorMessage,\n            );\n          }\n\n          this.classList.add(classes$p.duplicate);\n        }\n      }\n\n      window.theme.hasCartDrawer = true;\n\n      this.addEventListener(\"theme:cart-drawer:show\", this.openCartDrawer);\n      document.addEventListener(\"theme:cart:toggle\", this.toggleCartDrawer);\n      document.addEventListener(\"theme:quick-add:open\", this.closeCartDrawer);\n      document.addEventListener(\n        \"theme:product:added\",\n        this.openCartDrawerOnProductAdded,\n      );\n      document.addEventListener(\n        \"shopify:block:select\",\n        this.openCartDrawerOnSelect,\n      );\n      document.addEventListener(\n        \"shopify:section:select\",\n        this.openCartDrawerOnSelect,\n      );\n      document.addEventListener(\n        \"shopify:section:deselect\",\n        this.closeCartDrawerOnDeselect,\n      );\n    }\n\n    disconnectedCallback() {\n      document.removeEventListener(\n        \"theme:product:added\",\n        this.openCartDrawerOnProductAdded,\n      );\n      document.removeEventListener(\"theme:cart:toggle\", this.toggleCartDrawer);\n      document.removeEventListener(\n        \"theme:quick-add:open\",\n        this.closeCartDrawer,\n      );\n      document.removeEventListener(\n        \"shopify:block:select\",\n        this.openCartDrawerOnSelect,\n      );\n      document.removeEventListener(\n        \"shopify:section:select\",\n        this.openCartDrawerOnSelect,\n      );\n      document.removeEventListener(\n        \"shopify:section:deselect\",\n        this.closeCartDrawerOnDeselect,\n      );\n\n      if (document.querySelectorAll(selectors$z.cartDrawer).length <= 1) {\n        window.theme.hasCartDrawer = false;\n      }\n\n      appendCartItems();\n    }\n\n    /**\n     * Open cart drawer when product is added to cart\n     *\n     * @return  {Void}\n     */\n    openCartDrawerOnProductAdded() {\n      if (!this.cartDrawerIsOpen) {\n        this.openCartDrawer();\n      }\n    }\n\n    /**\n     * Open cart drawer on block or section select\n     *\n     * @return  {Void}\n     */\n    openCartDrawerOnSelect(e) {\n      const cartDrawerSection =\n        e.target.querySelector(selectors$z.shopifySection) ||\n        e.target.closest(selectors$z.shopifySection) ||\n        e.target;\n\n      if (cartDrawerSection === this.cartDrawerSection) {\n        this.openCartDrawer(true);\n      }\n    }\n\n    /**\n     * Close cart drawer on section deselect\n     *\n     * @return  {Void}\n     */\n    closeCartDrawerOnDeselect() {\n      if (this.cartDrawerIsOpen) {\n        this.closeCartDrawer();\n      }\n    }\n\n    /**\n     * Open cart drawer and add class on body\n     *\n     * @return  {Void}\n     */\n\n    openCartDrawer(forceOpen = false) {\n      if (!forceOpen && this.classList.contains(classes$p.duplicate)) return;\n\n      this.cartDrawerIsOpen = true;\n      this.onBodyClickEvent =\n        this.onBodyClickEvent || this.onBodyClick.bind(this);\n      document.body.addEventListener(\"click\", this.onBodyClickEvent);\n\n      document.dispatchEvent(\n        new CustomEvent(\"theme:cart-drawer:open\", {\n          detail: {\n            target: this,\n          },\n          bubbles: true,\n        }),\n      );\n      document.dispatchEvent(\n        new CustomEvent(\"theme:scroll:lock\", { bubbles: true }),\n      );\n\n      this.classList.add(classes$p.open);\n\n      // Observe Additional Checkout Buttons\n      this.observeAdditionalCheckoutButtons();\n\n      waitForAnimationEnd(this.cartDrawerInner).then(() => {\n        trapFocus(this, {\n          elementToFocus: this.querySelector(selectors$z.cartDrawerClose),\n        });\n      });\n    }\n\n    /**\n     * Close cart drawer and remove class on body\n     *\n     * @return  {Void}\n     */\n\n    closeCartDrawer() {\n      if (!this.classList.contains(classes$p.open)) return;\n\n      this.classList.add(classes$p.closing);\n      this.classList.remove(classes$p.open);\n\n      this.cartDrawerIsOpen = false;\n\n      document.dispatchEvent(\n        new CustomEvent(\"theme:cart-drawer:close\", {\n          bubbles: true,\n        }),\n      );\n\n      removeTrapFocus();\n      autoFocusLastElement();\n\n      document.body.removeEventListener(\"click\", this.onBodyClickEvent);\n      document.dispatchEvent(\n        new CustomEvent(\"theme:scroll:unlock\", { bubbles: true }),\n      );\n\n      waitForAnimationEnd(this.cartDrawerInner).then(() => {\n        this.classList.remove(classes$p.closing);\n      });\n    }\n\n    /**\n     * Toggle cart drawer\n     *\n     * @return  {Void}\n     */\n\n    toggleCartDrawer() {\n      if (!this.cartDrawerIsOpen) {\n        this.openCartDrawer();\n      } else {\n        this.closeCartDrawer();\n      }\n    }\n\n    /**\n     * Event click to element to close cart drawer\n     *\n     * @return  {Void}\n     */\n\n    closeCartEvents() {\n      this.cartDrawerClose.addEventListener(\"click\", (e) => {\n        e.preventDefault();\n        this.closeCartDrawer();\n      });\n\n      this.addEventListener(\"keyup\", (e) => {\n        if (e.code === \"Escape\") {\n          this.closeCartDrawer();\n        }\n      });\n    }\n\n    onBodyClick(e) {\n      if (e.target.hasAttribute(attributes$l.drawerUnderlay))\n        this.closeCartDrawer();\n    }\n\n    observeAdditionalCheckoutButtons() {\n      // identify an element to observe\n      const additionalCheckoutButtons = this.querySelector(\n        selectors$z.additionalCheckoutButtons,\n      );\n      if (additionalCheckoutButtons) {\n        // create a new instance of `MutationObserver` named `observer`,\n        // passing it a callback function\n        const observer = new MutationObserver(() => {\n          trapFocus(this, {\n            elementToFocus: this.querySelector(selectors$z.cartDrawerClose),\n          });\n          observer.disconnect();\n        });\n\n        // call `observe()` on that MutationObserver instance,\n        // passing it the element to observe, and the options object\n        observer.observe(additionalCheckoutButtons, {\n          subtree: true,\n          childList: true,\n        });\n      }\n    }\n  }\n\n  if (!customElements.get(\"cart-drawer\")) {\n    customElements.define(\"cart-drawer\", CartDrawer);\n  }\n\n  const selectors$y = {\n    collapsible: \"[data-collapsible]\",\n    trigger: \"[data-collapsible-trigger]\",\n    body: \"[data-collapsible-body]\",\n    content: \"[data-collapsible-content]\",\n  };\n\n  const attributes$k = {\n    desktop: \"desktop\",\n    disabled: \"disabled\",\n    mobile: \"mobile\",\n    open: \"open\",\n    single: \"single\",\n  };\n\n  class CollapsibleElements extends HTMLElement {\n    constructor() {\n      super();\n\n      this.collapsibles = this.querySelectorAll(selectors$y.collapsible);\n      this.single = this.hasAttribute(attributes$k.single);\n      this.toggle = this.toggle.bind(this);\n    }\n\n    connectedCallback() {\n      this.toggle();\n      document.addEventListener(\"theme:resize:width\", this.toggle);\n\n      this.collapsibles.forEach((collapsible) => {\n        const trigger = collapsible.querySelector(selectors$y.trigger);\n        const body = collapsible.querySelector(selectors$y.body);\n\n        trigger?.addEventListener(\"click\", (event) =>\n          this.onCollapsibleClick(event),\n        );\n\n        body?.addEventListener(\"transitionend\", (event) => {\n          if (event.target !== body) return;\n\n          if (collapsible.getAttribute(attributes$k.open) == \"true\") {\n            this.setBodyHeight(body, \"auto\");\n          }\n\n          if (collapsible.getAttribute(attributes$k.open) == \"false\") {\n            collapsible.removeAttribute(attributes$k.open);\n            this.setBodyHeight(body, \"\");\n          }\n        });\n      });\n    }\n\n    disconnectedCallback() {\n      document.removeEventListener(\"theme:resize:width\", this.toggle);\n    }\n\n    toggle() {\n      const isDesktopView = isDesktop();\n\n      this.collapsibles.forEach((collapsible) => {\n        if (\n          !collapsible.hasAttribute(attributes$k.desktop) &&\n          !collapsible.hasAttribute(attributes$k.mobile)\n        )\n          return;\n\n        const enableDesktop = collapsible.hasAttribute(attributes$k.desktop)\n          ? collapsible.getAttribute(attributes$k.desktop)\n          : \"true\";\n        const enableMobile = collapsible.hasAttribute(attributes$k.mobile)\n          ? collapsible.getAttribute(attributes$k.mobile)\n          : \"true\";\n        const isEligible =\n          (isDesktopView && enableDesktop == \"true\") ||\n          (!isDesktopView && enableMobile == \"true\");\n        const body = collapsible.querySelector(selectors$y.body);\n\n        if (isEligible) {\n          collapsible.removeAttribute(attributes$k.disabled);\n          collapsible\n            .querySelector(selectors$y.trigger)\n            .removeAttribute(\"tabindex\");\n          collapsible.removeAttribute(attributes$k.open);\n\n          this.setBodyHeight(body, \"\");\n        } else {\n          collapsible.setAttribute(attributes$k.disabled, \"\");\n          collapsible.setAttribute(\"open\", true);\n          collapsible\n            .querySelector(selectors$y.trigger)\n            .setAttribute(\"tabindex\", -1);\n        }\n      });\n    }\n\n    open(collapsible) {\n      if (collapsible.getAttribute(\"open\") == \"true\") return;\n\n      const body = collapsible.querySelector(selectors$y.body);\n      const content = collapsible.querySelector(selectors$y.content);\n\n      collapsible.setAttribute(\"open\", true);\n\n      this.setBodyHeight(body, content.offsetHeight);\n    }\n\n    close(collapsible) {\n      if (!collapsible.hasAttribute(\"open\")) return;\n\n      const body = collapsible.querySelector(selectors$y.body);\n      const content = collapsible.querySelector(selectors$y.content);\n\n      this.setBodyHeight(body, content.offsetHeight);\n\n      collapsible.setAttribute(\"open\", false);\n\n      setTimeout(() => {\n        requestAnimationFrame(() => {\n          this.setBodyHeight(body, 0);\n        });\n      });\n    }\n\n    setBodyHeight(body, contentHeight) {\n      body.style.height =\n        contentHeight !== \"auto\" && contentHeight !== \"\"\n          ? `${contentHeight}px`\n          : contentHeight;\n    }\n\n    onCollapsibleClick(event) {\n      event.preventDefault();\n\n      const trigger = event.target;\n      const collapsible = trigger.closest(selectors$y.collapsible);\n\n      // When we want only one item expanded at the same time\n      if (this.single) {\n        this.collapsibles.forEach((otherCollapsible) => {\n          // if otherCollapsible has attribute open and it's not the one we clicked on, remove the open attribute\n          if (\n            otherCollapsible.hasAttribute(attributes$k.open) &&\n            otherCollapsible != collapsible\n          ) {\n            requestAnimationFrame(() => {\n              this.close(otherCollapsible);\n            });\n          }\n        });\n      }\n\n      if (collapsible.hasAttribute(attributes$k.open)) {\n        this.close(collapsible);\n      } else {\n        this.open(collapsible);\n      }\n\n      collapsible.dispatchEvent(\n        new CustomEvent(\"theme:form:sticky\", {\n          bubbles: true,\n          detail: {\n            element: \"accordion\",\n          },\n        }),\n      );\n      collapsible.dispatchEvent(\n        new CustomEvent(\"theme:collapsible:toggle\", {\n          bubbles: true,\n        }),\n      );\n    }\n  }\n\n  if (!customElements.get(\"collapsible-elements\")) {\n    customElements.define(\"collapsible-elements\", CollapsibleElements);\n  }\n\n  const selectors$x = {\n    details: \"details\",\n    popdown: \"[data-popdown]\",\n    popdownClose: \"[data-popdown-close]\",\n    input: 'input:not([type=\"hidden\"])',\n    mobileMenu: \"mobile-menu\",\n  };\n\n  const attributes$j = {\n    popdownUnderlay: \"data-popdown-underlay\",\n    scrollLocked: \"data-scroll-locked\",\n  };\n\n  const classes$o = {\n    open: \"is-open\",\n  };\n  class SearchPopdown extends HTMLElement {\n    constructor() {\n      super();\n      this.popdown = this.querySelector(selectors$x.popdown);\n      this.popdownContainer = this.querySelector(selectors$x.details);\n      this.popdownClose = this.querySelector(selectors$x.popdownClose);\n      this.popdownTransitionCallback =\n        this.popdownTransitionCallback.bind(this);\n      this.detailsToggleCallback = this.detailsToggleCallback.bind(this);\n      this.mobileMenu = this.closest(selectors$x.mobileMenu);\n      this.a11y = a11y;\n    }\n\n    connectedCallback() {\n      this.popdown.addEventListener(\n        \"transitionend\",\n        this.popdownTransitionCallback,\n      );\n      this.popdownContainer.addEventListener(\n        \"keyup\",\n        (event) => event.code.toUpperCase() === \"ESCAPE\" && this.close(),\n      );\n      this.popdownContainer.addEventListener(\n        \"toggle\",\n        this.detailsToggleCallback,\n      );\n      this.popdownClose.addEventListener(\"click\", this.close.bind(this));\n    }\n\n    detailsToggleCallback(event) {\n      if (event.target.hasAttribute(\"open\")) {\n        this.open();\n      }\n    }\n\n    popdownTransitionCallback(event) {\n      if (event.target !== this.popdown) return;\n\n      if (!this.classList.contains(classes$o.open)) {\n        this.popdownContainer.removeAttribute(\"open\");\n        this.a11y.removeTrapFocus();\n      } else if (\n        event.propertyName === \"transform\" ||\n        event.propertyName === \"opacity\"\n      ) {\n        // Wait for the 'transform' transition to complete in order to prevent jumping content issues because of the trapFocus\n        this.a11y.trapFocus(this.popdown, {\n          elementToFocus: this.popdown.querySelector(selectors$x.input),\n        });\n      }\n    }\n\n    onBodyClick(event) {\n      if (\n        !this.contains(event.target) ||\n        event.target.hasAttribute(attributes$j.popdownUnderlay)\n      )\n        this.close();\n    }\n\n    open() {\n      this.onBodyClickEvent =\n        this.onBodyClickEvent || this.onBodyClick.bind(this);\n\n      document.body.addEventListener(\"click\", this.onBodyClickEvent);\n      this.mobileMenu?.dispatchEvent(new CustomEvent(\"theme:search:open\"));\n\n      if (!document.documentElement.hasAttribute(attributes$j.scrollLocked)) {\n        document.dispatchEvent(\n          new CustomEvent(\"theme:scroll:lock\", { bubbles: true }),\n        );\n      }\n\n      requestAnimationFrame(() => {\n        this.classList.add(classes$o.open);\n      });\n    }\n\n    close() {\n      this.classList.remove(classes$o.open);\n      this.mobileMenu?.dispatchEvent(new CustomEvent(\"theme:search:close\"));\n\n      document.body.removeEventListener(\"click\", this.onBodyClickEvent);\n\n      if (!this.mobileMenu) {\n        document.dispatchEvent(\n          new CustomEvent(\"theme:scroll:unlock\", { bubbles: true }),\n        );\n      }\n    }\n  }\n\n  customElements.define(\"header-search-popdown\", SearchPopdown);\n\n  const selectors$w = {\n    inputSearch: 'input[type=\"search\"]',\n  };\n\n  class MainSearch extends HeaderSearchForm {\n    constructor() {\n      super();\n\n      this.allSearchInputs = document.querySelectorAll(selectors$w.inputSearch);\n      this.setupEventListeners();\n    }\n\n    setupEventListeners() {\n      let allSearchForms = [];\n      this.allSearchInputs.forEach((input) => allSearchForms.push(input.form));\n      this.input.addEventListener(\"focus\", this.onInputFocus.bind(this));\n      if (allSearchForms.length < 2) return;\n      allSearchForms.forEach((form) =>\n        form.addEventListener(\"reset\", this.onFormReset.bind(this)),\n      );\n      this.allSearchInputs.forEach((input) =>\n        input.addEventListener(\"input\", this.onInput.bind(this)),\n      );\n    }\n\n    onFormReset(event) {\n      super.onFormReset(event);\n      if (super.shouldResetForm()) {\n        this.keepInSync(\"\", this.input);\n      }\n    }\n\n    onInput(event) {\n      const target = event.target;\n      this.keepInSync(target.value, target);\n    }\n\n    onInputFocus() {\n      if (!isDesktop()) {\n        this.scrollIntoView({ behavior: \"smooth\" });\n      }\n    }\n\n    keepInSync(value, target) {\n      this.allSearchInputs.forEach((input) => {\n        if (input !== target) {\n          input.value = value;\n        }\n      });\n    }\n  }\n\n  customElements.define(\"main-search\", MainSearch);\n\n  const selectors$v = {\n    actions: \"[data-actions]\",\n    content: \"[data-content]\",\n    trigger: \"[data-button]\",\n  };\n\n  const attributes$i = {\n    height: \"data-height\",\n  };\n\n  const classes$n = {\n    open: \"is-open\",\n    enabled: \"is-enabled\",\n  };\n\n  class ToggleEllipsis extends HTMLElement {\n    constructor() {\n      super();\n\n      this.initialHeight = this.getAttribute(attributes$i.height);\n      this.content = this.querySelector(selectors$v.content);\n      this.trigger = this.querySelector(selectors$v.trigger);\n      this.actions = this.querySelector(selectors$v.actions);\n      this.toggleActions = this.toggleActions.bind(this);\n    }\n\n    connectedCallback() {\n      // Make sure the data attribute height value matches the CSS value\n      this.setHeight(this.initialHeight);\n\n      this.trigger.addEventListener(\"click\", () => {\n        this.setHeight(this.content.offsetHeight);\n        this.classList.add(classes$n.open);\n      });\n\n      this.setHeight(this.initialHeight);\n      this.toggleActions();\n\n      document.addEventListener(\"theme:resize\", this.toggleActions);\n      document.addEventListener(\"theme:collapsible:toggle\", this.toggleActions);\n    }\n\n    disconnectedCallback() {\n      document.removeEventListener(\"theme:resize\", this.toggleActions);\n      document.removeEventListener(\n        \"theme:collapsible:toggle\",\n        this.toggleActions,\n      );\n    }\n\n    setHeight(contentHeight) {\n      this.style.setProperty(\"--height\", `${contentHeight}px`);\n    }\n\n    toggleActions() {\n      this.classList.toggle(\n        classes$n.enabled,\n        this.content.offsetHeight + this.actions.offsetHeight >\n          this.initialHeight,\n      );\n    }\n  }\n\n  if (!customElements.get(\"toggle-ellipsis\")) {\n    customElements.define(\"toggle-ellipsis\", ToggleEllipsis);\n  }\n\n  window.Shopify = window.Shopify || {};\n  window.Shopify.theme = window.Shopify.theme || {};\n  window.Shopify.theme.sections = window.Shopify.theme.sections || {};\n\n  window.Shopify.theme.sections.registered =\n    window.Shopify.theme.sections.registered || {};\n  window.Shopify.theme.sections.instances =\n    window.Shopify.theme.sections.instances || [];\n  const registered = window.Shopify.theme.sections.registered;\n  const instances = window.Shopify.theme.sections.instances;\n\n  const selectors$u = {\n    id: \"data-section-id\",\n    type: \"data-section-type\",\n  };\n\n  class Registration {\n    constructor(type = null, components = []) {\n      this.type = type;\n      this.components = validateComponentsArray(components);\n      this.callStack = {\n        onLoad: [],\n        onUnload: [],\n        onSelect: [],\n        onDeselect: [],\n        onBlockSelect: [],\n        onBlockDeselect: [],\n        onReorder: [],\n      };\n      components.forEach((comp) => {\n        for (const [key, value] of Object.entries(comp)) {\n          const arr = this.callStack[key];\n          if (Array.isArray(arr) && typeof value === \"function\") {\n            arr.push(value);\n          } else {\n            console.warn(\n              `Unregisted function: '${key}' in component: '${this.type}'`,\n            );\n            console.warn(value);\n          }\n        }\n      });\n    }\n\n    getStack() {\n      return this.callStack;\n    }\n  }\n\n  class Section {\n    constructor(container, registration) {\n      this.container = validateContainerElement(container);\n      this.id = container.getAttribute(selectors$u.id);\n      this.type = registration.type;\n      this.callStack = registration.getStack();\n\n      try {\n        this.onLoad();\n      } catch (e) {\n        console.warn(`Error in section: ${this.id}`);\n        console.warn(this);\n        console.warn(e);\n      }\n    }\n\n    callFunctions(key, e = null) {\n      this.callStack[key].forEach((func) => {\n        const props = {\n          id: this.id,\n          type: this.type,\n          container: this.container,\n        };\n        if (e) {\n          func.call(props, e);\n        } else {\n          func.call(props);\n        }\n      });\n    }\n\n    onLoad() {\n      this.callFunctions(\"onLoad\");\n    }\n\n    onUnload() {\n      this.callFunctions(\"onUnload\");\n    }\n\n    onSelect(e) {\n      this.callFunctions(\"onSelect\", e);\n    }\n\n    onDeselect(e) {\n      this.callFunctions(\"onDeselect\", e);\n    }\n\n    onBlockSelect(e) {\n      this.callFunctions(\"onBlockSelect\", e);\n    }\n\n    onBlockDeselect(e) {\n      this.callFunctions(\"onBlockDeselect\", e);\n    }\n\n    onReorder(e) {\n      this.callFunctions(\"onReorder\", e);\n    }\n  }\n\n  function validateContainerElement(container) {\n    if (!(container instanceof Element)) {\n      throw new TypeError(\n        \"Theme Sections: Attempted to load section. The section container provided is not a DOM element.\",\n      );\n    }\n    if (container.getAttribute(selectors$u.id) === null) {\n      throw new Error(\n        \"Theme Sections: The section container provided does not have an id assigned to the \" +\n          selectors$u.id +\n          \" attribute.\",\n      );\n    }\n\n    return container;\n  }\n\n  function validateComponentsArray(value) {\n    if (\n      (typeof value !== \"undefined\" && typeof value !== \"object\") ||\n      value === null\n    ) {\n      throw new TypeError(\n        \"Theme Sections: The components object provided is not a valid\",\n      );\n    }\n\n    return value;\n  }\n\n  /*\n   * @shopify/theme-sections\n   * -----------------------------------------------------------------------------\n   *\n   * A framework to provide structure to your Shopify sections and a load and unload\n   * lifecycle. The lifecycle is automatically connected to theme editor events so\n   * that your sections load and unload as the editor changes the content and\n   * settings of your sections.\n   */\n\n  function register(type, components) {\n    if (typeof type !== \"string\") {\n      throw new TypeError(\n        \"Theme Sections: The first argument for .register must be a string that specifies the type of the section being registered\",\n      );\n    }\n\n    if (typeof registered[type] !== \"undefined\") {\n      throw new Error(\n        'Theme Sections: A section of type \"' +\n          type +\n          '\" has already been registered. You cannot register the same section type twice',\n      );\n    }\n\n    if (!Array.isArray(components)) {\n      components = [components];\n    }\n\n    const section = new Registration(type, components);\n    registered[type] = section;\n\n    return registered;\n  }\n\n  function load(types, containers) {\n    types = normalizeType(types);\n\n    if (typeof containers === \"undefined\") {\n      containers = document.querySelectorAll(\"[\" + selectors$u.type + \"]\");\n    }\n\n    containers = normalizeContainers(containers);\n\n    types.forEach(function (type) {\n      const registration = registered[type];\n\n      if (typeof registration === \"undefined\") {\n        return;\n      }\n\n      containers = containers.filter(function (container) {\n        // Filter from list of containers because container already has an instance loaded\n        if (isInstance(container)) {\n          return false;\n        }\n\n        // Filter from list of containers because container doesn't have data-section-type attribute\n        if (container.getAttribute(selectors$u.type) === null) {\n          return false;\n        }\n\n        // Keep in list of containers because current type doesn't match\n        if (container.getAttribute(selectors$u.type) !== type) {\n          return true;\n        }\n\n        instances.push(new Section(container, registration));\n\n        // Filter from list of containers because container now has an instance loaded\n        return false;\n      });\n    });\n  }\n\n  function reorder(selector) {\n    var instancesToReorder = getInstances(selector);\n\n    instancesToReorder.forEach(function (instance) {\n      instance.onReorder();\n    });\n  }\n\n  function unload(selector) {\n    var instancesToUnload = getInstances(selector);\n\n    instancesToUnload.forEach(function (instance) {\n      var index = instances\n        .map(function (e) {\n          return e.id;\n        })\n        .indexOf(instance.id);\n      instances.splice(index, 1);\n      instance.onUnload();\n    });\n  }\n\n  function getInstances(selector) {\n    var filteredInstances = [];\n\n    // Fetch first element if its an array\n    if (NodeList.prototype.isPrototypeOf(selector) || Array.isArray(selector)) {\n      var firstElement = selector[0];\n    }\n\n    // If selector element is DOM element\n    if (selector instanceof Element || firstElement instanceof Element) {\n      var containers = normalizeContainers(selector);\n\n      containers.forEach(function (container) {\n        filteredInstances = filteredInstances.concat(\n          instances.filter(function (instance) {\n            return instance.container === container;\n          }),\n        );\n      });\n\n      // If select is type string\n    } else if (\n      typeof selector === \"string\" ||\n      typeof firstElement === \"string\"\n    ) {\n      var types = normalizeType(selector);\n\n      types.forEach(function (type) {\n        filteredInstances = filteredInstances.concat(\n          instances.filter(function (instance) {\n            return instance.type === type;\n          }),\n        );\n      });\n    }\n\n    return filteredInstances;\n  }\n\n  function getInstanceById(id) {\n    var instance;\n\n    for (var i = 0; i < instances.length; i++) {\n      if (instances[i].id === id) {\n        instance = instances[i];\n        break;\n      }\n    }\n    return instance;\n  }\n\n  function isInstance(selector) {\n    return getInstances(selector).length > 0;\n  }\n\n  function normalizeType(types) {\n    // If '*' then fetch all registered section types\n    if (types === \"*\") {\n      types = Object.keys(registered);\n\n      // If a single section type string is passed, put it in an array\n    } else if (typeof types === \"string\") {\n      types = [types];\n\n      // If single section constructor is passed, transform to array with section\n      // type string\n    } else if (types.constructor === Section) {\n      types = [types.prototype.type];\n\n      // If array of typed section constructors is passed, transform the array to\n      // type strings\n    } else if (Array.isArray(types) && types[0].constructor === Section) {\n      types = types.map(function (Section) {\n        return Section.type;\n      });\n    }\n\n    types = types.map(function (type) {\n      return type.toLowerCase();\n    });\n\n    return types;\n  }\n\n  function normalizeContainers(containers) {\n    // Nodelist with entries\n    if (NodeList.prototype.isPrototypeOf(containers) && containers.length > 0) {\n      containers = Array.prototype.slice.call(containers);\n\n      // Empty Nodelist\n    } else if (\n      NodeList.prototype.isPrototypeOf(containers) &&\n      containers.length === 0\n    ) {\n      containers = [];\n\n      // Handle null (document.querySelector() returns null with no match)\n    } else if (containers === null) {\n      containers = [];\n\n      // Single DOM element\n    } else if (!Array.isArray(containers) && containers instanceof Element) {\n      containers = [containers];\n    }\n\n    return containers;\n  }\n\n  if (window.Shopify.designMode) {\n    document.addEventListener(\"shopify:section:load\", function (event) {\n      var id = event.detail.sectionId;\n      var container = event.target.querySelector(\n        \"[\" + selectors$u.id + '=\"' + id + '\"]',\n      );\n\n      if (container !== null) {\n        load(container.getAttribute(selectors$u.type), container);\n      }\n    });\n\n    document.addEventListener(\"shopify:section:reorder\", function (event) {\n      var id = event.detail.sectionId;\n      var container = event.target.querySelector(\n        \"[\" + selectors$u.id + '=\"' + id + '\"]',\n      );\n      var instance = getInstances(container)[0];\n\n      if (typeof instance === \"object\") {\n        reorder(container);\n      }\n    });\n\n    document.addEventListener(\"shopify:section:unload\", function (event) {\n      var id = event.detail.sectionId;\n      var container = event.target.querySelector(\n        \"[\" + selectors$u.id + '=\"' + id + '\"]',\n      );\n      var instance = getInstances(container)[0];\n\n      if (typeof instance === \"object\") {\n        unload(container);\n      }\n    });\n\n    document.addEventListener(\"shopify:section:select\", function (event) {\n      var instance = getInstanceById(event.detail.sectionId);\n\n      if (typeof instance === \"object\") {\n        instance.onSelect(event);\n      }\n    });\n\n    document.addEventListener(\"shopify:section:deselect\", function (event) {\n      var instance = getInstanceById(event.detail.sectionId);\n\n      if (typeof instance === \"object\") {\n        instance.onDeselect(event);\n      }\n    });\n\n    document.addEventListener(\"shopify:block:select\", function (event) {\n      var instance = getInstanceById(event.detail.sectionId);\n\n      if (typeof instance === \"object\") {\n        instance.onBlockSelect(event);\n      }\n    });\n\n    document.addEventListener(\"shopify:block:deselect\", function (event) {\n      var instance = getInstanceById(event.detail.sectionId);\n\n      if (typeof instance === \"object\") {\n        instance.onBlockDeselect(event);\n      }\n    });\n  }\n\n  const selectors$t = {\n    sectionId: \"[data-section-id]\",\n    tooltip: \"data-tooltip\",\n    tooltipStopMouseEnter: \"data-tooltip-stop-mouseenter\",\n  };\n\n  const classes$m = {\n    tooltipDefault: \"tooltip-default\",\n    visible: \"is-visible\",\n    hiding: \"is-hiding\",\n  };\n\n  let sections$h = {};\n\n  class Tooltip {\n    constructor(el, options = {}) {\n      this.tooltip = el;\n      if (!this.tooltip.hasAttribute(selectors$t.tooltip)) return;\n      this.label = this.tooltip.getAttribute(selectors$t.tooltip);\n      this.class = options.class || classes$m.tooltipDefault;\n\n      this.transitionSpeed = options.transitionSpeed || 200;\n      this.hideTransitionTimeout = 0;\n      this.addPinEvent = () => this.addPin();\n      this.addPinMouseEvent = () => this.addPin(true);\n      this.removePinEvent = (event) => throttle(this.removePin(event), 50);\n      this.removePinMouseEvent = (event) => this.removePin(event, true, true);\n      this.init();\n    }\n\n    init() {\n      if (!document.querySelector(`.${this.class}`)) {\n        const tooltipTemplate = `<div class=\"${this.class}__arrow\"></div><div class=\"${this.class}__inner\"><div class=\"${this.class}__text\"></div></div>`;\n        const tooltipElement = document.createElement(\"div\");\n        tooltipElement.className = this.class;\n        tooltipElement.innerHTML = tooltipTemplate;\n        document.body.appendChild(tooltipElement);\n      }\n\n      this.tooltip.addEventListener(\"mouseenter\", this.addPinMouseEvent);\n      this.tooltip.addEventListener(\"mouseleave\", this.removePinMouseEvent);\n      this.tooltip.addEventListener(\"theme:tooltip:init\", this.addPinEvent);\n      document.addEventListener(\"theme:tooltip:close\", this.removePinEvent);\n    }\n\n    addPin(stopMouseEnter = false) {\n      const tooltipTarget = document.querySelector(`.${this.class}`);\n\n      const section = this.tooltip.closest(selectors$t.sectionId);\n      const colorSchemeClass = Array.from(section.classList).find((cls) =>\n        cls.startsWith(\"color-scheme-\"),\n      );\n      tooltipTarget?.classList.add(colorSchemeClass); // add the section's color scheme class to the tooltip\n\n      if (\n        this.label &&\n        tooltipTarget &&\n        ((stopMouseEnter &&\n          !this.tooltip.hasAttribute(selectors$t.tooltipStopMouseEnter)) ||\n          !stopMouseEnter)\n      ) {\n        const tooltipTargetArrow = tooltipTarget.querySelector(\n          `.${this.class}__arrow`,\n        );\n        const tooltipTargetInner = tooltipTarget.querySelector(\n          `.${this.class}__inner`,\n        );\n        const tooltipTargetText = tooltipTarget.querySelector(\n          `.${this.class}__text`,\n        );\n        tooltipTargetText.innerHTML = this.label;\n\n        const tooltipTargetWidth = tooltipTargetInner.offsetWidth;\n        const tooltipRect = this.tooltip.getBoundingClientRect();\n        const tooltipTop = tooltipRect.top;\n        const tooltipWidth = tooltipRect.width;\n        const tooltipHeight = tooltipRect.height;\n        const tooltipTargetPositionTop =\n          tooltipTop + tooltipHeight + window.scrollY;\n        let tooltipTargetPositionLeft =\n          tooltipRect.left - tooltipTargetWidth / 2 + tooltipWidth / 2;\n        const tooltipLeftWithWidth =\n          tooltipTargetPositionLeft + tooltipTargetWidth;\n        const sideOffset = 24;\n        const tooltipTargetWindowDifference =\n          tooltipLeftWithWidth - getWindowWidth() + sideOffset;\n\n        if (tooltipTargetWindowDifference > 0) {\n          tooltipTargetPositionLeft -= tooltipTargetWindowDifference;\n        }\n\n        if (tooltipTargetPositionLeft < 0) {\n          tooltipTargetPositionLeft = 0;\n        }\n\n        tooltipTargetArrow.style.left = `${tooltipRect.left + tooltipWidth / 2}px`;\n        tooltipTarget.style.setProperty(\n          \"--tooltip-top\",\n          `${tooltipTargetPositionTop}px`,\n        );\n\n        tooltipTargetInner.style.transform = `translateX(${tooltipTargetPositionLeft}px)`;\n        tooltipTarget.classList.remove(classes$m.hiding);\n        tooltipTarget.classList.add(classes$m.visible);\n\n        document.addEventListener(\"theme:scroll\", this.removePinEvent);\n      }\n    }\n\n    removePin(event, stopMouseEnter = false, hideTransition = false) {\n      const tooltipTarget = document.querySelector(`.${this.class}`);\n      const tooltipVisible = tooltipTarget.classList.contains(\n        classes$m.visible,\n      );\n\n      if (\n        tooltipTarget &&\n        ((stopMouseEnter &&\n          !this.tooltip.hasAttribute(selectors$t.tooltipStopMouseEnter)) ||\n          !stopMouseEnter)\n      ) {\n        if (tooltipVisible && (hideTransition || event.detail.hideTransition)) {\n          tooltipTarget.classList.add(classes$m.hiding);\n\n          if (this.hideTransitionTimeout) {\n            clearTimeout(this.hideTransitionTimeout);\n          }\n\n          this.hideTransitionTimeout = setTimeout(() => {\n            tooltipTarget.classList.remove(classes$m.hiding);\n          }, this.transitionSpeed);\n        }\n\n        tooltipTarget.classList.remove(classes$m.visible);\n\n        document.removeEventListener(\"theme:scroll\", this.removePinEvent);\n      }\n    }\n\n    unload() {\n      this.tooltip.removeEventListener(\"mouseenter\", this.addPinMouseEvent);\n      this.tooltip.removeEventListener(\"mouseleave\", this.removePinMouseEvent);\n      this.tooltip.removeEventListener(\"theme:tooltip:init\", this.addPinEvent);\n      document.removeEventListener(\"theme:tooltip:close\", this.removePinEvent);\n      document.removeEventListener(\"theme:scroll\", this.removePinEvent);\n    }\n  }\n\n  const tooltipSection = {\n    onLoad() {\n      sections$h[this.id] = [];\n      const els = this.container.querySelectorAll(`[${selectors$t.tooltip}]`);\n      els.forEach((el) => {\n        sections$h[this.id].push(new Tooltip(el));\n      });\n    },\n    onUnload: function () {\n      sections$h[this.id].forEach((el) => {\n        if (typeof el.unload === \"function\") {\n          el.unload();\n        }\n      });\n    },\n  };\n\n  register(\"article\", [tooltipSection]);\n\n  const selectors$s = {\n    aos: \"[data-aos]\",\n    collectionImage: \".collection-item__image\",\n    columnImage: \"[data-column-image]\",\n    flickityNextArrow: \".flickity-button.next\",\n    flickityPrevArrow: \".flickity-button.previous\",\n    link: \"a:not(.btn)\",\n    productItemImage: \".product-item__image\",\n    slide: \"[data-slide]\",\n    slideValue: \"data-slide\",\n    slider: \"[data-slider]\",\n    sliderThumb: \"[data-slider-thumb]\",\n  };\n\n  const attributes$h = {\n    arrowPositionMiddle: \"data-arrow-position-middle\",\n    slideIndex: \"data-slide-index\",\n    sliderOptions: \"data-options\",\n    slideTextColor: \"data-slide-text-color\",\n  };\n\n  const classes$l = {\n    aosAnimate: \"aos-animate\",\n    desktop: \"desktop\",\n    focused: \"is-focused\",\n    flickityEnabled: \"flickity-enabled\",\n    heroContentTransparent: \"hero__content--transparent\",\n    initialized: \"is-initialized\",\n    isLoading: \"is-loading\",\n    isSelected: \"is-selected\",\n    mobile: \"mobile\",\n    singleSlide: \"single-slide\",\n    sliderInitialized: \"js-slider--initialized\",\n  };\n\n  const sections$g = {};\n\n  class Slider {\n    constructor(container, slideshow = null) {\n      this.container = container;\n      this.slideshow =\n        slideshow || this.container.querySelector(selectors$s.slider);\n\n      if (!this.slideshow) return;\n\n      this.slideshowSlides = this.slideshow.querySelectorAll(selectors$s.slide);\n\n      if (this.slideshowSlides.length <= 1) return;\n\n      this.sliderThumbs = this.container.querySelectorAll(\n        selectors$s.sliderThumb,\n      );\n\n      if (this.slideshow.hasAttribute(attributes$h.sliderOptions)) {\n        this.customOptions = JSON.parse(\n          decodeURIComponent(\n            this.slideshow.getAttribute(attributes$h.sliderOptions),\n          ),\n        );\n      }\n\n      this.flkty = null;\n\n      this.init();\n    }\n\n    init() {\n      this.slideshow.classList.add(classes$l.isLoading);\n\n      let slideSelector = selectors$s.slide;\n      const isDesktopView = isDesktop();\n      const slideMobile = `${selectors$s.slide}:not(.${classes$l.mobile})`;\n      const slideDesktop = `${selectors$s.slide}:not(.${classes$l.desktop})`;\n      const hasDeviceSpecificSelectors =\n        this.slideshow.querySelectorAll(slideDesktop).length ||\n        this.slideshow.querySelectorAll(slideMobile).length;\n\n      if (hasDeviceSpecificSelectors) {\n        if (isDesktopView) {\n          slideSelector = slideMobile;\n        } else {\n          slideSelector = slideDesktop;\n        }\n      }\n\n      if (this.slideshow.querySelectorAll(slideSelector).length <= 1) {\n        this.slideshow.classList.add(classes$l.singleSlide);\n        this.slideshow.classList.remove(classes$l.isLoading);\n      }\n\n      this.sliderOptions = {\n        cellSelector: slideSelector,\n        contain: true,\n        wrapAround: true,\n        adaptiveHeight: true,\n        ...this.customOptions,\n        on: {\n          ready: () => {\n            requestAnimationFrame(() => {\n              this.slideshow.classList.add(classes$l.initialized);\n              this.slideshow.classList.remove(classes$l.isLoading);\n              this.slideshow.parentNode.dispatchEvent(\n                new CustomEvent(\"theme:slider:loaded\", {\n                  bubbles: true,\n                  detail: {\n                    slider: this,\n                  },\n                }),\n              );\n            });\n\n            this.slideActions();\n\n            if (this.sliderOptions.prevNextButtons) {\n              this.positionArrows();\n            }\n          },\n          change: (index) => {\n            const slide = this.slideshowSlides[index];\n            if (!slide || this.sliderOptions.groupCells) return;\n\n            const elementsToAnimate = slide.querySelectorAll(selectors$s.aos);\n            if (elementsToAnimate.length) {\n              elementsToAnimate.forEach((el) => {\n                el.classList.remove(classes$l.aosAnimate);\n                requestAnimationFrame(() => {\n                  // setTimeout with `0` delay fixes functionality on Mobile and Firefox\n                  setTimeout(() => {\n                    el.classList.add(classes$l.aosAnimate);\n                  }, 0);\n                });\n              });\n            }\n          },\n          resize: () => {\n            if (this.sliderOptions.prevNextButtons) {\n              this.positionArrows();\n            }\n          },\n        },\n      };\n\n      if (this.sliderOptions.fade) {\n        this.flkty = new FlickityFade(this.slideshow, this.sliderOptions);\n      }\n\n      if (!this.sliderOptions.fade) {\n        this.flkty = new Flickity(this.slideshow, this.sliderOptions);\n      }\n\n      this.flkty.on(\"change\", () => this.slideActions(true));\n\n      if (this.sliderThumbs.length) {\n        this.sliderThumbs.forEach((element) => {\n          element.addEventListener(\"click\", (e) => {\n            e.preventDefault();\n            const slideIndex = [...element.parentElement.children].indexOf(\n              element,\n            );\n            this.flkty.select(slideIndex);\n          });\n        });\n      }\n\n      if (!this.flkty || !this.flkty.isActive) {\n        this.slideshow.classList.remove(classes$l.isLoading);\n      }\n    }\n\n    slideActions(changeEvent = false) {\n      const currentSlide = this.slideshow.querySelector(\n        `.${classes$l.isSelected}`,\n      );\n      if (!currentSlide) return;\n      const currentSlideTextColor = currentSlide.hasAttribute(\n        attributes$h.slideTextColor,\n      )\n        ? currentSlide.getAttribute(attributes$h.slideTextColor)\n        : \"\";\n      const currentSlideLink = currentSlide.querySelector(selectors$s.link);\n      const buttons = this.slideshow.querySelectorAll(\n        `${selectors$s.slide} a, ${selectors$s.slide} button`,\n      );\n\n      if (\n        document.body.classList.contains(classes$l.focused) &&\n        currentSlideLink &&\n        this.sliderOptions.groupCells &&\n        changeEvent\n      ) {\n        currentSlideLink.focus();\n      }\n\n      if (buttons.length) {\n        buttons.forEach((button) => {\n          const slide = button.closest(selectors$s.slide);\n          if (slide) {\n            const tabIndex = slide.classList.contains(classes$l.isSelected)\n              ? 0\n              : -1;\n            button.setAttribute(\"tabindex\", tabIndex);\n          }\n        });\n      }\n\n      this.slideshow.style.setProperty(\"--text\", currentSlideTextColor);\n\n      if (\n        this.sliderThumbs.length &&\n        this.sliderThumbs.length === this.slideshowSlides.length &&\n        currentSlide.hasAttribute(attributes$h.slideIndex)\n      ) {\n        const slideIndex = parseInt(\n          currentSlide.getAttribute(attributes$h.slideIndex),\n        );\n        const currentThumb = this.container.querySelector(\n          `${selectors$s.sliderThumb}.${classes$l.isSelected}`,\n        );\n        if (currentThumb) {\n          currentThumb.classList.remove(classes$l.isSelected);\n        }\n        this.sliderThumbs[slideIndex].classList.add(classes$l.isSelected);\n      }\n    }\n\n    positionArrows() {\n      if (\n        this.slideshow.hasAttribute(attributes$h.arrowPositionMiddle) &&\n        this.sliderOptions.prevNextButtons\n      ) {\n        const itemImage =\n          this.slideshow.querySelector(selectors$s.collectionImage) ||\n          this.slideshow.querySelector(selectors$s.productItemImage) ||\n          this.slideshow.querySelector(selectors$s.columnImage);\n\n        // Prevent 'clientHeight' of null error if no image\n        if (!itemImage) return;\n\n        this.slideshow.querySelector(selectors$s.flickityPrevArrow).style.top =\n          itemImage.clientHeight / 2 + \"px\";\n        this.slideshow.querySelector(selectors$s.flickityNextArrow).style.top =\n          itemImage.clientHeight / 2 + \"px\";\n      }\n    }\n\n    onUnload() {\n      if (this.slideshow && this.flkty) {\n        this.flkty.options.watchCSS = false;\n        this.flkty.destroy();\n      }\n    }\n\n    onBlockSelect(evt) {\n      if (!this.slideshow) return;\n      // Ignore the cloned version\n      const slide = this.slideshow.querySelector(\n        `[${selectors$s.slideValue}=\"${evt.detail.blockId}\"]`,\n      );\n\n      if (!slide) return;\n      let slideIndex = parseInt(slide.getAttribute(attributes$h.slideIndex));\n\n      this.slideshow.classList.add(classes$l.isSelected);\n\n      // Go to selected slide, pause autoplay\n      if (\n        this.flkty &&\n        this.slideshow.classList.contains(classes$l.flickityEnabled)\n      ) {\n        this.flkty.selectCell(slideIndex);\n        this.flkty.stopPlayer();\n      }\n    }\n\n    onBlockDeselect() {\n      if (!this.slideshow) return;\n      this.slideshow.classList.remove(classes$l.isSelected);\n\n      if (\n        this.flkty &&\n        this.sliderOptions.hasOwnProperty(\"autoPlay\") &&\n        this.sliderOptions.autoPlay\n      ) {\n        this.flkty.playPlayer();\n      }\n    }\n  }\n\n  const slider = {\n    onLoad() {\n      sections$g[this.id] = [];\n      const els = this.container.querySelectorAll(selectors$s.slider);\n      els.forEach((el) => {\n        sections$g[this.id].push(new Slider(this.container, el));\n      });\n    },\n    onUnload() {\n      sections$g[this.id].forEach((el) => {\n        if (typeof el.onUnload === \"function\") {\n          el.onUnload();\n        }\n      });\n    },\n    onBlockSelect(e) {\n      sections$g[this.id].forEach((el) => {\n        if (typeof el.onBlockSelect === \"function\") {\n          el.onBlockSelect(e);\n        }\n      });\n    },\n    onBlockDeselect(e) {\n      sections$g[this.id].forEach((el) => {\n        if (typeof el.onBlockDeselect === \"function\") {\n          el.onBlockDeselect(e);\n        }\n      });\n    },\n  };\n\n  register(\"blog-section\", [slider]);\n\n  register(\"double\", slider);\n\n  const scrollTo = (elementTop) => {\n    /* Sticky header check */\n    let { stickyHeaderHeight } = readHeights();\n\n    window.scrollTo({\n      top: elementTop + window.scrollY - stickyHeaderHeight,\n      left: 0,\n      behavior: \"smooth\",\n    });\n  };\n\n  class PopupCookie {\n    constructor(name, value, daysToExpire = 7) {\n      const today = new Date();\n      const expiresDate = new Date();\n      expiresDate.setTime(today.getTime() + 3600000 * 24 * daysToExpire);\n\n      this.configuration = {\n        expires: expiresDate.toGMTString(), // session cookie\n        path: \"/\",\n        domain: window.location.hostname,\n        sameSite: \"none\",\n        secure: true,\n      };\n      this.name = name;\n      this.value = value;\n    }\n\n    write() {\n      const hasCookie =\n        document.cookie.indexOf(\"; \") !== -1 &&\n        !document.cookie.split(\"; \").find((row) => row.startsWith(this.name));\n\n      if (hasCookie || document.cookie.indexOf(\"; \") === -1) {\n        document.cookie = `${this.name}=${this.value}; expires=${this.configuration.expires}; path=${this.configuration.path}; domain=${this.configuration.domain}; sameSite=${this.configuration.sameSite}; secure=${this.configuration.secure}`;\n      }\n    }\n\n    read() {\n      if (\n        document.cookie.indexOf(\"; \") !== -1 &&\n        document.cookie.split(\"; \").find((row) => row.startsWith(this.name))\n      ) {\n        const returnCookie = document.cookie\n          .split(\"; \")\n          .find((row) => row.startsWith(this.name))\n          .split(\"=\")[1];\n\n        return returnCookie;\n      } else {\n        return false;\n      }\n    }\n\n    destroy() {\n      if (\n        document.cookie.split(\"; \").find((row) => row.startsWith(this.name))\n      ) {\n        document.cookie = `${this.name}=null; expires=${this.configuration.expires}; path=${this.configuration.path}; domain=${this.configuration.domain}`;\n      }\n    }\n  }\n\n  const selectors$r = {\n    newsletterForm: \"[data-newsletter-form]\",\n    newsletterHeading: \"[data-newsletter-heading]\",\n    newsletterPopup: \"[data-newsletter]\",\n  };\n\n  const classes$k = {\n    success: \"has-success\",\n    error: \"has-error\",\n    hidden: \"hidden\",\n  };\n\n  const attributes$g = {\n    cookieNameAttribute: \"data-cookie-name\",\n  };\n\n  const sections$f = {};\n\n  class NewsletterCheckForResult {\n    constructor(newsletter) {\n      this.sessionStorage = window.sessionStorage;\n      this.newsletter = newsletter;\n      this.popup = this.newsletter.closest(selectors$r.newsletterPopup);\n      if (this.popup) {\n        this.cookie = new PopupCookie(\n          this.popup.getAttribute(attributes$g.cookieNameAttribute),\n          \"user_has_closed\",\n          null,\n        );\n      }\n\n      this.stopSubmit = true;\n      this.isChallengePage = false;\n      this.formID = null;\n\n      this.checkForChallengePage();\n\n      this.newsletterSubmit = (e) => this.newsletterSubmitEvent(e);\n\n      if (!this.isChallengePage) {\n        this.init();\n      }\n    }\n\n    init() {\n      this.newsletter.addEventListener(\"submit\", this.newsletterSubmit);\n\n      this.showMessage();\n    }\n\n    newsletterSubmitEvent(e) {\n      if (this.stopSubmit) {\n        e.preventDefault();\n        e.stopImmediatePropagation();\n\n        this.removeStorage();\n        this.writeStorage();\n        this.stopSubmit = false;\n        this.newsletter.submit();\n      }\n    }\n\n    checkForChallengePage() {\n      this.isChallengePage = window.location.pathname === \"/challenge\";\n    }\n\n    writeStorage() {\n      if (this.sessionStorage !== undefined) {\n        this.sessionStorage.setItem(\"newsletter_form_id\", this.newsletter.id);\n      }\n    }\n\n    readStorage() {\n      this.formID = this.sessionStorage.getItem(\"newsletter_form_id\");\n    }\n\n    removeStorage() {\n      this.sessionStorage.removeItem(\"newsletter_form_id\");\n    }\n\n    showMessage() {\n      this.readStorage();\n\n      if (this.newsletter.id === this.formID) {\n        const newsletter = document.getElementById(this.formID);\n        const newsletterHeading = newsletter.parentElement.querySelector(\n          selectors$r.newsletterHeading,\n        );\n        const submissionSuccess =\n          window.location.search.indexOf(\"?customer_posted=true\") !== -1;\n        const submissionFailure =\n          window.location.search.indexOf(\"accepts_marketing\") !== -1;\n\n        if (submissionSuccess) {\n          newsletter.classList.remove(classes$k.error);\n          newsletter.classList.add(classes$k.success);\n\n          if (newsletterHeading) {\n            newsletterHeading.classList.add(classes$k.hidden);\n            newsletter.classList.remove(classes$k.hidden);\n          }\n\n          if (this.popup) {\n            this.cookie.write();\n          }\n        } else if (submissionFailure) {\n          newsletter.classList.remove(classes$k.success);\n          newsletter.classList.add(classes$k.error);\n\n          if (newsletterHeading) {\n            newsletterHeading.classList.add(classes$k.hidden);\n            newsletter.classList.remove(classes$k.hidden);\n          }\n        }\n\n        if (submissionSuccess || submissionFailure) {\n          window.addEventListener(\"load\", () => {\n            this.scrollToForm(newsletter);\n          });\n        }\n      }\n    }\n\n    scrollToForm(newsletter) {\n      const rect = newsletter.getBoundingClientRect();\n      const isVisible =\n        rect.top >= 0 &&\n        rect.left >= 0 &&\n        rect.bottom <= getWindowHeight() &&\n        rect.right <= getWindowWidth();\n\n      if (!isVisible) {\n        setTimeout(() => {\n          scrollTo(newsletter.getBoundingClientRect().top);\n        }, 500);\n      }\n    }\n\n    unload() {\n      this.newsletter.removeEventListener(\"submit\", this.newsletterSubmit);\n    }\n  }\n\n  const newsletterCheckForResultSection = {\n    onLoad() {\n      sections$f[this.id] = [];\n      const newsletters = this.container.querySelectorAll(\n        selectors$r.newsletterForm,\n      );\n      newsletters.forEach((form) => {\n        sections$f[this.id].push(new NewsletterCheckForResult(form));\n      });\n    },\n    onUnload() {\n      sections$f[this.id].forEach((form) => {\n        if (typeof form.unload === \"function\") {\n          form.unload();\n        }\n      });\n    },\n  };\n\n  register(\"footer\", [newsletterCheckForResultSection]);\n\n  const selectors$q = {\n    collectionSidebar: \"[data-collection-sidebar]\",\n    collectionSidebarSlideOut: \"[data-collection-sidebar-slide-out]\",\n    collectionSidebarCloseButton: \"[data-collection-sidebar-close]\",\n    groupTagsButton: \"[data-aria-toggle]\",\n    animation: \"[data-animation]\",\n  };\n\n  const classes$j = {\n    animated: \"drawer--animated\",\n    hiding: \"is-hiding\",\n    expanded: \"expanded\",\n    noMobileAnimation: \"no-mobile-animation\",\n    focused: \"is-focused\",\n  };\n\n  let sections$e = {};\n  class Collection {\n    constructor(section) {\n      this.container = section.container;\n      this.collectionSidebar = this.container.querySelector(\n        selectors$q.collectionSidebar,\n      );\n      this.groupTagsButton = this.container.querySelector(\n        selectors$q.groupTagsButton,\n      );\n      this.a11y = a11y;\n\n      this.groupTagsButtonClickEvent = (evt) => this.groupTagsButtonClick(evt);\n      this.sidebarResizeEvent = () => this.toggleSidebarSlider();\n      this.collectionSidebarCloseEvent = (evt) =>\n        this.collectionSidebarClose(evt);\n\n      this.init();\n    }\n\n    init() {\n      if (this.groupTagsButton !== null) {\n        document.addEventListener(\n          \"theme:resize:width\",\n          this.sidebarResizeEvent,\n        );\n\n        this.groupTagsButton.addEventListener(\n          \"click\",\n          this.groupTagsButtonClickEvent,\n        );\n\n        // Prevent filters closing animation on page load\n        if (this.collectionSidebar) {\n          setTimeout(() => {\n            this.collectionSidebar.classList.remove(\n              classes$j.noMobileAnimation,\n            );\n          }, 1000);\n        }\n\n        const toggleFiltersObserver = new MutationObserver((mutationList) => {\n          for (const mutation of mutationList) {\n            if (mutation.type === \"attributes\") {\n              const expanded =\n                mutation.target.getAttribute(\"aria-expanded\") == \"true\";\n\n              if (expanded) {\n                this.showSidebarCallback();\n              }\n            }\n          }\n        });\n\n        toggleFiltersObserver.observe(this.groupTagsButton, {\n          attributes: true,\n          childList: false,\n          subtree: false,\n        });\n      }\n\n      // Hide filters sidebar on ESC keypress\n      this.container.addEventListener(\n        \"keyup\",\n        function (evt) {\n          if (evt.code !== \"Escape\") {\n            return;\n          }\n          this.hideSidebar();\n        }.bind(this),\n      );\n\n      if (this.collectionSidebar) {\n        this.collectionSidebar.addEventListener(\"transitionend\", () => {\n          if (!this.collectionSidebar.classList.contains(classes$j.expanded)) {\n            this.collectionSidebar.classList.remove(classes$j.animated);\n          }\n        });\n\n        this.toggleSidebarSlider();\n\n        this.container.addEventListener(\n          \"theme:filter:close\",\n          this.collectionSidebarCloseEvent,\n        );\n      }\n    }\n\n    showSidebarCallback() {\n      const collectionSidebarSlideOut = this.container.querySelector(\n        selectors$q.collectionSidebarSlideOut,\n      );\n      const isScrollLocked =\n        document.documentElement.hasAttribute(\"data-scroll-locked\");\n\n      const isMobileView = isMobile();\n      this.collectionSidebar.classList.add(classes$j.animated);\n\n      if (collectionSidebarSlideOut === null) {\n        if (!isMobileView && isScrollLocked) {\n          this.a11y.removeTrapFocus();\n          document.dispatchEvent(\n            new CustomEvent(\"theme:scroll:unlock\", { bubbles: true }),\n          );\n        }\n      }\n\n      if (isMobileView || collectionSidebarSlideOut !== null) {\n        if (collectionSidebarSlideOut) {\n          this.a11y.trapFocus(this.collectionSidebar, {\n            elementToFocus: this.collectionSidebar.querySelector(\n              selectors$q.collectionSidebarCloseButton,\n            ),\n          });\n        }\n        document.dispatchEvent(\n          new CustomEvent(\"theme:scroll:lock\", { bubbles: true }),\n        );\n      }\n    }\n\n    hideSidebar() {\n      const collectionSidebarSlideOut = this.container.querySelector(\n        selectors$q.collectionSidebarSlideOut,\n      );\n      const isScrollLocked =\n        document.documentElement.hasAttribute(\"data-scroll-locked\");\n\n      this.groupTagsButton.setAttribute(\"aria-expanded\", \"false\");\n      this.collectionSidebar.classList.remove(classes$j.expanded);\n\n      if (collectionSidebarSlideOut) {\n        this.a11y.removeTrapFocus();\n      }\n\n      if (isScrollLocked) {\n        document.dispatchEvent(\n          new CustomEvent(\"theme:scroll:unlock\", { bubbles: true }),\n        );\n      }\n    }\n\n    toggleSidebarSlider() {\n      if (isMobile()) {\n        this.hideSidebar();\n      } else if (\n        this.collectionSidebar.classList.contains(classes$j.expanded)\n      ) {\n        this.showSidebarCallback();\n      }\n    }\n\n    collectionSidebarClose(evt) {\n      evt.preventDefault();\n      this.hideSidebar();\n      if (\n        document.body.classList.contains(classes$j.focused) &&\n        this.groupTagsButton\n      ) {\n        this.groupTagsButton.focus();\n      }\n    }\n\n    groupTagsButtonClick() {\n      const isScrollLocked =\n        document.documentElement.hasAttribute(\"data-scroll-locked\");\n\n      if (isScrollLocked) {\n        document.dispatchEvent(\n          new CustomEvent(\"theme:scroll:unlock\", { bubbles: true }),\n        );\n      }\n    }\n\n    onUnload() {\n      if (this.groupTagsButton !== null) {\n        document.removeEventListener(\n          \"theme:resize:width\",\n          this.sidebarResizeEvent,\n        );\n        this.groupTagsButton.removeEventListener(\n          \"click\",\n          this.groupTagsButtonClickEvent,\n        );\n      }\n\n      if (this.collectionSidebar) {\n        this.container.removeEventListener(\n          \"theme:filter:close\",\n          this.collectionSidebarCloseEvent,\n        );\n      }\n    }\n  }\n\n  const collectionSection = {\n    onLoad() {\n      sections$e[this.id] = new Collection(this);\n    },\n    onUnload() {\n      sections$e[this.id].onUnload();\n    },\n  };\n\n  register(\"collection\", [slider, collectionSection, tooltipSection]);\n\n  const selectors$p = {\n    marquee: \".announcement__bar-holder--marquee\",\n    slide: \"[data-slide]\",\n    slider: \"[data-slider]\",\n    ticker: \"ticker-bar\",\n    tickerSlide: \".announcement__slide\",\n  };\n\n  const classes$i = {\n    hidden: \"hidden\",\n  };\n\n  class AnnouncementBar extends HTMLElement {\n    constructor() {\n      super();\n\n      this.slider = this.querySelector(selectors$p.slider);\n      this.enableSlider = isDesktop();\n      this.slidesCount = this.querySelectorAll(selectors$p.tickerSlide).length;\n      this.initSliderEvent = (event) => this.initSlider(event);\n    }\n\n    connectedCallback() {\n      if (this.slider) {\n        this.initSliders();\n      }\n\n      this.addEventListener(\"theme:block:select\", (e) => {\n        this.onBlockSelect(e);\n      });\n\n      this.addEventListener(\"theme:block:deselect\", (e) => {\n        this.onBlockDeselect(e);\n      });\n\n      this.addEventListener(\"theme:countdown:hide\", (e) => {\n        if (window.Shopify.designMode) return;\n\n        const isMarquee = e.target.closest(selectors$p.marquee);\n\n        if (this.slidesCount === 1) {\n          const tickerBar = this.querySelector(selectors$p.ticker);\n          tickerBar.style.display = \"none\";\n        }\n\n        if (isMarquee) {\n          const tickerText = e.target.closest(selectors$p.tickerSlide);\n          this.removeTickerText(tickerText);\n        } else {\n          const slide = e.target.closest(selectors$p.slide);\n          this.removeSlide(slide);\n        }\n      });\n\n      this.addEventListener(\"theme:countdown:expire\", () => {\n        this.querySelectorAll(selectors$p.ticker)?.forEach((ticker) => {\n          ticker.dispatchEvent(new CustomEvent(\"theme:ticker:refresh\"));\n        });\n      });\n\n      document.dispatchEvent(\n        new CustomEvent(\"theme:announcement:init\", { bubbles: true }),\n      );\n    }\n\n    /**\n     * Init slider\n     */\n    initSliders() {\n      this.initSlider();\n      document.addEventListener(\"theme:resize:width\", this.initSliderEvent);\n\n      this.addEventListener(\"theme:slider:loaded\", () => {\n        this.querySelectorAll(selectors$p.tickerBar)?.forEach((ticker) => {\n          ticker.dispatchEvent(new CustomEvent(\"theme:ticker:refresh\"));\n        });\n      });\n    }\n\n    initSlider() {\n      const isDesktopView = isDesktop();\n      const isMobileView = !isDesktopView;\n\n      if (\n        (isDesktopView && this.enableSlider) ||\n        (isMobileView && !this.enableSlider)\n      ) {\n        this.slider.flkty?.destroy();\n\n        if (isDesktopView && this.enableSlider) {\n          this.enableSlider = false;\n        } else if (isMobileView && !this.enableSlider) {\n          this.enableSlider = true;\n        }\n\n        this.slider = new Slider(this, this.querySelector(selectors$p.slider));\n        this.slider.flkty?.reposition();\n      }\n    }\n\n    removeSlide(slide) {\n      this.slider.flkty?.remove(slide);\n\n      if (this.slider.flkty?.cells.length === 0) {\n        this.section.classList.add(classes$i.hidden);\n      }\n    }\n\n    removeTickerText(tickerText) {\n      const ticker = tickerText.closest(selectors$p.ticker);\n      tickerText.remove();\n      ticker.dispatchEvent(new CustomEvent(\"theme:ticker:refresh\"));\n    }\n\n    onBlockSelect(e) {\n      if (this.slider) {\n        this.slider.onBlockSelect(e);\n      }\n    }\n\n    onBlockDeselect(e) {\n      if (this.slider) {\n        this.slider.onBlockDeselect(e);\n      }\n    }\n\n    disconnectedCallback() {\n      document.removeEventListener(\"theme:resize:width\", this.initSliderEvent);\n      document.removeEventListener(\n        \"theme:resize:width\",\n        this.tickerResizeEvent,\n      );\n\n      this.removeEventListener(\"theme:block:select\", (e) => {\n        this.onBlockSelect(e);\n      });\n\n      this.removeEventListener(\"theme:block:deselect\", (e) => {\n        this.onBlockDeselect(e);\n      });\n    }\n  }\n\n  if (!customElements.get(\"announcement-bar\")) {\n    customElements.define(\"announcement-bar\", AnnouncementBar);\n  }\n\n  const selectors$o = {\n    pageHeader: \".page-header\",\n  };\n\n  const classes$h = {\n    stuck: \"js__header__stuck\",\n    sticky: \"has-header-sticky\",\n    headerGroup: \"shopify-section-group-header-group\",\n  };\n\n  const attributes$f = {\n    stickyHeader: \"data-header-sticky\",\n    scrollLock: \"data-scroll-locked\",\n  };\n\n  let sections$d = {};\n\n  class Sticky {\n    constructor(el) {\n      this.wrapper = el;\n      this.sticks = this.wrapper.hasAttribute(attributes$f.stickyHeader);\n\n      document.body.classList.toggle(classes$h.sticky, this.sticks);\n\n      if (!this.sticks) return;\n\n      this.isStuck = false;\n      this.cls = this.wrapper.classList;\n      this.headerOffset = document.querySelector(\n        selectors$o.pageHeader,\n      )?.offsetTop;\n      this.updateHeaderOffset = this.updateHeaderOffset.bind(this);\n      this.scrollEvent = (e) => this.onScroll(e);\n\n      this.listen();\n      this.stickOnLoad();\n    }\n\n    listen() {\n      document.addEventListener(\"theme:scroll\", this.scrollEvent);\n      document.addEventListener(\n        \"shopify:section:load\",\n        this.updateHeaderOffset,\n      );\n      document.addEventListener(\n        \"shopify:section:unload\",\n        this.updateHeaderOffset,\n      );\n    }\n\n    onScroll(e) {\n      if (e.detail.down) {\n        if (!this.isStuck && e.detail.position > this.headerOffset) {\n          this.stickSimple();\n        }\n      } else if (e.detail.position <= this.headerOffset) {\n        this.unstickSimple();\n      }\n    }\n\n    updateHeaderOffset(event) {\n      if (!event.target.classList.contains(classes$h.headerGroup)) return;\n\n      // Update header offset after any \"Header group\" section has been changed\n      setTimeout(() => {\n        this.headerOffset = document.querySelector(\n          selectors$o.pageHeader,\n        )?.offsetTop;\n      });\n    }\n\n    stickOnLoad() {\n      if (window.scrollY > this.headerOffset) {\n        this.stickSimple();\n      }\n    }\n\n    stickSimple() {\n      this.cls.add(classes$h.stuck);\n      this.isStuck = true;\n    }\n\n    unstickSimple() {\n      if (!document.documentElement.hasAttribute(attributes$f.scrollLock)) {\n        // check for scroll lock\n        this.cls.remove(classes$h.stuck);\n        this.isStuck = false;\n      }\n    }\n\n    unload() {\n      document.removeEventListener(\"theme:scroll\", this.scrollEvent);\n      document.removeEventListener(\n        \"shopify:section:load\",\n        this.updateHeaderOffset,\n      );\n      document.removeEventListener(\n        \"shopify:section:unload\",\n        this.updateHeaderOffset,\n      );\n    }\n  }\n\n  const stickyHeader = {\n    onLoad() {\n      sections$d = new Sticky(this.container);\n    },\n    onUnload: function () {\n      if (typeof sections$d.unload === \"function\") {\n        sections$d.unload();\n      }\n    },\n  };\n\n  const selectors$n = {\n    disclosureToggle: \"data-hover-disclosure-toggle\",\n    disclosureWrappper: \"[data-hover-disclosure]\",\n    link: \"[data-top-link]\",\n    wrapper: \"[data-header-wrapper]\",\n    stagger: \"[data-stagger]\",\n    staggerPair: \"[data-stagger-first]\",\n    staggerAfter: \"[data-stagger-second]\",\n    focusable:\n      'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n  };\n\n  const classes$g = {\n    isVisible: \"is-visible\",\n    meganavVisible: \"meganav--visible\",\n    meganavIsTransitioning: \"meganav--is-transitioning\",\n  };\n\n  let sections$c = {};\n  let disclosures = {};\n  class HoverDisclosure {\n    constructor(el) {\n      this.disclosure = el;\n      this.wrapper = el.closest(selectors$n.wrapper);\n      this.key = this.disclosure.id;\n      this.trigger = document.querySelector(\n        `[${selectors$n.disclosureToggle}='${this.key}']`,\n      );\n      this.link = this.trigger.querySelector(selectors$n.link);\n      this.grandparent = this.trigger.classList.contains(\"grandparent\");\n      this.transitionTimeout = 0;\n\n      this.trigger.setAttribute(\"aria-haspopup\", true);\n      this.trigger.setAttribute(\"aria-expanded\", false);\n      this.trigger.setAttribute(\"aria-controls\", this.key);\n\n      this.connectHoverToggle();\n      this.handleTablets();\n      this.staggerChildAnimations();\n    }\n\n    onBlockSelect(evt) {\n      if (this.disclosure.contains(evt.target)) {\n        this.showDisclosure(evt);\n      }\n    }\n\n    onBlockDeselect(evt) {\n      if (this.disclosure.contains(evt.target)) {\n        this.hideDisclosure();\n      }\n    }\n\n    showDisclosure(e) {\n      if (e && e.type && e.type === \"mouseenter\") {\n        this.wrapper.classList.add(classes$g.meganavIsTransitioning);\n      }\n\n      if (this.grandparent) {\n        this.wrapper.classList.add(classes$g.meganavVisible);\n      } else {\n        this.wrapper.classList.remove(classes$g.meganavVisible);\n      }\n      this.trigger.setAttribute(\"aria-expanded\", true);\n      this.trigger.classList.add(classes$g.isVisible);\n      this.disclosure.classList.add(classes$g.isVisible);\n\n      if (this.transitionTimeout) {\n        clearTimeout(this.transitionTimeout);\n      }\n\n      this.transitionTimeout = setTimeout(() => {\n        this.wrapper.classList.remove(classes$g.meganavIsTransitioning);\n      }, 200);\n    }\n\n    hideDisclosure() {\n      this.disclosure.classList.remove(classes$g.isVisible);\n      this.trigger.classList.remove(classes$g.isVisible);\n      this.trigger.setAttribute(\"aria-expanded\", false);\n      this.wrapper.classList.remove(\n        classes$g.meganavVisible,\n        classes$g.meganavIsTransitioning,\n      );\n    }\n\n    staggerChildAnimations() {\n      const simple = this.disclosure.querySelectorAll(selectors$n.stagger);\n      let step = 50;\n      simple.forEach((el, index) => {\n        el.style.transitionDelay = `${index * step + 10}ms`;\n        step *= 0.95;\n      });\n\n      const pairs = this.disclosure.querySelectorAll(selectors$n.staggerPair);\n      pairs.forEach((child, i) => {\n        const d1 = i * 100;\n        child.style.transitionDelay = `${d1}ms`;\n        child.parentElement\n          .querySelectorAll(selectors$n.staggerAfter)\n          .forEach((grandchild, i2) => {\n            const di1 = i2 + 1;\n            const d2 = di1 * 20;\n            grandchild.style.transitionDelay = `${d1 + d2}ms`;\n          });\n      });\n    }\n\n    handleTablets() {\n      // first click opens the popup, second click opens the link\n      this.trigger.addEventListener(\n        \"touchstart\",\n        function (e) {\n          const isOpen = this.disclosure.classList.contains(\n            classes$g.isVisible,\n          );\n          if (!isOpen) {\n            e.preventDefault();\n            this.showDisclosure(e);\n          }\n        }.bind(this),\n        { passive: true },\n      );\n    }\n\n    connectHoverToggle() {\n      this.trigger.addEventListener(\"mouseenter\", (e) =>\n        this.showDisclosure(e),\n      );\n      this.link.addEventListener(\"focus\", (e) => this.showDisclosure(e));\n\n      this.trigger.addEventListener(\"mouseleave\", () => this.hideDisclosure());\n      this.trigger.addEventListener(\"focusout\", (e) => {\n        const inMenu = this.trigger.contains(e.relatedTarget);\n        if (!inMenu) {\n          this.hideDisclosure();\n        }\n      });\n      this.disclosure.addEventListener(\"keyup\", (evt) => {\n        if (evt.code !== \"Escape\") {\n          return;\n        }\n        this.hideDisclosure();\n      });\n    }\n  }\n\n  const hoverDisclosure = {\n    onLoad() {\n      sections$c[this.id] = [];\n      disclosures = this.container.querySelectorAll(\n        selectors$n.disclosureWrappper,\n      );\n      disclosures.forEach((el) => {\n        sections$c[this.id].push(new HoverDisclosure(el));\n      });\n    },\n    onBlockSelect(evt) {\n      sections$c[this.id].forEach((el) => {\n        if (typeof el.onBlockSelect === \"function\") {\n          el.onBlockSelect(evt);\n        }\n      });\n    },\n    onBlockDeselect(evt) {\n      sections$c[this.id].forEach((el) => {\n        if (typeof el.onBlockDeselect === \"function\") {\n          el.onBlockDeselect(evt);\n        }\n      });\n    },\n  };\n\n  const selectors$m = {\n    wrapper: \"[data-header-wrapper]\",\n    style: \"data-header-style\",\n    widthContentWrapper: \"[data-takes-space-wrapper]\",\n    widthContent: \"[data-child-takes-space]\",\n    desktop: \"[data-header-desktop]\",\n    deadLink: '.navlink[href=\"#\"]',\n    cartDrawer: \"cart-drawer\",\n    cartToggleButton: \"[data-cart-toggle]\",\n    firstSectionOverlayHeader:\n      \".main-content > .shopify-section.section-overlay-header:first-of-type\",\n    preventTransparent: \"[data-prevent-transparent-header]\",\n  };\n\n  const classes$f = {\n    clone: \"js__header__clone\",\n    firstSectionOverlayHeader: \"has-first-section-overlay-header\",\n    showMobileClass: \"js__show__mobile\",\n    transparent: \"has-header-transparent\",\n  };\n\n  const attributes$e = {\n    drawer: \"data-drawer\",\n    drawerToggle: \"data-drawer-toggle\",\n    transparent: \"data-header-transparent\",\n  };\n\n  let sections$b = {};\n\n  class Header {\n    constructor(el) {\n      this.wrapper = el;\n      this.style = this.wrapper.dataset.style;\n      this.desktop = this.wrapper.querySelector(selectors$m.desktop);\n      this.deadLinks = document.querySelectorAll(selectors$m.deadLink);\n      this.resizeObserver = null;\n      this.checkWidth = this.checkWidth.bind(this);\n\n      this.killDeadLinks();\n      if (this.style !== \"drawer\" && this.desktop) {\n        this.minWidth = this.getMinWidth();\n        this.listenWidth();\n      }\n\n      this.drawerToggleEvent();\n      this.cartToggleEvent();\n\n      // Fallback for CSS :has() selectors\n      let enableTransparentHeader = false;\n      const firstSectionOverlayHeader = document.querySelector(\n        selectors$m.firstSectionOverlayHeader,\n      );\n      if (\n        firstSectionOverlayHeader &&\n        !firstSectionOverlayHeader.querySelector(selectors$m.preventTransparent)\n      ) {\n        enableTransparentHeader = true;\n      }\n\n      document.body.classList.toggle(\n        classes$f.transparent,\n        this.wrapper.hasAttribute(attributes$e.transparent),\n      );\n      document.body.classList.toggle(\n        classes$f.firstSectionOverlayHeader,\n        enableTransparentHeader,\n      );\n    }\n\n    initTicker(stopClone = false) {\n      this.tickerFrames.forEach((frame) => {\n        new Ticker(frame, stopClone);\n      });\n\n      this.tickerResizeEvent = (event) => this.onTickerResize(event);\n\n      document.addEventListener(\"theme:resize:width\", this.tickerResizeEvent);\n    }\n\n    listenWidth() {\n      if (\"ResizeObserver\" in window) {\n        this.resizeObserver = new ResizeObserver(this.checkWidth);\n        this.resizeObserver.observe(this.wrapper);\n      } else {\n        document.addEventListener(\"theme:resize\", this.checkWidth);\n      }\n    }\n\n    drawerToggleEvent() {\n      this.wrapper\n        .querySelectorAll(`[${attributes$e.drawerToggle}]`)\n        ?.forEach((button) => {\n          button.addEventListener(\"click\", () => {\n            let drawer;\n            const key = button.hasAttribute(attributes$e.drawerToggle)\n              ? button.getAttribute(attributes$e.drawerToggle)\n              : \"\";\n            const desktopDrawer = document.querySelector(\n              `[${attributes$e.drawer}=\"${key}\"]`,\n            );\n            const mobileDrawer = document.querySelector(\n              `mobile-menu > [${attributes$e.drawer}]`,\n            );\n            const isDesktopView = isDesktop();\n\n            if (isDesktopView) {\n              drawer = desktopDrawer;\n            } else {\n              drawer =\n                theme.settings.mobileMenuType === \"new\"\n                  ? mobileDrawer || desktopDrawer\n                  : desktopDrawer;\n            }\n\n            drawer.dispatchEvent(\n              new CustomEvent(\"theme:drawer:toggle\", {\n                bubbles: false,\n                detail: {\n                  button: button,\n                },\n              }),\n            );\n          });\n        });\n    }\n\n    killDeadLinks() {\n      this.deadLinks.forEach((el) => {\n        el.onclick = (e) => {\n          e.preventDefault();\n        };\n      });\n    }\n\n    checkWidth() {\n      if (document.body.clientWidth < this.minWidth) {\n        this.wrapper.classList.add(classes$f.showMobileClass);\n\n        // Update --header-height CSS variable when switching to a mobile nav\n        const { headerHeight } = readHeights();\n        document.documentElement.style.setProperty(\n          \"--header-height\",\n          `${headerHeight}px`,\n        );\n      } else {\n        this.wrapper.classList.remove(classes$f.showMobileClass);\n      }\n    }\n\n    getMinWidth() {\n      const comparitor = this.wrapper.cloneNode(true);\n      comparitor.classList.add(classes$f.clone);\n      document.body.appendChild(comparitor);\n      const widthWrappers = comparitor.querySelectorAll(\n        selectors$m.widthContentWrapper,\n      );\n      let minWidth = 0;\n      let spaced = 0;\n\n      widthWrappers.forEach((context) => {\n        const wideElements = context.querySelectorAll(selectors$m.widthContent);\n        let thisWidth = 0;\n        if (wideElements.length === 3) {\n          thisWidth = _sumSplitWidths(wideElements);\n        } else {\n          thisWidth = _sumWidths(wideElements);\n        }\n        if (thisWidth > minWidth) {\n          minWidth = thisWidth;\n          spaced = wideElements.length * 20;\n        }\n      });\n\n      document.body.removeChild(comparitor);\n      return minWidth + spaced;\n    }\n\n    cartToggleEvent() {\n      if (theme.settings.cartType !== \"drawer\") return;\n\n      this.wrapper\n        .querySelectorAll(selectors$m.cartToggleButton)\n        ?.forEach((button) => {\n          button.addEventListener(\"click\", (e) => {\n            const cartDrawer = document.querySelector(selectors$m.cartDrawer);\n\n            if (cartDrawer) {\n              e.preventDefault();\n              cartDrawer.dispatchEvent(\n                new CustomEvent(\"theme:cart-drawer:show\"),\n              );\n              window.a11y.lastElement = button;\n            }\n          });\n        });\n    }\n\n    toggleButtonClick(e) {\n      e.preventDefault();\n      document.dispatchEvent(\n        new CustomEvent(\"theme:cart:toggle\", { bubbles: true }),\n      );\n    }\n\n    unload() {\n      if (\"ResizeObserver\" in window) {\n        this.resizeObserver?.unobserve(this.wrapper);\n      } else {\n        document.removeEventListener(\"theme:resize\", this.checkWidth);\n      }\n    }\n  }\n\n  function _sumSplitWidths(nodes) {\n    let arr = [];\n    nodes.forEach((el) => {\n      if (el.firstElementChild) {\n        arr.push(el.firstElementChild.clientWidth);\n      }\n    });\n    if (arr[0] > arr[2]) {\n      arr[2] = arr[0];\n    } else {\n      arr[0] = arr[2];\n    }\n    const width = arr.reduce((a, b) => a + b);\n    return width;\n  }\n  function _sumWidths(nodes) {\n    let width = 0;\n    nodes.forEach((el) => {\n      width += el.clientWidth;\n    });\n    return width;\n  }\n\n  const header = {\n    onLoad() {\n      sections$b = new Header(this.container);\n    },\n    onUnload() {\n      if (typeof sections$b.unload === \"function\") {\n        sections$b.unload();\n      }\n    },\n  };\n\n  register(\"header\", [header, stickyHeader, hoverDisclosure]);\n\n  const selectors$l = {\n    slider: \"[data-slider-mobile]\",\n    slide: \"[data-slide]\",\n    thumb: \"[data-slider-thumb]\",\n    sliderContainer: \"[data-slider-container]\",\n    popupContainer: \"[data-popup-container]\",\n    popupClose: \"[data-popup-close]\",\n  };\n\n  const classes$e = {\n    isAnimating: \"is-animating\",\n    isSelected: \"is-selected\",\n    isOpen: \"is-open\",\n  };\n\n  const attributes$d = {\n    thumbValue: \"data-slider-thumb\",\n  };\n\n  const sections$a = {};\n\n  class Look {\n    constructor(section) {\n      this.container = section.container;\n      this.slider = this.container.querySelector(selectors$l.slider);\n      this.slides = this.container.querySelectorAll(selectors$l.slide);\n      this.thumbs = this.container.querySelectorAll(selectors$l.thumb);\n      this.popupContainer = this.container.querySelector(\n        selectors$l.popupContainer,\n      );\n      this.popupClose = this.container.querySelectorAll(selectors$l.popupClose);\n      this.popupCloseByEvent = this.popupCloseByEvent.bind(this);\n\n      this.init();\n    }\n\n    init() {\n      if (this.slider && this.slides.length && this.thumbs.length) {\n        this.popupContainer.addEventListener(\"transitionend\", (e) => {\n          if (e.target != this.popupContainer) return;\n\n          this.popupContainer.classList.remove(classes$e.isAnimating);\n          if (e.target.classList.contains(classes$e.isOpen)) {\n            this.popupOpenCallback();\n          } else {\n            this.popupCloseCallback();\n          }\n        });\n\n        this.popupContainer.addEventListener(\"transitionstart\", (e) => {\n          if (e.target != this.popupContainer) return;\n\n          this.popupContainer.classList.add(classes$e.isAnimating);\n        });\n\n        this.popupClose.forEach((button) => {\n          button.addEventListener(\"click\", () => {\n            this.popupContainer.classList.remove(classes$e.isOpen);\n            document.dispatchEvent(\n              new CustomEvent(\"theme:scroll:unlock\", { bubbles: true }),\n            );\n          });\n        });\n\n        this.thumbs.forEach((thumb, i) => {\n          thumb.addEventListener(\"click\", (e) => {\n            e.preventDefault();\n            const idx =\n              thumb.hasAttribute(attributes$d.thumbValue) &&\n              thumb.getAttribute(attributes$d.thumbValue) !== \"\"\n                ? parseInt(thumb.getAttribute(attributes$d.thumbValue))\n                : i;\n            const slide = this.slides[idx];\n            if (isMobile()) {\n              const parentPadding = parseInt(\n                window.getComputedStyle(this.slider).paddingLeft,\n              );\n              this.slider.scrollTo({\n                top: 0,\n                left: slide.offsetLeft - parentPadding,\n                behavior: \"auto\",\n              });\n              document.dispatchEvent(\n                new CustomEvent(\"theme:scroll:lock\", { bubbles: true }),\n              );\n              this.popupContainer.classList.add(\n                classes$e.isAnimating,\n                classes$e.isOpen,\n              );\n            } else {\n              let { stickyHeaderHeight } = readHeights();\n              const slideTop = slide.getBoundingClientRect().top;\n              const slideHeightHalf = slide.offsetHeight / 2;\n              const windowHeight = window.innerHeight;\n              const windowHeightHalf = windowHeight / 2;\n              const sliderContainer = this.container.querySelector(\n                selectors$l.sliderContainer,\n              );\n              let scrollTarget =\n                slideTop + slideHeightHalf - windowHeightHalf + window.scrollY;\n\n              if (sliderContainer) {\n                const sliderContainerTop =\n                  sliderContainer.getBoundingClientRect().top + window.scrollY;\n                const sliderContainerHeight = sliderContainer.offsetHeight;\n                const sliderContainerBottom =\n                  sliderContainerTop + sliderContainerHeight;\n\n                if (scrollTarget < sliderContainerTop) {\n                  scrollTarget = sliderContainerTop - stickyHeaderHeight;\n                } else if (\n                  scrollTarget + windowHeight >\n                  sliderContainerBottom\n                ) {\n                  scrollTarget = sliderContainerBottom - windowHeight;\n                }\n              }\n\n              window.scrollTo({\n                top: scrollTarget,\n                left: 0,\n                behavior: \"smooth\",\n              });\n            }\n          });\n        });\n      }\n    }\n\n    popupCloseByEvent() {\n      this.popupContainer.classList.remove(classes$e.isOpen);\n    }\n\n    popupOpenCallback() {\n      document.addEventListener(\n        \"theme:quick-add:open\",\n        this.popupCloseByEvent,\n        { once: true },\n      );\n      document.addEventListener(\"theme:product:added\", this.popupCloseByEvent, {\n        once: true,\n      });\n    }\n\n    popupCloseCallback() {\n      document.removeEventListener(\n        \"theme:quick-add:open\",\n        this.popupCloseByEvent,\n        { once: true },\n      );\n      document.removeEventListener(\n        \"theme:product:added\",\n        this.popupCloseByEvent,\n        { once: true },\n      );\n    }\n  }\n\n  const lookSection = {\n    onLoad() {\n      sections$a[this.id] = new Look(this);\n    },\n  };\n\n  register(\"look\", [lookSection]);\n\n  function Listeners() {\n    this.entries = [];\n  }\n\n  Listeners.prototype.add = function (element, event, fn) {\n    this.entries.push({ element: element, event: event, fn: fn });\n    element.addEventListener(event, fn);\n  };\n\n  Listeners.prototype.removeAll = function () {\n    this.entries = this.entries.filter(function (listener) {\n      listener.element.removeEventListener(listener.event, listener.fn);\n      return false;\n    });\n  };\n\n  /**\n   * Convert the Object (with 'name' and 'value' keys) into an Array of values, then find a match & return the variant (as an Object)\n   * @param {Object} product Product JSON object\n   * @param {Object} collection Object with 'name' and 'value' keys (e.g. [{ name: \"Size\", value: \"36\" }, { name: \"Color\", value: \"Black\" }])\n   * @returns {Object || null} The variant object once a match has been successful. Otherwise null will be returned\n   */\n  function getVariantFromSerializedArray(product, collection) {\n    _validateProductStructure(product);\n\n    // If value is an array of options\n    var optionArray = _createOptionArrayFromOptionCollection(\n      product,\n      collection,\n    );\n    return getVariantFromOptionArray(product, optionArray);\n  }\n\n  /**\n   * Find a match in the project JSON (using Array with option values) and return the variant (as an Object)\n   * @param {Object} product Product JSON object\n   * @param {Array} options List of submitted values (e.g. ['36', 'Black'])\n   * @returns {Object || null} The variant object once a match has been successful. Otherwise null will be returned\n   */\n  function getVariantFromOptionArray(product, options) {\n    _validateProductStructure(product);\n    _validateOptionsArray(options);\n\n    var result = product.variants.filter(function (variant) {\n      return options.every(function (option, index) {\n        return variant.options[index] === option;\n      });\n    });\n\n    return result[0] || null;\n  }\n\n  /**\n   * Creates an array of selected options from the object\n   * Loops through the project.options and check if the \"option name\" exist (product.options.name) and matches the target\n   * @param {Object} product Product JSON object\n   * @param {Array} collection Array of object (e.g. [{ name: \"Size\", value: \"36\" }, { name: \"Color\", value: \"Black\" }])\n   * @returns {Array} The result of the matched values. (e.g. ['36', 'Black'])\n   */\n  function _createOptionArrayFromOptionCollection(product, collection) {\n    _validateProductStructure(product);\n    _validateSerializedArray(collection);\n\n    var optionArray = [];\n\n    collection.forEach(function (option) {\n      for (var i = 0; i < product.options.length; i++) {\n        var name = product.options[i].name || product.options[i];\n        if (name.toLowerCase() === option.name.toLowerCase()) {\n          optionArray[i] = option.value;\n          break;\n        }\n      }\n    });\n\n    return optionArray;\n  }\n\n  /**\n   * Check if the product data is a valid JS object\n   * Error will be thrown if type is invalid\n   * @param {object} product Product JSON object\n   */\n  function _validateProductStructure(product) {\n    if (typeof product !== \"object\") {\n      throw new TypeError(product + \" is not an object.\");\n    }\n\n    if (Object.keys(product).length === 0 && product.constructor === Object) {\n      throw new Error(product + \" is empty.\");\n    }\n  }\n\n  /**\n   * Validate the structure of the array\n   * It must be formatted like jQuery's serializeArray()\n   * @param {Array} collection Array of object [{ name: \"Size\", value: \"36\" }, { name: \"Color\", value: \"Black\" }]\n   */\n  function _validateSerializedArray(collection) {\n    if (!Array.isArray(collection)) {\n      throw new TypeError(collection + \" is not an array.\");\n    }\n\n    if (collection.length === 0) {\n      throw new Error(collection + \" is empty.\");\n    }\n\n    if (collection[0].hasOwnProperty(\"name\")) {\n      if (typeof collection[0].name !== \"string\") {\n        throw new TypeError(\n          \"Invalid value type passed for name of option \" +\n            collection[0].name +\n            \". Value should be string.\",\n        );\n      }\n    } else {\n      throw new Error(collection[0] + \"does not contain name key.\");\n    }\n  }\n\n  /**\n   * Validate the structure of the array\n   * It must be formatted as list of values\n   * @param {Array} collection Array of object (e.g. ['36', 'Black'])\n   */\n  function _validateOptionsArray(options) {\n    if (Array.isArray(options) && typeof options[0] === \"object\") {\n      throw new Error(options + \"is not a valid array of options.\");\n    }\n  }\n\n  var selectors$k = {\n    idInput: '[name=\"id\"]',\n    planInput: '[name=\"selling_plan\"]',\n    optionInput: '[name^=\"options\"]',\n    quantityInput: '[name=\"quantity\"]',\n    propertyInput: '[name^=\"properties\"]',\n  };\n\n  // Public Methods\n  // -----------------------------------------------------------------------------\n\n  /**\n   * Returns a URL with a variant ID query parameter. Useful for updating window.history\n   * with a new URL based on the currently select product variant.\n   * @param {string} url - The URL you wish to append the variant ID to\n   * @param {number} id  - The variant ID you wish to append to the URL\n   * @returns {string} - The new url which includes the variant ID query parameter\n   */\n\n  function getUrlWithVariant(url, id) {\n    if (/variant=/.test(url)) {\n      return url.replace(/(variant=)[^&]+/, \"$1\" + id);\n    } else if (/\\?/.test(url)) {\n      return url.concat(\"&variant=\").concat(id);\n    }\n\n    return url.concat(\"?variant=\").concat(id);\n  }\n\n  /**\n   * Constructor class that creates a new instance of a product form controller.\n   *\n   * @param {Element} element - DOM element which is equal to the <form> node wrapping product form inputs\n   * @param {Object} product - A product object\n   * @param {Object} options - Optional options object\n   * @param {Function} options.onOptionChange - Callback for whenever an option input changes\n   * @param {Function} options.onPlanChange - Callback for changes to name=selling_plan\n   * @param {Function} options.onQuantityChange - Callback for whenever an quantity input changes\n   * @param {Function} options.onPropertyChange - Callback for whenever a property input changes\n   * @param {Function} options.onFormSubmit - Callback for whenever the product form is submitted\n   */\n  class ProductFormReader {\n    constructor(element, product, options) {\n      this.element = element;\n      this.product = this._validateProductObject(product);\n      this.variantElement = this.element.querySelector(selectors$k.idInput);\n\n      options = options || {};\n\n      this._listeners = new Listeners();\n      this._listeners.add(\n        this.element,\n        \"submit\",\n        this._onSubmit.bind(this, options),\n      );\n\n      this.optionInputs = this._initInputs(\n        selectors$k.optionInput,\n        options.onOptionChange,\n      );\n\n      this.planInputs = this._initInputs(\n        selectors$k.planInput,\n        options.onPlanChange,\n      );\n\n      this.quantityInputs = this._initInputs(\n        selectors$k.quantityInput,\n        options.onQuantityChange,\n      );\n\n      this.propertyInputs = this._initInputs(\n        selectors$k.propertyInput,\n        options.onPropertyChange,\n      );\n    }\n\n    /**\n     * Cleans up all event handlers that were assigned when the Product Form was constructed.\n     * Useful for use when a section needs to be reloaded in the theme editor.\n     */\n    destroy() {\n      this._listeners.removeAll();\n    }\n\n    /**\n     * Getter method which returns the array of currently selected option values\n     *\n     * @returns {Array} An array of option values\n     */\n    options() {\n      return this._serializeInputValues(this.optionInputs, function (item) {\n        var regex = /(?:^(options\\[))(.*?)(?:\\])/;\n        item.name = regex.exec(item.name)[2]; // Use just the value between 'options[' and ']'\n        return item;\n      });\n    }\n\n    /**\n     * Getter method which returns the currently selected variant, or `null` if variant\n     * doesn't exist.\n     *\n     * @returns {Object|null} Variant object\n     */\n    variant() {\n      const opts = this.options();\n      if (opts.length) {\n        return getVariantFromSerializedArray(this.product, opts);\n      } else {\n        return this.product.variants[0];\n      }\n    }\n\n    /**\n     * Getter method which returns the current selling plan, or `null` if plan\n     * doesn't exist.\n     *\n     * @returns {Object|null} Variant object\n     */\n    plan(variant) {\n      let plan = {\n        allocation: null,\n        group: null,\n        detail: null,\n      };\n      const sellingPlanChecked = this.element.querySelector(\n        `${selectors$k.planInput}:checked`,\n      );\n      if (!sellingPlanChecked) return null;\n      const sellingPlanCheckedValue = sellingPlanChecked.value;\n      const id =\n        sellingPlanCheckedValue && sellingPlanCheckedValue !== \"\"\n          ? sellingPlanCheckedValue\n          : null;\n\n      if (id && variant) {\n        plan.allocation = variant.selling_plan_allocations.find(\n          function (item) {\n            return item.selling_plan_id.toString() === id.toString();\n          },\n        );\n      }\n      if (plan.allocation) {\n        plan.group = this.product.selling_plan_groups.find(function (item) {\n          return (\n            item.id.toString() ===\n            plan.allocation.selling_plan_group_id.toString()\n          );\n        });\n      }\n      if (plan.group) {\n        plan.detail = plan.group.selling_plans.find(function (item) {\n          return item.id.toString() === id.toString();\n        });\n      }\n\n      if (plan && plan.allocation && plan.detail && plan.allocation) {\n        return plan;\n      } else return null;\n    }\n\n    /**\n     * Getter method which returns a collection of objects containing name and values\n     * of property inputs\n     *\n     * @returns {Array} Collection of objects with name and value keys\n     */\n    properties() {\n      return this._serializeInputValues(this.propertyInputs, function (item) {\n        var regex = /(?:^(properties\\[))(.*?)(?:\\])/;\n        item.name = regex.exec(item.name)[2]; // Use just the value between 'properties[' and ']'\n        return item;\n      });\n    }\n\n    /**\n     * Getter method which returns the current quantity or 1 if no quantity input is\n     * included in the form\n     *\n     * @returns {Array} Collection of objects with name and value keys\n     */\n    quantity() {\n      return this.quantityInputs[0]\n        ? Number.parseInt(this.quantityInputs[0].value, 10)\n        : 1;\n    }\n\n    getFormState() {\n      const variant = this.variant();\n      return {\n        options: this.options(),\n        variant: variant,\n        properties: this.properties(),\n        quantity: this.quantity(),\n        plan: this.plan(variant),\n      };\n    }\n\n    // Private Methods\n    // -----------------------------------------------------------------------------\n    _setIdInputValue(variant) {\n      if (variant && variant.id) {\n        this.variantElement.value = variant.id.toString();\n      } else {\n        this.variantElement.value = \"\";\n      }\n\n      this.variantElement.dispatchEvent(new Event(\"change\"));\n    }\n\n    _onSubmit(options, event) {\n      event.dataset = this.getFormState();\n      if (options.onFormSubmit) {\n        options.onFormSubmit(event);\n      }\n    }\n\n    _onOptionChange(event) {\n      this._setIdInputValue(event.dataset.variant);\n    }\n\n    _onFormEvent(cb) {\n      if (typeof cb === \"undefined\") {\n        return Function.prototype.bind();\n      }\n\n      return function (event) {\n        event.dataset = this.getFormState();\n        this._setIdInputValue(event.dataset.variant);\n        cb(event);\n      }.bind(this);\n    }\n\n    _initInputs(selector, cb) {\n      var elements = Array.prototype.slice.call(\n        this.element.querySelectorAll(selector),\n      );\n\n      return elements.map(\n        function (element) {\n          this._listeners.add(element, \"change\", this._onFormEvent(cb));\n          return element;\n        }.bind(this),\n      );\n    }\n\n    _serializeInputValues(inputs, transform) {\n      return inputs.reduce(function (options, input) {\n        if (\n          input.checked || // If input is a checked (means type radio or checkbox)\n          (input.type !== \"radio\" && input.type !== \"checkbox\") // Or if its any other type of input\n        ) {\n          options.push(transform({ name: input.name, value: input.value }));\n        }\n\n        return options;\n      }, []);\n    }\n\n    _validateProductObject(product) {\n      if (typeof product !== \"object\") {\n        throw new TypeError(product + \" is not an object.\");\n      }\n\n      if (typeof product.variants[0].options === \"undefined\") {\n        throw new TypeError(\n          \"Product object is invalid. Make sure you use the product object that is output from {{ product | json }} or from the http://[your-product-url].js route\",\n        );\n      }\n      return product;\n    }\n  }\n\n  function fetchProduct(handle) {\n    const requestRoute = `${window.theme.routes.root}products/${handle}.js`;\n\n    return window\n      .fetch(requestRoute)\n      .then((response) => {\n        return response.json();\n      })\n      .catch((e) => {\n        console.error(e);\n      });\n  }\n\n  const selectors$j = {\n    scrollbarAttribute: \"data-scrollbar\",\n    scrollbar: \"data-scrollbar-slider\",\n    scrollbarSlideFullWidth: \"data-scrollbar-slide-fullwidth\",\n    scrollbarArrowPrev: \"[data-scrollbar-arrow-prev]\",\n    scrollbarArrowNext: \"[data-scrollbar-arrow-next]\",\n  };\n  const classes$d = {\n    hidden: \"is-hidden\",\n  };\n\n  class NativeScrollbar {\n    constructor(scrollbar) {\n      this.scrollbar = scrollbar;\n\n      this.arrowNext = this.scrollbar.parentNode.querySelector(\n        selectors$j.scrollbarArrowNext,\n      );\n      this.arrowPrev = this.scrollbar.parentNode.querySelector(\n        selectors$j.scrollbarArrowPrev,\n      );\n\n      if (this.scrollbar.hasAttribute(selectors$j.scrollbarAttribute)) {\n        this.init();\n        this.listen();\n      }\n\n      if (this.scrollbar.hasAttribute(selectors$j.scrollbar)) {\n        this.scrollToVisibleElement();\n      }\n    }\n\n    init() {\n      if (this.arrowNext && this.arrowPrev) {\n        this.toggleNextArrow();\n\n        this.events();\n      }\n    }\n\n    listen() {\n      document.addEventListener(\"theme:modal:open\", () => {\n        this.toggleNextArrow();\n      });\n\n      document.addEventListener(\"theme:resize\", () => {\n        this.toggleNextArrow();\n      });\n    }\n\n    events() {\n      this.arrowNext.addEventListener(\"click\", (event) => {\n        event.preventDefault();\n\n        this.goToNext();\n      });\n\n      this.arrowPrev.addEventListener(\"click\", (event) => {\n        event.preventDefault();\n\n        this.goToPrev();\n      });\n\n      this.scrollbar.addEventListener(\"scroll\", () => {\n        this.togglePrevArrow();\n        this.toggleNextArrow();\n      });\n    }\n\n    goToNext() {\n      const moveWith = this.scrollbar.hasAttribute(\n        selectors$j.scrollbarSlideFullWidth,\n      )\n        ? this.scrollbar.getBoundingClientRect().width\n        : this.scrollbar.getBoundingClientRect().width / 2;\n      const position = moveWith + this.scrollbar.scrollLeft;\n\n      this.move(position);\n\n      this.arrowPrev.classList.remove(classes$d.hidden);\n\n      this.toggleNextArrow();\n    }\n\n    goToPrev() {\n      const moveWith = this.scrollbar.hasAttribute(\n        selectors$j.scrollbarSlideFullWidth,\n      )\n        ? this.scrollbar.getBoundingClientRect().width\n        : this.scrollbar.getBoundingClientRect().width / 2;\n      const position = this.scrollbar.scrollLeft - moveWith;\n\n      this.move(position);\n\n      this.arrowNext.classList.remove(classes$d.hidden);\n\n      this.togglePrevArrow();\n    }\n\n    toggleNextArrow() {\n      requestAnimationFrame(() => {\n        this.arrowNext?.classList.toggle(\n          classes$d.hidden,\n          Math.round(\n            this.scrollbar.scrollLeft +\n              this.scrollbar.getBoundingClientRect().width +\n              1,\n          ) >= this.scrollbar.scrollWidth,\n        );\n      });\n    }\n\n    togglePrevArrow() {\n      requestAnimationFrame(() => {\n        this.arrowPrev.classList.toggle(\n          classes$d.hidden,\n          this.scrollbar.scrollLeft <= 0,\n        );\n      });\n    }\n\n    scrollToVisibleElement() {\n      [].forEach.call(this.scrollbar.children, (element) => {\n        element.addEventListener(\"click\", (event) => {\n          event.preventDefault();\n\n          this.move(element.offsetLeft - element.clientWidth);\n        });\n      });\n    }\n\n    move(offsetLeft) {\n      this.scrollbar.scrollTo({\n        top: 0,\n        left: offsetLeft,\n        behavior: \"smooth\",\n      });\n    }\n  }\n\n  const selectors$i = {\n    gridSwatchForm: \"[data-grid-swatch-form]\",\n    input: \"[data-swatch-input]\",\n    productItem: \"[data-grid-item]\",\n    productInfo: \"[data-product-information]\",\n    sectionId: \"[data-section-id]\",\n    productImage: \"[data-product-image]\",\n    swatchButton: \"[data-swatch-button]\",\n    quantityInput: \"[name=quantity]\",\n    quantityPopup: \"[data-quantity-popout]\",\n    swatchLink: \"[data-swatch-link]\",\n    swatchText: \"[data-swatch-text]\",\n    template: \"[data-swatch-template]\",\n  };\n\n  const classes$c = {\n    visible: \"is-visible\",\n    hidden: \"hidden\",\n    stopEvents: \"no-events\",\n    swatch: \"swatch\",\n  };\n\n  const attributes$c = {\n    image: \"data-swatch-image\",\n    handle: \"data-swatch-handle\",\n    label: \"data-swatch-label\",\n    scrollbar: \"data-scrollbar\",\n    swatchCount: \"data-swatch-count\",\n    tooltip: \"data-tooltip\",\n    variant: \"data-swatch-variant\",\n    variantName: \"data-swatch-variant-name\",\n    variantTitle: \"data-variant-title\",\n    swatchValues: \"data-swatch-values\",\n  };\n\n  class RadioSwatch extends HTMLElement {\n    constructor() {\n      super();\n    }\n\n    connectedCallback() {\n      if (this.hasAttribute(attributes$c.tooltip)) {\n        new Tooltip(this);\n      }\n    }\n  }\n\n  class GridSwatch extends HTMLElement {\n    constructor() {\n      super();\n\n      this.productItemMouseLeaveEvent = () => this.hideVariantImages();\n      this.showVariantImageEvent = (swatchButton) =>\n        this.showVariantImage(swatchButton);\n    }\n\n    connectedCallback() {\n      this.handle = this.getAttribute(attributes$c.handle);\n      this.productItem = this.closest(selectors$i.productItem);\n      this.productInfo = this.closest(selectors$i.productInfo);\n      this.productImage = this.productItem.querySelector(\n        selectors$i.productImage,\n      );\n      this.template = document.querySelector(selectors$i.template).innerHTML;\n      this.swatchesJSON = this.getSwatchesJSON();\n      this.swatchesStyle = theme.settings.collectionSwatchStyle;\n\n      const label = this.getAttribute(attributes$c.label).trim().toLowerCase();\n\n      fetchProduct(this.handle).then((product) => {\n        this.product = product;\n        this.colorOption = product.options.find(function (element) {\n          return element.name.toLowerCase() === label || null;\n        });\n\n        if (this.colorOption) {\n          this.swatches = this.colorOption.values;\n          this.init();\n        }\n      });\n    }\n\n    init() {\n      this.innerHTML = \"\";\n      this.count = 0;\n      this.limitedCount = 0;\n\n      this.swatches.forEach((swatch) => {\n        let variant = null;\n        let variantAvailable = false;\n        let image = \"\";\n\n        let saleVariant = null;\n        for (const productVariant of this.product.variants) {\n          const optionWithSwatch = productVariant.options.includes(swatch);\n\n          if (!variant && optionWithSwatch) {\n            variant = productVariant;\n          }\n\n          if (\n            optionWithSwatch &&\n            !saleVariant &&\n            productVariant.compare_at_price > productVariant.price\n          ) {\n            saleVariant = productVariant;\n          }\n\n          // Use a variant with image if exists\n          if (optionWithSwatch && productVariant.featured_media) {\n            image = productVariant.featured_media.preview_image.src;\n            variant = productVariant;\n            break;\n          }\n        }\n\n        // Prefer landing the customer on the on-sale variant when one exists\n        // for this swatch, so the PDP shows the sale price and indicators immediately.\n        if (saleVariant) {\n          variant = saleVariant;\n          if (saleVariant.featured_media) {\n            image = saleVariant.featured_media.preview_image.src;\n          }\n        }\n\n        for (const productVariant of this.product.variants) {\n          const optionWithSwatch = productVariant.options.includes(swatch);\n\n          if (optionWithSwatch && productVariant.available) {\n            variantAvailable = true;\n            break;\n          }\n        }\n\n        if (variant) {\n          const swatchTemplate = document.createElement(\"div\");\n          swatchTemplate.innerHTML = this.template;\n          const swatchButton = swatchTemplate.querySelector(\n            selectors$i.swatchButton,\n          );\n          const swatchLink = swatchTemplate.querySelector(\n            selectors$i.swatchLink,\n          );\n          const swatchText = swatchTemplate.querySelector(\n            selectors$i.swatchText,\n          );\n          const swatchHandle = this.swatchesJSON[swatch];\n          const swatchStyle =\n            theme.settings.swatchesType == \"native\"\n              ? swatchHandle\n              : `var(--${swatchHandle})`;\n          const variantTitle = variant.title.replaceAll('\"', \"'\");\n\n          swatchButton.style = `--animation-delay: ${(100 * this.count) / 1250}s`;\n          swatchButton.classList.add(`${classes$c.swatch}-${swatchHandle}`);\n          swatchButton.dataset.tooltip = swatch;\n          swatchButton.dataset.swatchVariant = variant.id;\n          swatchButton.dataset.swatchVariantName = variantTitle;\n          swatchButton.dataset.swatchImage = image;\n          swatchButton.dataset.variant = variant.id;\n          swatchButton.style.setProperty(\"--swatch\", swatchStyle);\n          swatchLink.href = getUrlWithVariant(this.product.url, variant.id);\n          swatchLink.dataset.swatch = swatch;\n          swatchLink.disabled = !variantAvailable;\n          swatchText.innerText = swatch;\n\n          if (this.swatchesStyle != \"limited\") {\n            this.innerHTML += swatchTemplate.innerHTML;\n          } else if (this.count <= 4) {\n            this.innerHTML += swatchTemplate.innerHTML;\n            this.limitedCount++;\n          }\n          this.count++;\n        }\n      });\n\n      this.swatchCount = this.productInfo.querySelector(\n        `[${attributes$c.swatchCount}]`,\n      );\n      this.swatchElements = this.querySelectorAll(selectors$i.swatchLink);\n      this.swatchForm = this.productInfo.querySelector(\n        selectors$i.gridSwatchForm,\n      );\n      this.hideSwatchesTimer = 0;\n\n      if (this.swatchCount.hasAttribute(attributes$c.swatchCount)) {\n        if (\n          this.swatchesStyle == \"text\" ||\n          this.swatchesStyle == \"text-slider\"\n        ) {\n          this.swatchCount.innerText = `${this.count} ${this.count > 1 ? theme.strings.otherColor : theme.strings.oneColor}`;\n\n          if (this.swatchesStyle == \"text\") return;\n\n          this.swatchCount.addEventListener(\"mouseenter\", () => {\n            if (this.hideSwatchesTimer) clearTimeout(this.hideSwatchesTimer);\n\n            this.productInfo.classList.add(classes$c.stopEvents);\n            this.swatchForm.classList.add(classes$c.visible);\n          });\n\n          // Prevent color swatches blinking on mouse move\n          this.productInfo.addEventListener(\"mouseleave\", () => {\n            this.hideSwatchesTimer = setTimeout(() => {\n              this.productInfo.classList.remove(classes$c.stopEvents);\n              this.swatchForm.classList.remove(classes$c.visible);\n            }, 100);\n          });\n        }\n\n        if (this.swatchesStyle == \"slider\" || this.swatchesStyle == \"grid\") {\n          this.swatchForm.classList.add(classes$c.visible);\n        }\n\n        if (this.swatchesStyle == \"limited\") {\n          const swatchesLeft = this.count - this.limitedCount;\n\n          this.swatchForm.classList.add(classes$c.visible);\n\n          if (swatchesLeft > 0) {\n            this.innerHTML += `<div class=\"swatch-limited\">+${swatchesLeft}</div>`;\n          }\n        }\n      }\n\n      if (\n        this.swatchesStyle == \"text-slider\" ||\n        this.swatchesStyle == \"slider\"\n      ) {\n        if (this.hasAttribute(attributes$c.scrollbar)) {\n          new NativeScrollbar(this);\n        }\n      }\n\n      this.bindSwatchButtonEvents();\n    }\n\n    bindSwatchButtonEvents() {\n      this.querySelectorAll(selectors$i.swatchButton)?.forEach(\n        (swatchButton) => {\n          // Show variant image when hover on color swatch\n          swatchButton.addEventListener(\n            \"mouseenter\",\n            this.showVariantImageEvent,\n          );\n\n          // Init Tooltips\n          if (swatchButton.hasAttribute(attributes$c.tooltip)) {\n            new Tooltip(swatchButton);\n          }\n        },\n      );\n\n      this.productItem.addEventListener(\n        \"mouseleave\",\n        this.productItemMouseLeaveEvent,\n      );\n    }\n\n    showVariantImage(event) {\n      const swatchButton = event.target;\n      const variantName = swatchButton\n        .getAttribute(attributes$c.variantName)\n        ?.replaceAll('\"', \"'\");\n      const variantImages = this.productImage.querySelectorAll(\n        `[${attributes$c.variantTitle}]`,\n      );\n      const variantImageSelected = this.productImage.querySelector(\n        `[${attributes$c.variantTitle}=\"${variantName}\"]`,\n      );\n\n      // Hide all variant images\n      variantImages?.forEach((image) => {\n        image.classList.remove(classes$c.visible);\n      });\n\n      // Show selected variant image\n      variantImageSelected?.classList.add(classes$c.visible);\n    }\n\n    hideVariantImages() {\n      // Hide all variant images\n      this.productImage\n        .querySelectorAll(`[${attributes$c.variantTitle}].${classes$c.visible}`)\n        ?.forEach((image) => {\n          image.classList.remove(classes$c.visible);\n        });\n    }\n\n    getSwatchesJSON() {\n      if (!this.hasAttribute(attributes$c.swatchValues)) return {};\n\n      // Splitting the string by commas to get individual key-value pairs\n      const pairs = this.getAttribute(attributes$c.swatchValues).split(\",\");\n\n      // Creating an empty object to store the key-value pairs\n      const jsonObject = {};\n\n      // Iterating through the pairs and constructing the JSON object\n      pairs?.forEach((pair) => {\n        const [key, value] = pair.split(\":\");\n        jsonObject[key.trim()] = value.trim();\n      });\n\n      return jsonObject;\n    }\n  }\n\n  /**\n   * Adds a Shopify size attribute to a URL\n   *\n   * @param src\n   * @param size\n   * @returns {*}\n   */\n  function getSizedImageUrl(src, size) {\n    if (size === null) {\n      return src;\n    }\n\n    if (size === \"master\") {\n      return removeProtocol(src);\n    }\n\n    const match = src.match(\n      /\\.(jpg|jpeg|gif|png|bmp|bitmap|tiff|tif)(\\?v=\\d+)?$/i,\n    );\n\n    if (match) {\n      const prefix = src.split(match[0]);\n      const suffix = match[0];\n\n      return removeProtocol(`${prefix[0]}_${size}${suffix}`);\n    } else {\n      return null;\n    }\n  }\n\n  function removeProtocol(path) {\n    return path.replace(/http(s)?:/, \"\");\n  }\n\n  const selectors$h = {\n    productCutline: \"[data-product-cutline]\",\n    productLink: \"[data-product-link]\",\n    productGridItem: \"[data-grid-item]\",\n    productInfo: \"[data-product-information]\",\n    productImage: \"[data-product-image-default]\",\n    productImageSibling: \"[data-product-image-sibling]\",\n    productPrice: \"[data-product-price]\",\n    siblingsInnerHolder: \"[data-sibling-inner]\",\n    siblingCount: \"[data-sibling-count]\",\n    siblingFieldset: \"[data-sibling-fieldset]\",\n    siblingLink: \"[data-sibling-link]\",\n    tooltip: \"[data-tooltip]\",\n  };\n\n  const classes$b = {\n    visible: \"is-visible\",\n    fade: \"is-fade\",\n    stopEvents: \"no-events\",\n    active: \"is-active\",\n  };\n\n  const attributes$b = {\n    siblingAddedImage: \"data-sibling-added-image\",\n    siblingCutline: \"data-sibling-cutline\",\n    siblingImage: \"data-sibling-image\",\n    siblingLink: \"data-sibling-link\",\n    siblingPrice: \"data-sibling-price\",\n    siblingCompareAtPrice: \"data-sibling-compare-at-price\",\n    productLink: \"data-product-link\",\n  };\n\n  class SiblingSwatches {\n    constructor(swatches, product) {\n      this.swatches = swatches;\n      this.product = product;\n      this.productLinks = this.product.querySelectorAll(\n        selectors$h.productLink,\n      );\n      this.productCutline = this.product.querySelector(\n        selectors$h.productCutline,\n      );\n      this.productPrice = this.product.querySelector(selectors$h.productPrice);\n      this.productImage = this.product.querySelector(selectors$h.productImage);\n      this.productImageSibling = this.product.querySelector(\n        selectors$h.productImageSibling,\n      );\n\n      this.init();\n    }\n\n    init() {\n      this.cacheDefaultValues();\n\n      this.product.addEventListener(\"mouseleave\", () =>\n        this.resetProductValues(),\n      );\n      this.product.addEventListener(\"focusout\", () =>\n        this.resetProductValues(),\n      );\n\n      this.swatches.forEach((swatch) => {\n        swatch.addEventListener(\"mouseenter\", (event) =>\n          this.showSibling(event),\n        );\n        swatch.addEventListener(\"focusin\", (event) => this.showSibling(event));\n      });\n\n      if (this.productLinks.length) {\n        this.swatches.forEach((swatch) => {\n          swatch.addEventListener(\"click\", () => {\n            this.productLinks[0].click();\n          });\n\n          swatch.addEventListener(\"keyup\", (e) => {\n            if (e.code === \"Enter\") {\n              this.productLinks[0].click();\n            }\n          });\n        });\n      }\n    }\n\n    cacheDefaultValues() {\n      this.productLinkValue = this.productLinks[0].hasAttribute(\n        attributes$b.productLink,\n      )\n        ? this.productLinks[0].getAttribute(attributes$b.productLink)\n        : \"\";\n      this.productPriceValue = this.productPrice.innerHTML;\n\n      if (this.productCutline) {\n        this.productCutlineValue = this.productCutline.innerHTML;\n      }\n    }\n\n    resetProductValues() {\n      this.product.classList.remove(classes$b.active);\n\n      if (this.productLinkValue) {\n        this.productLinks.forEach((productLink) => {\n          productLink.href = this.productLinkValue;\n        });\n      }\n\n      if (this.productPrice) {\n        this.productPrice.innerHTML = this.productPriceValue;\n      }\n\n      if (this.productCutline && this.productCutline) {\n        this.productCutline.innerHTML = this.productCutlineValue;\n        this.productCutline.title = this.productCutlineValue;\n      }\n\n      this.hideSiblingImage();\n    }\n\n    showSibling(event) {\n      const swatch = event.target;\n      const siblingLink = swatch.hasAttribute(attributes$b.siblingLink)\n        ? swatch.getAttribute(attributes$b.siblingLink)\n        : \"\";\n      const siblingPrice = swatch.hasAttribute(attributes$b.siblingPrice)\n        ? swatch.getAttribute(attributes$b.siblingPrice)\n        : \"\";\n      const siblingCompareAtPrice = swatch.hasAttribute(\n        attributes$b.siblingCompareAtPrice,\n      )\n        ? swatch.getAttribute(attributes$b.siblingCompareAtPrice)\n        : \"\";\n      const siblingCutline = swatch.hasAttribute(attributes$b.siblingCutline)\n        ? swatch.getAttribute(attributes$b.siblingCutline)\n        : \"\";\n      const siblingImage = swatch.hasAttribute(attributes$b.siblingImage)\n        ? swatch.getAttribute(attributes$b.siblingImage)\n        : \"\";\n\n      if (siblingLink) {\n        this.productLinks.forEach((productLink) => {\n          productLink.href = siblingLink;\n        });\n      }\n\n      if (siblingCompareAtPrice) {\n        this.productPrice.innerHTML = `<span class=\"price sale\"><span class=\"new-price\">${siblingPrice}</span> <span class=\"old-price\">${siblingCompareAtPrice}</span></span>`;\n      } else {\n        this.productPrice.innerHTML = `<span class=\"price\">${siblingPrice}</span>`;\n      }\n\n      if (this.productCutline) {\n        if (siblingCutline) {\n          this.productCutline.innerHTML = siblingCutline;\n          this.productCutline.title = siblingCutline;\n        } else {\n          this.productCutline.innerHTML = \"\";\n          this.productCutline.title = \"\";\n        }\n      }\n\n      if (siblingImage) {\n        this.showSiblingImage(siblingImage);\n      }\n    }\n\n    showSiblingImage(siblingImage) {\n      if (!this.productImageSibling) return;\n\n      // Add current sibling swatch image to PGI image\n      const ratio = window.devicePixelRatio || 1;\n      const pixels = this.productImage.offsetWidth * ratio;\n      const widthRounded = Math.ceil(pixels / 180) * 180;\n      const imageSrc = getSizedImageUrl(siblingImage, `${widthRounded}x`);\n      const imageExists = this.productImageSibling.querySelector(\n        `[src=\"${imageSrc}\"]`,\n      );\n      const showCurrentImage = () => {\n        this.productImageSibling.classList.add(classes$b.visible);\n        this.productImageSibling\n          .querySelector(`[src=\"${imageSrc}\"]`)\n          .classList.add(classes$b.fade);\n      };\n      const swapImages = () => {\n        this.productImageSibling.querySelectorAll(\"img\").forEach((image) => {\n          image.classList.remove(classes$b.fade);\n        });\n        requestAnimationFrame(showCurrentImage);\n      };\n\n      if (imageExists) {\n        swapImages();\n      } else {\n        const imageTag = document.createElement(\"img\");\n\n        imageTag.src = imageSrc;\n\n        if (this.productCutline) {\n          imageTag.alt = this.productCutline.innerText;\n        }\n\n        imageTag.addEventListener(\"load\", () => {\n          this.productImageSibling.append(imageTag);\n\n          swapImages();\n        });\n      }\n    }\n\n    hideSiblingImage() {\n      if (!this.productImageSibling) return;\n\n      this.productImageSibling.classList.remove(classes$b.visible);\n      this.productImageSibling.querySelectorAll(\"img\").forEach((image) => {\n        image.classList.remove(classes$b.fade);\n      });\n    }\n  }\n\n  class ProductSiblings extends HTMLElement {\n    constructor() {\n      super();\n    }\n\n    connectedCallback() {\n      this.product = this.closest(selectors$h.productGridItem);\n      this.siblingScrollbar = this.querySelector(\n        selectors$h.siblingsInnerHolder,\n      );\n      this.siblingCount = this.querySelector(selectors$h.siblingCount);\n      this.siblingFieldset = this.querySelector(selectors$h.siblingFieldset);\n      this.siblingLinks = this.querySelectorAll(selectors$h.siblingLink);\n      this.productInfo = this.closest(selectors$h.productInfo);\n      this.productLink = this.closest(selectors$h.link);\n      this.hideSwatchesTimer = 0;\n      this.swatchesStyle = theme.settings.collectionSwatchStyle;\n\n      this.initScrollbar();\n\n      if (this.siblingFieldset && this.productInfo) {\n        if (\n          this.swatchesStyle == \"grid\" ||\n          this.swatchesStyle == \"slider\" ||\n          this.swatchesStyle == \"limited\"\n        ) {\n          this.siblingFieldset.classList.add(classes$b.visible);\n        }\n\n        if (this.siblingCount) {\n          this.siblingCount.addEventListener(\"mouseenter\", () =>\n            this.showSiblings(),\n          );\n\n          // Prevent color swatches blinking on mouse move\n          this.productInfo.addEventListener(\"mouseleave\", () =>\n            this.hideSiblings(),\n          );\n        }\n      }\n\n      if (this.siblingLinks.length) {\n        new SiblingSwatches(this.siblingLinks, this.product);\n      }\n\n      // Init Tooltips\n      this.querySelectorAll(selectors$h.tooltip).forEach((tooltip) => {\n        new Tooltip(tooltip);\n      });\n    }\n\n    showSiblings() {\n      if (this.hideSwatchesTimer) clearTimeout(this.hideSwatchesTimer);\n\n      if (this.productLink) {\n        this.productLink.classList.add(classes$b.stopEvents);\n      }\n\n      if (this.swatchesStyle == \"text\") return;\n\n      this.siblingFieldset.classList.add(classes$b.visible);\n    }\n\n    hideSiblings() {\n      this.hideSwatchesTimer = setTimeout(() => {\n        if (this.productLink) {\n          this.productLink.classList.remove(classes$b.stopEvents);\n        }\n\n        this.siblingFieldset.classList.remove(classes$b.visible);\n      }, 100);\n    }\n\n    initScrollbar() {\n      if (this.siblingScrollbar) {\n        new NativeScrollbar(this.siblingScrollbar);\n      }\n    }\n  }\n\n  const selectors$g = {\n    slide: \"[data-hover-slide]\",\n    slideTouch: \"[data-hover-slide-touch]\",\n    slider: \"[data-hover-slider]\",\n    productLink: \"[data-product-link]\",\n    flickityButton: \".flickity-prev-next-button\",\n  };\n\n  class HoverImages extends HTMLElement {\n    constructor() {\n      super();\n\n      this.flkty = null;\n      this.slider = this.querySelector(selectors$g.slider);\n      this.handleScroll = this.handleScroll.bind(this);\n    }\n\n    connectedCallback() {\n      if (window.theme.touch) {\n        this.initTouch();\n      } else {\n        this.initFlickity();\n      }\n    }\n\n    disconnectedCallback() {\n      if (this.flkty) {\n        this.flkty.options.watchCSS = false;\n        this.flkty.destroy();\n      }\n    }\n\n    initTouch() {\n      this.style.setProperty(\n        \"--slides-count\",\n        this.querySelectorAll(selectors$g.slideTouch).length,\n      );\n      this.slider.addEventListener(\"scroll\", this.handleScroll);\n    }\n\n    handleScroll() {\n      const slideIndex = this.slider.scrollLeft / this.slider.clientWidth;\n      this.style.setProperty(\"--slider-index\", slideIndex);\n    }\n\n    initFlickity() {\n      if (this.querySelectorAll(selectors$g.slide).length < 2) return;\n\n      this.flkty = new Flickity(this.slider, {\n        cellSelector: selectors$g.slide,\n        contain: true,\n        wrapAround: true,\n        watchCSS: true,\n        autoPlay: false,\n        draggable: false,\n        pageDots: false,\n        prevNextButtons: true,\n      });\n\n      this.flkty.pausePlayer();\n\n      this.addEventListener(\"mouseenter\", () => {\n        this.flkty.unpausePlayer();\n      });\n\n      this.addEventListener(\"mouseleave\", () => {\n        this.flkty.pausePlayer();\n      });\n\n      // Prevent page redirect on Flickity arrow click\n      this.closest(selectors$g.productLink).addEventListener(\"click\", (e) => {\n        if (e.target.matches(selectors$g.flickityButton)) {\n          e.preventDefault();\n        }\n      });\n    }\n  }\n\n  const selectors$f = {\n    body: \"body\",\n    dataRelatedSectionElem: \"[data-related-section]\",\n    dataTabsHolder: \"[data-tabs-holder]\",\n    dataTab: \"data-tab\",\n    dataTabIndex: \"data-tab-index\",\n    dataAos: \"[data-aos]\",\n    blockId: \"data-block-id\",\n    tabsLi: \"[data-tab]\",\n    tabLink: \".tab-link\",\n    tabLinkRecent: \".tab-link__recent\",\n    tabContent: \".tab-content\",\n    scrollbarHolder: \"[data-scrollbar]\",\n  };\n\n  const classes$a = {\n    current: \"current\",\n    hidden: \"hidden\",\n    aosAnimate: \"aos-animate\",\n    aosNoTransition: \"aos-no-transition\",\n    focused: \"is-focused\",\n  };\n\n  const sections$9 = {};\n\n  class GlobalTabs {\n    constructor(holder) {\n      this.container = holder;\n      this.body = document.querySelector(selectors$f.body);\n      this.a11y = window.a11y;\n\n      if (this.container) {\n        this.scrollbarHolder = this.container.querySelectorAll(\n          selectors$f.scrollbarHolder,\n        );\n\n        this.init();\n\n        // Init native scrollbar\n        this.initNativeScrollbar();\n      }\n    }\n\n    init() {\n      const tabsNavList = this.container.querySelectorAll(selectors$f.tabsLi);\n\n      this.container.addEventListener(\"theme:tab:check\", () =>\n        this.checkRecentTab(),\n      );\n      this.container.addEventListener(\"theme:tab:hide\", () =>\n        this.hideRelatedTab(),\n      );\n\n      if (tabsNavList.length) {\n        tabsNavList.forEach((element) => {\n          const tabId = parseInt(element.getAttribute(selectors$f.dataTab));\n          const tab = this.container.querySelector(\n            `${selectors$f.tabContent}-${tabId}`,\n          );\n\n          element.addEventListener(\"click\", () => {\n            this.tabChange(element, tab);\n          });\n\n          element.addEventListener(\"keyup\", (event) => {\n            if (\n              (event.code === \"Space\" || event.code === \"Enter\") &&\n              this.body.classList.contains(classes$a.focused)\n            ) {\n              this.tabChange(element, tab);\n            }\n          });\n        });\n      }\n    }\n\n    tabChange(element, tab) {\n      if (element.classList.contains(classes$a.current)) {\n        return;\n      }\n\n      const currentTab = this.container.querySelector(\n        `${selectors$f.tabsLi}.${classes$a.current}`,\n      );\n      const currentTabContent = this.container.querySelector(\n        `${selectors$f.tabContent}.${classes$a.current}`,\n      );\n\n      currentTab?.classList.remove(classes$a.current);\n      currentTabContent?.classList.remove(classes$a.current);\n\n      element.classList.add(classes$a.current);\n      tab.classList.add(classes$a.current);\n\n      if (element.classList.contains(classes$a.hidden)) {\n        tab.classList.add(classes$a.hidden);\n      }\n\n      this.a11y.a11y.removeTrapFocus();\n\n      this.container.dispatchEvent(\n        new CustomEvent(\"theme:tab:change\", { bubbles: true }),\n      );\n\n      element.dispatchEvent(\n        new CustomEvent(\"theme:form:sticky\", {\n          bubbles: true,\n          detail: {\n            element: \"tab\",\n          },\n        }),\n      );\n\n      this.animateItems(tab);\n    }\n\n    animateItems(tab, animated = true) {\n      const animatedItems = tab.querySelectorAll(selectors$f.dataAos);\n\n      if (animatedItems.length) {\n        animatedItems.forEach((animatedItem) => {\n          animatedItem.classList.remove(classes$a.aosAnimate);\n\n          if (animated) {\n            animatedItem.classList.add(classes$a.aosNoTransition);\n\n            requestAnimationFrame(() => {\n              animatedItem.classList.remove(classes$a.aosNoTransition);\n              animatedItem.classList.add(classes$a.aosAnimate);\n            });\n          }\n        });\n      }\n    }\n\n    initNativeScrollbar() {\n      if (this.scrollbarHolder.length) {\n        this.scrollbarHolder.forEach((scrollbar) => {\n          new NativeScrollbar(scrollbar);\n        });\n      }\n    }\n\n    checkRecentTab() {\n      const tabLink = this.container.querySelector(selectors$f.tabLinkRecent);\n\n      if (tabLink) {\n        tabLink.classList.remove(classes$a.hidden);\n        const tabLinkIdx = parseInt(tabLink.getAttribute(selectors$f.dataTab));\n        const tabContent = this.container.querySelector(\n          `${selectors$f.tabContent}[${selectors$f.dataTabIndex}=\"${tabLinkIdx}\"]`,\n        );\n\n        if (tabContent) {\n          tabContent.classList.remove(classes$a.hidden);\n\n          this.animateItems(tabContent, false);\n        }\n\n        this.initNativeScrollbar();\n      }\n    }\n\n    hideRelatedTab() {\n      const relatedSection = this.container.querySelector(\n        selectors$f.dataRelatedSectionElem,\n      );\n      if (!relatedSection) {\n        return;\n      }\n\n      const parentTabContent = relatedSection.closest(\n        `${selectors$f.tabContent}.${classes$a.current}`,\n      );\n      if (!parentTabContent) {\n        return;\n      }\n      const parentTabContentIdx = parseInt(\n        parentTabContent.getAttribute(selectors$f.dataTabIndex),\n      );\n      const tabsNavList = this.container.querySelectorAll(selectors$f.tabsLi);\n\n      if (tabsNavList.length > parentTabContentIdx) {\n        const nextTabsNavLink = tabsNavList[parentTabContentIdx].nextSibling;\n\n        if (nextTabsNavLink) {\n          tabsNavList[parentTabContentIdx].classList.add(classes$a.hidden);\n          nextTabsNavLink.dispatchEvent(new Event(\"click\"));\n          this.initNativeScrollbar();\n        }\n      }\n    }\n\n    onBlockSelect(evt) {\n      const element = this.container.querySelector(\n        `${selectors$f.tabLink}[${selectors$f.blockId}=\"${evt.detail.blockId}\"]`,\n      );\n      if (element) {\n        element.dispatchEvent(new Event(\"click\"));\n\n        element.parentNode.scrollTo({\n          top: 0,\n          left: element.offsetLeft - element.clientWidth,\n          behavior: \"smooth\",\n        });\n      }\n    }\n  }\n\n  const tabs = {\n    onLoad() {\n      sections$9[this.id] = [];\n      const tabHolders = this.container.querySelectorAll(\n        selectors$f.dataTabsHolder,\n      );\n\n      tabHolders.forEach((holder) => {\n        sections$9[this.id].push(new GlobalTabs(holder));\n      });\n    },\n    onBlockSelect(e) {\n      sections$9[this.id].forEach((el) => {\n        if (typeof el.onBlockSelect === \"function\") {\n          el.onBlockSelect(e);\n        }\n      });\n    },\n  };\n\n  /*\n      Observe whether or not there are open modals that require scroll lock\n    */\n\n  function hasOpenModals() {\n    const openModals = Boolean(\n      document.querySelectorAll(\"dialog[open][data-scroll-lock-required]\")\n        .length,\n    );\n    const openDrawers = Boolean(\n      document.querySelectorAll(\".drawer.is-open\").length,\n    );\n\n    return openModals || openDrawers;\n  }\n\n  const classes$9 = {\n    added: \"is-added\",\n    animated: \"is-animated\",\n    disabled: \"is-disabled\",\n    error: \"has-error\",\n    loading: \"is-loading\",\n    open: \"is-open\",\n    overlayText: \"product-item--overlay-text\",\n    visible: \"is-visible\",\n    siblingLinkCurrent: \"sibling__link--current\",\n  };\n\n  const settings = {\n    errorDelay: 3000,\n  };\n\n  const selectors$e = {\n    animation: \"[data-animation]\",\n    apiContent: \"[data-api-content]\",\n    buttonQuickAdd: \"[data-quick-add-btn]\",\n    buttonAddToCart: \"[data-add-to-cart]\",\n    cartDrawer: \"cart-drawer\",\n    cartPage: \"[data-cart-page]\",\n    cartLineItems: \"[data-line-items]\",\n    dialog: \"dialog\",\n    focusable:\n      'button, [href], select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n    messageError: \"[data-message-error]\",\n    modalButton: \"[data-quick-add-modal-handle]\",\n    modalContainer: \"[data-product-upsell-container]\",\n    modalContent: \"[data-product-upsell-ajax]\",\n    modalClose: \"[data-quick-add-modal-close]\",\n    productGridItem: \"data-grid-item\",\n    productInformationHolder: \"[data-product-information]\",\n    quickAddHolder: \"[data-quick-add-holder]\",\n    quickAddModal: \"[data-quick-add-modal]\",\n    quickAddModalTemplate: \"[data-quick-add-modal-template]\",\n    tooltip: \"[data-tooltip]\",\n  };\n\n  const attributes$a = {\n    closing: \"closing\",\n    productId: \"data-product-id\",\n    modalHandle: \"data-quick-add-modal-handle\",\n    siblingSwapper: \"data-sibling-swapper\",\n    quickAddHolder: \"data-quick-add-holder\",\n  };\n\n  class QuickAddProduct extends HTMLElement {\n    constructor() {\n      super();\n\n      this.container = this;\n      this.quickAddHolder = this.container.querySelector(\n        selectors$e.quickAddHolder,\n      );\n\n      if (this.quickAddHolder) {\n        this.modal = null;\n        this.currentModal = null;\n        this.productId = this.quickAddHolder.getAttribute(\n          attributes$a.quickAddHolder,\n        );\n        this.modalButton = this.quickAddHolder.querySelector(\n          selectors$e.modalButton,\n        );\n        this.handle = this.modalButton?.getAttribute(attributes$a.modalHandle);\n        this.buttonQuickAdd = this.quickAddHolder.querySelector(\n          selectors$e.buttonQuickAdd,\n        );\n        this.buttonATC = this.quickAddHolder.querySelector(\n          selectors$e.buttonAddToCart,\n        );\n        this.button = this.modalButton || this.buttonATC;\n        this.modalClose = this.modalClose.bind(this);\n        this.modalCloseOnProductAdded =\n          this.modalCloseOnProductAdded.bind(this);\n        this.a11y = a11y;\n        this.isAnimating = false;\n\n        this.modalButtonClickEvent = this.modalButtonClickEvent.bind(this);\n        this.quickAddLoadingToggle = this.quickAddLoadingToggle.bind(this);\n      }\n    }\n\n    connectedCallback() {\n      /**\n       * Modal button works for multiple variants products\n       */\n      if (this.modalButton) {\n        this.modalButton.addEventListener(\"click\", this.modalButtonClickEvent);\n      }\n\n      /**\n       * Quick add button works for single variant products\n       */\n      if (this.buttonATC) {\n        this.buttonATC.addEventListener(\"click\", (e) => {\n          e.preventDefault();\n\n          window.a11y.lastElement = this.buttonATC;\n\n          document.dispatchEvent(\n            new CustomEvent(\"theme:cart:add\", {\n              detail: {\n                button: this.buttonATC,\n              },\n            }),\n          );\n        });\n      }\n\n      if (this.quickAddHolder) {\n        this.quickAddHolder.addEventListener(\n          \"animationend\",\n          this.quickAddLoadingToggle,\n        );\n        this.errorHandler();\n      }\n    }\n\n    modalButtonClickEvent(e) {\n      e.preventDefault();\n\n      const isSiblingSwapper = this.modalButton.hasAttribute(\n        attributes$a.siblingSwapper,\n      );\n      const isSiblingLinkCurrent = this.modalButton.classList.contains(\n        classes$9.siblingLinkCurrent,\n      );\n\n      if (isSiblingLinkCurrent) return;\n\n      this.modalButton.classList.add(classes$9.loading);\n      this.modalButton.disabled = true;\n\n      // Siblings product modal swapper\n      if (isSiblingSwapper && !isSiblingLinkCurrent) {\n        this.currentModal = e.target.closest(selectors$e.quickAddModal);\n        this.currentModal.classList.add(classes$9.loading);\n      }\n\n      this.renderModal();\n    }\n\n    modalCreate(response) {\n      const cachedModal = document.querySelector(\n        `${selectors$e.quickAddModal}[${attributes$a.productId}=\"${this.productId}\"]`,\n      );\n\n      if (cachedModal) {\n        this.modal = cachedModal;\n        this.modalOpen();\n      } else {\n        const modalTemplate = this.quickAddHolder.querySelector(\n          selectors$e.quickAddModalTemplate,\n        );\n        if (!modalTemplate) return;\n\n        const htmlObject = document.createElement(\"div\");\n        htmlObject.innerHTML = modalTemplate.innerHTML;\n\n        // Add dialog to the body\n        document.body.appendChild(\n          htmlObject.querySelector(selectors$e.quickAddModal),\n        );\n        modalTemplate.remove();\n\n        this.modal = document.querySelector(\n          `${selectors$e.quickAddModal}[${attributes$a.productId}=\"${this.productId}\"]`,\n        );\n        this.modal.querySelector(selectors$e.modalContent).innerHTML =\n          new DOMParser()\n            .parseFromString(response, \"text/html\")\n            .querySelector(selectors$e.apiContent).innerHTML;\n\n        // Init Tooltips\n        this.modal.querySelectorAll(selectors$e.tooltip).forEach((tooltip) => {\n          new Tooltip(tooltip);\n        });\n\n        this.modalCreatedCallback();\n      }\n    }\n\n    modalOpen() {\n      if (this.currentModal) {\n        this.currentModal.dispatchEvent(\n          new CustomEvent(\"theme:modal:close\", { bubbles: false }),\n        );\n      }\n\n      // Check if browser supports Dialog tags\n      if (typeof this.modal.show === \"function\") {\n        this.modal.show();\n      }\n\n      this.modal.setAttribute(\"open\", true);\n      this.modal.removeAttribute(\"inert\");\n\n      this.quickAddHolder.classList.add(classes$9.disabled);\n\n      if (this.modalButton) {\n        this.modalButton.classList.remove(classes$9.loading);\n        this.modalButton.disabled = false;\n        window.a11y.lastElement = this.modalButton;\n      }\n\n      // Animate items\n      requestAnimationFrame(() => {\n        this.modal.querySelectorAll(selectors$e.animation).forEach((item) => {\n          item.classList.add(classes$9.animated);\n        });\n      });\n\n      document.dispatchEvent(\n        new CustomEvent(\"theme:quick-add:open\", { bubbles: true }),\n      );\n      document.dispatchEvent(\n        new CustomEvent(\"theme:scroll:lock\", { bubbles: true }),\n      );\n      document.addEventListener(\n        \"theme:product:added\",\n        this.modalCloseOnProductAdded,\n        { once: true },\n      );\n    }\n\n    modalClose() {\n      if (this.isAnimating) {\n        return;\n      }\n\n      if (!this.modal.hasAttribute(attributes$a.closing)) {\n        this.modal.setAttribute(attributes$a.closing, \"\");\n        this.isAnimating = true;\n        return;\n      }\n\n      // Check if browser supports Dialog tags\n      if (typeof this.modal.close === \"function\") {\n        this.modal.close();\n      } else {\n        this.modal.removeAttribute(\"open\");\n      }\n\n      this.modal.removeAttribute(attributes$a.closing);\n      this.modal.setAttribute(\"inert\", \"\");\n      this.modal.classList.remove(classes$9.loading);\n\n      if (this.modalButton) {\n        this.modalButton.disabled = false;\n      }\n\n      if (\n        this.quickAddHolder &&\n        this.quickAddHolder.classList.contains(classes$9.disabled)\n      ) {\n        this.quickAddHolder.classList.remove(classes$9.disabled);\n      }\n\n      this.resetAnimatedItems();\n\n      // Unlock scroll if no other drawers & modals are open\n      if (!hasOpenModals()) {\n        document.dispatchEvent(\n          new CustomEvent(\"theme:scroll:unlock\", { bubbles: true }),\n        );\n      }\n\n      document.removeEventListener(\n        \"theme:product:added\",\n        this.modalCloseOnProductAdded,\n      );\n\n      this.a11y.removeTrapFocus();\n      this.a11y.autoFocusLastElement();\n    }\n\n    modalEvents() {\n      // Close button click event\n      this.modal\n        .querySelector(selectors$e.modalClose)\n        ?.addEventListener(\"click\", (e) => {\n          e.preventDefault();\n          this.modalClose();\n        });\n\n      // Close dialog on click outside content\n      this.modal.addEventListener(\"click\", (event) => {\n        if (event.target.nodeName === \"DIALOG\" && event.type === \"click\") {\n          this.modalClose();\n        }\n      });\n\n      // Close dialog on click ESC key pressed\n      this.modal.addEventListener(\"keydown\", (event) => {\n        if (event.code == \"Escape\") {\n          event.preventDefault();\n          this.modalClose();\n        }\n      });\n\n      this.modal.addEventListener(\"theme:modal:close\", () => {\n        this.modalClose();\n      });\n\n      // Close dialog after animation completes\n      this.modal.addEventListener(\"animationend\", (event) => {\n        if (event.target !== this.modal) return;\n        this.isAnimating = false;\n\n        if (this.modal.hasAttribute(attributes$a.closing)) {\n          this.modalClose();\n        } else {\n          setTimeout(() => {\n            this.a11y.trapFocus(this.modal);\n            const focusTarget =\n              this.modal.querySelector(\"[autofocus]\") ||\n              this.modal.querySelector(selectors$e.focusable);\n            focusTarget?.focus();\n          }, 50);\n        }\n      });\n    }\n\n    modalCloseOnProductAdded() {\n      this.resetQuickAddButtons();\n      if (this.modal && this.modal.hasAttribute(\"open\")) {\n        this.modalClose();\n      }\n    }\n\n    quickAddLoadingToggle(e) {\n      if (e.target != this.quickAddHolder) return;\n\n      this.quickAddHolder.classList.remove(classes$9.disabled);\n    }\n\n    /**\n     * Handle error cart response\n     */\n    errorHandler() {\n      this.quickAddHolder.addEventListener(\"theme:cart:error\", (event) => {\n        const holder = event.detail.holder;\n        const parentProduct = holder.closest(\n          `[${selectors$e.productGridItem}]`,\n        );\n        if (!parentProduct) return;\n\n        const errorMessageHolder = holder.querySelector(\n          selectors$e.messageError,\n        );\n        const hasOverlayText = parentProduct.classList.contains(\n          classes$9.overlayText,\n        );\n        const productInfo = parentProduct.querySelector(\n          selectors$e.productInformationHolder,\n        );\n        const button = holder.querySelector(selectors$e.buttonAddToCart);\n\n        if (button) {\n          button.classList.remove(classes$9.added, classes$9.loading);\n          holder.classList.add(classes$9.error);\n        }\n\n        if (errorMessageHolder) {\n          errorMessageHolder.innerText = event.detail.description;\n        }\n\n        if (hasOverlayText) {\n          productInfo.classList.add(classes$9.hidden);\n        }\n\n        setTimeout(() => {\n          this.resetQuickAddButtons();\n\n          if (hasOverlayText) {\n            productInfo.classList.remove(classes$9.hidden);\n          }\n        }, settings.errorDelay);\n      });\n    }\n\n    /**\n     * Reset buttons to default states\n     */\n    resetQuickAddButtons() {\n      if (this.quickAddHolder) {\n        this.quickAddHolder.classList.remove(\n          classes$9.visible,\n          classes$9.error,\n        );\n      }\n\n      if (this.buttonQuickAdd) {\n        this.buttonQuickAdd.classList.remove(classes$9.added);\n        this.buttonQuickAdd.disabled = false;\n      }\n    }\n\n    renderModal() {\n      if (this.modal) {\n        this.modalOpen();\n      } else {\n        window\n          .fetch(\n            `${window.theme.routes.root}products/${this.handle}?section_id=api-product-upsell`,\n          )\n          .then(this.upsellErrorsHandler)\n          .then((response) => {\n            return response.text();\n          })\n          .then((response) => {\n            this.modalCreate(response);\n          });\n      }\n    }\n\n    modalCreatedCallback() {\n      this.modalEvents();\n      this.modalOpen();\n\n      wrapElements(this.modal);\n    }\n\n    upsellErrorsHandler(response) {\n      if (!response.ok) {\n        return response.json().then(function (json) {\n          const e = new FetchError({\n            status: response.statusText,\n            headers: response.headers,\n            json: json,\n          });\n          throw e;\n        });\n      }\n      return response;\n    }\n\n    resetAnimatedItems() {\n      this.modal?.querySelectorAll(selectors$e.animation).forEach((item) => {\n        item.classList.remove(classes$9.animated);\n      });\n    }\n  }\n\n  register(\"product-grid\", [tabs]);\n\n  if (!customElements.get(\"quick-add-product\")) {\n    customElements.define(\"quick-add-product\", QuickAddProduct);\n  }\n\n  if (!customElements.get(\"radio-swatch\")) {\n    customElements.define(\"radio-swatch\", RadioSwatch);\n  }\n\n  if (!customElements.get(\"grid-swatch\")) {\n    customElements.define(\"grid-swatch\", GridSwatch);\n  }\n\n  if (!customElements.get(\"product-siblings\")) {\n    customElements.define(\"product-siblings\", ProductSiblings);\n  }\n\n  if (!customElements.get(\"hover-images\")) {\n    customElements.define(\"hover-images\", HoverImages);\n  }\n\n  const selectors$d = {\n    productPage: \".product__page\",\n    formWrapper: \"[data-form-wrapper]\",\n    headerSticky: \"[data-header-sticky]\",\n    productMediaList: \"[data-product-media-list]\",\n  };\n\n  const classes$8 = {\n    sticky: \"is-sticky\",\n  };\n\n  const attributes$9 = {\n    stickyEnabled: \"data-sticky-enabled\",\n  };\n\n  window.theme.variables = {\n    productPageSticky: false,\n  };\n\n  const sections$8 = {};\n\n  class ProductSticky {\n    constructor(section) {\n      this.section = section;\n      this.container = section.container;\n      this.stickyEnabled =\n        this.container.getAttribute(attributes$9.stickyEnabled) === \"true\";\n      this.formWrapper = this.container.querySelector(selectors$d.formWrapper);\n      this.stickyScrollTop = 0;\n      this.scrollLastPosition = 0;\n      this.stickyDefaultTop = 0;\n      this.currentPoint = 0;\n      this.defaultTopBottomSpacings = 30;\n      this.scrollTop = window.scrollY;\n      this.scrollDirectionDown = true;\n      this.requestAnimationSticky = null;\n      this.stickyFormLoad = true;\n      this.stickyFormLastHeight = null;\n      this.onChangeCounter = 0;\n      this.scrollEvent = (e) => this.scrollEvents(e);\n      this.resizeEvent = (e) => this.resizeEvents(e);\n      this.stickyFormEvent = (e) => this.stickyFormEvents(e);\n\n      // The code should execute after truncate text in product.js - 50ms\n      setTimeout(() => {\n        this.init();\n      }, 50);\n    }\n\n    init() {\n      if (this.stickyEnabled) {\n        this.stickyScrollCheck();\n\n        document.addEventListener(\"theme:resize\", this.resizeEvent);\n      }\n\n      this.initSticky();\n    }\n\n    initSticky() {\n      if (theme.variables.productPageSticky) {\n        this.requestAnimationSticky = requestAnimationFrame(() =>\n          this.calculateStickyPosition(),\n        );\n\n        this.formWrapper.addEventListener(\n          \"theme:form:sticky\",\n          this.stickyFormEvent,\n        );\n\n        document.addEventListener(\"theme:scroll\", this.scrollEvent);\n      }\n    }\n\n    stickyFormEvents(e) {\n      this.removeAnimationFrameSticky();\n\n      this.requestAnimationSticky = requestAnimationFrame(() =>\n        this.calculateStickyPosition(e),\n      );\n    }\n\n    scrollEvents(e) {\n      this.scrollTop = e.detail.position;\n      this.scrollDirectionDown = e.detail.down;\n\n      if (!this.requestAnimationSticky) {\n        this.requestAnimationSticky = requestAnimationFrame(() =>\n          this.calculateStickyPosition(),\n        );\n      }\n    }\n\n    resizeEvents(e) {\n      this.stickyScrollCheck();\n\n      document.removeEventListener(\"theme:scroll\", this.scrollEvent);\n\n      this.formWrapper.removeEventListener(\n        \"theme:form:sticky\",\n        this.stickyFormEvent,\n      );\n\n      this.initSticky();\n    }\n\n    stickyScrollCheck() {\n      const targetFormWrapper = this.container.querySelector(\n        `${selectors$d.productPage} ${selectors$d.formWrapper}`,\n      );\n\n      if (!targetFormWrapper) return;\n\n      if (isDesktop()) {\n        const form = this.container.querySelector(selectors$d.formWrapper);\n        const productMediaList = this.container.querySelector(\n          selectors$d.productMediaList,\n        );\n\n        if (!form || !productMediaList) return;\n\n        const productCopyHeight = form.offsetHeight;\n        const productImagesHeight = productMediaList.offsetHeight;\n\n        // Is the product description and form taller than window space\n        // Is also shorter than the window and images\n        if (productCopyHeight < productImagesHeight) {\n          theme.variables.productPageSticky = true;\n          targetFormWrapper.classList.add(classes$8.sticky);\n        } else {\n          theme.variables.productPageSticky = false;\n          targetFormWrapper.classList.remove(classes$8.sticky);\n        }\n      } else {\n        theme.variables.productPageSticky = false;\n        targetFormWrapper.classList.remove(classes$8.sticky);\n      }\n    }\n\n    calculateStickyPosition(e = null) {\n      const isScrollLocked =\n        document.documentElement.hasAttribute(\"data-scroll-locked\");\n      if (isScrollLocked) {\n        this.removeAnimationFrameSticky();\n        return;\n      }\n\n      const eventExist = Boolean(e && e.detail);\n      const isAccordion = Boolean(\n        eventExist && e.detail.element && e.detail.element === \"accordion\",\n      );\n      const formWrapperHeight = this.formWrapper.offsetHeight;\n      const heightDifference =\n        window.innerHeight - formWrapperHeight - this.defaultTopBottomSpacings;\n      const scrollDifference = Math.abs(\n        this.scrollTop - this.scrollLastPosition,\n      );\n\n      if (this.scrollDirectionDown) {\n        this.stickyScrollTop -= scrollDifference;\n      } else {\n        this.stickyScrollTop += scrollDifference;\n      }\n\n      if (this.stickyFormLoad) {\n        if (document.querySelector(selectors$d.headerSticky)) {\n          let { headerHeight } = readHeights();\n          this.stickyDefaultTop = headerHeight;\n        } else {\n          this.stickyDefaultTop = this.defaultTopBottomSpacings;\n        }\n\n        this.stickyScrollTop = this.stickyDefaultTop;\n      }\n\n      this.stickyScrollTop = Math.min(\n        Math.max(this.stickyScrollTop, heightDifference),\n        this.stickyDefaultTop,\n      );\n\n      const differencePoint = this.stickyScrollTop - this.currentPoint;\n      this.currentPoint = this.stickyFormLoad\n        ? this.stickyScrollTop\n        : this.currentPoint + differencePoint * 0.5;\n\n      this.formWrapper.style.setProperty(\n        \"--sticky-top\",\n        `${this.currentPoint}px`,\n      );\n\n      this.scrollLastPosition = this.scrollTop;\n      this.stickyFormLoad = false;\n\n      if (\n        (isAccordion && this.onChangeCounter <= 10) ||\n        (isAccordion && this.stickyFormLastHeight !== formWrapperHeight) ||\n        (this.stickyScrollTop !== this.currentPoint &&\n          this.requestAnimationSticky)\n      ) {\n        if (isAccordion) {\n          this.onChangeCounter += 1;\n        }\n\n        if (isAccordion && this.stickyFormLastHeight !== formWrapperHeight) {\n          this.onChangeCounter = 11;\n        }\n\n        this.requestAnimationSticky = requestAnimationFrame(() =>\n          this.calculateStickyPosition(e),\n        );\n      } else if (this.requestAnimationSticky) {\n        this.removeAnimationFrameSticky();\n      }\n\n      this.stickyFormLastHeight = formWrapperHeight;\n    }\n\n    removeAnimationFrameSticky() {\n      if (this.requestAnimationSticky) {\n        cancelAnimationFrame(this.requestAnimationSticky);\n        this.requestAnimationSticky = null;\n        this.onChangeCounter = 0;\n      }\n    }\n\n    onUnload() {\n      if (this.stickyEnabled) {\n        document.removeEventListener(\"theme:resize\", this.resizeEvent);\n      }\n\n      if (theme.variables.productPageSticky) {\n        document.removeEventListener(\"theme:scroll\", this.scrollEvent);\n      }\n    }\n  }\n\n  const productStickySection = {\n    onLoad() {\n      sections$8[this.id] = new ProductSticky(this);\n    },\n    onUnload() {\n      sections$8[this.id].onUnload();\n    },\n  };\n\n  const selectors$c = {\n    optionPosition: \"data-option-position\",\n    optionInput: '[name^=\"options\"], [data-popout-option]',\n    optionInputCurrent:\n      '[name^=\"options\"]:checked, [name^=\"options\"][type=\"hidden\"]',\n    selectOptionValue: \"data-value\",\n    popout: \"[data-popout]\",\n  };\n\n  const classes$7 = {\n    soldOut: \"sold-out\",\n    unavailable: \"unavailable\",\n    sale: \"sale\",\n  };\n\n  /**\n   * Variant Sellout Precrime Click Preview\n   * I think of this like the precrime machine in Minority report.  It gives a preview\n   * of every possible click action, given the current form state.  The logic is:\n   *\n   * for each clickable name=options[] variant selection element\n   * find the value of the form if the element were clicked\n   * lookup the variant with those value in the product json\n   * clear the classes, add .unavailable if it's not found,\n   * and add .sold-out if it is out of stock\n   *\n   * Caveat: we rely on the option position so we don't need\n   * to keep a complex map of keys and values.\n   */\n\n  class SelloutVariants {\n    constructor(section, productJSON) {\n      this.container = section;\n      this.productJSON = productJSON;\n      this.optionElements = this.container.querySelectorAll(\n        selectors$c.optionInput,\n      );\n\n      if (this.productJSON && this.optionElements.length) {\n        this.init();\n      }\n    }\n\n    init() {\n      this.update();\n    }\n\n    update() {\n      this.getCurrentState();\n\n      this.optionElements.forEach((el) => {\n        const parent = el.closest(`[${selectors$c.optionPosition}]`);\n        if (!parent) return;\n        const val = el.value || el.getAttribute(selectors$c.selectOptionValue);\n        const positionString = parent.getAttribute(selectors$c.optionPosition);\n        // subtract one because option.position in liquid does not count form zero, but JS arrays do\n        const position = parseInt(positionString, 10) - 1;\n        const selectPopout = el.closest(selectors$c.popout);\n\n        let newVals = [...this.selections];\n        newVals[position] = val;\n\n        const found = this.productJSON.variants.find((element) => {\n          // only return true if every option matches our hypothetical selection\n          let perfectMatch = true;\n          for (let index = 0; index < newVals.length; index++) {\n            if (element.options[index] !== newVals[index]) {\n              perfectMatch = false;\n            }\n          }\n          return perfectMatch;\n        });\n\n        const anyAvailableOption = this.productJSON.variants.find((element) => {\n          if (\n            element.options[position] == newVals[position] &&\n            element.available\n          ) {\n            return true;\n          }\n          return false;\n        });\n\n        el.classList.remove(classes$7.soldOut, classes$7.unavailable);\n        el.parentNode.classList.remove(classes$7.sale);\n\n        if (selectPopout) {\n          selectPopout.classList.remove(\n            classes$7.soldOut,\n            classes$7.unavailable,\n            classes$7.sale,\n          );\n        }\n\n        if (\n          !(\n            anyAvailableOption &&\n            this.container.querySelector(\"[data-bulk-order-variants]\")\n          )\n        ) {\n          if (typeof found === \"undefined\") {\n            el.classList.add(classes$7.unavailable);\n\n            if (selectPopout) {\n              selectPopout.classList.add(classes$7.unavailable);\n            }\n          } else if (found && found.available === false) {\n            el.classList.add(classes$7.soldOut);\n\n            if (selectPopout) {\n              selectPopout.classList.add(classes$7.soldOut);\n            }\n          }\n        }\n\n        const anyOnSaleForThisValue = this.productJSON.variants.some(\n          (v) =>\n            v.options[position] === newVals[position] &&\n            v.compare_at_price > v.price,\n        );\n\n        if (anyOnSaleForThisValue && theme.settings.variantOnSale) {\n          el.parentNode.classList.add(classes$7.sale);\n        }\n      });\n    }\n\n    getCurrentState() {\n      this.selections = [];\n\n      const options = this.container.querySelectorAll(\n        selectors$c.optionInputCurrent,\n      );\n      if (options.length) {\n        options.forEach((element) => {\n          const elemValue = element.value;\n          if (elemValue && elemValue !== \"\") {\n            this.selections.push(elemValue);\n          }\n        });\n      }\n    }\n  }\n\n  const selectors$b = {\n    product: \"[data-product]\",\n    productForm: \"[data-product-form]\",\n    productNotification: \"product-notification\",\n    variantTitle: \"[data-variant-title]\",\n    notificationProduct: \"[data-notification-product]\",\n    addToCart: \"[data-add-to-cart]\",\n    addToCartText: \"[data-add-to-cart-text]\",\n    cartPage: \"[data-cart-page]\",\n    comparePrice: \"[data-compare-price]\",\n    comparePriceText: \"[data-compare-text]\",\n    finalSaleBadge: \"[data-final-sale-badge]\",\n    formWrapper: \"[data-form-wrapper]\",\n    originalSelectorId: \"[data-product-select]\",\n    priceWrapper: \"[data-price-wrapper]\",\n    productImages: \"product-images\",\n    productImage: \"[data-product-image]\",\n    productMediaList: \"[data-product-media-list]\",\n    productJson: \"[data-product-json]\",\n    productPrice: \"[data-product-price]\",\n    unitPrice: \"[data-product-unit-price]\",\n    unitBase: \"[data-product-base]\",\n    unitWrapper: \"[data-product-unit]\",\n    isPreOrder: \"[data-product-preorder]\",\n    productSlide: \".product__slide\",\n    subPrices: \"[data-subscription-watch-price]\",\n    subSelectors: \"[data-subscription-selectors]\",\n    subsToggle: \"[data-toggles-group]\",\n    subsChild: \"data-group-toggle\",\n    subDescription: \"[data-plan-description]\",\n    section: \"[data-section-type]\",\n    variantSku: \"[data-variant-sku]\",\n    variantFinalSaleMeta: \"[data-variant-final-sale-metafield]\",\n    variantButtons: \"[data-variant-buttons]\",\n    variantOptionImage: \"[data-variant-option-image]\",\n    quickAddModal: \"[data-quick-add-modal]\",\n    priceOffAmount: \"[data-price-off-amount]\",\n    priceOffBadge: \"[data-price-off-badge]\",\n    priceOffType: \"[data-price-off-type]\",\n    priceOffWrap: \"[data-price-off]\",\n    remainingCount: \"[data-remaining-count]\",\n    remainingMax: \"[data-remaining-max]\",\n    remainingWrapper: \"[data-remaining-wrapper]\",\n    remainingJSON: \"[data-product-remaining-json]\",\n    optionValue: \"[data-option-value]\",\n    optionPosition: \"[data-option-position]\",\n    installment: \"[data-product-form-installment]\",\n    inputId: 'input[name=\"id\"]',\n  };\n\n  const classes$6 = {\n    hidden: \"hidden\",\n    variantSoldOut: \"variant--soldout\",\n    variantUnavailable: \"variant--unavailable\",\n    productPriceSale: \"product__price--sale\",\n    remainingLow: \"count-is-low\",\n    remainingIn: \"count-is-in\",\n    remainingOut: \"count-is-out\",\n    remainingUnavailable: \"count-is-unavailable\",\n  };\n\n  const attributes$8 = {\n    remainingMaxAttr: \"data-remaining-max\",\n    enableHistoryState: \"data-enable-history-state\",\n    notificationPopup: \"data-notification-popup\",\n    faderDesktop: \"data-fader-desktop\",\n    faderMobile: \"data-fader-mobile\",\n    optionPosition: \"data-option-position\",\n    imageId: \"data-image-id\",\n    mediaId: \"data-media-id\",\n    quickAddButton: \"data-quick-add-btn\",\n    finalSale: \"data-final-sale\",\n    variantImageScroll: \"data-variant-image-scroll\",\n  };\n\n  class ProductForm extends HTMLElement {\n    constructor() {\n      super();\n    }\n\n    connectedCallback() {\n      this.cartAddEvents();\n\n      this.container =\n        this.closest(selectors$b.section) ||\n        this.closest(selectors$b.quickAddModal);\n      if (!this.container) return;\n\n      this.sectionId = this.container.dataset.sectionId;\n      this.product = this.container.querySelector(selectors$b.product);\n      this.productForm = this.container.querySelector(selectors$b.productForm);\n      this.productNotification = this.container.querySelector(\n        selectors$b.productNotification,\n      );\n      this.productImages = this.container.querySelector(\n        selectors$b.productImages,\n      );\n      this.productMediaList = this.container.querySelector(\n        selectors$b.productMediaList,\n      );\n      this.installmentForm = this.container.querySelector(\n        selectors$b.installment,\n      );\n      this.skuWrapper = this.container.querySelector(selectors$b.variantSku);\n      this.sellout = null;\n      this.variantImageScroll =\n        this.container.getAttribute(attributes$8.variantImageScroll) === \"true\";\n\n      this.priceOffWrap = this.container.querySelector(\n        selectors$b.priceOffWrap,\n      );\n      this.priceOffAmount = this.container.querySelector(\n        selectors$b.priceOffAmount,\n      );\n      this.priceOffType = this.container.querySelector(\n        selectors$b.priceOffType,\n      );\n      this.planDescription = this.container.querySelector(\n        selectors$b.subDescription,\n      );\n\n      this.remainingWrapper = this.container.querySelector(\n        selectors$b.remainingWrapper,\n      );\n\n      if (this.remainingWrapper) {\n        const remainingMaxWrap = this.container.querySelector(\n          selectors$b.remainingMax,\n        );\n        if (remainingMaxWrap) {\n          this.remainingMaxInt = parseInt(\n            remainingMaxWrap.getAttribute(attributes$8.remainingMaxAttr),\n            10,\n          );\n          this.remainingCount = this.container.querySelector(\n            selectors$b.remainingCount,\n          );\n          this.remainingJSONWrapper = this.container.querySelector(\n            selectors$b.remainingJSON,\n          );\n          this.remainingJSON = null;\n\n          if (\n            this.remainingJSONWrapper &&\n            this.remainingJSONWrapper.innerHTML !== \"\"\n          ) {\n            this.remainingJSON = JSON.parse(\n              this.remainingJSONWrapper.innerHTML,\n            );\n          } else {\n            console.warn(\"Missing product quantity JSON\");\n          }\n        }\n      }\n\n      this.enableHistoryState =\n        this.container.getAttribute(attributes$8.enableHistoryState) === \"true\";\n      this.hasUnitPricing = this.container.querySelector(\n        selectors$b.unitWrapper,\n      );\n      this.subSelectors = this.container.querySelector(\n        selectors$b.subSelectors,\n      );\n      this.subPrices = this.container.querySelector(selectors$b.subPrices);\n      this.isPreOrder = this.container.querySelector(selectors$b.isPreOrder);\n\n      let productJSON = null;\n      const productElemJSON = this.container.querySelector(\n        selectors$b.productJson,\n      );\n      if (productElemJSON) {\n        productJSON = productElemJSON.innerHTML;\n      }\n      if (productJSON) {\n        this.productJSON = JSON.parse(productJSON);\n        this.linkForm();\n        this.sellout = new SelloutVariants(this.container, this.productJSON);\n      } else {\n        console.error(\"Missing product JSON\");\n      }\n\n      this.variantOptionImages = this.container.querySelectorAll(\n        selectors$b.variantOptionImage,\n      );\n      this.variantButtons = this.container.querySelectorAll(\n        selectors$b.variantButtons,\n      );\n      if (this.variantOptionImages.length > 1) {\n        this.optionImagesWidth();\n      }\n    }\n\n    cartAddEvents() {\n      this.buttonATC = this.querySelector(selectors$b.addToCart);\n\n      this.buttonATC?.addEventListener(\"click\", (e) => {\n        e.preventDefault();\n\n        document.dispatchEvent(\n          new CustomEvent(\"theme:cart:add\", {\n            detail: {\n              button: this.buttonATC,\n            },\n            bubbles: false,\n          }),\n        );\n\n        if (!this.closest(selectors$b.quickAddModal)) {\n          window.a11y.lastElement = this.buttonATC;\n        }\n      });\n    }\n\n    destroy() {\n      this.productForm.destroy();\n    }\n\n    linkForm() {\n      this.productForm = new ProductFormReader(\n        this.container,\n        this.productJSON,\n        {\n          onOptionChange: this.onOptionChange.bind(this),\n          onPlanChange: this.onPlanChange.bind(this),\n        },\n      );\n      this.pushState(this.productForm.getFormState(), true);\n      this.subsToggleListeners();\n    }\n\n    onOptionChange(evt) {\n      this.pushState(evt.dataset);\n      this.updateProductImage(evt);\n    }\n\n    onPlanChange(evt) {\n      if (this.subPrices) {\n        this.pushState(evt.dataset);\n      }\n    }\n\n    pushState(formState, init = false) {\n      this.productState = this.setProductState(formState);\n      this.updateAddToCartState(formState);\n      this.updateNotificationForm(formState);\n      this.updateProductPrices(formState);\n      this.updateSaleText(formState);\n      this.updateSku(formState);\n      this.updateSubscriptionText(formState);\n      this.updateRemaining(formState);\n      this.updateLegend(formState);\n      this.fireHookEvent(formState);\n      this.sellout?.update(formState);\n\n      if (this.enableHistoryState && !init) {\n        this.updateHistoryState(formState);\n      }\n    }\n\n    updateAddToCartState(formState) {\n      const variant = formState.variant;\n      let addText = theme.strings.addToCart;\n      const priceWrapper = this.container.querySelectorAll(\n        selectors$b.priceWrapper,\n      );\n      const addToCart = this.container.querySelectorAll(selectors$b.addToCart);\n      const addToCartText = this.container.querySelectorAll(\n        selectors$b.addToCartText,\n      );\n      const formWrapper = this.container.querySelectorAll(\n        selectors$b.formWrapper,\n      );\n\n      if (this.installmentForm && variant) {\n        const installmentInput = this.installmentForm.querySelector(\n          selectors$b.inputId,\n        );\n        installmentInput.value = variant.id;\n        installmentInput.dispatchEvent(new Event(\"change\", { bubbles: true }));\n      }\n\n      if (this.isPreOrder) {\n        addText = theme.strings.preOrder;\n      }\n\n      if (priceWrapper.length && variant) {\n        priceWrapper.forEach((element) => {\n          element.classList.remove(classes$6.hidden);\n        });\n      }\n\n      addToCart?.forEach((button) => {\n        if (button.hasAttribute(attributes$8.quickAddButton)) return;\n\n        if (variant) {\n          if (variant.available) {\n            button.disabled = false;\n          } else {\n            button.disabled = true;\n          }\n        } else {\n          button.disabled = true;\n        }\n      });\n\n      addToCartText?.forEach((element) => {\n        let btnText = addText;\n        if (variant) {\n          if (!variant.available) {\n            btnText = theme.strings.soldOut;\n          }\n        } else {\n          btnText = theme.strings.unavailable;\n        }\n\n        element.textContent = btnText;\n      });\n\n      if (formWrapper.length) {\n        formWrapper.forEach((element) => {\n          if (variant) {\n            if (variant.available) {\n              element.classList.remove(\n                classes$6.variantSoldOut,\n                classes$6.variantUnavailable,\n              );\n            } else {\n              element.classList.add(classes$6.variantSoldOut);\n              element.classList.remove(classes$6.variantUnavailable);\n            }\n\n            const formSelect = element.querySelector(\n              selectors$b.originalSelectorId,\n            );\n            if (formSelect) {\n              formSelect.value = variant.id;\n            }\n\n            const inputId = element.querySelector(\n              `${selectors$b.inputId}[form]`,\n            );\n            if (inputId) {\n              inputId.value = variant.id;\n              inputId.dispatchEvent(new Event(\"change\"));\n            }\n          } else {\n            element.classList.add(classes$6.variantUnavailable);\n            element.classList.remove(classes$6.variantSoldOut);\n          }\n        });\n      }\n    }\n\n    updateNotificationForm(formState) {\n      if (!this.productNotification) return;\n\n      const variantTitle = this.productNotification.querySelector(\n        selectors$b.variantTitle,\n      );\n      const notificationProduct = this.productNotification.querySelector(\n        selectors$b.notificationProduct,\n      );\n      if (variantTitle != null) {\n        variantTitle.textContent = formState.variant.title;\n        notificationProduct.value = formState.variant.name;\n      }\n    }\n\n    updateHistoryState(formState) {\n      const variant = formState.variant;\n      const plan = formState.plan;\n      const location = window.location.href;\n      if (variant && location.includes(\"/product\")) {\n        const url = new window.URL(location);\n        const params = url.searchParams;\n        params.set(\"variant\", variant.id);\n        if (\n          plan &&\n          plan.detail &&\n          plan.detail.id &&\n          this.productState.hasPlan\n        ) {\n          params.set(\"selling_plan\", plan.detail.id);\n        } else {\n          params.delete(\"selling_plan\");\n        }\n        url.search = params.toString();\n        const urlString = url.toString();\n        window.history.replaceState({ path: urlString }, \"\", urlString);\n      }\n    }\n\n    updateRemaining(formState) {\n      const variant = formState.variant;\n\n      this.remainingWrapper?.classList.remove(\n        classes$6.remainingIn,\n        classes$6.remainingOut,\n        classes$6.remainingUnavailable,\n        classes$6.remainingLow,\n      );\n\n      if (variant && this.remainingWrapper && this.remainingJSON) {\n        const remaining = this.remainingJSON[variant.id];\n\n        if (remaining === \"out\" || remaining < 1) {\n          this.remainingWrapper.classList.add(classes$6.remainingOut);\n        }\n\n        if (remaining === \"in\" || remaining >= this.remainingMaxInt) {\n          this.remainingWrapper.classList.add(classes$6.remainingIn);\n        }\n\n        if (\n          remaining === \"low\" ||\n          (remaining > 0 && remaining < this.remainingMaxInt)\n        ) {\n          this.remainingWrapper.classList.add(classes$6.remainingLow);\n\n          if (this.remainingCount) {\n            this.remainingCount.innerHTML = remaining;\n          }\n        }\n      } else if (!variant && this.remainingWrapper) {\n        this.remainingWrapper.classList.add(classes$6.remainingUnavailable);\n      }\n    }\n\n    optionImagesWidth() {\n      if (!this.variantButtons) return;\n\n      let maxItemWidth = 0;\n\n      requestAnimationFrame(() => {\n        this.variantOptionImages.forEach((item) => {\n          const itemWidth = item.clientWidth;\n          if (itemWidth > maxItemWidth) {\n            maxItemWidth = itemWidth;\n          }\n        });\n\n        this.variantButtons.forEach((item) => {\n          item.style?.setProperty(\"--option-image-width\", maxItemWidth + \"px\");\n        });\n      });\n    }\n\n    getBaseUnit(variant) {\n      return variant.unit_price_measurement.reference_value === 1\n        ? variant.unit_price_measurement.reference_unit\n        : variant.unit_price_measurement.reference_value +\n            variant.unit_price_measurement.reference_unit;\n    }\n\n    subsToggleListeners() {\n      const toggles = this.container.querySelectorAll(selectors$b.subsToggle);\n\n      toggles.forEach((toggle) => {\n        toggle.addEventListener(\n          \"change\",\n          function (e) {\n            const val = e.target.value.toString();\n            const selected = this.container.querySelector(\n              `[${selectors$b.subsChild}=\"${val}\"]`,\n            );\n            const groups = this.container.querySelectorAll(\n              `[${selectors$b.subsChild}]`,\n            );\n            if (selected) {\n              selected.classList.remove(classes$6.hidden);\n              const first = selected.querySelector(`[name=\"selling_plan\"]`);\n              first.checked = true;\n              first.dispatchEvent(new Event(\"change\"));\n            }\n            groups.forEach((group) => {\n              if (group !== selected) {\n                group.classList.add(classes$6.hidden);\n                const plans = group.querySelectorAll(`[name=\"selling_plan\"]`);\n                plans.forEach((plan) => {\n                  plan.checked = false;\n                  plan.dispatchEvent(new Event(\"change\"));\n                });\n              }\n            });\n          }.bind(this),\n        );\n      });\n    }\n\n    updateSaleText(formState) {\n      if (this.productState.planSale) {\n        this.updateSaleTextSubscription(formState);\n      } else if (this.productState.onSale) {\n        this.updateSaleTextStandard(formState);\n      } else if (this.priceOffWrap) {\n        this.priceOffWrap.classList.add(classes$6.hidden);\n      }\n    }\n\n    isVariantFinalSale(variant) {\n      const metafieldsData = document.querySelector(\n        selectors$b.variantFinalSaleMeta,\n      )?.textContent;\n      if (!metafieldsData) return;\n\n      const variantsMetafields = JSON.parse(metafieldsData);\n      let variantIsFinalSale = false;\n\n      variantsMetafields.forEach((variantMetafield) => {\n        if (Number(variantMetafield.variant_id) === variant.id) {\n          variantIsFinalSale = variantMetafield.metafield_value === \"true\";\n        }\n      });\n\n      return variantIsFinalSale;\n    }\n\nupdateSaleTextStandard(formState) {\n  const variant = formState.variant;\n  const finalSaleBadge = this.priceOffWrap?.querySelector(\n    selectors$b.finalSaleBadge,\n  );\n  const priceOffBadge = this.priceOffWrap?.querySelector(\n    selectors$b.priceOffBadge,\n  );\n  const comparePrice = variant?.compare_at_price;\n  const salePrice = variant?.price;\n\n  // Set sale type text if element exists\n  if (this.priceOffType) {\n    this.priceOffType.innerHTML = window.theme.strings.sale || \"sale\";\n  }\n\n  // If priceOffBadge or priceOffAmount are missing, hide priceOffBadge and exit early\n  if (\n    !priceOffBadge ||\n    !this.priceOffAmount ||\n    !comparePrice ||\n    !salePrice ||\n    comparePrice <= salePrice\n  ) {\n    priceOffBadge?.classList.add(classes$6.hidden);\n  } else {\n    // Calculate and display discount percentage\n    const discountInt = Math.round(\n      ((comparePrice - salePrice) / comparePrice) * 100,\n    );\n    this.priceOffAmount.innerHTML = `${discountInt}%`;\n    priceOffBadge.classList.remove(classes$6.hidden);\n  }\n\n  // Display or hide the final sale badge\n  const isFinalSale =\n    this.priceOffWrap?.hasAttribute(attributes$8.finalSale) ||\n    this.isVariantFinalSale(variant);\n  if (finalSaleBadge) {\n    finalSaleBadge.classList.toggle(classes$6.hidden, !isFinalSale);\n  }\n\n  this.priceOffWrap?.classList.remove(classes$6.hidden);  // \u2190 added ?.\n}\n\n    updateSubscriptionText(formState) {\n      if (formState.plan && this.planDescription) {\n        this.planDescription.innerHTML = formState.plan.detail.description;\n        this.planDescription.classList.remove(classes$6.hidden);\n      } else if (this.planDescription) {\n        this.planDescription.classList.add(classes$6.hidden);\n      }\n    }\n\n    updateSaleTextSubscription(formState) {\n      if (this.priceOffType) {\n        this.priceOffType.innerHTML =\n          window.theme.strings.subscription || \"subscripton\";\n      }\n\n      if (this.priceOffAmount && this.priceOffWrap) {\n        const adjustment = formState.plan.detail.price_adjustments[0];\n        const discount = adjustment.value;\n        if (adjustment && adjustment.value_type === \"percentage\") {\n          this.priceOffAmount.innerHTML = `${discount}%`;\n        } else {\n          this.priceOffAmount.innerHTML = formatMoney(\n            discount,\n            theme.moneyFormat,\n          );\n        }\n        this.priceOffWrap.classList.remove(classes$6.hidden);\n      }\n    }\n\n    updateProductPrices(formState) {\n      const variant = formState.variant;\n      const plan = formState.plan;\n      const priceWrappers = this.container.querySelectorAll(\n        selectors$b.priceWrapper,\n      );\n\n      priceWrappers.forEach((wrap) => {\n        const comparePriceEl = wrap.querySelector(selectors$b.comparePrice);\n        const productPriceEl = wrap.querySelector(selectors$b.productPrice);\n        const comparePriceText = wrap.querySelector(\n          selectors$b.comparePriceText,\n        );\n\n        let comparePrice = \"\";\n        let price = \"\";\n\n        if (this.productState.available) {\n          comparePrice = variant.compare_at_price;\n          price = variant.price;\n        }\n\n        if (this.productState.hasPlan) {\n          price = plan.allocation.price;\n        }\n\n        if (this.productState.planSale) {\n          comparePrice = plan.allocation.compare_at_price;\n          price = plan.allocation.price;\n        }\n\n        if (comparePriceEl) {\n          if (this.productState.onSale || this.productState.planSale) {\n            comparePriceEl.classList.remove(classes$6.hidden);\n            comparePriceText.classList.remove(classes$6.hidden);\n            productPriceEl.classList.add(classes$6.productPriceSale);\n          } else {\n            comparePriceEl.classList.add(classes$6.hidden);\n            comparePriceText.classList.add(classes$6.hidden);\n            productPriceEl.classList.remove(classes$6.productPriceSale);\n          }\n          comparePriceEl.innerHTML = formatMoney(\n            comparePrice,\n            theme.moneyFormat,\n          );\n        }\n\n        productPriceEl.innerHTML =\n          price === 0\n            ? window.theme.strings.free\n            : formatMoney(price, theme.moneyFormat);\n      });\n\n      if (this.hasUnitPricing) {\n        this.updateProductUnits(formState);\n      }\n    }\n\n    updateQuantity(formState) {\n      const variant = formState.variant;\n\n      if (variant && window.variants && window.variants[variant.id]) {\n        this.container\n          .querySelectorAll(selectors$i.quantityInput)\n          .forEach((input) => {\n            input.value = window.variants[variant.id].qty_increment;\n            input.step = window.variants[variant.id].qty_increment;\n            input.min = window.variants[variant.id].qty_increment;\n            input.readOnly = window.variants[variant.id].qty_increment != 1;\n          });\n        this.container\n          .querySelectorAll(selectors$i.quantityPopup)\n          .forEach((popout) => {\n            const items = popout.querySelectorAll(\".select-popout__option\");\n            items.forEach((item, i) => {\n              item.innerHTML =\n                window.variants[variant.id].qty_increment * (i + 1) +\n                (i === items.length - 1 ? \" +\" : \"\");\n              item.setAttribute(\n                \"data-value\",\n                window.variants[variant.id].qty_increment * (i + 1),\n              );\n              if (i === 0) {\n                item.click();\n              }\n            });\n          });\n      }\n    }\n\n    updateProductUnits(formState) {\n      const variant = formState.variant;\n      const plan = formState.plan;\n      let unitPrice = null;\n\n      if (variant && variant.unit_price) {\n        unitPrice = variant.unit_price;\n      }\n      if (plan && plan.allocation && plan.allocation.unit_price) {\n        unitPrice = plan.allocation.unit_price;\n      }\n\n      if (unitPrice) {\n        const base = this.getBaseUnit(variant);\n        const formattedPrice = formatMoney(unitPrice, theme.moneyFormat);\n        this.container.querySelector(selectors$b.unitPrice).innerHTML =\n          formattedPrice;\n        this.container.querySelector(selectors$b.unitBase).innerHTML = base;\n        this.container\n          .querySelector(selectors$b.unitWrapper)\n          .classList.remove(classes$6.hidden);\n      } else {\n        this.container\n          .querySelector(selectors$b.unitWrapper)\n          .classList.add(classes$6.hidden);\n      }\n    }\n\n    updateSku(formState) {\n      if (!this.skuWrapper) return;\n\n      this.skuWrapper.innerHTML = formState.variant.sku\n        ? `<strong>${theme.strings.sku}:</strong> <span>${formState.variant.sku}</span>`\n        : \"\";\n    }\n\n    fireHookEvent(formState) {\n      const variant = formState.variant;\n      const displayVariant =\n        variant || this.getDisplayVariantFromFirstOption(formState);\n      this.container.dispatchEvent(\n        new CustomEvent(\"theme:variant:change\", {\n          detail: {\n            variant: variant,\n            displayVariant: displayVariant,\n          },\n          bubbles: true,\n        }),\n      );\n    }\n\n    getDisplayVariantFromFirstOption(formState) {\n      const product = this.productJSON;\n      if (!product?.variants?.length || !formState?.options?.length)\n        return null;\n      // ProductFormReader.options() returns [{name, value}, ...], not bare strings.\n      const first = formState.options[0];\n      const firstOptionValue = typeof first === \"string\" ? first : first?.value;\n      if (!firstOptionValue) return null;\n      return (\n        product.variants.find(\n          (v) => v.option1 === firstOptionValue && v.available,\n        ) ||\n        product.variants.find((v) => v.option1 === firstOptionValue) ||\n        null\n      );\n    }\n\n    /**\n     * Tracks aspects of the product state that are relevant to UI updates\n     * @param {object} evt - variant change event\n     * @return {object} productState - represents state of variant + plans\n     *  productState.available - current variant and selling plan options result in valid offer\n     *  productState.soldOut - variant is sold out\n     *  productState.onSale - variant is on sale\n     *  productState.showUnitPrice - variant has unit price\n     *  productState.requiresPlan - all the product variants requires a selling plan\n     *  productState.hasPlan - there is a valid selling plan\n     *  productState.planSale - plan has a discount to show next to price\n     *  productState.planPerDelivery - plan price does not equal per_delivery_price - a prepaid subscription\n     */\n    setProductState(dataset) {\n      const variant = dataset.variant;\n      const plan = dataset.plan;\n\n      const productState = {\n        available: true,\n        soldOut: false,\n        onSale: false,\n        showUnitPrice: false,\n        requiresPlan: false,\n        hasPlan: false,\n        planPerDelivery: false,\n        planSale: false,\n      };\n\n      if (!variant || (variant.requires_selling_plan && !plan)) {\n        productState.available = false;\n      } else {\n        if (!variant.available) {\n          productState.soldOut = true;\n        }\n\n        if (variant.compare_at_price > variant.price) {\n          productState.onSale = true;\n        }\n\n        if (variant.unit_price) {\n          productState.showUnitPrice = true;\n        }\n\n        if (this.product && this.product.requires_selling_plan) {\n          productState.requiresPlan = true;\n        }\n\n        if (plan && this.subPrices) {\n          productState.hasPlan = true;\n          if (plan.allocation.per_delivery_price !== plan.allocation.price) {\n            productState.planPerDelivery = true;\n          }\n          if (variant.price > plan.allocation.price) {\n            productState.planSale = true;\n          }\n        }\n      }\n      return productState;\n    }\n\n    updateProductImage(evt) {\n      const variant = evt.dataset.variant;\n      const displayVariant =\n        variant || this.getDisplayVariantFromFirstOption(evt.dataset);\n\n      if (displayVariant && displayVariant.featured_media) {\n        const selectedImage = this.container.querySelector(\n          `[${attributes$8.imageId}=\"${displayVariant.featured_media.id}\"]`,\n        );\n        // If we have a mobile breakpoint or the tall layout is disabled,\n        // just switch the slideshow.\n\n        if (selectedImage) {\n          const selectedImageId = selectedImage.getAttribute(\n            attributes$8.mediaId,\n          );\n          const isDesktopView = isDesktop();\n\n          selectedImage.dispatchEvent(\n            new CustomEvent(\"theme:media:select\", {\n              bubbles: true,\n              detail: {\n                id: selectedImageId,\n              },\n            }),\n          );\n\n          if (\n            isDesktopView &&\n            !this.productImages.hasAttribute(attributes$8.faderDesktop) &&\n            this.variantImageScroll &&\n            this.isColorOptionChange(evt)\n          ) {\n            const selectedImageTop = selectedImage.getBoundingClientRect().top;\n\n            // Scroll to variant image\n            document.dispatchEvent(\n              new CustomEvent(\"theme:tooltip:close\", {\n                bubbles: false,\n                detail: {\n                  hideTransition: false,\n                },\n              }),\n            );\n\n            scrollTo(selectedImageTop);\n          }\n\n          if (\n            !isDesktopView &&\n            !this.productImages.hasAttribute(attributes$8.faderMobile)\n          ) {\n            this.productMediaList.scrollTo({\n              left: selectedImage.offsetLeft,\n            });\n\n            // Scroll to product images section on mobile after color variant change only\n            if (this.variantImageScroll && this.isColorOptionChange(evt)) {\n              const productImagesTop =\n                this.productImages.getBoundingClientRect().top;\n              scrollTo(productImagesTop);\n            }\n          }\n        }\n      }\n    }\n\n    isColorOptionChange(evt) {\n      // Check if the changed option is a color/swatch option\n      // by looking for the selector-wrapper--fullwidth class which indicates swatch options\n      const changedElement = evt.target;\n      const optionWrapper = changedElement.closest(\n        \".selector-wrapper--fullwidth\",\n      );\n      return optionWrapper !== null;\n    }\n\n    updateLegend(formState) {\n      const variant = formState.variant;\n      if (variant) {\n        const optionValues = this.container.querySelectorAll(\n          selectors$b.optionValue,\n        );\n        if (optionValues.length) {\n          optionValues.forEach((optionValue) => {\n            const selectorWrapper = optionValue.closest(\n              selectors$b.optionPosition,\n            );\n            if (selectorWrapper) {\n              const optionPosition = selectorWrapper.getAttribute(\n                attributes$8.optionPosition,\n              );\n              const optionIndex = parseInt(optionPosition, 10) - 1;\n              const selectedOptionValue = variant.options[optionIndex];\n              optionValue.innerHTML = selectedOptionValue;\n            }\n          });\n        }\n      }\n    }\n  }\n\n  const selectors$a = {\n    open: \"[data-popup-open]\",\n    close: \"[data-popup-close]\",\n    focusable:\n      'button, [href], select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n  };\n\n  const attributes$7 = {\n    closing: \"closing\",\n  };\n\n  class PopupActions {\n    constructor(popup, holder, showModal = true, scrollLock = true) {\n      this.popup = popup;\n      this.holder = holder;\n      this.a11y = a11y;\n      this.isAnimating = false;\n      this.showModal = showModal;\n      this.enableScrollLock = scrollLock;\n      this.buttonPopupOpen = this.holder?.querySelector(selectors$a.open);\n\n      this.popupEvents();\n    }\n\n    popupOpen() {\n      if (!this.popup) return;\n\n      this.isAnimating = true;\n\n      // Check if browser supports Dialog tags\n      if (this.showModal && typeof this.popup.showModal === \"function\") {\n        this.popup.showModal();\n      } else if (!this.showModal && typeof this.popup.show === \"function\") {\n        this.popup.show();\n      } else {\n        this.popup.setAttribute(\"open\", \"\");\n      }\n\n      this.popup.removeAttribute(\"inert\");\n      this.popup.setAttribute(\"aria-hidden\", false);\n      this.popup.focus(); // Focus <dialog> tag element to prevent immediate closing on Escape keypress\n\n      if (this.enableScrollLock) {\n        document.dispatchEvent(\n          new CustomEvent(\"theme:scroll:lock\", { bubbles: true }),\n        );\n      }\n\n      waitForAnimationEnd(this.popup).then(() => {\n        this.isAnimating = false;\n\n        if (this.enableScrollLock) {\n          this.a11y.trapFocus(this.popup);\n        }\n\n        const focusTarget =\n          this.popup.querySelector(\"[autofocus]\") ||\n          this.popup.querySelector(selectors$a.focusable);\n        focusTarget?.focus();\n      });\n    }\n\n    popupClose() {\n      if (this.isAnimating || !this.popup || this.popup.hasAttribute(\"inert\")) {\n        return;\n      }\n\n      if (!this.popup.hasAttribute(attributes$7.closing)) {\n        this.popup.setAttribute(attributes$7.closing, \"\");\n        this.isAnimating = true;\n\n        waitForAnimationEnd(this.popup).then(() => {\n          this.isAnimating = false;\n          this.popupClose();\n        });\n\n        return;\n      }\n\n      // Check if browser supports Dialog tags\n      if (typeof this.popup.close === \"function\") {\n        this.popup.close();\n      } else {\n        this.popup.removeAttribute(\"open\");\n        this.popup.setAttribute(\"aria-hidden\", true);\n      }\n\n      this.popupCloseActions();\n    }\n\n    popupCloseActions() {\n      if (this.popup.hasAttribute(\"inert\")) return;\n\n      this.popup.setAttribute(\"inert\", \"\");\n      this.popup.setAttribute(\"aria-hidden\", true);\n      this.popup.removeAttribute(attributes$7.closing);\n\n      // Unlock scroll if no other popups & modals are open\n      if (!hasOpenModals() && this.enableScrollLock) {\n        document.dispatchEvent(\n          new CustomEvent(\"theme:scroll:unlock\", { bubbles: true }),\n        );\n      }\n\n      this.popup.dispatchEvent(\n        new CustomEvent(\"theme:popup:onclose\", { bubbles: false }),\n      );\n\n      if (this.enableScrollLock) {\n        this.a11y.removeTrapFocus();\n        this.a11y.autoFocusLastElement();\n      }\n    }\n\n    popupEvents() {\n      if (!this.popup) return;\n\n      // Open button click event\n      this.buttonPopupOpen?.addEventListener(\"click\", (e) => {\n        e.preventDefault();\n        this.popupOpen();\n        window.a11y.lastElement = this.buttonPopupOpen;\n      });\n\n      // Close button click event\n      const closeButtons = this.popup.querySelectorAll(selectors$a.close);\n      if (closeButtons.length) {\n        closeButtons.forEach((closeButton) => {\n          closeButton.addEventListener(\"click\", (e) => {\n            e.preventDefault();\n            this.popupClose();\n          });\n        });\n      }\n\n      // Close dialog on click outside content\n      if (this.showModal) {\n        this.popup.addEventListener(\"click\", (event) => {\n          if (event.target.nodeName === \"DIALOG\" && event.type === \"click\") {\n            this.popupClose();\n          }\n        });\n      }\n\n      // Close dialog on click ESC key pressed\n      this.popup.addEventListener(\"keydown\", (event) => {\n        if (event.code === \"Escape\") {\n          event.preventDefault();\n          this.popupClose();\n        }\n      });\n\n      this.popup.addEventListener(\"close\", () => this.popupCloseActions());\n    }\n  }\n\n  const selectors$9 = {\n    dialog: \"dialog\",\n  };\n\n  class ProductModal extends HTMLElement {\n    constructor() {\n      super();\n    }\n\n    connectedCallback() {\n      new PopupActions(\n        this.querySelector(selectors$9.dialog),\n        this,\n        true,\n        true,\n      );\n    }\n  }\n\n  class ProductModel extends DeferredMedia {\n    constructor() {\n      super();\n    }\n\n    loadContent() {\n      super.loadContent();\n\n      Shopify.loadFeatures([\n        {\n          name: \"model-viewer-ui\",\n          version: \"1.0\",\n          onLoad: this.setupModelViewerUI.bind(this),\n        },\n      ]);\n    }\n\n    setupModelViewerUI(errors) {\n      if (errors) return;\n\n      this.modelViewerUI = new Shopify.ModelViewerUI(\n        this.querySelector(\"model-viewer\"),\n      );\n    }\n  }\n\n  window.ProductModel = {\n    loadShopifyXR() {\n      Shopify.loadFeatures([\n        {\n          name: \"shopify-xr\",\n          version: \"1.0\",\n          onLoad: this.setupShopifyXR.bind(this),\n        },\n      ]);\n    },\n\n    setupShopifyXR(errors) {\n      if (errors) return;\n\n      if (!window.ShopifyXR) {\n        document.addEventListener(\"shopify_xr_initialized\", () =>\n          this.setupShopifyXR(),\n        );\n        return;\n      }\n\n      document.querySelectorAll('[id^=\"ModelJSON-\"]').forEach((modelJSON) => {\n        window.ShopifyXR.addModels(JSON.parse(modelJSON.textContent));\n        modelJSON.remove();\n      });\n      window.ShopifyXR.setupXRElements();\n    },\n  };\n\n  window.addEventListener(\"DOMContentLoaded\", () => {\n    if (window.ProductModel) window.ProductModel.loadShopifyXR();\n  });\n\n  const selectors$8 = {\n    addToCart: \"[data-add-to-cart]\",\n    productImage: \"[data-product-image]\",\n    productJson: \"[data-product-json]\",\n    form: \"[data-product-form]\",\n    cartBar: \"#cart-bar\",\n    productNotificationPopupButton: \"[data-popup-open]\",\n    productSubmitAdd: \".product__submit__add\",\n    formWrapper: \"[data-form-wrapper]\",\n    productVariants: \"[data-product-variants]\",\n    slider: \"[data-slider]\",\n  };\n\n  const classes$5 = {\n    expanded: \"is-expanded\",\n    visible: \"is-visible\",\n    loading: \"is-loading\",\n    added: \"is-added\",\n  };\n\n  const attributes$6 = {\n    cartBarEnabled: \"data-cart-bar-enabled\",\n    cartBarAdd: \"data-add-to-cart-bar\",\n    cartBarScroll: \"data-cart-bar-scroll\",\n    cartBarProductNotification: \"data-cart-bar-product-notification\",\n    sectionId: \"data-section-id\",\n    sliderIndex: \"data-slider-index\",\n  };\n\n  const sections$7 = {};\n\n  /**\n   * Product section constructor.\n   * @param {string} container - selector for the section container DOM element\n   */\n  class Product {\n    constructor(section) {\n      this.section = section;\n      this.container = section.container;\n      this.id = this.container.getAttribute(attributes$6.sectionId);\n      this.sliders = this.container.querySelectorAll(selectors$8.slider);\n      this.slider = [];\n      this.formWrapper = this.container.querySelector(selectors$8.formWrapper);\n      this.cartBarEnabled = this.container.hasAttribute(\n        attributes$6.cartBarEnabled,\n      );\n      this.cartBar = this.container.querySelector(selectors$8.cartBar);\n      this.setCartBarHeight = this.setCartBarHeight.bind(this);\n      this.scrollToTop = this.scrollToTop.bind(this);\n      this.toggleCartBarOnScroll = this.toggleCartBarOnScroll.bind(this);\n      this.unlockTimer = 0;\n      this.accessibility = a11y;\n\n      // Stop parsing if we don't have the product json script tag when loading\n      // section in the Theme Editor\n      const productJson = this.container.querySelector(selectors$8.productJson);\n      if ((productJson && !productJson.innerHTML) || !productJson) {\n        return;\n      }\n\n      const productJsonHandle = JSON.parse(productJson.innerHTML).handle;\n      let recentObj = {};\n      if (productJsonHandle) {\n        recentObj = {\n          handle: productJsonHandle,\n        };\n      }\n\n      // Record recently viewed products when the product page is loading\n      Shopify.Products.recordRecentlyViewed(recentObj);\n\n      this.form = this.container.querySelector(selectors$8.form);\n\n      if (this.sliders.length) {\n        this.sliders.forEach((slider, index) => {\n          slider.setAttribute(attributes$6.sliderIndex, index);\n          this.slider.push(new Slider(this.container, slider));\n        });\n      }\n\n      if (this.cartBarEnabled) {\n        this.initCartBar();\n        this.setCartBarHeight();\n\n        document.addEventListener(\"theme:scroll\", this.toggleCartBarOnScroll);\n        document.addEventListener(\"theme:resize\", this.setCartBarHeight);\n      }\n    }\n\n    initCartBar() {\n      // Submit product form on cart bar button click\n      this.cartBarBtns = this.cartBar.querySelectorAll(\n        selectors$8.productSubmitAdd,\n      );\n      if (this.cartBarBtns.length > 0) {\n        this.cartBarBtns.forEach((button) => {\n          button.addEventListener(\"click\", (e) => {\n            e.preventDefault();\n\n            if (e.currentTarget.hasAttribute(attributes$6.cartBarAdd)) {\n              if (this.cartBarEnabled) {\n                e.currentTarget.classList.add(classes$5.loading);\n                e.currentTarget.setAttribute(\"disabled\", \"disabled\");\n              }\n\n              this.form.querySelector(selectors$8.addToCart).dispatchEvent(\n                new Event(\"click\", {\n                  bubbles: true,\n                }),\n              );\n            } else if (\n              e.currentTarget.hasAttribute(attributes$6.cartBarScroll)\n            ) {\n              this.scrollToTop();\n            } else if (\n              e.currentTarget.hasAttribute(\n                attributes$6.cartBarProductNotification,\n              )\n            ) {\n              this.form\n                .querySelector(selectors$8.productNotificationPopupButton)\n                ?.dispatchEvent(new Event(\"click\"));\n            }\n          });\n\n          if (button.hasAttribute(attributes$6.cartBarAdd)) {\n            document.addEventListener(\n              \"theme:product:add-error\",\n              this.scrollToTop,\n            );\n          }\n        });\n      }\n\n      this.setCartBarHeight();\n    }\n\n    scrollToTop() {\n      const productVariants = this.container.querySelector(\n        selectors$8.productVariants,\n      );\n      const scrollTarget = isDesktop()\n        ? this.container\n        : productVariants\n          ? productVariants\n          : this.form;\n      const scrollTargetTop = scrollTarget.getBoundingClientRect().top;\n\n      scrollTo(isDesktop() ? scrollTargetTop : scrollTargetTop - 10);\n    }\n\n    toggleCartBarOnScroll() {\n      const scrolled = window.scrollY;\n      const element =\n        theme.variables.productPageSticky && this.formWrapper\n          ? this.formWrapper\n          : this.form;\n\n      if (element && this.cartBar) {\n        const formOffset = element.offsetTop;\n        const formHeight = element.offsetHeight;\n        const checkPosition = scrolled > formOffset + formHeight;\n\n        this.cartBar.classList.toggle(classes$5.visible, checkPosition);\n      }\n    }\n\n    setCartBarHeight() {\n      const cartBarHeight = this.cartBar.offsetHeight;\n\n      document.documentElement.style.setProperty(\n        \"--cart-bar-height\",\n        `${cartBarHeight}px`,\n      );\n    }\n\n    onUnload() {\n      document.removeEventListener(\"theme:product:add-error\", this.scrollToTop);\n\n      if (this.cartBarEnabled) {\n        document.removeEventListener(\n          \"theme:scroll\",\n          this.toggleCartBarOnScroll,\n        );\n        document.removeEventListener(\"theme:resize\", this.setCartBarHeight);\n      }\n    }\n\n    onBlockSelect(e) {\n      const slider = e.srcElement.closest(selectors$8.slider);\n      if (slider && this.slider.length) {\n        const sliderIndex = slider.hasAttribute(attributes$6.sliderIndex)\n          ? slider.getAttribute(attributes$6.sliderIndex)\n          : 0;\n        if (!this.slider[sliderIndex]) return;\n        this.slider[sliderIndex].onBlockSelect(e);\n      }\n    }\n\n    onBlockDeselect(e) {\n      const slider = e.srcElement.closest(selectors$8.slider);\n      if (slider && this.slider.length) {\n        const sliderIndex = slider.hasAttribute(attributes$6.sliderIndex)\n          ? slider.getAttribute(attributes$6.sliderIndex)\n          : 0;\n        if (!this.slider[sliderIndex]) return;\n        this.slider[sliderIndex].onBlockDeselect(e);\n      }\n    }\n  }\n\n  const productSection = {\n    onLoad() {\n      sections$7[this.id] = new Product(this);\n    },\n    onUnload(e) {\n      sections$7[this.id].onUnload(e);\n    },\n    onBlockSelect(e) {\n      sections$7[this.id].onBlockSelect(e);\n    },\n    onBlockDeselect(e) {\n      sections$7[this.id].onBlockDeselect(e);\n    },\n  };\n\n  register(\"product\", [\n    productSection,\n    tooltipSection,\n    tabs,\n    productStickySection,\n  ]);\n\n  if (!customElements.get(\"product-form\")) {\n    customElements.define(\"product-form\", ProductForm);\n  }\n\n  if (!customElements.get(\"product-modal\")) {\n    customElements.define(\"product-modal\", ProductModal);\n  }\n\n  if (!customElements.get(\"product-model\")) {\n    customElements.define(\"product-model\", ProductModel);\n  }\n\n  if (!customElements.get(\"product-siblings\")) {\n    customElements.define(\"product-siblings\", ProductSiblings);\n  }\n\n  if (!customElements.get(\"radio-swatch\")) {\n    customElements.define(\"radio-swatch\", RadioSwatch);\n  }\n\n  class BulkOrder extends HTMLElement {\n    constructor() {\n      super();\n      this.updateSubtotal = this.updateSubtotal.bind(this);\n\n      this.container = this.closest(selectors$b.section);\n      if (this.container) {\n        this.handleVariantChange = this.handleVariantChange.bind(this);\n        this.container.addEventListener(\n          \"theme:variant:change\",\n          this.handleVariantChange,\n        );\n      }\n    }\n\n    connectedCallback() {\n      this.subtotalElement = this.querySelector(\"[data-subtotal]\");\n      this.lines = this.querySelectorAll(\".order-line\");\n\n      const observer = new MutationObserver((mutations) => {\n        mutations.forEach((mutation) => {\n          if (\n            mutation.type === \"attributes\" &&\n            mutation.attributeName === \"disabled\"\n          ) {\n            this.updateSubtotal();\n          }\n        });\n      });\n\n      this.querySelectorAll(\".quantity__input\").forEach((input) => {\n        input.addEventListener(\"input\", this.updateSubtotal);\n        observer.observe(input, {\n          attributes: true,\n          attributeFilter: [\"disabled\"],\n        });\n      });\n\n      this.querySelectorAll(\"quantity-counter button\").forEach((button) =>\n        button.addEventListener(\"click\", this.updateSubtotal),\n      );\n\n      this.querySelectorAll(\n        'button[type=\"submit\"], input[type=\"submit\"]',\n      ).forEach((button) => {\n        button.addEventListener(\"click\", (e) => {\n          e.preventDefault();\n\n          document.dispatchEvent(\n            new CustomEvent(\"theme:cart:add\", {\n              detail: {\n                button: button,\n              },\n              bubbles: false,\n            }),\n          );\n\n          window.accessibility.lastElement = button;\n        });\n      });\n    }\n\n    updateSubtotal() {\n      setTimeout(() => {\n        let total = 0,\n          totalQuantity = 0,\n          inputsDisabled = false;\n\n        this.lines.forEach((line, index) => {\n          const input = line.querySelector(\".quantity__input\");\n          const quantity = parseInt(input?.value, 10) || 0;\n          const lineSubtotalElements = line.querySelectorAll(\n            \"[data-line-subtotal]\",\n          );\n          const rawPrice = parseFloat(\n            lineSubtotalElements[0]?.getAttribute(\"data-raw-price\"),\n          );\n          const lineSubtotal = quantity * rawPrice;\n\n          lineSubtotalElements.forEach((el) => {\n            el.textContent = formatMoney(lineSubtotal, theme.moneyFormat);\n          });\n\n          if (input?.disabled) {\n            inputsDisabled = true;\n          }\n\n          total += lineSubtotal;\n          totalQuantity += quantity;\n        });\n\n        this.subtotalElement.textContent = formatMoney(\n          total,\n          theme.moneyFormat,\n        );\n\n        this.querySelectorAll(\n          'button[type=\"submit\"], input[type=\"submit\"]',\n        ).forEach((button) => {\n          button.disabled = totalQuantity === 0 || inputsDisabled;\n          button.classList.toggle(\n            \"is-loading\",\n            totalQuantity > 0 && inputsDisabled,\n          );\n        });\n      }, 200);\n    }\n\n    handleVariantChange(e) {\n      const sectionId = this.container?.getAttribute(\"data-section-id\");\n      if (!sectionId) return;\n\n      const variantId = e?.detail?.variant?.id || e?.detail?.displayVariant?.id;\n      if (!variantId) return;\n\n      if (this.abortController) this.abortController.abort();\n      this.abortController = new AbortController();\n\n      this.setAttribute(\"data-loading\", \"\");\n\n      fetch(\n        `${window.location.pathname}?section_id=${sectionId}&variant=${variantId}`,\n        {\n          signal: this.abortController.signal,\n        },\n      )\n        .then((res) => res.text())\n        .then((data) => {\n          const parser = new DOMParser();\n          const doc = parser.parseFromString(data, \"text/html\");\n          const bulkOrder = doc.querySelector(\"bulk-order\");\n          if (bulkOrder && this.parentNode) {\n            this.parentNode.replaceChild(bulkOrder, this);\n          } else {\n            this.removeAttribute(\"data-loading\");\n          }\n        })\n        .catch((err) => {\n          if (err.name !== \"AbortError\") {\n            console.error(\"BulkOrder variant fetch failed:\", err);\n            this.removeAttribute(\"data-loading\");\n          }\n        });\n    }\n  }\n\n  customElements.define(\"bulk-order\", BulkOrder);\n\n  const selectors$7 = {\n    apiRelatedProductsTemplate: \"[data-api-related-template]\",\n    relatedSection: \"[data-related-section]\",\n    relatedProduct: \"[data-grid-item]\",\n    recentlyViewed: \"[data-recent-wrapper]\",\n    recentlyViewedWrapper: \"[data-recently-viewed-wrapper]\",\n    section: \"[data-section-type]\",\n    productItem: \".product-item\",\n    slider: \"grid-slider\",\n  };\n\n  const attributes$5 = {\n    limit: \"data-limit\",\n    minimum: \"data-minimum\",\n    productId: \"data-product-id\",\n  };\n\n  const classes$4 = {\n    isHidden: \"is-hidden\",\n    gridMobileSlider: \"grid--mobile-slider\",\n  };\n\n  const sections$6 = {};\n\n  class Related {\n    constructor(section) {\n      this.section = section;\n      this.sectionId = section.id;\n      this.container = section.container;\n      this.relatedItems = 0;\n\n      this.init();\n    }\n\n    init() {\n      this.loadRelatedProducts();\n      this.loadRecentlyViewedProducts();\n    }\n\n    loadRelatedProducts() {\n      const relatedSection = this.container.querySelector(\n        selectors$7.relatedSection,\n      );\n      if (!relatedSection) return;\n\n      const productId = relatedSection.getAttribute(attributes$5.productId);\n      const limit = relatedSection.getAttribute(attributes$5.limit);\n      const requestUrl = `${window.theme.routes.product_recommendations_url}?section_id=api-product-recommendation&limit=${limit}&product_id=${productId}&intent=related`;\n\n      fetch(requestUrl)\n        .then((response) => response.text())\n        .then((data) =>\n          this.handleRelatedProductsResponse(data, relatedSection),\n        )\n        .catch(() => this.hideSection(relatedSection));\n    }\n\n    handleRelatedProductsResponse(data, relatedSection) {\n      const relatedContent = document.createElement(\"div\");\n      relatedContent.innerHTML = new DOMParser()\n        .parseFromString(data, \"text/html\")\n        .querySelector(selectors$7.apiRelatedProductsTemplate).innerHTML;\n      const relatedProducts = relatedContent.querySelectorAll(\n        selectors$7.relatedProduct,\n      ).length;\n\n      if (relatedProducts > 0) {\n        relatedSection.innerHTML = relatedContent.innerHTML;\n        this.relatedItems = relatedProducts;\n\n        const styleMobile = parseInt(\n          relatedSection.style.getPropertyValue(\"--COLUMNS-MOBILE\"),\n        );\n        if (styleMobile === 0) {\n          const addedProduct = relatedSection.querySelector(\n            selectors$7.relatedProduct,\n          );\n          addedProduct.parentElement.classList.add(classes$4.gridMobileSlider);\n        }\n      } else {\n        this.hideSection(relatedSection);\n      }\n\n      this.updateVisibility();\n    }\n\n    loadRecentlyViewedProducts() {\n      const recentlyViewedHolder = this.container.querySelector(\n        selectors$7.recentlyViewed,\n      );\n      const howManyToShow =\n        parseInt(recentlyViewedHolder.getAttribute(attributes$5.limit)) || 4;\n      const minimumNumberProducts =\n        parseInt(recentlyViewedHolder.getAttribute(attributes$5.minimum)) || 4;\n\n      Shopify.Products.showRecentlyViewed({\n        howManyToShow,\n        wrapperId: `recently-viewed-products-${this.sectionId}`,\n        section: this.section,\n        target: \"api-product-grid-item\",\n        onComplete: (wrapper, section) =>\n          this.handleRecentlyViewedResponse(\n            wrapper,\n            section,\n            recentlyViewedHolder,\n            minimumNumberProducts,\n          ),\n      });\n    }\n\n    handleRecentlyViewedResponse(\n      wrapper,\n      section,\n      recentlyViewedHolder,\n      minimumNumberProducts,\n    ) {\n      const container = section.container;\n      if (!container) return;\n\n      const recentlyViewedWrapper = container.querySelector(\n        selectors$7.recentlyViewedWrapper,\n      );\n      const recentProducts = wrapper.querySelectorAll(selectors$7.productItem);\n      const slider = recentlyViewedHolder.querySelector(selectors$7.slider);\n      const checkRecentInRelated =\n        !recentlyViewedWrapper && recentProducts.length > 0;\n      const checkRecentOutsideRelated =\n        recentlyViewedWrapper && recentProducts.length >= minimumNumberProducts;\n\n      if (checkRecentInRelated || checkRecentOutsideRelated) {\n        if (checkRecentOutsideRelated) {\n          recentlyViewedWrapper.classList.remove(classes$4.isHidden);\n        }\n\n        recentlyViewedHolder.classList.remove(classes$4.isHidden);\n        recentlyViewedHolder.dispatchEvent(\n          new CustomEvent(\"theme:tab:check\", { bubbles: true }),\n        );\n\n        if (slider) {\n          slider.dispatchEvent(\n            new CustomEvent(\"theme:grid-slider:init\", { bubbles: true }),\n          );\n        }\n      }\n\n      this.updateVisibility();\n    }\n\n    hideSection(section) {\n      section.dispatchEvent(\n        new CustomEvent(\"theme:tab:hide\", { bubbles: true }),\n      );\n    }\n\n    updateVisibility() {\n      const currentProductsCount = Shopify.Products.getConfig().howManyToShow;\n      const shouldHideSection =\n        currentProductsCount < 1 && this.relatedItems < 1;\n\n      this.container.classList.toggle(classes$4.isHidden, shouldHideSection);\n    }\n  }\n\n  const relatedSection = {\n    onLoad() {\n      sections$6[this.id] = new Related(this);\n    },\n  };\n\n  register(\"related\", [relatedSection, tabs]);\n\n  register(\"reviews\", [slider]);\n\n  const sections$5 = {};\n\n  const selectors$6 = {\n    sliderLogos: \"[data-slider-logos]\",\n    sliderText: \"[data-slider-text]\",\n    slide: \"[data-slide]\",\n  };\n\n  const classes$3 = {\n    isSelected: \"is-selected\",\n    isInitialized: \"is-initialized\",\n    flickityEnabled: \"flickity-enabled\",\n  };\n\n  const attributes$4 = {\n    slideData: \"data-slide\",\n    slideIndex: \"data-slide-index\",\n  };\n\n  class LogoList {\n    constructor(section) {\n      this.container = section.container;\n      this.slideshowNav = this.container.querySelector(selectors$6.sliderLogos);\n      this.slideshowText = this.container.querySelector(selectors$6.sliderText);\n      this.setSlideshowNavStateOnResize = () => this.setSlideshowNavState();\n      this.flkty = null;\n      this.flktyNav = null;\n      this.logoSlides = this.slideshowNav.querySelectorAll(selectors$6.slide);\n      this.logoSlidesWidth = this.getSlidesWidth();\n\n      this.initSlideshowText();\n      this.initSlideshowNav();\n    }\n\n    getSlidesWidth() {\n      const slidesCount = this.logoSlides.length;\n      const slideWidth = 200; // 200px fixed width\n\n      return slidesCount * slideWidth;\n    }\n\n    initSlideshowText() {\n      if (!this.slideshowText) return;\n\n      this.flkty = new FlickityFade(this.slideshowText, {\n        fade: true,\n        autoPlay: false,\n        prevNextButtons: false,\n        cellAlign: \"left\", // Prevents blurry text on Safari\n        contain: true,\n        pageDots: false,\n        wrapAround: false,\n        selectedAttraction: 0.2,\n        friction: 0.6,\n        draggable: false,\n        accessibility: false,\n        on: {\n          ready: () => this.sliderAccessibility(),\n          change: () => this.sliderAccessibility(),\n        },\n      });\n    }\n\n    sliderAccessibility() {\n      const buttons = this.slideshowText.querySelectorAll(\n        `${selectors$6.slide} a, ${selectors$6.slide} button`,\n      );\n\n      if (buttons.length) {\n        buttons.forEach((button) => {\n          const slide = button.closest(selectors$6.slide);\n          if (slide) {\n            const tabIndex = slide.classList.contains(classes$3.isSelected)\n              ? 0\n              : -1;\n            button.setAttribute(\"tabindex\", tabIndex);\n          }\n        });\n      }\n    }\n\n    initSlideshowNav() {\n      if (!this.slideshowNav) return;\n\n      if (this.logoSlides.length) {\n        this.logoSlides.forEach((logoItem) => {\n          logoItem.addEventListener(\"click\", () => {\n            const index = parseInt(\n              logoItem.getAttribute(attributes$4.slideIndex),\n            );\n            const hasSlider = this.slideshowNav.classList.contains(\n              classes$3.flickityEnabled,\n            );\n\n            if (this.flkty) {\n              this.flkty.select(index);\n            }\n\n            if (hasSlider) {\n              this.flktyNav.select(index);\n              if (!this.slideshowNav.classList.contains(classes$3.isSelected)) {\n                this.flktyNav.playPlayer();\n              }\n            } else {\n              const selectedSlide = this.slideshowNav.querySelector(\n                `.${classes$3.isSelected}`,\n              );\n              if (selectedSlide) {\n                selectedSlide.classList.remove(classes$3.isSelected);\n              }\n              logoItem.classList.add(classes$3.isSelected);\n            }\n          });\n        });\n      }\n\n      this.setSlideshowNavState();\n\n      document.addEventListener(\n        \"theme:resize\",\n        this.setSlideshowNavStateOnResize,\n      );\n    }\n\n    setSlideshowNavState() {\n      const sliderInitialized = this.slideshowNav.classList.contains(\n        classes$3.flickityEnabled,\n      );\n\n      if (this.logoSlidesWidth > getWindowWidth()) {\n        if (!sliderInitialized) {\n          this.slideshowNav.classList.add(classes$3.isInitialized);\n\n          const selectedSlide = this.slideshowNav.querySelector(\n            `.${classes$3.isSelected}`,\n          );\n\n          if (selectedSlide) {\n            selectedSlide.classList.remove(classes$3.isSelected);\n          }\n          this.logoSlides[0].classList.add(classes$3.isSelected);\n\n          // Init slider only once and then listen for watchCSS events\n          if (!this.flktyNav) {\n            this.flktyNav = new Flickity(this.slideshowNav, {\n              autoPlay: 4000,\n              prevNextButtons: false,\n              contain: false,\n              pageDots: false,\n              wrapAround: true,\n              watchCSS: true,\n              selectedAttraction: 0.05,\n              friction: 0.8,\n              initialIndex: 0,\n            });\n\n            this.flktyNav.on(\"deactivate\", () => {\n              this.slideshowNav\n                .querySelector(selectors$6.slide)\n                .classList.add(classes$3.isSelected);\n\n              if (this.flkty) {\n                this.flkty.select(0);\n              }\n            });\n\n            if (this.flkty) {\n              this.flkty.select(0);\n              this.flktyNav.on(\"change\", (index) => this.flkty.select(index));\n            }\n          }\n        }\n      } else if (sliderInitialized) {\n        // This will deactivate the Logos slider without actually destroying it\n        this.slideshowNav.classList.remove(classes$3.isInitialized);\n      }\n    }\n\n    onBlockSelect(evt) {\n      if (!this.slideshowNav) return;\n      const slide = this.slideshowNav.querySelector(\n        `[${attributes$4.slideData}=\"${evt.detail.blockId}\"]`,\n      );\n      const slideIndex = parseInt(slide.getAttribute(attributes$4.slideIndex));\n\n      if (this.slideshowNav.classList.contains(classes$3.flickityEnabled)) {\n        this.flktyNav.select(slideIndex);\n        this.flktyNav.stopPlayer();\n        this.slideshowNav.classList.add(classes$3.isSelected);\n      } else {\n        slide.dispatchEvent(new Event(\"click\"));\n      }\n    }\n\n    onBlockDeselect() {\n      if (\n        this.slideshowNav &&\n        this.slideshowNav.classList.contains(classes$3.flickityEnabled)\n      ) {\n        this.flktyNav.playPlayer();\n        this.slideshowNav.classList.remove(classes$3.isSelected);\n      }\n    }\n\n    onUnload() {\n      document.removeEventListener(\n        \"theme:resize\",\n        this.setSlideshowNavStateOnResize,\n      );\n    }\n  }\n\n  const LogoListSection = {\n    onLoad() {\n      sections$5[this.id] = new LogoList(this);\n    },\n    onUnload(e) {\n      sections$5[this.id].onUnload(e);\n    },\n    onBlockSelect(e) {\n      sections$5[this.id].onBlockSelect(e);\n    },\n    onBlockDeselect(e) {\n      sections$5[this.id].onBlockDeselect(e);\n    },\n  };\n\n  register(\"logos\", [LogoListSection]);\n\n  register(\"slideshow\", [slider]);\n\n  register(\"custom-content\", [slider, newsletterCheckForResultSection]);\n\n  const selectors$5 = {\n    largePromo: \"[data-large-promo]\",\n    largePromoInner: \"[data-large-promo-inner]\",\n    cartBar: \"cart-bar\",\n    newsletterPopup: \"[data-newsletter]\",\n    newsletterPopupHolder: \"[data-newsletter-holder]\",\n    newsletterHeading: \"[data-newsletter-heading]\",\n    newsletterField: \"[data-newsletter-field]\",\n    promoPopup: \"[data-promo-text]\",\n    newsletterForm: \"[data-newsletter-form]\",\n    delayAttribite: \"data-popup-delay\",\n    cookieNameAttribute: \"data-cookie-name\",\n    dataTargetReferrer: \"data-target-referrer\",\n  };\n\n  const classes$2 = {\n    hidden: \"hidden\",\n    hasValue: \"has-value\",\n    cartBarVisible: \"cart-bar-visible\",\n    isVisible: \"is-visible\",\n    success: \"has-success\",\n    selected: \"selected\",\n    hasBlockSelected: \"has-block-selected\",\n    mobile: \"mobile\",\n    desktop: \"desktop\",\n    bottom: \"bottom\",\n  };\n\n  let sections$4 = {};\n\n  class DelayShow {\n    constructor(holder, element, popupEvents) {\n      this.element = element;\n      this.delay = holder.getAttribute(selectors$5.delayAttribite);\n      this.isSubmitted =\n        window.location.href.indexOf(\"accepts_marketing\") !== -1 ||\n        window.location.href.indexOf(\"customer_posted=true\") !== -1;\n      this.popupActions = popupEvents;\n      this.showPopupOnScrollEvent = () => this.showPopupOnScroll();\n\n      if (this.delay === \"always\" || this.isSubmitted) {\n        this.always();\n      }\n\n      if (this.delay && this.delay.includes(\"delayed\") && !this.isSubmitted) {\n        const seconds = this.delay.includes(\"_\")\n          ? parseInt(this.delay.split(\"_\")[1])\n          : 10;\n        this.delayed(seconds);\n      }\n\n      if (this.delay === \"bottom\" && !this.isSubmitted) {\n        this.bottom();\n      }\n\n      if (this.delay === \"idle\" && !this.isSubmitted) {\n        this.idle();\n      }\n    }\n\n    always() {\n      this.popupActions.popupOpen();\n    }\n\n    delayed(seconds = 10) {\n      // Show popup after specific seconds\n      setTimeout(() => {\n        this.popupActions.popupOpen();\n      }, seconds * 1000);\n    }\n\n    // Idle for 1 min\n    idle() {\n      let timer = 0;\n      let idleTime = 60000;\n      const documentEvents = [\n        \"mousemove\",\n        \"mousedown\",\n        \"click\",\n        \"touchmove\",\n        \"touchstart\",\n        \"touchend\",\n        \"keydown\",\n        \"keypress\",\n      ];\n      const windowEvents = [\"load\", \"resize\", \"scroll\"];\n\n      const startTimer = () => {\n        timer = setTimeout(() => {\n          timer = 0;\n          this.popupActions.popupOpen();\n        }, idleTime);\n\n        documentEvents.forEach((eventType) => {\n          document.addEventListener(eventType, resetTimer);\n        });\n\n        windowEvents.forEach((eventType) => {\n          window.addEventListener(eventType, resetTimer);\n        });\n      };\n\n      const resetTimer = () => {\n        if (timer) {\n          clearTimeout(timer);\n        }\n\n        documentEvents.forEach((eventType) => {\n          document.removeEventListener(eventType, resetTimer);\n        });\n\n        windowEvents.forEach((eventType) => {\n          window.removeEventListener(eventType, resetTimer);\n        });\n\n        startTimer();\n      };\n\n      startTimer();\n    }\n\n    // Scroll to the bottom of the page\n    bottom() {\n      document.addEventListener(\"theme:scroll\", this.showPopupOnScrollEvent);\n    }\n\n    showPopupOnScroll() {\n      if (window.scrollY + window.innerHeight >= document.body.clientHeight) {\n        this.popupActions.popupOpen();\n        document.removeEventListener(\n          \"theme:scroll\",\n          this.showPopupOnScrollEvent,\n        );\n      }\n    }\n\n    onUnload() {\n      document.removeEventListener(\"theme:scroll\", this.showPopupOnScrollEvent);\n    }\n  }\n\n  class TargetReferrer {\n    constructor(el) {\n      this.el = el;\n      this.locationPath = location.href;\n\n      if (!this.el.hasAttribute(selectors$5.dataTargetReferrer)) {\n        return false;\n      }\n\n      this.init();\n    }\n\n    init() {\n      if (\n        this.locationPath.indexOf(\n          this.el.getAttribute(selectors$5.dataTargetReferrer),\n        ) === -1 &&\n        !window.Shopify.designMode\n      ) {\n        this.el.parentNode.removeChild(this.el);\n      }\n    }\n  }\n\n  class LargePopup {\n    constructor(el) {\n      this.popup = el;\n      this.modal = this.popup.querySelector(selectors$5.largePromoInner);\n      this.form = this.popup.querySelector(selectors$5.newsletterForm);\n      this.cookie = new PopupCookie(\n        this.popup.getAttribute(selectors$5.cookieNameAttribute),\n        \"user_has_closed\",\n      );\n      this.isTargeted = new TargetReferrer(this.popup);\n      this.popupActions = new PopupActions(this.modal, this.modal, true, true);\n      this.a11y = a11y;\n\n      this.init();\n    }\n\n    init() {\n      const cookieExists = this.cookie.read() !== false;\n      const targetMobile = this.popup.classList.contains(classes$2.mobile);\n      const targetDesktop = this.popup.classList.contains(classes$2.desktop);\n      const isMobileView = !isDesktop();\n      let targetMatches = true;\n\n      if ((targetMobile && !isMobileView) || (targetDesktop && isMobileView)) {\n        targetMatches = false;\n      }\n\n      if (!targetMatches) {\n        this.a11y.removeTrapFocus();\n        document.dispatchEvent(\n          new CustomEvent(\"theme:scroll:unlock\", { bubbles: true }),\n        );\n        return;\n      }\n\n      if (!cookieExists || window.Shopify.designMode) {\n        if (\n          !window.Shopify.designMode &&\n          !window.location.pathname.endsWith(\"/challenge\")\n        ) {\n          new DelayShow(this.popup, this.modal, this.popupActions);\n        }\n\n        if (this.form && this.form.classList.contains(classes$2.success)) {\n          this.checkForSuccess();\n        }\n\n        this.modal.addEventListener(\"theme:popup:onclose\", () =>\n          this.cookie.write(),\n        );\n      }\n    }\n\n    checkForSuccess() {\n      this.popupActions.popupOpen();\n      this.cookie.write();\n    }\n\n    onBlockSelect(evt) {\n      if (this.popup.contains(evt.target)) {\n        this.popupActions.popupOpen();\n        this.popup.classList.add(classes$2.selected);\n        this.popup.parentNode.classList.add(classes$2.hasBlockSelected);\n      }\n    }\n\n    onBlockDeselect(evt) {\n      if (this.popup.contains(evt.target)) {\n        this.popupActions.popupClose();\n        this.popup.classList.remove(classes$2.selected);\n        this.popup.parentNode.classList.remove(classes$2.hasBlockSelected);\n      }\n    }\n  }\n\n  class PromoText {\n    constructor(el) {\n      this.popup = el;\n      this.cookie = new PopupCookie(\n        this.popup.getAttribute(selectors$5.cookieNameAttribute),\n        \"user_has_closed\",\n      );\n      this.isTargeted = new TargetReferrer(this.popup);\n      this.popupActions = new PopupActions(\n        this.popup,\n        this.popup,\n        false,\n        false,\n      );\n\n      this.init();\n    }\n\n    init() {\n      const cookieExists = this.cookie.read() !== false;\n\n      if (!cookieExists || window.Shopify.designMode) {\n        if (!window.Shopify.designMode) {\n          new DelayShow(this.popup, this.popup, this.popupActions);\n        } else {\n          this.popupActions.popupOpen();\n        }\n\n        this.popup.addEventListener(\"theme:popup:onclose\", () =>\n          this.cookie.write(),\n        );\n      }\n    }\n\n    onSelect() {\n      this.popupActions.popupOpen();\n      this.popup.classList.add(classes$2.selected);\n      this.popup.parentNode.classList.add(classes$2.hasBlockSelected);\n    }\n\n    onDeselect() {\n      this.popupActions.popupClose();\n      this.popup.classList.remove(classes$2.selected);\n      this.popup.parentNode.classList.remove(classes$2.hasBlockSelected);\n    }\n  }\n\n  class NewsletterPopup {\n    constructor(el) {\n      this.popup = el;\n      this.holder = this.popup.querySelector(selectors$5.newsletterPopupHolder);\n      this.heading = this.popup.querySelector(selectors$5.newsletterHeading);\n      this.newsletterField = this.popup.querySelector(\n        selectors$5.newsletterField,\n      );\n      this.cookie = new PopupCookie(\n        this.popup.getAttribute(selectors$5.cookieNameAttribute),\n        \"newsletter_is_closed\",\n      );\n      this.form = this.popup.querySelector(selectors$5.newsletterForm);\n      this.isTargeted = new TargetReferrer(this.popup);\n      this.popupActions = new PopupActions(\n        this.holder,\n        this.holder,\n        false,\n        false,\n      );\n      this.resetClassTimer = 0;\n\n      this.init();\n    }\n\n    init() {\n      const cookieExists = this.cookie.read() !== false;\n      const submissionSuccess =\n        window.location.search.indexOf(\"?customer_posted=true\") !== -1;\n      const classesString = [...this.holder.classList].toString();\n      const isPositionBottom = classesString.includes(classes$2.bottom);\n\n      if (submissionSuccess) {\n        this.delay = 0;\n      }\n\n      if (!cookieExists || window.Shopify.designMode) {\n        this.show();\n\n        if (this.form.classList.contains(classes$2.success)) {\n          this.checkForSuccess();\n        }\n      }\n\n      if (isPositionBottom) {\n        this.observeCartBar();\n      }\n    }\n\n    show() {\n      if (!window.location.pathname.endsWith(\"/challenge\")) {\n        if (!window.Shopify.designMode) {\n          new DelayShow(this.popup, this.holder, this.popupActions);\n        } else {\n          this.popupActions.popupOpen();\n        }\n      }\n\n      this.showForm();\n      this.inputField();\n\n      this.holder.addEventListener(\"theme:popup:onclose\", () =>\n        this.cookie.write(),\n      );\n    }\n\n    checkForSuccess() {\n      this.popupActions.popupOpen();\n      this.cookie.write();\n    }\n\n    observeCartBar() {\n      this.cartBar = document.getElementById(selectors$5.cartBar);\n\n      if (!this.cartBar) return;\n\n      const config = { attributes: true, childList: false, subtree: false };\n      let isVisible = this.cartBar.classList.contains(classes$2.isVisible);\n      document.body.classList.toggle(classes$2.cartBarVisible, isVisible);\n\n      // Callback function to execute when mutations are observed\n      const callback = (mutationList) => {\n        for (const mutation of mutationList) {\n          if (mutation.type === \"attributes\") {\n            isVisible = mutation.target.classList.contains(classes$2.isVisible);\n            document.body.classList.toggle(classes$2.cartBarVisible, isVisible);\n          }\n        }\n      };\n\n      this.observer = new MutationObserver(callback);\n      this.observer.observe(this.cartBar, config);\n    }\n\n    showForm() {\n      this.heading.addEventListener(\"click\", (event) => {\n        event.preventDefault();\n\n        this.heading.classList.add(classes$2.hidden);\n        this.form.classList.remove(classes$2.hidden);\n        this.newsletterField.focus();\n      });\n\n      this.heading.addEventListener(\"keyup\", (event) => {\n        if (event.code === \"Enter\") {\n          this.heading.dispatchEvent(new Event(\"click\"));\n        }\n      });\n    }\n\n    inputField() {\n      const setClass = () => {\n        // Reset timer if exists and is active\n        if (this.resetClassTimer) {\n          clearTimeout(this.resetClassTimer);\n        }\n\n        if (this.newsletterField.value !== \"\") {\n          this.holder.classList.add(classes$2.hasValue);\n        }\n      };\n\n      const unsetClass = () => {\n        // Reset timer if exists and is active\n        if (this.resetClassTimer) {\n          clearTimeout(this.resetClassTimer);\n        }\n\n        // Reset class\n        this.resetClassTimer = setTimeout(() => {\n          this.holder.classList.remove(classes$2.hasValue);\n        }, 2000);\n      };\n\n      this.newsletterField.addEventListener(\"input\", setClass);\n      this.newsletterField.addEventListener(\"focus\", setClass);\n      this.newsletterField.addEventListener(\"focusout\", unsetClass);\n    }\n\n    onBlockSelect(evt) {\n      if (this.popup.contains(evt.target)) {\n        this.popupActions.popupOpen();\n        this.popup.classList.add(classes$2.selected);\n        this.popup.parentNode.classList.add(classes$2.hasBlockSelected);\n      }\n    }\n\n    onBlockDeselect(evt) {\n      if (this.popup.contains(evt.target)) {\n        this.popupActions.popupClose();\n        this.popup.classList.remove(classes$2.selected);\n        this.popup.parentNode.classList.remove(classes$2.hasBlockSelected);\n      }\n    }\n\n    onUnload() {\n      if (this.observer) {\n        this.observer.disconnect();\n      }\n    }\n  }\n\n  const popupSection = {\n    onLoad() {\n      sections$4[this.id] = [];\n\n      const newsletters = this.container.querySelectorAll(\n        selectors$5.largePromo,\n      );\n      newsletters.forEach((el) => {\n        sections$4[this.id].push(new LargePopup(el));\n      });\n\n      const newsletterPopup = this.container.querySelectorAll(\n        selectors$5.newsletterPopup,\n      );\n      newsletterPopup.forEach((el) => {\n        sections$4[this.id].push(new NewsletterPopup(el));\n      });\n\n      const promoPopup = this.container.querySelectorAll(\n        selectors$5.promoPopup,\n      );\n      promoPopup.forEach((el) => {\n        sections$4[this.id].push(new PromoText(el));\n      });\n    },\n\n    onBlockSelect(evt) {\n      sections$4[this.id].forEach((el) => {\n        if (typeof el.onBlockSelect === \"function\") {\n          el.onBlockSelect(evt);\n        }\n      });\n    },\n    onBlockDeselect(evt) {\n      sections$4[this.id].forEach((el) => {\n        if (typeof el.onBlockDeselect === \"function\") {\n          el.onBlockDeselect(evt);\n        }\n      });\n    },\n    onSelect() {\n      sections$4[this.id].forEach((el) => {\n        if (typeof el.onSelect === \"function\") {\n          el.onSelect();\n        }\n      });\n    },\n    onDeselect() {\n      sections$4[this.id].forEach((el) => {\n        if (typeof el.onDeselect === \"function\") {\n          el.onDeselect();\n        }\n      });\n    },\n    onUnload() {\n      sections$4[this.id].forEach((el) => {\n        if (typeof el.onUnload === \"function\") {\n          el.onUnload();\n        }\n      });\n    },\n  };\n\n  register(\"popups\", [popupSection, newsletterCheckForResultSection]);\n\n  const selectors$4 = {\n    modal: \"[data-password-modal]\",\n    loginErrors: \"#login_form .errors\",\n  };\n\n  class Password {\n    constructor(section) {\n      this.container = section.container;\n      this.popupActions = new PopupActions(\n        this.container.querySelector(selectors$4.modal),\n        this.container,\n        true,\n        true,\n      );\n\n      if (this.container.querySelector(selectors$4.loginErrors)) {\n        this.popupActions.popupOpen();\n      }\n    }\n  }\n\n  const passwordSection = {\n    onLoad() {\n      new Password(this);\n    },\n  };\n\n  register(\"password-template\", passwordSection);\n\n  register(\"list-collections\", [slider]);\n\n  register(\"columns\", [slider]);\n\n  register(\"newsletter\", newsletterCheckForResultSection);\n\n  const selectors$3 = {\n    scrollToElement: \"[data-scroll-to]\",\n    tooltip: \"[data-tooltip]\",\n    collapsibleTrigger: \"[data-collapsible-trigger]\",\n  };\n\n  const attributes$3 = {\n    open: \"open\",\n    dataScrollTo: \"data-scroll-to\",\n    tooltipStopMousenterValue: \"data-tooltip-stop-mouseenter\",\n  };\n\n  const sections$3 = {};\n\n  class ScrollToElement {\n    constructor(section) {\n      this.section = section;\n      this.container = section.container;\n      this.scrollToButtons = this.container.querySelectorAll(\n        selectors$3.scrollToElement,\n      );\n\n      if (this.scrollToButtons.length) {\n        this.init();\n      }\n    }\n\n    init() {\n      this.scrollToButtons.forEach((element) => {\n        element.addEventListener(\"click\", () => {\n          const target = this.container.querySelector(\n            element.getAttribute(attributes$3.dataScrollTo),\n          );\n\n          if (!target || element.tagName === \"A\") return;\n\n          this.scrollToElement(target);\n        });\n      });\n    }\n\n    scrollToElement(element) {\n      scrollTo(element.getBoundingClientRect().top + 1);\n\n      const collapsibleElement = element.nextElementSibling.matches(\"details\")\n        ? element.nextElementSibling\n        : null;\n\n      if (collapsibleElement) {\n        const collapsibleTrigger = collapsibleElement?.querySelector(\n          selectors$3.collapsibleTrigger,\n        );\n        const isOpen = collapsibleElement.hasAttribute(attributes$3.open);\n\n        if (!isOpen) {\n          collapsibleTrigger?.dispatchEvent(new Event(\"click\"));\n        }\n      }\n\n      const tooltips = document.querySelectorAll(\n        `${selectors$3.tooltip}:not([${attributes$3.tooltipStopMousenterValue}])`,\n      );\n      if (tooltips.length) {\n        tooltips.forEach((tooltip) => {\n          tooltip.setAttribute(attributes$3.tooltipStopMousenterValue, \"\");\n\n          setTimeout(() => {\n            tooltip.removeAttribute(attributes$3.tooltipStopMousenterValue);\n          }, 1000);\n        });\n      }\n    }\n  }\n\n  const scrollToElement = {\n    onLoad() {\n      sections$3[this.id] = new ScrollToElement(this);\n    },\n  };\n\n  const selectors$2 = {\n    scrollSpy: \"[data-scroll-spy]\",\n  };\n\n  const classes$1 = {\n    selected: \"is-selected\",\n  };\n\n  const attributes$2 = {\n    scrollSpy: \"data-scroll-spy\",\n    mobile: \"data-scroll-spy-mobile\",\n    desktop: \"data-scroll-spy-desktop\",\n    triggerPoint: \"data-scroll-trigger-point\",\n  };\n\n  const sections$2 = {};\n\n  class ScrollSpy {\n    constructor(container, element) {\n      this.container = container;\n      this.elementToSpy = element;\n      this.anchorSelector = `[${attributes$2.scrollSpy}=\"#${this.elementToSpy.id}\"]`;\n      this.anchor = this.container.querySelector(this.anchorSelector);\n      this.anchorSiblings = this.container.querySelectorAll(\n        `[${attributes$2.scrollSpy}]`,\n      );\n      this.initialized = false;\n\n      if (!this.anchor) return;\n\n      this.triggerPoint = this.anchor.getAttribute(attributes$2.triggerPoint);\n\n      this.scrollCallback = () => this.onScroll();\n      this.toggleScrollObserver = this.toggleScrollObserver.bind(this);\n      this.init();\n    }\n\n    init() {\n      this.toggleScrollObserver();\n      document.addEventListener(\n        \"theme:resize:width\",\n        this.toggleScrollObserver,\n      );\n    }\n\n    toggleScrollObserver() {\n      if (this.isEligible()) {\n        if (!this.initialized) {\n          document.addEventListener(\"theme:scroll\", this.scrollCallback);\n          this.initialized = true;\n        }\n      } else {\n        document.removeEventListener(\"theme:scroll\", this.scrollCallback);\n        this.initialized = false;\n      }\n    }\n\n    isEligible() {\n      const isDesktopView = isDesktop();\n      const isMobileView = !isDesktopView;\n      return (\n        (isMobileView && this.anchor.hasAttribute(attributes$2.mobile)) ||\n        (isDesktopView && this.anchor.hasAttribute(attributes$2.desktop)) ||\n        (!this.anchor.hasAttribute(attributes$2.desktop) &&\n          !this.anchor.hasAttribute(attributes$2.mobile))\n      );\n    }\n\n    onScroll() {\n      this.top = this.elementToSpy.getBoundingClientRect().top;\n\n      // Check element's visibility in the viewport\n      const windowHeight = Math.round(window.innerHeight);\n      const scrollTop = Math.round(window.scrollY);\n      const scrollBottom = scrollTop + windowHeight;\n      const elementOffsetTopPoint = Math.round(this.top + scrollTop);\n      const elementHeight = this.elementToSpy.offsetHeight;\n      const elementOffsetBottomPoint = elementOffsetTopPoint + elementHeight;\n      const isBottomOfElementPassed = elementOffsetBottomPoint < scrollTop;\n      const isTopOfElementReached = elementOffsetTopPoint < scrollBottom;\n      const isInView = isTopOfElementReached && !isBottomOfElementPassed;\n\n      if (!isInView) return;\n      if (!this.triggerPointReached()) return;\n\n      // Update active classes\n      this.anchorSiblings.forEach((anchor) => {\n        if (!anchor.matches(this.anchorSelector)) {\n          anchor.classList.remove(classes$1.selected);\n        }\n      });\n\n      this.anchor.classList.add(classes$1.selected);\n    }\n\n    triggerPointReached() {\n      let triggerPointReached = false;\n\n      switch (this.triggerPoint) {\n        case \"top\":\n          triggerPointReached = this.top <= 0;\n          break;\n\n        case \"middle\":\n          triggerPointReached = this.top <= window.innerHeight / 2;\n          break;\n\n        case \"bottom\":\n          triggerPointReached = this.top <= window.innerHeight;\n          break;\n\n        default:\n          triggerPointReached = this.top <= 0;\n      }\n\n      return triggerPointReached;\n    }\n\n    onUnload() {\n      document.removeEventListener(\n        \"theme:resize:width\",\n        this.toggleScrollObserver,\n      );\n      document.removeEventListener(\"theme:scroll\", this.scrollCallback);\n    }\n  }\n\n  const scrollSpy = {\n    onLoad() {\n      sections$2[this.id] = [];\n\n      this.container\n        .querySelectorAll(selectors$2.scrollSpy)\n        ?.forEach((element) => {\n          const scrollSpy = this.container.querySelector(\n            element.getAttribute(attributes$2.scrollSpy),\n          );\n          sections$2[this.id].push(new ScrollSpy(this.container, scrollSpy));\n        });\n    },\n    onUnload() {\n      sections$2[this.id].forEach((section) => {\n        if (typeof section.onUnload === \"function\") {\n          section.onUnload();\n        }\n      });\n    },\n  };\n\n  register(\"sidebar\", [scrollToElement, scrollSpy]);\n\n  const selectors$1 = {\n    button: \"[data-hover-target]\",\n    image: \"[data-collection-image]\",\n  };\n\n  const attributes$1 = {\n    target: \"data-hover-target\",\n  };\n\n  const classes = {\n    visible: \"is-visible\",\n    selected: \"is-selected\",\n  };\n\n  let sections$1 = {};\n\n  class CollectionsHover {\n    constructor(section) {\n      this.container = section.container;\n      this.buttons = this.container.querySelectorAll(selectors$1.button);\n\n      this.init();\n    }\n\n    init() {\n      if (this.buttons.length) {\n        this.buttons.forEach((button) => {\n          button.addEventListener(\"mouseenter\", (e) => {\n            const targetId = e.currentTarget.getAttribute(attributes$1.target);\n\n            this.updateState(targetId);\n          });\n        });\n      }\n    }\n\n    updateState(targetId) {\n      const button = this.container.querySelector(\n        `[${attributes$1.target}=\"${targetId}\"]`,\n      );\n      const target = this.container.querySelector(\n        `#${targetId}:not(.${classes.visible})`,\n      );\n      const buttonSelected = this.container.querySelector(\n        `${selectors$1.button}.${classes.selected}`,\n      );\n      const imageVisible = this.container.querySelector(\n        `${selectors$1.image}.${classes.visible}`,\n      );\n\n      if (target && isDesktop()) {\n        imageVisible?.classList.remove(classes.visible);\n        buttonSelected?.classList.remove(classes.selected);\n\n        target.classList.add(classes.visible);\n        button.classList.add(classes.selected);\n      }\n    }\n\n    onBlockSelect(e) {\n      this.updateState(e.target.id);\n    }\n  }\n\n  const collectionsHover = {\n    onLoad() {\n      sections$1[this.id] = new CollectionsHover(this);\n    },\n    onBlockSelect(e) {\n      sections$1[this.id].onBlockSelect(e);\n    },\n  };\n\n  register(\"collections-hover\", [collectionsHover, scrollSpy]);\n\n  const selectors = {\n    image: \"[data-featured-image]\",\n    imagesHolder: \"[data-featured-aside]\",\n    contentHolder: \"[data-featured-content]\",\n    wrapper: \"[data-featured-wrapper]\",\n  };\n\n  const attributes = {\n    horizontalScroll: \"data-horizontal-scroll\",\n    horizontalScrollReversed: \"data-horizontal-scroll-reversed\",\n  };\n\n  const sections = {};\n\n  class FeaturedProduct {\n    constructor(section) {\n      this.container = section.container;\n      this.horizontalScroll = this.container.hasAttribute(\n        attributes.horizontalScroll,\n      );\n      this.horizontalScrollReversed = this.container.hasAttribute(\n        attributes.horizontalScrollReversed,\n      );\n      this.images = this.container.querySelectorAll(selectors.image);\n      this.imagesHolder = this.container.querySelector(selectors.imagesHolder);\n      this.contentHolder = this.container.querySelector(\n        selectors.contentHolder,\n      );\n      this.wrapper = this.container.querySelector(selectors.wrapper);\n      this.requestAnimationSticky = null;\n      this.lastPercent = 0;\n\n      this.scrollEvent = () => this.scrollEvents();\n      this.calculateHorizontalPositionEvent = () =>\n        this.calculateHorizontalPosition();\n      this.calculateHeightEvent = () => this.calculateHeight();\n\n      this.init();\n    }\n\n    init() {\n      if (this.horizontalScroll && this.imagesHolder) {\n        this.requestAnimationSticky = requestAnimationFrame(\n          this.calculateHorizontalPositionEvent,\n        );\n        document.addEventListener(\"theme:scroll\", this.scrollEvent);\n      }\n\n      if (this.wrapper && this.contentHolder && this.images.length) {\n        this.calculateHeight();\n\n        document.addEventListener(\n          \"theme:resize:width\",\n          this.calculateHeightEvent,\n        );\n      }\n    }\n\n    scrollEvents() {\n      if (!this.requestAnimationSticky) {\n        this.requestAnimationSticky = requestAnimationFrame(\n          this.calculateHorizontalPositionEvent,\n        );\n      }\n    }\n\n    removeAnimationFrame() {\n      if (this.requestAnimationSticky) {\n        cancelAnimationFrame(this.requestAnimationSticky);\n        this.requestAnimationSticky = null;\n      }\n    }\n\n    calculateHorizontalPosition() {\n      let scrollTop = window.scrollY + this.headerHeight;\n\n      const windowBottom = scrollTop + window.innerHeight;\n      const elemTop = this.imagesHolder.offsetTop;\n      const elemHeight = this.imagesHolder.offsetHeight;\n      const elemBottom = elemTop + elemHeight + this.headerHeight;\n      const elemBottomTop =\n        elemHeight - (window.innerHeight - this.headerHeight);\n      const direction = this.horizontalScrollReversed ? 1 : -1;\n      let percent = 0;\n\n      if (scrollTop >= elemTop && windowBottom <= elemBottom) {\n        percent = ((scrollTop - elemTop) / elemBottomTop) * 100;\n      } else if (scrollTop < elemTop) {\n        percent = 0;\n      } else {\n        percent = 100;\n      }\n\n      percent *= this.images.length - 1;\n\n      this.container.style.setProperty(\n        \"--translateX\",\n        `${percent * direction}%`,\n      );\n\n      if (this.lastPercent !== percent) {\n        this.requestAnimationSticky = requestAnimationFrame(\n          this.calculateHorizontalPositionEvent,\n        );\n      } else if (this.requestAnimationSticky) {\n        this.removeAnimationFrame();\n      }\n\n      this.lastPercent = percent;\n    }\n\n    calculateHeight() {\n      let { stickyHeaderHeight } = readHeights();\n      this.container.style.removeProperty(\"--min-height\");\n      this.container.style.setProperty(\n        \"--min-height\",\n        `${this.wrapper.offsetHeight + this.contentHolder.offsetHeight}px`,\n      );\n      this.headerHeight = stickyHeaderHeight;\n    }\n\n    onUnload() {\n      if (this.horizontalScroll && this.imagesHolder) {\n        document.removeEventListener(\n          \"theme:scroll\",\n          this.calculateHorizontalPositionEvent,\n        );\n      }\n\n      if (this.wrapper && this.contentHolder && this.images.length) {\n        document.removeEventListener(\n          \"theme:resize:width\",\n          this.calculateHeightEvent,\n        );\n      }\n    }\n  }\n\n  const featuredProduct = {\n    onLoad() {\n      sections[this.id] = new FeaturedProduct(this);\n    },\n    onUnload(e) {\n      sections[this.id].onUnload(e);\n    },\n  };\n\n  register(\"featured-product\", [featuredProduct]);\n\n  function getScript(url, callback, callbackError) {\n    let head = document.getElementsByTagName(\"head\")[0];\n    let done = false;\n    let script = document.createElement(\"script\");\n    script.src = url;\n\n    // Attach handlers for all browsers\n    script.onload = script.onreadystatechange = function () {\n      if (\n        !done &&\n        (!this.readyState ||\n          this.readyState == \"loaded\" ||\n          this.readyState == \"complete\")\n      ) {\n        done = true;\n        callback();\n      } else {\n        callbackError();\n      }\n    };\n\n    head.appendChild(script);\n  }\n\n  const loaders = {};\n\n  function loadScript(options = {}) {\n    if (!options.type) {\n      options.type = \"json\";\n    }\n\n    if (options.url) {\n      if (loaders[options.url]) {\n        return loaders[options.url];\n      } else {\n        return getScriptWithPromise(options.url, options.type);\n      }\n    } else if (options.json) {\n      if (loaders[options.json]) {\n        return Promise.resolve(loaders[options.json]);\n      } else {\n        return window\n          .fetch(options.json)\n          .then((response) => {\n            return response.json();\n          })\n          .then((response) => {\n            loaders[options.json] = response;\n            return response;\n          });\n      }\n    } else if (options.name) {\n      const key = \"\".concat(options.name, options.version);\n      if (loaders[key]) {\n        return loaders[key];\n      } else {\n        return loadShopifyWithPromise(options);\n      }\n    } else {\n      return Promise.reject();\n    }\n  }\n\n  function getScriptWithPromise(url, type) {\n    const loader = new Promise((resolve, reject) => {\n      if (type === \"text\") {\n        fetch(url)\n          .then((response) => response.text())\n          .then((data) => {\n            resolve(data);\n          })\n          .catch((error) => {\n            reject(error);\n          });\n      } else {\n        getScript(\n          url,\n          function () {\n            resolve();\n          },\n          function () {\n            reject();\n          },\n        );\n      }\n    });\n\n    loaders[url] = loader;\n    return loader;\n  }\n\n  function loadShopifyWithPromise(options) {\n    const key = \"\".concat(options.name, options.version);\n    const loader = new Promise((resolve, reject) => {\n      try {\n        window.Shopify.loadFeatures([\n          {\n            name: options.name,\n            version: options.version,\n            onLoad: (err) => {\n              onLoadFromShopify(resolve, reject, err);\n            },\n          },\n        ]);\n      } catch (err) {\n        reject(err);\n      }\n    });\n    loaders[key] = loader;\n    return loader;\n  }\n\n  function onLoadFromShopify(resolve, reject, err) {\n    if (err) {\n      return reject(err);\n    } else {\n      return resolve();\n    }\n  }\n\n  document.addEventListener(\"DOMContentLoaded\", function () {\n    // Load all registered sections on the page.\n    load(\"*\");\n\n    // Scroll to top button\n    const scrollTopButton = document.querySelector(\"[data-scroll-top-button]\");\n    if (scrollTopButton) {\n      scrollTopButton.addEventListener(\"click\", () => {\n        window.scrollTo({\n          top: 0,\n          left: 0,\n          behavior: \"smooth\",\n        });\n      });\n      document.addEventListener(\"theme:scroll\", () => {\n        scrollTopButton.classList.toggle(\n          \"is-visible\",\n          window.scrollY > window.innerHeight,\n        );\n      });\n    }\n\n    if (window.self !== window.top) {\n      document.querySelector(\"html\").classList.add(\"iframe\");\n    }\n\n    // Safari smoothscroll polyfill\n    let hasNativeSmoothScroll =\n      \"scrollBehavior\" in document.documentElement.style;\n    if (!hasNativeSmoothScroll) {\n      loadScript({ url: window.theme.assets.smoothscroll });\n    }\n  });\n\n  // Apply a specific class to the html element for browser support of cookies.\n  if (window.navigator.cookieEnabled) {\n    document.documentElement.className =\n      document.documentElement.className.replace(\n        \"supports-no-cookies\",\n        \"supports-cookies\",\n      );\n  }\n})(themeVendor.ScrollLock, themeVendor.Flickity, themeVendor.FlickityFade);\n"],
  "mappings": "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",
  "names": ["messages", "element", "wrapper", "productHandleQueue", "prev", "Section", "relatedSection", "location", "wrap", "scrollLock", "slider", "isVisible", "scrollSpy"]
}
