{
  "version": 3,
  "sources": ["/cdn/shop/t/97/assets/global.js?x=0.29281316396960533"],
  "sourcesContent": ["// root parameter limits init to a specific gallery container (e.g. after a DOM swap).\r\n// Callers that omit root get document \u2014 same behaviour as before.\r\nconst sliderInit = (isUpdate, root = document) => {\r\n  const mediaLists = root.querySelectorAll(\".js-media-list\");\r\n  if (!mediaLists.length) return;\r\n\r\n  mediaLists.forEach((elem, index) => {\r\n    // skip already-initialised instances (caller must destroy first if a reinit is needed)\r\n    if (elem.swiper) return;\r\n\r\n    let prevButton = elem\r\n      .closest(\".product\")\r\n      ?.querySelector(\".product__slider-nav .swiper-button-prev\");\r\n    let nextButton = elem\r\n      .closest(\".product\")\r\n      ?.querySelector(\".product__slider-nav .swiper-button-next\");\r\n\r\n    // Match sub-slider by index within the same root so thumbs stay scoped.\r\n    const sublistInRoot = root.querySelectorAll(\".js-media-sublist\")[index];\r\n\r\n    let slider = new Swiper(elem, {\r\n      slidesPerView: 1,\r\n      spaceBetween: 1,\r\n      mousewheel: {\r\n        forceToAxis: true,\r\n      },\r\n      autoHeight: false,\r\n      speed: 500,\r\n      navigation: {\r\n        nextEl: nextButton,\r\n        prevEl: prevButton,\r\n      },\r\n      pagination: {\r\n        el:\r\n          elem.closest(\".product\")?.querySelector(\".product__pagination\") ||\r\n          \".product .product__pagination\",\r\n        type: \"bullets\",\r\n        clickable: true,\r\n      },\r\n      thumbs: {\r\n        swiper: sublistInRoot?.swiper || \"\",\r\n      },\r\n      on: {\r\n        afterInit: function () {},\r\n        slideChangeTransitionStart: function () {\r\n          if (sublistInRoot?.swiper) {\r\n            sublistInRoot.swiper.slideTo(this.activeIndex ?? 0);\r\n          }\r\n        },\r\n        slideChange: function () {\r\n          window.pauseAllMedia();\r\n          this.params.noSwiping = false;\r\n\r\n          // Keep the zoom modal pre-positioned on the same media id (not index)\r\n          // so re-opening lands on the current gallery image.\r\n          const sectionId = (this.el?.dataset?.section || \"\").replace(\r\n            \"product-media-\",\r\n            \"\"\r\n          );\r\n          const activeSlide = this.slides?.[this.activeIndex];\r\n          const fullId = activeSlide?.getAttribute?.(\"data-media-id\");\r\n          const modal = sectionId\r\n            ? document.getElementById(`ProductModal-${sectionId}`)\r\n            : null;\r\n          const popup = (modal || document).querySelector(\".js-popup-slider\");\r\n          if (popup?.swiper && fullId) {\r\n            const target = popup.querySelector(\r\n              `[data-media-modal-id=\"${fullId}\"]`\r\n            );\r\n            if (target) {\r\n              const idx = Array.prototype.indexOf.call(\r\n                popup.swiper.slides,\r\n                target\r\n              );\r\n              if (idx >= 0) popup.swiper.slideTo(idx);\r\n            }\r\n          }\r\n        },\r\n        slideChangeTransitionEnd: function () {\r\n          const slide = this.slides?.[this.activeIndex];\r\n          if (slide?.querySelector(\"model-viewer\")) {\r\n            slide\r\n              .querySelector(\".shopify-model-viewer-ui__button--poster\")\r\n              ?.removeAttribute(\"hidden\");\r\n          }\r\n        },\r\n        touchStart: function () {\r\n          const slide = this.slides?.[this.activeIndex];\r\n          if (slide?.querySelector(\"model-viewer\")) {\r\n            if (\r\n              !slide\r\n                .querySelector(\"model-viewer\")\r\n                .classList.contains(\"shopify-model-viewer-ui__disabled\")\r\n            ) {\r\n              this.params.noSwiping = true;\r\n              this.params.noSwipingClass = \"swiper-slide\";\r\n            } else {\r\n              this.params.noSwiping = false;\r\n            }\r\n          }\r\n        },\r\n      },\r\n    });\r\n\r\n    if (isUpdate) {\r\n      setTimeout(function () {\r\n        slider.update();\r\n      }, 800);\r\n    }\r\n  });\r\n};\r\n\r\nconst subSliderInit = (isUpdate, margin, root = document) => {\r\n  const sublists = root.querySelectorAll(\".js-media-sublist\");\r\n  if (sublists.length > 0) {\r\n    sublists.forEach((elem) => {\r\n      if (elem.swiper) return;\r\n      const slides = elem.querySelectorAll(\".product__media-subitem\");\r\n      const slidesAmount = slides.length;\r\n      const slidesPerView = slidesAmount < 3 ? slidesAmount : 3;\r\n      let subSlider = new Swiper(elem, {\r\n        slidesPerView: slidesPerView,\r\n        spaceBetween: 8,\r\n        direction: \"horizontal\",\r\n        mousewheel: {\r\n          forceToAxis: true,\r\n        },\r\n        freeMode: false,\r\n        watchSlidesProgress: true,\r\n        watchSlidesVisibility: true,\r\n        on: {\r\n          touchEnd: function (s, e) {\r\n            let range = 5;\r\n            let diff = (s.touches.diff = s.isHorizontal()\r\n              ? s.touches.currentX - s.touches.startX\r\n              : s.touches.currentY - s.touches.startY);\r\n            if (diff < range || diff > -range) s.allowClick = true;\r\n          },\r\n        },\r\n        breakpoints: {\r\n          1100: {\r\n            spaceBetween: margin,\r\n            slidesPerView: slidesPerView,\r\n          },\r\n        },\r\n      });\r\n\r\n      if (isUpdate) {\r\n        setTimeout(function () {\r\n          subSlider.update();\r\n        }, 800);\r\n      }\r\n    });\r\n  }\r\n};\r\n\r\nconst popupSliderInit = (isUpdate) => {\r\n  if (document.querySelector(\".js-popup-slider\")) {\r\n    let popupSlider = new Swiper(document.querySelector(\".js-popup-slider\"), {\r\n      slidesPerView: 1,\r\n      mousewheel: {\r\n        forceToAxis: true,\r\n      },\r\n      zoom: {\r\n        maxRatio: 2,\r\n      },\r\n      navigation: {\r\n        nextEl: \".product-media-modal .product__slider-nav .swiper-button-next\",\r\n        prevEl: \".product-media-modal .product__slider-nav .swiper-button-prev\",\r\n      },\r\n      pagination: {\r\n        el: \".product-media-modal .product__pagination\",\r\n        type: \"bullets\",\r\n        clickable: true,\r\n      },\r\n      on: {\r\n        afterInit: function () {\r\n          // Grid/stacked galleries have no main Swiper to drive the zoom, so\r\n          // wire each media toggle to jump the zoom to that media by id.\r\n          // (ProductModal.show also syncs on open; this keeps the two in step.)\r\n          if (\r\n            document.querySelector(\".product__outer--grid-gallery\") ||\r\n            document.querySelector(\".product__outer--stacked-gallery\")\r\n          ) {\r\n            document\r\n              .querySelectorAll(\".product__media-list .product__media-toggle\")\r\n              .forEach((elem) => {\r\n                elem.addEventListener(\"click\", () => {\r\n                  const popupEl = document.querySelector(\".js-popup-slider\");\r\n                  if (!popupEl?.swiper) return;\r\n                  const mediaId = elem.getAttribute(\"data-media-id\");\r\n                  const target = mediaId\r\n                    ? popupEl.querySelector(\r\n                        `[data-media-modal-id$=\"-${mediaId}\"]`\r\n                      )\r\n                    : null;\r\n                  if (!target) return;\r\n                  const idx = Array.prototype.indexOf.call(\r\n                    popupEl.swiper.slides,\r\n                    target\r\n                  );\r\n                  if (idx >= 0) popupEl.swiper.slideTo(idx, 0);\r\n                });\r\n              });\r\n          }\r\n        },\r\n        slideChange: function () {\r\n          window.pauseAllMedia();\r\n          this.params.noSwiping = false;\r\n          document\r\n            .querySelector(\".product-media-modal__content\")\r\n            ?.classList.remove(\"zoom\");\r\n        },\r\n        touchMove: function () {\r\n          document\r\n            .querySelector(\".product-media-modal__content\")\r\n            ?.classList.remove(\"zoom\");\r\n        },\r\n        slideChangeTransitionEnd: function () {\r\n          const slide = this.slides?.[this.activeIndex];\r\n          if (slide?.querySelector(\"model-viewer\")) {\r\n            slide\r\n              .querySelector(\".shopify-model-viewer-ui__button--poster\")\r\n              ?.removeAttribute(\"hidden\");\r\n          }\r\n        },\r\n        touchStart: function () {\r\n          const slide = this.slides?.[this.activeIndex];\r\n          if (slide?.querySelector(\"model-viewer\")) {\r\n            if (\r\n              !slide\r\n                .querySelector(\"model-viewer\")\r\n                .classList.contains(\"shopify-model-viewer-ui__disabled\")\r\n            ) {\r\n              this.params.noSwiping = true;\r\n              this.params.noSwipingClass = \"swiper-slide\";\r\n            } else {\r\n              this.params.noSwiping = false;\r\n            }\r\n          }\r\n        },\r\n      },\r\n    });\r\n\r\n    if (isUpdate) {\r\n      setTimeout(function () {\r\n        popupSlider.update();\r\n      }, 800);\r\n    }\r\n  }\r\n};\r\n\r\n// --- Product zoom (lightbox) gallery sync ---------------------------------\r\n// The zoom modal (product-media-modal) must mirror the MAIN gallery: the same\r\n// media subset, in the same order. The single source of truth is the set of\r\n// currently-visible main gallery slides. We key everything by media id (never\r\n// index) so filtering (variant media grouping, variant_media_display) and the\r\n// gallery's featured-first ordering can't desync the zoom.\r\n\r\n// Ordered list of media ids currently visible in the main gallery for a section.\r\nfunction getVisibleMainMediaIds(sectionId) {\r\n  const productScope =\r\n    document.getElementById(`MainProduct-${sectionId}`) || document;\r\n  const wrapper = productScope.querySelector(\".product__media-wrapper\");\r\n  if (!wrapper) return [];\r\n\r\n  // Slider galleries use .js-media-list; grid/stacked use a plain\r\n  // .product__media-list (but NOT the js-hidden noscript duplicate).\r\n  let list = wrapper.querySelector(\".js-media-list\");\r\n  if (!list) {\r\n    const lists = wrapper.querySelectorAll(\".product__media-list\");\r\n    for (let i = 0; i < lists.length; i++) {\r\n      if (!lists[i].closest(\".product__media-grid-noscript\")) {\r\n        list = lists[i];\r\n        break;\r\n      }\r\n    }\r\n  }\r\n  if (!list) return [];\r\n\r\n  const prefix = `${sectionId}-`;\r\n  const ids = [];\r\n  list.querySelectorAll(\"[data-media-id]\").forEach((item) => {\r\n    if (item.classList.contains(\"product__media-item--variant-hidden\")) return;\r\n    const full = item.getAttribute(\"data-media-id\");\r\n    if (!full || full.indexOf(prefix) !== 0) return;\r\n    const id = full.slice(prefix.length);\r\n    if (id && ids.indexOf(id) === -1) ids.push(id);\r\n  });\r\n  return ids;\r\n}\r\n\r\n// Reorder + filter the zoom modal slides to match the visible main gallery,\r\n// then (optionally) jump to a specific media id \u2014 with no animation so the\r\n// modal opens on exactly that image.\r\nfunction syncProductZoomGallery(sectionId, targetMediaId) {\r\n  const modal = document.getElementById(`ProductModal-${sectionId}`);\r\n  const popupEl = (modal || document).querySelector(\".js-popup-slider\");\r\n  if (!popupEl) return;\r\n  const swiperWrapper = popupEl.querySelector(\".swiper-wrapper\");\r\n  if (!swiperWrapper) return;\r\n\r\n  const prefix = `${sectionId}-`;\r\n  const orderedIds = getVisibleMainMediaIds(sectionId);\r\n  const visibleSet = Object.create(null);\r\n  orderedIds.forEach((id) => (visibleSet[id] = true));\r\n\r\n  const slides = Array.prototype.slice.call(\r\n    swiperWrapper.querySelectorAll(\"[data-media-modal-id]\")\r\n  );\r\n  const byId = Object.create(null);\r\n  slides.forEach((slide) => {\r\n    const full = slide.getAttribute(\"data-media-modal-id\");\r\n    if (full && full.indexOf(prefix) === 0) {\r\n      byId[full.slice(prefix.length)] = slide;\r\n    }\r\n  });\r\n\r\n  if (orderedIds.length) {\r\n    // Visible slides first, in gallery order.\r\n    orderedIds.forEach((id) => {\r\n      const slide = byId[id];\r\n      if (!slide) return;\r\n      slide.classList.add(\"swiper-slide\");\r\n      slide.classList.remove(\"product-media-modal__item--variant-hidden\");\r\n      swiperWrapper.appendChild(slide);\r\n    });\r\n    // Everything else hidden and pushed to the end (dropped from Swiper).\r\n    slides.forEach((slide) => {\r\n      const full = slide.getAttribute(\"data-media-modal-id\");\r\n      const id =\r\n        full && full.indexOf(prefix) === 0 ? full.slice(prefix.length) : null;\r\n      if (!id || !visibleSet[id]) {\r\n        slide.classList.remove(\"swiper-slide\");\r\n        slide.classList.add(\"product-media-modal__item--variant-hidden\");\r\n        swiperWrapper.appendChild(slide);\r\n      }\r\n    });\r\n  }\r\n\r\n  const swiper = popupEl.swiper;\r\n  if (swiper) {\r\n    try {\r\n      swiper.update();\r\n    } catch (e) {\r\n      /* noop */\r\n    }\r\n  }\r\n\r\n  if (targetMediaId != null && swiper) {\r\n    const targetSlide = byId[String(targetMediaId)];\r\n    if (targetSlide) {\r\n      const idx = Array.prototype.indexOf.call(swiper.slides, targetSlide);\r\n      if (idx >= 0) swiper.slideTo(idx, 0);\r\n    }\r\n  }\r\n}\r\nwindow.syncProductZoomGallery = syncProductZoomGallery;\r\n\r\nif (navigator.userAgent.indexOf(\"iPhone\") > -1) {\r\n  document\r\n    .querySelector(\"[name=viewport]\")\r\n    .setAttribute(\r\n      \"content\",\r\n      \"width=device-width, initial-scale=1, maximum-scale=1\"\r\n    );\r\n}\r\n\r\nfunction getFocusableElements(container) {\r\n  return Array.from(\r\n    container.querySelectorAll(\r\n      \"summary, a[href], button:enabled, [tabindex]:not([tabindex^='-']), [draggable], area, input:not([type=hidden]):enabled, select:enabled, textarea:enabled, object, iframe\"\r\n    )\r\n  );\r\n}\r\n\r\ndocument.querySelectorAll('[id^=\"Details-\"] summary').forEach((summary) => {\r\n  summary.setAttribute(\"role\", \"button\");\r\n  summary.setAttribute(\"aria-expanded\", \"false\");\r\n\r\n  if (summary.nextElementSibling.getAttribute(\"id\")) {\r\n    summary.setAttribute(\"aria-controls\", summary.nextElementSibling.id);\r\n  }\r\n\r\n  summary.addEventListener(\"click\", (event) => {\r\n    event.currentTarget.setAttribute(\r\n      \"aria-expanded\",\r\n      !event.currentTarget.closest(\"details\").hasAttribute(\"open\")\r\n    );\r\n  });\r\n\r\n  if (summary.closest(\"header-drawer\")) return;\r\n  summary.parentElement.addEventListener(\"keyup\", onKeyUpEscape);\r\n});\r\n\r\nfunction onKeyUpEscape(event) {\r\n  if (event.code.toUpperCase() !== \"ESCAPE\") return;\r\n\r\n  const openDetailsElement = event.target.closest(\"details[open]\");\r\n  if (!openDetailsElement) return;\r\n\r\n  const summaryElement = openDetailsElement.querySelector(\"summary\");\r\n  openDetailsElement.removeAttribute(\"open\");\r\n  summaryElement.setAttribute(\"aria-expanded\", false);\r\n  summaryElement.focus();\r\n}\r\n\r\nconst trapFocusHandlers = {};\r\n\r\nfunction trapFocus(container, elementToFocus = container) {\r\n  var elements = getFocusableElements(container);\r\n  var first = elements[0];\r\n  var last = elements[elements.length - 1];\r\n\r\n  removeTrapFocus();\r\n\r\n  trapFocusHandlers.focusin = (event) => {\r\n    if (\r\n      event.target !== container &&\r\n      event.target !== last &&\r\n      event.target !== first\r\n    )\r\n      return;\r\n\r\n    document.addEventListener(\"keydown\", trapFocusHandlers.keydown);\r\n  };\r\n\r\n  trapFocusHandlers.focusout = function () {\r\n    document.removeEventListener(\"keydown\", trapFocusHandlers.keydown);\r\n  };\r\n\r\n  trapFocusHandlers.keydown = function (event) {\r\n    if (event.code.toUpperCase() !== \"TAB\") return; // If not TAB key\r\n    // On the last focusable element and tab forward, focus the first element.\r\n    if (event.target === last && !event.shiftKey) {\r\n      event.preventDefault();\r\n      first.focus();\r\n    }\r\n\r\n    //  On the first focusable element and tab backward, focus the last element.\r\n    if (\r\n      (event.target === container || event.target === first) &&\r\n      event.shiftKey\r\n    ) {\r\n      event.preventDefault();\r\n      last.focus();\r\n    }\r\n  };\r\n\r\n  document.addEventListener(\"focusout\", trapFocusHandlers.focusout);\r\n  document.addEventListener(\"focusin\", trapFocusHandlers.focusin);\r\n\r\n  elementToFocus.focus();\r\n}\r\n\r\nfunction pauseAllMedia() {\r\n  document.querySelectorAll(\".js-youtube\").forEach((video) => {\r\n    video.contentWindow.postMessage(\r\n      '{\"event\":\"command\",\"func\":\"' + \"pauseVideo\" + '\",\"args\":\"\"}',\r\n      \"*\"\r\n    );\r\n  });\r\n  document.querySelectorAll(\".js-vimeo\").forEach((video) => {\r\n    video.contentWindow.postMessage('{\"method\":\"pause\"}', \"*\");\r\n  });\r\n  document.querySelectorAll(\"video\").forEach((video) => {\r\n    if (!video.closest(\".hero__image\") && !video.closest(\".multirow__video\"))\r\n      video.pause();\r\n  });\r\n  document.querySelectorAll(\"product-model\").forEach((model) => {\r\n    if (model.modelViewerUI) model.modelViewerUI.pause();\r\n  });\r\n}\r\n\r\nfunction removeTrapFocus(elementToFocus = null) {\r\n  document.removeEventListener(\"focusin\", trapFocusHandlers.focusin);\r\n  document.removeEventListener(\"focusout\", trapFocusHandlers.focusout);\r\n  document.removeEventListener(\"keydown\", trapFocusHandlers.keydown);\r\n\r\n  if (elementToFocus && !elementToFocus.classList.contains(\"card-focused\"))\r\n    elementToFocus.focus();\r\n}\r\n\r\nclass QuantityInput extends HTMLElement {\r\n  constructor() {\r\n    super();\r\n    this.input = this.querySelector(\"input\");\r\n    this.changeEvent = new Event(\"change\", { bubbles: true });\r\n\r\n    this.querySelectorAll(\"button\").forEach((button) => {\r\n      button.addEventListener(\"click\", this.onButtonClick.bind(this));\r\n    });\r\n\r\n    this.input.addEventListener(\"change\", this.validateInput.bind(this));\r\n    this.input.addEventListener(\"input\", this.onInputChange.bind(this));\r\n    this.input.addEventListener(\"paste\", this.onInputChange.bind(this));\r\n    this.input.addEventListener(\"focusout\", this.onFocusOut.bind(this));\r\n\r\n    this.updateButtonStates();\r\n  }\r\n\r\n  get minValue() {\r\n    return parseInt(this.input.min || this.input.dataset.min || 1);\r\n  }\r\n\r\n  get maxValue() {\r\n    const max = this.input.max || this.input.dataset.max;\r\n    return max ? parseInt(max) : null;\r\n  }\r\n\r\n  updateButtonStates() {\r\n    const val = parseInt(this.input.value) || this.minValue;\r\n    const minBtn = this.querySelector('button[name=\"minus\"]');\r\n    const plusBtn = this.querySelector('button[name=\"plus\"]');\r\n\r\n    if (val <= this.minValue) {\r\n      minBtn.classList.add(\"disabled\");\r\n    } else {\r\n      minBtn.classList.remove(\"disabled\");\r\n    }\r\n\r\n    if (this.maxValue !== null && val >= this.maxValue) {\r\n      plusBtn.classList.add(\"disabled\");\r\n    } else {\r\n      plusBtn.classList.remove(\"disabled\");\r\n    }\r\n  }\r\n\r\n  getErrorElement() {\r\n    const next = this.nextElementSibling;\r\n    if (next && next.classList.contains(\"quantity__error\")) return next;\r\n    const el = document.createElement(\"p\");\r\n    el.className = \"quantity__error caption\";\r\n    el.setAttribute(\"aria-live\", \"polite\");\r\n    el.setAttribute(\"hidden\", \"\");\r\n    this.insertAdjacentElement(\"afterend\", el);\r\n    return el;\r\n  }\r\n\r\n  showError(message) {\r\n    const el = this.getErrorElement();\r\n    el.textContent = message;\r\n    el.removeAttribute(\"hidden\");\r\n  }\r\n\r\n  clearError() {\r\n    const next = this.nextElementSibling;\r\n    if (next && next.classList.contains(\"quantity__error\")) {\r\n      next.setAttribute(\"hidden\", \"\");\r\n    }\r\n  }\r\n\r\n  validateInput() {\r\n    const val = parseInt(this.input.value);\r\n    if (isNaN(val) || val < this.minValue) {\r\n      this.input.value = this.minValue;\r\n      this.clearError();\r\n    } else if (this.maxValue !== null && val > this.maxValue) {\r\n      this.input.value = this.maxValue;\r\n      const errorMsg = this.dataset.errorMax || `Maximum of ${this.maxValue}`;\r\n      this.showError(errorMsg);\r\n    } else {\r\n      this.clearError();\r\n    }\r\n    this.updateButtonStates();\r\n  }\r\n\r\n  onInputChange(e) {\r\n    const numberRegex = /^0*?[1-9]\\d*$/;\r\n    if (\r\n      !numberRegex.test(e.currentTarget.value) &&\r\n      e.currentTarget.value !== \"\"\r\n    ) {\r\n      e.currentTarget.value = this.minValue;\r\n    }\r\n    this.clearError();\r\n    this.updateButtonStates();\r\n  }\r\n\r\n  onFocusOut(e) {\r\n    const val = parseInt(e.currentTarget.value);\r\n    if (isNaN(val) || val < this.minValue) {\r\n      e.currentTarget.value = this.minValue;\r\n    } else if (this.maxValue !== null && val > this.maxValue) {\r\n      e.currentTarget.value = this.maxValue;\r\n    }\r\n    this.clearError();\r\n    this.updateButtonStates();\r\n  }\r\n\r\n  onButtonClick(event) {\r\n    event.preventDefault();\r\n\r\n    const val = parseInt(this.input.value) || this.minValue;\r\n    const isPlus = event.target.name === \"plus\";\r\n\r\n    if (isPlus && this.maxValue !== null && val >= this.maxValue) {\r\n      const errorMsg = this.dataset.errorMax || `Maximum of ${this.maxValue}`;\r\n      this.showError(errorMsg);\r\n      return;\r\n    }\r\n\r\n    if (!isPlus && val <= this.minValue) {\r\n      if (this.minValue > 1) {\r\n        const errorMsg = this.dataset.errorMin || `Minimum of ${this.minValue}`;\r\n        this.showError(errorMsg);\r\n      }\r\n      return;\r\n    }\r\n\r\n    this.clearError();\r\n    const previousValue = this.input.value;\r\n    isPlus ? this.input.stepUp() : this.input.stepDown();\r\n\r\n    if (previousValue !== this.input.value) {\r\n      this.input.dispatchEvent(this.changeEvent);\r\n    }\r\n\r\n    this.updateButtonStates();\r\n  }\r\n}\r\n\r\ncustomElements.define(\"quantity-input\", QuantityInput);\r\n\r\nfunction debounce(fn, wait) {\r\n  let t;\r\n  return (...args) => {\r\n    clearTimeout(t);\r\n    t = setTimeout(() => fn.apply(this, args), wait);\r\n  };\r\n}\r\n\r\nconst serializeForm = (form) => {\r\n  const obj = {};\r\n  const formData = new FormData(form);\r\n  for (const key of formData.keys()) {\r\n    obj[key] = formData.get(key);\r\n  }\r\n  return JSON.stringify(obj);\r\n};\r\n\r\nfunction fetchConfig(type = \"json\") {\r\n  return {\r\n    method: \"POST\",\r\n    headers: {\r\n      \"Content-Type\": \"application/json\",\r\n      Accept: `application/${type}`,\r\n    },\r\n  };\r\n}\r\n\r\n/*\r\n * Shopify Common JS\r\n *\r\n */\r\nif (typeof window.Shopify == \"undefined\") {\r\n  window.Shopify = {};\r\n}\r\n\r\nShopify.bind = function (fn, scope) {\r\n  return function () {\r\n    return fn.apply(scope, arguments);\r\n  };\r\n};\r\n\r\nShopify.setSelectorByValue = function (selector, value) {\r\n  for (var i = 0, count = selector.options.length; i < count; i++) {\r\n    var option = selector.options[i];\r\n    if (value == option.value || value == option.innerHTML) {\r\n      selector.selectedIndex = i;\r\n      return i;\r\n    }\r\n  }\r\n};\r\n\r\nShopify.addListener = function (target, eventName, callback) {\r\n  target.addEventListener\r\n    ? target.addEventListener(eventName, callback, false)\r\n    : target.attachEvent(\"on\" + eventName, callback);\r\n};\r\n\r\nShopify.postLink = function (path, options) {\r\n  options = options || {};\r\n  var method = options[\"method\"] || \"post\";\r\n  var params = options[\"parameters\"] || {};\r\n\r\n  var form = document.createElement(\"form\");\r\n  form.setAttribute(\"method\", method);\r\n  form.setAttribute(\"action\", path);\r\n\r\n  for (var key in params) {\r\n    var hiddenField = document.createElement(\"input\");\r\n    hiddenField.setAttribute(\"type\", \"hidden\");\r\n    hiddenField.setAttribute(\"name\", key);\r\n    hiddenField.setAttribute(\"value\", params[key]);\r\n    form.appendChild(hiddenField);\r\n  }\r\n  document.body.appendChild(form);\r\n  form.submit();\r\n  document.body.removeChild(form);\r\n};\r\n\r\nShopify.CountryProvinceSelector = function (\r\n  country_domid,\r\n  province_domid,\r\n  options\r\n) {\r\n  this.countryEl = document.getElementById(country_domid);\r\n  this.provinceEl = document.getElementById(province_domid);\r\n  this.provinceContainer = document.getElementById(\r\n    options[\"hideElement\"] || province_domid\r\n  );\r\n\r\n  Shopify.addListener(\r\n    this.countryEl,\r\n    \"change\",\r\n    Shopify.bind(this.countryHandler, this)\r\n  );\r\n\r\n  this.initCountry();\r\n  this.initProvince();\r\n};\r\n\r\nShopify.CountryProvinceSelector.prototype = {\r\n  initCountry: function () {\r\n    var value = this.countryEl.getAttribute(\"data-default\");\r\n    Shopify.setSelectorByValue(this.countryEl, value);\r\n    this.countryHandler();\r\n  },\r\n\r\n  initProvince: function () {\r\n    var value = this.provinceEl.getAttribute(\"data-default\");\r\n    if (value && this.provinceEl.options.length > 0) {\r\n      Shopify.setSelectorByValue(this.provinceEl, value);\r\n    }\r\n  },\r\n\r\n  countryHandler: function (e) {\r\n    var opt = this.countryEl.options[this.countryEl.selectedIndex];\r\n    var raw = opt.getAttribute(\"data-provinces\");\r\n    var provinces = JSON.parse(raw);\r\n\r\n    this.clearOptions(this.provinceEl);\r\n    if (provinces && provinces.length == 0) {\r\n      this.provinceContainer.style.display = \"none\";\r\n    } else {\r\n      for (var i = 0; i < provinces.length; i++) {\r\n        var opt = document.createElement(\"option\");\r\n        opt.value = provinces[i][0];\r\n        opt.innerHTML = provinces[i][1];\r\n        this.provinceEl.appendChild(opt);\r\n      }\r\n\r\n      this.provinceContainer.style.display = \"\";\r\n    }\r\n  },\r\n\r\n  clearOptions: function (selector) {\r\n    while (selector.firstChild) {\r\n      selector.removeChild(selector.firstChild);\r\n    }\r\n  },\r\n\r\n  setOptions: function (selector, values) {\r\n    for (var i = 0, count = values.length; i < values.length; i++) {\r\n      var opt = document.createElement(\"option\");\r\n      opt.value = values[i];\r\n      opt.innerHTML = values[i];\r\n      selector.appendChild(opt);\r\n    }\r\n  },\r\n};\r\n\r\nconst body = document.body;\r\nlet bodyScrollTop = null;\r\nlet locked = false;\r\n\r\nfunction getScrollbarWidth() {\r\n  return window.innerWidth - document.documentElement.clientWidth;\r\n}\r\n\r\nfunction preventScroll(e) {\r\n  e.preventDefault();\r\n}\r\n\r\nfunction lockScroll() {\r\n  bodyScrollTop =\r\n    typeof window.pageYOffset !== \"undefined\"\r\n      ? window.pageYOffset\r\n      : (document.documentElement || document.body.parentNode || document.body)\r\n          .scrollTop;\r\n\r\n  var scrollBarWidth = getScrollbarWidth();\r\n  body.style.paddingRight = scrollBarWidth + \"px\";\r\n\r\n  body.classList.add(\"scroll-locked\");\r\n  locked = true;\r\n\r\n  document.addEventListener(\"scroll\", preventScroll, { passive: false });\r\n}\r\n\r\nfunction unlockScroll() {\r\n  body.classList.remove(\"scroll-locked\");\r\n  body.style.paddingRight = \"\";\r\n  window.scrollTo(0, bodyScrollTop);\r\n\r\n  document.removeEventListener(\"scroll\", preventScroll);\r\n}\r\n\r\nclass MenuDrawer extends HTMLElement {\r\n  constructor() {\r\n    super();\r\n\r\n    this.mainDetailsToggle = this.querySelector(\"details\");\r\n    const summaryElements = this.querySelectorAll(\"summary\");\r\n    this.addAccessibilityAttributes(summaryElements);\r\n\r\n    if (navigator.platform === \"iPhone\")\r\n      document.documentElement.style.setProperty(\r\n        \"--viewport-height\",\r\n        `${window.innerHeight}px`\r\n      );\r\n\r\n    this.addEventListener(\"keyup\", this.onKeyUp.bind(this));\r\n    this.addEventListener(\"focusout\", this.onFocusOut.bind(this));\r\n    this.bindEvents();\r\n  }\r\n\r\n  bindEvents() {\r\n    this.querySelectorAll(\"summary\").forEach((summary) =>\r\n      summary.addEventListener(\"click\", this.onSummaryClick.bind(this))\r\n    );\r\n    this.querySelectorAll(\"button\").forEach((button) => {\r\n      if (this.querySelector(\".toggle-scheme-button\") === button) return;\r\n      if (this.querySelector(\".header__localization-button\") === button) return;\r\n      if (this.querySelector(\".header__localization-lang-button\") === button)\r\n        return;\r\n      if (button.classList.contains(\"mobile-facets__footer__button\")) return;\r\n\r\n      button.addEventListener(\"click\", this.onCloseButtonClick.bind(this));\r\n    });\r\n  }\r\n\r\n  addAccessibilityAttributes(summaryElements) {\r\n    summaryElements.forEach((element) => {\r\n      element.setAttribute(\"role\", \"button\");\r\n      element.setAttribute(\"aria-expanded\", false);\r\n      element.setAttribute(\"aria-controls\", element.nextElementSibling.id);\r\n    });\r\n  }\r\n\r\n  onKeyUp(event) {\r\n    if (event.code.toUpperCase() !== \"ESCAPE\") return;\r\n\r\n    const openDetailsElement = event.target.closest(\"details[open]\");\r\n    if (!openDetailsElement) return;\r\n\r\n    openDetailsElement === this.mainDetailsToggle\r\n      ? this.closeMenuDrawer(this.mainDetailsToggle.querySelector(\"summary\"))\r\n      : this.closeSubmenu(openDetailsElement);\r\n  }\r\n\r\n  onSummaryClick(event) {\r\n    const summaryElement = event.currentTarget;\r\n    const detailsElement = summaryElement.parentNode;\r\n    const isOpen = detailsElement.hasAttribute(\"open\");\r\n\r\n    if (detailsElement === this.mainDetailsToggle) {\r\n      if (isOpen) event.preventDefault();\r\n      isOpen\r\n        ? this.closeMenuDrawer(summaryElement)\r\n        : this.openMenuDrawer(summaryElement);\r\n    } else {\r\n      trapFocus(\r\n        summaryElement.nextElementSibling,\r\n        detailsElement.querySelector(\"button\")\r\n      );\r\n\r\n      setTimeout(() => {\r\n        detailsElement.classList.add(\"menu-opening\");\r\n      });\r\n    }\r\n  }\r\n\r\n  openMenuDrawer(summaryElement) {\r\n    setTimeout(() => {\r\n      this.mainDetailsToggle.classList.add(\"menu-opening\");\r\n    });\r\n    summaryElement.setAttribute(\"aria-expanded\", true);\r\n    trapFocus(this.mainDetailsToggle, summaryElement);\r\n    document.body.classList.add(`overflow-hidden-${this.dataset.breakpoint}`);\r\n  }\r\n\r\n  closeMenuDrawer(event, elementToFocus = false) {\r\n    if (event !== undefined) {\r\n      this.mainDetailsToggle.classList.remove(\"menu-opening\");\r\n      this.mainDetailsToggle.querySelectorAll(\"details\").forEach((details) => {\r\n        details.removeAttribute(\"open\");\r\n        details.classList.remove(\"menu-opening\");\r\n      });\r\n      this.mainDetailsToggle\r\n        .querySelector(\"summary\")\r\n        .setAttribute(\"aria-expanded\", false);\r\n      document.body.classList.remove(\r\n        `overflow-hidden-${this.dataset.breakpoint}`\r\n      );\r\n      removeTrapFocus(elementToFocus);\r\n      this.closeAnimation(this.mainDetailsToggle);\r\n      this.header =\r\n        this.header || document.querySelector(\".shopify-section-header\");\r\n    }\r\n  }\r\n\r\n  onFocusOut(event) {\r\n    setTimeout(() => {\r\n      if (\r\n        this.mainDetailsToggle.hasAttribute(\"open\") &&\r\n        !this.mainDetailsToggle.contains(document.activeElement)\r\n      )\r\n        this.closeMenuDrawer();\r\n    });\r\n  }\r\n\r\n  onCloseButtonClick(event) {\r\n    const detailsElement = event.currentTarget.closest(\"details\");\r\n    this.closeSubmenu(detailsElement);\r\n  }\r\n\r\n  closeSubmenu(detailsElement) {\r\n    detailsElement.classList.remove(\"menu-opening\");\r\n    removeTrapFocus();\r\n    this.closeAnimation(detailsElement);\r\n  }\r\n\r\n  closeAnimation(detailsElement) {\r\n    let animationStart;\r\n\r\n    const handleAnimation = (time) => {\r\n      if (animationStart === undefined) {\r\n        animationStart = time;\r\n      }\r\n\r\n      const elapsedTime = time - animationStart;\r\n\r\n      if (elapsedTime < 400) {\r\n        window.requestAnimationFrame(handleAnimation);\r\n      } else {\r\n        detailsElement.removeAttribute(\"open\");\r\n        if (detailsElement.closest(\"details[open]\")) {\r\n          trapFocus(\r\n            detailsElement.closest(\"details[open]\"),\r\n            detailsElement.querySelector(\"summary\")\r\n          );\r\n        }\r\n      }\r\n    };\r\n\r\n    window.requestAnimationFrame(handleAnimation);\r\n  }\r\n}\r\n\r\ncustomElements.define(\"menu-drawer\", MenuDrawer);\r\n\r\nclass HeaderDrawer extends MenuDrawer {\r\n  constructor() {\r\n    super();\r\n  }\r\n\r\n  openMenuDrawer(summaryElement) {\r\n    this.headerWrapper = document.querySelector(\".header-wrapper\");\r\n    document.documentElement.style.setProperty(\r\n      \"--header-bottom-position\",\r\n      `${parseInt(this.headerWrapper.getBoundingClientRect().top)}px`\r\n    );\r\n    const main = document.querySelector(\"main\");\r\n    if (\r\n      main\r\n        .querySelectorAll(\".shopify-section\")[0]\r\n        ?.classList.contains(\"section--has-overlay\")\r\n    ) {\r\n    }\r\n\r\n    setTimeout(() => {\r\n      this.mainDetailsToggle.classList.add(\"menu-opening\");\r\n    });\r\n\r\n    summaryElement.setAttribute(\"aria-expanded\", true);\r\n    trapFocus(this.mainDetailsToggle, summaryElement);\r\n    document.body.classList.add(`overflow-hidden-${this.dataset.breakpoint}`);\r\n  }\r\n}\r\n\r\ncustomElements.define(\"header-drawer\", HeaderDrawer);\r\n\r\nclass LocalizationForm extends HTMLElement {\r\n  constructor() {\r\n    super();\r\n    this.elements = {\r\n      input: this.querySelector(\r\n        'input[name=\"locale_code\"], input[name=\"country_code\"]'\r\n      ),\r\n      button: this.querySelector(\"button\"),\r\n      panel: this.querySelector(\"ul\"),\r\n    };\r\n\r\n    this.handleDocumentClick = this.handleDocumentClick.bind(this);\r\n    this.elements.button.addEventListener(\"click\", this.togglePanel.bind(this));\r\n    this.addEventListener(\"keydown\", this.onEscapePress.bind(this));\r\n\r\n    this.querySelectorAll(\"a\").forEach((item) =>\r\n      item.addEventListener(\"click\", this.onItemClick.bind(this))\r\n    );\r\n  }\r\n\r\n  connectedCallback() {\r\n    document.addEventListener(\"click\", this.handleDocumentClick);\r\n  }\r\n\r\n  disconnectedCallback() {\r\n    document.removeEventListener(\"click\", this.handleDocumentClick);\r\n  }\r\n\r\n  handleDocumentClick(event) {\r\n    if (!this.contains(event.target)) {\r\n      this.hidePanel();\r\n    }\r\n  }\r\n\r\n  hidePanel() {\r\n    this.elements.button.setAttribute(\"aria-expanded\", \"false\");\r\n    this.elements.panel.setAttribute(\"hidden\", true);\r\n  }\r\n\r\n  showPanel() {\r\n    this.elements.button.setAttribute(\"aria-expanded\", \"true\");\r\n    this.elements.panel.removeAttribute(\"hidden\");\r\n  }\r\n\r\n  togglePanel() {\r\n    if (this.elements.button.getAttribute(\"aria-expanded\") === \"true\") {\r\n      this.hidePanel();\r\n    } else {\r\n      this.showPanel();\r\n    }\r\n  }\r\n\r\n  onEscapePress(event) {\r\n    if (event.key === \"Escape\") {\r\n      this.hidePanel();\r\n    }\r\n  }\r\n\r\n  onItemClick(event) {\r\n    event.preventDefault();\r\n    this.elements.input.value = event.currentTarget.dataset.value;\r\n    this.querySelector(\"form\")?.submit();\r\n    this.hidePanel();\r\n  }\r\n}\r\n\r\ncustomElements.define(\"localization-form\", LocalizationForm);\r\n\r\nclass ModalDialog extends HTMLElement {\r\n  constructor() {\r\n    super();\r\n    this.querySelector('[id^=\"ModalClose-\"]').addEventListener(\r\n      \"click\",\r\n      this.hide.bind(this, false)\r\n    );\r\n    this.addEventListener(\"keyup\", (event) => {\r\n      if (event.code.toUpperCase() === \"ESCAPE\") this.hide();\r\n    });\r\n    if (this.classList.contains(\"media-modal\")) {\r\n      this.addEventListener(\"pointerup\", (event) => {\r\n        if (\r\n          event.pointerType === \"mouse\" &&\r\n          !event.target.closest(\"deferred-media, product-model\")\r\n        )\r\n          this.hide();\r\n      });\r\n    } else {\r\n      this.addEventListener(\"click\", (event) => {\r\n        if (event.target === this) this.hide();\r\n      });\r\n    }\r\n  }\r\n\r\n  connectedCallback() {\r\n    if (this.moved) return;\r\n    this.moved = true;\r\n    document.body.appendChild(this);\r\n  }\r\n\r\n  show(opener) {\r\n    this.openedBy = opener;\r\n    const popup = this.querySelector(\".template-popup\");\r\n    document.body.classList.add(\"overflow-hidden\");\r\n    this.setAttribute(\"open\", \"\");\r\n    if (popup) popup.loadContent();\r\n    trapFocus(this, this.querySelector('[role=\"dialog\"]'));\r\n    window.pauseAllMedia();\r\n\r\n    if (\r\n      /iPhone|iPad|iPod/i.test(navigator.userAgent) &&\r\n      this.classList.contains(\"product-media-modal\")\r\n    ) {\r\n      lockScroll();\r\n    }\r\n  }\r\n\r\n  hide() {\r\n    let isOpen = false;\r\n\r\n    this.removeAttribute(\"open\");\r\n    removeTrapFocus(this.openedBy);\r\n    window.pauseAllMedia();\r\n\r\n    document.querySelectorAll(\"body > quick-add-modal\").forEach((el) => {\r\n      if (el.hasAttribute(\"open\")) {\r\n        isOpen = true;\r\n      }\r\n    });\r\n\r\n    if (!isOpen) {\r\n      document.body.classList.remove(\"overflow-hidden\");\r\n      document.body.dispatchEvent(new CustomEvent(\"modalClosed\"));\r\n    }\r\n\r\n    const images = document.querySelector(\".product-media-modal__content\");\r\n\r\n    if (images) {\r\n      images.classList.remove(\"zoom\");\r\n    }\r\n\r\n    if (\r\n      /iPhone|iPad|iPod/i.test(navigator.userAgent) &&\r\n      this.classList.contains(\"product-media-modal\")\r\n    ) {\r\n      unlockScroll();\r\n    }\r\n  }\r\n}\r\n\r\ncustomElements.define(\"modal-dialog\", ModalDialog);\r\n\r\nclass ModalOpener extends HTMLElement {\r\n  constructor() {\r\n    super();\r\n\r\n    const button = this.querySelector(\"button\");\r\n\r\n    if (!button) return;\r\n    button.addEventListener(\"click\", () => {\r\n      const modal = document.querySelector(this.getAttribute(\"data-modal\"));\r\n      if (modal) modal.show(button);\r\n    });\r\n  }\r\n}\r\n\r\ncustomElements.define(\"modal-opener\", ModalOpener);\r\n\r\nclass DeferredMedia extends HTMLElement {\r\n  constructor() {\r\n    super();\r\n    this.querySelector('[id^=\"Deferred-Poster-\"]')?.addEventListener(\r\n      \"click\",\r\n      this.loadContent.bind(this)\r\n    );\r\n    if (this.getAttribute(\"data-autoplay\")) {\r\n      this.loadContent();\r\n    }\r\n  }\r\n\r\n  loadContent() {\r\n    if (!this.getAttribute(\"loaded\")) {\r\n      const content = document.createElement(\"div\");\r\n      content.appendChild(\r\n        this.querySelector(\"template\").content.firstElementChild.cloneNode(true)\r\n      );\r\n\r\n      this.setAttribute(\"loaded\", true);\r\n      window.pauseAllMedia();\r\n      /*this.appendChild(\r\n\t\t\t\tcontent.querySelector(\"video, model-viewer, iframe\"),\r\n\t\t\t).focus();*/\r\n\r\n      const videoObserver = new IntersectionObserver((entries) => {\r\n        entries.forEach((entry) => {\r\n          if (entry.isIntersecting) {\r\n            if (this.getAttribute(\"data-autoplay\")) {\r\n              if (deferredElement.nodeName == \"VIDEO\") {\r\n                let playPromise = entry.target.play();\r\n                if (playPromise !== undefined) {\r\n                  playPromise.then((_) => {}).catch((error) => {});\r\n                }\r\n              } else {\r\n                if (entry.target.classList.contains(\"js-youtube\")) {\r\n                  entry.target.contentWindow.postMessage(\r\n                    '{\"event\":\"command\",\"func\":\"' +\r\n                      \"playVideo\" +\r\n                      '\",\"args\":\"\"}',\r\n                    \"*\"\r\n                  );\r\n                } else {\r\n                  entry.target.contentWindow.postMessage(\r\n                    '{\"method\":\"play\"}',\r\n                    \"*\"\r\n                  );\r\n                }\r\n              }\r\n              //entry.target.play()\r\n            }\r\n          } else {\r\n            if (deferredElement.nodeName == \"VIDEO\") {\r\n              entry.target.pause();\r\n            } else {\r\n              if (entry.target.classList.contains(\"js-youtube\")) {\r\n                entry.target.contentWindow.postMessage(\r\n                  '{\"event\":\"command\",\"func\":\"' + \"pauseVideo\" + '\",\"args\":\"\"}',\r\n                  \"*\"\r\n                );\r\n              } else {\r\n                entry.target.contentWindow.postMessage(\r\n                  '{\"method\":\"pause\"}',\r\n                  \"*\"\r\n                );\r\n              }\r\n            }\r\n          }\r\n        });\r\n      });\r\n\r\n      const deferredElement = this.appendChild(\r\n        content.querySelector(\"video, model-viewer, iframe\")\r\n      );\r\n      //if (focus) deferredElement.focus();\r\n\r\n      if (\r\n        deferredElement.nodeName == \"VIDEO\" ||\r\n        deferredElement.nodeName == \"IFRAME\"\r\n      ) {\r\n        // force autoplay for safari\r\n\r\n        if (this.classList.contains(\"video-section__media\")) {\r\n          if (deferredElement.nodeName == \"VIDEO\") {\r\n            let playPromise = deferredElement.play();\r\n            if (playPromise !== undefined) {\r\n              playPromise.then((_) => {}).catch((error) => {});\r\n            }\r\n          }\r\n\r\n          videoObserver.observe(deferredElement);\r\n        } else {\r\n          deferredElement.play();\r\n        }\r\n      }\r\n\r\n      const swiperEl = this.closest(\".swiper\");\r\n      const activeSlide =\r\n        swiperEl?.swiper?.slides?.[swiperEl?.swiper?.activeIndex];\r\n      if (activeSlide?.querySelector(\"model-viewer\")) {\r\n        if (\r\n          !activeSlide\r\n            .querySelector(\"model-viewer\")\r\n            .classList.contains(\"shopify-model-viewer-ui__disabled\")\r\n        ) {\r\n          swiperEl.swiper.params.noSwiping = true;\r\n          swiperEl.swiper.params.noSwipingClass = \"swiper-slide\";\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\ncustomElements.define(\"deferred-media\", DeferredMedia);\r\n\r\nclass VariantSelects extends HTMLElement {\r\n  constructor() {\r\n    super();\r\n    this.addEventListener(\"change\", this.onVariantChange);\r\n\r\n    this.isHighVariantNeedUpdate = false;\r\n    this.isCombinedListingsNeedUpdate = false;\r\n  }\r\n\r\n  onVariantChange(event) {\r\n    if (!this.contains(event.target)) return;\r\n\r\n    const combinedProductURL = this.resolveCombinedProductUrl(event.target);\r\n    this.updateOptions();\r\n    this.updateMasterId();\r\n    this.toggleAddButton(true, \"\");\r\n\r\n    this.isHighVariantNeedUpdate = false;\r\n    this.isCombinedListingsNeedUpdate = false;\r\n\r\n    // checking for high-variant and combined products\r\n    // combinedProductURL check has no !currentVariant guard: the selected option may\r\n    // exist in the current product's variant data (same option name, different product),\r\n    // so we must detect the switch regardless of whether a local variant was found.\r\n    if (\r\n      (!this.currentVariant && this.dataset.isHighVariantProduct === \"true\") ||\r\n      combinedProductURL\r\n    ) {\r\n      const selectedValuesIds = this.getSelectedValuesIds();\r\n      this.highVariantRequestUrl = this.createRequestUrl({\r\n        selectedValuesIds: selectedValuesIds,\r\n        combinedProductURL: combinedProductURL,\r\n      });\r\n      if (this.highVariantRequestUrl) {\r\n        this.isHighVariantNeedUpdate = true;\r\n        if (combinedProductURL) {\r\n          this.isCombinedListingsNeedUpdate = true;\r\n        }\r\n      }\r\n    }\r\n\r\n    if (!this.isHighVariantNeedUpdate) {\r\n      this.updatePickupAvailability();\r\n      this.updateVariantStatuses();\r\n    }\r\n\r\n    // For combined listing switches, always use the fetch path even when\r\n    // currentVariant was resolved locally (its data belongs to the current product).\r\n    if (!this.currentVariant || this.isCombinedListingsNeedUpdate) {\r\n      if (this.isHighVariantNeedUpdate) {\r\n        this.classList.add(\"high-variant-loading\");\r\n        this.renderProductInfo(this.highVariantRequestUrl);\r\n        return;\r\n      }\r\n      if (!this.currentVariant) {\r\n        this.toggleAddButton(true, \"\");\r\n        this.setUnavailable();\r\n      }\r\n    } else {\r\n      // Variant Media Grouping: filter the existing gallery in place by color\r\n      // group (before sliding to the featured image). The gallery is NOT\r\n      // rebuilt from the section fetch \u2014 see updateElementsAfterFetch.\r\n      if (this.altMediaGroupingEnabled()) {\r\n        window.updateVariantMediaDisplay?.(\r\n          this.dataset.section,\r\n          this.currentVariant\r\n        );\r\n      } else if (\r\n        this.currentVariant?.featured_media &&\r\n        this.dataset?.variantMediaDisplay === \"show_all\"\r\n      ) {\r\n        this.updateMedia(\r\n          `${this.dataset.section}-${this.currentVariant.featured_media.id}`\r\n        );\r\n      }\r\n      this.updateURL();\r\n      this.updateVariantInput();\r\n      const requestUrl = this.createRequestUrl({\r\n        currentVariantId: this.currentVariant.id,\r\n        selectedValuesIds: this.getSelectedValuesIds(),\r\n      });\r\n      this.renderProductInfo(requestUrl);\r\n    }\r\n\r\n    // VARIANT CHANGE EVENT\r\n    if (this.currentVariant) {\r\n      document.dispatchEvent(\r\n        new CustomEvent(\"variant:change\", {\r\n          detail: {\r\n            variant: this.currentVariant,\r\n            previousVariant: this.previousVariant || null,\r\n            formElement: document.querySelector(`#${this.getAttribute(\"id\")}`),\r\n            sectionId: this.dataset.section,\r\n          },\r\n        })\r\n      );\r\n\r\n      // Save the previous version\r\n      this.previousVariant = this.currentVariant;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Combined listings attach `data-product-url` on option radios.\r\n   * Dropdown UI dispatches `change` from the hidden field sync; resolve URL from the checked radio in the same fieldset.\r\n   */\r\n  resolveCombinedProductUrl(eventTarget) {\r\n    // Extract the product handle from a URL \u2014 robust against locale prefixes (/en/products/...).\r\n    const extractHandle = (url) => {\r\n      if (!url) return null;\r\n      const m = url.match(/\\/products\\/([^/?#]+)/);\r\n      return m ? m[1] : null;\r\n    };\r\n    const currentHandle = extractHandle(this.dataset.url || \"\");\r\n    const isDifferentProduct = (url) => {\r\n      if (!url) return false;\r\n      const handle = extractHandle(url);\r\n      // if either handle is unresolvable, don't treat as combined switch\r\n      if (!handle || !currentHandle) return false;\r\n      return handle !== currentHandle;\r\n    };\r\n\r\n    const fromTarget = eventTarget?.dataset?.productUrl;\r\n    if (isDifferentProduct(fromTarget)) return fromTarget;\r\n    // native <select>: read data-product-url from the selected <option>\r\n    if (eventTarget?.tagName === \"SELECT\") {\r\n      const selectedOpt = eventTarget.options[eventTarget.selectedIndex];\r\n      if (isDifferentProduct(selectedOpt?.dataset?.productUrl))\r\n        return selectedOpt.dataset.productUrl;\r\n    }\r\n    const fieldset = eventTarget?.closest?.(\r\n      \".product-form__controls--dropdown\"\r\n    );\r\n    if (fieldset) {\r\n      const checkedRadio = fieldset.querySelector(\r\n        'input[type=\"radio\"]:checked'\r\n      );\r\n      if (isDifferentProduct(checkedRadio?.dataset?.productUrl))\r\n        return checkedRadio.dataset.productUrl;\r\n    }\r\n    return \"\";\r\n  }\r\n\r\n  updateOptions() {\r\n    const fieldsets = Array.from(\r\n      this.querySelectorAll(\".product-form__controls--dropdown\")\r\n    );\r\n\r\n    this.options = Array.from(\r\n      this.querySelectorAll(\"select\"),\r\n      (select) => select.value\r\n    ).concat(\r\n      fieldsets.map((fieldset) => {\r\n        return Array.from(fieldset.querySelectorAll(\"input\")).find(\r\n          (radio) => radio.checked\r\n        )?.value;\r\n      })\r\n    );\r\n  }\r\n\r\n  getSelectedValuesIds() {\r\n    const controls = [...this.querySelectorAll(\".product-form__controls\")];\r\n\r\n    controls.sort((a, b) => {\r\n      return (\r\n        Number(a.dataset.optionPosition) - Number(b.dataset.optionPosition)\r\n      );\r\n    });\r\n\r\n    return controls.map((control) => {\r\n      const select = control.querySelector(\"select\");\r\n      if (select) {\r\n        const selectedOption = select.options[select.selectedIndex];\r\n        return (\r\n          selectedOption?.dataset?.optionValueId ||\r\n          selectedOption?.value ||\r\n          null\r\n        );\r\n      }\r\n\r\n      const checkedInput = control.querySelector('input[type=\"radio\"]:checked');\r\n      return checkedInput?.dataset?.optionValueId\r\n        ? checkedInput.dataset.optionValueId\r\n        : null;\r\n    });\r\n  }\r\n\r\n  createRequestUrl({\r\n    combinedProductURL = \"\",\r\n    currentVariantId = \"\",\r\n    selectedValuesIds = [],\r\n  }) {\r\n    const productUrl = combinedProductURL || `${this.dataset.url}`;\r\n    const sectionId = this.dataset.originalSection\r\n      ? this.dataset.originalSection\r\n      : this.dataset.section;\r\n\r\n    // Filter out any null/undefined entries \u2014 missing data-option-value-id would produce\r\n    // invalid IDs that could cause Shopify to ignore ?variant= and return the default variant.\r\n    const validOptionValueIds = selectedValuesIds.filter(Boolean);\r\n\r\n    if (currentVariantId) {\r\n      const params = [`variant=${currentVariantId}`, `section_id=${sectionId}`];\r\n      // Include option_values so section.settings.product_item (featured product)\r\n      // pre-selects the correct variant \u2014 ?variant= only works for the page's implicit product.\r\n      if (validOptionValueIds.length) {\r\n        params.push(`option_values=${validOptionValueIds.join(\",\")}`);\r\n      }\r\n      return `${productUrl}?${params.join(\"&\")}`;\r\n    }\r\n\r\n    // for high-variant products: pass option_values to resolve variant server-side.\r\n    // skip option_values for combined listing switches \u2014 the IDs belong to the\r\n    // current product and are meaningless on the target product.\r\n    if (validOptionValueIds.length && !combinedProductURL) {\r\n      const params = [];\r\n      params.push(`section_id=${sectionId}`);\r\n      params.push(`option_values=${validOptionValueIds.join(\",\")}`);\r\n      return `${productUrl}?${params.join(\"&\")}`;\r\n    }\r\n\r\n    return `${productUrl}?section_id=${sectionId}`;\r\n  }\r\n\r\n  setCurrentVariantAfterFetch(html) {\r\n    const sourceSectionId = this.dataset.originalSection\r\n      ? this.dataset.originalSection\r\n      : this.dataset.section;\r\n    const currentSectionId = this.dataset.section;\r\n    const currentBlockId = this.dataset.block;\r\n    // Fetched HTML uses original (un-prefixed) IDs; strip 'quickadd-' added by preventDuplicatedIDs.\r\n    const sourceBlockId =\r\n      currentBlockId?.replace(/^quickadd-/, \"\") || currentBlockId;\r\n\r\n    const sourceId = sourceBlockId\r\n      ? `variant-radios-${sourceSectionId}-${sourceBlockId}`\r\n      : `variant-picker-${sourceSectionId}`;\r\n    const destinationId = currentBlockId\r\n      ? `variant-radios-${currentSectionId}-${currentBlockId}`\r\n      : `variant-picker-${currentSectionId}`;\r\n\r\n    const variantPickerSource = html.getElementById(sourceId);\r\n    const variantPickerDestination = this.resolveById(destinationId);\r\n    if (!variantPickerSource) return;\r\n\r\n    const newVariantDataEl = variantPickerSource.querySelector(\r\n      \"[data-selected-variant]\"\r\n    );\r\n    if (!newVariantDataEl) return;\r\n\r\n    const newVariantData = newVariantDataEl.innerHTML;\r\n\r\n    const selectedVariant = !!newVariantData\r\n      ? JSON.parse(newVariantData)\r\n      : null;\r\n\r\n    this.currentVariant = selectedVariant;\r\n\r\n    const oldEl = variantPickerDestination?.querySelector(\r\n      \"[data-selected-variant]\"\r\n    );\r\n    if (oldEl) {\r\n      oldEl.innerHTML = newVariantData;\r\n    }\r\n  }\r\n\r\n  updateMasterId() {\r\n    if (this.variantData || this.querySelector(\"[data-all-variants-no-high]\")) {\r\n      this.currentVariant = this.getVariantData().find((variant) => {\r\n        return !variant.options\r\n          .map((option, index) => {\r\n            return this.options[index] === option;\r\n          })\r\n          .includes(false);\r\n      });\r\n    }\r\n  }\r\n\r\n  isHidden(elem) {\r\n    const styles = window.getComputedStyle(elem);\r\n    return styles.display === \"none\" || styles.visibility === \"hidden\";\r\n  }\r\n\r\n  // Variant Media Grouping is active for this section when the gallery root\r\n  // carries data-alt-media-grouping (only emitted when the setting is on AND\r\n  // the product has a detectable color option).\r\n  altMediaGroupingEnabled() {\r\n    const scope =\r\n      this.closest(\".product\") || this.closest(\"quick-add-modal\") || document;\r\n    return !!scope.querySelector(\r\n      `[data-section=\"product-media-${this.dataset.section}\"][data-alt-media-grouping=\"true\"]`\r\n    );\r\n  }\r\n\r\n  updateMedia(mediaId) {\r\n    if (!mediaId || !this.currentVariant?.featured_media?.id) return;\r\n\r\n    const productScope =\r\n      this.closest(\".product\") || this.closest(\"quick-add-modal\") || document;\r\n\r\n    const mediaEl = productScope.querySelector(\r\n      `[data-section=\"product-media-${this.dataset.section}\"]`\r\n    );\r\n    if (!mediaEl) return;\r\n\r\n    const swiperWrappers = productScope.querySelectorAll(\r\n      \".product__media-wrapper\"\r\n    );\r\n\r\n    swiperWrappers.forEach((elem) => {\r\n      if (!this.isHidden(elem)) {\r\n        const newMedia = elem.querySelector(\r\n          `[data-media-id=\"${this.dataset.section}-${this.currentVariant.featured_media.id}\"]`\r\n        );\r\n\r\n        const mediaList = elem.querySelector(\".js-media-list\");\r\n        if (mediaList?.swiper) {\r\n          const slideIndex = mediaList.swiper.slides.indexOf(newMedia);\r\n          if (slideIndex >= 0) {\r\n            mediaList.swiper.slideTo(slideIndex);\r\n          }\r\n        } else if (newMedia) {\r\n          // stacked/grid galleries have no Swiper \u2014 update active class directly\r\n          elem\r\n            .querySelectorAll(\".product__media-item\")\r\n            .forEach((item) => item.classList.remove(\"active\"));\r\n          newMedia.classList.add(\"active\");\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  updateURL() {\r\n    if (this.dataset.updateUrl === \"false\") return;\r\n    const newUrl = this.currentVariant\r\n      ? `${this.dataset.url}?variant=${this.currentVariant.id}`\r\n      : this.dataset.url;\r\n\r\n    window.history.replaceState({}, \"\", newUrl);\r\n  }\r\n\r\n  updateVariantInput() {\r\n    const sectionId = this.dataset.section;\r\n    const formIds = [\r\n      `product-form-${sectionId}`,\r\n      `product-form-installment-${sectionId}`,\r\n    ];\r\n    const productForms = formIds\r\n      .map((id) => this.resolveById(id))\r\n      .filter(Boolean);\r\n    productForms.forEach((productForm) => {\r\n      const input = productForm.querySelector('input[name=\"id\"]');\r\n      if (!input) return;\r\n      input.value = this.currentVariant.id;\r\n      input.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n    });\r\n\r\n    publish(PUB_SUB_EVENTS.variantChange, {\r\n      data: {\r\n        sectionId: this.dataset.section,\r\n        variant: this.currentVariant,\r\n      },\r\n    });\r\n\r\n    // [Start theme custom event] - Variant change event\r\n    document.dispatchEvent(\r\n      new CustomEvent(\"variant:change\", {\r\n        detail: {\r\n          variant: this.currentVariant,\r\n          previousVariant: this.previousVariant || null,\r\n          formElement: this,\r\n          sectionId: this.dataset.section,\r\n        },\r\n      })\r\n    );\r\n\r\n    this.previousVariant = this.currentVariant;\r\n    // [End theme custom event] - Variant change event\r\n  }\r\n\r\n  getSelectedValueFromWrapper(wrapper) {\r\n    const select = wrapper.querySelector(\"select\");\r\n    if (select) return select.value;\r\n    return wrapper.querySelector('input[type=\"radio\"]:checked')?.value;\r\n  }\r\n\r\n  updateVariantStatuses() {\r\n    if (!this.variantData) return;\r\n    const inputWrappers = [...this.querySelectorAll(\".product-form__controls\")];\r\n    const firstValue = this.getSelectedValueFromWrapper(inputWrappers[0]);\r\n    if (!firstValue) return;\r\n    const selectedOptionOneVariants = this.variantData.filter(\r\n      (variant) => firstValue === variant.option1\r\n    );\r\n    inputWrappers.forEach((option, index) => {\r\n      if (index === 0) return;\r\n      const optionInputs = [\r\n        ...option.querySelectorAll('input[type=\"radio\"], option'),\r\n      ];\r\n      const previousOptionSelected = this.getSelectedValueFromWrapper(\r\n        inputWrappers[index - 1]\r\n      );\r\n      const availableOptionInputsValue = selectedOptionOneVariants\r\n        .filter(\r\n          (variant) =>\r\n            variant.available &&\r\n            variant[`option${index}`] === previousOptionSelected\r\n        )\r\n        .map((variantOption) => variantOption[`option${index + 1}`]);\r\n      this.setInputAvailability(optionInputs, availableOptionInputsValue);\r\n    });\r\n  }\r\n\r\n  setInputAvailability(listOfOptions, listOfAvailableOptions) {\r\n    listOfOptions.forEach((input) => {\r\n      // skip options belonging to other combined-listing products\r\n      const inputProductUrl = input.dataset?.productUrl;\r\n      if (inputProductUrl && inputProductUrl !== this.dataset.url) return;\r\n\r\n      if (listOfAvailableOptions.includes(input.getAttribute(\"value\"))) {\r\n        if (input.tagName === \"OPTION\") {\r\n          input.innerText = input.getAttribute(\"value\");\r\n          input.disabled = false;\r\n        } else if (input.tagName === \"INPUT\") {\r\n          input.classList.remove(\"disabled\", \"always-clickable\");\r\n          input.disabled = false;\r\n        }\r\n      } else {\r\n        if (input.tagName === \"OPTION\") {\r\n          input.innerText =\r\n            window.variantStrings.unavailable_with_option.replace(\r\n              \"[value]\",\r\n              input.getAttribute(\"value\")\r\n            );\r\n          input.disabled = false;\r\n        } else if (input.tagName === \"INPUT\") {\r\n          input.classList.add(\"disabled\");\r\n\r\n          if (this.dataset.unavailableOptionsClickable === \"true\") {\r\n            input.classList.add(\"always-clickable\");\r\n            input.disabled = false;\r\n          } else {\r\n            input.disabled = true;\r\n          }\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  updatePickupAvailability() {\r\n    // scope to the current product's container so multi-product pages don't cross-update\r\n    const productScope =\r\n      this.closest(\"quick-add-modal\") ||\r\n      this.closest(\".product\") ||\r\n      document.getElementById(`shopify-section-${this.dataset.section}`) ||\r\n      document;\r\n    const pickUpAvailability = productScope.querySelectorAll(\r\n      \"pickup-availability\"\r\n    );\r\n    if (!pickUpAvailability.length) return;\r\n\r\n    pickUpAvailability.forEach((el) => {\r\n      if (this.currentVariant && this.currentVariant.available) {\r\n        el.fetchAvailability(this.currentVariant.id);\r\n      } else {\r\n        el.removeAttribute(\"available\");\r\n        el.innerHTML = \"\";\r\n      }\r\n    });\r\n  }\r\n\r\n  renderProductInfo(requestUrl) {\r\n    this.abortController?.abort();\r\n    this.abortController = new AbortController();\r\n    fetch(requestUrl, { signal: this.abortController.signal })\r\n      .then((response) => response.text())\r\n      .then((responseText) => {\r\n        // prevent unnecessary ui changes from abandoned selections\r\n        //if (this.currentVariant.id !== requestedVariantId) return\r\n\r\n        const html = new DOMParser().parseFromString(responseText, \"text/html\");\r\n\r\n        try {\r\n          this.setCurrentVariantAfterFetch(html);\r\n        } catch (err) {}\r\n\r\n        // -----\r\n        // for high-variant products\r\n        // and if variant not found in liquid <script data-all-variants-no-high>\r\n        // but it was found after a request with the option_values parameter\r\n        if (this.isHighVariantNeedUpdate) {\r\n          // validate: server may return a fallback variant whose options don't match\r\n          // the user's actual selection \u2014 treat that as unavailable to prevent false add-to-cart.\r\n          // Skip for combined listings: the switched product has different options by design.\r\n          if (\r\n            this.currentVariant &&\r\n            this.options?.length &&\r\n            !this.isCombinedListingsNeedUpdate\r\n          ) {\r\n            const optionsMatch = this.options.every(\r\n              (opt, i) =>\r\n                opt === undefined || this.currentVariant.options[i] === opt\r\n            );\r\n            if (!optionsMatch) {\r\n              this.currentVariant = null;\r\n            }\r\n          }\r\n          try {\r\n            // skip updateURL here for combined listings \u2014 URL is synced after this.dataset.url is updated below\r\n            if (!this.isCombinedListingsNeedUpdate) this.updateURL();\r\n            this.updatePickupAvailability();\r\n            this.updatePickerInnerHtml(html);\r\n            if (this.currentVariant) {\r\n              this.updateVariantInput();\r\n              if (\r\n                this.altMediaGroupingEnabled() &&\r\n                !this.isCombinedListingsNeedUpdate\r\n              ) {\r\n                // Grouping: filter the existing gallery in place; it is not\r\n                // replaced in updateElementsAfterFetch for this mode.\r\n                window.updateVariantMediaDisplay?.(\r\n                  this.dataset.section,\r\n                  this.currentVariant\r\n                );\r\n              } else if (\r\n                this.currentVariant.featured_media &&\r\n                this.dataset?.variantMediaDisplay === \"show_all\" &&\r\n                !this.isCombinedListingsNeedUpdate\r\n              ) {\r\n                // If variant display != \"show_all\", the media gallery element is fully replaced inside updateElementsAfterFetch.\r\n                // Combined listings load a different product \u2014 gallery is replaced in updateElementsAfterFetch; skip swiper on stale HTML.\r\n                const mediaId = `${this.dataset.section}-${this.currentVariant.featured_media.id}`;\r\n                this.updateMedia(mediaId);\r\n              }\r\n              //this.updateAvaliabilityNotificationInfo();\r\n            }\r\n          } catch (err) {}\r\n        }\r\n        // -----\r\n\r\n        this.updateElementsAfterFetch(html);\r\n\r\n        if (!this.currentVariant) {\r\n          this.toggleAddButton(true, \"\");\r\n          this.setUnavailable();\r\n        } else {\r\n          this.toggleAddButton(\r\n            !this.currentVariant?.available,\r\n            window.variantStrings.soldOut\r\n          );\r\n        }\r\n      })\r\n      .catch((error) => {\r\n        if (error.name === \"AbortError\") {\r\n          console.info(\"Fetch aborted by user\");\r\n        } else {\r\n          console.error(error);\r\n        }\r\n      })\r\n      .finally(() => {\r\n        this.classList.remove(\"high-variant-loading\");\r\n      });\r\n  }\r\n\r\n  updatePickerInnerHtml(html) {\r\n    // attr data-original-section use for Quick view modal\r\n    const currentSectionId = this.dataset.section;\r\n    const currentBlockId = this.dataset.block;\r\n    const sourceSectionId = this.dataset.originalSection\r\n      ? this.dataset.originalSection\r\n      : this.dataset.section;\r\n    const sourceBlockId =\r\n      currentBlockId?.replace(/^quickadd-/, \"\") || currentBlockId;\r\n\r\n    const sourceId = sourceBlockId\r\n      ? `variant-radios-${sourceSectionId}-${sourceBlockId}`\r\n      : `variant-picker-${sourceSectionId}`;\r\n    const destinationId = currentBlockId\r\n      ? `variant-radios-${currentSectionId}-${currentBlockId}`\r\n      : `variant-picker-${currentSectionId}`;\r\n\r\n    const variantPickerSource = html.getElementById(sourceId);\r\n    const variantPickerDestination = this.resolveById(destinationId);\r\n    if (variantPickerSource && variantPickerDestination) {\r\n      variantPickerDestination.innerHTML = variantPickerSource.innerHTML;\r\n    }\r\n  }\r\n\r\n  updateElementsAfterFetch(html) {\r\n    const currentSectionId = this.dataset.section;\r\n    const sourceSectionId = this.dataset.originalSection\r\n      ? this.dataset.originalSection\r\n      : this.dataset.section;\r\n\r\n    // price element\r\n    const destination = this.resolveById(`price-${this.dataset.section}`);\r\n    const source = html.getElementById(\r\n      `price-${\r\n        this.dataset.originalSection\r\n          ? this.dataset.originalSection\r\n          : this.dataset.section\r\n      }`\r\n    );\r\n    const skuSource = html.getElementById(\r\n      `Sku-${\r\n        this.dataset.originalSection\r\n          ? this.dataset.originalSection\r\n          : this.dataset.section\r\n      }`\r\n    );\r\n    const skuDestination = this.resolveById(`Sku-${this.dataset.section}`);\r\n    const inventorySource = html.getElementById(\r\n      `Inventory-${\r\n        this.dataset.originalSection\r\n          ? this.dataset.originalSection\r\n          : this.dataset.section\r\n      }`\r\n    );\r\n\r\n    const inventoryDestination = this.resolveById(\r\n      `Inventory-${this.dataset.section}`\r\n    );\r\n    const colorNameSource = html.getElementById(\r\n      `ColorName-${\r\n        this.dataset.originalSection\r\n          ? this.dataset.originalSection\r\n          : this.dataset.section\r\n      }`\r\n    );\r\n    const colorNameDestination = this.resolveById(\r\n      `ColorName-${this.dataset.section}`\r\n    );\r\n\r\n    if (source && destination) destination.innerHTML = source.innerHTML;\r\n    if (inventorySource && inventoryDestination)\r\n      inventoryDestination.innerHTML = inventorySource.innerHTML;\r\n    if (skuSource && skuDestination) {\r\n      skuDestination.innerHTML = skuSource.innerHTML;\r\n      skuDestination.classList.toggle(\r\n        \"visibility-hidden\",\r\n        skuSource.classList.contains(\"visibility-hidden\")\r\n      );\r\n    } else if (!skuSource && skuDestination) {\r\n      // variant has no SKU \u2014 clear stale value from previous variant\r\n      skuDestination.innerHTML = \"\";\r\n      skuDestination.classList.add(\"visibility-hidden\");\r\n    }\r\n    if (colorNameSource && colorNameDestination) {\r\n      colorNameDestination.innerHTML = colorNameSource.innerHTML;\r\n    } else if (!colorNameSource && colorNameDestination) {\r\n      colorNameDestination.innerHTML = \"\";\r\n    }\r\n\r\n    // B2B quantity pricing: sync volume table + quantity rules from fetched response\r\n    const buttonsSourceEl = html\r\n      .getElementById(`product-form-${sourceSectionId}`)\r\n      ?.querySelector(\".product-form__buttons\");\r\n    const buttonsDestEl = this.resolveById(\r\n      `product-form-${this.dataset.section}`\r\n    )?.querySelector(\".product-form__buttons\");\r\n    if (buttonsSourceEl && buttonsDestEl) {\r\n      const sourceHasQtyPricing =\r\n        buttonsSourceEl.dataset.hasQuantityPricing === \"true\";\r\n      const destHadQtyPricing =\r\n        buttonsDestEl.dataset.hasQuantityPricing === \"true\";\r\n\r\n      if (sourceHasQtyPricing || destHadQtyPricing) {\r\n        if (sourceHasQtyPricing) {\r\n          buttonsDestEl.dataset.hasQuantityPricing = \"true\";\r\n        } else {\r\n          delete buttonsDestEl.dataset.hasQuantityPricing;\r\n        }\r\n\r\n        const sourceB2bEl = buttonsSourceEl.querySelector(\r\n          \".product-b2b-elements\"\r\n        );\r\n        const destB2bEl = buttonsDestEl.querySelector(\".product-b2b-elements\");\r\n        if (sourceB2bEl && destB2bEl) {\r\n          destB2bEl.innerHTML = sourceB2bEl.innerHTML;\r\n        } else if (sourceB2bEl && !destB2bEl) {\r\n          buttonsDestEl.insertAdjacentHTML(\"afterbegin\", sourceB2bEl.outerHTML);\r\n        } else if (!sourceB2bEl && destB2bEl) {\r\n          destB2bEl.remove();\r\n        }\r\n      }\r\n    }\r\n\r\n    // quantity rules: update from fetched response so max/min messages reset on variant switch\r\n    const formSourceEl = html.getElementById(`product-form-${sourceSectionId}`);\r\n    const formDestEl = this.resolveById(`product-form-${this.dataset.section}`);\r\n    if (formDestEl) {\r\n      const qtyRulesSource = formSourceEl?.querySelector(\".quantity__rules\");\r\n      const qtyRulesDest = formDestEl.querySelector(\".quantity__rules\");\r\n      if (qtyRulesDest) {\r\n        qtyRulesDest.innerHTML = qtyRulesSource ? qtyRulesSource.innerHTML : \"\";\r\n      }\r\n      const qtyInputWrapperSource =\r\n        formSourceEl?.querySelector(\"quantity-input\");\r\n      const qtyInputWrapperDest = formDestEl.querySelector(\"quantity-input\");\r\n      const qtyInputSource =\r\n        qtyInputWrapperSource?.querySelector(\".quantity__input\");\r\n      const qtyInputDest =\r\n        qtyInputWrapperDest?.querySelector(\".quantity__input\");\r\n      if (qtyInputSource && qtyInputDest) {\r\n        [\r\n          \"data-min\",\r\n          \"min\",\r\n          \"data-max\",\r\n          \"max\",\r\n          \"step\",\r\n          \"data-cart-quantity\",\r\n        ].forEach((attr) => {\r\n          const val = qtyInputSource.getAttribute(attr);\r\n          if (val !== null) qtyInputDest.setAttribute(attr, val);\r\n          else qtyInputDest.removeAttribute(attr);\r\n        });\r\n        qtyInputDest.value = qtyInputSource.value;\r\n\r\n        // the min/max error copy lives on the <quantity-input> wrapper, not the\r\n        // <input> itself \u2014 sync it too so an old variant's message doesn't linger\r\n        [\"data-error-min\", \"data-error-max\"].forEach((attr) => {\r\n          const val = qtyInputWrapperSource.getAttribute(attr);\r\n          if (val !== null) qtyInputWrapperDest.setAttribute(attr, val);\r\n          else qtyInputWrapperDest.removeAttribute(attr);\r\n        });\r\n\r\n        // re-run the quantity-input's own validation so button disabled-states\r\n        // and any visible error message reflect the newly-synced min/max/step\r\n        // instead of staying stuck with whatever the previous variant computed\r\n        qtyInputDest.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n      }\r\n\r\n      // clear any cart error message so stale messages don't persist after variant change\r\n      const productFormEl = formDestEl.closest(\"product-form\");\r\n      if (productFormEl) {\r\n        productFormEl.handleErrorMessage?.();\r\n      } else {\r\n        formDestEl\r\n          .querySelector(\".product-form__error-message-wrapper\")\r\n          ?.setAttribute(\"hidden\", \"\");\r\n      }\r\n    }\r\n\r\n    const price = this.resolveById(`price-${this.dataset.section}`);\r\n\r\n    if (price) price.classList.remove(\"visibility-hidden\");\r\n\r\n    if (inventoryDestination)\r\n      inventoryDestination.classList.toggle(\r\n        \"visibility-hidden\",\r\n        inventorySource?.innerText === \"\"\r\n      );\r\n\r\n    this.toggleAddButton(\r\n      !this.currentVariant?.available,\r\n      window.variantStrings.soldOut\r\n    );\r\n\r\n    // Quick view: always swap gallery from fetch (Swiper + DOM ids are modal-specific; slideTo alone is unreliable).\r\n    // Combined listings fetch another product URL \u2014 always refresh gallery from the response (same as non-show_all).\r\n    // Variant Media Grouping keeps all media in the DOM and filters in place, so\r\n    // (like show_all) the gallery must NOT be rebuilt from the fetch \u2014 otherwise\r\n    // Swiper/thumbs layout and heights reset on every color switch.\r\n    const inQuickView = Boolean(this.closest(\"quick-add-modal\"));\r\n    const altMediaGrouping = this.altMediaGroupingEnabled();\r\n    if (\r\n      inQuickView ||\r\n      (this.dataset?.variantMediaDisplay !== \"show_all\" && !altMediaGrouping) ||\r\n      this.isCombinedListingsNeedUpdate\r\n    ) {\r\n      const parentQuickView = this.closest(\"quick-add-modal\");\r\n      const galleryScope = parentQuickView || document;\r\n\r\n      // Use .product__media-wrapper as boundary \u2014 it is always present inside\r\n      // [data-section=\"main-X\"] for all gallery types (slider, stacked, grid)\r\n      // AND for no-media products (placeholder SVG). Replacing its innerHTML\r\n      // covers every case: media\u2192media, media\u2192no-media, no-media\u2192media.\r\n      const mediaWrapperSource = html.querySelector(\r\n        `[data-section=\"main-${sourceSectionId}\"] .product__media-wrapper`\r\n      );\r\n      const mediaWrapperDest = galleryScope.querySelector(\r\n        `[data-section=\"main-${currentSectionId}\"] .product__media-wrapper`\r\n      );\r\n\r\n      if (mediaWrapperDest) {\r\n        // destroy any running Swiper instances before replacing DOM\r\n        const sliderRestartRoot =\r\n          mediaWrapperDest.closest(\".product\") || parentQuickView;\r\n        if (sliderRestartRoot) {\r\n          sliderRestartRoot\r\n            .querySelectorAll(\".js-media-list\")\r\n            .forEach((el) => el.swiper?.destroy(true, true));\r\n          sliderRestartRoot\r\n            .querySelectorAll(\".js-media-sublist\")\r\n            .forEach((el) => el.swiper?.destroy(true, true));\r\n        }\r\n\r\n        // replace entire wrapper \u2014 includes gallery, thumbnails, placeholder, or empty\r\n        mediaWrapperDest.innerHTML = mediaWrapperSource\r\n          ? mediaWrapperSource.innerHTML\r\n          : \"\";\r\n\r\n        // update zoom modal \u2014 product-media-modal moves to document.body so always\r\n        // use document.querySelector regardless of quick-view context\r\n        const popupSliderEl = document.querySelector(\".js-popup-slider\");\r\n        if (popupSliderEl) {\r\n          const popupSwiperWrapper =\r\n            popupSliderEl.querySelector(\".swiper-wrapper\");\r\n          const popupSwiperSource = html.querySelector(\r\n            \".js-popup-slider .swiper-wrapper\"\r\n          );\r\n          if (popupSwiperWrapper) {\r\n            popupSliderEl.swiper?.destroy(true, true);\r\n            popupSwiperWrapper.innerHTML = popupSwiperSource\r\n              ? popupSwiperSource.innerHTML\r\n              : \"\";\r\n          }\r\n        }\r\n\r\n        if (parentQuickView) {\r\n          // quick-add-modal opens with delay 8; match that after DOM swap\r\n          if (mediaWrapperDest.querySelector(\".js-media-list\")) {\r\n            subSliderInit(true, 8, mediaWrapperDest);\r\n            sliderInit(true, mediaWrapperDest);\r\n          }\r\n        } else {\r\n          if (mediaWrapperDest.querySelector(\".js-media-list\")) {\r\n            subSliderInit(true, 16, mediaWrapperDest);\r\n            sliderInit(true, mediaWrapperDest);\r\n          }\r\n          if (mediaWrapperSource && typeof popupSliderInit === \"function\") {\r\n            popupSliderInit(true);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    if (this.isCombinedListingsNeedUpdate) {\r\n      const scope = this.getVariantDomScope();\r\n      const sectionId = this.dataset.section;\r\n\r\n      // --- Replace entire product info container from fetched HTML ---\r\n      // ProductInfo-X holds all blocks: title, description, variant picker,\r\n      // custom liquid, complementary products, etc.\r\n      // We replace its innerHTML (with section ID fixup) so every block\r\n      // reflects the switched product without needing per-block selectors.\r\n      const infoContainerSource = html.getElementById(\r\n        `ProductInfo-${sourceSectionId}`\r\n      );\r\n      const infoContainerDest = this.resolveById(`ProductInfo-${sectionId}`);\r\n\r\n      if (infoContainerSource) {\r\n        if (inQuickView) {\r\n          // In QV: patch only the picker innerHTML in place.\r\n          // Never replace ProductInfo-X.innerHTML \u2014 that would wipe the\r\n          // \"View details\" link and any other static QV elements.\r\n          const newPickerSource =\r\n            infoContainerSource.querySelector(\"variant-radios\") ||\r\n            infoContainerSource.querySelector(\"variant-selects\");\r\n          if (newPickerSource) {\r\n            this.innerHTML = newPickerSource.innerHTML.replaceAll(\r\n              sourceSectionId,\r\n              sectionId\r\n            );\r\n          }\r\n\r\n          // Update product title in QV when switching combined listing products.\r\n          const titleSource = html.getElementById(\r\n            `ProductTitle-${sourceSectionId}`\r\n          );\r\n          const titleDest = this.resolveById(`ProductTitle-${sectionId}`);\r\n          if (titleSource && titleDest) {\r\n            titleDest.innerHTML = titleSource.innerHTML;\r\n          }\r\n        } else if (infoContainerDest) {\r\n          // On the product page: replace the entire info container so\r\n          // title, description, and all blocks reflect the switched product.\r\n          const newHtml = infoContainerSource.innerHTML.replaceAll(\r\n            sourceSectionId,\r\n            sectionId\r\n          );\r\n          infoContainerDest.innerHTML = newHtml;\r\n\r\n          // Re-insert `this` (the live picker element) in place of the\r\n          // freshly-rendered (non-functional) one so event listeners survive.\r\n          const newPickerEl =\r\n            infoContainerDest.querySelector(\"variant-radios\") ||\r\n            infoContainerDest.querySelector(\"variant-selects\");\r\n          if (newPickerEl && newPickerEl !== this) {\r\n            this.innerHTML = newPickerEl.innerHTML;\r\n            newPickerEl.replaceWith(this);\r\n          }\r\n        }\r\n      }\r\n\r\n      // --- Breadcrumb (outside ProductInfo container) ---\r\n      const breadcrumbSource = html.getElementById(\r\n        `ProductBreadcrumbTitle-${sourceSectionId}`\r\n      );\r\n      const breadcrumbDest = this.resolveById(\r\n        `ProductBreadcrumbTitle-${sectionId}`\r\n      );\r\n      if (breadcrumbSource && breadcrumbDest) {\r\n        breadcrumbDest.innerText = breadcrumbSource.innerText;\r\n      }\r\n\r\n      // --- Complementary products: update data-url with new product ID and re-fetch ---\r\n      // product-recommendations fetches once on intersection; after a product\r\n      // switch we need to request recommendations for the switched product.\r\n      const complementarySource = html.querySelector(\".complementary-products\");\r\n      const complementaryDest = scope.querySelector(\".complementary-products\");\r\n      if (complementarySource && complementaryDest) {\r\n        const newUrl = complementarySource.dataset.url;\r\n        if (newUrl) {\r\n          complementaryDest.dataset.url = newUrl;\r\n          // Re-fetch with the new product ID\r\n          fetch(newUrl)\r\n            .then((r) => r.text())\r\n            .then((text) => {\r\n              const complementaryHtml = new DOMParser().parseFromString(\r\n                text,\r\n                \"text/html\"\r\n              );\r\n              const newRecommendations = complementaryHtml.querySelector(\r\n                \"product-recommendations\"\r\n              );\r\n              if (newRecommendations?.innerHTML.trim()) {\r\n                complementaryDest.innerHTML = newRecommendations.innerHTML;\r\n              } else {\r\n                complementaryDest.innerHTML = \"\";\r\n              }\r\n            })\r\n            .catch(() => {});\r\n        }\r\n      }\r\n\r\n      // --- Sync variant picker state on `this` ---\r\n      // After innerHTML replacement, variantData cache is stale.\r\n      this.variantData = null;\r\n\r\n      // Sync base URL so subsequent variant changes fetch from the switched product.\r\n      // Search broadly \u2014 featured-product has no .product__info-wrapper wrapper.\r\n      const variantsSource =\r\n        html.querySelector(\"variant-radios[data-url]\") ||\r\n        html.querySelector(\"variant-selects[data-url]\");\r\n      const newProductUrl = variantsSource?.dataset?.url;\r\n      if (newProductUrl) {\r\n        this.dataset.url = newProductUrl;\r\n      }\r\n      // Sync high-variant flag from the incoming product so subsequent\r\n      // option changes on the new product use server-side variant resolution.\r\n      if (variantsSource?.dataset?.isHighVariantProduct !== undefined) {\r\n        this.dataset.isHighVariantProduct =\r\n          variantsSource.dataset.isHighVariantProduct;\r\n      }\r\n\r\n      // Re-read options from the newly swapped-in picker so the first\r\n      // subsequent variant change reads the correct option values.\r\n      this.updateOptions();\r\n\r\n      // Update page URL now that this.dataset.url reflects the switched product.\r\n      this.updateURL();\r\n    }\r\n  }\r\n\r\n  toggleAddButton(disable = true, text) {\r\n    const productForm = this.resolveProductFormEl();\r\n    if (!productForm) return;\r\n    const addButton = productForm.querySelector('[name=\"add\"]');\r\n    if (!addButton) return;\r\n    const addButtonText =\r\n      addButton.querySelector(\".button__label\") ||\r\n      addButton.querySelector(\"span\");\r\n\r\n    // Lobo C89: textContent borra el SVG del carrito que vive dentro del span;\r\n    // se guarda una vez y se vuelve a poner al habilitar el bot\u00F3n.\r\n    const cartIcon = addButtonText.querySelector(\".icon-cart\");\r\n    if (cartIcon) addButton.loboCartIcon = cartIcon.cloneNode(true);\r\n\r\n    if (disable) {\r\n      addButton.setAttribute(\"disabled\", \"disabled\");\r\n      if (text) addButtonText.textContent = text;\r\n    } else {\r\n      addButton.removeAttribute(\"disabled\");\r\n      addButtonText.textContent = window.variantStrings.addToCart;\r\n      if (addButton.loboCartIcon) {\r\n        addButtonText.append(addButton.loboCartIcon.cloneNode(true));\r\n      }\r\n    }\r\n  }\r\n\r\n  setUnavailable() {\r\n    const button = this.resolveProductFormEl();\r\n    const addButton = button?.querySelector('[name=\"add\"]');\r\n    const price = this.resolveById(`price-${this.dataset.section}`);\r\n    const inventory = this.resolveById(`Inventory-${this.dataset.section}`);\r\n    const sku = this.resolveById(`Sku-${this.dataset.section}`);\r\n\r\n    if (!addButton) return;\r\n    this.toggleAddButton(true, window.variantStrings.unavailable);\r\n    if (inventory) inventory.classList.add(\"visibility-hidden\");\r\n    if (sku) sku.classList.add(\"visibility-hidden\");\r\n  }\r\n\r\n  getVariantDomScope() {\r\n    return this.closest(\"quick-add-modal\") || document;\r\n  }\r\n\r\n  resolveProductFormEl() {\r\n    const id = `product-form-${this.dataset.section}`;\r\n    return this.resolveById(id);\r\n  }\r\n\r\n  resolveById(id) {\r\n    const modal = this.closest(\"quick-add-modal\");\r\n    if (modal) {\r\n      // Note: can't compare `el.id === id` here \u2014 a <form> containing a\r\n      // control named \"id\" (our hidden variant-id input) has its `.id`\r\n      // property shadowed by that control per HTMLFormElement's\r\n      // [OverrideBuiltins], so `form.id` returns the <input>, not the\r\n      // id string. getAttribute reads the real attribute regardless.\r\n      return (\r\n        Array.from(modal.querySelectorAll(\"[id]\")).find(\r\n          (el) => el.getAttribute(\"id\") === id\r\n        ) || null\r\n      );\r\n    }\r\n    return document.getElementById(id);\r\n  }\r\n\r\n  getVariantData() {\r\n    this.variantData =\r\n      this.variantData ||\r\n      JSON.parse(this.querySelector(\"[data-all-variants-no-high]\").textContent);\r\n    return this.variantData;\r\n  }\r\n}\r\n\r\nif (!customElements.get(\"variant-selects\")) {\r\n  customElements.define(\"variant-selects\", VariantSelects);\r\n}\r\n\r\nclass VariantRadios extends VariantSelects {\r\n  constructor() {\r\n    super();\r\n  }\r\n\r\n  setInputAvailability(listOfOptions, listOfAvailableOptions) {\r\n    listOfOptions.forEach((input) => {\r\n      // skip options belonging to other combined-listing products\r\n      const inputProductUrl = input.dataset?.productUrl;\r\n      if (inputProductUrl && inputProductUrl !== this.dataset.url) return;\r\n\r\n      if (listOfAvailableOptions.includes(input.getAttribute(\"value\"))) {\r\n        input.classList.remove(\"disabled\", \"always-clickable\");\r\n        input.disabled = false;\r\n      } else {\r\n        input.classList.add(\"disabled\");\r\n\r\n        if (this.dataset.unavailableOptionsClickable === \"true\") {\r\n          input.classList.add(\"always-clickable\");\r\n          input.disabled = false;\r\n        } else {\r\n          input.disabled = true;\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  updateOptions() {\r\n    const fieldsets = Array.from(this.querySelectorAll(\"fieldset\"));\r\n    this.options = fieldsets.map((fieldset) => {\r\n      return Array.from(fieldset.querySelectorAll(\"input\")).find(\r\n        (radio) => radio.checked\r\n      )?.value;\r\n    });\r\n  }\r\n}\r\n\r\ncustomElements.define(\"variant-radios\", VariantRadios);\r\n\r\nclass VariantDropdownSelect extends HTMLElement {\r\n  constructor() {\r\n    super();\r\n    this.currentEl = this.querySelector(\".dropdown-select__current\");\r\n    this.optionsWrapperEl = this.querySelector(\".dropdown-select__options\");\r\n    this.hiddenInput = this.querySelector(\"input[type='hidden']\");\r\n\r\n    if (!this.currentEl || !this.optionsWrapperEl || !this.hiddenInput) return;\r\n\r\n    this.optionsEls = Array.from(this.optionsWrapperEl.querySelectorAll(\"li\"));\r\n    this.inputs = Array.from(this.optionsWrapperEl.querySelectorAll(\"input\"));\r\n    this.hasColorSwatch = this.currentEl?.classList?.contains(\r\n      \"dropdown-select__current--with-color\"\r\n    );\r\n    this.isActive = false;\r\n\r\n    this.optionPosition = this.getOptionPosition();\r\n    this._onCurrentClick = this.onCurrentClick.bind(this);\r\n    this._onKeyUp = this.onKeyUp.bind(this);\r\n    this._onOptionsClick = this.onClickOption.bind(this);\r\n    this._onKeyUpOptions = this.onKeyUpOptions.bind(this);\r\n    this._onOutsideClick = this.onOutsideClick.bind(this);\r\n  }\r\n\r\n  connectedCallback() {\r\n    this.currentEl.addEventListener(\"click\", this._onCurrentClick);\r\n    this.currentEl.addEventListener(\"keyup\", this._onKeyUp);\r\n    this.currentEl.addEventListener(\"dblclick\", this.preventDoubleClick);\r\n    this.optionsWrapperEl.addEventListener(\"click\", this._onOptionsClick);\r\n    this.optionsWrapperEl.addEventListener(\"keyup\", this._onKeyUpOptions);\r\n    document.addEventListener(\"click\", this._onOutsideClick);\r\n  }\r\n\r\n  disconnectedCallback() {\r\n    this.currentEl.removeEventListener(\"click\", this._onCurrentClick);\r\n    this.currentEl.removeEventListener(\"keyup\", this._onKeyUp);\r\n    this.currentEl.removeEventListener(\"dblclick\", this.preventDoubleClick);\r\n    this.optionsWrapperEl.removeEventListener(\"click\", this._onOptionsClick);\r\n    this.optionsWrapperEl.removeEventListener(\"keyup\", this._onKeyUpOptions);\r\n    document.removeEventListener(\"click\", this._onOutsideClick);\r\n  }\r\n\r\n  onCurrentClick(event) {\r\n    event.stopPropagation();\r\n    if (this.isActive) {\r\n      this.onClose();\r\n    } else {\r\n      this.onOpen();\r\n    }\r\n  }\r\n\r\n  onKeyUp(event) {\r\n    if (event.code?.toUpperCase() === \"ENTER\") {\r\n      event.preventDefault();\r\n      event.stopPropagation();\r\n      if (this.isActive) {\r\n        this.onClose();\r\n      } else {\r\n        this.onOpen();\r\n      }\r\n    }\r\n  }\r\n\r\n  preventDoubleClick(event) {\r\n    event.preventDefault();\r\n    event.stopPropagation();\r\n  }\r\n\r\n  onClickOption(event) {\r\n    const optionEl = event.target.closest(\"li\");\r\n    const currentValueEl = this.currentEl.querySelector(\r\n      \"[data-dropdown-current-value]\"\r\n    );\r\n\r\n    if (\r\n      !optionEl ||\r\n      !currentValueEl ||\r\n      !this.optionsWrapperEl.contains(optionEl)\r\n    ) {\r\n      event.preventDefault();\r\n      return;\r\n    }\r\n\r\n    const optionInput = optionEl.querySelector('input[type=\"radio\"]');\r\n    if (\r\n      optionInput &&\r\n      optionInput.disabled &&\r\n      !optionInput.classList.contains(\"always-clickable\") &&\r\n      !optionInput.dataset?.productUrl\r\n    ) {\r\n      event.preventDefault();\r\n      return;\r\n    }\r\n\r\n    const newValue = optionEl.dataset.value;\r\n    //const selectedProductUrl = optionInput?.dataset?.productUrl\r\n\r\n    currentValueEl.textContent = newValue;\r\n    this.hiddenInput.value = newValue;\r\n    //if (selectedProductUrl) {\r\n    //\tthis.hiddenInput.dataset.productUrl = selectedProductUrl\r\n    //}\r\n\r\n    if (this.hasColorSwatch) {\r\n      const newColor = optionEl.dataset.color;\r\n      this.hiddenInput.dataset.colorSwatch = newColor;\r\n      this.currentEl.style.setProperty(\"--swatch-color\", newColor);\r\n    }\r\n\r\n    this.inputs.forEach((el) => {\r\n      el.checked = false;\r\n      el.removeAttribute(\"checked\");\r\n    });\r\n    if (optionInput) {\r\n      optionInput.checked = true;\r\n      optionInput.setAttribute(\"checked\", \"true\");\r\n    }\r\n\r\n    const changeTarget = optionInput || this.hiddenInput;\r\n    changeTarget.dispatchEvent(new Event(\"change\", { bubbles: true }));\r\n\r\n    this.onClose();\r\n    this.currentEl.focus();\r\n  }\r\n\r\n  onKeyUpOptions(event) {\r\n    if (event.code === \"Escape\" && this.isActive) {\r\n      event.preventDefault();\r\n      this.onClose();\r\n      this.currentEl.focus();\r\n    }\r\n  }\r\n\r\n  onOpen() {\r\n    document.querySelectorAll(\"variant-dropdown-select\").forEach((dropdown) => {\r\n      if (dropdown !== this && typeof dropdown.onClose === \"function\") {\r\n        dropdown.onClose();\r\n      }\r\n    });\r\n\r\n    this.optionsWrapperEl.classList.add(\"active\");\r\n    this.currentEl.setAttribute(\"aria-expanded\", \"true\");\r\n    this.isActive = true;\r\n\r\n    const currentIndex = this.inputs.findIndex((inp) =>\r\n      inp.hasAttribute(\"checked\")\r\n    );\r\n    this.inputs[currentIndex >= 0 ? currentIndex : 0]?.focus();\r\n  }\r\n\r\n  onClose() {\r\n    this.optionsWrapperEl.classList.remove(\"active\");\r\n    this.currentEl.setAttribute(\"aria-expanded\", \"false\");\r\n    this.isActive = false;\r\n  }\r\n\r\n  onOutsideClick(event) {\r\n    if (!this.isActive || this.contains(event.target)) return;\r\n    this.onClose();\r\n  }\r\n\r\n  getOptionPosition() {\r\n    const parentFieldset = this.closest(\".product-form__controls\");\r\n    return Number(parentFieldset?.dataset?.optionPosition || -1);\r\n  }\r\n\r\n  updateCurrentOption(selectedValues = []) {\r\n    // Method is used to synchronize after changes options in sticky bar.\r\n    if (this.optionPosition === -1) return;\r\n    const currentValueEl = this.currentEl.querySelector(\r\n      \"[data-dropdown-current-value]\"\r\n    );\r\n\r\n    if (!currentValueEl || !selectedValues || !selectedValues.length) return;\r\n\r\n    const newValue = selectedValues[this.optionPosition - 1];\r\n\r\n    currentValueEl.textContent = newValue;\r\n    this.hiddenInput.value = newValue;\r\n\r\n    this.optionsEls.forEach((optionEl) => {\r\n      const liDataValue = optionEl.dataset.value;\r\n      if (newValue === liDataValue && this.hasColorSwatch) {\r\n        const newColor = optionEl.dataset.color;\r\n        this.hiddenInput.dataset.colorSwatch = newColor;\r\n        this.currentEl.style.setProperty(\"--swatch-color\", newColor);\r\n      }\r\n    });\r\n  }\r\n}\r\n\r\nif (!customElements.get(\"variant-dropdown-select\")) {\r\n  customElements.define(\"variant-dropdown-select\", VariantDropdownSelect);\r\n}\r\n\r\nclass PasswordViewer {\r\n  constructor() {\r\n    const passwordField = document.querySelectorAll(\".field--pass\");\r\n\r\n    passwordField.forEach((el) => {\r\n      const input = el.querySelector(\"input\");\r\n      const btnWrapper = el.querySelector(\".button-pass-visibility\");\r\n      const btnOpen = el.querySelector(\".icon-eye-close\");\r\n      const btnClose = el.querySelector(\".icon-eye\");\r\n\r\n      input.addEventListener(\"input\", () => {\r\n        input.value !== \"\"\r\n          ? (btnWrapper.style.display = \"block\")\r\n          : (btnWrapper.style.display = \"none\");\r\n      });\r\n\r\n      btnOpen.addEventListener(\"click\", () => {\r\n        input.type = \"text\";\r\n        btnOpen.style.display = \"none\";\r\n        btnClose.style.display = \"block\";\r\n      });\r\n\r\n      btnClose.addEventListener(\"click\", () => {\r\n        input.type = \"password\";\r\n        btnOpen.style.display = \"block\";\r\n        btnClose.style.display = \"none\";\r\n      });\r\n    });\r\n  }\r\n}\r\n\r\nclass ProductRecommendations extends HTMLElement {\r\n  constructor() {\r\n    super();\r\n\r\n    const handleIntersection = (entries, observer) => {\r\n      if (!entries[0].isIntersecting) return;\r\n      observer.unobserve(this);\r\n\r\n      fetch(this.dataset.url)\r\n        .then((response) => response.text())\r\n        .then((text) => {\r\n          const html = document.createElement(\"div\");\r\n          html.innerHTML = text;\r\n          const recommendations = html.querySelector(\"product-recommendations\");\r\n          if (recommendations && recommendations.innerHTML.trim().length) {\r\n            this.innerHTML = recommendations.innerHTML;\r\n          }\r\n\r\n          /* Color swatches */\r\n          const generateSrcset = (image, widths = []) => {\r\n            const imageUrl = new URL(image[\"src\"]);\r\n            return widths\r\n              .filter((width) => width <= image[\"width\"])\r\n              .map((width) => {\r\n                imageUrl.searchParams.set(\"width\", width.toString());\r\n                return `${imageUrl.href} ${width}w`;\r\n              })\r\n              .join(\", \");\r\n          };\r\n\r\n          const createImageElement = (image, classes, sizes, productTitle) => {\r\n            const previewImage = image[\"preview_image\"];\r\n            const newImage = new Image(\r\n              previewImage[\"width\"],\r\n              previewImage[\"height\"]\r\n            );\r\n            newImage.className = classes;\r\n            newImage.alt = image[\"alt\"] || productTitle;\r\n            newImage.sizes = sizes;\r\n            newImage.src = previewImage[\"src\"];\r\n            newImage.srcset = generateSrcset(\r\n              previewImage,\r\n              [165, 360, 533, 720, 940, 1066]\r\n            );\r\n            newImage.loading = \"lazy\";\r\n            return newImage;\r\n          };\r\n\r\n          const checkSwatches = () => {\r\n            document\r\n              .querySelectorAll(\".js-color-swatches-wrapper\")\r\n              .forEach((wrapper) => {\r\n                wrapper\r\n                  .querySelectorAll(\".js-color-swatches input\")\r\n                  .forEach((input) => {\r\n                    input.addEventListener(\"click\", (event) => {\r\n                      const primaryImage =\r\n                        wrapper.querySelector(\".media--first\");\r\n                      const secondaryImage =\r\n                        wrapper.querySelector(\".media--second\");\r\n                      const handleProduct = wrapper.dataset.product;\r\n\r\n                      if (event.currentTarget.checked && primaryImage) {\r\n                        wrapper\r\n                          .querySelector(\".js-color-swatches-link\")\r\n                          .setAttribute(\r\n                            \"href\",\r\n                            event.currentTarget.dataset.variantLink\r\n                          );\r\n                        const currentColor = event.currentTarget.value;\r\n\r\n                        jQuery.getJSON(\r\n                          window.Shopify.routes.root +\r\n                            `products/${handleProduct}.js`,\r\n                          function (product) {\r\n                            const variant = product.variants.filter(\r\n                              (item) =>\r\n                                item.featured_media != null &&\r\n                                item.options.includes(currentColor)\r\n                            )[0];\r\n\r\n                            if (variant) {\r\n                              const newPrimaryImage = createImageElement(\r\n                                variant[\"featured_media\"],\r\n                                primaryImage.className,\r\n                                primaryImage.sizes,\r\n                                product.title\r\n                              );\r\n\r\n                              if (newPrimaryImage.src !== primaryImage.src) {\r\n                                let flag = false;\r\n                                if (secondaryImage) {\r\n                                  const secondaryImagePathname = new URL(\r\n                                    secondaryImage.src\r\n                                  ).pathname;\r\n                                  const newPrimaryImagePathname = new URL(\r\n                                    newPrimaryImage.src\r\n                                  ).pathname;\r\n\r\n                                  if (\r\n                                    secondaryImagePathname ==\r\n                                    newPrimaryImagePathname\r\n                                  ) {\r\n                                    primaryImage.remove();\r\n                                    secondaryImage.classList.remove(\r\n                                      \"media--second\"\r\n                                    );\r\n                                    secondaryImage.classList.add(\r\n                                      \"media--first\"\r\n                                    );\r\n                                    flag = true;\r\n                                  }\r\n                                }\r\n                                if (flag == false) {\r\n                                  primaryImage.animate(\r\n                                    { opacity: [1, 0] },\r\n                                    {\r\n                                      duration: 200,\r\n                                      easing: \"ease-in\",\r\n                                      fill: \"forwards\",\r\n                                    }\r\n                                  ).finished;\r\n                                  setTimeout(function () {\r\n                                    primaryImage.replaceWith(newPrimaryImage);\r\n                                    newPrimaryImage.animate(\r\n                                      { opacity: [0, 1] },\r\n                                      { duration: 200, easing: \"ease-in\" }\r\n                                    );\r\n                                    if (secondaryImage) {\r\n                                      secondaryImage.remove();\r\n                                    }\r\n                                  }, 200);\r\n                                }\r\n                              }\r\n                            }\r\n                          }\r\n                        );\r\n                      }\r\n                    });\r\n                  });\r\n              });\r\n          };\r\n\r\n          checkSwatches();\r\n\r\n          const calcTop = (section) => {\r\n            const imageWrapper = section.querySelectorAll(\".card__inner\");\r\n            let top = 0;\r\n\r\n            if (imageWrapper) {\r\n              top = imageWrapper[0]?.offsetHeight / 2;\r\n            } else {\r\n              top = 50;\r\n            }\r\n\r\n            return top;\r\n          };\r\n\r\n          const initSlider = () => {\r\n            let mobileLayout = 1;\r\n            if (this.dataset.mobileLayout) {\r\n              mobileLayout = this.dataset.mobileLayout;\r\n            }\r\n            let slider = new Swiper(\r\n              this.querySelector(\".js-recommendation-swiper\"),\r\n              {\r\n                slidesPerView: mobileLayout,\r\n                mousewheel: {\r\n                  forceToAxis: true,\r\n                },\r\n                slidesPerGroup: 1,\r\n                spaceBetween: 8,\r\n                speed: 500,\r\n                navigation: {\r\n                  nextEl: this.querySelector(\r\n                    \".product-recommendations__slider-nav .swiper-button-next\"\r\n                  ),\r\n                  prevEl: this.querySelector(\r\n                    \".product-recommendations__slider-nav .swiper-button-prev\"\r\n                  ),\r\n                },\r\n                breakpoints: {\r\n                  576: {\r\n                    slidesPerView: 2,\r\n                    slidesPerGroup: 2,\r\n                  },\r\n                  750: {\r\n                    slidesPerView: 3,\r\n                    slidesPerGroup: 3,\r\n                    spaceBetween: 24,\r\n                  },\r\n                },\r\n              }\r\n            );\r\n          };\r\n\r\n          const initSection = () => {\r\n            const section = this;\r\n\r\n            const sectionResizeObserver = new ResizeObserver((entries) => {\r\n              const [entry] = entries;\r\n              let top = calcTop(section);\r\n              if (section.querySelector(\".product-recommendations__slider-nav\"))\r\n                section.querySelector(\r\n                  \".product-recommendations__slider-nav\"\r\n                ).style.top = top + \"px\";\r\n            });\r\n\r\n            sectionResizeObserver.observe(section);\r\n\r\n            initSlider();\r\n          };\r\n\r\n          initSection();\r\n        })\r\n        .catch((e) => {\r\n          console.error(e);\r\n        });\r\n    };\r\n\r\n    new IntersectionObserver(handleIntersection.bind(this), {\r\n      rootMargin: \"0px 0px 400px 0px\",\r\n    }).observe(this);\r\n  }\r\n}\r\n\r\ncustomElements.define(\"product-recommendations\", ProductRecommendations);\r\n(function () {\r\n  const initHeaderOverlay = () => {\r\n    const main = document.getElementById(\"MainContent\");\r\n    const sections = main.querySelectorAll(\".shopify-section\");\r\n    if (sections.length > 0) {\r\n      const sectionFirstChild = sections[0].querySelector(\r\n        \".section--has-overlay\"\r\n      );\r\n      const headerGroupSections = document.querySelectorAll(\r\n        \".shopify-section-group-header-group\"\r\n      );\r\n      const header = document.querySelector(\".shopify-section-header\");\r\n\r\n      if (sectionFirstChild) {\r\n        if (sectionFirstChild.classList.contains(\"section--has-overlay\")) {\r\n          if (headerGroupSections[headerGroupSections.length - 1] === header) {\r\n            sections[0].classList.remove(\"not-margin\");\r\n\r\n            if (sectionFirstChild.classList.contains(\"section--header-light\")) {\r\n              header.classList.add(\"color-background-overlay\");\r\n            } else {\r\n              header.classList.remove(\"color-background-overlay\");\r\n            }\r\n          } else {\r\n            sections[0].classList.add(\"not-margin\");\r\n            header.classList.remove(\"color-background-overlay\");\r\n          }\r\n        } else {\r\n          sections[0].classList.remove(\"not-margin\");\r\n\r\n          header.classList.remove(\"color-background-overlay\");\r\n        }\r\n      } else {\r\n        header.classList.remove(\"color-background-overlay\");\r\n      }\r\n    }\r\n  };\r\n\r\n  initHeaderOverlay();\r\n\r\n  document.addEventListener(\"shopify:section:load\", initHeaderOverlay);\r\n  document.addEventListener(\"shopify:section:unload\", initHeaderOverlay);\r\n  document.addEventListener(\"shopify:section:reorder\", initHeaderOverlay);\r\n})();\r\n\r\nfunction formatMoney(cents, format = \"\") {\r\n  if (typeof cents === \"string\") {\r\n    cents = cents.replace(\".\", \"\");\r\n  }\r\n  cents = parseInt(cents, 10);\r\n  let value = \"\";\r\n\r\n  const placeholderRegex = /\\{\\{\\s*(\\w+)\\s*\\}\\}/;\r\n  const formatString = format || theme.moneyFormat;\r\n\r\n  function formatWithDelimiters(\r\n    number,\r\n    precision = 2,\r\n    thousands = \",\",\r\n    decimal = \".\"\r\n  ) {\r\n    if (isNaN(number) || number == null) {\r\n      return \"0\";\r\n    }\r\n\r\n    number = (number / 100.0).toFixed(precision);\r\n\r\n    const parts = number.split(\".\");\r\n    const dollarsAmount = parts[0].replace(\r\n      /(\\d)(?=(\\d{3})+(?!\\d))/g,\r\n      `$1${thousands}`\r\n    );\r\n    const centsAmount = precision > 0 ? decimal + parts[1] : \"\";\r\n\r\n    return dollarsAmount + centsAmount;\r\n  }\r\n\r\n  const match = formatString.match(placeholderRegex);\r\n  const formatType = match ? match[1] : \"amount\";\r\n\r\n  switch (formatType) {\r\n    case \"amount\":\r\n      value = formatWithDelimiters(cents, 2, \",\", \".\");\r\n      break;\r\n    case \"amount_no_decimals\":\r\n      value = formatWithDelimiters(cents, 0, \",\", \".\");\r\n      break;\r\n    case \"amount_with_comma_separator\":\r\n      value = formatWithDelimiters(cents, 2, \".\", \",\");\r\n      break;\r\n    case \"amount_no_decimals_with_comma_separator\":\r\n      value = formatWithDelimiters(cents, 0, \".\", \",\");\r\n      break;\r\n    case \"amount_with_apostrophe_separator\":\r\n      value = formatWithDelimiters(cents, 2, \"'\", \".\");\r\n      break;\r\n    case \"amount_no_decimals_with_space_separator\":\r\n      value = formatWithDelimiters(cents, 0, \" \", \".\");\r\n      break;\r\n    case \"amount_with_space_separator\":\r\n      value = formatWithDelimiters(cents, 2, \" \", \",\");\r\n      break;\r\n    case \"amount_with_period_and_space_separator\":\r\n      value = formatWithDelimiters(cents, 2, \" \", \".\");\r\n      break;\r\n    default:\r\n      value = formatWithDelimiters(cents, 2, \",\", \".\");\r\n  }\r\n  return formatString.replace(placeholderRegex, value);\r\n}\r\n\r\nconst initUnderlinedTitles = () => {\r\n  let sectionTitles = document.querySelectorAll(\r\n    \".shopify-section:not(.shopify-section-group-header-group):not(.shopify-section-group-footer-group) .title--rounded\"\r\n  );\r\n\r\n  if (sectionTitles.length > 0) {\r\n    sectionTitles.forEach((title) => {\r\n      const sectionResizeObserver = new ResizeObserver((entries) => {\r\n        const [entry] = entries;\r\n        let xs, s, m, l, xl;\r\n\r\n        if (document.body.clientWidth < 1600) {\r\n          xs = 95;\r\n          s = 160;\r\n          m = 280;\r\n          l = 380;\r\n          xl = 520;\r\n        } else {\r\n          xs = 95;\r\n          s = 200;\r\n          m = 360;\r\n          l = 450;\r\n          xl = 620;\r\n        }\r\n\r\n        entry.target\r\n          .querySelectorAll('span[style=\"text-decoration:underline\"]')\r\n          .forEach((span) => {\r\n            const titleWidth = span.getBoundingClientRect().width;\r\n            span.classList.remove(\r\n              \"title--rounded-xs\",\r\n              \"title--rounded-s\",\r\n              \"title--rounded-m\",\r\n              \"title--rounded-l\",\r\n              \"title--rounded-xl\",\r\n              \"title--rounded-xxl\"\r\n            );\r\n            if (titleWidth < xs) {\r\n              span.classList.add(\"title--rounded-xs\");\r\n            } else if (titleWidth < s) {\r\n              span.classList.add(\"title--rounded-s\");\r\n            } else if (titleWidth < m) {\r\n              span.classList.add(\"title--rounded-m\");\r\n            } else if (titleWidth < l) {\r\n              span.classList.add(\"title--rounded-l\");\r\n            } else if (titleWidth < xl) {\r\n              span.classList.add(\"title--rounded-xl\");\r\n            } else {\r\n              span.classList.add(\"title--rounded-xxl\");\r\n            }\r\n          });\r\n      });\r\n\r\n      sectionResizeObserver.observe(title);\r\n    });\r\n  }\r\n};\r\n\r\n// CART REFRESH EVENT\r\n// -----------------------------------------------------------------------------\r\n\r\ndocument.documentElement.addEventListener(\"cart:refresh\", () => {\r\n  const sectionsToUpdate = [\r\n    { id: \"cart-icon-bubble\", selector: \"#cart-icon-bubble\" },\r\n    { id: \"cart-drawer\", selector: \"cart-drawer\" },\r\n    { id: \"main-cart-items\", selector: \"#main-cart-items\" },\r\n    { id: \"main-cart-footer\", selector: \"#main-cart-footer\" },\r\n    { id: \"main-cart-shipping\", selector: \".cart-shipping\" },\r\n  ];\r\n  sectionsToUpdate.forEach((section) => {\r\n    fetch(`${routes.cart_url}?section_id=${section.id}`)\r\n      .then((response) => response.text())\r\n      .then((html) => {\r\n        const parsedHTML = new DOMParser().parseFromString(html, \"text/html\");\r\n        const source = parsedHTML.querySelector(section.selector);\r\n        const target = document.querySelector(section.selector);\r\n        if (source && target) {\r\n          target.innerHTML = source.innerHTML;\r\n        }\r\n      })\r\n      .catch((e) =>\r\n        console.error(`[cart:refresh] error updating ${section.id}`, e)\r\n      );\r\n  });\r\n});\r\n\r\n// CART REFRESH EVENT END\r\n// -----------------------------------------------------------------------------\r\n"],
  "mappings": "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",
  "names": ["entries"]
}
