{
  "version": 3,
  "sources": ["/cdn/shop/t/12/assets/global.js?bust=1783081957560"],
  "sourcesContent": ["window.theme = window.theme || {};\n\ntheme.config = {\n  mqlSmall: false,\n  mediaQuerySmall: 'screen and (max-width: 749px)',\n  isTouch: ('ontouchstart' in window) || window.DocumentTouch && window.document instanceof DocumentTouch || window.navigator.maxTouchPoints || window.navigator.msMaxTouchPoints ? true : false,\n  rtl: document.documentElement.getAttribute('dir') === 'rtl' ? true : false\n};\n\nconst PUB_SUB_EVENTS = {\n  cartUpdate: 'cart-update',\n  quantityUpdate: 'quantity-update',\n  variantChange: 'variant-change',\n  cartError: 'cart-error'\n};\n\nconst SECTION_REFRESH_RESOURCE_TYPE = {\n  product: 'product',\n};\n\nlet subscribers = {}\n\nfunction subscribe(eventName, callback) {\n  if (subscribers[eventName] === undefined) {\n    subscribers[eventName] = []\n  }\n\n  subscribers[eventName] = [...subscribers[eventName], callback];\n\n  return function unsubscribe() {\n    subscribers[eventName] = subscribers[eventName].filter((cb) => {\n      return cb !== callback\n    });\n  }\n};\n\nfunction publish(eventName, data) {\n  if (subscribers[eventName]) {\n    subscribers[eventName].forEach((callback) => {\n      callback(data)\n    })\n  }\n}\n\nif (window.Shopify && window.Shopify.designMode) {\n  document.documentElement.style.setProperty(\n      \"--scrollbar-width\",\n      `${window.innerWidth - document.documentElement.clientWidth}px`\n  );\n}\n\n// fade-in animation on load\nfunction nextFrame(fn) {\n  requestAnimationFrame(() => requestAnimationFrame(fn));\n}\n\nfunction runIdle(fn, timeout = 1500) {\n  if ('requestIdleCallback' in window) {\n    requestIdleCallback(fn, { timeout });\n  } else {\n    setTimeout(fn, 0);\n  }\n}\n\nlet _fadeInDurationCache;\n\nfunction getFadeInDurationInlineOnly() {\n  const attr = document.documentElement.getAttribute('data-fade-in-duration');\n  if (attr && attr.trim()) return attr.trim();\n  return null;\n}\n\nfunction getFadeInDurationComputed(cb) {\n  if (_fadeInDurationCache !== undefined) return cb(_fadeInDurationCache);\n\n  nextFrame(() => {\n    runIdle(() => {\n      const duration = (document.documentElement.getAttribute('data-fade-in-duration') || '').trim();\n\n      _fadeInDurationCache = duration || null;\n      cb(_fadeInDurationCache);\n    }, 2000);\n  });\n}\n\nlet _headerHeightScheduled = false;\nlet _lastHeaderHeightPx = null;\n\nfunction updateHeaderGroupHeight() {\n  const insideContent = document.querySelector('.inside-content.fade-in--content');\n  if (!insideContent) return;\n\n  const insideTop = insideContent.getBoundingClientRect().top;\n  const isMobile = window.matchMedia('(max-width: 920px)').matches;\n\n  let valuePx;\n\n  if (isMobile) {\n    const main = document.querySelector('main');\n    if (!main) return;\n    const mainTop = main.getBoundingClientRect().top;\n    valuePx = mainTop - insideTop;\n  } else {\n    const header = document.querySelector('.header-group') || document.querySelector('.header-section');\n    if (!header) return;\n\n    const headerBottom = header.getBoundingClientRect().bottom;\n    valuePx = headerBottom - insideTop;\n\n    const isFadeIn = document.documentElement.classList.contains('fade-in');\n    if (isFadeIn || insideContent) {\n      const overlappingFirst = document.querySelector('.overlapping-section--first');\n      if (overlappingFirst) {\n        const announcementBar = document.querySelector('.announcement-bar-section');\n        if (announcementBar) {\n          valuePx = announcementBar.getBoundingClientRect().bottom;\n        }\n      }\n    }\n  }\n\n  const px = `${Math.round(valuePx)}px`;\n  if (_lastHeaderHeightPx === px) return;\n  _lastHeaderHeightPx = px;\n\n  document.documentElement.style.setProperty('--header-group-height', px);\n}\n\nfunction scheduleUpdateHeaderGroupHeight() {\n  if (_headerHeightScheduled) return;\n  _headerHeightScheduled = true;\n\n  requestAnimationFrame(() => {\n    runIdle(() => {\n      _headerHeightScheduled = false;\n      updateHeaderGroupHeight();\n    }, 2000);\n  });\n}\n\nfunction hideFadeInOverlayAfterDelay(durationSeconds) {\n  const s = String(durationSeconds).trim();\n\n  let durationMs = 0;\n  if (s.endsWith('ms')) durationMs = parseFloat(s);\n  else if (s.endsWith('s')) durationMs = parseFloat(s) * 1000;\n  else durationMs = parseFloat(s) * 1000;\n\n  if (!Number.isFinite(durationMs) || durationMs <= 0) return;\n\n  const delay = 400;\n  setTimeout(() => {\n    document.body.style.setProperty('--fade-in-element-display', 'none');\n  }, durationMs + delay);\n}\n\nfunction markOverlappingSectionInEditor_light() {\n  const firstSection = document.querySelector('main .shopify-section');\n  if (!firstSection) return;\n  const overlapping = firstSection.querySelector('.overlapping-section');\n  overlapping?.classList.add('overlapping-section--first');\n}\n\nfunction configurePageFadeInOnLoad_deferred() {\n  const inline = getFadeInDurationInlineOnly();\n  if (inline) {\n    hideFadeInOverlayAfterDelay(inline);\n  }\n\n  const target = document.querySelector('.inside-content.fade-in--content');\n  if (!target) {\n    let tries = 0;\n    const t = setInterval(() => {\n      tries++;\n      const el = document.querySelector('.inside-content.fade-in--content');\n      if (el || tries > 20) {\n        clearInterval(t);\n        if (el) armFadeInFor(el);\n      }\n    }, 250);\n    return;\n  }\n\n  armFadeInFor(target);\n\n  function armFadeInFor(el) {\n    if (!('IntersectionObserver' in window)) {\n      scheduleUpdateHeaderGroupHeight();\n      if (!inline) getFadeInDurationComputed((d) => d && hideFadeInOverlayAfterDelay(d));\n      attachResizeHandlers();\n      if (Shopify.designMode) runIdle(markOverlappingSectionInEditor_light, 2000);\n      return;\n    }\n\n    const io = new IntersectionObserver((entries) => {\n      const e = entries && entries[0];\n      if (!e || !e.isIntersecting) return;\n\n      io.disconnect();\n      scheduleUpdateHeaderGroupHeight();\n      if (!inline) {\n        getFadeInDurationComputed((d) => {\n          if (d) hideFadeInOverlayAfterDelay(d);\n        });\n      }\n\n      if (Shopify.designMode) runIdle(markOverlappingSectionInEditor_light, 2000);\n\n      attachResizeHandlers();\n    }, { root: null, rootMargin: '500px 0px', threshold: 0.01 });\n\n    io.observe(el);\n  }\n\n  function attachResizeHandlers() {\n    window.addEventListener('load', () => scheduleUpdateHeaderGroupHeight(), { once: true });\n    window.addEventListener('resize', scheduleUpdateHeaderGroupHeight, { passive: true });\n    window.visualViewport?.addEventListener?.('resize', scheduleUpdateHeaderGroupHeight, { passive: true });\n  }\n}\n\ndocument.addEventListener('DOMContentLoaded', () => {\n  document.body.classList.add('loaded');\n  configurePageFadeInOnLoad_deferred();\n});\n\nfunction filterShopifyEvent(event, domElement, callback) {\n  let executeCallback = false;\n  if (event.type.includes('shopify:section')) {\n    if (domElement.hasAttribute('data-section-id') && domElement.getAttribute('data-section-id') === event.detail.sectionId) {\n      executeCallback = true;\n    }\n  }\n  else if (event.type.includes('shopify:block') && event.target === domElement) {\n    executeCallback = true;\n  }\n  if (executeCallback) {\n    callback(event);\n  }\n}\n\nfunction parseNode(nodeString) {\n  const tempElement = document.createElement('div');\n  tempElement.innerHTML = nodeString;\n\n  return tempElement.firstElementChild;\n}\n\n// Init section function when it's visible, then disable observer\ntheme.initWhenVisible = function(options) {\n  const threshold = options.threshold ? options.threshold : 0;\n\n  const observer = new IntersectionObserver((entries, observer) => {\n    entries.forEach(entry => {\n      if (entry.isIntersecting) {\n        if (typeof options.callback === 'function') {\n          options.callback();\n          observer.unobserve(entry.target);\n        }\n      }\n    });\n  }, {rootMargin: `0px 0px ${threshold}px 0px`});\n\n  observer.observe(options.element);\n};\n\nfunction getFocusableElements(container) {\n    return Array.from(\n      container?.querySelectorAll(\n        \"summary, a[href], button:enabled, [tabindex]:not([tabindex^='-']), [draggable], area, input:not([type=hidden]):enabled, select:enabled, textarea:enabled, object, iframe\"\n      )\n    );\n}\n\nclass HTMLUpdateUtility {\n  #preProcessCallbacks = [];\n  #postProcessCallbacks = [];\n\n  constructor() {}\n\n  addPreProcessCallback(callback) {\n    this.#preProcessCallbacks.push(callback);\n  }\n\n  addPostProcessCallback(callback) {\n    this.#postProcessCallbacks.push(callback);\n  }\n\n  /**\n   * Used to swap an HTML node with a new node.\n   * The new node is inserted as a previous sibling to the old node, the old node is hidden, and then the old node is removed.\n   *\n   * The function currently uses a double buffer approach, but this should be replaced by a view transition once it is more widely supported https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API\n   */\n  viewTransition(oldNode, newContent) {\n    this.#preProcessCallbacks.forEach((callback) => callback(newContent));\n\n    const newNode = oldNode.cloneNode();\n    HTMLUpdateUtility.setInnerHTML(newNode, newContent.innerHTML);\n    oldNode.parentNode.insertBefore(newNode, oldNode);\n    oldNode.style.display = 'none';\n\n    this.#postProcessCallbacks.forEach((callback) => callback(newNode));\n\n    setTimeout(() => oldNode.remove(), 1000);\n  }\n\n  // Sets inner HTML and reinjects the script tags to allow execution. By default, scripts are disabled when using element.innerHTML.\n  static setInnerHTML(element, html) {\n    element.innerHTML = html;\n    element.querySelectorAll('script').forEach((oldScriptTag) => {\n      const newScriptTag = document.createElement('script');\n      Array.from(oldScriptTag.attributes).forEach((attribute) => {\n        newScriptTag.setAttribute(attribute.name, attribute.value);\n      });\n      newScriptTag.appendChild(document.createTextNode(oldScriptTag.innerHTML));\n      oldScriptTag.parentNode.replaceChild(newScriptTag, oldScriptTag);\n    });\n  }\n}\n  \ndocument.querySelectorAll('[id^=\"Details-\"] summary').forEach((summary) => {\n  summary.setAttribute('role', 'button');\n  summary.setAttribute('aria-expanded', summary.parentNode.hasAttribute('open'));\n\n  if(summary.nextElementSibling.getAttribute('id')) {\n    summary.setAttribute('aria-controls', summary.nextElementSibling.id);\n  }\n\n  summary.addEventListener('click', (event) => {\n    event.currentTarget.setAttribute('aria-expanded', !event.currentTarget.closest('details').hasAttribute('open'));\n  });\n\n  if (summary.closest('header-drawer')) return;\n  summary.parentElement.addEventListener('keyup', onKeyUpEscape);\n});\n\n\nfunction updateOverlappingFlag() {\n  const body = document.body;\n  const main = document.querySelector('main');\n  if (!body || !main) return;\n\n  body.classList.toggle('has-overlapping-footer', !!document.querySelector('.footer.overlapping-section'));\n\n  const firstSection = main.firstElementChild;\n  const hasFirstOverlap = !!(firstSection && firstSection.querySelector('.overlapping-section'));\n  body.classList.toggle('has-first-overlapping-section', hasFirstOverlap);\n}\n\nupdateOverlappingFlag();\n\ndocument.addEventListener('shopify:section:load', updateOverlappingFlag);\ndocument.addEventListener('shopify:section:reorder', updateOverlappingFlag);\n\n// Anchor links smooth scroll\n(() => {\n  const BREAKPOINT = 769;\n  const DURATION = 1200;\n\n  function getSetting() {\n    return document.documentElement?.dataset?.anchorScroll || '';\n  }\n\n  function allowSmooth(setting) {\n    if (!setting) return false;\n    if (setting === 'disable') return false;\n\n    const desktop = window.matchMedia(`(min-width: ${BREAKPOINT}px)`).matches;\n\n    return (\n      setting === 'both' ||\n      (setting === 'on_desktop' && desktop) ||\n      (setting === 'on_mobile' && !desktop)\n    );\n  }\n\n  function easeInOutCubic(t) {\n    return t < 0.5\n      ? 4 * t * t * t\n      : 1 - Math.pow(-2 * t + 2, 3) / 2;\n  }\n\n  function smoothScrollTo(targetY, duration) {\n    const startY = window.pageYOffset;\n    const distance = targetY - startY;\n    const startTime = performance.now();\n\n    function animation(currentTime) {\n      const elapsed = currentTime - startTime;\n      const progress = Math.min(elapsed / duration, 1);\n      const eased = easeInOutCubic(progress);\n\n      window.scrollTo(0, startY + distance * eased);\n\n      if (progress < 1) {\n        requestAnimationFrame(animation);\n      }\n    }\n\n    requestAnimationFrame(animation);\n  }\n\n  document.addEventListener('click', (e) => {\n    const a = e.target.closest('a[href^=\"#\"]');\n    if (!a) return;\n\n    const href = a.getAttribute('href') || '';\n    if (href.length <= 1) return;\n\n    const setting = getSetting();\n    if (!allowSmooth(setting)) return;\n\n    let target;\n    try {\n      target = document.querySelector(href);\n    } catch (_) {\n      return;\n    }\n\n    if (!target) return;\n\n    e.preventDefault();\n\n    const targetY = target.getBoundingClientRect().top + window.pageYOffset;\n\n    smoothScrollTo(targetY, DURATION);\n  });\n})();\n\nfunction simulateHoverOnTouch(elementSelector) {\n  function removeActiveByTypeClass(selector) {\n    document.querySelectorAll(`${selector}.active-by-tap`).forEach((activeCard) => {\n      activeCard.classList.remove(\"active-by-tap\");\n    });\n  }\n\n  const bannersWithHover = document.querySelectorAll(elementSelector);\n\n  bannersWithHover.forEach((el) => {\n    el.addEventListener(\"click\", (event) => {\n      if (window.innerWidth <= 1024 || !theme.config.isTouch) return;\n\n      const link = el.closest(\"a\");\n\n      if (!el.classList.contains(\"active-by-tap\")) {\n        event.preventDefault(); \n\n        removeActiveByTypeClass(elementSelector);\n        el.classList.add(\"active-by-tap\"); \n      } else if (link) {\n        event.preventDefault();  \n\n        link.target === \"_blank\" ? window.open(link.href, \"_blank\") : window.open(link.href, \"_self\");\n      }      \n    });\n  });\n\n  document.addEventListener(\"click\", (event) => {\n    if (!event.target.closest(elementSelector)) {\n      removeActiveByTypeClass(elementSelector);\n    }\n  });\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", () => {\n  const selectorsOfElementsWithHover = [\n    'a.banner__wrapper.hover-content', \n    'a.banner-gallery__card.hover-content', \n    'a.banner-grid__card.hover-content'\n  ];\n\n  selectorsOfElementsWithHover.forEach(simulateHoverOnTouch);\n});\n\n  const trapFocusHandlers = {};\n  \n  function trapFocus(container, elementToFocus = container) {\n  \n    var elements = getFocusableElements(container);\n    \n    var first = elements[0];\n    var last = elements[elements.length - 1];\n  \n    removeTrapFocus();\n  \n    trapFocusHandlers.focusin = (event) => {\n      if (\n        event.target !== container &&\n        event.target !== last &&\n        event.target !== first\n      )\n        return;\n  \n      document.addEventListener('keydown', trapFocusHandlers.keydown);\n    };\n  \n    trapFocusHandlers.focusout = function() {\n      document.removeEventListener('keydown', trapFocusHandlers.keydown);\n    };\n    trapFocusHandlers.keydown = function(event) {\n      if (event.code.toUpperCase() !== 'TAB') return; // If not TAB key\n      // On the last focusable element and tab forward, focus the first element.\n      if (event.target === last && !event.shiftKey) {\n        event.preventDefault();\n        first.focus();\n      }\n  \n      //  On the first focusable element and tab backward, focus the last element.\n      if (\n        (event.target === container || event.target === first) &&\n        event.shiftKey\n      ) {\n        event.preventDefault();\n        last.focus();\n      }\n    };\n  \n    document.addEventListener('focusout', trapFocusHandlers.focusout);\n    document.addEventListener('focusin', trapFocusHandlers.focusin);\n  \n    elementToFocus?.focus();\n  }\n  focusVisiblePolyfill()\n  \n  // Here run the querySelector to figure out if the browser supports :focus-visible or not and run code based on it.\n  try {\n    document.querySelector(\":focus-visible\");\n  } catch(e) {\n    focusVisiblePolyfill();\n  }\n  \n  function focusVisiblePolyfill() {\n    const navKeys = ['ARROWUP', 'ARROWDOWN', 'ARROWLEFT', 'ARROWRIGHT', 'TAB', 'ENTER', 'SPACE', 'ESCAPE', 'HOME', 'END', 'PAGEUP', 'PAGEDOWN']\n    let currentFocusedElement = null;\n    let mouseClick = null;\n  \n    window.addEventListener('keydown', (event) => {\n      if(event.code && navKeys.includes(event.code.toUpperCase())) {\n        mouseClick = false;\n      }\n    });\n  \n    window.addEventListener('mousedown', (event) => {\n      mouseClick = true;\n    });\n  \n    window.addEventListener('focus', () => {\n      if (currentFocusedElement) currentFocusedElement.classList.remove('focused');\n      if (mouseClick) return;\n      currentFocusedElement = document.activeElement;\n      currentFocusedElement.classList.add('focused');\n  \n    }, true);\n  }\n\n  function getMediaType(media) {\n    if (!media) {\n      return null;\n    }\n\n    const mediaType =\n      media.tagName.toUpperCase() === \"VIDEO\"\n        ? \"VIDEO\"\n        : media.tagName.toUpperCase() === \"IMG\"\n        ? \"IMAGE\"\n        : media.classList.contains(\"js-youtube\")\n        ? \"YOUTUBE\"\n        : media.classList.contains(\"js-vimeo\")\n        ? \"VIMEO\"\n        : media.tagName.toUpperCase() === 'PRODUCT-MODEL'\n        ? 'MODEL'\n        : null;\n\n    return mediaType;\n  }\n  \n  function pauseAllMedia() {\n    document.querySelector('.theme-content').querySelectorAll('.js-youtube').forEach(pauseYoutubeVideo);\n    document.querySelector('.theme-content').querySelectorAll('.js-vimeo').forEach(pauseVimeoVideo);\n    document.querySelector('.theme-content').querySelectorAll('video').forEach(pauseVideo);\n    document.querySelector('.theme-content').querySelectorAll('product-model').forEach(pauseModel);\n  }\n\n  function handleMediaAction(media, actions, isAutoplayEnabled = false) {\n    if (!media) {\n      return;\n    }\n  \n    const mediaType = getMediaType(media);\n    const action = actions[mediaType];\n\n    if (action) {\n      action(media, isAutoplayEnabled);\n    }\n  }\n  \n  function pauseMedia(media, isAutoplayEnabled = false) {\n    handleMediaAction(media, {\n      'VIDEO': pauseVideo,\n      'YOUTUBE': pauseYoutubeVideo,\n      'VIMEO': pauseVimeoVideo,\n      'MODEL': pauseModel\n    }, isAutoplayEnabled);\n  }\n  \n  function playMedia(media, isAutoplayEnabled = false, forcePlay = false) {\n    if (!forcePlay && media && media.dataset.pausedByScript === 'false' && isAutoplayEnabled) {\n      return;\n    }\n\n    handleMediaAction(media, {\n      'VIDEO': playVideo,\n      'YOUTUBE': playYoutubeVideo,\n      'VIMEO': playVimeoVideo,\n      'MODEL': playModel\n    }, isAutoplayEnabled);\n  }\n\n  async function playYoutubeVideo(video, isAutoplayEnabled = false) {\n    if (!video || video.tagName !== 'IFRAME') {\n      console.warn('Invalid video element provided');\n      return;\n    }\n\n    try {\n      await loadScript('youtube');\n\n      const youtubePlayer = await getYoutubePlayer(video);\n\n      if (isAutoplayEnabled) {\n        youtubePlayer.mute();\n      }\n\n      youtubePlayer.playVideo();\n    } catch (error) {\n      console.error('Error handling YouTube video play:', error);\n    }\n  }\n\n  async function pauseYoutubeVideo(video, isAutoplayEnabled = false) {\n    if (!video || video.tagName !== 'IFRAME') {\n      console.warn('Invalid video element provided');\n      return;\n    }\n  \n    try {\n      await loadScript('youtube');\n  \n      const youtubePlayer = await getYoutubePlayer(video);\n      const playerState = youtubePlayer.getPlayerState();\n  \n      if (playerState === YT.PlayerState.PAUSED) {\n        return; \n      }\n  \n      youtubePlayer.pauseVideo();\n  \n      if (isAutoplayEnabled) {\n        video.setAttribute('data-paused-by-script', 'true');\n  \n        // Attach a one-time event listener for the play event\n        const handleStateChange = (event) => {\n          if (event.data === YT.PlayerState.PLAYING) {\n            video.setAttribute('data-paused-by-script', 'false');\n            youtubePlayer.removeEventListener('onStateChange', handleStateChange);\n          }\n        };\n  \n        youtubePlayer.addEventListener('onStateChange', handleStateChange);\n      }\n    } catch (error) {\n      console.error('Error handling YouTube video pause:', error);\n    }\n  }\n  \n  function getYoutubePlayer(video) {\n    return new Promise((resolve) => {\n      window.YT.ready(() => {\n        const existingPlayer = YT.get(video.id);\n\n        if (existingPlayer) {\n          resolve(existingPlayer);\n        } else {\n          const playerInstance = new YT.Player(video, {\n            events: {\n              onReady: (event) => resolve(event.target),\n            },\n          });\n        }\n      });\n    });\n  }\n\n  function removeYoutubePlayer(videoId) {\n    const existingPlayer = YT.get(videoId);\n\n    if (existingPlayer) {\n      existingPlayer.destroy(); \n    }\n  }\n\n  function playVimeoVideo(video, isAutoplayEnabled = false) {\n    if (!video || video.tagName !== 'IFRAME') {\n      return;\n    }\n\n    if (isAutoplayEnabled) {\n      video.contentWindow?.postMessage(\n        JSON.stringify({ method: 'setVolume', value: 0 }),\n        '*'\n      );\n    }\n\n    video.contentWindow?.postMessage('{\"method\":\"play\"}', '*');\n  }\n\n  async function pauseVimeoVideo(video, isAutoplayEnabled = false) {\n    if (!video || video.tagName !== 'IFRAME') {\n      return;\n    }\n\n    try {\n      await loadScript('vimeo');\n\n      const vimeoPlayer = new Vimeo.Player(video);\n      const isPaused = await vimeoPlayer.getPaused();\n  \n      if (isPaused) {\n        return; \n      }\n  \n      video.contentWindow?.postMessage('{\"method\":\"pause\"}', '*');\n      \n      if (isAutoplayEnabled) { \n        video.setAttribute('data-paused-by-script', 'true');  \n\n        const handlePlay = () => {\n          video.setAttribute('data-paused-by-script', 'false');\n          vimeoPlayer.off('play', handlePlay);\n        };\n  \n        vimeoPlayer.on('play', handlePlay);\n      }\n    } catch (error) {\n      console.error('Error handling Vimeo video pause:', error);\n    }\n  }\n\n  function playVideo(video, isAutoplayEnabled = false) {\n    if (!video || !(video instanceof HTMLVideoElement)) {\n      return;\n    }\n\n    if (isAutoplayEnabled) {\n      video.muted = true;\n    }\n\n    video.play();\n  }\n\n  function pauseVideo(video, isAutoplayEnabled = false) {\n    if (!video || !(video instanceof HTMLVideoElement)) {\n      return;\n    }\n\n    if (video.paused) { \n      return;\n    } \n\n    video.pause();\n    \n    if (isAutoplayEnabled) {  \n      video.setAttribute('data-paused-by-script', 'true');  \n\n      video.addEventListener('play', () => { \n        video.setAttribute('data-paused-by-script', 'false');\n      }, { once: true })\n    }\n  }\n\n  function playModel(model) {\n    if (model.modelViewerUI) model.modelViewerUI.play();\n  }\n\n  function pauseModel(model) {\n    if (model.modelViewerUI) model.modelViewerUI.pause();\n  }\n\n  function loadScript(mediaType) {\n    return new Promise((resolve, reject) => {\n      let scriptId;\n  \n      switch (mediaType) {\n        case 'youtube':\n          scriptId = 'youtube-iframe-api';\n          break;\n        case 'vimeo':\n          scriptId = 'vimeo-player-api';\n          break;\n        default:\n          reject();\n          return;\n      }\n  \n      if (document.getElementById(scriptId)) {\n        resolve();\n\n        return;\n      }\n  \n      const script = document.createElement('script');\n      script.id = scriptId; \n      document.body.appendChild(script);\n  \n      script.onload = resolve;\n      script.onerror = reject;\n      script.async = true;\n  \n      switch (mediaType) {\n        case 'youtube':\n          script.src = 'https://www.youtube.com/iframe_api';\n          break;\n        case 'vimeo':\n          script.src = '//player.vimeo.com/api/player.js';\n          break;\n        default:\n          reject();\n          return;\n      }\n    });\n  }\n  \n  // Play or pause a video/product model if it\u2019s visible or not\n  function initViewportMediaAutoplay() {\n    const root = document.querySelector('.theme-content');\n    if (!root) return;\n  \n    const SUPPORTS_IO = 'IntersectionObserver' in window;\n    const state = new WeakMap();\n  \n    function canAutoplayVideo(video) {\n      return video && !video.closest('.none-autoplay');\n    }\n  \n    function safePlay(video) {\n      try {\n        const p = video.play();\n        if (p && typeof p.catch === 'function') p.catch(() => {});\n      } catch (e) {}\n    }\n  \n    function safePause(video) {\n      try { video.pause(); } catch (e) {}\n    }\n  \n    function isSlideshowVideo(video) {\n      return !!(video.closest('.slideshow') || video.closest('.shoppable-media-slider'));\n    }\n  \n    function isCurrentSlide(video) {\n      return !!(video.closest('.current') || video.closest('.swiper-slide-active'));\n    }\n  \n    function handleVideoVisibility(video, isVisible) {\n      if (!canAutoplayVideo(video)) return;\n  \n      if (isSlideshowVideo(video) && isVisible) {\n        if (isCurrentSlide(video)) safePlay(video);\n        else safePause(video);\n        return;\n      }\n  \n      if (isVisible) safePlay(video);\n      else safePause(video);\n    }\n  \n    function handleModelVisibility(model, isVisible) {\n      const ui = model?.modelViewerUI;\n      if (!ui) return;\n      try {\n        isVisible ? ui.play() : ui.pause();\n      } catch (e) {}\n    }\n  \n    let io = null;\n  \n    function observeAll() {\n      const videos = root.querySelectorAll('video');\n      const models = root.querySelectorAll('product-model');\n  \n      if (!SUPPORTS_IO) {\n        setupFallbackScroll(videos, models);\n        requestAnimationFrame(() => {\n          videos.forEach(v => handleVideoVisibility(v, elemInViewport(v)));\n          models.forEach(m => handleModelVisibility(m, elemInViewport(m)));\n        });\n        return;\n      }\n  \n      if (!io) {\n        io = new IntersectionObserver((entries) => {\n          for (const entry of entries) {\n            const el = entry.target;\n            const was = state.get(el);\n            const now = entry.isIntersecting;\n  \n            if (was === now) continue;\n            state.set(el, now);\n  \n            if (el.tagName === 'VIDEO') {\n              handleVideoVisibility(el, now);\n            } else {\n              // product-model\n              handleModelVisibility(el, now);\n            }\n          }\n        }, { rootMargin: '300px 0px', threshold: 0.01 });\n      }\n  \n      videos.forEach(v => {\n        if (!canAutoplayVideo(v)) return;\n        io.observe(v);\n      });\n  \n      models.forEach(m => io.observe(m));\n    }\n  \n    let fallbackInited = false;\n  \n    function setupFallbackScroll(videos, models) {\n      if (fallbackInited) return;\n      fallbackInited = true;\n  \n      let ticking = false;\n  \n      const onScroll = () => {\n        if (ticking) return;\n        ticking = true;\n  \n        requestAnimationFrame(() => {\n          ticking = false;\n  \n          videos.forEach(v => {\n            if (!canAutoplayVideo(v)) return;\n            handleVideoVisibility(v, elemInViewport(v));\n          });\n  \n          models.forEach(m => handleModelVisibility(m, elemInViewport(m)));\n        });\n      };\n  \n      document.addEventListener('scroll', onScroll, { passive: true });\n      window.addEventListener('resize', onScroll, { passive: true });\n    }\n  \n    function rescan() {\n      if (io) {\n        try { io.disconnect(); } catch (e) {}\n        io = null;\n      }\n      observeAll();\n    }\n  \n    if ('requestIdleCallback' in window) {\n      requestIdleCallback(() => observeAll(), { timeout: 1500 });\n    } else {\n      setTimeout(() => observeAll(), 0);\n    }\n  \n    if (Shopify.designMode) {\n      document.addEventListener('shopify:section:load', () => {\n        rescan();\n      });\n    }\n  }\n  \n  function elemInViewport(elem) {\n    const box = elem.getBoundingClientRect();\n    const top = box.top;\n    const bottom = box.bottom;\n    const height = document.documentElement.clientHeight;\n    return Math.min(height, bottom) - Math.max(0, top) >= 0;\n  }\n  \n  document.addEventListener('DOMContentLoaded', initViewportMediaAutoplay);\n  \n  function removeTrapFocus(elementToFocus = null) {\n    document.removeEventListener('focusin', trapFocusHandlers.focusin);\n    document.removeEventListener('focusout', trapFocusHandlers.focusout);\n    document.removeEventListener('keydown', trapFocusHandlers.keydown);\n  \n    if (elementToFocus) elementToFocus.focus();\n  }\n  \n  function onKeyUpEscape(event) {\n    if (event.code.toUpperCase() !== 'ESCAPE') return;\n  \n    const openDetailsElement = event.target.closest('details[open]');\n    if (!openDetailsElement) return;\n  \n    const summaryElement = openDetailsElement.querySelector('summary');\n    openDetailsElement.removeAttribute('open');\n    summaryElement.setAttribute('aria-expanded', false);\n    summaryElement.focus();\n  }\n  \n  function capitalizeFirstLetter(string) {\n    return string.charAt(0).toUpperCase() + string.slice(1);\n  }\n  \n  function debounce(fn, wait) {\n    let t;\n    return (...args) => {\n      clearTimeout(t);\n      t = setTimeout(() => fn.apply(this, args), wait);\n    };\n  }\n  \n  function fetchConfig(type = 'json') {\n    return {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json', 'Accept': `application/${type}` }\n    };\n  }\n  \nfunction isStorageSupported (type) {\n  // Return false if we are in an iframe without access to sessionStorage\n  if (window.self !== window.top) {\n    return false;\n  }\n\n  const testKey = 'avante-theme:test';\n  let storage;\n  if (type === 'session') {\n    storage = window.sessionStorage;\n  }\n  if (type === 'local') {\n    storage = window.localStorage;\n  }\n\n  try {\n    storage.setItem(testKey, '1');\n    storage.removeItem(testKey);\n    return true;\n  }\n  catch (error) {\n    // Do nothing, this may happen in Safari in incognito mode\n    return false;\n  }\n}\n\n  /*\n    * Shopify Common JS\n    */\n  if ((typeof window.Shopify) == 'undefined') {\n    window.Shopify = {};\n  }\n  \n  Shopify.bind = function(fn, scope) {\n    return function() {\n      return fn.apply(scope, arguments);\n    }\n  };\n  \n  Shopify.setSelectorByValue = function(selector, value) {\n    for (var i = 0, count = selector.options.length; i < count; i++) {\n      var option = selector.options[i];\n      if (value == option.value || value == option.innerHTML) {\n        selector.selectedIndex = i;\n        return i;\n      }\n    }\n  };\n  \n  Shopify.addListener = function(target, eventName, callback) {\n    target.addEventListener ? target.addEventListener(eventName, callback, false) : target.attachEvent('on'+eventName, callback);\n  };\n  \n  Shopify.postLink = function(path, options) {\n    options = options || {};\n    var method = options['method'] || 'post';\n    var params = options['parameters'] || {};\n    var form = document.createElement(\"form\");\n    form.setAttribute(\"method\", method);\n    form.setAttribute(\"action\", path);\n  \n    for(var key in params) {\n      var hiddenField = document.createElement(\"input\");\n      hiddenField.setAttribute(\"type\", \"hidden\");\n      hiddenField.setAttribute(\"name\", key);\n      hiddenField.setAttribute(\"value\", params[key]);\n      form.appendChild(hiddenField);\n    }\n    document.body.appendChild(form);\n    form.submit();\n    document.body.removeChild(form);\n  };\n  \n  Shopify.CountryProvinceSelector = function(country_domid, province_domid, options) {\n    this.countryEl \n    this.provinceEl\n    this.provinceContainer\n\n    if(document.querySelector('#main-cart')) {\n      this.shippingCalculators = document.querySelectorAll('shipping-calculator')\n      this.shippingCalculators.forEach(shippingCalculator => {\n        this.countryEl         = shippingCalculator.querySelector(`#${country_domid}`);\n        this.provinceEl        = shippingCalculator.querySelector(`#${province_domid}`);\n        this.provinceContainer = shippingCalculator.querySelector(`#${options['hideElement']}` || `#${province_domid}`);\n\n        Shopify.addListener(this.countryEl, 'change', Shopify.bind(this.countryHandler,this));\n    \n        this.initCountry();\n        this.initProvince();\n      })\n    } else {\n      this.countryEl         = document.getElementById(country_domid);\n      this.provinceEl        = document.getElementById(province_domid);\n      this.provinceContainer = document.getElementById(options['hideElement'] || province_domid);\n\n      Shopify.addListener(this.countryEl, 'change', Shopify.bind(this.countryHandler,this));\n\n      this.initCountry();\n      this.initProvince();\n    }\n  };\n\n  Shopify.CountryProvinceSelector.prototype = {\n    initCountry: function() {\n      var value = this.countryEl.getAttribute('data-default');\n      Shopify.setSelectorByValue(this.countryEl, value);\n      this.countryHandler();\n    },\n  \n    initProvince: function() {\n      var value = this.provinceEl.getAttribute('data-default');\n      if (value && this.provinceEl.options.length > 0) {\n        Shopify.setSelectorByValue(this.provinceEl, value);\n      }\n    },\n  \n    countryHandler: function(e) {\n      var opt       = this.countryEl.options[this.countryEl.selectedIndex];\n      var raw       = opt.getAttribute('data-provinces');\n      var provinces = JSON.parse(raw);\n  \n      this.clearOptions(this.provinceEl);\n      if (provinces && provinces.length == 0) {\n        this.provinceContainer.style.display = 'none';\n      } else {\n        for (var i = 0; i < provinces.length; i++) {\n          var opt = document.createElement('option');\n          opt.value = provinces[i][0];\n          opt.innerHTML = provinces[i][1];\n          this.provinceEl.appendChild(opt);\n        }\n        this.provinceContainer.style.display = \"\";\n      }\n    },\n  \n    clearOptions: function(selector) {\n      while (selector.firstChild) {\n        selector.removeChild(selector.firstChild);\n      }\n    },\n  \n    setOptions: function(selector, values) {\n      for (var i = 0, count = values.length; i < values.length; i++) {\n        var opt = document.createElement('option');\n        opt.value = values[i];\n        opt.innerHTML = values[i];\n        selector.appendChild(opt);\n      }\n    }\n  };\n\n  document.addEventListener('quickview:loaded', () => {\n    window.ProductModel = {\n      loadShopifyXR() {\n        Shopify.loadFeatures([\n          {\n            name: 'shopify-xr',\n            version: '1.0',\n            onLoad: this.setupShopifyXR.bind(this),\n          },\n        ]);\n      },\n    \n      setupShopifyXR(errors) {\n        if (errors) return;\n    \n        if (!window.ShopifyXR) {\n          document.addEventListener('shopify_xr_initialized', () =>\n            this.setupShopifyXR()\n          );\n          return;\n        }\n    \n        document.querySelectorAll('[id^=\"ProductJSON-\"]').forEach((modelJSON) => {\n          window.ShopifyXR.addModels(JSON.parse(modelJSON.textContent));\n          modelJSON.remove();\n        });\n        window.ShopifyXR.setupXRElements();\n      },\n    };\n    if (window.ProductModel) {\n        window.ProductModel.loadShopifyXR();\n    }\n  });\n\n  class Breadcrumbs extends HTMLElement {\n    constructor() {\n      super();\n  \n      this.template = this.dataset.currentTemplate;\n      if (this.template != 'product' && this.template != 'collection') return;\n  \n      this.cookieName = 'avante-theme:active-category';\n      this.cookieUrl  = 'avante-theme:active-category-url';\n  \n      this.storageItem    = this.querySelector('.breadcrumbs__item--storage');\n      this.metafieldItem  = this.querySelector('.breadcrumbs__item--metafield');\n      this.collectionItem = this.querySelector('.breadcrumbs__item--collection');\n  \n      this._storageLink   = this.storageItem?.querySelector('a') || null;\n      this._metafieldLink = this.metafieldItem?.querySelector('a') || null;\n      this._collectionLink = this.collectionItem?.querySelector('a') || null;\n  \n      this.menuItems = document.querySelectorAll('.menu__list a');\n  \n      this.tagItems = null;\n      if (this.metafieldItem && this.metafieldItem.dataset.tags) {\n        this.tagItems = this.metafieldItem.dataset.tags.split(',');\n      }\n  \n      this.setMetafieldLink();\n      this.setStorageCategory();\n  \n      const onSectionLoad = () => {\n        this.menuItems = document.querySelectorAll('.menu__list a');\n        this.setMetafieldLink();\n      };\n  \n      document.addEventListener('shopify:section-load', onSectionLoad);\n      document.addEventListener('shopify:section:load', onSectionLoad);\n    }\n  \n    setMetafieldLink() {\n      if (!this._metafieldLink) return;\n  \n      const metafieldText = this._metafieldLink.innerHTML;\n      let tagSet = null;\n      if (this.tagItems && this.tagItems.length > 0) {\n        tagSet = new Set(\n          this.tagItems\n            .map(t => (t ?? '').trim())\n            .filter(Boolean)\n        );\n      }\n  \n      for (let i = 0; i < this.menuItems.length; i++) {\n        const menuItem = this.menuItems[i];\n        let dataTitle = menuItem?.dataset?.title;\n        const dataTitleLower = dataTitle ? dataTitle.toLowerCase() : '';\n  \n        if (dataTitle && metafieldText == dataTitle) {\n          this._metafieldLink.setAttribute('href', `${menuItem.href}`);\n        }\n  \n        if (tagSet && dataTitle && tagSet.has(dataTitleLower)) {\n          this._metafieldLink.setAttribute('href', `${menuItem.href}`);\n          this._metafieldLink.innerHTML = dataTitle;\n  \n          setTimeout(() => {\n            if (!this.collectionItem || !this._collectionLink) return;\n            if (this._collectionLink.innerHTML == this._metafieldLink.innerHTML) {\n              this.collectionItem.style.display = 'none';\n            }\n          }, 10);\n        }\n      }\n    }\n  \n    setStorageCategory() {\n      if (!this._storageLink) return;\n  \n      if (isStorageSupported('local')) {\n        const activeCategory = window.localStorage.getItem(this.cookieName);\n        const activeCategoryUrl = window.localStorage.getItem(this.cookieUrl);\n  \n        if (this.storageItem && activeCategory && activeCategoryUrl) {\n          this._storageLink.setAttribute('href', `${activeCategoryUrl}`);\n          this._storageLink.innerHTML = `${activeCategory}`;\n  \n          if (this.collectionItem && this._collectionLink && this._collectionLink.innerHTML == activeCategory) {\n            this.collectionItem.style.display = 'none';\n          }\n        }\n      }\n    }\n  }\n  \n  customElements.define('breadcrumbs-component', Breadcrumbs);\n\n  function validateFormInput (inputElement) {\n    const inputType = inputElement.getAttribute('type');\n    let isValid = false;\n  \n    switch (inputType) {\n      case 'checkbox':\n        const fieldWrapper = inputElement.closest('label');\n        if (fieldWrapper.dataset.group) {\n          const groupWrapper = fieldWrapper.parentElement;\n          const minSelection = parseInt(groupWrapper.dataset.min) > 0 ? parseInt(groupWrapper.dataset.min) : 1;\n          const checkedElms = groupWrapper.querySelectorAll('input[type=checkbox]:checked');\n          const errorMessage = groupWrapper.parentElement.querySelector('.input-error-message');\n  \n          if (checkedElms.length < minSelection) {\n            isValid = false;\n            if (errorMessage) errorMessage.classList.remove('visually-hidden');\n            const headerHeight = getComputedStyle(document.documentElement).getPropertyValue('--header-height').trim();\n            const headerOffset = parseInt(headerHeight?.replace('px', '')) || 0;\n            const topOffset = errorMessage.closest('.custom-options').getBoundingClientRect().top + window.pageYOffset - headerOffset;\n            window.scrollTo({ top: topOffset, behavior: 'smooth' });\n  \n          } else {\n            isValid = true;\n            if (errorMessage) errorMessage.classList.add('visually-hidden');\n          }\n        } else {\n          isValid = inputElement.checked;\n        }\n  \n        break;\n      case 'file':\n        isValid = inputElement.value !== '';\n        const dropZone = inputElement.closest('.drop-zone-wrap');\n        const errorMessage = dropZone.querySelector('.input-error-message');\n  \n        if (dropZone && !isValid) {\n          dropZone.classList.add('drop-zone-wrap--error');\n          if (errorMessage) {\n            errorMessage.textContent = window.variantStrings.fileRequiredError;\n            errorMessage.classList.remove('visually-hidden');\n            const headerHeight = getComputedStyle(document.documentElement).getPropertyValue('--header-height').trim();\n            const headerOffset = parseInt(headerHeight?.replace('px', '')) || 0;\n            const topOffset = errorMessage.closest('.custom-options').getBoundingClientRect().top + window.pageYOffset - headerOffset;\n            window.scrollTo({ top: topOffset, behavior: 'smooth' });\n          }\n        }\n  \n        break;\n      default:\n        isValid = inputElement.value !== '';\n  \n        if ( inputElement.name === 'address[country]' || inputElement.name === 'country') {\n          isValid = inputElement.value !== '---';\n        }\n    }\n  \n    if (!isValid) {\n      const fieldWrapper = inputElement.parentElement;\n      const hasErrorMessage = fieldWrapper.querySelector('.input-error-message');\n  \n      if (hasErrorMessage) {\n        hasErrorMessage.classList.remove('visually-hidden');\n        const headerHeight = getComputedStyle(document.documentElement).getPropertyValue('--header-height').trim();\n        const headerOffset = parseInt(headerHeight?.replace('px', '')) || 0;\n        const topOffset = hasErrorMessage.closest('.custom-options').getBoundingClientRect().top + window.pageYOffset - headerOffset;\n        window.scrollTo({ top: topOffset, behavior: 'smooth' });\n      }\n  \n      inputElement.classList.add('invalid');\n      inputElement.setAttribute('aria_invalid', 'true');\n      inputElement.setAttribute('aria_describedby', `${inputElement.id}-error`);\n    }\n  \n    return isValid;\n  }\n  \n  function removeErrorStyle (inputElem) {\n    const fieldWrapper = inputElem.parentElement;\n    const hasErrorMessage = fieldWrapper.querySelector('.input-error-message');\n  \n  \n    if (hasErrorMessage) {\n      hasErrorMessage.classList.add('visually-hidden');\n    }\n  \n    inputElem.classList.remove('invalid');\n    inputElem.removeAttribute('aria_invalid');\n    inputElem.removeAttribute('aria_describedby');\n  }\n\n  class LocalizationForm extends HTMLElement {\n    constructor() {\n      super();\n  \n      this._mounted = false;\n  \n      this._onButtonClick = this.openSelector.bind(this);\n      this._onKeyUp = this.onContainerKeyUp.bind(this);\n      this._onFocusOut = this.closeSelector.bind(this);\n      this._onDocScroll = this.hidePanel.bind(this);\n      this._onClickDelegated = this._onClickDelegated.bind(this);\n      this._onSectionScroll = this.hidePanel.bind(this);\n      this._onDocumentClick = this.onDocumentClick.bind(this);\n  \n      this._alignPanelSoon = () => this.alignPanel();\n  \n      this.elements = null;\n      this._sectionScrollEl = null;\n    }\n  \n    connectedCallback() {\n      if (this._mounted) return;\n      this._mounted = true;\n  \n      this.elements = {\n        input: this.querySelector('input[name=\"locale_code\"], input[name=\"country_code\"]'),\n        inputLanguage: this.querySelector('input[name=\"locale_code\"]'),\n        button: this.querySelector('button'),\n        panel: this.querySelector('.disclosure__list-wrapper'),\n      };\n  \n      if (!this.elements.button || !this.elements.panel || !this.elements.input) return;\n  \n      this.elements.button.addEventListener('click', this._onButtonClick);\n      this.addEventListener('keyup', this._onKeyUp);\n      this.addEventListener('focusout', this._onFocusOut);\n      this.addEventListener('click', this._onClickDelegated);\n  \n      document.addEventListener('click', this._onDocumentClick);\n      document.addEventListener('scroll', this._onDocScroll, { passive: true });\n  \n      const section = this.elements.button.closest('.shopify-section');\n      this._sectionScrollEl = section?.querySelector('div') || null;\n      if (this._sectionScrollEl) {\n        this._sectionScrollEl.addEventListener('scroll', this._onSectionScroll, { passive: true });\n      }\n    }\n  \n    disconnectedCallback() {\n      this._mounted = false;\n  \n      if (!this.elements?.button) return;\n  \n      this.elements.button.removeEventListener('click', this._onButtonClick);\n      this.removeEventListener('keyup', this._onKeyUp);\n      this.removeEventListener('focusout', this._onFocusOut);\n      this.removeEventListener('click', this._onClickDelegated);\n  \n      document.removeEventListener('click', this._onDocumentClick);\n      document.removeEventListener('scroll', this._onDocScroll);\n  \n      if (this._sectionScrollEl) {\n        this._sectionScrollEl.removeEventListener('scroll', this._onSectionScroll);\n        this._sectionScrollEl = null;\n      }\n    }\n  \n    _onClickDelegated(event) {\n      const link = event.target.closest('a');\n      if (!link || !this.contains(link)) return;\n      this.onItemClick(event, link);\n    }\n  \n    alignPanel() {\n      const isRTL = document.documentElement.dir === 'rtl';\n  \n      this.elements.panel.style.insetInlineEnd = 'auto';\n  \n      const buttonRect = this.elements.button.getBoundingClientRect();\n      const viewportHeight = window.innerHeight;\n      const viewportWidth = window.innerWidth;\n  \n      this.elements.panel.style.top = buttonRect.bottom + 'px';\n  \n      const panelRect = this.elements.panel.getBoundingClientRect();\n      const elementOverflowsViewport = isRTL\n        ? panelRect.left - 16 < 0\n        : panelRect.right + 16 > viewportWidth;\n  \n      if (panelRect.bottom > viewportHeight) {\n        this.elements.panel.style.top = buttonRect.top - this.elements.panel.offsetHeight + 'px';\n      }\n  \n      if (elementOverflowsViewport) {\n        this.elements.panel.style.insetInlineEnd = '16px';\n      }\n    }\n  \n    hidePanel() {\n      if (this.elements.panel.hasAttribute('hidden')) return;\n      this.elements.button.setAttribute('aria-expanded', 'false');\n      this.elements.panel.setAttribute('hidden', true);\n      this.elements.button\n        .querySelectorAll('.disclosure__button-icon')\n        .forEach((item) => item.classList.remove('open'));\n    }\n  \n    onContainerKeyUp(event) {\n      if (event.code.toUpperCase() !== 'ESCAPE') return;\n      this.hidePanel();\n      this.elements.button.focus();\n    }\n  \n    onItemClick(event, linkEl) {\n      event.preventDefault();\n      const value = linkEl.dataset.value;\n      if (!value) return;\n  \n      const form = this.querySelector('form');\n      this.elements.input.value = value;\n      if (form) form.submit();\n    }\n  \n    openSelector() {\n      this.elements.button.focus();\n      this.elements.panel.toggleAttribute('hidden');\n  \n      const isExpanded = !this.elements.panel.hasAttribute('hidden');\n      this.elements.button\n        .querySelectorAll('.disclosure__button-icon')\n        .forEach((item) => item.classList.toggle('open', isExpanded));\n  \n      this.elements.button.setAttribute('aria-expanded', isExpanded.toString());\n  \n      if (isExpanded) {\n        setTimeout(this._alignPanelSoon, 20);\n      }\n    }\n  \n    closeSelector(event) {\n      if (event.relatedTarget && !this.contains(event.relatedTarget)) {\n        this.hidePanel();\n      }\n    }\n  \n    onDocumentClick(event) {\n      if (this.elements.panel.hasAttribute('hidden')) return;\n      if (this.contains(event.target)) return;\n      this.hidePanel();\n    }\n  }\n  customElements.define('localization-form', LocalizationForm);\n\n\n  class MenuDropdown extends HTMLElement {\n    constructor() {\n      super();\n    \n      this._inited = false;\n      this._initScheduled = false;\n      this._onKeyup = this._onKeyup?.bind ? this._onKeyup.bind(this) : null;\n      this._slideoutScrollHandler = null;\n    }\n\n    connectedCallback() {\n      if (this._armed) return;\n      this._armed = true;\n    \n      this._firstIntent = (e) => {\n        this._disarmFirstIntent();\n        this.deferInit();\n      };\n    \n      this._preHover = (e) => {\n        const item = e.target?.closest?.('.menu__item-title--first-level.menu__item-title--header');\n        if (!item) return;\n    \n        this._disarmFirstIntent();\n        this.deferInit();\n    \n        const openWhenReady = () => {\n          if (!this._inited) {\n            requestAnimationFrame(openWhenReady);\n            return;\n          }\n    \n          const stillHovering = item.matches(':hover') || !!item.querySelector(':hover');\n          if (!stillHovering) return;\n    \n          this.openHeaderMenu(e, item);\n    \n          if (this._preHover) {\n            this.removeEventListener('pointerover', this._preHover);\n            this._preHover = null;\n          }\n        };\n    \n        requestAnimationFrame(openWhenReady);\n      };\n    \n      this.addEventListener('pointerover', this._preHover, { passive: true });\n      this.addEventListener('pointerenter', this._firstIntent, { once: true, passive: true });\n      this.addEventListener('pointerdown',  this._firstIntent, { once: true, passive: true });\n      this.addEventListener('focusin',      this._firstIntent, { once: true, passive: true });\n    }\n    \n    _disarmFirstIntent() {\n      if (!this._firstIntent) return;\n      this.removeEventListener('pointerenter', this._firstIntent);\n      this.removeEventListener('pointerdown',  this._firstIntent);\n      this.removeEventListener('focusin',      this._firstIntent);\n    }\n\n    disconnectedCallback() {\n      if (this._armed) {\n        this._armed = false;\n        this._disarmFirstIntent();\n        this._firstIntent = null;\n      }\n\n      this.detachSlideoutScroll();\n    \n      if (this.overlapScrollHandler) {\n        window.removeEventListener('scroll', this.overlapScrollHandler);\n        this.overlapScrollHandler = null;\n      }\n    \n      if (this._outsideMainSidebarHandler) {\n        document.removeEventListener('pointerdown', this._outsideMainSidebarHandler, { capture: true });\n        this._outsideMainSidebarHandler = null;\n      }\n\n      if (this._outsideClickHandler) {\n        document.removeEventListener('click', this._outsideClickHandler, { capture: true });\n        this._outsideClickHandler = null;\n      }\n\n      if (this._preHover) {\n        this.removeEventListener('pointerover', this._preHover);\n        this._preHover = null;\n      }\n    \n      this.disableGlobalOutsideClose();\n    }\n\n    deferInit() {\n      if (this._inited || this._initScheduled) return;\n      this._initScheduled = true;\n    \n      const run = () => {\n        this._initScheduled = false;\n        this.init();\n      };\n\n      setTimeout(() => {\n        if ('requestIdleCallback' in window) {\n          requestIdleCallback(run, { timeout: 1500 });\n        } else {\n          setTimeout(run, 0);\n        }\n      }, 0);\n    }\n\n    init() {\n      if (this._inited) return;\n      this._inited = true;\n    \n      this.elements = {\n        firstLevelLinkHeader: this.querySelectorAll('.menu__item-title--header'),\n        dropdownFirstLevelLink: this.querySelectorAll('.menu__item-title--simple_slide_out'),\n        firstLevelCollapsibleButton: this.querySelectorAll('.menu__item-title--collapsible .dropdown-icon--first-level'),\n        secondLevelButton: this.querySelectorAll('.dropdown-icon--second-level'),\n        secondLevelLink: this.querySelectorAll('.menu__item-title--second-level'),\n        headerDropdownChild: this.querySelectorAll('.menu__item-title--header ~ .menu__dropdown-container'),\n        sidebarDropdownChild: this.querySelectorAll('.menu__item-title--simple_slide_out ~ .menu__dropdown-container'),\n        sidebarDivider: this.querySelectorAll('.menu__item-title--slide_out ~ .menu-divider'),\n        dropdownChildList: this.querySelectorAll('.menu__dropdown-child'),\n        navContainer: this.querySelectorAll('.menu__navigation'),\n        links: this.querySelectorAll('.menu__list a'),\n        secondarySidebar: document.querySelector('.secondary-sidebar-section'),\n        overlapFirstLevelLink: this.querySelectorAll('.menu__item-title--overlap_slide_out_first-item'),\n        overlapGrandchildContainers: this.querySelectorAll('.menu__dropdown-grandchild-container--overlap_slide_out'),\n        sidebarOverlapDropdownChild: this.querySelectorAll('.menu__item-title--overlap_slide_out_first-item ~ .menu__dropdown-container'),\n        mainSidebarList: this.querySelector('.menu__list--main-sidebar')\n      };\n      this.zTimers = new WeakMap();\n      this._reopenBlock = new WeakMap();\n      this.sidebarWidth = 0\n      if (this.elements.secondarySidebar) this.sidebarWidth = this.elements.secondarySidebar.offsetWidth\n  \n      /* Script for Header menu */\n      this.elements.firstLevelLinkHeader.forEach(item => item.addEventListener('mouseenter', (event) => {\n        this.openHeaderMenu(event, item)\n      }))\n\n      this.elements.firstLevelLinkHeader.forEach(headerItem => {\n        const icon = headerItem.querySelector('.dropdown-icon--first-level');\n        if (!icon) return;\n\n        icon.addEventListener('keyup', (event) => {\n          if (event.code.toUpperCase() !== 'ENTER') return;\n\n          if (!headerItem.classList.contains('open')) {\n            this.openHeaderMenu(event, headerItem);\n          } else {\n            this.elements.headerDropdownChild.forEach(item => item.classList.remove('open'));\n            this.elements.firstLevelLinkHeader.forEach(item => item.classList.remove('open'));\n            this.closeSecondDropdown(headerItem);\n          }\n        });\n\n        icon.addEventListener('focusout', (event) => {\n          const nextFocused = event.relatedTarget;\n          const dropdown = headerItem.nextElementSibling;\n\n          const stillInside =\n            nextFocused &&\n            (\n              icon.contains(nextFocused) ||               \n              (dropdown && dropdown.contains(nextFocused)) \n            );\n\n          if (stillInside) return;\n\n          this.closeDropdownMenu(dropdown);\n        });\n      });\n  \n      this.elements.firstLevelLinkHeader.forEach(item => item.addEventListener('mouseleave', (event) => {\n        if (event.relatedTarget && !event.relatedTarget.closest('.menu__dropdown-container') && !event.relatedTarget.closest('.menu__item')) {\n          this.closeDropdownMenu(item);\n        }\n      }))\n  \n      this.elements.headerDropdownChild.forEach(item => item.addEventListener('mouseleave', (event) => {\n        if (item.classList.contains('mega-menu') && item.classList.contains('mega-menu--wide') && item.closest('.header').offsetWidth > 1024) item.removeAttribute('style')\n        if (event.relatedTarget != item.previousElementSibling && !Array.from(item.previousElementSibling.children).includes(event.relatedTarget)) {\n          this.elements.firstLevelLinkHeader.forEach(item => item.classList.remove('open'))\n          this.closeSecondDropdown(item)\n        }\n      }))\n\n      this.elements.headerDropdownChild.forEach(dropdown => {\n        dropdown.addEventListener('focusout', (event) => {\n          const nextFocused = event.relatedTarget;\n          const trigger = dropdown.previousElementSibling; \n\n          const stillInside =\n            nextFocused &&\n            (\n              dropdown.contains(nextFocused) ||\n              (trigger && (trigger === nextFocused || trigger.contains(nextFocused)))\n            );\n\n          if (stillInside) return;\n\n          this.closeDropdownMenu(dropdown);\n        });\n      });\n\n      /*Script for Collapsible menu type in Main sidebar and Menu in Menu Drawer section */\n      this.elements.firstLevelCollapsibleButton.forEach(item => item.addEventListener('click', () => {\n        this.toggleCollapsibleMenu(item)\n      }))\n  \n      this.elements.firstLevelCollapsibleButton.forEach(item => item.addEventListener('keyup', (event) => {\n        if (event.code.toUpperCase() === 'ENTER') {\n          this.toggleCollapsibleMenu(item)\n        }\n      }))\n\n      /* Script for Second level (collapsible children) */\n      this.elements.secondLevelButton.forEach(item => item.addEventListener('click', () => {\n        this.toggleSecondLevelMenu(item);\n      }));\n      this.elements.secondLevelButton.forEach(item => item.addEventListener('keyup', (event) => {\n        if (event.code.toUpperCase() === 'ENTER') this.toggleSecondLevelMenu(item);\n      }));\n\n      /* Script for Slide out menu type in Main Sidebar (simple_slide_out) */\n      if (window.theme?.config?.isTouch && this.elements.dropdownFirstLevelLink.length > 0) {\n        const ms = this.closest('.main-sidebar');\n        if (ms) ms.style.position = 'absolute';\n        const list = this.querySelector('.menu__list--main-sidebar');\n        if (list) list.style.width = 'calc(100% + 6px)';\n      }\n\n      this.elements.dropdownFirstLevelLink.forEach(item => item.addEventListener('mouseenter', () => {\n        this.openSlideOutMenu(item);\n      }));\n\n      this.elements.dropdownFirstLevelLink.forEach(item => {\n        const icon = item.querySelector('.dropdown-icon--first-level');\n        if (!icon) return;\n\n        icon.addEventListener('keyup', (event) => {\n          if (event.code.toUpperCase() === 'ENTER') {\n            if (!item.classList.contains('open')) this.openSlideOutMenu(item);\n            else {\n              this.elements.dropdownFirstLevelLink.forEach(i => i.classList.remove('open'));\n            }\n          }\n        });\n      });\n\n      this.elements.dropdownFirstLevelLink.forEach(item => item.addEventListener('mouseleave', (event) => {\n        const rt = event.relatedTarget;\n        if (!rt) return;\n\n        if (\n          item.classList.contains('open') &&\n          !rt.classList.contains('menu-divider') &&\n          !rt.classList.contains('menu__dropdown-container') &&\n          !Array.from(item.nextElementSibling?.children || []).includes(rt) &&\n          !rt.classList.contains('menu__dropdown-child-item-link') &&\n          rt !== item.closest('.menu-container')\n        ) {\n          this.elements.dropdownFirstLevelLink.forEach(i => {\n            i.classList.remove('open');\n            const section = i.closest('.main-sidebar-section');\n            if (section) section.style.zIndex = 20;\n          });\n        }\n      }));\n\n      this.elements.sidebarDropdownChild.forEach(panel => panel.addEventListener('mouseleave', (event) => {\n        const rt = event.relatedTarget;\n        if (!rt) return;\n\n        if (\n          rt !== panel.previousElementSibling &&\n          !Array.from(panel.previousElementSibling?.children || []).includes(rt) &&\n          !rt.closest('.menu-divider')\n        ) {\n          this.elements.dropdownFirstLevelLink.forEach(i => {\n            i.classList.remove('open');\n            const section = i.closest('.main-sidebar-section');\n            if (section) section.style.zIndex = 20;\n          });\n        }\n      }));\n\n      document.addEventListener('touchend', (event) => {\n        this.elements.dropdownFirstLevelLink.forEach(item => {\n          if (item.classList.contains('open') && window.theme?.config?.isTouch) {\n            if (\n              event.target !== item &&\n              !event.target.closest('.menu__dropdown-container') &&\n              !event.target.closest('.menu-divider')\n            ) {\n              this.elements.dropdownFirstLevelLink.forEach(i => {\n                i.classList.remove('open');\n                const section = i.closest('.main-sidebar-section');\n                if (section) section.style.zIndex = 20;\n              });\n            }\n          }\n        });\n      });\n\n      /* Close parent containers on real link click */\n      this.elements.links.forEach(link => {\n        link.addEventListener('click', () => {\n          if (link.getAttribute('href') === '#') return;\n          this.closeParentContainers(link);\n        });\n      });\n  \n      this.hoverDelay = 320;   \n      this.OVER_Z_DELAY = 800\n      this.overlapTrigger = (this.getAttribute('data-overlap-trigger') || 'hover').toLowerCase();\n\n      if (this.overlapTrigger === 'click') {\n        this.initOverlapClick();\n      } else {\n        this.initOverlapHover();\n      }\n    }\n\n    ensureNoAnimStyle() {\n      if (document.getElementById('menu-dropdown-no-anim-style')) return;\n      const style = document.createElement('style');\n      style.id = 'menu-dropdown-no-anim-style';\n      style.textContent = `\n        .md-no-anim, .md-no-anim * {\n          transition: none !important;\n        }\n      `;\n      document.head.appendChild(style);\n    }\n\n    withNoAnim(el, fn) {\n      if (!el) { fn(); return; }\n      const prevTransition = el.style.transition;\n      el.style.transition = 'none';\n      fn();\n      // eslint-disable-next-line no-unused-expressions\n      el.offsetWidth;\n      requestAnimationFrame(() => {\n        el.style.transition = prevTransition;\n      });\n    }\n\n    detachSlideoutScroll() {\n      if (!this._slideoutScrollHandler) return;\n      window.removeEventListener('scroll', this._slideoutScrollHandler);\n      this._slideoutScrollHandler = null;\n    }\n\n    initOverlapHover() {\n      this.elements.overlapFirstLevelLink.forEach(first => {\n        first.addEventListener('mouseenter', () => {\n          this.elements.overlapFirstLevelLink.forEach(o => {\n            if (o !== first && o.classList.contains('open')) this.closeFirst(o);\n          });\n          this.openOverlapSlideOutMenu(first);\n          this.cancelCloseFirst(first);\n        });\n\n        first.addEventListener('mouseleave', (e) => {\n          const second = first.nextElementSibling;\n          const r = e.relatedTarget;\n\n          const intoSecond = !!(r && second && second.contains(r));\n          const intoDivider = !!(r && r.classList && r.classList.contains('menu-divider'));\n          const stayingOnFirst = !!(r && first.contains(r));\n          const intoThird     = !!(r && r.closest('.menu__dropdown-grandchild-container--overlap_slide_out'));\n\n          if (intoSecond || intoDivider || stayingOnFirst || intoThird) {\n            this.cancelCloseFirst(first);\n            return;\n          }\n        \n          const intoAnyFirst = !!(r && r.closest('.menu__item-title--overlap_slide_out_first'));\n          if (intoAnyFirst && !first.contains(r)) {\n            this.closeFirst(first);\n            return;\n          }\n        \n          this.closeFirst(first);\n        });\n      });\n\n      this.elements.sidebarOverlapDropdownChild.forEach(second => {\n        second.addEventListener('mouseenter', () => {\n          const trigger = second.previousElementSibling;\n          if (trigger) this.cancelCloseFirst(trigger);\n        });\n\n        second.addEventListener('mouseleave', (e) => {\n          const trigger = second.previousElementSibling;\n          const r = e.relatedTarget;\n        \n          const backToTrigger = !!(r && r === trigger);\n          const intoAnyFirst  = !!(r && r.closest('.menu__item-title--overlap_slide_out_first'));\n          const intoOtherFirst = intoAnyFirst && r !== trigger;\n          const intoThird = !!(r && r.closest('.menu__dropdown-grandchild-container--overlap_slide_out'));\n          const intoDivider = !!(r && r.classList && r.classList.contains('menu-divider'));\n          const stillInSecond = !!(r && (r === second || second.contains(r) || r.closest('.menu__dropdown-container') === second));\n        \n          if (backToTrigger || intoThird || intoDivider || stillInSecond) {\n            if (trigger) this.cancelCloseFirst(trigger);\n            return;\n          }\n        \n          if (intoOtherFirst || intoAnyFirst) {\n            if (trigger) this.closeFirst(trigger);\n            return;\n          }\n        \n          if (trigger) this.closeFirst(trigger);\n        });\n        second.addEventListener('mousemove', (e) => {\n          const overThird = e.target.closest('.menu__dropdown-grandchild-container--overlap_slide_out');\n          const overThirdTrigger = e.target.closest('.menu__item-title--overlap_slide_out_second');\n          if (!overThird && !overThirdTrigger) {\n            this.closeAllGrandchildren(second);\n          }\n        });\n      });\n\n      const thirdTriggers = this.querySelectorAll('.menu__dropdown-child .menu__item-title--overlap_slide_out_second');\n      thirdTriggers.forEach(t => {\n        t.addEventListener('mouseenter', () => this.openThirdNoTransitionOnSwitch(t));\n        t.addEventListener('mouseleave', (e) => {\n          const trigger = t.previousElementSibling;\n          const r = e.relatedTarget;\n          const backToTrigger = !!(r && r === trigger);\n          const intoSecond    = !!(r && r.closest('.menu__dropdown-container--overlap_slide_out'));\n          const intoFirst     = !!(r && r.closest('.menu__item-title--overlap_slide_out_first'));\n          const intoThird     = !!(r && r.closest('.menu__dropdown-grandchild-container--overlap_slide_out'));\n\n          if (backToTrigger || intoSecond || intoFirst || intoThird) {\n            this.cancelCloseFirst(trigger);\n            return;\n          }\n\n          if (trigger) this.closeFirst(trigger);\n        });\n\n        const thirdContainer = t.nextElementSibling;\n        if (thirdContainer) {\n          thirdContainer.addEventListener('mouseleave', (e) => {\n            const r = e.relatedTarget;\n            const backToOwnTrigger = !!(r && r === t);\n            const stillInThird = !!(r && thirdContainer.contains(r));\n            if (!backToOwnTrigger && !stillInThird) this.closeGrandchild(t);\n          });\n        }\n      });\n    }\n    openThirdNoTransitionOnSwitch(secondTrigger) {\n      const secondWrap  = secondTrigger.closest('.menu__dropdown-container');\n      const thirdToOpen = secondTrigger.nextElementSibling;\n      if (!secondWrap) return;\n\n      const hasThird = !!(thirdToOpen && thirdToOpen.matches('.menu__dropdown-grandchild-container'));\n\n      if (!hasThird) {\n        this.closeOpenGrandchildInSameSecond(secondTrigger, /* animated = */ false);\n        return;\n      }\n\n      const anyOpen = secondWrap.querySelector('.menu__dropdown-grandchild-container.open, .menu__dropdown-grandchild-container.opened');\n\n      if (!anyOpen) {\n        this.closeOpenGrandchildInSameSecond(secondTrigger, /* animated = */ true);\n        this.openOverlapSlideOutGrandchildMenu(secondTrigger, { animated: true, seamless: false });\n        return;\n      }\n\n      this.closeOpenGrandchildInSameSecond(secondTrigger, /* animated = */ false);\n      this.openOverlapSlideOutGrandchildMenu(secondTrigger, { animated: false, seamless: true });\n    }\n    initOverlapClick() {\n      this.elements.overlapFirstLevelLink.forEach(first => {\n        const hasSecond = !!(first.nextElementSibling && first.nextElementSibling.matches('.menu__dropdown-container'));\n        const firstAnchor = first.querySelector('a');\n        if (hasSecond && firstAnchor) {\n          firstAnchor.addEventListener('click', (e) => {\n            e.preventDefault();\n            this.toggleFirstByClick(first);\n          });\n        }\n        first.addEventListener('keyup', (e) => {\n          if (e.code === 'Enter' || e.code === 'Space') {\n            const hasSecond = !!(first.nextElementSibling && first.nextElementSibling.matches('.menu__dropdown-container'));\n            if (hasSecond) {\n              e.preventDefault();\n              this.toggleFirstByClick(first);\n            }\n          }\n        });\n      });\n    \n      const secondTriggers = this.querySelectorAll('.menu__item-title--overlap_slide_out_second');\n      secondTriggers.forEach(t => {\n        const third = t.nextElementSibling;\n        const hasThird = !!(third && third.matches('.menu__dropdown-grandchild-container'));\n        const link = t.querySelector('a.menu__dropdown-child-item-link');\n        if (hasThird && link) {\n          link.addEventListener('click', (e) => {\n            e.preventDefault();\n            this.toggleThirdByClick(t);\n          });\n        }\n        t.addEventListener('keyup', (e) => {\n          if (e.code === 'Enter' || e.code === 'Space') {\n            const hasThird = !!(t.nextElementSibling && t.nextElementSibling.matches('.menu__dropdown-grandchild-container'));\n            if (hasThird) {\n              e.preventDefault();\n              this.toggleThirdByClick(t);\n            }\n          }\n        });\n      });\n    \n      this._outsideMainSidebarHandler = (e) => {\n        const ms = document.querySelector('.main-sidebar');\n        if (!ms) return;\n      \n        const isInside = ms.contains(e.target);\n        if (!isInside) {\n          this.closeAllReally();\n        }\n      };\n      \n      document.addEventListener('pointerdown', this._outsideMainSidebarHandler, { capture: true });\n    }\n\n    toggleFirstByClick(first) {\n      const alreadyOpen = first.classList.contains('open') || first.classList.contains('opened');\n\n      this.elements.overlapFirstLevelLink.forEach(o => {\n        if (o !== first && (o.classList.contains('open') || o.classList.contains('opened'))) {\n          this.closeFirst(o);\n        }\n      });\n\n      if (alreadyOpen) {\n        this.blockReopen(first);\n        this.closeFirst(first);\n        return;\n      }\n\n      if (this.isReopenBlocked(first)) return;\n\n      this.openOverlapSlideOutMenu(first);\n    }\n    \n    toggleThirdByClick(secondTrigger) {\n      const third = secondTrigger.nextElementSibling;\n      if (!third) return;\n    \n      const isOpen = third.classList.contains('open');\n      if (isOpen) {\n        this.closeGrandchild(secondTrigger);\n      } else {\n       this.openThirdNoTransitionOnSwitch(secondTrigger)\n      }\n    }\n\n    enableGlobalOutsideClose(currentFirst) {\n      if (this.overlapTrigger === 'click') return;\n      this.globalOutsideHandler = (e) => {\n        const t = e.target;\n        const insideFirst  = !!(t && t.closest('.menu__item-title--overlap_slide_out_first'));\n        const insideSecond = !!(t && (t.closest('.menu__dropdown-container') || t.closest('.menu-divider')));\n        const insideThird  = !!(t && t.closest('.menu__dropdown-grandchild-container--overlap_slide_out'));\n    \n        if (!insideFirst && !insideSecond && !insideThird) {\n          this.closeFirst(currentFirst);\n        }\n      };\n    \n      document.addEventListener('mousemove', this.globalOutsideHandler, { passive: true });\n    \n      this.globalWindowLeaveHandler = () => {\n        this.closeFirst(currentFirst);\n      };\n      window.addEventListener('blur', this.globalWindowLeaveHandler);\n      document.addEventListener('mouseleave', this.globalWindowLeaveHandler);\n    }\n\n    closeAllGrandchildren(secondWrapper) {\n      if (!secondWrapper) return;\n      secondWrapper.querySelectorAll('.menu__dropdown-grandchild-container.open').forEach(gc => {\n        const trigger = gc.previousElementSibling;\n        if (trigger) trigger.classList.remove('open');\n        gc.classList.remove('open', 'change-index');\n    \n        const t = this.zTimers.get(gc);\n        if (t) { clearTimeout(t); this.zTimers.delete(gc); }\n    \n        this.setTabindex(gc, false);\n      });\n      this.elements.mainSidebarList?.classList.remove('is-open-second', 'is-open-first')\n    }\n    \n    disableGlobalOutsideClose() {\n      if (this.globalOutsideHandler) {\n        document.removeEventListener('mousemove', this.globalOutsideHandler);\n        this.globalOutsideHandler = null;\n      }\n      if (this.globalWindowLeaveHandler) {\n        window.removeEventListener('blur', this.globalWindowLeaveHandler);\n        document.removeEventListener('mouseleave', this.globalWindowLeaveHandler);\n        this.globalWindowLeaveHandler = null;\n      }\n    }\n\n    cancelCloseFirst(trigger) {\n      if (!this.closeFirstTimers) return;\n      const t = this.closeFirstTimers.get(trigger);\n      if (t) {\n        clearTimeout(t);\n        this.closeFirstTimers.delete(trigger);\n      }\n    }\n\n    isRTL() {\n      return document.documentElement.dir === 'rtl' || getComputedStyle(document.documentElement).direction === 'rtl';\n    }\n  \n    openHeaderMenu(event, item) {\n      if (event.target.closest('.menu__item-title--first-level.menu__item-title--header')) item.classList.add('open') \n      this.elements.headerDropdownChild.forEach(itemContainer => {\n        if (itemContainer.classList.contains('mega-menu') && itemContainer.classList.contains('mega-menu--wide') && itemContainer.closest('.header').offsetWidth > 1024) {\n          itemContainer.style.left = - item.getBoundingClientRect().left + itemContainer.closest('.header').getBoundingClientRect().left + 24 + 'px'\n          itemContainer.style.width = itemContainer.closest('.header').offsetWidth - 48 + 'px' \n        } else if (itemContainer.classList.contains('mega-menu') && itemContainer.classList.contains('mega-menu--wide') && itemContainer.closest('.header').offsetWidth <= 1024) {\n          requestAnimationFrame(() => this.alignDropdown());\n        } else if (!itemContainer.classList.contains('mega-menu') || itemContainer.classList.contains('mega-menu') && itemContainer.classList.contains('mega-menu--narrow')) {\n          requestAnimationFrame(() => this.alignDropdown());\n        }\n      })\n      if (item.classList.contains('menu__item-title--slide_out')) {\n        this.itemCoordinate = item.getBoundingClientRect()   \n        this.elements.dropdownChildList.forEach(el => el.style.top = +this.itemCoordinate.top + 'px')\n        this.elements.navContainer.forEach(item => {\n          this.containerCoordinate = item.getBoundingClientRect()\n          this.elements.dropdownChildList.forEach(element => element.style.top = -this.containerCoordinate.top + 'px')\n        })\n      }\n      if (item.classList.contains('open')) {\n        if (item.nextElementSibling) item.nextElementSibling.querySelectorAll('.menu__dropdown-child-item-link').forEach(link => link.setAttribute('tabindex', '0'))\n      } else {\n        if (item.nextElementSibling) item.nextElementSibling.querySelectorAll('.menu__dropdown-child-item-link').forEach(link => link.setAttribute('tabindex', '-1'))\n      }  \n    }\n  \n    openSlideOutMenu(item) {\n      if (!item.nextElementSibling) return\n      item.closest('.main-sidebar-section').style.zIndex = 21\n      item.nextElementSibling.style.insetInlineStart = item.closest('.menu__item').offsetWidth - 4 + 'px'\n      item.parentElement.querySelector('.menu-divider').style.insetInlineStart = item.closest('.main-sidebar').offsetWidth + 'px'     \n      this.itemCoordinate = item.getBoundingClientRect()\n      let topMainSidebar = this.closest('.main-sidebar').getBoundingClientRect().top\n      this.elements.sidebarDropdownChild.forEach(el => {\n        el.style.top = topMainSidebar + 'px'\n        el.style.setProperty('--top', `${topMainSidebar}px`);\n      })\n      this.elements.sidebarDivider.forEach(el => el.style.top = topMainSidebar + 'px')\n      if (!this._slideoutScrollHandler) {\n        this._slideoutScrollHandler = () => {\n          const topMainSidebar = this.closest('.main-sidebar').getBoundingClientRect().top;\n      \n          this.elements.sidebarDropdownChild.forEach(el => {\n            el.style.top = topMainSidebar + 'px';\n            el.style.setProperty('--top', `${topMainSidebar}px`);\n          });\n      \n          this.elements.sidebarDivider.forEach(el => el.style.top = topMainSidebar + 'px');\n        };\n      }\n      window.addEventListener('scroll', this._slideoutScrollHandler, { passive: true });\n      this._slideoutScrollHandler();\n      this.elements.dropdownChildList.forEach(el => el.style.top = +this.itemCoordinate.top - topMainSidebar + 'px')\n      let scrollBarWidth = window.innerWidth - document.body.clientWidth\n      this.dropdownWidth = item.closest('.main-sidebar').offsetWidth\n      item.nextElementSibling.style.width = this.dropdownWidth + scrollBarWidth + 'px'\n      item.classList.add('open')\n      if (item.classList.contains('open')) {\n        item.nextElementSibling.querySelectorAll('.menu__dropdown-child-item-link').forEach(link => link.setAttribute('tabindex', '0'))\n      } else {\n        panel.querySelectorAll('a').forEach(link => link.setAttribute('tabindex', '-1'))\n      }\n      if (!item.closest('.menu__item-title--collapsible')?.classList.contains('open')) {\n        let parentItem = item.closest('.menu__item')\n        parentItem.querySelector('.menu__item-title--second-level').classList.remove('open')\n        if(parentItem.querySelector('.menu__dropdown-grandchild-container')) parentItem.querySelector('.menu__dropdown-grandchild-container').style.maxHeight = ''\n      }\n      document.dispatchEvent(new CustomEvent('collapsible-menu:opened'));\n  }\n\n    handleScrollUpdate (second, divider) {\n      let topMainSidebar = this.closest('.main-sidebar').getBoundingClientRect().top;\n    \n      second.style.top = topMainSidebar + 'px';\n      second.style.setProperty('--top', `${topMainSidebar}px`);\n  \n      this.elements.sidebarOverlapDropdownChild.forEach(el => {\n        el.style.top = topMainSidebar + 'px';\n        el.style.setProperty('--top', `${topMainSidebar}px`);\n      });\n  \n      if (divider) divider.style.top = topMainSidebar + 'px';\n    }\n\n    openOverlapSlideOutMenu(item) {\n      if (this.isReopenBlocked && this.isReopenBlocked(item)) return; \n      const second = item.nextElementSibling;\n      if (!second) return;\n      setTimeout ( () => {\n        const mainSidebar = item.closest('.main-sidebar');\n        const section = item.closest('.main-sidebar-section');\n        if (mainSidebar) mainSidebar.classList.add('overlap-slide-out-menu-opened');\n        if (section) section.style.zIndex = 21;\n      \n        const cs = window.getComputedStyle(mainSidebar);\n        const padding = parseFloat(cs.getPropertyValue('padding-inline-start')) || 0;\n        const inset = (item.closest('.menu__item').offsetWidth) + 'px';\n        second.style.setProperty('--inset-inline-start', inset);\n      \n        const divider = item.parentElement.querySelector('.menu__dropdown-container + .menu-divider');\n        if (divider) divider.style.insetInlineStart = (item.closest('.menu__item').offsetWidth + padding + 2) + 'px';\n      \n        let topMainSidebar = this.closest('.main-sidebar').getBoundingClientRect().top;\n        this.elements.sidebarOverlapDropdownChild.forEach(el => {\n          el.style.top = topMainSidebar + 'px';\n          el.style.setProperty('--top', `${topMainSidebar}px`);\n        });\n        divider.style.top = topMainSidebar + 'px'\n\n        this.overlapScrollHandler = () => this.handleScrollUpdate(second, divider);\n        window.addEventListener('scroll', this.overlapScrollHandler, { passive: true });\n        this.overlapScrollHandler();\n      \n        const scrollBarWidth = window.innerWidth - document.body.clientWidth;\n        const dropdownWidth = mainSidebar.offsetWidth;\n        second.style.width = (dropdownWidth + scrollBarWidth) + 'px';\n        item.classList.add('open', 'opened');\n        if (!this.elements.mainSidebarList?.className.includes('is-open-first')) this.elements.mainSidebarList?.classList.add('is-open-first')\n        second.classList.remove('change-index');\n        const timer = setTimeout(() => second.classList.add('change-index'), this.OVER_Z_DELAY);\n        this.zTimers.set(second, timer);\n      \n        this.sizeSlideWidths(mainSidebar, second, null);\n        this.setTabindex(second, true);\n        if (this.overlapTrigger === 'hover') {\n          this.enableGlobalOutsideClose(item);\n        }\n      }, 50)\n    }\n\n    openOverlapSlideOutGrandchildMenu(item, opts = {}) {\n    const third = item.nextElementSibling;\n    if (!third) return;\n\n    const ms = item.closest('.main-sidebar');\n    const secondWrap = item.closest('.menu__dropdown-container');\n\n    if (!opts.seamless) this.closeOpenGrandchildInSameSecond(item, /* animated = */ true);\n\n    const scrollBarWidth = window.innerWidth - document.body.clientWidth;\n    const rawW = ms.offsetWidth;\n    const padLeft = parseFloat(getComputedStyle(secondWrap).getPropertyValue('padding-inline-start')) || 0;\n    const ddWidth = rawW - padLeft;\n    third.style.setProperty('--padding-left', `${padLeft}px`);\n    third.style.width = (ddWidth + scrollBarWidth) + 'px';\n\n    const rect = secondWrap.getBoundingClientRect();\n    const inlineStart = this.isRTL()\n      ? (window.innerWidth - rect.left - 1)\n      : (rect.right - 1);\n    third.style.setProperty('--inset-inline-start-third', `${inlineStart}px`);\n\n    const divider = item.parentElement.querySelector('.menu__dropdown-grandchild-container--overlap_slide_out + .menu-divider');\n    if (divider) divider.style.insetInlineStart = (inlineStart + 1) + 'px';\n\n    const doOpen = () => {\n      item.classList.add('open', 'opened');\n      third.classList.add('open', 'opened');\n      if (!this.elements.mainSidebarList?.className.includes('is-open-second')) this.elements.mainSidebarList?.classList.add('is-open-second')\n      third.classList.remove('change-index');\n      const timer = setTimeout(() => third.classList.add('change-index'), this.OVER_Z_DELAY);\n      this.zTimers.set(third, timer);\n      this.sizeSlideWidths(ms, secondWrap, third);\n      requestAnimationFrame(() => this.setTabindex(third, true));\n    };\n\n    if (opts.animated === false) {\n      this.withNoAnim(third, () => {\n        this.withNoAnim(item, () => {\n          doOpen();\n        });\n      });\n    } else {\n      doOpen();\n    }\n  }\n\n    closeFirst(first) {\n      setTimeout ( () => {\n        first.classList.add('closed');\n        first.classList.remove('open');\n        this.elements.mainSidebarList?.classList.remove('is-open-first')\n        setTimeout(() => {\n          first.classList.remove('opened', 'closed');\n        }, 200)\n        const second = first.nextElementSibling;\n        if (second) {\n          second.classList.remove('change-index');\n          if (first.classList.contains('menu__item-title--slide_out') || first.classList.contains('menu__item-title--simple_slide_out')) {\n            this.detachSlideoutScroll();\n          }\n        \n          const t = this.zTimers.get(second);\n          if (t) { clearTimeout(t); this.zTimers.delete(second); }\n      \n          second.querySelectorAll('.menu__item-title--overlap_slide_out_second.open, .menu__dropdown-grandchild-container.open')\n            .forEach(el => {\n              el.classList.add('closed');\n              el.classList.remove('open', 'change-index');\n              setTimeout(() => {\n                el.classList.remove('opened', 'closed');\n              }, 200)\n              const tt = this.zTimers.get(el);\n              if (tt) { clearTimeout(tt); this.zTimers.delete(el); }\n            });\n      \n          this.setTabindex(second, false);\n          if (this.overlapScrollHandler) {\n            window.removeEventListener('scroll', this.overlapScrollHandler);\n            this.overlapScrollHandler = null;\n          }\n        }\n        this.elements.mainSidebarList?.classList.remove('is-open-second')\n        if (this._outsideClickHandler) {\n          document.removeEventListener('click', this._outsideClickHandler, { capture: true });\n          this._outsideClickHandler = null;\n        }\n        const ms = first.closest('.main-sidebar');\n        if (ms) ms.classList.remove('overlap-slide-out-menu-opened');\n        const section = first.closest('.main-sidebar-section');\n        if (section) section.style.zIndex = 20;\n        this.disableGlobalOutsideClose();\n        const anyOpen = Array.from(this.elements.overlapFirstLevelLink).some(el => el.classList.contains('open'));\n        if (!anyOpen) {\n          if (this._outsideClickHandler) {\n            document.removeEventListener('click', this._outsideClickHandler, { capture: true });\n            this._outsideClickHandler = null;\n          }\n          if (this._outsideMainSidebarHandler) {\n            document.removeEventListener('click', this._outsideMainSidebarHandler, { capture: true });\n            this._outsideMainSidebarHandler = null;\n          }\n        }\n      }, 50)\n    }\n\n    closeDropdownMenu(dropdown) {\n      this.elements.headerDropdownChild.forEach(item => {\n        item.classList.remove('open');\n\n        if (item.classList.contains('mega-menu')) item.removeAttribute('style');\n      })\n\n      this.elements.firstLevelLinkHeader.forEach(item => item.classList.remove('open'));\n      this.closeSecondDropdown(dropdown);\n    }\n    \n    closeGrandchild(secondTrigger) {\n      setTimeout ( () => {\n        const third = secondTrigger?.nextElementSibling;\n        if (!third) return;\n        secondTrigger.classList.add('closed');\n        secondTrigger.classList.remove('open');\n        third.classList.add('closed');\n        third.classList.remove('open', 'change-index');\n        this.elements.mainSidebarList?.classList.remove('is-open-second')\n        setTimeout(() => {\n          secondTrigger.classList.remove('opened', 'closed');\n          third.classList.remove('opened', 'closed');\n        }, 200)\n        const t = this.zTimers.get(third);\n        if (t) { clearTimeout(t); this.zTimers.delete(third); }\n      \n        const section = secondTrigger.closest('.main-sidebar-section');\n        if (section) section.style.zIndex = 20;\n        this.setTabindex(third, false);\n      }, 50)\n    }\n\n    closeOpenGrandchildInSameSecond(ref, animated = true) {\n    const secondWrapper = ref.closest('.menu__dropdown-container');\n    if (!secondWrapper) return;\n\n    const toClose = [];\n    secondWrapper.querySelectorAll('.menu__dropdown-grandchild-container.open, .menu__dropdown-grandchild-container.opened').forEach(gc => {\n      const trigger = gc.previousElementSibling;\n      if (!trigger || trigger === ref) return;\n      toClose.push({ trigger, gc });\n    });\n\n    if (toClose.length === 0) return;\n\n    if (animated) {\n      toClose.forEach(({ trigger, gc }) => {\n        trigger.classList.add('closed');\n        trigger.classList.remove('open');\n        gc.classList.add('closed');\n        gc.classList.remove('open', 'change-index');\n        if (this.elements.mainSidebarList?.className.includes('is-open-second')) this.elements.mainSidebarList?.classList.remove('is-open-second')\n        setTimeout(() => {\n          trigger.classList.remove('opened', 'closed');\n          gc.classList.remove('opened', 'closed');\n        }, 200);\n        const tt = this.zTimers.get(gc);\n        if (tt) { clearTimeout(tt); this.zTimers.delete(gc); }\n        this.setTabindex(gc, false);\n      });\n      return;\n    }\n\n    toClose.forEach(({ trigger, gc }) => {\n      this.withNoAnim(trigger, () => {\n        this.withNoAnim(gc, () => {\n          trigger.classList.remove('open', 'opened', 'closed');\n          gc.classList.remove('open', 'opened', 'closed', 'change-index');\n          if (this.elements.mainSidebarList?.className.includes('is-open-second')) this.elements.mainSidebarList?.classList.remove('is-open-second')\n          const tt = this.zTimers.get(gc);\n          if (tt) { clearTimeout(tt); this.zTimers.delete(gc); }\n          this.setTabindex(gc, false);\n        });\n      });\n    });\n  }\n\n    blockReopen(first, ms = 300) {\n      if (this._reopenBlock.has(first)) {\n        clearTimeout(this._reopenBlock.get(first));\n      }\n      const tid = setTimeout(() => this._reopenBlock.delete(first), ms);\n      this._reopenBlock.set(first, tid);\n    }\n    \n    isReopenBlocked(first) {\n      return this._reopenBlock.has(first);\n    }\n\n    closeAllReally() {\n      this.querySelectorAll(\n        '.menu__dropdown-grandchild-container.open, .menu__dropdown-grandchild-container.opened'\n      ).forEach(third => {\n        const secondTrigger = third.previousElementSibling;\n        if (secondTrigger) this.closeGrandchild(secondTrigger);\n      });\n    \n      this.elements.overlapFirstLevelLink.forEach(first => {\n        const second = first.nextElementSibling;\n    \n        const hasOpenInside = !!(second && second.querySelector(\n          '.menu__item-title--overlap_slide_out_second.open,' +\n          '.menu__item-title--overlap_slide_out_second.opened,' +\n          '.menu__dropdown-grandchild-container.open,' +\n          '.menu__dropdown-grandchild-container.opened'\n        ));\n    \n        if (\n          first.classList.contains('open') ||\n          first.classList.contains('opened') ||\n          hasOpenInside\n        ) {\n          this.closeFirst(first);\n        }\n      });\n    }\n\n    sizeSlideWidths(mainSidebar, secondEl, thirdEl) {\n      if (!mainSidebar || !secondEl) return;\n    \n      const viewportW  = window.innerWidth;\n      const scrollbarW = window.innerWidth - document.body.clientWidth;\n      const firstW     = mainSidebar.offsetWidth;\n      const freeW      = Math.max(0, viewportW - firstW - scrollbarW);\n    \n      const limitBySidebar = Math.min(this.SLIDE_MAX_WIDTH || 400, firstW);\n      const MAX_SECOND = limitBySidebar;\n      const MAX_THIRD  = limitBySidebar;\n    \n      if (!thirdEl) {\n        const st        = window.getComputedStyle(secondEl);\n        const padInline = parseFloat(st.getPropertyValue('padding-inline-start')) || 0;\n        const targetContent = Math.min(MAX_SECOND, Math.floor(freeW / 2));\n        const secondW       = Math.max(0, targetContent + padInline);\n    \n        secondEl.style.maxWidth = (MAX_SECOND + padInline) + 'px';\n        secondEl.style.width    = secondW + 'px';\n        secondEl.dataset.lockedWidth = String(secondW);\n        return;\n      }\n    \n      const secondLocked =\n        parseFloat(secondEl.dataset.lockedWidth || '') ||\n        parseFloat(secondEl.style.width) ||\n        secondEl.getBoundingClientRect().width;\n    \n      const remain = Math.max(0, freeW - secondLocked);\n      const thirdW = Math.min(MAX_THIRD, remain);\n    \n      thirdEl.style.maxWidth = MAX_THIRD + 'px';\n      thirdEl.style.width    = thirdW + 'px';\n    }\n\n    setTabindex(container, on) {\n      if (!container) return;\n    \n      const focusables = container.querySelectorAll(\n        'a, button, input, select, textarea, [tabindex], .menu__dropdown-child-item-link, .menu__dropdown-grandchild-item-link'\n      );\n    \n      focusables.forEach(el => {\n        if (on) {\n          if (el.hasAttribute('data-prev-tabindex')) {\n            const prev = el.getAttribute('data-prev-tabindex');\n            if (prev === '' || prev === null) el.removeAttribute('tabindex');\n            else el.setAttribute('tabindex', prev);\n            el.removeAttribute('data-prev-tabindex');\n          } else {\n            if (!el.hasAttribute('tabindex')) el.setAttribute('tabindex', '0');\n          }\n          el.removeAttribute('aria-hidden');\n        } else {\n          if (!el.hasAttribute('data-prev-tabindex')) {\n            el.setAttribute('data-prev-tabindex', el.getAttribute('tabindex') ?? '');\n          }\n          el.setAttribute('tabindex', '-1');\n          el.setAttribute('aria-hidden', 'true');\n        }\n      });\n    }\n  \n    toggleCollapsibleMenu(item) {\n      item.closest('.menu__item-title--collapsible').classList.toggle('open')\n        if (item.classList.contains('dropdown-icon--plus')) {\n          item.setAttribute('tabindex', '-1')\n          item.nextElementSibling.setAttribute('tabindex', '0')\n        }\n        if (item.classList.contains('dropdown-icon--minus')) {\n          item.setAttribute('tabindex', '-1')\n          item.previousElementSibling.setAttribute('tabindex', '0')\n        }\n        let panel = item.closest('.menu__item-title--collapsible').nextElementSibling\n        panel.style.maxHeight ? panel.style.maxHeight = null : panel.style.maxHeight = panel.scrollHeight + \"px\"\n        if (item.closest('.menu__item-title--collapsible').classList.contains('open')) {\n          panel.querySelectorAll('a').forEach(link => link.setAttribute('tabindex', '0'))\n        } else {\n          panel.querySelectorAll('a').forEach(link => link.setAttribute('tabindex', '-1'))\n        }\n        if (!item.closest('.menu__item-title--collapsible').classList.contains('open')) {\n          let parentItem = item.closest('.menu__item')\n          parentItem.querySelector('.menu__item-title--second-level').classList.remove('open')\n          if(parentItem.querySelector('.menu__dropdown-grandchild-container')) parentItem.querySelector('.menu__dropdown-grandchild-container').style.maxHeight = ''\n        }\n        document.dispatchEvent(new CustomEvent('collapsible-menu:opened'));\n    }\n  \n    toggleSecondLevelMenu(item) {\n      item.parentElement.classList.toggle('open')\n      let childPanel = item.closest('.menu__item-title--second-level').nextElementSibling\n      childPanel.style.maxHeight ? childPanel.style.maxHeight = null : childPanel.style.maxHeight = childPanel.scrollHeight + \"px\"\n      if (item.closest('.menu__item-title--collapsible + .menu__dropdown-container')) {\n        let parent = item.closest('.menu__item-title--collapsible + .menu__dropdown-container')\n        let parentHeight = parent.offsetHeight\n        parent.style.maxHeight = parentHeight + childPanel.scrollHeight + \"px\"\n      }\n      let panel = item.closest('.menu__item-title--second-level').nextElementSibling\n        if (item.closest('.menu__item-title--second-level').classList.contains('open')) {\n          panel.querySelectorAll('a').forEach(link => link.setAttribute('tabindex', '0'))\n        } else {\n          panel.querySelectorAll('a').forEach(link => link.setAttribute('tabindex', '-1'))\n        }\n    }\n  \n    alignDropdown() {\n      const isRTL = document.documentElement.dir === 'rtl';\n  \n      this.elements.headerDropdownChild.forEach(item => {\n        this.itemCoordinate = item.getBoundingClientRect();\n        this.viewportHeight = window.innerHeight\n        this.viewportWidth = window.innerWidth\n        this.header = item.closest('.header') \n        const elementOverflowsViewport = isRTL ? item.closest('.menu__item').getBoundingClientRect().left - item.offsetWidth < 0 : item.closest('.menu__item').getBoundingClientRect().left + item.offsetWidth + this.sidebarWidth > this.viewportWidth;\n        \n        if (elementOverflowsViewport) {\n          item.style.left = isRTL \n            ?  0 - item.closest('.menu__item').getBoundingClientRect().left + 16 + 'px'\n            : this.viewportWidth - (item.closest('.menu__item').getBoundingClientRect().left + item.offsetWidth) - 16 - this.sidebarWidth + 'px'\n        }\n        if (this.itemCoordinate.offsetHeight > this.viewportHeight) item.style.top = - this.itemCoordinate.height + 'px'\n      })\n    }\n    closeParentContainers(link) {\n      if (link.closest('.menu-drawer')) {\n        link.closest('.menu-drawer').setAttribute('hidden', 'true')\n        link.closest('.menu-drawer').classList.remove('open')\n        document.body.classList.remove('hidden')\n        document.dispatchEvent(new CustomEvent('body:visible'));\n      }\n      if (link.closest('.menu__list--header')) link.closest('.menu__item-title--header').classList.remove('open')\n      if (link.closest('.menu__list--main-sidebar')) link.closest('.menu__item-title--slide_out').classList.remove('open')\n    }\n  \n    closeSecondDropdown(parent) {\n      let children = parent.querySelectorAll('.menu__dropdown-child-item')\n      children.forEach(item => {\n        item.querySelector('.menu__item-title--second-level').classList.remove('open')\n        if (item.querySelector('.menu__dropdown-grandchild-container')) item.querySelector('.menu__dropdown-grandchild-container').style.maxHeight = ''\n      })\n    }\n  }\ncustomElements.define('menu-dropdown', MenuDropdown);\n\nclass HoverMegaMenu extends HTMLElement {\n  constructor() {\n    super();\n\n    this._onMouseEnter = (e) => {\n      this.openGrandchildMenu(e.currentTarget);\n    };\n\n    this._onFocus = (e) => {\n      this.openGrandchildMenu(e.currentTarget);\n    };\n\n    this._onKeyDownParentItem = (e) => {\n      if (e.key === 'ArrowRight') {\n        e.preventDefault();\n\n        this.focusFirstGrandchild(e.currentTarget)\n      }\n    };\n\n    this._onKeyDownGrandchildMenu = (e) => {\n      if (e.key === 'ArrowLeft') {\n        e.preventDefault();\n\n        this.focusParentMenuItem(e.currentTarget)\n      }\n    };\n  }\n\n  connectedCallback() {\n    this.hoverMenuItems = this.querySelectorAll(`.menu__dropdown-child-item-link`);\n    this.grandchildrenMenus = this.querySelectorAll(`.menu__dropdown-grandchild-container--hover`);\n    this.megaMenuOpener = this.closest('.menu__item').querySelector('.menu__item-title--header');\n    this.banners = this.querySelectorAll(`.hover-mega-menu__item-banners`);\n\n    this.hoverMenuItems.forEach(menu => {\n      menu.addEventListener('mouseenter', this._onMouseEnter);\n      menu.addEventListener('focus', this._onFocus);\n      menu.addEventListener('keydown', this._onKeyDownParentItem);\n    });\n\n    this.grandchildrenMenus.forEach(menu => {\n      menu.addEventListener('keydown', this._onKeyDownGrandchildMenu);\n    });\n\n    this._observer = new MutationObserver(() => {\n      if (!this.megaMenuOpener.classList.contains('open')) {\n        this.closeAllGrandchildMenus();\n      }\n    });\n\n    this._observer.observe(this.megaMenuOpener, {\n      attributes: true,\n      attributeFilter: ['class']\n    });\n  }\n\n  disconnectedCallback() {\n    this.hoverMenuItems.forEach(menu => {\n      menu.removeEventListener('mouseenter', this._onMouseEnter);\n      menu.removeEventListener('focus', this._onFocus);\n      menu.removeEventListener('keydown', this._onKeyDownParentItem);\n    });\n\n    this.grandchildrenMenus.forEach(menu => {\n      menu.removeEventListener('keydown', this._onKeyDownGrandchildMenu);\n    });\n\n    this._observer.disconnect();\n  }\n\n  getGrandchildMenu(hoverMenuItem) {\n    return Array\n      .from(this.grandchildrenMenus)\n      .find(m => m.dataset.handle === hoverMenuItem.dataset.handle);\n  }\n\n  focusFirstGrandchild(hoverMenuItem) {\n    const grandchildMenu = this.getGrandchildMenu(hoverMenuItem);\n\n    const firstFocusable = grandchildMenu.querySelector(\n      'a, button, [tabindex]:not([tabindex=\"-1\"])'\n    );\n\n    if (firstFocusable) {\n      firstFocusable.focus();\n    }\n  }\n\n  focusParentMenuItem(grandchildMenuItem) {\n    const parentHandle = grandchildMenuItem.dataset.handle;\n    const parentItem = Array.from(this.hoverMenuItems)\n      .find(i => i.dataset.handle === parentHandle);\n\n    parentItem?.focus();\n  }\n\n  openGrandchildMenu(hoverMenuItem) {\n    this.closeAllGrandchildMenus();\n\n    const grandchildMenu = this.getGrandchildMenu(hoverMenuItem);\n    const banners = Array.from(this.banners);\n\n    let grandchildMenuBanner =\n      banners.findLast(b =>\n        b.dataset.hoverMenuItemHandle === hoverMenuItem.dataset.handle &&\n        b.dataset.parentMenuHandle === this.megaMenuOpener.dataset.handle\n      );\n\n    if (!grandchildMenuBanner) {\n      grandchildMenuBanner =\n        banners.findLast(b =>\n          b.dataset.hoverMenuItemHandle === hoverMenuItem.dataset.handle &&\n          b.dataset.parentMenuHandle === ''\n        );\n    }\n\n    grandchildMenu?.classList.add('active');\n    grandchildMenuBanner?.classList.add('active');\n\n    const underlineSpan = hoverMenuItem.querySelector('.link-animation--underline span');\n    underlineSpan?.classList.add('underline-complete');\n  }\n\n  closeAllGrandchildMenus() {\n    this.grandchildrenMenus.forEach(menu => menu.classList.remove('active'));\n    this.banners.forEach(banner => banner.classList.remove('active'));\n\n    this.hoverMenuItems.forEach(item => {\n      const span = item.querySelector('.link-animation--underline span');\n      if (span) {\n        span.classList.remove('underline-complete');\n      }\n    });\n  }\n}\n\ncustomElements.define('hover-mega-menu', HoverMegaMenu);\n\nclass StoreSelectorDrawer extends HTMLElement {\n  constructor() {\n    super();\n\n    this._mounted = false;\n\n    this.originalParent = null;\n    this.originalNextSibling = null;\n\n    this.drawer = null;\n    this.overlay = null;\n\n    this.storeCheckboxes = [];\n    this.changeStoreButton = null;\n    this.currentStore = null;\n\n    this._onKeyUp = (evt) => evt.code === 'Escape' && this.close();\n    this._onOverlayClick = () => this.close();\n\n    this._onDocClick = this._onDocClick.bind(this);\n    this._onDocKeyDown = this._onDocKeyDown.bind(this);\n\n    this._onSectionLoad = this._onSectionLoad.bind(this);\n    this._onSectionUnload = this._onSectionUnload.bind(this);\n\n    this._onSectionSelect = this._onSectionSelect.bind(this);\n    this._onSectionDeselect = this.close.bind(this);\n\n    this._onCheckboxChange = this._onCheckboxChange.bind(this);\n    this._onChangeStoreClick = this._onChangeStoreClick.bind(this);\n    this._onCloseEvent = this._onCloseEvent.bind(this);\n\n    this.activeElement = null;\n  }\n\n  connectedCallback() {\n    if (this._mounted) return;\n    this._mounted = true;\n\n    this.originalParent = this.parentElement;\n    this.originalNextSibling = this.nextElementSibling;\n\n    this.drawer = document.querySelector('.store-selector-drawer__inner');\n    this.overlay = document.querySelector('body > .overlay');\n    this.mainSidebar = document.querySelector('.main-sidebar')?.closest('.shopify-section')\n\n    document.addEventListener('click', this._onDocClick, { passive: false });\n    document.addEventListener('keydown', this._onDocKeyDown);\n    this.addEventListener('keyup', this._onKeyUp);\n    if (this.overlay) this.overlay.addEventListener('click', this._onOverlayClick);\n    document.addEventListener('shopify:section:load', this._onSectionLoad);\n    document.addEventListener('shopify:section:unload', this._onSectionUnload);\n    const drawerSection = document.querySelector('.store-selector-drawer');\n    if (drawerSection) {\n      drawerSection.addEventListener('shopify:section:select', this._onSectionSelect);\n      drawerSection.addEventListener('shopify:section:deselect', this._onSectionDeselect);\n    }\n    document.addEventListener('store-selector-drawer:close', this._onCloseEvent);\n    this._refreshControls();\n  }\n\n  disconnectedCallback() {\n    this._mounted = false;\n\n    document.removeEventListener('click', this._onDocClick);\n    document.removeEventListener('keydown', this._onDocKeyDown);\n    document.removeEventListener('shopify:section:load', this._onSectionLoad);\n    document.removeEventListener('shopify:section:unload', this._onSectionUnload);\n    document.removeEventListener('store-selector-drawer:close', this._onCloseEvent);\n\n    this.removeEventListener('keyup', this._onKeyUp);\n\n    if (this.overlay) this.overlay.removeEventListener('click', this._onOverlayClick);\n\n    const drawerSection = document.querySelector('.store-selector-drawer');\n    if (drawerSection) {\n      drawerSection.removeEventListener('shopify:section:select', this._onSectionSelect);\n      drawerSection.removeEventListener('shopify:section:deselect', this._onSectionDeselect);\n    }\n\n    this._unbindControlListeners();\n  }\n\n  _onDocClick(event) {\n    const opener = event.target.closest('.store-selector-drawer-opener');\n    if (!opener) return;\n\n    event.preventDefault();\n    this.open(opener);\n  }\n\n  _onDocKeyDown(event) {\n    if (event.code.toUpperCase() !== 'ENTER') return;\n\n    const opener = event.target.closest('.store-selector-drawer-opener');\n    if (!opener) return;\n\n    event.preventDefault();\n    this.open(opener);\n  }\n\n  _onSectionLoad() {\n    this._refreshControls();\n  }\n\n  async _onSectionUnload(event) {\n    if (event.target.closest('.store-selector-drawer')) {\n      await this.resetSavedStore();\n    }\n  }\n\n  _onSectionSelect() {\n    const opener = document.querySelector('.store-selector-drawer-opener');\n    this.open(opener);\n  }\n\n  _onCloseEvent(e) {\n    if (e.detail?.targetTag === 'store-selector-drawer') {\n      this.restoreCheckedState();\n    }\n  }\n\n  _refreshControls() {\n    this._unbindControlListeners();\n\n    this.storeCheckboxes = Array.from(document.querySelectorAll('.store-selector-drawer .store-accordion__checkbox'));\n    this.changeStoreButton = document.querySelector('.store-selector-drawer .change-store-button');\n\n    this.currentStore = this.storeCheckboxes.find(cb => cb.checked)?.value || null;\n\n    if (!this.currentStore) {\n      this.resetSavedStore();\n    }\n\n    this.toggleChangeButtonState();\n    this._bindControlListeners();\n  }\n\n  _bindControlListeners() {\n    this.storeCheckboxes.forEach(cb => cb.addEventListener('change', this._onCheckboxChange));\n    this.changeStoreButton?.addEventListener('click', this._onChangeStoreClick);\n  }\n\n  _unbindControlListeners() {\n    if (this.storeCheckboxes?.length) {\n      this.storeCheckboxes.forEach(cb => cb.removeEventListener('change', this._onCheckboxChange));\n    }\n    this.changeStoreButton?.removeEventListener('click', this._onChangeStoreClick);\n  }\n\n  _onCheckboxChange(e) {\n    const changedCheckbox = e.currentTarget;\n    this.handleCheckboxChange(changedCheckbox);\n  }\n\n  _onChangeStoreClick() {\n    this.handleChangeStore();\n  }\n\n  async resetSavedStore() {\n    try {\n      await this.updateCartAttribute(\"store\", '');\n\n      document.querySelectorAll('.store-selector__text').forEach(el => {\n        el.innerHTML = el.dataset.placeholder;\n      });\n\n      document.querySelectorAll('.pickup-availability').forEach(el => {\n        el.classList.remove('pickup-availability--available');\n        el.classList.add('pickup-availability--unavailable');\n        const text = el.querySelector('.pickup-availability__text');\n        if (text) text.innerHTML = text.dataset.placeholder;\n      });\n    } catch (error) {\n      console.error(\"Error updating store cart attribute:\", error);\n    }\n  }\n\n  toggleChangeButtonState() {\n    if (!this.changeStoreButton) return;\n    const hasChecked = this.storeCheckboxes.some(cb => cb.checked);\n    this.changeStoreButton.disabled = !hasChecked;\n  }\n\n  handleCheckboxChange(changedCheckbox) {\n    if (!changedCheckbox) return;\n\n    if (changedCheckbox.checked) {\n      this.storeCheckboxes.forEach((cb) => {\n        if (cb !== changedCheckbox) {\n          cb.checked = false;\n          cb.removeAttribute('checked');\n        }\n      });\n      changedCheckbox.setAttribute('checked', 'checked');\n      if (this.changeStoreButton) this.changeStoreButton.disabled = false;\n    } else {\n      changedCheckbox.checked = true;\n      changedCheckbox.setAttribute('checked', 'checked');\n    }\n  }\n\n  async handleChangeStore() {\n    const selected = this.storeCheckboxes.find(cb => cb.checked);\n    if (!selected) return;\n\n    const storeName = selected.value;\n    if (storeName === this.currentStore) {\n      this.close();\n      return;\n    }\n\n    try {\n      const loader = this.changeStoreButton?.querySelector('.change-store-button__loader');\n      loader?.classList.remove('hidden');\n\n      await this.updateCartAttribute(\"store\", storeName);\n      window.location.reload();\n    } catch (error) {\n      console.error(\"Error updating store cart attribute:\", error);\n    } finally {\n      const loader = this.changeStoreButton?.querySelector('.change-store-button__loader');\n      loader?.classList.add('hidden');\n    }\n  }\n\n  restoreCheckedState() {\n    this.storeCheckboxes.forEach((cb) => {\n      const isMatch = cb.value === this.currentStore;\n      cb.checked = isMatch;\n      cb.toggleAttribute('checked', isMatch);\n    });\n    this.toggleChangeButtonState();\n  }\n\n  updateCartAttribute(attribute, value) {\n    return fetch(\"/cart/update.js\", {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify({ attributes: { [attribute]: value } }),\n    });\n  }\n\n  open(triggeredBy) {\n    if (!triggeredBy) return;\n\n    const menuDrawer = triggeredBy.closest('.menu-drawer');\n    if (menuDrawer) this.closeMenuDrawer(menuDrawer);\n\n    const existing = Array.from(document.body.querySelectorAll('store-selector-drawer')).find(el => el !== this);\n    if (existing) {\n      existing.classList.remove('active', 'animate');\n      if (this.mainSidebar && this.mainSidebar.classList.contains('store-selector-drawer-active')) this.mainSidebar.classList.remove('store-selector-drawer-active')\n      existing.remove();\n    }\n\n    document.body.appendChild(this);\n    this.setActiveElement(triggeredBy);\n\n    if (this.overlay && !this.overlay.classList.contains('open')) this.overlay.classList.add('open');\n    requestAnimationFrame(() => {\n      this.classList.add('animate', 'active')\n      if (this.mainSidebar && !this.mainSidebar.classList.contains('store-selector-drawer-active')) this.mainSidebar.classList.add('store-selector-drawer-active')\n    });\n\n    document.body.classList.add('hidden');\n\n    if (this.drawer) {\n      this.drawer.setAttribute('tabindex', '0');\n      setTimeout(() => trapFocus(triggeredBy, this.drawer.querySelector('a')), 10);\n    }\n  }\n\n  closeMenuDrawer(menuDrawer) {\n    menuDrawer.setAttribute('hidden', 'true');\n    menuDrawer.classList.remove('open');\n    document.querySelectorAll('.burger-menu').forEach(item => item.blur());\n  }\n\n  close() {\n    if (this.overlay) this.overlay.classList.remove('open');\n    this.classList.remove('active');\n    if (this.mainSidebar && this.mainSidebar.classList.contains('store-selector-drawer-active')) this.mainSidebar.classList.remove('store-selector-drawer-active')\n\n    if (this.activeElement) removeTrapFocus(this.activeElement);\n\n    document.body.classList.remove('hidden');\n\n    document.dispatchEvent(new CustomEvent('body:visible', {\n      detail: { targetTag: 'store-selector-drawer' }\n    }));\n\n    if (this.drawer) this.drawer.setAttribute('tabindex', '-1');\n\n    if (this.originalParent) {\n      if (this.originalNextSibling) this.originalParent.insertBefore(this, this.originalNextSibling);\n      else this.originalParent.appendChild(this);\n    }\n  }\n\n  setActiveElement(el) {\n    this.activeElement = el;\n  }\n}\n\ncustomElements.define('store-selector-drawer', StoreSelectorDrawer);\n\nclass NewsDrawer extends HTMLElement {\n  constructor() {\n    super();\n\n    this._mounted = false;\n\n    this.drawer = null;\n    this.overlay = null;\n\n    this.sectionEl = null;\n    this.sectionOriginalParent = null;\n    this.sectionOriginalNextSibling = null;\n\n    this.storageKey = 'newsDrawerSeenVersion';\n    this.currentVersion = '';\n\n    this.activeElement = null;\n\n    this._onKeyUp = (evt) => evt.code === 'Escape' && this.close();\n    this._onOverlayClick = () => this.close();\n\n    this._onDocClick = this._onDocClick.bind(this);\n    this._onDocKeyDown = this._onDocKeyDown.bind(this);\n\n    this._onSectionLoad = this._onSectionLoad.bind(this);\n    this._onSectionSelect = this._onSectionSelect.bind(this);\n    this._onSectionDeselect = this.close.bind(this);\n  }\n\n  connectedCallback() {\n    if (this._mounted) return;\n    this._mounted = true;\n\n    this.sectionEl = this.closest('.shopify-section') || this;\n    this.sectionOriginalParent = this.sectionEl.parentElement;\n    this.sectionOriginalNextSibling = this.sectionEl.nextElementSibling;\n\n    this.drawer = this.querySelector('.news-drawer__inner');\n    this.overlay = document.querySelector('body > .overlay');\n\n    this.currentVersion = (this.dataset.newsVersion || '').trim();\n\n    this._cleanupOtherNewsDrawers();\n\n    document.addEventListener('click', this._onDocClick, { passive: false });\n    document.addEventListener('keydown', this._onDocKeyDown);\n\n    this.addEventListener('keyup', this._onKeyUp);\n    this.overlay?.addEventListener('click', this._onOverlayClick);\n\n    document.addEventListener('shopify:section:load', this._onSectionLoad);\n\n    this.sectionEl?.addEventListener('shopify:section:select', this._onSectionSelect);\n    this.sectionEl?.addEventListener('shopify:section:deselect', this._onSectionDeselect);\n\n    this.updateUnreadIndicator();\n  }\n\n  disconnectedCallback() {\n    this._mounted = false;\n\n    document.removeEventListener('click', this._onDocClick);\n    document.removeEventListener('keydown', this._onDocKeyDown);\n\n    document.removeEventListener('shopify:section:load', this._onSectionLoad);\n\n    this.removeEventListener('keyup', this._onKeyUp);\n    this.overlay?.removeEventListener('click', this._onOverlayClick);\n\n    this.sectionEl?.removeEventListener('shopify:section:select', this._onSectionSelect);\n    this.sectionEl?.removeEventListener('shopify:section:deselect', this._onSectionDeselect);\n  }\n\n  _onDocClick(event) {\n    const opener = event.target.closest('.news-drawer-opener');\n    if (!opener) return;\n\n    event.preventDefault();\n    this.open(opener);\n  }\n\n  _onDocKeyDown(event) {\n    if (event.code.toUpperCase() !== 'ENTER') return;\n\n    const opener = event.target.closest('.news-drawer-opener');\n    if (!opener) return;\n\n    event.preventDefault();\n    this.open(opener);\n  }\n\n  _onSectionLoad(evt) {\n    const sectionId = evt?.detail?.sectionId;\n    if (!sectionId) return;\n\n    const loaded = document.querySelector(`#shopify-section-${sectionId}`);\n    if (!loaded || !loaded.contains(this)) return;\n\n    this.sectionEl = this.closest('.shopify-section') || this;\n    this.sectionOriginalParent = this.sectionEl.parentElement;\n    this.sectionOriginalNextSibling = this.sectionEl.nextElementSibling;\n\n    this.drawer = this.querySelector('.news-drawer__inner');\n    this.overlay = document.querySelector('body > .overlay');\n    this.currentVersion = (this.dataset.newsVersion || '').trim();\n\n    this.overlay?.removeEventListener('click', this._onOverlayClick);\n    this.overlay?.addEventListener('click', this._onOverlayClick);\n\n    this.updateUnreadIndicator();\n\n    if (Shopify.designMode) document.body.classList.add('disable-scroll-body');\n\n    this.open(this);\n  }\n\n  _onSectionSelect() {\n    if (Shopify.designMode) document.body.classList.add('disable-scroll-body');\n    this.open(this);\n  }\n\n  updateUnreadIndicator() {\n    try {\n      const seen = localStorage.getItem(this.storageKey) || '';\n      const hasUnread = !!this.currentVersion && this.currentVersion !== seen;\n\n      document.querySelectorAll('.news-drawer-opener').forEach((btn) => {\n        btn.classList.toggle('has-unread', hasUnread);\n      });\n    } catch (e) {}\n  }\n\n  markAsSeen() {\n    try {\n      if (this.currentVersion) localStorage.setItem(this.storageKey, this.currentVersion);\n    } catch (e) {}\n    this.updateUnreadIndicator();\n  }\n\n  open(triggeredBy) {\n    const existing = Array.from(document.body.querySelectorAll('.shopify-section'))\n      .find(sec => sec !== this.sectionEl && sec.contains(sec.querySelector('news-drawer')));\n\n    if (existing) {\n      const otherDrawer = existing.querySelector('news-drawer');\n      if (otherDrawer?.close) {\n        try { otherDrawer.close(); } catch(e) {}\n      }\n    }\n\n    document.body.appendChild(this.sectionEl);\n    if (triggeredBy) this.setActiveElement(triggeredBy);\n\n    if (this.overlay && !this.overlay.classList.contains('open')) {\n      this.overlay.classList.add('open');\n    }\n\n    requestAnimationFrame(() => {\n      this.classList.add('animate', 'active');\n    });\n\n    document.body.classList.add('hidden');\n\n    if (this.drawer) {\n      this.drawer.setAttribute('tabindex', '0');\n      const closeButton = this.querySelector('.drawer__close');\n      if (triggeredBy) setTimeout(() => trapFocus(triggeredBy, closeButton || this.drawer), 10);\n    }\n\n    this.markAsSeen();\n  }\n\n  close() {\n    if (Shopify.designMode) document.body.classList.remove('disable-scroll-body');\n\n    this.overlay?.classList.remove('open');\n\n    this.classList.remove('active');\n    document.body.classList.remove('hidden');\n\n    document.dispatchEvent(new CustomEvent('body:visible', {\n      detail: { targetTag: 'news-drawer' }\n    }));\n\n    this.drawer?.setAttribute('tabindex', '-1');\n\n    if (this.sectionOriginalParent) {\n      if (this.sectionOriginalNextSibling) {\n        this.sectionOriginalParent.insertBefore(this.sectionEl, this.sectionOriginalNextSibling);\n      } else {\n        this.sectionOriginalParent.appendChild(this.sectionEl);\n      }\n    }\n  }\n\n  setActiveElement(element) {\n    this.activeElement = element;\n  }\n\n  _cleanupOtherNewsDrawers() {\n    const all = document.querySelectorAll('news-drawer');\n    all.forEach((el) => {\n      if (el !== this) {\n        el.classList?.remove('active', 'animate');\n        const sec = el.closest('.shopify-section');\n        if (sec) sec.remove();\n        else el.remove();\n      }\n    });\n  }\n}\ncustomElements.define('news-drawer', NewsDrawer);\n\nclass FormState extends HTMLElement {\n  constructor() {\n    super();\n\n    this.formInputs = this.querySelectorAll('input.required, select[required]');\n    this.form = this.querySelector('form');\n    if (this.form) this.buttonSubmit = this.form.querySelector('button[type=\"submit\"]') || this.form.querySelector('.button--submit');\n\n    this.formInputs.forEach((input) => {\n      input.addEventListener('input', this.onInputChange.bind(this));\n    });\n    if (this.buttonSubmit) this.buttonSubmit.addEventListener('click', (event) => {\n      this.onSubmitHandler(event);\n    })\n  }\n\n  onInputChange(event) {\n    if(event.target.closest('.invalid')) event.target.classList.remove('invalid');\n    event.target.classList.add('valid');\n  }\n\n  onSubmitHandler() {\n    this.formInputs.forEach((input) => {\n      if(input.hasAttribute('type') && input.getAttribute('type') == 'password' || input.hasAttribute('type') && input.getAttribute('type') == 'text') {\n        input.value.length == 0 ? this.invalidInput(input) : this.validInput(input)\n      }\n      if(input.hasAttribute('type') && input.getAttribute('type') == 'email') {\n        input.value.includes('@') ? this.validInput(input) : this.invalidInput(input)\n      }\n      if(!input.hasAttribute('type')) {\n        input.value === input.dataset.empty ? this.invalidInput(input) : this.validInput(input)\n      }\n    });\n    if(!this.closest('.section-newsletter')) {\n      document.dispatchEvent(new CustomEvent('form:submitted', {\n        detail: {\n          formID: this.querySelector('form').getAttribute('id')\n        }\n      }))\n    }\n  }\n\n  invalidInput(input) {\n    if(input.closest('.valid')) input.classList.remove('valid');\n    input.classList.add('invalid');\n  }\n\n  validInput(input) {\n    if(input.closest('.invalid')) input.classList.remove('invalid');\n    input.classList.add('valid');\n  }\n}\ncustomElements.define('form-state', FormState);  \n\nclass QuantityInput extends HTMLElement {\n  constructor() {\n    super();\n    this.input = this.querySelector('input');\n    if (!this.input) return;\n\n    this.changeEvent = new Event('change', { bubbles: true });\n\n    this.addEventListener('click', (event) => {\n      const btn = event.target.closest('button');\n      if (!btn) return;\n\n      const name = btn.name;\n      if (name !== 'plus' && name !== 'minus') return;\n\n      event.preventDefault();\n\n      const prev = this.input.value;\n      name === 'plus' ? this.input.stepUp() : this.input.stepDown();\n\n      if (prev !== this.input.value) {\n        this.input.dispatchEvent(this.changeEvent);\n      }\n    });\n  }\n}\ncustomElements.define('quantity-input', QuantityInput);\n\nclass ModalDialog extends HTMLElement {\n  constructor() {\n    super();\n\n    this.elements = {\n      body: document.querySelector('body'),\n      buttons: this.querySelectorAll('.open-popup'),\n      overlay: document.querySelector('body > .overlay'),\n      buttonsClose: this.querySelectorAll('.close-popup'),\n      filterGroups: this.querySelectorAll('.filter-group')\n    };\n\n    this.originalPopupState = new WeakMap();\n    this.popup = null;\n\n    this.elements.buttons.forEach(button => {\n      const popup = button.parentNode.querySelector('.popup-wrapper');\n      if (popup) {\n        button.dataset.popupId = this.generatePopupId();\n        popup.dataset.popupId = button.dataset.popupId;\n\n        this.originalPopupState.set(popup, {\n          parent: popup.parentNode,\n          nextSibling: popup.nextSibling\n        });\n      }\n\n      button.addEventListener('click', (event) => this.openContainer(event));\n      button.addEventListener('keydown', (event) => {\n        if (event.code.toUpperCase() === 'ENTER') this.openContainer(event);\n      });\n    });\n\n    if (this.elements.overlay) {\n      this.elements.overlay.addEventListener('click', this.closeContainer.bind(this));\n    }\n\n    if (this.elements.buttonsClose) {\n      this.elements.buttonsClose.forEach(buttonClose =>\n        buttonClose.addEventListener('click', this.closeContainer.bind(this))\n      );\n    }\n\n    document.addEventListener('keyup', (event) => {\n      if (event.code && event.code.toUpperCase() === 'ESCAPE' && document.body.querySelector('.popup-wrapper.open')) {\n        this.closeContainer(event);\n      }\n    });\n\n    if (this.closest('.only-mobile.snippet-facets')) {\n      window.addEventListener('resize', () => {\n        if (window.innerWidth > 768 && this.popup && this.popup.classList.contains('open')) {\n          this.closeContainer({ target: this.querySelector('.close-popup') });\n        }\n      });\n    }\n  }\n\n  generatePopupId() {\n    return 'popup-' + Math.random().toString(36).substr(2, 9);\n  }\n\n  openContainer(event) {\n    const trigger = event.target.closest('.open-popup');\n    if (!trigger) return;\n\n    const popupId = trigger.dataset.popupId;\n    const popup = document.querySelector(`.popup-wrapper[data-popup-id=\"${popupId}\"]`);\n    if (!popup) return;\n\n    this.popup = popup;\n\n    document.body.appendChild(this.popup);\n    this.popup.classList.add('open');\n    this.elements.overlay.classList.add('open');\n\n    if (this.closest('.container--sticky')) this.closest('.container--sticky').style.position = 'static';\n    if (this.popup.closest('.hover-content')) this.popup.closest('.banner__content')?.style.setProperty('opacity', 1, 'important');\n    if (this.popup.closest('.slider__grid')) this.popup.closest('.slider__grid').style.overflow = 'visible';\n\n    const inputPassword = this.popup.querySelector('input.enter-using-password');\n    if (inputPassword) inputPassword.focus();\n\n    if (!this.elements.body.classList.contains('hidden')) {\n      this.elements.body.classList.add('hidden');\n    }\n\n    document.dispatchEvent(new CustomEvent('dialog:after-show'));\n  }\n\n  closeContainer(event) {\n    const eventTarget = event?.target || event;\n\n    if (eventTarget.closest?.('a.media-with-text__card')) event.preventDefault();\n    if (eventTarget.closest?.('.card-quick-view')) {\n      event.preventDefault();\n      eventTarget.closest('.card-quick-view').classList.remove('no-hover');\n    }\n\n    this.popup = document.body.querySelector('.popup-wrapper.open');\n    if (!this.popup) return;\n\n    this.popup.classList.remove('open');\n    this.elements.overlay.classList.remove('open');\n\n    const original = this.originalPopupState.get(this.popup);\n    if (original) {\n      original.parent.insertBefore(this.popup, original.nextSibling);\n    }\n\n    if (this.closest('.container--sticky')) this.closest('.container--sticky').style.position = 'sticky';\n    if (this.popup.closest('.hover-content')) this.popup.closest('.banner__content')?.style.removeProperty('opacity');\n    if (this.popup.closest('.slider__grid')) {\n      this.popup.closest('.slider__grid').style.overflowX = 'auto';\n      this.popup.closest('.slider__grid').style.overflowY = 'hidden';\n    }\n\n    if (this.elements.body.classList.contains('hidden')) {\n      this.elements.body.classList.remove('hidden');\n      document.dispatchEvent(new CustomEvent('body:visible'));\n    }\n\n    this.elements.filterGroups.forEach(item => {\n      if (item.hasAttribute('open')) item.setAttribute('open', '');\n    });\n\n    document.dispatchEvent(new CustomEvent('dialog:after-hide'));\n  }\n}\n\ncustomElements.define('modal-dialog', ModalDialog);\n\nclass ModalWindow extends HTMLElement {\n  constructor() {\n    super();\n\n    this.originalContentParent = null;\n    this.contentPlaceholder = document.createComment('modal-content-placeholder');\n    this.cookieName = 'avante-theme:form-submitted';\n    this.popupContent = null;\n    this.openedBy = null;\n    this.input = null;\n\n    this.handleCloseClick = this.handleCloseClick.bind(this);\n    this.handleOverlayClick = this.handleOverlayClick.bind(this);\n    this.handleKeyUp = this.handleKeyUp.bind(this);\n\n    document.addEventListener('click', this.handleCloseClick);\n\n    document.querySelector('body > .overlay')?.addEventListener('click', this.handleOverlayClick);\n\n    document.addEventListener('form:submitted', (event) => {\n      this.detectSubmittedForm(event.detail?.formID);\n    });\n  }\n\n  isElement(value) {\n    return value instanceof Element;\n  }\n\n  isOpenedFromProductOpener(opener) {\n    return this.isElement(opener) && !!opener.closest('.product__modal-opener');\n  }\n\n  handleCloseClick(event) {\n    const closeBtn =\n      event.target.closest('.product-popup-modal__content [id^=\"ModalClose-\"]') ||\n      event.target.closest('.product-media-modal__dialog [id^=\"ModalClose-\"]');\n\n    if (!closeBtn) return;\n\n    this.hide();\n\n    const modal = closeBtn.closest('.product-media-modal, .product-popup-modal');\n\n    requestAnimationFrame(() => {\n      const sliderComponent = modal?.querySelector('slider-component');\n      if (!sliderComponent) return;\n\n      sliderComponent.dispatchEvent(\n        new CustomEvent('product-modal:close', {\n          detail: { modal },\n          bubbles: false\n        })\n      );\n    });\n  }\n\n  handleOverlayClick() {\n    this.hide();\n  }\n\n  handleKeyUp(event) {\n    if (event.code?.toUpperCase() === 'ESCAPE') {\n      this.hide();\n    }\n  }\n\n  show(opener) {\n    this.openedBy = opener;\n    this.popupContent = this.querySelector('.product-popup-modal__content');\n\n    if (this.popupContent) {\n      this.originalContentParent = this.popupContent.parentNode;\n\n      if (this.originalContentParent) {\n        this.originalContentParent.insertBefore(this.contentPlaceholder, this.popupContent);\n      }\n\n      document.body.appendChild(this.popupContent);\n      this.popupContent.classList.add('open');\n    }\n\n    document.body.classList.add('hidden');\n    this.setAttribute('open', '');\n\n    if (!this.isOpenedFromProductOpener(opener)) {\n      document.querySelector('body > .overlay')?.classList.add('open');\n    }\n\n    if (this.classList.contains('product-popup-modal--question')) {\n      this.input = this.querySelector('.field.product-url input');\n      if (this.input) {\n        this.input.value = window.location.href;\n      }\n    }\n\n    const popup = this.querySelector('.template-popup');\n    if (popup && typeof popup.loadContent === 'function') {\n      popup.loadContent();\n    }\n\n    trapFocus(this, this.querySelector('[role=\"dialog\"]'));\n    document.addEventListener('keyup', this.handleKeyUp);\n  }\n\n  hide() {\n    if (this.popupContent && this.originalContentParent) {\n      this.popupContent.classList.remove('open');\n      this.originalContentParent.insertBefore(this.popupContent, this.contentPlaceholder);\n      this.contentPlaceholder.remove();\n    }\n\n    this.hideSubmittedForm();\n    document.body.classList.remove('hidden');\n    document.dispatchEvent(new CustomEvent('body:visible'));\n    this.removeAttribute('open');\n\n    if (!this.isOpenedFromProductOpener(this.openedBy)) {\n      document.querySelector('body > .overlay')?.classList.remove('open');\n    }\n\n    removeTrapFocus(this.isElement(this.openedBy) ? this.openedBy : null);\n\n    this.querySelectorAll('video, .js-youtube, .js-vimeo').forEach((media) => {\n      if (typeof window.pauseMedia === 'function') {\n        window.pauseMedia(media);\n      }\n\n      if (media.tagName === 'VIDEO') {\n        media.removeAttribute('autoplay');\n        media.pause();\n      } else if (media.tagName === 'IFRAME') {\n        if (media.src && media.src.includes('autoplay=1')) {\n          media.src = media.src.replace('autoplay=1', 'autoplay=0');\n        }\n      }\n    });\n\n    this.popupContent = null;\n    this.originalContentParent = null;\n    this.openedBy = null;\n\n    document.removeEventListener('keyup', this.handleKeyUp);\n  }\n\n  detectSubmittedForm(formID) {\n    if (!formID) return;\n\n    if (isStorageSupported('local')) {\n      window.localStorage.setItem(this.cookieName, formID);\n    }\n  }\n\n  hideSubmittedForm() {\n    if (isStorageSupported('local')) {\n      window.localStorage.removeItem(this.cookieName);\n    }\n\n    this.classList.remove('form-submitted');\n  }\n}\n\ncustomElements.define('modal-window', ModalWindow);\n\nclass ModalOpener extends HTMLElement {\n  constructor() {\n    super();\n\n    this.button = null;\n\n    this.posX1 = 0;\n    this.posInit = 0;\n    this.posX2 = 0;\n    this.posY1 = 0;\n    this.posY2 = 0;\n    this.posInitY = 0;\n\n    this.cookieName = 'avante-theme:form-submitted';\n\n    this._inited = false;\n    this._checkScheduled = false;\n    this._checked = false;\n\n    this._onMouseDown = this.mouseDown.bind(this);\n    this._onMouseMove = this.mouseMove.bind(this);\n    this._onMouseUp   = this.mouseUp.bind(this);\n\n    this._onSectionLoad = () => {\n      this.button = this.querySelector('button');\n      document.body.classList.remove('hidden');\n    };\n\n    this._startLazyCheck = this._startLazyCheck.bind(this);\n    this._runLazyCheck = this._runLazyCheck.bind(this);\n  }\n\n  connectedCallback() {\n    if (this._inited) return;\n    this._inited = true;\n\n    if (this.classList.contains('zoom-disabled')) return;\n\n    this.button = this.querySelector('button');\n    if (!this.button) return;\n\n    this.button.addEventListener('mousedown', this._onMouseDown);\n    this.button.addEventListener('mousemove', this._onMouseMove);\n    this.button.addEventListener('mouseup', this._onMouseUp);\n\n    document.addEventListener('shopify:section:load', this._onSectionLoad);\n\n    this.addEventListener('pointerenter', this._startLazyCheck, { once: true, passive: true });\n    this.addEventListener('pointerdown',  this._startLazyCheck, { once: true, passive: true });\n    this.addEventListener('focusin',      this._startLazyCheck, { once: true });\n\n    this._scheduleIdleCheck();\n  }\n\n  disconnectedCallback() {\n    if (this.button) {\n      this.button.removeEventListener('mousedown', this._onMouseDown);\n      this.button.removeEventListener('mousemove', this._onMouseMove);\n      this.button.removeEventListener('mouseup', this._onMouseUp);\n    }\n\n    document.removeEventListener('shopify:section:load', this._onSectionLoad);\n\n    this.removeEventListener('pointerenter', this._startLazyCheck);\n    this.removeEventListener('pointerdown',  this._startLazyCheck);\n    this.removeEventListener('focusin',      this._startLazyCheck);\n\n    this._inited = false;\n  }\n\n  _scheduleIdleCheck() {\n    if (this._checkScheduled || this._checked) return;\n    this._checkScheduled = true;\n\n    const run = () => {\n      this._checkScheduled = false;\n      this._runLazyCheck();\n    };\n\n    if ('requestIdleCallback' in window) {\n      requestIdleCallback(run, { timeout: 3000 });\n    } else {\n      setTimeout(run, 800);\n    }\n  }\n\n  _startLazyCheck() {\n    this._runLazyCheck();\n  }\n\n  _runLazyCheck() {\n    if (this._checked) return;\n    this._checked = true;\n\n    requestAnimationFrame(() => this.checkIfFormSubmitted());\n  }\n\n  getEvent(event) {\n    return event?.type?.includes('touch') ? event.touches[0] : event;\n  }\n\n  mouseDown(event) {\n    const evt = this.getEvent(event);\n    if (!evt) return;\n    this.posInit = this.posX1 = evt.clientX;\n    this.posInitY = this.posY1 = evt.clientY;\n  }\n\n  mouseMove(event) {\n    const evt = this.getEvent(event);\n    if (!evt) return;\n    this.posX2 = this.posX1 - evt.clientX;\n    this.posX1 = evt.clientX;\n    this.posY2 = this.posY1 - evt.clientY;\n    this.posY1 = evt.clientY;\n  }\n\n  mouseUp() {\n    if ((Math.abs(this.posInit - this.posX1) - Math.abs(this.posInitY - this.posY1) > 5)) return;\n\n    const modal = document.querySelector(this.getAttribute('data-modal'));\n    if (modal) modal.show(this.button);\n\n    if (modal && this.closest('.product__modal-opener')) {\n      const mediaId = this.button?.dataset?.mediaId;\n\n      requestAnimationFrame(() => {\n        const sliderComponent = modal.querySelector('slider-component');\n        if (!sliderComponent) return;\n      \n        sliderComponent.dispatchEvent(new CustomEvent('product-modal:open', {\n          detail: { mediaId },\n          bubbles: false\n        }));\n      });\n\n    }\n  }\n\n  checkIfFormSubmitted() {\n    if (!this.button) return;\n    if (isStorageSupported('local')) {\n      const formSubmitted = window.localStorage.getItem(this.cookieName);\n      if (!formSubmitted) return;\n\n      const modal = document.querySelector(this.getAttribute('data-modal'));\n      if (modal && modal.querySelector(`[id='${formSubmitted}']`) && this.button.classList.contains('popup-button--form')) {\n        modal.classList.add('form-submitted');\n        modal.show(this.button);\n      }\n    }\n  }\n}\n\ncustomElements.define('modal-opener', ModalOpener);\n\nclass SliderComponent extends HTMLElement {\n  constructor() {\n    super();\n\n    this._inited = false;\n\n    this.slider = null;\n    this.sliderItems = null;\n    this.sliderGrid = null;\n    this.thumbnails = null;\n    this.pages = null;\n    this.sliderViewport = null;\n    this.currentPageElement = null;\n    this.pageTotalElement = null;\n    this.prevButton = null;\n    this.nextButton = null;\n    this.parentContainer = null;\n\n    this.scrollbar = null;\n    this.scrollbarTrack = null;\n    this.scrollbarThumb = null;\n\n    this.mediaId = null;\n    this.hasGlobalMediaSettings = false;\n\n    this.posX1 = null;\n    this.posInit = null;\n    this.posX2 = null;\n    this.posY1 = null;\n    this.posY2 = null;\n    this.posInitY = null;\n    this.widthItem = null;\n    this.gapValue = null;\n    this.fullWidthItem = null;\n    this._activeIndex = 0;\n    this._scrollEndTimer = null;\n\n    this.isOnButtonClick = '0';\n    this.disableSwipe = false;\n    this.linkElem = null;\n\n    this._disableButtonsRaf = 0;\n    this._lastDisableState = { prev: null, next: null };\n\n    this._cachedContainer = null;\n    this._slidesForNavCache = null;\n    this._slidesForNavDirty = true;\n\n    this._activeObserver = null;\n    this._pagesResizeObserver = null;\n\n    this._scrollTimer = null;\n    this._adaptSlideHeightTimeout = null;\n\n    this._onProductModalClose = this._onProductModalClose.bind(this);\n    this._onProductModalOpen = this._onProductModalOpen.bind(this);\n\n    this._onUpdateVariantMedia = this._onUpdateVariantMedia.bind(this);\n\n    this._onWindowResize = this._onWindowResize.bind(this);\n    this._onSectionLoad = this._onSectionLoad.bind(this);\n    this._onBlockSelect = this._onBlockSelect.bind(this);\n\n    this._onSliderScroll = this._onSliderScroll.bind(this);\n    this._onSliderKeyup = this._onSliderKeyup.bind(this);\n\n    this._onPrevClick = this.onButtonClick.bind(this, 'previous', false);\n    this._onNextClick = this.onButtonClick.bind(this, 'next', false);\n\n    this._onDocMouseUp = null;\n    this._onDocMouseMove = null;\n    this._onMouseDown = this.swipeStart.bind(this);\n    this._onMouseMove = this.swipeAction.bind(this);\n    this._onMouseUp   = this.swipeEnd.bind(this);\n\n    this._onWheelReset = () => { this.isOnButtonClick = 0; };\n    this._onTouchReset = () => { this.isOnButtonClick = 0; }; \n    this._onScrollbarScroll = this.updateScrollbarPosition.bind(this);\n    this._onScrollbarTrackClick = this.scrollByClick.bind(this);\n    this._onScrollbarThumbDown = this.onDragStart.bind(this);\n\n    this._onDocMouseUp = this.onDragEnd.bind(this);\n    this._onDocMouseMove = this.onDragMove.bind(this);\n    this._resizeRaf = 0;\n    this._pendingResizeEl = null;\n    this._containerWidth = window.innerWidth;\n    this._containerRO = null;\n    this._containerWidthDirty = true;  \n  }\n\n  connectedCallback() {\n    if (this._mounted) return;\n    this._mounted = true;\n\n    this.addEventListener('product-modal:close', this._onProductModalClose);\n    this.addEventListener('product-modal:open', this._onProductModalOpen);\n\n    this._armLazyInit();\n  }\n\n  disconnectedCallback() {\n    this._disarmLazyInit();\n    this._lazyArmed = false;\n    this._mounted = false;\n\n    if (this._containerRO) {\n      this._containerRO.disconnect();\n      this._containerRO = null;\n    }\n\n    if (this._scrollTimer) {\n      clearTimeout(this._scrollTimer);\n      this._scrollTimer = null;\n    }\n    if (this._adaptSlideHeightTimeout) {\n      clearTimeout(this._adaptSlideHeightTimeout);\n      this._adaptSlideHeightTimeout = null;\n    }\n\n    if (this._disableButtonsRaf) {\n      cancelAnimationFrame(this._disableButtonsRaf);\n      this._disableButtonsRaf = 0;\n    }\n\n    if (this._activeObserver) {\n      this._activeObserver.disconnect();\n      this._activeObserver = null;\n    }\n    if (this._pagesResizeObserver) {\n      this._pagesResizeObserver.disconnect();\n      this._pagesResizeObserver = null;\n    }\n\n    this.removeEventListener('product-modal:close', this._onProductModalClose);\n    this.removeEventListener('product-modal:open', this._onProductModalOpen);\n\n    document.removeEventListener('updateVariantMedia', this._onUpdateVariantMedia);\n\n    window.removeEventListener('resize', this._onWindowResize);\n    document.removeEventListener('shopify:section:load', this._onSectionLoad);\n\n    if (Shopify.designMode && this.closest('.scroll-to-block')) {\n      document.removeEventListener('shopify:block:select', this._onBlockSelect);\n    }\n\n    if (this.slider) {\n      this.slider.removeEventListener('scroll', this._onSliderScroll);\n      this.slider.removeEventListener('keyup', this._onSliderKeyup);\n      this.slider.removeEventListener('mousedown', this._onMouseDown);\n      this.slider.removeEventListener('mousemove', this._onMouseMove);\n      this.slider.removeEventListener('mouseup',   this._onMouseUp);\n      this.slider.removeEventListener('wheel', this._onWheelReset);\n      this.slider.removeEventListener('touchstart', this._onTouchReset);\n      this.slider.removeEventListener('touchmove', this._onTouchReset);\n      this.slider.removeEventListener('touchend', this._onTouchReset);\n      this.slider.removeEventListener('scroll', this._onScrollbarScroll);\n    }\n    \n    this.scrollbarTrack?.removeEventListener('click', this._onScrollbarTrackClick);\n    this.scrollbarThumb?.removeEventListener('mousedown', this._onScrollbarThumbDown);\n    \n    document.removeEventListener('mouseup', this._onDocMouseUp);\n    document.removeEventListener('mousemove', this._onDocMouseMove);\n\n    if (this.prevButton?.length) {\n      this.prevButton.forEach(btn => btn.removeEventListener('click', this._onPrevClick));\n    }\n    if (this.nextButton?.length) {\n      this.nextButton.forEach(btn => btn.removeEventListener('click', this._onNextClick));\n    }\n\n    this._inited = false;\n  }\n\n  _scheduleResizeImage(el) {\n    if (!el) return;\n    this._pendingResizeEl = el;\n  \n    if (this._resizeRaf) return;\n    this._resizeRaf = requestAnimationFrame(() => {\n      this._resizeRaf = 0;\n      const target = this._pendingResizeEl;\n      this._pendingResizeEl = null;\n      if (target) this.resizeImage(target);\n    });\n  }\n\n  _initHard() {\n    if (this._inited) return;\n    this._inited = true;\n\n    this.slider = this.querySelector('[id^=\"Slider-\"]');\n    if (!this.slider) return;\n\n    this.sliderItems = this.querySelectorAll('[id^=\"Slide-\"]');\n\n    this.sliderGrid = this.querySelector('.slider__grid');\n    this.thumbnails = this.querySelector('[id^=\"Slider-Thumbnails\"]');\n\n    this.pages = this.querySelector('.slider-counter');\n    this.sliderViewport = this.querySelector('.slider__viewport');\n    this.currentPageElement = this.querySelector('.slider-counter--current');\n    this.pageTotalElement = this.querySelector('.slider-counter--total');\n\n    this.prevButton = this.querySelectorAll('button[name=\"previous\"]');\n    this.nextButton = this.querySelectorAll('button[name=\"next\"]');\n\n    this.parentContainer = this.closest('section') || this;\n\n    this._containerWidth = window.innerWidth;\n\n    if ('ResizeObserver' in window && this.parentContainer) {\n      this._containerRO?.disconnect();\n      this._containerRO = new ResizeObserver((entries) => {\n        const entry = entries && entries[0];\n        if (!entry) return;\n\n        const w = entry.contentRect?.width;\n        if (w && Number.isFinite(w)) {\n          this._containerWidth = w;\n        } else {\n          this._containerWidth = window.innerWidth;\n        }\n\n        this._scheduleDisableButtons();\n      });\n\n      this._containerRO.observe(this.parentContainer);\n    }\n\n    this.scrollbar = this.querySelector('.slider-scrollbar');\n    this.scrollbarTrack = this.querySelector('.slider-scrollbar__track');\n    this.scrollbarThumb = this.querySelector('.slider-scrollbar__thumb');\n\n    this.hasGlobalMediaSettings = !!this.querySelector('img.product-modal-image');\n\n    if (this.slider.closest('.product-media-modal')) {\n      this.slider.style.scrollBehavior = 'auto';\n    }\n\n    document.addEventListener('updateVariantMedia', this._onUpdateVariantMedia);\n\n    window.addEventListener('resize', this._onWindowResize);\n    document.addEventListener('shopify:section:load', this._onSectionLoad);\n\n    if (Shopify.designMode && this.closest('.scroll-to-block')) {\n      document.addEventListener('shopify:block:select', this._onBlockSelect);\n    }\n\n    if (this.closest('.product__media-wrapper') && this.slider.classList.contains('organize_images')) {\n      this.initProductGallery();\n    }\n\n    this.sliderDataCount = this.slider.getAttribute('data-count');\n    this.sliderMobileDataCount = this.slider.getAttribute('data-count-mobile');\n\n    if (this.pages) {\n      this.initPages();\n      this._pagesResizeObserver = new ResizeObserver(() => this.initPages());\n      this._pagesResizeObserver.observe(this.slider);\n    }\n\n    if (this.scrollbar) {\n      setTimeout(() => this.setScrollBar(), 1);\n      this.initEvents();\n    }\n\n    if (this.prevButton?.length || this.nextButton?.length) {\n      this.prevButton.forEach(btn => btn.addEventListener('click', this._onPrevClick));\n      this.nextButton.forEach(btn => btn.addEventListener('click', this._onNextClick));\n      this._scheduleDisableButtons();\n    }\n\n    requestAnimationFrame(() => this._scheduleResizeImage(this.slider.querySelector('.is-active')));\n\n    let activeSlideIndex = Array.from(this.sliderItems).indexOf(this.activeSlide);\n    this.setActiveModel(activeSlideIndex);\n\n    requestAnimationFrame(() => {\n      this._initActiveObserver();\n      this._syncNavState();\n    });\n\n    window.addEventListener('load', () => {\n      this._syncNavState();\n    }, { once: true });\n\n    if (this.slider.classList.contains('recently-viewed')) {\n      this.sliderItems[0]?.classList.add('is-active');\n      let lastChildIndex = this.sliderItems.length - 1;\n\n      let dataCount = +this.slider.dataset.count;\n      let sliderContainer = this.closest('.slider-container-js');\n\n      if (lastChildIndex + 1 >= dataCount) this.sliderItems[lastChildIndex]?.classList.add('last-desktop');\n\n      if (sliderContainer && sliderContainer.offsetWidth < 769) {\n        dataCount = +this.slider.dataset.countMobile;\n        if (lastChildIndex + 1 >= dataCount) this.sliderItems[lastChildIndex]?.classList.add('last-mobile');\n      }\n    }\n\n    const canBeSlider =\n      (!this.slider.classList.contains('grid') &&\n        (\n          (this.closest('.slider-container-js')?.offsetWidth > 768 && this.sliderItems.length > 1) ||\n          (this.closest('.slider-container-js')?.offsetWidth <= 768 && this.sliderItems.length > 1)\n        )\n      );\n\n    if (canBeSlider && !this.slider.classList.contains('thumbnail-list')) {\n      this.activeSlide = this.slider.querySelector('.is-active');\n      this.slider.addEventListener('scroll', this._onSliderScroll);\n    }\n\n    const containerWidth = this.parentContainer?.clientWidth || window.innerWidth;\n\n    const needSwipe =\n      (this.sliderItems.length > this.sliderDataCount && containerWidth > 768) ||\n      (this.sliderItems.length > this.sliderMobileDataCount && containerWidth <= 768) ||\n      (this.sliderItems.length >= this.sliderDataCount && this.sliderDataCount == 5 && containerWidth <= 1024 && containerWidth > 768);\n\n    if (canBeSlider && needSwipe) {\n      this.slider.addEventListener('mousedown', this._onMouseDown);\n      this.slider.addEventListener('mousemove', this._onMouseMove);\n      this.slider.addEventListener('mouseup',   this._onMouseUp);\n    }\n\n    this.slider.addEventListener('keyup', this._onSliderKeyup);\n    this.slider.addEventListener('wheel', this._onWheelReset, { passive: true });\n    this.slider.addEventListener('touchstart', this._onTouchReset, { passive: true });\n    this.slider.addEventListener('touchmove', this._onTouchReset, { passive: true });\n    this.slider.addEventListener('touchend', this._onTouchReset, { passive: true });\n  }\n\n  _applyActiveFromScroll() {\n    if (!this.sliderItems?.length || !this.sliderViewport) return;\n  \n    const viewportLeft = this.sliderViewport.getBoundingClientRect().left;\n  \n    let bestIdx = -1;\n    let bestDist = Infinity;\n  \n    for (let i = 0; i < this.sliderItems.length; i++) {\n      const item = this.sliderItems[i];\n      const dist = Math.abs(viewportLeft - item.getBoundingClientRect().left);\n      if (dist < bestDist) {\n        bestDist = dist;\n        bestIdx = i;\n      }\n    }\n  \n    if (bestIdx < 0) return;\n  \n    const best = this.sliderItems[bestIdx];\n  \n    if (best.classList.contains('is-active')) {\n      this._activeIndex = bestIdx;\n      return;\n    }\n\n    const prev = this.slider.querySelector('.is-active');\n    if (prev) prev.classList.remove('is-active');\n  \n    best.classList.add('is-active');\n    this._activeIndex = bestIdx;\n  \n    this._scheduleResizeImage(best);\n  }\n\n  _hasHorizontalScroll() {\n    if (!this.slider) return false;\n    return (this.slider.scrollWidth - this.slider.clientWidth) > 2;\n  }\n\n  _syncScrollableState() {\n    if (!this.slider) return;\n  \n    const hasScroll = this._hasHorizontalScroll();\n  \n    if (hasScroll) {\n      if (!this.slider.querySelector('.is-active')) {\n        this._applyActiveFromScroll();\n      }\n  \n      this.slider.removeEventListener('scroll', this._onSliderScroll);\n      this.slider.addEventListener('scroll', this._onSliderScroll, { passive: true });\n  \n      this._markSlidesDirty();\n      this.update();\n      this._lastDisableState = { prev: null, next: null };\n      this._scheduleDisableButtons();\n    } else {\n      this.slider.removeEventListener('scroll', this._onSliderScroll);\n    }\n  }\n\n  _armLazyInit() {\n    if (this._lazyArmed) return;\n    this._lazyArmed = true;\n  \n    this._firstIntent = () => this._startInitSoon('intent');\n  \n    this.addEventListener('pointerenter', this._firstIntent, { once: true, passive: true });\n    this.addEventListener('pointerdown',  this._firstIntent, { once: true, passive: true });\n    this.addEventListener('focusin',      this._firstIntent, { once: true, passive: true });\n  \n    if ('IntersectionObserver' in window) {\n      this._io = new IntersectionObserver((entries) => {\n        if (!entries || !entries[0]) return;\n        if (entries[0].isIntersecting) {\n          this._startInitSoon('viewport');\n        }\n      }, {\n        root: null,\n        rootMargin: '500px 0px',\n        threshold: 0.01\n      });\n  \n      this._io.observe(this);\n    } else {\n      this._startInitSoon('fallback');\n    }\n  }\n  \n  _startInitSoon(reason) {\n    if (this._inited || this._initScheduled) return;\n    this._initScheduled = true;\n  \n    this._disarmLazyInit();\n  \n    const run = () => {\n      this._initScheduled = false;\n      this._initHard();\n    };\n  \n    setTimeout(() => {\n      if ('requestIdleCallback' in window) {\n        requestIdleCallback(run, { timeout: 1500 });\n      } else {\n        requestAnimationFrame(run);\n      }\n    }, 0);\n  }\n  \n  _disarmLazyInit() {\n    if (this._firstIntent) {\n      this.removeEventListener('pointerenter', this._firstIntent);\n      this.removeEventListener('pointerdown',  this._firstIntent);\n      this.removeEventListener('focusin',      this._firstIntent);\n      this._firstIntent = null;\n    }\n    if (this._io) {\n      this._io.disconnect();\n      this._io = null;\n    }\n  }\n\n  _onProductModalClose(event) {  \n    requestAnimationFrame(() => {\n      if (!this.slider) return;\n  \n      if (this.slider.closest('.product-media-modal')) {\n        this.slider.style.scrollBehavior = 'unset';\n        this.sliderItems?.forEach(item => { item.style.marginTop = ''; });\n      }\n    });\n  }\n\n  _onProductModalOpen(event) {\n    const { mediaId } = event.detail || {};\n    this.mediaId = mediaId;\n\n    if (!this._inited) this._initHard();\n\n    requestAnimationFrame(() => {\n      this._refreshDomRefs();\n    \n      if (!this.slider) return;\n    \n      if (this.slider.closest('.product-media-modal')) {\n        const modalContent = this.closest('.product-media-modal__content');\n        if (modalContent) modalContent.scrollTop = 0;\n        this.slider.style.scrollBehavior = 'auto';\n      }\n    \n      if (this.hasGlobalMediaSettings) {\n        this.sliderItems?.forEach(item => item.classList.remove('is-active'));\n    \n        this.sliderItems = this.querySelectorAll('[id^=\"Slide-\"]');\n        this.sliderItems = Array.from(this.sliderItems).filter(item => {\n          const image = item.querySelector('img.product-modal-image');\n          return !image || (\n            image.classList.contains('product__media-item--variant--alt') ||\n            image.classList.contains('product__media-item--variant-show') ||\n            image.classList.contains('product__media-item--show')\n          );\n        });\n    \n        this.sliderItems.forEach(item => {\n          if (item.querySelector(`[data-media-id=\"${this.mediaId}\"]`)) {\n            item.classList.add('is-active');\n            return;\n          }\n        });\n    \n        this.activeSlide = this.slider.querySelector('.is-active');\n        const activeSlideIndex = Array.from(this.sliderItems).indexOf(this.activeSlide);\n    \n        if (this.slider.closest('.product-media-modal')) {\n          this.sliderGrid\n            ?.style.setProperty('height', this.sliderItems[activeSlideIndex]?.clientHeight + 'px');\n        }\n      }\n    \n      if (this.slider.closest('.product-media-modal')) {\n        this.sliderItems?.forEach(item => {\n          const vvH = window.visualViewport?.height;\n          if (!vvH) return;\n          if (item.offsetHeight < vvH) {\n            item.style.marginTop = `${(vvH - item.offsetHeight) / 2}px`;\n          }\n        });\n      }\n    \n      this._markSlidesDirty();\n      this.update();\n      this._lastDisableState = { prev: null, next: null };\n      this._scheduleDisableButtons();\n      if (this.scrollbar) this._scheduleScrollbarRecalc();\n    });\n  }\n\n  _refreshDomRefs() {\n    this.slider = this.querySelector('[id^=\"Slider-\"]');\n    this.sliderItems = this.querySelectorAll('[id^=\"Slide-\"]');\n    this.prevButton = this.querySelectorAll('button[name=\"previous\"]');\n    this.nextButton = this.querySelectorAll('button[name=\"next\"]');\n    this.pages = this.querySelector('.slider-counter');\n    this.sliderViewport = this.querySelector('.slider__viewport');\n    this.sliderGrid = this.querySelector('.slider__grid');\n  \n    this.scrollbar = this.querySelector('.slider-scrollbar');\n    this.scrollbarTrack = this.querySelector('.slider-scrollbar__track');\n    this.scrollbarThumb = this.querySelector('.slider-scrollbar__thumb');\n  \n    this.hasGlobalMediaSettings = !!this.querySelector('img.product-modal-image');\n  }\n\n  _onUpdateVariantMedia() {\n    this._markSlidesDirty();\n    if (this.pages) this.update();\n    this._lastDisableState = { prev: null, next: null };\n    this._scheduleDisableButtons();\n  }\n\n  _onWindowResize() {\n    this._scheduleResizeImage(this.slider?.querySelector('.is-active'));\n    this._scheduleDisableButtons();\n    this._scheduleScrollbarRecalc();\n    requestAnimationFrame(() => {\n      this._syncScrollableState();\n    });\n  }\n\n  _onSectionLoad() {\n    this.resizeImage(this.slider?.querySelector('.is-active'));\n    if (this.closest('.product__media-wrapper') && this.slider?.classList.contains('organize_images')) {\n      this.initProductGallery();\n    }\n  }\n\n  _onBlockSelect(event) {\n    let activeBlock = event.target;\n    if (!this.querySelector(`#${activeBlock.getAttribute('id')}`)) return;\n\n    let activeSlide = this.slider.querySelector('.is-active');\n    if (!activeSlide) return;\n\n    activeSlide.classList.remove('is-active');\n    activeBlock.classList.add('is-active');\n\n    let activeSlideIndex = Array.from(this.sliderItems).indexOf(activeBlock);\n    this._scheduleDisableButtons();\n    this.update();\n    if (this.sliderItems[activeSlideIndex]) this.slider.scrollLeft = this.sliderItems[activeSlideIndex].offsetLeft;\n  }\n\n  _onSliderScroll() {\n    if (this.isOnButtonClick == 'onButtonClick') return;\n    if (this.slider.className.includes('disable-scroll')) return;\n\n    if (this.slider.closest('.product-media-modal')) {\n      clearTimeout(this._scrollTimer);\n      this._scrollTimer = setTimeout(() => {\n        this.onAfterSlideChange(this.activeSlide);\n      }, 0);\n    }\n\n    this.slider.querySelectorAll('.snap-align').forEach(item => item.classList.remove('is-active'));\n\n    if ((this.slider.closest('.product--side_thumbnails') || this.slider.closest('.product--thumbnails_below') || this.slider.closest('.product--thumbnails_left')) && !this.slider.closest('product-modal')) {\n      this.galleryThumb = this.slider.closest('.slider-block').querySelector('[id^=\"GalleryThumbnails-\"]');\n      this.galleryThumb?.querySelectorAll('.snap-align').forEach(item => item.classList.remove('is-active'));\n    }\n\n    if (this.slider.closest('.product-media-modal')) this.onBeforeSlideChange();\n\n    clearTimeout(this._scrollEndTimer);\n    this._scrollEndTimer = setTimeout(() => {\n      this._applyActiveFromScroll();\n      if((this.slider.closest('.product--side_thumbnails') || this.slider.closest('.product--thumbnails_below') || this.slider.closest('.product--thumbnails_left')) && !this.slider.closest('product-modal')) {\n        this.scrollThumbnail();\n      }\n\n      this.update();\n      this.setActiveModel(this._activeIndex);\n    }, 80);\n  }\n\n  clearScrollEndTimer() {\n    if (this._scrollEndTimer) {\n      clearTimeout(this._scrollEndTimer);\n      this._scrollEndTimer = null;\n    }\n  }\n\n  _onSliderKeyup(event) {\n    if (event.code.toUpperCase() !== 'ARROWRIGHT' && event.code.toUpperCase() !== 'ARROWLEFT') return;\n\n    let activElem = document.activeElement;\n    this.activeSlide = this.slider.querySelector('.is-active');\n\n    if (!activElem?.closest('[id^=\"Slide-\"]')?.classList.contains('is-active')) {\n      if (this.activeSlide) this.activeSlide.classList.remove('is-active');\n      activElem?.classList.add('is-active');\n\n      this.update();\n\n      if ((this.slider.closest('.product--side_thumbnails') || this.slider.closest('.product--thumbnails_below') || this.slider.closest('.product--thumbnails_left')) && !this.slider.closest('product-modal')) {\n        this.scrollThumbnail();\n      }\n    }\n  }\n\n  initProductGallery() {\n    this.slider.setAttribute('style', 'scroll-behavior: unset;')\n    setTimeout(() => this.slider.scrollLeft = this.slider.querySelector('.is-active')?.offsetLeft, 10)\n    setTimeout(() => this.slider.setAttribute('style', 'scroll-behavior: smooth;'), 100)\n  }\n\n  resizeImage(activeElem) {\n    const containerWidth = this.parentContainer?.clientWidth || window.innerWidth;\n    if(this.slider.classList.contains('slider-main--original')) {\n      if(this.slider.classList.contains('grid--peek') && containerWidth > 768) {\n        this.sliderViewport.removeAttribute('style')\n        return\n      }\n      const rect = activeElem.getBoundingClientRect();\n      let height = rect.height;\n      if(containerWidth < 769) {\n        this.slider.closest('.product--side_thumbnails') && !this.slider.closest('product-modal') ? this.slider.closest('.slider-block').removeAttribute('style') : this.slider.removeAttribute('style')\n        const newH = `${height}px`;\n        if (this.sliderViewport.style.height !== newH) {\n          this.sliderViewport.style.height = newH;\n        }\n      } else {\n        this.sliderViewport.removeAttribute('style')\n        this.slider.closest('.product--side_thumbnails') && !this.slider.closest('product-modal') ? this.slider.closest('.slider-block').style.height = height + 'px' : this.slider.style.height = height + 'px'\n      }\n    }\n    if(this.sliderItems.length > this.sliderDataCount && containerWidth > 768 || this.sliderItems.length > this.sliderMobileDataCount && containerWidth <= 768 || this.sliderItems.length >= this.sliderDataCount && this.sliderDataCount == 5 && containerWidth <= 1024 && containerWidth > 768) {\n      this.disableSwipe = false\n    } else {\n      this.disableSwipe = true\n    }\n  }\n\n  _getSliderContainer() {\n    if (this._cachedContainer && document.contains(this._cachedContainer)) return this._cachedContainer;\n  \n    if (this.closest('.cart-drawer') || this.closest('#cart-notification')) {\n      this._cachedContainer = document.body;\n    } else {\n      this._cachedContainer = this.closest('.slider-container-js') || this.closest('section') || this;\n    }\n    return this._cachedContainer;\n  }\n\n  _isHiddenSlide(el) {\n    return (\n      el.classList.contains('product__media-item--hide') &&\n      !el.classList.contains('product__media-item--show') &&\n      !el.classList.contains('product__media-item--variant-alt')\n    );\n  }\n\n  _markSlidesDirty() {\n    this._slidesForNavDirty = true;\n  }\n  \n  _getSlidesForNav() {\n    if (!this.slider) return [];\n  \n    if (!this._slidesForNavDirty && this._slidesForNavCache) return this._slidesForNavCache;\n  \n    const children = this.slider.children;\n    const out = [];\n  \n    for (let i = 0; i < children.length; i++) {\n      const el = children[i];\n      if (!el.id || !el.id.startsWith('Slide-')) continue;\n      if (this._isHiddenSlide(el)) continue;\n      out.push(el);\n    }\n  \n    this._slidesForNavCache = out;\n    this._slidesForNavDirty = false;\n    return out;\n  }\n  \n  _initActiveObserver() {\n    if (!this.slider || this._activeObserver) return;\n  \n    this._activeObserver = new MutationObserver((mutations) => {\n      for (const m of mutations) {\n        if (m.type === 'attributes' && m.attributeName === 'class') {\n          this._markSlidesDirty();\n          this._scheduleDisableButtons();\n          return;\n        }\n      }\n    });\n  \n    this._activeObserver.observe(this.slider, {\n      subtree: true,\n      attributes: true,\n      attributeFilter: ['class']\n    });\n  }\n\n  _scheduleDisableButtons() {\n    if (!this.prevButton?.length || !this.nextButton?.length) return;\n    if (this._disableButtonsRaf) return;\n  \n    this._disableButtonsRaf = requestAnimationFrame(() => {\n      this._disableButtonsRaf = 0;\n      this.disableButtons();\n    });\n  }\n  \n  _setButtonsDisabled(nodeList, shouldDisable) {\n    nodeList.forEach(btn => {\n      const isDisabled = btn.hasAttribute('disabled');\n      if (shouldDisable) {\n        if (!isDisabled) btn.setAttribute('disabled', 'disabled');\n      } else {\n        if (isDisabled) btn.removeAttribute('disabled');\n      }\n    });\n  }\n  \n  _syncNavState() {\n    this.disableButtons();\n  }\n\n  initPages() {\n    this.sliderItemsToShow = this._getSlidesForNav()\n    if (this.sliderItemsToShow.length < 2) return;\n    this.sliderItemOffset = this.sliderItemsToShow[1].offsetLeft - this.sliderItemsToShow[0].offsetLeft;\n    this.slidesPerPage = Math.floor(this.slider.clientWidth / this.sliderItemOffset);\n    this.totalPages = this.sliderItemsToShow.length\n    this.update();\n  }\n\n  resetPages() {\n    this.sliderItems = this.querySelectorAll('[id^=\"Slide-\"]');\n    this.initPages();\n  }\n\n  update() {\n    if (!this.pages) return;\n  \n    const visible = this._getSlidesForNav();\n    this.totalPages = visible.length;\n    this.activeSlide = this.slider.querySelector('.is-active');\n  \n    let currentIndex = this.activeSlide ? visible.indexOf(this.activeSlide) : -1;\n    if (currentIndex < 0) currentIndex = 0;\n    this.currentPage = this.totalPages ? currentIndex + 1 : 0;\n  \n    if (this.currentPageElement && this.pageTotalElement) {\n      this.currentPageElement.textContent = this.currentPage;\n      this.pageTotalElement.textContent = this.totalPages;\n    }\n  \n    this.totalPages === 1\n      ? this.pages.closest('.slider-buttons').classList.add('visually-hidden')\n      : this.pages.closest('.slider-buttons').classList.remove('visually-hidden');\n  \n      this._scheduleDisableButtons();\n  \n    if (this.scrollbar) setTimeout(() => this.setScrollBar(), 1);\n  }\n\n  disableButtons() {\n    if (!this.prevButton?.length || !this.nextButton?.length) return;\n    if (!this.slider) return;\n  \n    const items = this._getSlidesForNav();\n    const total = items.length;\n  \n    if (total <= 1) {\n      if (this._lastDisableState.prev !== true) {\n        this._setButtonsDisabled(this.prevButton, true);\n        this._lastDisableState.prev = true;\n      }\n      if (this._lastDisableState.next !== true) {\n        this._setButtonsDisabled(this.nextButton, true);\n        this._lastDisableState.next = true;\n      }\n      return;\n    }\n  \n    const active = this.slider.querySelector('.is-active');\n    let activeIndex = active ? items.indexOf(active) : -1;\n    if (activeIndex < 0) activeIndex = Math.max(0, Math.min(this._activeIndex || 0, items.length - 1));\n  \n    const width = this._containerWidth || window.innerWidth;\n    const isMobile = width < 769;\n  \n    if (this.slider.closest('#cart-notification')) this.slider.setAttribute('data-count', '3');\n  \n    let dataCount = +(this.slider.dataset.count || 1);\n    if (dataCount === 5 && width < 1025) dataCount = 4;\n    if (isMobile) dataCount = +(this.slider.dataset.countMobile || dataCount);\n  \n    let step = dataCount;\n    if (this.classList.contains('slider--row-two') || this.classList.contains('slider--row-three')) {\n      step = Math.max(1, step - 1);\n    }\n  \n    const disablePrev = activeIndex === 0;\n    const disableNext = activeIndex > (total - 1 - step);\n  \n    if (this._lastDisableState.prev !== disablePrev) {\n      this._setButtonsDisabled(this.prevButton, disablePrev);\n      this._lastDisableState.prev = disablePrev;\n    }\n    if (this._lastDisableState.next !== disableNext) {\n      this._setButtonsDisabled(this.nextButton, disableNext);\n      this._lastDisableState.next = disableNext;\n    }\n  }\n\n  _scheduleScrollbarRecalc() {\n    if (!this.scrollbar || !this.slider) return;\n  \n    requestAnimationFrame(() => {\n      requestAnimationFrame(() => {\n        this.setScrollBar();\n      });\n    });\n  }\n\n  setScrollBar() {\n    const thumbWidth = (this.slider.clientWidth / this.slider.scrollWidth) * 100;\n    this.scrollbarThumb.style.width = `${thumbWidth}%`;\n    this.updateScrollbarPosition();\n  }\n\n  initEvents(e) {\n    this.slider.addEventListener('scroll', this._onScrollbarScroll);\n    this.scrollbarTrack.addEventListener('click', this._onScrollbarTrackClick);\n    this.scrollbarThumb.addEventListener('mousedown', this._onScrollbarThumbDown);\n\n    document.addEventListener('mouseup', this._onDocMouseUp);\n    document.addEventListener('mousemove', this._onDocMouseMove);\n  }\n\n  updateScrollbarPosition() {\n    const scrollOffset = theme.config.rtl ? Math.abs(this.slider.scrollLeft) : this.slider.scrollLeft;\n    const scrollRatio = scrollOffset / (this.slider.scrollWidth - this.slider.clientWidth);\n    const maxLeft = this.scrollbarTrack.clientWidth - this.scrollbarThumb.clientWidth;\n    const thumbPosition = maxLeft * scrollRatio;\n    this.scrollbarThumb.style.left = theme.config.rtl ? `${maxLeft- thumbPosition}px` : `${thumbPosition}px`;\n  }\n\n  scrollByClick(event) {\n    if (event.target === this.scrollbarThumb) return;\n    const trackRect = this.scrollbarTrack.getBoundingClientRect();\n    const clickPosition = event.clientX - trackRect.left;\n    const thumbCenter = this.scrollbarThumb.clientWidth / 2;\n    const newLeft = clickPosition - thumbCenter;\n    const scrollRatio = newLeft / (trackRect.width - this.scrollbarThumb.clientWidth);\n    this.slider.scrollLeft = scrollRatio * (this.slider.scrollWidth - this.slider.clientWidth);\n  }\n\n  onDragStart(event) {\n    event.preventDefault();\n    this.isDragging = true;\n    this.startX = event.clientX;\n    this.thumbStartLeft = this.scrollbarThumb.offsetLeft;\n    this.scrollbarThumb.classList.add('dragging');\n  }\n\n  onDragMove(event) {\n    if (!this.isDragging) return;\n    event.preventDefault();\n    const deltaX = event.clientX - this.startX;\n    const newLeft = Math.max(0, Math.min(this.thumbStartLeft + deltaX, this.scrollbarTrack.clientWidth - this.scrollbarThumb.clientWidth));\n    const scrollRatio = newLeft / (this.scrollbarTrack.clientWidth - this.scrollbarThumb.clientWidth);\n    this.slider.scrollLeft = scrollRatio * (this.slider.scrollWidth - this.slider.clientWidth);\n  }\n\n  onDragEnd() {\n    this.isDragging = false;\n    this.scrollbarThumb.classList.remove('dragging');\n  }\n\n  scrollThumbnail() {\n    this.activeSlide = this.slider.querySelector('.is-active')\n    let activeSlideIndex = Array.from(this.sliderItems).indexOf(this.activeSlide)\n    this.galleryThumb = this.slider.closest('.slider-block').querySelector('[id^=\"Slider-Thumbnails\"]')\n    this.galleryThumb.classList.contains('variant-thumbs') ? this.sliderThumbs = this.galleryThumb.querySelectorAll('[id^=\"Slide-Thumbnails\"].product__media-item--variant-alt') : this.sliderThumbs = this.galleryThumb.querySelectorAll('[id^=\"Slide-Thumbnails\"]')\n    let activeThumb = this.sliderThumbs[activeSlideIndex]\n    if(!activeThumb) return\n    let prevActiveSlide = this.galleryThumb.querySelector('.is-active')\n    if (prevActiveSlide) prevActiveSlide.classList.remove('is-active')  \n    activeThumb.classList.add('is-active')\n    // Check thumbnails gallery position   \n    if (this.galleryThumb.classList.contains('thumbnail-list--column')) {\n      this.galleryThumb.closest('.thumbnail-slider--column').scrollTo({\n        top: activeThumb.offsetTop - activeThumb.offsetHeight - 8,\n        behavior: 'smooth'\n      })\n    } else {\n      this.galleryThumb.scrollTo({\n        left: activeThumb.offsetLeft - activeThumb.offsetWidth - 8,\n        behavior: 'smooth'\n      })\n    }\n  }\n\n  changeActiveSlideOnScroll() {\n    if (this.dataset.enableAutoplay === 'false') {\n      window.pauseAllMedia();\n    }\n\n    let sliderLeft = Math.round(this.sliderViewport.getBoundingClientRect().left)\n    let sliderItemLeft \n    this.sliderItems.forEach((item) => {\n      sliderItemLeft = Math.round(item.getBoundingClientRect().left)\n      if (Math.abs(sliderLeft - sliderItemLeft) < 7) {\n        item.classList.add('is-active')\n        this._scheduleResizeImage(item);\n      } else {\n        if(this.closest('.advantages')) this.querySelectorAll('[id^=\"Slide-\"]')[this.sliderItems.length - 2].classList.add('is-active')\n      }\n    })\n    // Make the gallery flexible if media ratio is original\n    if(this.slider.classList.contains('slider-main--original') && this.slider.querySelector('.is-active')) {\n      if(this.slider.classList.contains('grid--peek') && this.parentContainer.offsetWidth > 768) {\n        this.sliderViewport.removeAttribute('style')\n        return\n      }\n      setTimeout(() => {\n        let height = this.slider.querySelector('.is-active').offsetHeight\n        if(this.parentContainer.offsetWidth < 769) {\n          this.slider.closest('.product--side_thumbnails') && !this.slider.closest('product-modal') ? this.slider.closest('.slider-block').removeAttribute('style') : this.slider.removeAttribute('style')\n          const newH = `${height}px`;\n          if (this.sliderViewport.style.height !== newH) {\n            this.sliderViewport.style.height = newH;\n          }\n        } else {\n          this.sliderViewport.removeAttribute('style')\n          this.slider.closest('.product--side_thumbnails') && !this.slider.closest('product-modal') ? this.slider.closest('.slider-block').style.height = height + 'px' : this.slider.style.height = height + 'px'\n        }\n      }, 100)\n    }\n    if((this.slider.closest('.product--side_thumbnails') || this.slider.closest('.product--thumbnails_below') || this.slider.closest('.product--thumbnails_left')) && !this.slider.closest('product-modal')) {\n      this.scrollThumbnail()\n    } \n    this.update();\n    this.activeSlide = this.slider.querySelector('.is-active')\n    let activeSlideIndex = Array.from(this.sliderItems).indexOf(this.activeSlide)\n    this.setActiveModel(activeSlideIndex)\n  }\n\n  setActiveModel(activeSlideIndex) {\n    if (!this.classList.contains('slider-mobile-gutter')) return;\n\n    let activeMediaId;\n    if (this.sliderItems[activeSlideIndex]) {\n      activeMediaId = this.sliderItems[activeSlideIndex].dataset.mediaId;\n    }\n\n    if (activeMediaId) {\n      this.toggleXrButton(activeMediaId);\n    }\n  }\n\n  toggleXrButton(activeMediaId) {\n    const xrButtons = document.querySelectorAll('slider-component ~ .product__xr-button');\n    \n    if (xrButtons.length == 0) return;\n\n    xrButtons.forEach(button => {\n      button.classList.add('product__xr-button--hidden');\n    });\n\n    const activeXrButton = document.querySelector(`slider-component ~ .product__xr-button[data-media-id=\"${activeMediaId}\"]`);\n    if (activeXrButton) {\n      activeXrButton.classList.remove('product__xr-button--hidden');\n    }\n  }\n\n  onBeforeSlideChange() {\n    clearTimeout(this.adaptSlideHeightTimeout); // In case of a recurring click on the button\n\n    const modalContent = this.closest('.product-media-modal__content');\n    modalContent.scrollTo({\n      top: 0,\n      behavior: 'smooth'\n    });\n  }\n\n  onAfterSlideChange(activeSlide) {\n    const slideTransitionSpeed = 750; // Approximate value of scroll-behavior: smooth in browsers\n\n    if (typeof activeSlide === 'number') {\n      activeSlide = this.sliderItems[activeSlide]\n    } \n\n    this.adaptSlideHeightTimeout = setTimeout(() => {\n      this.querySelector('.slider__grid').style.setProperty('height', activeSlide.offsetHeight + 'px');\n    }, slideTransitionSpeed)\n  }\n\n  onButtonClick(direction, nextActiveSlideSwipe) {\n      window.pauseAllMedia()\n\n      const isRTL = document.documentElement.dir === 'rtl'\n\n      if (this.slider.closest('.product-media-modal')) this.onBeforeSlideChange()\n\n      if (this.slider.classList.contains('thumbnail-list')) return\n\n      const items = this._getSlidesForNav();\n      if (!items.length) return;\n\n      this.activeSlide = this.slider.querySelector('.is-active');\n      let activeSlideIndex = items.indexOf(this.activeSlide);\n      if (activeSlideIndex < 0) activeSlideIndex = 0;\n      if ((this.slider.closest('.product--side_thumbnails') || this.slider.closest('.product--thumbnails_below') || this.slider.closest('.product--thumbnails_left')) && !this.slider.closest('product-modal')) {\n        this.galleryThumb = this.slider.closest('.slider-block').querySelector('[id^=\"GalleryThumbnails-\"]')\n        let activeThumb = this.galleryThumb.querySelectorAll('[id^=\"Slide-\"]')[activeSlideIndex]\n        activeThumb.classList.remove('is-active')\n      }\n      if(this.slider.closest('#cart-notification')) this.slider.setAttribute(\"data-count\", \"3\")\n      let dataCount = +this.slider.dataset.count\n      if (dataCount == 5 && this.closest('.slider-container-js').offsetWidth < 1025 ) dataCount = 4\n      let sliderContainer\n      !this.closest('.cart-drawer') && !this.closest('#cart-notification') ? sliderContainer = this.closest('.slider-container-js') : sliderContainer = document.querySelector('#body')\n      if (sliderContainer.offsetWidth < 769) dataCount = +this.slider.dataset.countMobile\n      let nextActiveSlide\n      // Determine the step for changing the active slide\n      nextActiveSlideSwipe ? nextActiveSlide = nextActiveSlideSwipe : nextActiveSlide = dataCount\n      if (direction == 'next') {\n        let lastIndex = items.length - 1;\n        if (this.closest('.advantages') && window.innerWidth < 768 || this.closest('.testimonials')) lastIndex = this.sliderItems.length\n        // Restrict gallery scrolling at the end\n        activeSlideIndex = Math.min(lastIndex, activeSlideIndex + nextActiveSlide);\n\n        this.activeSlide.classList.remove('is-active');\n        if (items[activeSlideIndex]) items[activeSlideIndex].classList.add('is-active');\n\n        this.resizeImage(items[activeSlideIndex]);\n        if (this.slider.closest('.product-media-modal')) this.slider.style.scrollBehavior = 'smooth'\n        if (this.classList.contains('slider--row') && this.parentElement.offsetWidth > 768) {\n          const activeSlide = items[activeSlideIndex]\n          const scrollPosition  = isRTL \n            ? (this.getBoundingClientRect().width - activeSlide.offsetLeft - activeSlide.offsetWidth) * -1 + activeSlide.offsetWidth\n            : activeSlide.offsetLeft - activeSlide.offsetWidth\n\n          setTimeout(() => {\n            this.slider.scrollLeft = scrollPosition\n          }, 1)\n        } else {\n          const activeSlide = items[activeSlideIndex]\n          const scrollPosition  = isRTL \n            ? (this.getBoundingClientRect().width - activeSlide.offsetLeft - activeSlide.offsetWidth) * -1 \n            : activeSlide.offsetLeft\n\n          setTimeout(() => {\n            this.slider.scrollLeft = scrollPosition\n          }, 1)\n        }\n      }\n      if (direction == 'previous') {  \n        activeSlideIndex = Math.max(0, activeSlideIndex - nextActiveSlide);\n        if (this.activeSlide) this.activeSlide.classList.remove('is-active')  \n          items[activeSlideIndex].classList.add('is-active')\n        this.resizeImage(items[activeSlideIndex])\n        if (this.slider.closest('.product-media-modal')) this.slider.style.scrollBehavior = 'smooth'\n        // Restrict gallery scrolling at the beginnig\n        if (this.classList.contains('slider--row') && this.offsetWidth > 768) {\n          const activeSlide = items[activeSlideIndex]\n          const scrollPosition  = isRTL \n            ? (this.getBoundingClientRect().width - activeSlide.offsetLeft - activeSlide.offsetWidth) * -1 + activeSlide.offsetWidth\n            : activeSlide.offsetLeft - activeSlide.offsetWidth\n\n          this.slider.scrollLeft = scrollPosition \n        } else {\n          const activeSlide = items[activeSlideIndex]\n          const scrollPosition  = isRTL \n            ? (this.getBoundingClientRect().width - activeSlide.offsetLeft - activeSlide.offsetWidth) * -1 \n            : activeSlide.offsetLeft\n            \n          this.slider.scrollLeft = scrollPosition\n        }       \n      }\n      if((this.slider.closest('.product--side_thumbnails') || this.slider.closest('.product--thumbnails_below') || this.slider.closest('.product--thumbnails_left')) && !this.slider.closest('product-modal')) {\n        this.scrollThumbnail()\n      } \n      this.update();\n      this._scheduleDisableButtons();\n      this.isOnButtonClick = 'onButtonClick'\n      this.setActiveModel(activeSlideIndex)\n      if (this.slider.closest('.product-media-modal')) this.onAfterSlideChange(activeSlideIndex)\n  }\n\n  getEvent (event) {\n    return event.type.search('touch') !== -1 ? event.touches[0] : event;\n  }\n\n  swipeStart(event) {\n    if (event.target.closest('.swiper-button')) return;\n\n    if (event.target.closest('.slider__grid').getAttribute('id') != this.slider.getAttribute('id')) return\n    if(this.disableSwipe) return\n    if (event.target.closest('.card__extras') || event.target.closest('.swatches_container') || event.target.closest('.only-mobile-slider') && this.closest('section').offsetWidth > 768) return\n    if(event.button == 2) return\n    event.preventDefault()\n    if(event.target.closest('.thumbnail-slider') || event.target.classList.contains('3d-model')) return\n    this.slider.style.userSelect = 'none'\n    this.slider.style.cursor = 'grab'\n   \n    setTimeout(() => {\n      this.sliderItems.forEach(item => {\n        if (item.querySelector('a.card-js')) item.querySelector('a.card-js').style.pointerEvents = 'none'\n      }, 20)\n    })\n    this.sliderItems.forEach(item => {\n      item.querySelector('.card-js') ? item.querySelector('.card-js').style.cursor = 'grab' : item.closest('.card-js').style.cursor = 'grab'\n    })\n    let evt = this.getEvent(event);\n    this.posInit = this.posX1 = evt.clientX;\n    this.posInitY = this.posY1 = evt.clientY\n    this.widthItem = +this.sliderItems[0].offsetWidth\n    this.gapValue = +window.getComputedStyle(this.slider).getPropertyValue(\"gap\").slice(0, -2)\n    this.fullWidthItem = this.widthItem + this.gapValue\n  }\n\n  swipeAction(event) {\n    if (event.target.closest('.swiper-button')) return;\n\n    if (event.target.closest('.slider__grid').getAttribute('id') != this.slider.getAttribute('id')) return\n    if(this.slider.classList.contains('disable-scroll')) this.slider.classList.remove('disable-scroll')\n    if(event.target.closest('.thumbnail-slider')) return\n    let evt = this.getEvent(event)\n    this.posX2 = this.posX1 - evt.clientX;\n    this.posX1 = evt.clientX;\n    this.posY2 = this.posY1 - evt.clientY;\n    this.posY1 = evt.clientY;\n  }\n\n  swipeEnd(event) {\n    if (event.target.closest('.swiper-button')) return;\n\n    if (event.target.closest('.slider__grid').getAttribute('id') != this.slider.getAttribute('id')) return\n    if(this.disableSwipe) return\n    if(event.target.closest('.thumbnail-slider') || event.target.classList.contains('3d-model')) return\n    if (event.target.closest('.color-swatch')) return\n    // Return default cursor value\n    this.slider.style.userSelect = 'auto'\n    this.slider.style.cursor = 'default'\n    let parentOrChild\n    this.sliderItems.forEach(item => {\n      item.querySelector('.card-js') ? parentOrChild = item.querySelector('.card-js') : parentOrChild = item.closest('.card-js')\n      parentOrChild.style.cursor = 'pointer'\n      if (item.querySelector('.product-labels__item')) item.querySelector('.product-labels__item').style.cursor = 'auto'\n      parentOrChild.style.pointerEvents = 'auto'\n      if (item.querySelector('.testimonials_card')) item.querySelector('.testimonials_card').style.cursor = 'auto'\n      if(item.closest('.logo-slider') || item.closest('.banner-gallery')) {\n        parentOrChild.style.cursor = 'default'\n        if(item.querySelector('a.card-js')) item.querySelector('a.card-js').style.cursor = 'pointer'\n      }\n    })\n    // Check right click\n    if(event.button == 2) return\n    if (event.target.closest('.card__extras') || event.target.closest('.only-mobile-slider') && this.closest('section').offsetWidth > 768) return\n    // Check if swipe was horizontal or vertical\n    let isHorizontalSwipe = Math.abs(this.posInit - this.posX1) > Math.abs(this.posInitY - this.posY1)\n    let horizontalSwipeIsOk = Math.abs(this.posInit - this.posX1) > 50\n    let swipeVertical = Math.abs(this.posInitY - this.posY1) > 20\n    let swipeHorizontal = Math.abs(this.posInit - this.posX1) > 20\n    if(!swipeHorizontal && !swipeVertical) {\n      if(event.target.closest('a')) {\n        this.linkElem = event.target.closest('a')\n      } \n      else {\n        if(event.target == this.slider || event.target == this.sliderViewport || event.target == this) return;\n        if(event.target.querySelector('a') && !event.target.querySelector('a').closest('.richtext')) this.linkElem = event.target.querySelector('a')\n      }\n      if(this.linkElem) this.linkElem.hasAttribute('target') && !Shopify.designMode ? window.open(this.linkElem.href, '_blank') : location.href = this.linkElem.href\n    }\n    if (!isHorizontalSwipe || !horizontalSwipeIsOk) return\n    if (this.slider.closest('.product-media-modal')) this.slider.style.scrollBehavior = 'smooth'\n    // Check slider direction\n    let posFinal = this.posInit - this.posX1;\n    let direction;\n    const isRTL = document.documentElement.dir === 'rtl'\n    if (isRTL) {\n      posFinal > 0 ? direction = 'previous' : direction = 'next'\n    } else {\n      posFinal > 0 ? direction = 'next' : direction = 'previous'\n    }\n    // nextActiveSlideSwipe variable determines how many slides the galery will scroll through\n    let nextActiveSlideSwipe = 0 // The step between active slide could be equal to the number of slides in visible area, so the variable = 0\n    if(!this.slider.closest('.slider-block')) if(Math.abs(posFinal) < this.fullWidthItem) nextActiveSlideSwipe = 1\n    this.onButtonClick(direction, nextActiveSlideSwipe)\n  }\n}\ncustomElements.define('slider-component', SliderComponent);\n\n\n\nclass BaseProductCardSlider {\n  constructor(sliderEl) {\n    this.sliderEl = sliderEl;\n\n    this._inited = false;\n    this._listenersBound = false;\n\n    this.isRTL = this.sliderEl.getAttribute('dir') === 'rtl';\n    this.speed = parseInt(sliderEl.dataset.transitionDuration, 10) || 300;\n    this.autoplaySpeed = parseInt(sliderEl.dataset.autoplaySpeed, 10) || 5000;\n    this.autoplay = sliderEl.dataset.autoplay === \"true\";\n    this.loop = sliderEl.dataset.loop === \"true\";\n    this.showOnlyVariantsMedia = sliderEl.dataset.showOnlyVariantsMedia === \"true\";\n    this.slidesLoaded = false;\n    this.allSlides = null;\n    this.firstSlideIndex = 0;\n\n    this.swiperInstance = null;\n    this.swiperBaseConfiguration = null;\n\n    this._paginationEl = null;\n    this._nextEl = null;\n    this._prevEl = null;\n\n    this._onMouseEnterAutoplay = null;\n    this._onMouseLeaveAutoplay = null;\n    this._onNextClick = null;\n    this._onPrevClick = null;\n    this._onCardClickBlock = null;\n    this._onSwatchChange = null;\n\n    this._onHoverLoad = null;\n    this._onHoverMove = null;\n    this._onHoverLeave = null;\n    this._onResize = null;\n  }\n\n  init() {\n    if (this._inited) return;\n    this._inited = true;\n\n    this._paginationEl = this.sliderEl.querySelector('.swiper-pagination');\n    this._nextEl = this.sliderEl.querySelector('.swiper-button-next');\n    this._prevEl = this.sliderEl.querySelector('.swiper-button-prev');\n\n    this.swiperBaseConfiguration = {\n      a11y: { slideRole: 'listitem' },\n      slidesPerView: 'auto',\n      loop: this.loop,\n      pagination: {\n        el: this._paginationEl,\n        type: 'bullets'\n      },\n      navigation: {\n        nextEl: this._nextEl,\n        prevEl: this._prevEl,\n      },\n      speed: this.speed,\n      lazy: { loadPrevNext: true },\n      roundLengths: false,\n    };\n\n    nextFrame(() => {\n      runIdle(() => {\n        this.initializeSwiperInstance();\n        this.configureListeners();\n      }, { timeout: 2000 });\n    });\n  }\n\n  destroy() {\n    this._detachListeners();\n\n    if (this.swiperInstance) {\n      try { this.swiperInstance.destroy(false, true); } catch (e) {}\n      this.swiperInstance = null;\n    }\n\n    this._inited = false;\n    this._listenersBound = false;\n  }\n\n  _detachListeners() {\n    if (!this._listenersBound) return;\n    this._listenersBound = false;\n\n    if (this._onMouseEnterAutoplay) this.sliderEl.removeEventListener('mouseenter', this._onMouseEnterAutoplay);\n    if (this._onMouseLeaveAutoplay) this.sliderEl.removeEventListener('mouseleave', this._onMouseLeaveAutoplay);\n\n    if (this._nextEl && this._onNextClick) this._nextEl.removeEventListener('click', this._onNextClick);\n    if (this._prevEl && this._onPrevClick) this._prevEl.removeEventListener('click', this._onPrevClick);\n\n    const card = this.sliderEl.closest('.card');\n    if (card && this._onCardClickBlock) card.removeEventListener('click', this._onCardClickBlock, true);\n\n    if (this._onSwatchChange) this.sliderEl.removeEventListener('color-swatch:change', this._onSwatchChange);\n\n    if (this._onHoverLoad) this.sliderEl.removeEventListener('mouseenter', this._onHoverLoad);\n    if (this._onHoverMove) this.sliderEl.removeEventListener('mousemove', this._onHoverMove);\n    if (this._onHoverLeave) this.sliderEl.removeEventListener('mouseleave', this._onHoverLeave);\n\n    if (this._onResize) window.removeEventListener('resize', this._onResize);\n  }\n\n  updateSwiper() {\n    if (!this.swiperInstance) return;\n    this.swiperInstance.destroy(false, true);\n    this.initializeSwiperInstance?.();\n  }\n\n  getAllSlides() {\n    const template = this.sliderEl.querySelector('.all-product-card-images-template');\n    if (!template || !template.content) return [];\n    const allSlidesTemplate = template.content.cloneNode(true);\n    return [...allSlidesTemplate.querySelectorAll('.swiper-slide')];\n  }\n\n  loadSlides() {\n    const activeSwatch = this.sliderEl.closest('.card')?.querySelector('.active-swatch');\n\n    if (this.showOnlyVariantsMedia && activeSwatch) {\n      const activeSwatchColor = activeSwatch.dataset.colorName;\n      const activeSwatchFirstMedia = parseNode(activeSwatch.dataset.firstMediaNode).dataset.id;\n      this.showSlidesByVariant(activeSwatchColor, activeSwatchFirstMedia);\n    } else {\n      this.showAllSlides();\n    }\n\n    this.slidesLoaded = true;\n  }\n\n  adaptModelViewersSize() {\n    requestAnimationFrame(() => {\n      this.sliderEl.querySelectorAll('model-viewer').forEach(model => {\n        const slide = model.closest('.swiper-slide');\n        if (!slide) return;\n        const rect = slide.getBoundingClientRect();\n        model.style.height = `${rect.height}px`;\n        model.style.width = `${rect.width}px`;\n      });\n    });\n  }\n\n  showAllSlides() {\n    if (!this.allSlides) this.allSlides = this.getAllSlides();\n\n    const sliderWrapper = this.sliderEl.querySelector('.swiper-wrapper');\n    if (!sliderWrapper) return;\n\n    const firstPreloadedSlide = this.sliderEl.querySelector('#card__product-image--1');\n\n    if (firstPreloadedSlide) {\n      const allSlidesWithoutFirst = this.allSlides.filter(slide => slide.dataset.id !== firstPreloadedSlide.dataset.id);\n      sliderWrapper.append(...allSlidesWithoutFirst);\n      this.adaptModelViewersSize();\n      this.updateSwiper();\n    } else {\n      this.replaceSlides(sliderWrapper, this.allSlides);\n    }\n\n    this.sliderEl.style.setProperty('--total-slides', String(this.allSlides.length));\n    this.slidesLoaded = true;\n    this.firstSlideIndex = 0;\n  }\n\n  showSlidesByVariant(colorName, firstMediaId) {\n    if (!this.allSlides) this.allSlides = this.getAllSlides();\n\n    const sliderWrapper = this.sliderEl.querySelector('.swiper-wrapper');\n    if (!sliderWrapper) return;\n\n    let variantSlides = this.allSlides.filter(slide =>\n      slide.dataset.swiperSlideAlt?.includes(`(${colorName})`) ||\n      slide.dataset.swiperSlideAlt?.includes(`(${capitalizeFirstLetter(colorName)})`) ||\n      slide.dataset.showSlide == 'true'\n    );\n\n    let firstSlideIndex = 0;\n\n    if (!variantSlides.length) {\n      const colorSwatchMedia = this.allSlides.find(slide => slide.dataset.id == firstMediaId);\n      if (!colorSwatchMedia) {\n        this.showAllSlides();\n        return;\n      }\n      variantSlides = [colorSwatchMedia];\n    }\n\n    if (firstMediaId && variantSlides.length > 1) {\n      const firstSlide = variantSlides.find(slide => slide.dataset.id == firstMediaId);\n      if (firstSlide) firstSlideIndex = variantSlides.indexOf(firstSlide);\n    }\n\n    const freshSlides = variantSlides.map(s => s.cloneNode(true));\n    this.replaceSlides(sliderWrapper, freshSlides);\n\n    if (this.loop && this.swiperInstance) {\n      this.swiperInstance.slideToLoop(firstSlideIndex, 0);\n    } else {\n      this.swiperInstance.slideTo(firstSlideIndex, 0);\n    }\n\n    this.sliderEl.style.setProperty('--total-slides', String(variantSlides.length));\n    this.slidesLoaded = false;\n    this.firstSlideIndex = firstSlideIndex;\n  }\n\n  replaceSlides(sliderWrapper, slides) {\n    if (!this.swiperInstance) {\n      sliderWrapper.replaceChildren(...slides);\n      return;\n    }\n\n    const { pagination, navigation } = this.swiperInstance;\n    sliderWrapper.replaceChildren(...slides);\n    this.updateSwiper();\n\n    if (slides.length == 1) {\n      pagination.el?.classList.add('swiper-pagination-hidden');\n      navigation.prevEl?.classList.add('swiper-button-hidden');\n      navigation.nextEl?.classList.add('swiper-button-hidden');\n    } else {\n      pagination.el?.classList.remove('swiper-pagination-hidden');\n      navigation.prevEl?.classList.remove('swiper-button-hidden');\n      navigation.nextEl?.classList.remove('swiper-button-hidden');\n    }\n  }\n\n  configureListeners() {\n    if (!this.swiperInstance || this._listenersBound) return;\n    this._listenersBound = true;\n\n    this.isSliding = false;\n\n    if (window.innerWidth > 768 && this.autoplay) {\n      this._onMouseEnterAutoplay = () => {\n        this.swiperInstance.params.autoplay = {\n          delay: this.autoplaySpeed,\n          disableOnInteraction: false\n        };\n        this.swiperInstance.autoplay.start();\n      };\n      this._onMouseLeaveAutoplay = () => {\n        if (this.swiperInstance.autoplay?.running) this.swiperInstance.autoplay.stop();\n      };\n\n      this.sliderEl.addEventListener('mouseenter', this._onMouseEnterAutoplay);\n      this.sliderEl.addEventListener('mouseleave', this._onMouseLeaveAutoplay);\n    }\n\n    if (this._nextEl) {\n      this._onNextClick = () => {\n        if (!this.slidesLoaded) this.loadSlides();\n        setTimeout(() => this.swiperInstance.slideNext(), 50);\n      };\n      this._nextEl.addEventListener('click', this._onNextClick);\n    }\n\n    if (this._prevEl) {\n      this._onPrevClick = () => {\n        if (!this.slidesLoaded) this.loadSlides();\n        setTimeout(() => this.swiperInstance.slidePrev(), 50);\n      };\n      this._prevEl.addEventListener('click', this._onPrevClick);\n    }\n\n    this.swiperInstance.on('sliderFirstMove', () => {\n      const diffX = this.swiperInstance.touches.currentX - this.swiperInstance.touches.startX;\n      const diffY = this.swiperInstance.touches.currentY - this.swiperInstance.touches.startY;\n\n      if (!this.slidesLoaded) {\n        this.loadSlides();\n\n        let direction;\n        if (Math.abs(diffX) > Math.abs(diffY)) direction = diffX > 0 ? 'right' : 'left';\n\n        setTimeout(() => {\n          direction === 'left'\n            ? this.swiperInstance.slideNext(300)\n            : this.swiperInstance.slidePrev(300);\n        }, 50);\n      }\n    });\n\n    this.swiperInstance.on('slideChange', (e) => {\n      const enableAutoplayMedia = this.sliderEl.dataset.enableAutoplayMedia === \"true\";\n      const currentSlide = e.slides[e.activeIndex]?.querySelector('.card__image');\n      const previousSlide = e.slides[e.previousIndex]?.querySelector('.card__image');\n      this.isSliding = true;\n\n      setTimeout(() => { this.isSliding = false; }, 100);\n\n      if (e.activeIndex !== e.previousIndex) {\n        window.pauseMedia(previousSlide, enableAutoplayMedia);\n      }\n      window.playMedia(currentSlide, enableAutoplayMedia, true);\n    });\n\n    if (this.autoplay) {\n      this.sliderEl.addEventListener('mouseenter', () => {\n        if (!this.slidesLoaded) this.loadSlides();\n      }, { passive: true });\n    }\n\n    const card = this.sliderEl.closest('.card');\n    if (card) {\n      this._onCardClickBlock = (e) => {\n        if (this.isSliding) {\n          e.preventDefault();\n          e.stopImmediatePropagation();\n        }\n      };\n      card.addEventListener('click', this._onCardClickBlock, true);\n    }\n\n    this._onSwatchChange = (event) => {\n      if (event.detail.colorName === 'all') this.showAllSlides();\n      else this.showSlidesByVariant(event.detail.colorName, event.detail.firstMediaId);\n      this.slidesLoaded = true;\n    };\n    this.sliderEl.addEventListener('color-swatch:change', this._onSwatchChange);\n  }\n}\n\nclass ProductCardSlider extends BaseProductCardSlider {\n  initializeSwiperInstance() {\n    this.swiperInstance = new Swiper(this.sliderEl, {\n      ...this.swiperBaseConfiguration,\n    });\n  }\n}\n\nclass ProductCardHoverGallery extends BaseProductCardSlider {\n  isTouchDevice() {\n    return 'ontouchstart' in window || navigator.maxTouchPoints > 0;\n  }\n\n  initializeSwiperInstance() {\n    this.swiperInstance = new Swiper(this.sliderEl, {\n      ...this.swiperBaseConfiguration,\n      loop: false,\n      allowTouchMove: this.isTouchDevice(),\n      simulateTouch: this.isTouchDevice(),\n    });\n  }\n\n  configureListeners() {\n    super.configureListeners();\n\n    this._onHoverLoad = () => {\n      if (!this.slidesLoaded) this.loadSlides();\n    };\n    this.sliderEl.addEventListener('mouseenter', this._onHoverLoad, { passive: true });\n\n    this._onHoverMove = (e) => {\n      if (!this.swiperInstance) return;\n\n      const totalSlidesCount = this.sliderEl.querySelectorAll('.swiper-slide').length;\n      const sliderViewportWidth = this.sliderEl.offsetWidth;\n      const rect = this.sliderEl.getBoundingClientRect();\n      const mouseX = e.clientX - rect.left;\n      const percentage = mouseX / sliderViewportWidth;\n\n      let targetIndex = this.isRTL\n        ? Math.floor((1 - percentage) * totalSlidesCount)\n        : Math.floor(percentage * totalSlidesCount);\n\n      this.swiperInstance.slideTo(targetIndex, 0);\n    };\n    this.sliderEl.addEventListener('mousemove', this._onHoverMove, { passive: true });\n\n    this._onHoverLeave = () => {\n      if (!this.swiperInstance) return;\n      this.swiperInstance.slideTo(this.firstSlideIndex || 0, 0);\n    };\n    this.sliderEl.addEventListener('mouseleave', this._onHoverLeave, { passive: true });\n\n    this._onResize = () => {\n      if (!this.swiperInstance) return;\n      this.swiperInstance.allowTouchMove = this.isTouchDevice();\n      this.swiperInstance.simulateTouch = this.isTouchDevice();\n    };\n    window.addEventListener('resize', this._onResize, { passive: true });\n  }\n}\n\nclass ProductCardScrollGallery extends BaseProductCardSlider {\n  initializeSwiperInstance() {\n    this.swiperInstance = new Swiper(this.sliderEl, {\n      ...this.swiperBaseConfiguration,\n      loop: true,\n      allowTouchMove: true,\n      simulateTouch: true,\n    });\n  }\n\n  configureListeners() {\n    super.configureListeners();\n    const loadWhenReady = () => {\n      if (!this.slidesLoaded) this.loadSlides();\n    };\n    if (typeof requestIdleCallback !== 'undefined') {\n      requestIdleCallback(loadWhenReady, { timeout: 2500 });\n    } else {\n      setTimeout(loadWhenReady, 2100);\n    }\n  }\n}\n\nclass SwiperGallery extends HTMLElement {\n  constructor() {\n    super();\n\n    this._instance = null;\n    this._io = null;\n    this._initScheduled = false;\n\n    this._onFirstIntent = this._onFirstIntent.bind(this);\n    this._initNow = this._initNow.bind(this);\n  }\n\n  connectedCallback() {\n    this.addEventListener('pointerenter', this._onFirstIntent, { once: true });\n    this.addEventListener('pointerdown', this._onFirstIntent, { once: true });\n    this.addEventListener('focusin', this._onFirstIntent, { once: true });\n    this.addEventListener('touchstart', this._onFirstIntent, { once: true, passive: true });\n\n    if ('IntersectionObserver' in window) {\n      this._io = new IntersectionObserver((entries) => {\n        const e = entries[0];\n        if (e && e.isIntersecting) {\n          this._io.disconnect();\n          this._io = null;\n          this._initNow();\n        }\n      }, { root: null, rootMargin: '300px 0px', threshold: 0.01 });\n\n      this._io.observe(this);\n    } else {\n      this._initNow();\n    }\n  }\n\n  disconnectedCallback() {\n    if (this._io) {\n      this._io.disconnect();\n      this._io = null;\n    }\n    if (this._instance) {\n      this._instance.destroy();\n      this._instance = null;\n    }\n  }\n\n  _onFirstIntent() {\n    this._initNow();\n  }\n\n  _initNow() {\n    if (this._instance || this._initScheduled) return;\n    this._initScheduled = true;\n\n    this._initScheduled = false;\n\n    if (this.classList.contains('swiper-product-card--scroll-gallery')) {\n      this._instance = new ProductCardScrollGallery(this);\n      this._instance.init();\n      return;\n    }\n\n    if (this.classList.contains('swiper-product-card--slider')) {\n      this._instance = new ProductCardSlider(this);\n      this._instance.init();\n      return;\n    }\n\n    if (this.classList.contains('swiper-product-card--hover-gallery')) {\n      this._instance = new ProductCardHoverGallery(this);\n      this._instance.init();\n      return;\n    }\n  }\n}\ncustomElements.define('swiper-gallery', SwiperGallery);\n\n\nfunction initStoriesSlideshow() {\n  const storiesRunIdle = (fn, timeout = 1500) => {\n    if ('requestIdleCallback' in window) {\n      requestIdleCallback(fn, { timeout });\n    } else {\n      setTimeout(fn, 0);\n    }\n  };\n\n  function playProductCardsMedia(container) {\n    if (!container) return;\n    container.querySelectorAll('product-card-image .card__image').forEach((media) => {\n      playMedia(media);\n    });\n  }\n\n  function pauseProductCardsMedia(container) {\n    if (!container) return;\n    container.querySelectorAll('product-card-image .card__image').forEach((media) => {\n      pauseMedia(media);\n    });\n  }\n\n  const STATE = new WeakMap();\n\n  function getState(root) {\n    let s = STATE.get(root);\n    if (!s) {\n      s = {\n        inited: false,\n\n        root,\n        autoplaySpeed: 8000,\n\n        mainSliderEl: null,\n        storiesSlider: null,\n        thumbnailsWrapper: null,\n\n        thumbnails: [],\n        slides: [],\n        mainSwiper: null,\n        innerSwipers: [],\n        autoplayTimeout: null,\n        autoplayRemainingTime: 0,\n        autoplayStartTime: 0,\n\n        holdTimeout: null,\n        isHolding: false,\n        wasHolding: false,\n        swipe: false,\n        onDocClick: null,\n        onKeyUp: null,\n        onResize: null,\n        thumbsIO: null,\n      };\n      STATE.set(root, s);\n    }\n    return s;\n  }\n\n  function clearAutoplayTimeout(s) {\n    if (s.autoplayTimeout) {\n      clearTimeout(s.autoplayTimeout);\n      s.autoplayTimeout = null;\n    }\n  }\n\n  function resetBulletProgress(innerSwiper) {\n    if (!innerSwiper?.el) return;\n  \n    const active = innerSwiper.el.querySelector('.swiper-pagination-bullet-active');\n    if (!active) return;\n  \n    active.classList.remove('paused');\n  \n    active.classList.remove('swiper-pagination-bullet-active');\n    void active.offsetWidth;\n    active.classList.add('swiper-pagination-bullet-active');\n  }\n\n  function isOpen(s) {\n    return !!(s.storiesSlider && s.storiesSlider.classList.contains('stories-slider-in'));\n  }\n\n  function closeStories(s) {\n    if (!s) return;\n\n    try {\n      if (s.mainSwiper) {\n        s.mainSwiper.autoplay?.stop?.();\n        s.mainSwiper.allowTouchMove = false;\n      }\n    } catch (e) {}\n\n    s.innerSwipers.forEach((sw) => {\n      try {\n        sw?.autoplay?.stop?.();\n        sw.allowTouchMove = false;\n      } catch (e) {}\n    });\n\n    clearAutoplayTimeout(s);\n\n    if (s.storiesSlider) {\n      s.storiesSlider.classList.remove('stories-slider-in');\n      s.storiesSlider.classList.add('visually-hidden');\n    }\n    document.body.classList.remove('hidden');\n\n    s.root.querySelectorAll('.stories__products.open').forEach((productsEl) => {\n      productsEl.classList.remove('open');\n      productsEl.closest('.swiper-story-inner')?.classList.remove('products-open');\n      pauseProductCardsMedia(productsEl);\n    });\n\n    s.root.querySelectorAll('.swiper-pagination-bullet.paused').forEach((b) => b.classList.remove('paused'));\n  }\n\n  function scheduleNextOuterSlideIfNeeded(s, innerSwiper, index) {\n    clearAutoplayTimeout(s);\n    s.autoplayRemainingTime = innerSwiper?.params?.autoplay?.delay || s.autoplaySpeed;\n    s.autoplayStartTime = Date.now();\n\n    s.autoplayTimeout = setTimeout(() => {\n      const activeOuterSlide = s.mainSwiper?.slides?.[s.mainSwiper.activeIndex];\n      const activeInnerSwiperEl = activeOuterSlide?.querySelector('.swiper-story-inner');\n      const productsOpen = activeInnerSwiperEl?.querySelector('.stories__products.open');\n\n      if (!productsOpen && innerSwiper?.isEnd) {\n        handleNextSlide(s, index);\n        try { innerSwiper.autoplay.stop(); } catch (e) {}\n      }\n    }, s.autoplayRemainingTime);\n  }\n\n  function delayedHandleNextSlide(s, innerSwiper, index) {\n    if (!innerSwiper) return;\n    if (innerSwiper._endTimeout) return;\n\n    innerSwiper._endTimeout = true;\n    scheduleNextOuterSlideIfNeeded(s, innerSwiper, index);\n\n    setTimeout(() => { innerSwiper._endTimeout = false; }, 0);\n  }\n\n  function handleNextSlide(s, index) {\n    if (!s.mainSwiper) return;\n    if (!s.slides?.length) return;\n\n    if (index < s.slides.length - 1) {\n      s.mainSwiper.slideNext();\n      const next = s.innerSwipers[index + 1];\n      if (next) resetBulletProgress(next);\n    } else {\n      s.mainSwiper.slideTo(0, 0);\n    }\n  }\n\n  function customAutoplayResume(s) {\n    const activeOuterSlide = s.mainSwiper?.slides?.[s.mainSwiper.activeIndex];\n    const activeInnerSwiperEl = activeOuterSlide?.querySelector('.swiper-story-inner');\n    const activeInnerSwiper = activeInnerSwiperEl?.swiper;\n    if (!activeInnerSwiper) return;\n\n    activeInnerSwiper.params.autoplay.delay = s.autoplayRemainingTime || s.autoplaySpeed;\n    activeInnerSwiper.autoplay.start();\n\n    if (activeInnerSwiper.slides.length === 1) {\n      clearAutoplayTimeout(s);\n      s.autoplayRemainingTime = activeInnerSwiper.params.autoplay.delay;\n      s.autoplayStartTime = Date.now();\n\n      s.autoplayTimeout = setTimeout(() => {\n        const productsOpen = activeInnerSwiperEl.querySelector('.stories__products.open');\n        if (!productsOpen) {\n          handleNextSlide(s, s.mainSwiper.realIndex);\n        }\n      }, s.autoplayRemainingTime);\n    }\n  }\n\n  function ensureSwipersCreated(s) {\n    if (s.mainSwiper && s.innerSwipers.length) return;\n\n    s.mainSliderEl = s.root.querySelector('.swiper-stories');\n    s.storiesSlider = s.root.querySelector('.stories-slider');\n    s.slides = Array.from(s.root.querySelectorAll('.stories-slides'));\n\n    if (!s.mainSliderEl || !s.storiesSlider || !s.slides.length) return;\n\n    // Create main swiper\n    s.mainSwiper = new Swiper(s.mainSliderEl, {\n      slidesPerView: 'auto',\n      centeredSlides: true,\n      modules: [EffectCarousel],\n      loop: false,\n      effect: 'carousel',\n      carouselEffect: {\n        opacityStep: 0.33,\n        scaleStep: 0.09,\n        sideSlides: 8,\n      },\n      on: {\n        slideChange: function () {\n          const oldIndex = s.mainSwiper.previousIndex;\n          const newIndex = s.mainSwiper.realIndex;\n\n          const oldInner = s.innerSwipers[oldIndex];\n          const nextInner = s.innerSwipers[newIndex];\n\n          if (oldInner) {\n            try {\n              oldInner.autoplay.stop();\n              oldInner.slideTo(0, 0);\n            } catch (e) {}\n          }\n\n          if (!nextInner) return;\n\n          nextInner.slideTo(0, 0);\n          resetBulletProgress(nextInner);\n\n          nextInner.params.autoplay.delay = s.autoplaySpeed;\n          s.autoplayRemainingTime = s.autoplaySpeed;\n          s.mainSliderEl.style.setProperty('--active-slide-duration', `${s.autoplaySpeed / 1000}s`);\n\n          nextInner.autoplay.start();\n          s.autoplayStartTime = Date.now();\n\n          clearAutoplayTimeout(s);\n          s.autoplayTimeout = setTimeout(() => {\n            const activeOuterSlide = s.mainSwiper.slides[s.mainSwiper.activeIndex];\n            const activeInnerSwiperEl = activeOuterSlide?.querySelector('.swiper-story-inner');\n            const productsOpen = activeInnerSwiperEl?.querySelector('.stories__products.open');\n\n            if (!productsOpen && nextInner.isEnd && s.mainSwiper.realIndex === newIndex) {\n              handleNextSlide(s, newIndex);\n            }\n          }, s.autoplayRemainingTime);\n        }\n      }\n    });\n\n    // Create all inner swipers (HEAVY) \u2014 but only now, on user click/open\n    s.innerSwipers = [];\n    s.slides.forEach((slide, index) => {\n      const innerEl = slide.querySelector('.swiper-story-inner');\n      if (!innerEl) {\n        s.innerSwipers.push(null);\n        return;\n      }\n\n      const innerSwiper = new Swiper(innerEl, {\n        slidesPerView: 1,\n        spaceBetween: 0,\n        loop: false,\n        pagination: {\n          el: innerEl.querySelector('.stories-slider-pagination'),\n          type: 'bullets',\n          clickable: true,\n        },\n        autoplay: {\n          delay: s.autoplaySpeed,\n          disableOnInteraction: false,\n        },\n        observer: true,\n        observeParents: true,\n        observeSlideChildren: true\n      });\n\n      s.innerSwipers.push(innerSwiper);\n\n      innerSwiper.autoplay.stop();\n      innerSwiper.allowTouchMove = false;\n\n      let localAutoplayStartTime = null;\n      innerSwiper.on('autoplayStart', () => { localAutoplayStartTime = Date.now(); });\n      innerSwiper.on('autoplayStop', () => {\n        if (!localAutoplayStartTime) return;\n        const elapsed = Date.now() - localAutoplayStartTime;\n        s.autoplayRemainingTime = innerSwiper.params.autoplay.delay - elapsed;\n        if (s.autoplayRemainingTime < 0) s.autoplayRemainingTime = 0;\n      });\n\n      innerSwiper.on('slideChange', () => {\n        const isActiveOuter = (s.mainSwiper.realIndex === index);\n        if (!isActiveOuter) {\n          innerSwiper.autoplay.stop();\n          return;\n        }\n\n        s.mainSliderEl.style.setProperty('--active-slide-duration', `${s.autoplaySpeed / 1000}s`);\n        innerSwiper.params.autoplay.delay = s.autoplaySpeed;\n\n        resetBulletProgress(innerSwiper); \n\n        innerSwiper.autoplay.start();\n\n        if (innerSwiper.slides.length === 1) {\n          clearAutoplayTimeout(s);\n          s.autoplayRemainingTime = innerSwiper.params.autoplay.delay;\n          s.autoplayStartTime = Date.now();\n\n          s.autoplayTimeout = setTimeout(() => {\n            const productsOpen = slide.querySelector('.stories__products.open');\n            if (!productsOpen) handleNextSlide(s, index);\n          }, s.autoplayRemainingTime);\n        } else if (innerSwiper.isEnd) {\n          delayedHandleNextSlide(s, innerSwiper, index);\n        }\n      });\n\n      // bind per-slide buttons & products\n      slide.querySelectorAll('.swiper-slide').forEach((swSlide) => {\n        swSlide.querySelector('.stories-slider-button-next')?.addEventListener('click', (e) => {\n          if (s.wasHolding || s.swipe) {\n            e.preventDefault();\n            e.stopPropagation();\n            return;\n          }\n          !innerSwiper.isEnd ? innerSwiper.slideNext() : handleNextSlide(s, index);\n        });\n\n        swSlide.querySelector('.stories-slider-button-prev')?.addEventListener('click', (e) => {\n          if (s.wasHolding) {\n            e.preventDefault();\n            e.stopPropagation();\n            return;\n          }\n\n          if (!innerSwiper.isBeginning) {\n            innerSwiper.slidePrev();\n          } else {\n            s.mainSwiper.slidePrev();\n            const prevInner = s.innerSwipers[s.mainSwiper.realIndex];\n            if (prevInner) resetBulletProgress(prevInner);\n          }\n        });\n\n        swSlide.querySelectorAll('.stories-slider-button').forEach((btn) => {\n          btn.addEventListener('pointerdown', () => handleHoldStart(s, innerSwiper));\n          btn.addEventListener('pointerup',   () => handleHoldEnd(s, innerSwiper));\n        });\n\n        const productTitle = swSlide.querySelector('.stories__products-title');\n        const productsEl = swSlide.querySelector('.stories__products');\n\n        productTitle?.addEventListener('click', () => {\n          const isActiveOuter = (s.mainSwiper.realIndex === index);\n          if (!isActiveOuter) return;\n\n          productsEl?.classList.toggle('open');\n          productsEl?.closest('.swiper-story-inner')?.classList.toggle('products-open');\n\n          const bulletActive = swSlide.closest('.swiper-story-inner')\n            ?.querySelector('.swiper-pagination-bullet-active');\n\n          if (productsEl?.classList.contains('open')) {\n            productsEl.style.transitionDelay = '0s';\n            innerSwiper.autoplay.stop();\n            bulletActive?.classList.add('paused');\n            s.mainSwiper.allowTouchMove = false;\n            playProductCardsMedia(productsEl);\n          } else {\n            bulletActive?.classList.remove('paused');\n            customAutoplayResume(s);\n            s.mainSwiper.allowTouchMove = true;\n\n            setTimeout(() => {\n              if (productsEl && productsEl.style.transitionDelay === '0s') {\n                productsEl.style.removeProperty('transition-delay');\n              }\n            }, 100);\n\n            pauseProductCardsMedia(productsEl);\n          }\n        });\n      });\n    });\n\n    if (!s.onDocClick) {\n      s.onDocClick = (e) => {\n        if (!isOpen(s)) return;\n        if (e.target.closest('.video-controls')) return;\n\n        if (\n          e.target.closest('.stories-slider-close-button') ||\n          ((e.target.classList?.contains('swiper-stories') || e.target.classList?.contains('swiper-wrapper-stories')) &&\n            !s.storiesSlider.querySelector('.products-open'))\n        ) {\n          closeStories(s);\n          return;\n        }\n\n        const activeOuterSlide = s.mainSwiper?.slides?.[s.mainSwiper.activeIndex];\n        if (!activeOuterSlide) return;\n\n        const activeInnerEl = activeOuterSlide.querySelector('.swiper-story-inner');\n        const activeInner = activeInnerEl?.swiper;\n        if (!activeInner) return;\n\n        const activeInnerSlide = activeInner.slides[activeInner.activeIndex];\n        if (!activeInnerSlide) return;\n\n        const productsEl = activeInnerSlide.querySelector('.stories__products');\n        const bulletActive = activeInnerEl.querySelector('.swiper-pagination-bullet-active');\n\n        const isClickInsideProducts = e.target.closest('.stories__products');\n        const isClickOnTitle = e.target.closest('.stories__products-title');\n\n        if (productsEl && productsEl.classList.contains('open') && !isClickInsideProducts && !isClickOnTitle) {\n          productsEl.classList.remove('open');\n          productsEl.closest('.swiper-story-inner')?.classList.remove('products-open');\n          bulletActive?.classList.remove('paused');\n          s.mainSwiper.allowTouchMove = true;\n          customAutoplayResume(s);\n          pauseProductCardsMedia(productsEl);\n        }\n\n        if (!e.target.closest('.stories-slider-button') && !e.target.closest('.stories__products') && !e.target.closest('.stories__products-title')) {\n          const clicked = s.mainSwiper.clickedSlide;\n          if (clicked && !clicked.classList.contains('swiper-slide-active')) {\n            const idx = Array.from(s.mainSwiper.slides).indexOf(clicked);\n            if (idx >= 0) s.mainSwiper.slideTo(idx, 300);\n          }\n        }\n      };\n\n      document.addEventListener('click', s.onDocClick, { passive: true });\n    }\n\n    if (!s.onKeyUp) {\n      s.onKeyUp = (event) => {\n        if (!isOpen(s)) return;\n        if (event.code && event.code.toUpperCase() === 'ESCAPE') closeStories(s);\n      };\n      document.addEventListener('keyup', s.onKeyUp);\n    }\n\n    if (!s.onResize) {\n      let resizeTimeout;\n      s.onResize = () => {\n        clearTimeout(resizeTimeout);\n        resizeTimeout = setTimeout(() => {\n          if (!s.mainSwiper) return;\n          try {\n            s.mainSwiper.destroy(true, true);\n          } catch (e) {}\n          s.mainSwiper = null;\n\n          storiesRunIdle(() => {\n            s.mainSwiper = new Swiper(s.mainSliderEl, {\n              slidesPerView: 'auto',\n              centeredSlides: true,\n              modules: [EffectCarousel],\n              loop: false,\n              effect: 'carousel',\n              carouselEffect: {\n                opacityStep: 0.33,\n                scaleStep: 0.09,\n                sideSlides: 8,\n              },\n              on: {\n                slideChange: function () {\n                  const oldIndex = s.mainSwiper.previousIndex;\n                  const newIndex = s.mainSwiper.realIndex;\n\n                  const oldInner = s.innerSwipers[oldIndex];\n                  const nextInner = s.innerSwipers[newIndex];\n\n                  if (oldInner) {\n                    try { oldInner.autoplay.stop(); oldInner.slideTo(0, 0); } catch (e) {}\n                  }\n\n                  if (!nextInner) return;\n\n                  nextInner.slideTo(0, 0);\n                  resetBulletProgress(nextInner);\n\n                  nextInner.params.autoplay.delay = s.autoplaySpeed;\n                  s.autoplayRemainingTime = s.autoplaySpeed;\n                  s.mainSliderEl.style.setProperty('--active-slide-duration', `${s.autoplaySpeed / 1000}s`);\n\n                  const bulletActive = nextInner.el.querySelector('.swiper-pagination-bullet-active');\n                  if (bulletActive) {\n                    bulletActive.classList.remove('swiper-pagination-bullet-active');\n                    void bulletActive.offsetWidth;\n                    bulletActive.classList.add('swiper-pagination-bullet-active');\n                  }\n\n                  nextInner.autoplay.start();\n                  s.autoplayStartTime = Date.now();\n\n                  clearAutoplayTimeout(s);\n                  s.autoplayTimeout = setTimeout(() => {\n                    const activeOuterSlide = s.mainSwiper.slides[s.mainSwiper.activeIndex];\n                    const activeInnerSwiperEl = activeOuterSlide?.querySelector('.swiper-story-inner');\n                    const productsOpen = activeInnerSwiperEl?.querySelector('.stories__products.open');\n\n                    if (!productsOpen && nextInner.isEnd && s.mainSwiper.realIndex === newIndex) {\n                      handleNextSlide(s, newIndex);\n                    }\n                  }, s.autoplayRemainingTime);\n                }\n              }\n            });\n          }, 1200);\n        }, 200);\n      };\n\n      window.addEventListener('resize', s.onResize);\n    }\n  }\n\n  function handleHoldStart(s, innerSwiper) {\n    s.holdTimeout = setTimeout(() => {\n      s.isHolding = true;\n      s.wasHolding = true;\n\n      const elapsed = Date.now() - s.autoplayStartTime;\n      s.autoplayRemainingTime = Math.max(innerSwiper.params.autoplay.delay - elapsed, 0);\n\n      innerSwiper.autoplay.pause();\n      clearAutoplayTimeout(s);\n\n      const activeOuterSlide = s.mainSwiper?.slides?.[s.mainSwiper.activeIndex];\n      const activeInnerEl = activeOuterSlide?.querySelector('.swiper-story-inner');\n      const bulletActive = activeInnerEl?.querySelector('.swiper-pagination-bullet-active');\n      bulletActive?.classList.add('paused');\n\n      s.mainSwiper.allowTouchMove = false;\n    }, 200);\n  }\n\n  function handleHoldEnd(s, innerSwiper) {\n    clearTimeout(s.holdTimeout);\n    if (!s.isHolding) return;\n    s.isHolding = false;\n\n    const activeOuterSlide = s.mainSwiper?.slides?.[s.mainSwiper.activeIndex];\n    const activeInnerEl = activeOuterSlide?.querySelector('.swiper-story-inner');\n    const bulletActive = activeInnerEl?.querySelector('.swiper-pagination-bullet-active');\n\n    s.mainSwiper.allowTouchMove = true;\n\n    s.autoplayStartTime = Date.now();\n    innerSwiper.autoplay.resume();\n    bulletActive?.classList.remove('paused');\n\n    setTimeout(() => { s.wasHolding = false; }, 150);\n  }\n\n  function openStoriesAtIndex(s, index) {\n    if (!s.storiesSlider) s.storiesSlider = s.root.querySelector('.stories-slider');\n    if (!s.storiesSlider) return;\n\n    s.storiesSlider.classList.add('stories-slider-in');\n    s.storiesSlider.classList.remove('visually-hidden');\n    document.body.classList.add('hidden');\n\n    ensureSwipersCreated(s);\n\n    if (!s.mainSwiper) return;\n\n    // reset all inners\n    s.innerSwipers.forEach((sw) => {\n      if (!sw) return;\n      try {\n        sw.autoplay.stop();\n        sw.slideTo(0, 0);\n      } catch (e) {}\n    });\n\n    s.mainSwiper.slideTo(index, 0);\n\n    const inner = s.innerSwipers[index];\n    if (!inner) return;\n\n    inner.slideTo(0, 0);\n    resetBulletProgress(inner);\n    inner.params.autoplay.delay = s.autoplaySpeed;\n\n    if (!isOpen(s)) return;\n\n    inner.autoplay.start();\n    s.autoplayRemainingTime = inner.params.autoplay.delay;\n    s.autoplayStartTime = Date.now();\n\n    clearAutoplayTimeout(s);\n\n    setTimeout(() => {\n      if (!inner.slides?.length) return;\n\n      if (inner.slides.length === 1) {\n        s.autoplayTimeout = setTimeout(() => {\n          const productsOpen = s.root.querySelector('.stories__products.open');\n          if (!productsOpen) handleNextSlide(s, index);\n        }, s.autoplayRemainingTime);\n      } else if (inner.isEnd) {\n        delayedHandleNextSlide(s, inner, index);\n      }\n    }, 100);\n  }\n\n  function setupThumbnailsAnimationIO(s) {\n    if (!s.thumbnailsWrapper) return;\n\n    if (s.thumbsIO) {\n      try { s.thumbsIO.disconnect(); } catch (e) {}\n      s.thumbsIO = null;\n    }\n\n    s.thumbsIO = new IntersectionObserver((entries) => {\n      entries.forEach((entry) => {\n        const thumbs = entry.target.querySelectorAll('.stories-slideshow__thumbnail');\n        if (entry.isIntersecting) {\n          thumbs.forEach((thumb, idx) => {\n            setTimeout(() => thumb.classList.add('visible'), idx * 2000);\n          });\n        } else {\n          thumbs.forEach((thumb) => thumb.classList.remove('visible'));\n        }\n      });\n    }, { threshold: 0.9 });\n\n    s.thumbsIO.observe(s.thumbnailsWrapper);\n  }\n\n  function initOne(root) {\n    const s = getState(root);\n    if (s.inited) return;\n    s.inited = true;\n\n    s.autoplaySpeed = Number(root.dataset.autoplaySpeed || 8000) || 8000;\n\n    s.thumbnailsWrapper = root.querySelector('.stories-slideshow__thumbnails');\n    s.thumbnails = Array.from(root.querySelectorAll('.stories-slideshow__thumbnail'));\n    s.storiesSlider = root.querySelector('.stories-slider');\n\n    if ('IntersectionObserver' in window) {\n      setupThumbnailsAnimationIO(s);\n    }\n\n    s.thumbnails.forEach((thumbnail, index) => {\n      thumbnail.addEventListener('click', (e) => {\n        e.preventDefault();\n\n        openStoriesAtIndex(s, index);\n      }, { passive: false });\n    });\n  }\n\n  document.querySelectorAll('.stories-slideshow').forEach((root) => {\n    if (root.dataset.storiesInited === '1') return;\n    root.dataset.storiesInited = '1';\n    initOne(root);\n  });\n}\n\ndocument.addEventListener('DOMContentLoaded', initStoriesSlideshow);\ndocument.addEventListener('shopify:section:load', initStoriesSlideshow);\n\nclass AddToCart extends HTMLElement {\n  constructor() {\n    super();\n\n    this.quickButton = this.querySelector('.quick') || this.closest('.quick');\n\n    if (this.classList.contains('cart-drawer')) this.miniCart = document.querySelector('cart-drawer');\n    if (this.classList.contains('cart-notification')) this.miniCart = document.querySelector('cart-notification');\n   \n    this.addEventListener('click', (event) => {\n      event.preventDefault()\n      if (this.querySelector('button[disabled]')) return\n      this.onClickHandler(this)\n    }) \n  }\n\n  onClickHandler() {\n    const variantId = this.dataset.variantId;\n\n    if (variantId) {\n      if (document.body.classList.contains('template-cart') ) {\n        Shopify.postLink(window.routes.cart_add_url, {\n          parameters: {\n            id: variantId,\n            quantity: 1\n          },\n        });\n        return;\n      }\n\n      this.setAttribute('disabled', true);\n      this.quickButton?.classList.add('loading');\n      this.classList.add('loading');\n\n      const sections = this.miniCart ? this.miniCart.getSectionsToRender().map((section) => section.id) : this.getSectionsToRender().map((section) => section.id);\n\n      const body = JSON.stringify({\n        id: variantId,\n        quantity: 1,\n        sections: sections,\n        sections_url: window.location.pathname\n      });\n\n      fetch(`${window.routes.cart_add_url}`, { ...fetchConfig('javascript'), body })\n        .then((response) => response.json())\n        .then((parsedState) => {\n          if (parsedState.status === 422) {\n             document.dispatchEvent(new CustomEvent('ajaxProduct:error', {\n                detail: {\n                  errorMessage: parsedState.description\n                }\n              }));\n           }\n           else {\n            this.miniCart && this.miniCart.renderContents(parsedState);\n            this.renderContents(parsedState)\n             document.dispatchEvent(new CustomEvent('ajaxProduct:added', {\n              detail: {\n                product: parsedState\n              }\n            }));\n          }\n        })\n        .catch((e) => {\n          console.error(e);\n        })\n        .finally(() => {\n          this.quickButton?.classList.remove('loading');\n          this.classList.remove('loading');\n          this.removeAttribute('disabled');\n        });\n    }\n  }\n  getSectionsToRender() {\n    let arraySections = []\n    if (window.innerWidth > 920 && document.querySelector('.header-without-sidebars')) {\n      arraySections = [\n        {\n          id: 'cart-drawer',\n          selector: '#CartDrawer'\n        },\n        {\n          id: 'menu-drawer',\n          selector: '#cart-icon-bubble-menu-drawer'\n        },\n        {\n          id: 'header',\n          selector: '#cart-icon-bubble-header'\n        },\n        {\n          id: 'secondary-sidebar',\n          selector: '#cart-icon-bubble-secondary-sidebar'\n        },\n        {\n          id: 'main-sidebar',\n          selector: '#cart-icon-bubble-main-sidebar'\n        }\n      ];\n    } else if (window.innerWidth > 920 && document.querySelector('.secondary-header-section')) {\n      arraySections = [\n        {\n          id: 'cart-drawer',\n          selector: '#CartDrawer'\n        },\n        {\n          id: 'menu-drawer',\n          selector: '#cart-icon-bubble-menu-drawer'\n        },\n        {\n          id: 'secondary-header',\n          selector: '#cart-icon-bubble-secondary-header'\n        },\n        {\n          id: 'secondary-sidebar',\n          selector: '#cart-icon-bubble-secondary-sidebar'\n        },\n        {\n          id: 'main-sidebar',\n          selector: '#cart-icon-bubble-main-sidebar'\n        }\n      ];\n    } else {\n      arraySections = [\n        {\n          id: 'cart-drawer',\n          selector: '#CartDrawer'\n        },\n        {\n          id: 'menu-drawer',\n          selector: '#cart-icon-bubble-menu-drawer'\n        },\n        {\n          id: 'mobile-header',\n          selector: '#cart-icon-bubble-mobile-header'\n        }\n      ];\n    }\n    return arraySections\n  }\n  renderContents(parsedState) {\n    this.productId = parsedState.id;\n    this.getSectionsToRender().forEach((section => {\n      const sectionElements = document.querySelectorAll(section.selector);\n      if(sectionElements) {\n        Array.from(sectionElements).forEach(sectionElement => {\n          sectionElement.innerHTML = this.getSectionInnerHTML(parsedState.sections[section.id], section.selector);\n        })\n      } \n    }));\n  }\n  getSectionInnerHTML(html, selector) {\n    return new DOMParser()\n      .parseFromString(html, 'text/html')\n      .querySelector(selector).innerHTML;\n  }\n}\ncustomElements.define('add-to-cart', AddToCart);\n\n// This script works both for Slideshow section and for Anouncement bar\nclass SlideshowComponent extends HTMLElement {\n  constructor() {\n    super();\n      this.debug = false;\n      \n          this.slideshow = this.querySelector('.slideshow__slider');\n          this.fade = this.slideshow.classList.contains(\"animation-fade\") ? true : false;\n          this.data = this.slideshow.dataset;\n          this.time = 500;\n          this.posX1 \n          this.posInit \n          this.posX2\n          this.posY1\n          this.posY2 \n          this.posInitY\n          this.swipeVertical\n          this.swipeHorizontal\n          this.init(this.slideshow.querySelector(\".slideshow__slide:nth-child(\"+(this.data.start? this.data.start : 1)+\")\"));\n  \n          if (Shopify.designMode) {\n            document.addEventListener('shopify:section:load', (event) => {\n              if (event.target.closest('.slideshow-section')) {\n                this.init(this.slideshow.querySelector(\".slideshow__slide:nth-child(\"+(this.data.start? this.data.start : 1)+\")\"))\n              }\n            })\n            document.addEventListener('shopify:section:reorder', () => {\n              this.init(this.slideshow.querySelector(\".slideshow__slide:nth-child(\"+(this.data.start? this.data.start : 1)+\")\"))\n            })\n            document.addEventListener('shopify:block:select', (event) => {\n              this.slideshow.querySelectorAll('.slideshow__slide').forEach(slide => {\n                if (event.target.getAttribute('id') == slide.getAttribute('id')) this.init(slide)\n              } )        \n            })\n          }\n          \n          this.controls = {\n            \"buttonNext\": this.querySelector('.slideshow__controls--next'),\n            \"buttonPrev\": this.querySelector('.slideshow__controls--prev'),\n            \"currentSlideNumber\": this.querySelector('.slideshow__controls-current'),\n            \"slides\": this.querySelectorAll('.slideshow__slide')\n          };\n          if (this.controls.buttonNext || this.controls.buttonPrev) {\n            this.controls.buttonNext.addEventListener('click', () => {\n              this.next('next')\n              this.autoplay = this.data.autoplay ? this.data.autoplay : false\n              if(this.autoplay) {\n                this.stopAutoplay();\n                this.start()\n              }\n            })\n            this.controls.buttonPrev.addEventListener('click', () => {\n              this.prev('prev')\n              this.autoplay = this.data.autoplay ? this.data.autoplay : false\n              if(this.autoplay) {\n                this.stopAutoplay();\n                this.start()\n              }\n            })\n          }\n\n          if (!this.data.autoplay) return\n          this.querySelectorAll('.slideshow__content-js').forEach(content => {\n            content.addEventListener('mouseenter', this.stopAutoplay.bind(this))\n            content.addEventListener('mouseleave', this.start.bind(this))\n          })\n          if (this.controls.buttonNext || this.controls.buttonPrev) {\n            this.controls.buttonNext.addEventListener('mouseenter', this.stopAutoplay.bind(this))\n            this.controls.buttonPrev.addEventListener('mouseenter', this.stopAutoplay.bind(this))\n          }\n  }\n\n  init(element) {   \n      this.slideshow.querySelectorAll(\".slideshow__slide\").forEach(slide => {\n        slide.classList.remove('loaded')\n        slide.classList.remove('current')\n        if (slide.querySelector('video')) slide.querySelector('video').pause()\n        slide.classList.remove('before-load')\n      })\n      this.current = {\n          \"int\": this.data.start? parseInt(this.data.start) : 1,\n          \"element\": element\n      }\n      if (this.current.element && this.current.element.classList){ \n          this.current.element.classList.add(\"current\");\n          if (this.current.element.querySelector('video')) this.current.element.querySelector('video').play()\n      }\n      \n      this.length = parseInt(this.slideshow.querySelectorAll(\".slideshow__slide\").length);\n\n      this.autoplay = this.data.autoplay ? this.data.autoplay : false;\n      this.timeout = null;\n      if(this.autoplay) this.start();\n      this.refreshControls()\n      this.classList.add(\"slideshow-initialized\");\n  }\n\n  prev(useAnimation = true){ \n    this.slideshow.querySelectorAll('.slideshow__slide').forEach(slide => slide.classList.remove('prev'))\n      var temp = this.slideshow.querySelector(\".slideshow__slide:nth-child(\"+(this.current.int - 1)+\")\")\n      if(temp){\n        var prev = {\n          \"int\": this.current.int - 1,\n          \"element\": temp\n        }\n      } \n      else {\n        var prev = {\n          \"int\": this.length,\n          \"element\": this.slideshow.querySelector(\".slideshow__slide:nth-child(\"+(this.length)+\")\")\n        }\n      }\n\n      this.setPosition(prev, 'prev', useAnimation)\n      this.refreshControls()\n  }\n\n  next(useAnimation = true){  \n      var temp = this.slideshow.querySelector(\".slideshow__slide:nth-child(\"+(this.current.int + 1)+\")\")\n      if(temp)\n          var next = {\n              \"int\": this.current.int + 1,\n              \"element\": temp\n          }\n      else\n          var next = {\n              \"int\": 1,\n              \"element\": this.slideshow.querySelector(\".slideshow__slide:nth-child(1)\")\n          }\n      this.setPosition(next, 'next', useAnimation);\n      this.refreshControls()\n  }\n\n  set(index, useAnimation = true){\n      index = parseInt(index)\n      var temp = this.slideshow.querySelector(`.slideshow__slide:nth-child(${index})`)\n      if(temp){\n          if(this.autoplay){\n              this.stopAutoplay();\n          }\n          this.autoplay = false;\n          this.setPosition({\n              \"int\": index,\n              \"element\": temp\n          }, useAnimation);\n      }\n  }\n\n  setPosition(to, direction){\n    if(this.current.int != to.int) {\n        this.stop();\n        var after = function () {\n          let arr = Array.from(this.slideshow.querySelectorAll('.slideshow__slide'))\n            this.current.element.classList.remove(\"current\");\n            if (this.current.element.querySelector('video')) this.current.element.querySelector('video').pause()\n            arr.forEach(slide => {\n              slide.classList.add('animate')\n              slide.classList.remove('prev', `direction-${direction}`)\n            })\n            if (this.current.element.querySelector(\".slide-content.slide-background>img\")) {\n                this.current.element.querySelector(\".slide-content.slide-background>img\").style.removeProperty(\"transform\");\n            }\n            to.element.classList.add(\"current\");\n            if (to.element.querySelector('video')) to.element.querySelector('video').play()\n            this.current = to;\n\n            if (this.querySelectorAll('.slideshow__button a').length > 0) this.querySelectorAll('.slideshow__button a').forEach(button => {\n              button.closest('.current') ? button.setAttribute('tabindex', '0') : button.setAttribute('tabindex', '-1')\n            })\n            this.currentElementIndex = arr.indexOf(this.current.element)\n            \n            if (direction == 'next') {\n              this.current.element.classList.add(`direction-${direction}`)\n              if (this.currentElementIndex > 0) {\n                this.prevElement = arr[this.currentElementIndex - 1]\n                this.prevElement.classList.add(`direction-${direction}`)\n              } else {\n                this.prevElement = arr[arr.length - 1]\n                this.prevElement.classList.add(`direction-${direction}`)\n              }\n            } else {\n              this.current.element.classList.add(`direction-${direction}`)\n              if (this.currentElementIndex == arr.length - 1) {\n                this.prevElement = arr[0]\n                this.prevElement.classList.add(`direction-${direction}`)\n              } else {\n                this.prevElement = arr[this.currentElementIndex + 1]\n                this.prevElement.classList.add(`direction-${direction}`)\n              }\n            }\n            if (this.slideshow.classList.contains('text-blocks')) this.slideshow.style.insetInlineStart = `calc(-100% * ${this.currentElementIndex})`\n            if (this.prevElement.classList) this.prevElement.classList.add('prev')\n            if(this.autoplay) this.start();\n            this.lock = false;\n            this.refreshControls()\n        }.bind(this);\n        after()\n      }\n  }\n\n  start() {\n      this.autoplay = this.data.autoplay ? this.data.autoplay : false;\n\n      this.slideshow.classList.add(\"slideshow-playing\");\n      this.slideshow.classList.remove(\"slideshow-stopped\");\n      \n      this.timeout = setTimeout(this.next.bind(this), this.autoplay);\n      \n  } \n  stop() {\n      clearTimeout(this.timeout);\n  }\n  stopAutoplay(){\n      if(this.slideshow.classList.contains(\"slideshow-playing\")){\n          this.slideshow.classList.add(\"slideshow-stopped\");\n          this.slideshow.classList.remove(\"slideshow-playing\");\n      }\n      this.stop();\n  }\n\n  changeSlide(direction) {\n    if (direction == 'next') {\n      this.currentSlide = this.querySelector('.slideshow__slide.current')\n      let index = Array.from(this.controls.slides).indexOf(this.currentSlide) + 1\n  \n      if (index < this.controls.slides.length) {\n        this.set((index + 1));\n        this.start();\n      }\n      else {\n        this.set((1));\n        this.start();\n      }\n      this.refreshControls()\n    }\n    if (direction == 'prev') {\n      this.currentSlide = this.querySelector('.slideshow__slide.current')\n      let index = Array.from(this.controls.slides).indexOf(this.currentSlide) + 1\n  \n      this.set((index + 1));\n      if (index > 1) {\n        this.set((index - 1));\n        this.start();\n      }\n      else {\n        this.set((this.controls.slides.length));\n        this.start();\n      }\n      this.refreshControls()\n    }\n  }\n\n  refreshControls() {\n    this.currentSlide = this.querySelector('.slideshow__slide.current')\n    this.currentSlideNumber = this.querySelector('.slideshow__controls-current')\n    if (!this.currentSlideNumber) return\n    this.currentSlideNumber.innerHTML = this.currentSlide.dataset.position\n  }\n\n  touchStart(event) {\n    if (event.target.closest('.slideshow__controls--prev') || event.target.closest('.slideshow__controls--next')) return\n    let evt = event.changedTouches[0];\n    this.posInit = this.posX1 = evt.clientX;\n    this.posInitY = this.posY1 = evt.clientY\n  }\n\n  touchMove(event) {\n    if (event.target.closest('.slideshow__controls')) return\n    let evt = event.changedTouches[0];\n    this.posX2 = this.posX1 - evt.clientX;\n    this.posX1 = evt.clientX;\n    this.posY2 = this.posY1 - evt.clientY;\n    this.posY1 = evt.clientY;\n  }\n\n  touchEnd(event) {\n    if (event.target.closest('.slideshow__controls--prev') || event.target.closest('.slideshow__controls--next')) return\n    let isHorizontalSwipe = Math.abs(this.posInit - this.posX1) > Math.abs(this.posInitY - this.posY1)\n    let horizontalSwipeIsOk = Math.abs(this.posInit - this.posX1) > 50\n    let swipeVertical = Math.abs(this.posInitY - this.posY1) > 80\n    let swipeHorizontal = Math.abs(this.posInit - this.posX1) > 60\n    if (isHorizontalSwipe && horizontalSwipeIsOk) {\n      this.slideshow.removeEventListener('touchmove', this.touchMove.bind(this));\n      this.slideshow.removeEventListener('touchend', this.touchEnd.bind(this));\n      let posFinal = this.posInit - this.posX1;\n      let direction = 'next'\n      posFinal > 0 ? direction = 'next' : direction = 'previous'\n      if (direction == 'next') {\n        this.next('next')\n        this.autoplay = this.data.autoplay ? this.data.autoplay : false\n        if(this.autoplay) {\n          this.stopAutoplay();\n          this.start()\n        }\n      }\n      if (direction == 'previous') {\n        this.prev('prev')\n        this.autoplay = this.data.autoplay ? this.data.autoplay : false\n        if(this.autoplay) {\n          this.stopAutoplay();\n          this.start()\n        }\n      }\n    }\n  }\n}\ncustomElements.define('slideshow-component', SlideshowComponent);\n\nclass VariantSelects extends HTMLElement {\n  constructor() {\n    super();\n\n    this.addEventListener('change', (event) => this.handleProductUpdate(event));\n    this.initializeProductSwapUtility();\n    this.priceInsideButton = false\n    this.buttonIcon = false\n    this.sectionWrapper = this.closest(`section[data-section=\"${this.dataset.section}\"]`) || this.closest(`#shopify-section-${this.dataset.section}`)\n    const infoWrapper = this.closest('.product__info-wrapper');\n    if (infoWrapper && infoWrapper.querySelector('.price-inside-button')) this.priceInsideButton = true\n    if(document.querySelector('.product-sticky-cart')) this.buttonIcon = true\n    this.querySelectorAll('.color__swatch').forEach(colorSwatch => colorSwatch.addEventListener('mouseenter', (e) => this.alignSwatchTooltip(e))) \n    this.querySelectorAll('.color__swatch').forEach(colorSwatch => colorSwatch.addEventListener('touchstart', (e) => this.alignSwatchTooltip(e))) \n  }\n\n  alignSwatchTooltip(e) {\n    const colorSwatch = e.target;\n    const tooltip = colorSwatch.querySelector('.color__swatch-tooltip');\n    const viewport = colorSwatch.closest('.product');\n    if(!tooltip) return\n\n    tooltip.style.setProperty('--tooltip-arrow-left', 'auto');\n    tooltip.style.setProperty('--tooltip-arrow-transform', 'none');\n    tooltip.removeAttribute('style');\n\n    if (tooltip && viewport && viewport.getBoundingClientRect().left >= tooltip.getBoundingClientRect().left) {\n      tooltip.setAttribute('style', `right: calc(50% - ${(Math.abs(tooltip.getBoundingClientRect().left - viewport.getBoundingClientRect().left))}px);`);\n      tooltip.style.setProperty('--tooltip-arrow-left', `${colorSwatch.getBoundingClientRect().width / 2}px`);\n      tooltip.style.setProperty('--tooltip-arrow-transform', `translateX(-50%)`);\n    }\n  }\n\n  initializeProductSwapUtility() {\n    this.swapProductUtility = new HTMLUpdateUtility();\n    this.swapProductUtility.addPreProcessCallback((html) => {\n      return html;\n    });\n    this.swapProductUtility.addPostProcessCallback((newNode) => {\n      window?.Shopify?.PaymentButton?.init();\n      window?.ProductModel?.loadShopifyXR();\n      publish(PUB_SUB_EVENTS.sectionRefreshed, {\n        data: {\n          sectionId: this.dataset.section,\n          resource: {\n            type: SECTION_REFRESH_RESOURCE_TYPE.product,\n            id: newNode.querySelector('variant-selects').dataset.productId,\n          },\n        },\n      });\n    });\n  }\n\n  handleProductUpdate(event) {\n    let loader \n    if (this.sectionWrapper.querySelector('.product-form__submit .loading-overlay__spinner')) loader = this.sectionWrapper.querySelector('.product-form__submit .loading-overlay__spinner').innerHTML\n    const addButton = this.sectionWrapper.querySelector('.product-form__submit[name=\"add\"]');\n    if (addButton) addButton.innerHTML = `<div class=\"loading-overlay__spinner\">${loader}</div>`\n    this.handleFunctionProductUpdate(event)\n    \n    document.dispatchEvent(new CustomEvent('variant:change', {\n      detail: {\n        variant: this.currentVariant\n      }\n    }))\n  }\n\n  handleFunctionProductUpdate(event) {\n    const input = this.getInputForEventTarget(event.target);\n    const targetId = input.id;\n    let targetUrl = input.dataset.productUrl;\n    this.currentVariant = this.getVariantData(targetId);\n    const sectionId = this.dataset.originalSection || this.dataset.section;\n    this.updateSelectedSwatchValue(event);\n    this.toggleAddButton(true, '', false);\n    this.removeErrorMessage();\n\n    let callback = () => {};\n    if (!this.currentVariant) {\n      this.toggleAddButton(true, '', true);\n      this.setUnavailable();\n      if(this.querySelector('.product-combined-listings')) callback = this.handleSwapProduct(sectionId, true)\n    } else if (this.dataset.url !== targetUrl) {\n      this.updateMedia();\n      this.updateURL(targetUrl);\n      this.updateVariantInput();\n      this.querySelector('.product-combined-listings') ? callback = this.handleSwapProduct(sectionId) : callback = this.handleUpdateProductInfo(sectionId);\n    }\n    this.renderProductInfo(sectionId, targetUrl, targetId, callback);\n  }\n\n  updateSelectedSwatchValue({ target }) {\n    const { value, tagName } = target;\n    if (tagName === 'INPUT' && target.type === 'radio') {\n      const selectedSwatchValue = target.closest(`.product-form__input`).querySelector('[data-selected-value]');\n      if (selectedSwatchValue) selectedSwatchValue.innerHTML = value;\n    }\n  }\n\n  updateMedia() {\n    if (!this.currentVariant) return;\n    if (this.currentVariant.featured_media) {\n      const mediaGallery = document.getElementById(`MediaGallery-${this.dataset.section}`)?.setActiveMedia?.(`${this.dataset.section}-${this.currentVariant.featured_media.id}`,!0)\n      mediaGallery?.setActiveMedia?.(`${this.dataset.section}-${this.currentVariant.featured_media.id}`, true);\n    } else if (!this.currentVariant.featured_media && this.sectionWrapper.querySelector('.product__media-list.variant-images')) {\n      const mediaGallery = document.getElementById(`MediaGallery-${this.dataset.section}`)?.setActiveMedia?.(`${this.dataset.section}-${this.currentVariant.featured_media.id}`,!0)\n      mediaGallery?.setActiveMedia?.(`false`, true);\n    }\n    document.dispatchEvent(new CustomEvent('updateVariantMedia'))\n  }\n\n  updateURL(url) {\n    if (this.dataset.updateUrl === 'false') return;\n    window.history.replaceState({ }, '', `${url}${this.currentVariant?.id ? `?variant=${this.currentVariant.id}` : ''}`);\n  }\n\n  updateVariantInput() {\n    const productForms = document.querySelectorAll(`#product-form-${this.dataset.section}, #product-form-${this.dataset.section}--alt, #product-form-installment`);\n    productForms.forEach((productForm) => {\n      const input = productForm.querySelector('input[name=\"id\"]');\n      if (!input) return;\n      input.value = this.currentVariant ? this.currentVariant.id : ''\n      input.dispatchEvent(new Event('change', { bubbles: true }));\n    });\n  }\n\n  updatePickupAvailability() {\n    const pickUpAvailability = this.sectionWrapper.querySelector('pickup-availability');\n    if (!pickUpAvailability) return;\n    if (this.currentVariant && this.currentVariant.available) {\n     pickUpAvailability.fetchAvailability?.(this.currentVariant.id)\n    } else {\n      pickUpAvailability.removeAttribute('available');\n      pickUpAvailability.innerHTML = '';\n    }\n  }\n\n  getInputForEventTarget(target) {\n    return target.tagName === 'SELECT' ? target.selectedOptions[0] : target;\n  }\n\n  getVariantData(inputId) {\n    return JSON.parse(this.getVariantDataElement(inputId).textContent);\n  }\n\n  getVariantDataElement(inputId) {\n    return this.querySelector(`script[type=\"application/json\"][data-resource=\"${inputId}\"]`);\n  }\n\n  removeErrorMessage() {\n    const section = this.closest('section');\n    if (!section) return;\n\n    const productForm = section.querySelector('product-form');\n    if (productForm) productForm.handleErrorMessage();\n  }\n\n  getWrappingSection(sectionId) {\n    return (\n      this.closest(`section[data-section=\"${sectionId}\"]`) || // main-product\n      this.closest(`#shopify-section-${sectionId}`) || // featured-product\n      null\n    );\n  }\n\n  handleSwapProduct(sectionId, unavailableProduct = false) {\n    return (html) => {\n      const oldContent = this.getWrappingSection(sectionId);\n      if (!oldContent) {\n        return;\n      }\n      document.getElementById(`ProductModal-${sectionId}`)?.remove();\n\n      const response =\n        html.querySelector(`section[data-section=\"${sectionId}\"]`) /* main/quick-view */ ||\n        html.getElementById(`shopify-section-${sectionId}`); /* featured product*/\n\n      this.swapProductUtility.viewTransition(oldContent, response);\n      this.updateCurrentVariant(html)\n      this.updateVariantImage(html)\n      if(unavailableProduct) {\n        this.toggleAddButton(true, '', true);\n        this.setUnavailable();\n      } else {\n        if (this.currentVariant) this.toggleAddButton(!this.currentVariant.available, variantStrings.soldOut);\n      }\n    };\n  }\n\n  handleUpdateProductInfo(sectionId) {\n    return (html) => {\n      this.updatePickupAvailability();\n      this.updateSKU(html);\n      this.updateStoreLocator(html);\n      this.updatePrice(html);\n      this.updatePriceAlt(html);\n      this.updateCurrentVariant(html)\n      this.updateVariantImage(html)\n      this.updateColorName(html);\n      this.updateInventoryStatus(html);\n      if (this.currentVariant) this.toggleAddButton(!this.currentVariant.available, variantStrings.soldOut);\n      this.updateOptionValues(html);\n      this.updateProductUrl(html);\n      publish(PUB_SUB_EVENTS.variantChange, {\n        data: {\n          sectionId,\n          html,\n          variant: this.currentVariant,\n        },\n      });\n    };\n  }\n\n  updateOptionValues(html) {\n    const variantSelects = html.querySelector('variant-selects');\n    if (variantSelects) this.innerHTML = variantSelects.innerHTML;\n  }\n\n  getSelectedOptionValues() {\n    const elements = this.querySelectorAll('select option[selected], fieldset input:checked');\n\n    let selectedValues = Array.from(elements).map(\n      (element) => element.dataset.optionValueId\n    );\n\n    this.optionsSize = this.dataset.optionsSize\n    if (selectedValues.length < this.optionsSize) {\n      const fieldsets = this.querySelectorAll('fieldset');\n      fieldsets.forEach((fieldset) => {\n        const checkedInput = fieldset.querySelector('input:checked');\n        if (!checkedInput) {\n          const fallbackInput = fieldset.querySelector('input[checked]');\n          if (fallbackInput) {\n            const value = fallbackInput.dataset.optionValueId;\n            if (value && !selectedValues.includes(value)) selectedValues.push(value);\n          }\n        }\n      });\n    }\n\n  return selectedValues;\n  }\n\n  renderProductInfo(sectionId, url, targetId, callback) {\n    const variantParam = this.currentVariant?.id\n    ? `variant=${this.currentVariant.id}`\n    : '';\n\n    if(!url) url = this.dataset.url\n    const fetchUrl = variantParam\n    ? `${url}?${variantParam}&section_id=${sectionId}`\n    : `${url}?section_id=${sectionId}`;\n\n    fetch(fetchUrl)\n      .then((response) => response.text())\n      .then((responseText) => {\n        const html = new DOMParser().parseFromString(responseText, 'text/html');\n        callback(html);\n      })\n      .then(() => {\n        // set focus to last clicked option value\n        const el = document.getElementById(targetId);\n        if (el) el.focus({ preventScroll: true });\n      })\n  }\n\n  updateSKU(html) {\n    const id = `sku-${this.dataset.section}`;\n    const destination = document.getElementById(id);\n    const source = html.getElementById(id);\n\n    if (source && destination) destination.innerHTML = source.innerHTML;\n    if (destination) destination.classList.remove('visually-hidden');\n    if (!source && destination) destination.classList.add('visually-hidden')\n  }\n\n  updateStoreLocator(html) {\n    const id = `store_locator-${this.dataset.section}`;\n    const destination = document.getElementById(id);\n    const source = html.getElementById(id);\n\n    if (source && destination) destination.innerHTML = source.innerHTML;\n    if (destination) destination.classList.remove('visually-hidden');\n    if (!source && destination) destination.classList.add('visually-hidden')\n  }\n\n  updatePrice(html) {\n    const id = `price-${this.dataset.section}`;\n    const destination = document.getElementById(id);\n    const source = html.getElementById(id);\n\n    if (source && destination) destination.innerHTML = source.innerHTML;\n    if (destination) destination.classList.remove('visually-hidden');\n  }\n\n  updateCurrentVariant(html) {\n    const id = `current-variant-${this.dataset.section}`;\n    const destination = document.getElementById(id);\n    const source = html.getElementById(id);\n\n    if (source && destination) destination.innerHTML = source.innerHTML;\n    if (destination) destination.classList.remove('visually-hidden');\n  }\n\n  updateVariantImage(html) {\n    const id = `variant-image-${this.dataset.section}`;\n    const destination = document.getElementById(id);\n    const source = html.getElementById(id);\n\n    if (source && destination) destination.innerHTML = source.innerHTML;\n    if (destination) destination.classList.remove('visually-hidden');\n  }\n\n  updatePriceAlt(html) {\n    const id = `price-${this.dataset.section}--alt`;\n    const destination = document.getElementById(id);\n    const source = html.getElementById(id);\n\n    if (source && destination) destination.innerHTML = source.innerHTML;\n    if (destination) destination.classList.remove('visually-hidden');\n  }\n\n  updateColorName(html) {\n    const id = `color-${this.dataset.section}`;\n    const destination = document.getElementById(id);\n    const source = html.getElementById(id);\n\n    if (source && destination) destination.innerHTML = source.innerHTML;\n    if (destination) destination.classList.remove('visually-hidden');\n  }\n\n  updateInventoryStatus(html) {\n    const id = `inventory-${this.dataset.section}`;\n    const destination = document.getElementById(id);\n    const source = html.getElementById(id);\n\n    if (source && destination) destination.innerHTML = source.innerHTML;\n    if (destination) destination.classList.remove('visually-hidden');\n  }\n\n  updateProductUrl(html) {\n    const currentUrl = window.location.href;\n    const id = `#product-url-${this.dataset.section} input`;\n    const destination = document.querySelector(id);\n    const source = html.querySelector(id);\n    if (source && destination) destination.setAttribute('value', `${currentUrl}`);\n    if (destination) destination.classList.remove('visually-hidden');\n  }\n\n  toggleAddButton(disable = true, text, modifyClass = true) {\n    const productForms = document.querySelectorAll(`#product-form-${this.dataset.section}, #product-form-${this.dataset.section}--alt`);\n    const loaderEl = this.sectionWrapper.querySelector('.loading-overlay__spinner');\n    const loader = loaderEl ? loaderEl.innerHTML : '';\n    productForms.forEach((productForm) => {\n      const addButton = productForm.querySelector('[name=\"add\"]');\n      if (!addButton) return;\n      let priceContent = ''\n      let buttonIcon = ''\n      if(this.buttonIcon && this.sectionWrapper.querySelector('.product-form__buttons-icon')) buttonIcon = this.sectionWrapper.querySelector('.product-form__buttons-icon').innerHTML\n      const priceBlock = document.getElementById(`price-${this.dataset.section}`);\n      if(this.priceInsideButton && priceBlock) {\n        const priceEl = priceBlock.querySelector('.price');\n        if (priceEl) priceContent = priceEl.innerHTML;\n      }\n      if (disable) {\n        addButton.setAttribute('disabled', true);\n        addButton.setAttribute('data-sold-out', true);\n        if (text) addButton.innerHTML = `<span class=\"price-inside-button\">${priceContent}</span><span>${text}</span><span class=\"product-form__buttons-icon\">${buttonIcon}</span> <div class=\"loading-overlay__spinner hidden\">${loader}</div>`;      }\n      else {\n        addButton.removeAttribute('disabled');\n        addButton.removeAttribute('data-sold-out');\n        addButton.innerHTML = addButton.dataset.preOrder === 'true' ? `<span class=\"price-inside-button\">${priceContent}</span><span>${variantStrings.preOrder}</span><span class=\"product-form__buttons-icon\">${buttonIcon}</span> <div class=\"loading-overlay__spinner hidden\">${loader}</div>` : `<span class=\"price-inside-button\">${priceContent}</span><span>${variantStrings.addToCart}</span><span class=\"product-form__buttons-icon\">${buttonIcon}</span> <div class=\"loading-overlay__spinner hidden\">${loader}</div>`;\n      }\n      if (!modifyClass) return;\n    });\n  }\n\n  setUnavailable() {\n    const productForms = document.querySelectorAll(`#product-form-${this.dataset.section}, #product-form-${this.dataset.section}--alt`);\n    const loaderEl = this.sectionWrapper.querySelector('.loading-overlay__spinner');\n    const loader = loaderEl ? loaderEl.innerHTML : '';\n    productForms.forEach((productForm) => {\n      const addButton = productForm.querySelector('[name=\"add\"]');\n      if (!addButton) return;\n      addButton.removeAttribute('data-sold-out');\n      let priceContent = ''\n      let buttonIcon = ''\n      if(this.buttonIcon && this.sectionWrapper.querySelector('.product-form__buttons-icon')) buttonIcon = this.sectionWrapper.querySelector('.product-form__buttons-icon').innerHTML\n      const priceBlock = document.getElementById(`price-${this.dataset.section}`);\n      if(this.priceInsideButton && priceBlock) {\n        const priceEl = priceBlock.querySelector('.price');\n        if (priceEl) priceContent = priceEl.innerHTML;\n      }\n      addButton.innerHTML = `<span class=\"price-inside-button\">${priceContent}</span><span>${variantStrings.unavailable}</span> <span class=\"product-form__buttons-icon\">${buttonIcon}</span> <div class=\"loading-overlay__spinner hidden\">${loader}</div>`;\n\n      const price = document.getElementById(`price-${this.dataset.section}`);\n      if (price) price.classList.add('visually-hidden');\n\n      const priceAlt = document.getElementById(`price-${this.dataset.section}--alt`);\n      if (priceAlt) priceAlt.classList.add('visually-hidden');\n\n      const inventory = document.getElementById(`inventory-${this.dataset.section}`);\n      if (inventory) inventory.classList.add('visually-hidden');\n\n      const sku = document.getElementById(`sku-${this.dataset.section}`);\n      if (sku) sku.classList.add('visually-hidden');\n\n      const storeLocator = document.getElementById(`store_locator${this.dataset.section}`);\n      if (storeLocator) storeLocator.classList.add('visually-hidden');\n    });\n  }\n}\ncustomElements.define('variant-selects', VariantSelects);\n\nclass ProgressBar extends HTMLElement {\n  constructor() {\n    super();\n\n    theme.initWhenVisible({\n      element: this,\n      callback: this.init.bind(this),\n      threshold: 0\n    });\n  }\n\n  init() {\n    setTimeout(() => {\n      const quantity = parseInt(this.dataset.quantity);\n      const totalQuantity = parseInt(this.dataset.total);\n      this.style.setProperty('--progress-bar-width', `${quantity / totalQuantity * 100}%`);\n    }, 300);\n  }\n}\ncustomElements.define('progress-bar', ProgressBar);\n\nclass CountdownTimer extends HTMLElement {\n  constructor() {\n    super();\n\n    this.endDate = this.getAttribute('end-date');\n    this.endTime = this.getAttribute('end-time') || \"00:00\";\n    this.timezoneOffset = this.getAttribute('timezone-offset');\n    this.expirationAction = this.getAttribute('expiration-action');\n    this.enableAnimation = this.getAttribute('enable-animation') === \"true\";\n    this.sectionBlocksCount = this.getAttribute('section-blocks-count');\n    this.sectionId = this.getAttribute('section-id');\n    this.productHandle = this.getAttribute('product-handle');\n    this.animationDuration = 300;\n\n    this.timeState = {\n      days: ['0', '0'],\n      hours: ['0', '0'],\n      minutes: ['0', '0'],\n      seconds: ['0', '0']\n    };\n\n    this.elements = {};\n\n    this.init = this.init.bind(this);\n    this.updateTimer = this.updateTimer.bind(this);\n  }\n\n  connectedCallback() {\n    requestAnimationFrame(this.init);\n  }\n\n  disconnectedCallback() {\n    if (this.updateTimerIntervalId) clearInterval(this.updateTimerIntervalId);\n  }\n\n  async init() {\n    if (this.updateTimerIntervalId) clearInterval(this.updateTimerIntervalId);\n\n    if (!this.endDate && this.productHandle) {\n      await this.fetchEndDateTimeAndMessage();\n    }\n\n    this.deadlineTimestamp = new Date(`${this.endDate}T${this.endTime}`).getTime();\n\n    const isDateValid =\n      /^\\d{4}-\\d{2}-\\d{2}$/.test(this.endDate) && this.doesDateExist(this.endDate);\n    const isTimeValid = /^\\d{2}:\\d{2}$/.test(this.endTime);\n\n    const remainingTime = this.getRemainingTime(this.deadlineTimestamp);\n\n    if (!isDateValid || !isTimeValid || !this.deadlineTimestamp || remainingTime.days > 99) {\n      if (Shopify.designMode) {\n        this.classList.add('countdown--visible');\n      } else {\n        this.hideCountdownTimer();\n      }\n      return;\n    }\n\n    this.cacheElements();\n\n    if (remainingTime.total > 0) {\n      this.updateTimer(true);\n      this.updateTimerIntervalId = setInterval(this.updateTimer, 1000);\n    } else {\n      this.onTimerExpire();\n    }\n\n    this.classList.add('countdown--visible');\n  }\n\n  cacheElements() {\n    const q = (selector) => this.querySelector(selector);\n\n    const countdownTimer = q('#countdownTimer');\n    const countdownCompleteMessage = q('#countdownCompleteMessage');\n\n    const daysTens = q('#countdownDaysTens');\n    const daysOnes = q('#countdownDaysOnes');\n    const hoursTens = q('#countdownHoursTens');\n    const hoursOnes = q('#countdownHoursOnes');\n    const minutesTens = q('#countdownMinutesTens');\n    const minutesOnes = q('#countdownMinutesOnes');\n    const secondsTens = q('#countdownSecondsTens');\n    const secondsOnes = q('#countdownSecondsOnes');\n\n    this.elements = {\n      timer: countdownTimer,\n      message: countdownCompleteMessage,\n      digits: {\n        days: [daysTens, daysOnes],\n        hours: [hoursTens, hoursOnes],\n        minutes: [minutesTens, minutesOnes],\n        seconds: [secondsTens, secondsOnes]\n      }\n    };\n  }\n\n  async fetchEndDateTimeAndMessage() {\n    try {\n      const response = await fetch(`/products/${this.productHandle}`);\n      const html = await response.text();\n\n      const parser = new DOMParser();\n      const timerOnProductPage = parser.parseFromString(html, 'text/html').querySelector('.countdown');\n\n      if (!timerOnProductPage) throw new Error('No timer found');\n\n      const endDate = timerOnProductPage.getAttribute('end-date');\n      const endTime = timerOnProductPage.getAttribute('end-time');\n\n      this.setAttribute('end-date', endDate);\n      this.setAttribute('end-time', endTime);\n\n      const completeMessage = timerOnProductPage.getAttribute('complete-message');\n      const completeMessageElement = this.querySelector('.countdown__complete-message');\n\n      if (completeMessageElement) {\n        completeMessageElement.innerHTML = completeMessage;\n        this.setAttribute('complete-message', completeMessage);\n      }\n\n      this.endDate = endDate;\n      this.endTime = endTime;\n\n      this.deadlineTimestamp = new Date(`${this.endDate}T${this.endTime}`).getTime();\n    } catch (err) {\n      this.hideCountdownTimer();\n    }\n  }\n\n  updateTimer(firstRun = false) {\n    const remainingTime = this.getRemainingTime(this.deadlineTimestamp);\n\n    if (remainingTime.total <= 0) {\n      if (this.updateTimerIntervalId) clearInterval(this.updateTimerIntervalId);\n      this.onTimerExpire();\n      return;\n    }\n\n    const pad = (num) => num.toString().padStart(2, '0');\n\n    const nextValues = {\n      days: pad(remainingTime.days),\n      hours: pad(remainingTime.hours),\n      minutes: pad(remainingTime.minutes),\n      seconds: pad(remainingTime.seconds)\n    };\n\n    if (!this.elements.digits) {\n      this.cacheElements();\n      if (!this.elements.digits) return;\n    }\n\n    Object.keys(nextValues).forEach((unit) => {\n      const nextStr = nextValues[unit];\n      const currentStr = this.timeState[unit].join('');\n\n      if (firstRun || nextStr !== currentStr) {\n        if (firstRun || nextStr[0] !== this.timeState[unit][0]) {\n          this.animateDigit(\n            this.elements.digits[unit][0],\n            nextStr[0],\n            this.timeState[unit][0],\n            firstRun\n          );\n          this.timeState[unit][0] = nextStr[0];\n        }\n\n        if (firstRun || nextStr[1] !== this.timeState[unit][1]) {\n          this.animateDigit(\n            this.elements.digits[unit][1],\n            nextStr[1],\n            this.timeState[unit][1],\n            firstRun\n          );\n          this.timeState[unit][1] = nextStr[1];\n        }\n      }\n    });\n  }\n\n  animateDigit(wrapper, newValue, oldValue, skipAnimation) {\n    if (!wrapper) return;\n\n    const currentNumber = wrapper.querySelector('.countdown__number--current');\n    if (!currentNumber) return;\n\n    if (!this.enableAnimation || skipAnimation) {\n      currentNumber.innerText = newValue;\n      return;\n    }\n\n    const previousNumber = wrapper.querySelector('.countdown__number--previous');\n    if (!previousNumber) {\n      currentNumber.innerText = newValue;\n      return;\n    }\n\n    previousNumber.innerText = oldValue;\n    currentNumber.innerText = newValue;\n\n    previousNumber.classList.add('countdown__number--animated');\n    currentNumber.classList.add('countdown__number--animated');\n\n    setTimeout(() => {\n      previousNumber.classList.remove('countdown__number--animated');\n      currentNumber.classList.remove('countdown__number--animated');\n    }, this.animationDuration);\n  }\n\n  onTimerExpire() {\n    switch (this.expirationAction) {\n      case \"hide_timer\":\n        this.hideCountdownTimer();\n        break;\n\n      case \"show_message\":\n        const messageEl = this.elements.message || this.querySelector('#countdownCompleteMessage');\n\n        if (!messageEl) {\n          this.hideCountdownTimer();\n          break;\n        }\n\n        const timerEl = this.elements.timer || this.querySelector('.countdown__timer');\n        if (timerEl) timerEl.remove();\n\n        messageEl.removeAttribute('hidden');\n        break;\n\n      case \"show_zeros_and_message\":\n        {\n          const msg = this.elements.message || this.querySelector('#countdownCompleteMessage');\n          if (msg) msg.removeAttribute('hidden');\n\n          this.updateTimer(true);\n        }\n        break;\n    }\n\n    if (this.updateTimerIntervalId) clearInterval(this.updateTimerIntervalId);\n  }\n\n  hideCountdownParent() {\n    const sectionElement = document.getElementById('shopify-section-' + this.sectionId);\n    if (!sectionElement) return;\n\n    if (this.sectionBlocksCount === \"1\") {\n      const sectionToRemovalTargetMap = {\n        'rich-text': '.rich-text',\n        'image-banner': '.banner__content',\n        'section-newsletter': '.banner__content',\n        'video-banner': '.banner__content',\n        'media-with-text': '.ordinal-section:has(.media-with-text__media .placeholder-svg)',\n      };\n\n      for (const [sectionClass, removalTargetClass] of Object.entries(sectionToRemovalTargetMap)) {\n        if (sectionElement.classList.contains(sectionClass)) {\n          const targetElement = sectionElement.querySelector(removalTargetClass);\n          targetElement?.remove();\n        }\n      }\n    }\n\n    const sectionToRemovalTargetMap = {\n      'announcement-bar-section': '.slideshow__slide',\n      'slideshow-section': '.slideshow__content',\n    };\n\n    for (const [sectionClass, removalTargetClass] of Object.entries(sectionToRemovalTargetMap)) {\n      if (sectionElement.classList.contains(sectionClass)) {\n        const targetElement = this.closest(removalTargetClass);\n\n        if (targetElement && targetElement.children.length === 1) {\n          targetElement.remove();\n        }\n      }\n    }\n  }\n\n  hideCountdownTimer() {\n    this.hideCountdownParent();\n\n    setTimeout(() => {\n      this.remove();\n    });\n  }\n\n  getRemainingTime(deadline) {\n    const total = deadline - this.getTimestampInStoreTimezone();\n\n    if (total <= 0) {\n      return { total: 0, days: 0, hours: 0, minutes: 0, seconds: 0 };\n    }\n\n    return {\n      total,\n      seconds: Math.floor((total / 1000) % 60),\n      minutes: Math.floor((total / 1000 / 60) % 60),\n      hours: Math.floor((total / (1000 * 60 * 60)) % 24),\n      days: Math.floor(total / (1000 * 60 * 60 * 24))\n    };\n  }\n\n  getTimestampInStoreTimezone() {\n    const match = this.timezoneOffset?.match(/([+-]?)(\\d{2})(\\d{2})/);\n\n    if (!match) {\n      console.error(\"Invalid timezone format:\", this.timezoneOffset);\n      return Date.now();\n    }\n\n    const now = new Date();\n    const sign = match[1] === \"-\" ? -1 : 1;\n    const hours = parseInt(match[2], 10);\n    const minutes = parseInt(match[3], 10);\n    const offsetMilliseconds = sign * ((hours * 60 + minutes) * 60000);\n    const utcTimestamp = now.getTime() + now.getTimezoneOffset() * 60000;\n\n    return utcTimestamp + offsetMilliseconds;\n  }\n\n  doesDateExist(dateString) {\n    const [year, month, day] = dateString.split(\"-\").map(Number);\n    const date = new Date(year, month - 1, day);\n\n    return (\n      date.getFullYear() === year &&\n      date.getMonth() === month - 1 &&\n      date.getDate() === day\n    );\n  }\n}\n\ncustomElements.define('countdown-timer', CountdownTimer);\n\nclass AccordionBlock extends HTMLElement {\n  constructor() {\n    super();\n    this.item = this.querySelector('.accordion-toggle')\n    this.panel = this.querySelector('.accordion__panel')\n    this.links = this.panel.querySelectorAll('a')\n    this.textareas = this.panel.querySelectorAll('textarea')\n    this.inputs = this.panel.querySelectorAll('input')\n    this.selects = this.panel.querySelectorAll('select')\n    this.buttons = this.panel.querySelectorAll('button')\n    this.panelHeight\n    this.item.addEventListener('mousedown', () => this.item.closest('body').classList.add('no-user-select'))\n    this.item.addEventListener('mouseup', () => this.item.closest('body').classList.remove('no-user-select'))\n    if (!this.item.classList.contains('is-open')) this.blurElements()\n    if(this.closest('.snippet-facets--horizontal')) {\n      document.addEventListener('click', (event) => {\n        if (!event.target.closest('.accordion-toggle') && this.item.classList.contains('is-open')) this.item.classList.remove('is-open')\n      })\n    }\n\n    if (this.item.classList.contains('js-filter')) {\n      document.addEventListener('filters:rerendered', ()=> {\n        if(this.closest('.snippet-facets--horizontal')) return\n        let filters = this.querySelectorAll('.accordion-toggle')\n        filters.forEach((filter) => {\n          this.panel = filter.querySelector('.accordion__panel')\n          this.panel.style.transitionDuration = '0s'\n          !filter.classList.contains('is-open') ? this.panel.style.maxHeight = null : this.panel.style.maxHeight = this.panel.scrollHeight + \"px\"\n          setTimeout(() => {this.panel.style.transitionDuration = '0.3s'}, 100)\n        })\n      })\n\n      if(this.item.className.includes('open_collapsible')) {\n        if(this.panel.scrollHeight > 0) this.panel.style.maxHeight = this.panel.scrollHeight + \"px\"\n      }\n\n      this.item.addEventListener('click', (event) => {\n        this.panel = this.querySelector('.accordion__panel')\n        if(this.closest('.snippet-facets--horizontal')) {\n          let facets = this.closest('.snippet-facets--horizontal')\n          facets.querySelectorAll('.accordion-toggle').forEach(item => {\n            if(item.classList.contains('is-open') && event.target.closest('.accordion-toggle') != item) item.classList.remove('is-open')\n          })\n        }\n        if (!event.target.closest('.mobile-facets__summary')) return\n\n        if(this.item.className.includes('open_collapsible') && this.item.className.includes('is-open') && !this.panel.style.maxHeight) {\n          this.panelHeight = this.panel.scrollHeight + \"px\"\n          this.panel.style.setProperty('--max-height', `${this.panelHeight}`)\n          this.panel.style.maxHeight = this.panelHeight\n        }\n\n        this.item.classList.toggle('is-open')\n        if(this.closest('.snippet-facets--horizontal')) return\n        this.panelHeight = this.panel.scrollHeight + \"px\"\n        \n        this.panel.style.setProperty('--max-height', `${this.panelHeight}`)\n        !this.item.classList.contains('is-open') ? this.panel.style.maxHeight = null : this.panel.style.maxHeight = this.panelHeight\n        this.item.classList.contains('is-open') ? this.focusElements() : this.blurElements()\n      })\n\n      this.item.addEventListener('keydown', (event) => {\n        if (event.code.toUpperCase() === 'ENTER') {\n          this.panel = this.querySelector('.accordion__panel')\n          if(this.closest('.snippet-facets--horizontal')) {\n            let facets = this.closest('.snippet-facets--horizontal')\n            facets.querySelectorAll('.accordion-toggle').forEach(item => {\n              if(item.classList.contains('is-open') && event.target.closest('.accordion-toggle') != item) item.classList.remove('is-open')\n            })\n          }\n          if (event.target.closest('.accordion__panel')) return\n          this.item.classList.toggle('is-open')\n          if(this.closest('.snippet-facets--horizontal')) return\n          this.panelHeight = this.panel.scrollHeight + \"px\"\n          this.panel.style.setProperty('--max-height', `${this.panelHeight}`)\n          !this.item.classList.contains('is-open') ? this.panel.style.maxHeight = null : this.panel.style.maxHeight = this.panelHeight\n        }\n        if (event.code.toUpperCase() === 'ESCAPE') {\n          this.item.classList.remove('is-open')\n          this.panel.style.maxHeight = null\n        }\n        this.item.classList.contains('is-open') ? this.focusElements() : this.blurElements()\n      })\n    } \n    else {\n      this.item.querySelector('.accordion__summary > input[type=\"checkbox\"]') ? this.accordionButton = this.item.querySelector('.accordion__summary > input[type=\"checkbox\"]') : this.accordionButton = this.item.querySelector('.accordion__summary')\n      if(this.item.className.includes('not_collapsible')) return\n\n      if(this.item.className.includes('open_collapsible')) {\n        this.panel.style.maxHeight = this.panel.scrollHeight + \"px\"\n      }\n\n      this.accordionButton.addEventListener('click', (event) => {\n        if (this.closest('.store-accordion') && !event.target.closest('.icon-accordion')) {\n          return;\n        }\n    \n        !this.item.className.includes('is-open') ? this.item.classList.add('is-open') : this.item.classList.remove('is-open')\n        this.panel.style.maxHeight ? this.panel.style.maxHeight = null : this.panel.style.maxHeight = this.panel.scrollHeight + \"px\"\n        this.item.classList.contains('is-open') ? this.focusElements() : this.blurElements()\n      })\n\n      this.accordionButton.addEventListener('keydown', (event) => {\n        if (event.code.toUpperCase() === 'ENTER') {\n          if (this.closest('.store-accordion') && !event.target.closest('.icon-accordion')) {\n            return;\n          }\n      \n          !this.item.className.includes('is-open') ? this.item.classList.add('is-open') : this.item.classList.remove('is-open')\n          this.panel.style.maxHeight ? this.panel.style.maxHeight = null : this.panel.style.maxHeight = this.panel.scrollHeight + \"px\"\n        }\n        if (event.code.toUpperCase() === 'ESCAPE') {\n          if (this.closest('.store-accordion') && !event.target.closest('.icon-accordion')) {\n            return;\n          }\n      \n          this.item.classList.remove('is-open')\n          this.panel.style.maxHeight = null\n        }\n        this.item.classList.contains('is-open') ? this.focusElements() : this.blurElements()\n      })\n    }\n\n    this.querySelectorAll('.store-accordion__toggle-area').forEach(toggle => {\n      toggle.addEventListener('click', (event) => {\n        const checkbox = toggle.querySelector('.store-accordion__checkbox');\n\n        if (event.target === checkbox) return;\n\n        if (!checkbox.checked) {\n          checkbox.checked = true;\n          checkbox.dispatchEvent(new Event('change', { bubbles: true }));\n        }\n      });\n    });\n  }\n\n  blurElements() {\n    this.links.forEach(link => link.setAttribute('tabindex', '-1'))\n    this.textareas.forEach(textarea => textarea.setAttribute('tabindex', '-1'))\n    this.inputs.forEach(input => input.setAttribute('tabindex', '-1'))\n    this.selects.forEach(select => select.setAttribute('tabindex', '-1'))\n    this.buttons.forEach(button => button.setAttribute('tabindex', '-1'))\n  }\n  focusElements() {\n    this.links.forEach(link => link.setAttribute('tabindex', '0'))\n    this.inputs.forEach(input => input.setAttribute('tabindex', '0'))\n    this.selects.forEach(select => select.setAttribute('tabindex', '0'))\n    this.buttons.forEach(button => button.setAttribute('tabindex', '0'))\n  }\n}\ncustomElements.define('accordion-block', AccordionBlock);\n\nclass ProductRecommendations extends HTMLElement {\n  constructor() {\n    super();\n  }\n\n  connectedCallback() {\n    const handleIntersection = (entries, observer) => {\n      if (!entries[0].isIntersecting) return;\n      observer.unobserve(this);\n\n      fetch(this.dataset.url)\n        .then(response => response.text())\n        .then(text => {\n          const html = document.createElement('div');\n          html.innerHTML = text;\n          const recommendations = html.querySelector('product-recommendations');\n\n          if (recommendations && recommendations.innerHTML.trim().length) {\n            this.innerHTML = recommendations.innerHTML;\n            document.dispatchEvent(new CustomEvent('product-recommendations:load'));\n          }\n\n          if (!this.querySelector('slideshow-component') && this.classList.contains('complementary-products')) {\n            this.remove();\n          }\n\n          this.classList.add('product-recommendations--loaded');\n        })\n        .catch(e => {\n          console.error(e);\n        });\n    }\n\n    new IntersectionObserver(handleIntersection.bind(this), {rootMargin: '0px 0px 400px 0px'}).observe(this);\n  }\n}\ncustomElements.define('product-recommendations', ProductRecommendations);\n\nclass ComplementaryProducts extends HTMLElement {\n  constructor() {\n    super();\n\n    this._mounted = false;\n    this._inited = false;\n\n    this.slider = null;\n    this.sliderItems = null;\n    this.prevButton = null;\n    this.nextButton = null;\n\n    this._io = null;\n    this._initScheduled = false;\n\n    this._onPrevClick = null;\n    this._onNextClick = null;\n  }\n\n  connectedCallback() {\n    if (this._mounted) return;\n    this._mounted = true;\n\n    this._armLazyInit();\n  }\n\n  disconnectedCallback() {\n    this._mounted = false;\n\n    this._disarmLazyInit();\n\n    if (this._inited) {\n      if (this.prevButton?.length && this._onPrevClick) {\n        this.prevButton.forEach(btn => btn.removeEventListener('click', this._onPrevClick));\n      }\n      if (this.nextButton?.length && this._onNextClick) {\n        this.nextButton.forEach(btn => btn.removeEventListener('click', this._onNextClick));\n      }\n    }\n\n    this._inited = false;\n    this._initScheduled = false;\n    this.slider = null;\n    this.sliderItems = null;\n    this.prevButton = null;\n    this.nextButton = null;\n    this._onPrevClick = null;\n    this._onNextClick = null;\n  }\n\n  _armLazyInit() {\n    if (this._io) return;\n\n    if ('IntersectionObserver' in window) {\n      this._io = new IntersectionObserver((entries) => {\n        const e = entries && entries[0];\n        if (!e) return;\n        if (e.isIntersecting) {\n          this._disarmLazyInit();\n          this._scheduleInit();\n        }\n      }, { root: null, rootMargin: '500px 0px', threshold: 0.01 });\n\n      this._io.observe(this);\n    } else {\n      window.addEventListener('load', () => this._scheduleInit(), { once: true });\n    }\n  }\n\n  _disarmLazyInit() {\n    if (this._io) {\n      this._io.disconnect();\n      this._io = null;\n    }\n  }\n\n  _scheduleInit() {\n    if (this._inited || this._initScheduled) return;\n    this._initScheduled = true;\n\n    const run = () => {\n      this._initScheduled = false;\n      this._initHard();\n    };\n\n    requestAnimationFrame(() => {\n      if ('requestIdleCallback' in window) {\n        requestIdleCallback(run, { timeout: 1500 });\n      } else {\n        setTimeout(run, 0);\n      }\n    });\n  }\n\n  _initHard() {\n    if (this._inited) return;\n    this._inited = true;\n\n    this.slider = this.querySelector('[id^=\"Slider-\"]');\n    if (!this.slider) return;\n\n    this.sliderItems = this.querySelectorAll('[id^=\"Slide-\"]');\n    this.prevButton = this.querySelectorAll('button[name=\"previous\"]');\n    this.nextButton = this.querySelectorAll('button[name=\"next\"]');\n\n    this._onPrevClick = (e) => {\n      e.preventDefault();\n      e.stopPropagation();\n      this.onButtonClick('previous');\n    };\n    this._onNextClick = (e) => {\n      e.preventDefault();\n      e.stopPropagation();\n      this.onButtonClick('next');\n    };\n\n    if (this.prevButton?.length) {\n      this.prevButton.forEach(button => button.addEventListener('click', this._onPrevClick));\n    }\n    if (this.nextButton?.length) {\n      this.nextButton.forEach(button => button.addEventListener('click', this._onNextClick));\n    }\n\n    if (!this.slider.querySelector('.is-active')) {\n      this.sliderItems?.[0]?.classList.add('is-active');\n    }\n\n    this.disableButtons();\n  }\n\n  disableButtons() {\n    if (!this.prevButton || !this.nextButton) return;\n    if (!this.sliderItems || !this.sliderItems.length) return;\n\n    this.activeSlide = this.querySelector('.is-active');\n    let activeSlideIndex = Array.from(this.sliderItems).indexOf(this.activeSlide);\n    if (activeSlideIndex < 0) activeSlideIndex = 0;\n\n    const nextActiveSlide = 1;\n\n    activeSlideIndex > this.sliderItems.length - 1 - nextActiveSlide\n      ? this.nextButton.forEach(button => button.setAttribute('disabled', 'disabled'))\n      : this.nextButton.forEach(button => button.removeAttribute('disabled'));\n\n    activeSlideIndex === 0\n      ? this.prevButton.forEach(button => button.setAttribute('disabled', 'disabled'))\n      : this.prevButton.forEach(button => button.removeAttribute('disabled'));\n  }\n\n  onButtonClick(direction) {\n    if (!this.slider || !this.sliderItems || !this.sliderItems.length) return;\n\n    this.activeSlide = this.slider.querySelector('.is-active');\n    let activeSlideIndex = Array.from(this.sliderItems).indexOf(this.activeSlide);\n    if (activeSlideIndex < 0) activeSlideIndex = 0;\n\n    const dataCount = 1;\n    const nextActiveSlide = dataCount;\n\n    if (direction === 'next') {\n      const lastIndex = this.sliderItems.length - 1;\n      activeSlideIndex + nextActiveSlide > lastIndex\n        ? activeSlideIndex = this.sliderItems.length - nextActiveSlide\n        : activeSlideIndex = activeSlideIndex + nextActiveSlide;\n\n      this.activeSlide?.classList.remove('is-active');\n      this.sliderItems[activeSlideIndex]?.classList.add('is-active');\n    }\n\n    if (direction === 'previous') {\n      activeSlideIndex - nextActiveSlide < 0\n        ? activeSlideIndex = 0\n        : activeSlideIndex = activeSlideIndex - nextActiveSlide;\n\n      this.activeSlide?.classList.remove('is-active');\n      this.sliderItems[activeSlideIndex]?.classList.add('is-active');\n    }\n\n    this.disableButtons();\n  }\n}\ncustomElements.define('complementary-products', ComplementaryProducts);\n\nclass ProductRecentlyViewed extends HTMLElement {\n  constructor() {\n    super();\n    \n    // Save the product ID in local storage to be eventually used for recently viewed section\n    if (isStorageSupported('local')) {\n      const productId = parseInt(this.dataset.productId);\n      const cookieName = 'avante-theme:recently-viewed';\n      const items = JSON.parse(window.localStorage.getItem(cookieName) || '[]');\n\n      // Check if the current product already exists, and if it does not, add it at the start\n      if (!items.includes(productId)) {\n        items.unshift(productId);\n      }\n\n      // By keeping only the 10 most recent\n      window.localStorage.setItem(cookieName, JSON.stringify(items.slice(0, 10)));\n    }\n  }\n}\ncustomElements.define('product-recently-viewed', ProductRecentlyViewed);\n\nclass RecentlyViewedProducts extends HTMLElement {\n  constructor() {\n    super();\n\n    theme.initWhenVisible({\n      element: this,\n      callback: this.init.bind(this),\n      threshold: 600\n    });\n  }\n\n  init() {\n    fetch(this.dataset.url + this.getQueryString())\n      .then(response => response.text())\n      .then(text => {\n        const html = document.createElement('div');\n        html.innerHTML = text;\n        const recommendations = html.querySelector('recently-viewed-products');\n        if (recommendations && recommendations.innerHTML.trim().length) {\n          this.innerHTML = recommendations.innerHTML;\n        }\n        this.classList.add('recently-viewed-products--loaded');\n      })\n      .catch(e => {\n        console.error(e);\n      });\n  }\n\n  getQueryString() {\n    const cookieName = 'avante-theme:recently-viewed';\n    let items = JSON.parse(window.localStorage.getItem(cookieName) || \"[]\");\n    items = items.filter(item => item != null)\n    if (this.dataset.productId && items.includes(parseInt(this.dataset.productId))) {\n      items.splice(items.indexOf(parseInt(this.dataset.productId)), 1);\n    }\n    return items.map((item) => \"id:\" + item).slice(0, 10).join(\" OR \");\n  }\n}\ncustomElements.define('recently-viewed-products', RecentlyViewedProducts);\n\nclass VideoSection extends HTMLElement {\n  constructor() {\n    super();\n\n    this.background = this.dataset.initMode !== 'template';\n    this.popup = this.closest('modal-dialog');\n    this.isPopupOpen = false;\n    this.observer = null;\n\n    if (this.popup) {\n      this.buttonClose = this.popup.querySelector('.close-popup');\n      this.overlay = document.querySelector('body > .overlay');\n      this.openPopup = this.popup.querySelector('.open-popup');\n      this.bannersWrapper = this.openPopup?.closest('.banner__wrapper');\n      this.videoButton = this.openPopup?.closest('.video-button-block');\n\n      const closeHandler = () => {\n        this.isPopupOpen = false;\n        this.disconnectObserver();\n        this.pauseMedia(true);\n        this.hiddenVideoPopup();\n      };\n\n      const openHandler = () => {\n        this.isPopupOpen = true;\n        this.visuallyVideoPopup();\n        this.playMedia();\n      };\n\n      this.buttonClose?.addEventListener('click', closeHandler);\n      this.buttonClose?.addEventListener('keydown', (event) => {\n        if (event.code.toUpperCase() === 'ENTER') closeHandler();\n      });\n\n      this.overlay?.addEventListener('click', closeHandler);\n\n      this.openPopup?.addEventListener('click', openHandler);\n      this.openPopup?.addEventListener('keydown', (event) => {\n        if (event.code.toUpperCase() === 'ENTER') openHandler();\n      });\n\n      document.addEventListener('keydown', (event) => {\n        if (event.code.toUpperCase() === 'ESCAPE' && this.player) closeHandler();\n      });\n    }\n\n    if (this.background) {\n      theme.initWhenVisible({\n        element: this,\n        callback: this.init.bind(this),\n        threshold: 600\n      });\n    } else {\n      this.init();\n    }\n  }\n\n  hiddenVideoPopup() {\n    if (this.bannersWrapper) {\n      this.bannersWrapper.style.zIndex = \"1\";\n      if (!this.bannersWrapper.closest('.overlapping-section')) {\n        this.bannersWrapper.style.overflow = \"hidden\";\n      }\n    }\n    if (this.videoButton) this.videoButton.style.zIndex = \"1\";\n  }\n\n  visuallyVideoPopup() {\n    if (this.bannersWrapper) {\n      this.bannersWrapper.style.zIndex = \"40\";\n      this.bannersWrapper.style.overflow = \"visible\";\n    }\n    if (this.videoButton) this.videoButton.style.zIndex = \"40\";\n  }\n\n  init() {\n    this.parentSelector = this.dataset.parent || '.deferred-media';\n    this.parent = this.closest(this.parentSelector);\n\n    switch (this.dataset.type) {\n      case 'youtube':\n        this.initYoutubeVideo();\n        break;\n      case 'vimeo':\n        this.initVimeoVideo();\n        break;\n      case 'mp4':\n        this.initMp4Video();\n        break;\n    }\n  }\n\n  initYoutubeVideo() {\n    window.loadScript('youtube').then(this.setupYoutubePlayer.bind(this));\n  }\n\n  initVimeoVideo() {\n    window.loadScript('vimeo').then(this.setupVimeoPlayer.bind(this));\n  }\n\n  initMp4Video() {\n    const player = this.querySelector('video');\n    if (player) {\n      const promise = player.play();\n      if (typeof promise !== 'undefined') {\n        promise.then(() => {}).catch(() => {\n          player.setAttribute('controls', '');\n        });\n      }\n    }\n  }\n\n  setAsLoaded() {\n    if (this.parent) this.parent.setAttribute('loaded', true);\n  }\n\n  shouldAutoPlayNow() {\n    if (this.background) return true;\n\n    if (this.popup) return this.isPopupOpen;\n\n    return true;\n  }\n\n  pauseMedia(muteToo = false) {\n    if (!this.player) return;\n\n    if (this.dataset.type === 'youtube') {\n      if (muteToo && typeof this.player.mute === 'function') this.player.mute();\n      if (typeof this.player.pauseVideo === 'function') this.player.pauseVideo();\n      return;\n    }\n\n    if (this.dataset.type === 'vimeo') {\n      if (muteToo && typeof this.player.setVolume === 'function') {\n        this.player.setVolume(0).catch(() => {});\n      }\n      if (typeof this.player.pause === 'function') {\n        this.player.pause().catch(() => {});\n      }\n      return;\n    }\n\n    if (typeof this.player.pause === 'function') this.player.pause();\n  }\n\n  playMedia() {\n    if (!this.player) return;\n\n    if (!this.shouldAutoPlayNow()) {\n      this.pauseMedia(true);\n      return;\n    }\n\n    if (this.dataset.type === 'youtube') {\n      if (theme.config.isTouch && typeof this.player.mute === 'function') this.player.mute();\n      if (!theme.config.isTouch && typeof this.player.unMute === 'function') this.player.unMute();\n      if (typeof this.player.playVideo === 'function') this.player.playVideo();\n      return;\n    }\n\n    if (this.dataset.type === 'vimeo') {\n      if (theme.config.isTouch && typeof this.player.setMuted === 'function') {\n        this.player.setMuted(true).catch(() => {});\n      } else if (typeof this.player.setVolume === 'function') {\n        this.player.setVolume(1).catch(() => {});\n      }\n      if (typeof this.player.play === 'function') {\n        this.player.play().catch(() => {});\n      }\n      return;\n    }\n\n    if (typeof this.player.play === 'function') this.player.play();\n  }\n\n  disconnectObserver() {\n    if (this.observer) {\n      this.observer.disconnect();\n      this.observer = null;\n    }\n  }\n\n  connectObserverIfPossible() {\n    if (!this.background) return;\n    if (!this.iframe) return;\n\n    this.disconnectObserver();\n\n    this.observer = new IntersectionObserver((entries) => {\n      entries.forEach(entry => {\n        if (entry.isIntersecting) {\n          this.playMedia();\n        } else {\n          this.pauseMedia(true);\n        }\n      });\n    }, { rootMargin: '0px 0px 50px 0px' });\n\n    this.observer.observe(this.iframe);\n  }\n\n  setupYoutubePlayer() {\n    const videoId = this.dataset.videoId;\n\n    const playerInterval = setInterval(() => {\n      if (window.YT) {\n        window.YT.ready(() => {\n          const element = document.createElement('div');\n          this.appendChild(element);\n\n          this.player = new YT.Player(element, {\n            videoId,\n            playerVars: {\n              showinfo: 0,\n              controls: !this.background,\n              fs: !this.background,\n              rel: 0,\n              height: '100%',\n              width: '100%',\n              iv_load_policy: 3,\n              html5: 1,\n              loop: 1,\n              playlist: videoId,\n              playsinline: 1,\n              modestbranding: 1,\n              disablekb: 1\n            },\n            events: {\n              onReady: this.onYoutubeReady.bind(this),\n              onStateChange: this.onYoutubeStateChange.bind(this)\n            }\n          });\n\n          clearInterval(playerInterval);\n        });\n      }\n    }, 50);\n  }\n\n  onYoutubeReady() {\n    this.iframe = this.querySelector('iframe');\n    if (this.iframe) {\n      this.iframe.classList.add('js-youtube');\n      this.iframe.setAttribute('tabindex', '-1');\n    }\n\n    if (this.shouldAutoPlayNow()) this.playMedia();\n    else this.pauseMedia(true);\n\n    this.setAsLoaded();\n    this.connectObserverIfPossible();\n  }\n\n  onYoutubeStateChange(event) {\n    if (!this.shouldAutoPlayNow()) {\n      this.pauseMedia(true);\n      return;\n    }\n\n    switch (event.data) {\n      case -1:\n        if (this.attemptedToPlay) this.setAsLoaded();\n        break;\n      case 0:\n        this.playMedia();\n        break;\n      case 1:\n        this.setAsLoaded();\n        break;\n      case 3:\n        this.attemptedToPlay = true;\n        break;\n    }\n  }\n\n  setupVimeoPlayer() {\n    const videoId = this.dataset.videoId;\n\n    const playerInterval = setInterval(() => {\n      if (window.Vimeo) {\n        this.player = new Vimeo.Player(this, {\n          id: videoId,\n          autoplay: this.background,\n          autopause: true,\n          background: this.background,\n          controls: !this.background,\n          loop: true,\n          height: '100%',\n          width: '100%'\n        });\n\n        this.player.on('play', () => {\n          if (this.popup && !this.isPopupOpen) {\n            this.player.setVolume(0).catch(() => {});\n            this.player.pause().catch(() => {});\n          }\n        });\n\n        this.player.ready().then(this.onVimeoReady.bind(this));\n        clearInterval(playerInterval);\n      }\n    }, 50);\n  }\n\n  onVimeoReady() {\n    this.iframe = this.querySelector('iframe');\n    if (this.iframe) {\n      this.iframe.classList.add('js-vimeo');\n      this.iframe.setAttribute('tabindex', '-1');\n    }\n\n    if (this.shouldAutoPlayNow()) this.playMedia();\n    else this.pauseMedia(true);\n\n    this.setAsLoaded();\n    this.connectObserverIfPossible();\n  }\n}\n\ncustomElements.define('video-section', VideoSection);\n\nclass DeferredMedia extends HTMLElement {\n  constructor() {\n    super();\n\n    this.poster = null;\n    this.popupVideo = null;\n    this.swipeVertical = false;\n    this.swipeHorizontal = false;\n    this.enableAutoplay = false;\n    this.mediaVisibilityWhenScrollByInMs = 300;\n    this._mounted = false;\n    this._firstVisibleObserver = null;\n    this._visibilityObserver = null;\n    this._pauseObserver = null;\n\n    this._firstVisibleTimer = null;\n    this._autoplayTriggered = false;\n\n    this._onPosterClick = this._onPosterClick.bind(this);\n    this._onPosterKeydown = this._onPosterKeydown.bind(this);\n\n    this._onPosterDown = this.swipeStart.bind(this);\n    this._onPosterMove = this.swipeAction.bind(this);\n    this._onPosterUp   = this.swipeEnd.bind(this);\n  }\n\n  connectedCallback() {\n    if (this._mounted) return;\n    this._mounted = true;\n\n    this.poster = this.querySelector('[id^=\"Deferred-Poster-\"]');\n    this.popupVideo = this.querySelector('.popup-video');\n    this.enableAutoplay = this.dataset.enableAutoplay === \"true\";\n\n    if (this.poster) {\n      this.poster.addEventListener('click', this._onPosterClick);\n      this.poster.addEventListener('mousedown', this._onPosterDown);\n      this.poster.addEventListener('mousemove', this._onPosterMove);\n      this.poster.addEventListener('mouseup', this._onPosterUp);\n      this.poster.addEventListener('keydown', this._onPosterKeydown);\n    }\n\n    if (this.enableAutoplay) {\n      this.autoplayMediaWhenFirstVisible();\n    }\n  }\n\n  disconnectedCallback() {\n    this._mounted = false;\n\n    if (this.poster) {\n      this.poster.removeEventListener('click', this._onPosterClick);\n      this.poster.removeEventListener('mousedown', this._onPosterDown);\n      this.poster.removeEventListener('mousemove', this._onPosterMove);\n      this.poster.removeEventListener('mouseup', this._onPosterUp);\n      this.poster.removeEventListener('keydown', this._onPosterKeydown);\n    }\n\n    if (this._firstVisibleTimer) {\n      clearTimeout(this._firstVisibleTimer);\n      this._firstVisibleTimer = null;\n    }\n\n    if (this._firstVisibleObserver) {\n      this._firstVisibleObserver.disconnect();\n      this._firstVisibleObserver = null;\n    }\n    if (this._visibilityObserver) {\n      this._visibilityObserver.disconnect();\n      this._visibilityObserver = null;\n    }\n    if (this._pauseObserver) {\n      this._pauseObserver.disconnect();\n      this._pauseObserver = null;\n    }\n  }\n\n  getObserverOptions(_targetElement) {\n    return { threshold: 0.5 };\n  }\n\n  autoplayMediaWhenFirstVisible() {\n    const mediaWrapper = this.closest('.product__media-item');\n    if (!mediaWrapper) return;\n    if (!('IntersectionObserver' in window)) return;\n    if (this._autoplayTriggered) return;\n\n    if (this._firstVisibleObserver) {\n      this._firstVisibleObserver.disconnect();\n      this._firstVisibleObserver = null;\n    }\n\n    this._firstVisibleObserver = new IntersectionObserver((entries, observerInstance) => {\n      const entry = entries && entries[0];\n      if (!entry) return;\n\n      if (entry.isIntersecting) {\n        if (!this._firstVisibleTimer) {\n          this._firstVisibleTimer = setTimeout(() => {\n            this._firstVisibleTimer = null;\n            if (this._autoplayTriggered) return;\n\n            this._autoplayTriggered = true;\n            this._autoplayLoadLikeClick();\n            observerInstance.unobserve(mediaWrapper);\n            observerInstance.disconnect();\n            this._firstVisibleObserver = null;\n          }, 500);\n        }\n      } else {\n        if (this._firstVisibleTimer) {\n          clearTimeout(this._firstVisibleTimer);\n          this._firstVisibleTimer = null;\n        }\n      }\n    }, this.getObserverOptions(mediaWrapper));\n\n    this._firstVisibleObserver.observe(mediaWrapper);\n  }\n\n  _autoplayLoadLikeClick() {\n    this.loadContent(false);\n\n    const buttonStop = this.querySelector('.stop-video');\n    if (!buttonStop) return;\n\n    if (this.closest('.product__media-item')) {\n      this.closest('.product__media-item').style.overflow = 'visible';\n    }\n\n    buttonStop.style.display = 'flex';\n\n    if (!buttonStop._dmBound) {\n      buttonStop._dmBound = true;\n      buttonStop.addEventListener('click', this.handleStopButtonClick.bind(this));\n    }\n  }\n\n  setPauseMediaWhenNotVisible(media, mediaWrapperToObserve) {\n    const target = mediaWrapperToObserve || media;\n    if (!target) return;\n    if (!('IntersectionObserver' in window)) return;\n\n    if (this._pauseObserver) this._pauseObserver.disconnect();\n\n    this._pauseObserver = new IntersectionObserver((entries) => {\n      const entry = entries && entries[0];\n      if (!entry) return;\n\n      if (entry.isIntersecting) {\n        media.dataset.visible = 'true';\n      } else if (media.dataset.visible === 'true') {\n        window.pauseMedia(media);\n        media.dataset.visible = 'false';\n      }\n    }, this.getObserverOptions(target));\n\n    this._pauseObserver.observe(target);\n  }\n\n  observeMediaVisibility(media, mediaWrapperToObserve) {\n    const target = mediaWrapperToObserve || media;\n    if (!target) return;\n    if (!('IntersectionObserver' in window)) return;\n\n    media.dataset.visible = 'true';\n\n    if (this._visibilityObserver) this._visibilityObserver.disconnect();\n\n    this._visibilityObserver = new IntersectionObserver((entries) => {\n      const entry = entries && entries[0];\n      if (!entry) return;\n\n      if (entry.isIntersecting) {\n        if (!target._intersectTimeout) {\n          target._intersectTimeout = setTimeout(() => {\n            target._intersectTimeout = null;\n            window.playMedia(media, this.enableAutoplay);\n            media.dataset.visible = 'true';\n          }, this.mediaVisibilityWhenScrollByInMs);\n        }\n      } else {\n        if (target._intersectTimeout) {\n          clearTimeout(target._intersectTimeout);\n          target._intersectTimeout = null;\n        }\n\n        if (media.dataset.visible === 'true') {\n          window.pauseMedia(media, this.enableAutoplay);\n          media.dataset.visible = 'false';\n        }\n      }\n    }, this.getObserverOptions(target));\n\n    this._visibilityObserver.observe(target);\n  }\n\n  loadContent(focus = true) {\n    const isProductOverviewSection = !!this.closest('.product-overview-section');\n    if (!isProductOverviewSection) {\n      window.pauseAllMedia();\n    }\n\n    if (this.getAttribute('loaded')) return;\n    if (this.querySelector('.template-video')) return;\n\n    const template = this.querySelector('template');\n    if (!template?.content?.firstElementChild) return;\n\n    const content = document.createElement('div');\n    content.classList.add('template-video');\n\n    const media = template.content.firstElementChild.cloneNode(true);\n    content.appendChild(media);\n\n    if (content.querySelector('video-section')) {\n      (this.popupVideo ? this.popupVideo.appendChild(content) : this.appendChild(content));\n      if (focus) (this.popupVideo || this).focus();\n    } else {\n      const deferredElement = this.appendChild(content.querySelector('video, model-viewer, iframe'));\n      this.setAttribute('loaded', true);\n      if (focus && deferredElement) deferredElement.focus();\n    }\n\n    const mediaWrapper = this.closest('.product__media-item') || template.closest('.product__media-item');\n\n    if (mediaWrapper) {\n      if (this.enableAutoplay) {\n        this.observeMediaVisibility(media, mediaWrapper);\n      } else {\n        this.setPauseMediaWhenNotVisible(media, mediaWrapper);\n      }\n    }\n\n    window.playMedia(media, this.enableAutoplay);\n  }\n\n  _onPosterClick(event) {\n    event.preventDefault();\n  }\n\n  _onPosterKeydown(event) {\n    if (event.code && event.code.toUpperCase() === 'ENTER') this.swipeEnd();\n  }\n\n  getEvent(event) {\n    return event.type.search('touch') !== -1 ? event.touches[0] : event;\n  }\n\n  swipeStart(event) {\n    event.preventDefault();\n\n    const evt = this.getEvent(event);\n    this.posInit = this.posX1 = evt.clientX;\n    this.posInitY = this.posY1 = evt.clientY;\n  }\n\n  swipeAction(event) {\n    const evt = this.getEvent(event);\n    this.posX2 = this.posX1 - evt.clientX;\n    this.posX1 = evt.clientX;\n    this.posY2 = this.posY1 - evt.clientY;\n    this.posY1 = evt.clientY;\n  }\n\n  swipeEnd() {\n    this.swipeVertical = Math.abs(this.posInitY - this.posY1) > 20;\n    this.swipeHorizontal = Math.abs(this.posInit - this.posX1) > 20;\n\n    if (!this.swipeVertical && !this.swipeHorizontal) {\n      this.loadContent();\n\n      const buttonStop = this.querySelector('.stop-video');\n      if (!buttonStop) return;\n\n      if (this.closest('.product__media-item')) this.closest('.product__media-item').style.overflow = 'visible';\n\n      buttonStop.style.display = 'flex';\n\n      if (!buttonStop._dmBound) {\n        buttonStop._dmBound = true;\n        buttonStop.addEventListener('click', this.handleStopButtonClick.bind(this));\n      }\n    }\n  }\n\n  handleStopButtonClick() {\n    const media = this.querySelector('iframe');\n    media?.remove();\n\n    if (getMediaType(media) === 'YOUTUBE') {\n      removeYoutubePlayer(media.id);\n    }\n\n    this.removeAttribute('loaded');\n\n    if (this.closest('.product__media-item')) this.closest('.product__media-item').style.overflow = 'hidden';\n\n    const buttonStop = this.querySelector('.stop-video');\n    if (buttonStop) buttonStop.style.display = 'none';\n  }\n}\ncustomElements.define('deferred-media', DeferredMedia);\n\nclass DoubleHover extends HTMLElement {\n  constructor() {\n    super();\n    // Link defocus animation when hovered over a link inside it\n    this.cardLink = this.querySelector('.double-hover');\n    this.elementsHover = this.querySelectorAll('.elem-hover')\n    this.richtext = this.querySelectorAll('.richtext')\n    if (this.richtext) {\n      this.richtext.forEach(item => {\n        if (item.querySelectorAll('a')) {\n          item.querySelectorAll('a').forEach(link => {\n          link.addEventListener('mouseleave', () => link.closest('.double-hover').classList.remove('no-hover'))\n          link.addEventListener('mouseenter', () => link.closest('.double-hover').classList.add('no-hover'))\n        })\n        }\n      })\n    } \n    if (this.elementsHover) {\n      this.elementsHover.forEach(item => {\n        // Return hover effect to parent link if we move mouse away from child link\n        item.addEventListener('mouseleave', () => {\n          this.cardLink.classList.remove('no-hover');\n          if(item.classList.contains('disabled')) this.cardLink.style.cursor = 'pointer'\n        })\n        // If we hover over the child link, we add class to parent link to cancel hover effect on it\n        item.addEventListener('mouseenter', () => {\n          this.cardLink.classList.add('no-hover');\n          if(item.classList.contains('disabled')) this.cardLink.style.cursor = 'default'\n        }) \n        if(item.classList.contains('disabled')) {\n          item.addEventListener('click', event => event.preventDefault())\n        }\n      })\n    } \n  }\n}\ncustomElements.define('double-hover', DoubleHover);\n\nclass MediaTabs extends HTMLElement {\n  constructor() {\n    super();\n    \n    this.tabs = this.querySelectorAll('.tab-js')\n    this.allMedia = this.closest('.tabs-container-js').querySelectorAll('.tab-media-js')\n    this.contents = this.closest('.tabs-container-js').querySelectorAll('.tab-content-js')\n\n    if (this.closest('.tabs-container-js.predictive-search-results')) { \n      if (this.tabs.length > 0) this.tabs[0].classList.add('active')\n      if (this.contents.length > 0) this.contents[0].classList.add('active')\n    }\n    if(this.allMedia.length > 0) {\n      this.allMedia.forEach(media => {\n        if(media.querySelector('video') && !media.closest('.active')) media.querySelector('video').pause();\n      })\n    }\n    this.contents.forEach(content => {\n      if(!content.closest('.active')) content.querySelectorAll('a').forEach(link => link.setAttribute('tabindex', '-1'))\n    })\n\n    this.addEventListener('click', this.changeActiveTab.bind(this));  \n    this.addEventListener('keydown', (event) => {\n      if (event.code.toUpperCase() === 'ENTER') this.changeActiveTab(event)\n    })\n\n    document.addEventListener('shopify:block:select', (event) => {\n      let activeTab = event.target\n      if(!this.closest('section').querySelector(`#${activeTab.getAttribute('id')}`)) return\n      this.tabs.forEach(tab =>  tab.classList.remove('active'))\n      if(this.allMedia.length > 0) this.allMedia.forEach(media => this.hiddenContentPrevActiveTab(media))\n      if(this.contents.length > 0) this.contents.forEach(content => this.hiddenContentPrevActiveTab(content))\n      activeTab.classList.add('active')\n      let activeElemID = activeTab.getAttribute('id')\n      if(activeTab.closest('.tab-media-js')) activeElemID = activeElemID.split('media-')[1]\n      if(this.closest('.media-with-tabs')) document.getElementById(activeElemID).classList.add('active')\n      if(this.contents.length == 0) return\n      this.contents.forEach(content => this.visibleElementActiveTab(content, activeElemID))\n    })\n  }\n\n  changeActiveTab(event) {\n    let eventTarget\n    (event.target) ? eventTarget = event.target : eventTarget = event\n    if(eventTarget.closest('.tab-js')) {\n      this.tabs.forEach(tab => tab.classList.remove('active'))\n      let activeElem = eventTarget.closest('.tab-js')\n      activeElem.classList.add('active')\n      let activeElemID = activeElem.getAttribute('id')\n      if(this.allMedia.length > 0) {\n        this.allMedia.forEach(media => this.hiddenContentPrevActiveTab(media))\n        this.allMedia.forEach(media => this.visibleElementActiveTab(media, activeElemID))\n      }\n      if(this.contents.length > 0) {\n        this.contents.forEach(content => this.hiddenContentPrevActiveTab(content))\n        this.contents.forEach(content => this.visibleElementActiveTab(content, activeElemID))\n      }\n    }\n  }\n\n  hiddenContentPrevActiveTab(element) {\n    element.querySelectorAll('a').forEach(link => link.setAttribute('tabindex', '-1'))\n    element.classList.remove('active');\n    // Pause any video\n    if(element.querySelector('video') && !element.closest('.active')) element.querySelector('video').pause();\n    if(element.querySelector('.js-youtube') && !element.closest('.active')) {\n      element.querySelector('.js-youtube').contentWindow.postMessage('{\"event\":\"command\",\"func\":\"' + 'pauseVideo' + '\",\"args\":\"\"}', '*');\n    }\n    if(element.querySelector('.js-vimeo') && !element.closest('.active')) {\n      element.querySelector('.js-vimeo').contentWindow.postMessage('{\"method\":\"pause\"}', '*')\n    }\n  }\n\n  visibleElementActiveTab(element, activeElemID) {\n    let elemID \n    \n    if(element.closest('.tab-content-js')) elemID = element.getAttribute('id').split('content-')[1]\n    if(element.closest('.tab-media-js')) elemID = element.getAttribute('id').split('media-')[1]\n    if(elemID == activeElemID) {\n      element.classList.add('active');\n      element.querySelectorAll('a').forEach(link => link.setAttribute('tabindex', '0'))\n    }\n    // Play autoplay video if it exists\n    if(element.querySelector('video') && !element.closest('.none-autoplay')) element.querySelector('video').play();\n  }\n}\ncustomElements.define('component-tabs', MediaTabs)\n\n// TweenMax lazy loader\nwindow.themeAssets = window.themeAssets || {};\n\nconst TweenMaxLoader = (() => {\n  let promise = null;\n\n  function load() {\n    if (window.TweenMax && window.TimelineMax) return Promise.resolve(true);\n    if (promise) return promise;\n\n    const src = window.themeAssets?.tweenMaxSrc;\n    if (!src) {\n      return Promise.resolve(false);\n    }\n\n    promise = new Promise((resolve, reject) => {\n      const existing = document.querySelector(`script[data-tweenmax=\"1\"]`);\n      if (existing) {\n        existing.addEventListener('load', () => resolve(true), { once: true });\n        existing.addEventListener('error', reject, { once: true });\n        return;\n      }\n\n      const s = document.createElement('script');\n      s.src = src;\n      s.async = true;\n      s.defer = true;\n      s.dataset.tweenmax = \"1\";\n      s.onload = () => resolve(true);\n      s.onerror = reject;\n      document.head.appendChild(s);\n    });\n\n    return promise;\n  }\n\n  function prefetchNear(elements, rootMarginPx = 400) {\n    if (!('IntersectionObserver' in window)) {\n      if ('requestIdleCallback' in window) requestIdleCallback(() => load(), { timeout: 1500 });\n      else setTimeout(() => load(), 0);\n      return;\n    }\n\n    const io = new IntersectionObserver((entries) => {\n      for (const e of entries) {\n        if (e.isIntersecting) {\n          io.disconnect();\n          load();\n          break;\n        }\n      }\n    }, { rootMargin: `${rootMarginPx}px 0px ${rootMarginPx}px 0px`, threshold: 0.01 });\n\n    elements.forEach(el => io.observe(el));\n  }\n\n  return { load, prefetchNear };\n})();\n\nclass HoverImageReveal extends HTMLElement {\n  constructor() {\n    super();\n       \n    this.reveal = null;\n    this.revealInner = null;\n    this.revealImg = null;\n\n    this.header = null;\n    this.sidebar = null;\n\n    this.windowWidth = 0;\n    this.headerHeight = 0;\n    this.imageWidth = 0;\n    this.imageHeight = 0;\n\n    this._rafMove = 0;\n    this._lastEv = null;\n    this._didMeasure = false;\n    this._didBind = false;\n\n    this._hovering = false;\n    this._warmed = false;\n\n    this._isPromo = false;\n\n    this._onMouseEnter = null;\n    this._onMouseLeave = null;\n    this._onMouseMove = null;\n    this._onResize = null;\n\n    this._enabled = this._computeEnabled();\n\n    if (!HoverImageReveal._globalWarmArmed) {\n      HoverImageReveal._globalWarmArmed = true;\n\n      const armGlobalWarm = () => {\n        const run = () => {\n          HoverImageReveal._globalWarmDone = true;\n\n          const warm = () => {\n            try {\n              TweenMaxLoader.load().catch(() => {});\n            } catch (e) {}\n          };\n\n          if ('requestIdleCallback' in window) requestIdleCallback(warm, { timeout: 2000 });\n          else setTimeout(warm, 0);\n        };\n\n        const once = () => {\n          if (HoverImageReveal._globalWarmDone) return;\n\n          run();\n\n          window.removeEventListener('scroll', once);\n          window.removeEventListener('pointermove', once);\n          window.removeEventListener('touchstart', once);\n        };\n\n        window.addEventListener('scroll', once, { passive: true });\n        window.addEventListener('pointermove', once, { passive: true });\n        window.addEventListener('touchstart', once, { passive: true });\n      };\n\n      if (document.readyState === 'complete') armGlobalWarm();\n      else window.addEventListener('load', armGlobalWarm, { once: true });\n    }\n  }\n\n  connectedCallback() {\n    this.reveal = this.querySelector('.hover-reveal');\n    this.revealInner = this.querySelector('.hover-reveal__inner');\n    this.revealImg = this.querySelector('.hover-reveal__img');\n\n    if (this.revealInner) this.revealInner.style.overflow = 'hidden';\n\n    this.header = document.querySelector('.shopify-section-header .header');\n    this.sidebar = document.querySelector('.secondary-sidebar-section');\n\n    // Cache promo check (so we don't call closest() every mousemove frame)\n    this._isPromo = !!this.closest('.section-scrolling-promotion');\n\n    if (!this._onResize) {\n      this._onResize = () => {\n        const nextEnabled = this._computeEnabled();\n        const wasEnabled = this._enabled;\n\n        this._didMeasure = false;\n        this._warmed = false;\n\n        if (wasEnabled && !nextEnabled) {\n          this._enabled = false;\n          this._disableHover();\n          return;\n        }\n\n        if (!wasEnabled && nextEnabled) {\n          this._enabled = true;\n          this._enableHover();\n          return;\n        }\n\n        this._enabled = nextEnabled;\n      };\n\n      window.addEventListener('resize', this._onResize, { passive: true });\n    }\n\n    if (!this._enabled) {\n      this._forceHidden();\n      return;\n    }\n\n    this._enableHover();\n  }\n\n  disconnectedCallback() {\n    this._disableHover();\n\n    if (this._onResize) window.removeEventListener('resize', this._onResize);\n\n    this._didBind = false;\n    this._hovering = false;\n    this._didMeasure = false;\n    this._warmed = false;\n\n    this._lastEv = null;\n  }\n\n  _computeEnabled() {\n    const wideEnough = window.innerWidth >= 768;\n    const canHoverFine =\n      typeof window.matchMedia === 'function' &&\n      window.matchMedia('(hover: hover) and (pointer: fine)').matches;\n    const isTouchFlag = !!(theme?.config?.isTouch);\n\n    if (!wideEnough) return false;\n    if (isTouchFlag) return canHoverFine;\n    return canHoverFine; \n  }\n\n  _enableHover() {\n    if (this._didBind) return;\n    this._didBind = true;\n\n    if (!this.reveal || !this.revealInner || !this.revealImg) return;\n\n    const warmUpOnce = () => {\n      if (this._warmed) return;\n      this._warmed = true;\n      this._didMeasure = false;\n      this._measureIfNeeded();\n    };\n\n    this._onMouseEnter = (ev) => {\n      this._hovering = true;\n\n      warmUpOnce();\n      this._positionElement(ev);\n\n      // If TweenMax is already available - don't create extra promise work\n      if (window.TweenMax && window.TimelineMax) {\n        this.showImage();\n        return;\n      }\n\n      TweenMaxLoader.load()\n        .then((ok) => {\n          if (!ok) return;\n          if (!this._hovering) return;\n          if (window.TweenMax && window.TimelineMax) this.showImage();\n        })\n        .catch(() => {});\n    };\n\n    this._onMouseLeave = () => {\n      this._hovering = false;\n      if (window.TweenMax && window.TimelineMax) this.hideImage();\n    };\n\n    this._onMouseMove = (ev) => {\n      this._lastEv = ev;\n      if (this._rafMove) return;\n      this._rafMove = requestAnimationFrame(() => {\n        this._rafMove = 0;\n        if (!this._lastEv) return;\n        this._positionElement(this._lastEv);\n      });\n    };\n\n    this.addEventListener('mouseenter', this._onMouseEnter, { passive: true });\n    this.addEventListener('mousemove', this._onMouseMove, { passive: true });\n    this.addEventListener('mouseleave', this._onMouseLeave, { passive: true });\n  }\n\n  _disableHover() {\n    if (this._rafMove) cancelAnimationFrame(this._rafMove);\n    this._rafMove = 0;\n\n    if (this._onMouseEnter) this.removeEventListener('mouseenter', this._onMouseEnter);\n    if (this._onMouseMove) this.removeEventListener('mousemove', this._onMouseMove);\n    if (this._onMouseLeave) this.removeEventListener('mouseleave', this._onMouseLeave);\n\n    this._onMouseEnter = null;\n    this._onMouseMove = null;\n    this._onMouseLeave = null;\n\n    this._didBind = false;\n    this._hovering = false;\n    this._lastEv = null;\n\n    this._forceHidden();\n  }\n\n  _forceHidden() {\n    if (!this.reveal) return;\n\n    if (window.TweenMax) {\n      try {\n        if (this.revealInner) TweenMax.killTweensOf(this.revealInner);\n        if (this.revealImg) TweenMax.killTweensOf(this.revealImg);\n      } catch (e) {}\n    }\n\n    this.reveal.style.opacity = 0;\n\n    try {\n      if (window.TweenMax) TweenMax.set(this, { zIndex: '' });\n      else this.style.zIndex = '';\n    } catch (e) {\n      this.style.zIndex = '';\n    }\n  }\n\n  _measureIfNeeded() {\n    if (this._didMeasure) return;\n\n    this.windowWidth = window.innerWidth;\n    if (this.sidebar) this.windowWidth = window.innerWidth - 96;\n\n    this.headerHeight = 0;\n    if (this.header) {\n      this.headerHeight = this.header.closest('.disable') ? 0 : this.header.offsetHeight;\n    }\n\n    this.imageWidth = this.revealInner.offsetWidth;\n    this.imageHeight = this.revealInner.offsetHeight * 0.8;\n\n    this._didMeasure = true;\n  }\n\n  _getMousePos(e) {\n    return { x: e.clientX, y: e.clientY };\n  }\n\n  _positionElement(ev) {\n    if (!ev) return;\n\n    this._measureIfNeeded();\n\n    const mousePos = this._getMousePos(ev);\n    const CURSOR_OFFSET_Y = 20;\n    const docScrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft || 0;\n\n    let horizontalPosition = mousePos.x + CURSOR_OFFSET_Y + docScrollLeft;\n    let verticalPosition = mousePos.y + CURSOR_OFFSET_Y;\n\n    if (horizontalPosition + this.imageWidth + 16 > this.windowWidth + docScrollLeft) {\n      horizontalPosition = (this.windowWidth + docScrollLeft) - this.imageWidth - 16;\n    }\n\n    if (this._isPromo) {\n      const triggerRect = this.getBoundingClientRect();\n      const cursorToImageY = triggerRect.height - CURSOR_OFFSET_Y;\n\n      const imageOverflowPixels =\n        (verticalPosition + this.revealInner.offsetHeight + cursorToImageY) - window.innerHeight;\n\n      if (imageOverflowPixels > 0) {\n        verticalPosition = verticalPosition - imageOverflowPixels;\n      }\n\n      this.reveal.style.left = `${horizontalPosition - triggerRect.left - docScrollLeft}px`;\n      this.reveal.style.top = `${verticalPosition - triggerRect.top + cursorToImageY}px`;\n      return;\n    }\n\n    if (this.headerHeight + 16 + this.imageHeight > verticalPosition) {\n      verticalPosition = this.headerHeight + 16 + this.imageHeight;\n    }\n\n    this.reveal.style.left = `${horizontalPosition - docScrollLeft}px`;\n    this.reveal.style.top = `${verticalPosition}px`;\n  }\n\n  showImage() {\n    if (!window.TweenMax || !window.TimelineMax) return;\n\n    TweenMax.killTweensOf(this.revealInner);\n    TweenMax.killTweensOf(this.revealImg);\n\n    const startAtYCoord = this._isPromo ? '0%' : '50%';\n    const yCoord = this._isPromo ? '0%' : '-80%';\n\n    this.tl = new TimelineMax({\n      onStart: () => {\n        this.reveal.style.opacity = 1;\n        TweenMax.set(this, { zIndex: 5 });\n      }\n    })\n      .delay(0.2)\n      .add('begin')\n      .add(new TweenMax(this.revealInner, 0.8, {\n        ease: Expo.easeOut,\n        startAt: { opacity: 0, y: startAtYCoord, rotation: -15, scale: 0 },\n        y: yCoord,\n        rotation: 0,\n        opacity: 1,\n        scale: 1\n      }), 'begin')\n      .add(new TweenMax(this.revealImg, 0.8, {\n        ease: Expo.easeOut,\n        startAt: { rotation: 15, scale: 2 },\n        rotation: 0,\n        scale: 1\n      }), 'begin');\n  }\n\n  hideImage() {\n    if (!window.TweenMax || !window.TimelineMax) return;\n\n    TweenMax.killTweensOf(this.revealInner);\n    TweenMax.killTweensOf(this.revealImg);\n\n    this.tl = new TimelineMax({\n      onStart: () => {\n        TweenMax.set(this, { zIndex: 4 });\n      },\n      onComplete: () => {\n        TweenMax.set(this, { zIndex: '' });\n        TweenMax.set(this.reveal, { opacity: 0 });\n      }\n    })\n      .add('begin')\n      .add(new TweenMax(this.revealInner, 0.15, {\n        ease: Sine.easeOut,\n        y: '-40%',\n        rotation: 10,\n        scale: 0.9,\n        opacity: 0\n      }), 'begin')\n      .add(new TweenMax(this.revealImg, 0.15, {\n        ease: Sine.easeOut,\n        rotation: -10,\n        scale: 1.5\n      }), 'begin');\n  }\n}\n\ncustomElements.define('link-hover-image', HoverImageReveal);\n\nclass SwatchesWrapper extends HTMLElement {\n  constructor() {\n    super();\n\n    this.productCard = this.closest('.card')\n\n    this.addEventListener('mouseleave', () => {\n      this.productCard.classList.remove('no-hover')\n    })\n    this.addEventListener('mouseenter', (event) => {\n      this.productCard.classList.add('no-hover')\n    }) \n  }\n}\ncustomElements.define('swatches-wrapper', SwatchesWrapper);\n\nclass ProductCardImage extends HTMLElement {\n  constructor() {\n    super();\n\n    this.showSecondMedia = this.getAttribute('show-second-media') === 'true';\n  }\n\n  connectedCallback() {\n    this.init()\n  }\n\n  disconnectedCallback() {\n    if (this.card) {\n      this.card.removeEventListener('mouseenter', this.handleCardMouseEnterBound);\n      this.card.removeEventListener('mouseleave', this.handleCardMouseLeaveBound);\n    }\n  }\n\n  init() {\n    this.firstMedia = this.querySelector('.card__image:first-child');\n    this.secondMedia = this.querySelector('.card__image:nth-child(2)');\n\n    if (this.querySelector('.lazy-image'))  {\n      this.firstMedia = this.querySelector('.lazy-image:first-child .card__image');\n      this.secondMedia = this.querySelector('.lazy-image:nth-child(2) .card__image');\n    }\n\n    this.firstMediaType = getMediaType(this.firstMedia);\n    this.secondMediaType = getMediaType(this.secondMedia);\n\n    this.card = this.closest('.card');\n    this.swatches = this.card.querySelector('swatches-wrapper');\n\n    const bothMediaAreImages = this.firstMediaType === 'IMAGE' && this.secondMediaType === 'IMAGE';\n    \n    if (this.firstMediaType === 'YOUTUBE') {\n      window.playYoutubeVideo(this.firstMedia, true);\n    }\n\n    if (this.card && this.showSecondMedia && this.secondMedia && !bothMediaAreImages) {\n      this.handleCardHover();\n\n      this.card.addEventListener('media-update-by-swatch', () => {\n        this.card.removeEventListener('mouseenter', this.handleCardMouseEnterBound);\n        this.card.removeEventListener('mouseleave', this.handleCardMouseLeaveBound);\n\n        this.init();\n      });\n    }\n  }\n\n  handleCardMouseEnter() {\n    if (!this.card.classList.contains('no-hover')) {\n      this.isHovered = true; \n\n      window.pauseMedia(this.firstMedia);\n      window.playMedia(this.secondMedia, true);\n    }\n  }\n\n  handleCardMouseLeave() {\n    if (!this.card.classList.contains('no-hover')) {\n      this.isHovered = false; \n\n      window.pauseMedia(this.secondMedia);\n      window.playMedia(this.firstMedia, true);\n    }\n  }\n\n  handleCardHover() {\n    this.isHovered = false;\n\n    this.handleCardMouseEnterBound = this.handleCardMouseEnter.bind(this);\n    this.handleCardMouseLeaveBound = this.handleCardMouseLeave.bind(this);\n\n    this.card.addEventListener('mouseenter', this.handleCardMouseEnterBound);\n    this.card.addEventListener('mouseleave', this.handleCardMouseLeaveBound);\n\n    // Observe class changes to .no-hover\n    const observer = new MutationObserver(() => {\n      const hasNoHover = this.card.classList.contains('no-hover');\n\n      if (hasNoHover && this.isHovered) {\n        // Trigger mouseleave if .no-hover is added while hovered\n        this.isHovered = false; \n        window.pauseMedia(this.secondMedia);\n        window.playMedia(this.firstMedia);\n      } else if (!hasNoHover && !this.isHovered && this.card.matches(':hover')) {\n        // Trigger mouseenter if .no-hover is removed and still hovered\n        this.isHovered = true; \n        window.pauseMedia(this.firstMedia);\n        window.playMedia(this.secondMedia);\n      }\n    });\n\n    observer.observe(this.card, { attributes: true, attributeFilter: ['class'] });\n  }\n}\n\ncustomElements.define('product-card-image', ProductCardImage);\n\nclass ColorSwatch extends HTMLElement {\n  constructor() {\n    super();\n\n    this.cached = {};\n    this.variantId = this.dataset.variantId;\n    this.colorsContainer = this.closest('.card__colors')\n    this.tooltip = this.querySelector('.color-swatch__title')\n    this.quickViewButton = this.closest('.card-container').querySelector('.quick-view')\n    this.productCard = this.closest('.card')\n    this.productHref = this.productCard.href\n    this.mediaContainer = this.productCard.querySelector('.card__product-image');\n    this.hoverBehavior = this.dataset.hoverBehavior;\n\n    this.firstMedia = this.productCard.querySelector('.card__product-image .card__image')?.cloneNode(true)\n    this.secondMedia = this.productCard.querySelector('.card__product-image .card__image--second')?.cloneNode(true)\n    this.variantFirstMedia = parseNode(this.dataset.firstMediaNode);\n    this.variantSecondMedia = parseNode(this.dataset.secondMediaNode);\n    this.priceInCard = this.productCard.querySelector('.price').innerHTML\n    this.gridItem = this.closest('.slider__grid-item');\n    this.gridHoverClass = 'is-swatch-hover';\n\n    this.addEventListener('click', (event) => {\n      event.preventDefault()\n\n      this.onClickHandler()\n\n      if (event.target.closest('a')) return false\n    });\n\n    this.closest('.color-swatch').addEventListener('mouseenter', () => { this.alignSwatches() }) \n    this.closest('.color-swatch').addEventListener('touchstart', () => { this.alignSwatches() })\n    this.closest('.color-swatch').addEventListener('mouseleave', this.onSwatchMouseLeave) \n\n    if (this.classList.contains('active-swatch')) {\n      this.activateColorSwatch();\n    }\n  }\n\n  onSwatchMouseLeave = () => {\n    if (!this.gridItem) return;\n    this.gridItem.classList.remove(this.gridHoverClass);\n  };\n\n  onClickHandler() {\n    if (this.closest('.show-first-image') && this.closest('.active-swatch')) {\n      this.resetSwatch();\n\n      return;\n    }\n\n    if (this.closest('.active-swatch')) {\n      return;\n    }\n\n    this.activateColorSwatch();\n  }\n\n  activateColorSwatch() {\n    if (this.productCard.querySelector('.swiper-product-card')) {\n      const firstMediaNode = parseNode(this.dataset.firstMediaNode);\n      const firstMediaId = firstMediaNode.dataset.id || firstMediaNode.querySelector('img').dataset.id;\n\n      this.productCard.querySelector('.swiper-product-card').dispatchEvent(new CustomEvent('color-swatch:change', {\n        detail: {\n          colorName: this.dataset.colorName,\n          firstMediaId: firstMediaId\n        }\n      }));\n    }\n    \n    const swatches = this.colorsContainer.querySelectorAll('.color-swatch');\n\n    swatches.forEach((swatch) => {\n      swatch.classList.remove('active-swatch');\n    });\n\n    this.classList.add('active-swatch');\n    this.updateURL();\n\n    if (\n      (this.hoverBehavior == 'second_image' || this.hoverBehavior == 'nothing') && \n      this.firstMedia && \n      !this.firstMedia.classList.contains('card__image-placeholder') && \n      this.variantFirstMedia\n    ) {\n      this.updateMedia(this.variantFirstMedia, this.variantSecondMedia);\n    }\n\n    if (this.closest('.show-selected-value')) this.colorSwatchFetch()\n  }\n\n  resetSwatch() {\n    this.classList.remove('active-swatch');\n    this.productCard.href = this.productHref;\n\n    if (this.productCard.querySelector('.swiper-product-card')) {\n      this.productCard.querySelector('.swiper-product-card').dispatchEvent(new CustomEvent('color-swatch:change', {\n        detail: {\n          colorName: 'all'\n        }\n      }));\n    }\n\n    if (this.className.includes('show-selected-value')) this.productCard.querySelector('.price').innerHTML = this.priceInCard\n\n    if (\n      (this.hoverBehavior === 'second_image' || this.hoverBehavior === 'nothing') &&\n      this.firstMedia &&\n      !this.firstMedia.classList.contains('card__image-placeholder')\n    ) {\n      this.updateMedia(this.firstMedia, this.secondMedia);\n    }\n  }\n\n  updateMedia(firstMedia, secondMedia) {\n    this.deleteAllChildren(this.mediaContainer);\n  \n    if (firstMedia) {\n      this.mediaContainer.appendChild(firstMedia);\n      window.playMedia(firstMedia, true);\n    }\n  \n    if (secondMedia && this.productCard.querySelector('.card__product-image--show-second')) {\n      this.mediaContainer.appendChild(secondMedia);\n    }\n  \n    this.dispatchMediaUpdateEvent();\n  }\n\n  dispatchMediaUpdateEvent() {\n    const event = new CustomEvent('media-update-by-swatch', {\n      bubbles: true,\n      composed: true,\n    });\n    this.dispatchEvent(event);\n  }\n\n  colorSwatchFetch() {\n    this.productHandle = this.dataset.productHandle;\n    this.productUrl = this.dataset.productUrl.split('/')[2]\n    if(this.productUrl && this.productHandle != this.productUrl) this.productHandle = this.productUrl\n    const collectionHandle = this.dataset.collectionHandle;\n    let sectionUrl = `${window.routes.root_url}/products/${this.productHandle}?variant=${this.variantId}&view=card`;\n\n    if (collectionHandle.length > 0) {\n      sectionUrl = `${window.routes.root_url}/collections/${collectionHandle}/products/${this.productHandle}?variant=${this.variantId}&view=card`;\n    }\n\n    // remove double `/` in case shop might have /en or language in URL\n    sectionUrl = sectionUrl.replace('//', '/');\n\n    if (this.cached[sectionUrl]) {\n      this.renderProductInfo(this.cached[sectionUrl]);\n      return;\n    }\n\n    fetch(sectionUrl)\n      .then(response => response.text())\n      .then(responseText => {\n        const html = new DOMParser().parseFromString(responseText, 'text/html');\n        this.cached[sectionUrl] = html;\n        this.renderProductInfo(html);\n      })\n      .catch(e => {\n        console.error(e);\n      });\n  }\n\n  renderProductInfo(html) {\n    this.updatePrice(html);\n    this.updateSize(html);\n    this.updateBadge(html);\n    this.updateTitle(html);\n  }\n\n  updatePrice(html) {\n    const selector = '.price';\n    const destination = this.productCard.querySelector(selector);\n    const source = html.querySelector('main').querySelector(selector);\n\n    if (source && destination) destination.innerHTML = source.innerHTML;\n  }\n\n  updateSize(html) {\n    const selector = '.card__sizes';\n    const destination = this.productCard.querySelector(selector);\n    const source = html.querySelector('main').querySelector(selector);\n\n    if (source && destination) destination.innerHTML = source.innerHTML;\n  }\n\n  updateBadge(html) {\n    const selector = '.card__badges';\n    const destination = this.productCard.querySelector(selector);\n    const source = html.querySelector('main').querySelector(selector);\n\n    if (source && destination) destination.innerHTML = source.innerHTML;\n  }\n\n  updateTitle(html) {\n    const selector = '.card__title-js';\n    const destination = this.productCard.querySelector(selector);\n    const source = html.querySelector('main').querySelector(selector);\n    const name_characters = destination.closest('.card__title').dataset.nameCharacters\n\n    let source_innerHTML\n    if (source) source_innerHTML = source.innerHTML\n    if (name_characters && source.innerHTML.trim().length > name_characters) source_innerHTML = source.innerHTML.trim().slice(0, name_characters) + '...'\n    if (source && destination) destination.innerHTML = source_innerHTML;\n  }\n\n  updateURL() {\n    const activeSwatch = this.colorsContainer.querySelector('.active-swatch')\n    const activeVariantURL = activeSwatch.querySelector('.color-swatch__link').getAttribute('href')\n    this.productCard.setAttribute('href', activeVariantURL)\n    if (this.quickViewButton) this.quickViewButton.dataset.productUrl = activeVariantURL\n    document.dispatchEvent(new CustomEvent('product_cart:update_url'));\n  }\n\n  alignSwatches() {\n    this.cardViewport =\n      this.tooltip.closest('.slider__viewport') ||\n      this.tooltip.closest('.component-tabs__content') ||\n      this.tooltip.closest('.shopify-section');\n    this.tooltip.removeAttribute('style')\n    if (this.cardViewport && this.cardViewport.getBoundingClientRect().left >= this.tooltip.getBoundingClientRect().left) {\n      this.tooltip.setAttribute('style', `right: calc(50% - ${(Math.abs(this.tooltip.getBoundingClientRect().left - this.cardViewport.getBoundingClientRect().left))}px);`)\n    }\n    if (!this.gridItem) return;\n    this.gridItem.classList.add(this.gridHoverClass);\n  }\n\n  deleteAllChildren(parent) {\n    while (parent.firstChild) {\n      parent.removeChild(parent.firstChild);\n    }\n  }\n}\ncustomElements.define('color-swatch', ColorSwatch);\n\nclass ScrollingPromotion extends HTMLElement {\n  constructor() {\n    super();\n\n    this.config = {\n      moveTime: parseFloat(this.dataset.speed), // 100px going to move for\n      space: 100,  // 100px\n    };\n\n    this.promotion = this.querySelector('.promotion');\n\n    theme.initWhenVisible({\n      element: this,\n      callback: this.init.bind(this),\n      threshold: 600\n    });\n  }\n\n  init() {\n    if (this.childElementCount === 1) {\n      this.promotion.classList.add('promotion--animated');\n\n      for (let index = 0; index < 10; index++) {\n        this.clone = this.promotion.cloneNode(true);\n        this.clone.setAttribute('aria-hidden', true);\n        this.appendChild(this.clone);\n\n        let imageWrapper = this.clone.querySelector('.promotion__item');\n        if (imageWrapper) imageWrapper.classList.remove('loading');\n      }\n      let animationTimeFrame = (this.promotion.clientWidth / this.config.space) * this.config.moveTime;\n      this.style.setProperty('--duration', `${animationTimeFrame}s`);\n\n      this.widthPromotion = this.promotion.offsetWidth\n      this.widthWrapper = this.offsetWidth\n      this.percent = this.widthPromotion * 100 / this.widthWrapper\n      // Define a variable to assign a scroll step. Do not use transform property, this may cause the animation (HoverImageReveal) to work incorrectly\n      this.style.setProperty('--left-position', `-${this.percent}%`);\n\n      window.addEventListener('resize', () => {\n        this.widthPromotion = this.promotion.offsetWidth\n        this.widthWrapper = this.offsetWidth\n        this.percent = this.widthPromotion * 100 / this.widthWrapper\n        this.style.setProperty('--left-position', `-${this.percent}%`);\n        let animationTimeFrame = (this.promotion.clientWidth / this.config.space) * this.config.moveTime;\n        this.style.setProperty('--duration', `${animationTimeFrame}s`);\n      })\n\n      // pause when out of view\n      const observer = new IntersectionObserver((entries, _observer) => {\n        entries.forEach(entry => {\n          if (entry.isIntersecting) {\n            this.scrollingPlay();\n          } else {\n            this.scrollingPause();\n          }\n        });\n      }, {rootMargin: '0px 0px 50px 0px'});\n\n      observer.observe(this);\n    }\n  }\n\n  scrollingPlay() {\n    this.classList.remove('scrolling-promotion--paused');\n  }\n\n  scrollingPause() {\n    this.classList.add('scrolling-promotion--paused');\n  }\n}\ncustomElements.define('scrolling-promotion', ScrollingPromotion);\n\nclass CascadingGrid extends HTMLElement {\n  constructor() {\n    super();\n\n    this.masonry = null;\n\n    this._inited = false;\n    this._initScheduled = false;\n\n    this._io = null;\n    this._firstIntent = null;\n    this._onResize = null;\n    this._ro = null;\n    this._layoutRaf = 0;\n\n    this._startInitSoon = this._startInitSoon.bind(this);\n    this._armLazyInit = this._armLazyInit.bind(this);\n    this._disarmLazyInit = this._disarmLazyInit.bind(this);\n    this._initHard = this._initHard.bind(this);\n    this._safeLayout = this._safeLayout.bind(this);\n  }\n\n  connectedCallback() {\n    if (window.Shopify && Shopify.designMode) {\n      this._startInitSoon('design-mode', { urgent: true });\n      return;\n    }\n    this._armLazyInit();\n  }\n\n  disconnectedCallback() {\n    this._disarmLazyInit();\n\n    if (this._ro) {\n      this._ro.disconnect();\n      this._ro = null;\n    }\n\n    if (this._onResize) {\n      window.removeEventListener('resize', this._onResize);\n      this._onResize = null;\n    }\n\n    if (this._layoutRaf) {\n      cancelAnimationFrame(this._layoutRaf);\n      this._layoutRaf = 0;\n    }\n\n    if (this.masonry) {\n      try { this.masonry.destroy(); } catch (e) {}\n      this.masonry = null;\n    }\n\n    this._inited = false;\n    this._initScheduled = false;\n  }\n\n  _armLazyInit() {\n    if (this._lazyArmed) return;\n    this._lazyArmed = true;\n\n    this._firstIntent = () => this._startInitSoon('intent', { urgent: true });\n    this.addEventListener('pointerenter', this._firstIntent, { once: true, passive: true });\n    this.addEventListener('pointerdown',  this._firstIntent, { once: true, passive: true });\n    this.addEventListener('focusin',      this._firstIntent, { once: true, passive: true });\n\n    if ('IntersectionObserver' in window) {\n      this._io = new IntersectionObserver((entries) => {\n        const e = entries && entries[0];\n        if (!e) return;\n\n        const vh = (e.rootBounds && e.rootBounds.height) || window.innerHeight || 0;\n        const distanceToViewport = Math.max(0, e.boundingClientRect.top - vh);\n        const urgent = distanceToViewport < 250;\n\n        if (e.isIntersecting) this._startInitSoon('viewport', { urgent });\n      }, {\n        root: null,\n        rootMargin: '1200px 0px',\n        threshold: 0.01\n      });\n\n      this._io.observe(this);\n    } else {\n      this._startInitSoon('fallback', { urgent: false });\n    }\n  }\n\n  _disarmLazyInit() {\n    if (this._firstIntent) {\n      this.removeEventListener('pointerenter', this._firstIntent);\n      this.removeEventListener('pointerdown',  this._firstIntent);\n      this.removeEventListener('focusin',      this._firstIntent);\n      this._firstIntent = null;\n    }\n    if (this._io) {\n      this._io.disconnect();\n      this._io = null;\n    }\n    this._lazyArmed = false;\n  }\n\n  _startInitSoon(reason, { urgent } = { urgent: false }) {\n    if (this._inited || this._initScheduled) return;\n    this._initScheduled = true;\n\n    this._disarmLazyInit();\n\n    const run = () => {\n      this._initScheduled = false;\n      this._initHard();\n    };\n\n    if (window.Shopify && Shopify.designMode) {\n      requestAnimationFrame(run);\n      return;\n    }\n\n    if (urgent) {\n      requestAnimationFrame(run);\n      return;\n    }\n\n    if ('requestIdleCallback' in window) {\n      requestIdleCallback(run, { timeout: 2000 });\n    } else {\n      requestAnimationFrame(run);\n    }\n  }\n\n  _initHard() {\n    if (this._inited) return;\n    this._inited = true;\n\n    const isRTL = document.documentElement.dir === 'rtl';\n    const containerSelector = this.getAttribute('container-selector');\n    const itemSelector = this.getAttribute('item-selector');\n    const gridContainer = containerSelector ? this.querySelector(containerSelector) : null;\n\n    if (!gridContainer) return;\n\n    this.masonry = new Masonry(gridContainer, {\n      itemSelector,\n      originLeft: !isRTL,\n      initLayout: false\n    });\n\n    this._safeLayout();\n\n    this._onResize = () => this._safeLayout();\n    window.addEventListener('resize', this._onResize, { passive: true });\n\n    if ('ResizeObserver' in window) {\n      this._ro = new ResizeObserver(() => this._safeLayout());\n      this._ro.observe(gridContainer);\n    }\n  }\n\n  _safeLayout() {\n    if (!this.masonry) return;\n    if (this._layoutRaf) cancelAnimationFrame(this._layoutRaf);\n    this._layoutRaf = requestAnimationFrame(() => {\n      this._layoutRaf = 0;\n      try { this.masonry.layout(); } catch (e) {}\n    });\n  }\n}\ncustomElements.define('cascading-grid', CascadingGrid);\n\nclass ShowMoreButton extends HTMLElement {\n  constructor() {\n    super();\n\n    const button = this.querySelector('button');\n\n    button.addEventListener('click', (event) => {\n      this.toggleShowMore(event.target)\n    });\n\n    this.parentPanel = this.closest('.accordion__panel');\n    this.showMoreLabel = this.querySelector('.label-show--more');\n    this.showLessLabel = this.querySelector('.label-show--less');\n  }\n\n  toggleShowMore(button, forceOpen = false) {\n    const parentDisplay = button.closest('[id^=\"Show-More-\"]').closest('.js-filter');\n    \n    if (forceOpen) {\n      this.showMoreLabel.classList.add('hidden');\n      this.showLessLabel.classList.remove('hidden');\n\n      parentDisplay.querySelectorAll('.show-more-item').forEach((item) => item.classList.remove('hidden'));\n    } else {\n      this.showMoreLabel.classList.toggle('hidden');\n      this.showLessLabel.classList.toggle('hidden');\n\n      parentDisplay.querySelectorAll('.show-more-item').forEach((item) => item.classList.toggle('hidden'));\n    }\n\n    this.parentPanel.style.maxHeight = this.parentPanel.scrollHeight + \"px\"\n  }\n}\n\ncustomElements.define('show-more-button', ShowMoreButton);\n\nclass InfiniteScroll extends HTMLElement {\n  constructor() {\n    super();\n\n    this.sectionId = this.closest('section').id.split('shopify-section-')[1]\n    if(this.closest('.section-collection-tabs')) {\n      this.sectionId = this.closest('.component-tabs__content').id.split('content-')[1]\n    }\n    this.querySelector('button').addEventListener('click', this.onClickHandler.bind(this));\n    if (this.dataset.trigger == 'auto') {\n      new IntersectionObserver(this.handleIntersection.bind(this), {rootMargin: '0px 0px 200px 0px'}).observe(this);\n    }\n  }\n\n  onClickHandler() {\n    if (this.classList.contains('loading') || this.classList.contains('disabled')) return;\n    this.classList.add('loading');\n    this.classList.add('disabled');\n    this.querySelector('button').innerHTML = this.querySelector('.loading-overlay__spinner').innerHTML\n    const sections = InfiniteScroll.getSections(this.sectionId);\n    sections.forEach(() => {\n      const url = this.dataset.url;\n      InfiniteScroll.renderSectionFromFetch(url, this.sectionId );\n    });\n  }\n\n  handleIntersection(entries, observer) {\n    if (!entries[0].isIntersecting) return;\n    observer.unobserve(this);\n\n    this.onClickHandler();\n  }\n\n  static getSections(sectionID) {\n    return [\n      {\n        section: document.getElementById(`product-grid--${sectionID}`).dataset.id,\n      }\n    ]\n  }\n\n  static renderSectionFromFetch(url, sectionId) {\n    fetch(url)\n      .then(response => response.text())\n      .then((responseText) => {\n        const html = responseText;\n        InfiniteScroll.renderPagination(html, sectionId);\n        InfiniteScroll.renderProductGridContainer(html, sectionId);\n      })\n      .catch((e) => {\n        console.error(e);\n      });\n  }\n\n  static renderPagination(html, sectionId) {\n    const container = document.getElementById(`ProductGridContainer--${sectionId}`).querySelector('.pagination-wrapper');\n    const pagination = new DOMParser().parseFromString(html, 'text/html').getElementById(`ProductGridContainer--${sectionId}`).querySelector('.pagination-wrapper');\n    if (pagination) {\n      container.innerHTML = pagination.innerHTML;\n    }\n    else {\n      container.remove();\n    }\n  }\n\n  static renderProductGridContainer(html, sectionId) {\n    const container = document.getElementById(`product-grid--${sectionId}`);\n    const products = new DOMParser().parseFromString(html, 'text/html').getElementById(`product-grid--${sectionId}`);\n    container.insertAdjacentHTML('beforeend', products.innerHTML);\n  }\n}\ncustomElements.define('infinite-scroll', InfiniteScroll);  \n\nclass ImageComparison extends HTMLElement {\n  constructor() {\n    super();\n    this._initialized = false;\n\n    if ('IntersectionObserver' in window) {\n      this._io = new IntersectionObserver((entries) => {\n        const e = entries && entries[0];\n        if (!e || !e.isIntersecting) return;\n        this._io.disconnect();\n        this._io = null;\n        this._init();\n      }, { root: null, rootMargin: '0px', threshold: 0 });\n      this._io.observe(this);\n    } else {\n      this._init();\n    }\n  }\n\n  _init() {\n    if (this._initialized) return;\n    this._initialized = true;\n\n    this.range = this.querySelector('.image-comparison__range');\n    if (!this.range) return;\n\n    this.isRTL = document.documentElement.dir === 'rtl';\n\n    const updatePosition = (value) => {\n      const position = this.isRTL ? 100 - value : value;\n      this.style.setProperty('--position', `${position}%`);\n    };\n\n    this.range.addEventListener('input', (e) => updatePosition(e.target.value));\n    this.range.addEventListener('change', (e) => updatePosition(e.target.value));\n\n    this.setValue();\n    this._boundSetValue = this.setValue.bind(this);\n    window.addEventListener('resize', this._boundSetValue);\n  }\n\n  setValue() {\n    if (!this.range) return;\n    this.width = this.offsetWidth;\n    this.min = Math.max(Math.ceil(8 * 100 / this.width * 10) / 10, 0);\n    this.max = 100 - this.min;\n    this.range.setAttribute('min', this.min);\n    this.range.setAttribute('max', this.max);\n  }\n\n  disconnectedCallback() {\n    if (this._io) {\n      this._io.disconnect();\n      this._io = null;\n    }\n    if (this._boundSetValue) {\n      window.removeEventListener('resize', this._boundSetValue);\n    }\n  }\n}\ncustomElements.define('image-comparison', ImageComparison);\n\nclass ImageWithHotspots extends HTMLElement {\n  constructor() {\n    super();\n    this.timeout\n\n    this.dots = this.querySelectorAll('.image-with-hotspots__dot');\n    this.dropdowns = this.querySelectorAll('.image-with-hotspots__dot ~ .image-with-hotspots__content');\n    this.dots.forEach(dot => dot.addEventListener('mouseenter', (event) => {\n      if (event.target.closest('.image-with-hotspots__dot')) this.openDropdown(event.target.closest('.image-with-hotspots__dot')) \n    }))\n\n    this.dots.forEach(dot => dot.addEventListener('mousemove', (event) => {\n      if (event.target.closest('.image-with-hotspots__dot')) this.openDropdown(event.target.closest('.image-with-hotspots__dot')) \n    }))\n\n    this.dots.forEach(dot => dot.addEventListener('mouseleave', (event) => {\n      if (event.relatedTarget && !event.relatedTarget.closest('.image-with-hotspots__content')) this.closeDropdown(dot)\n    }))\n\n    this.dropdowns.forEach(dropdown => dropdown.addEventListener('mouseleave', (event) => {\n      if (event.relatedTarget != dropdown.previousElementSibling) this.closeDropdown(dropdown.previousElementSibling)\n    }))\n\n    this.dropdowns.forEach(dropdown => dropdown.addEventListener('click', (event) => {\n      if(event.target.closest('quick-view-button') && event.target.closest('quick-view-button').previousElementSibling.closest('.open')) this.closeDropdown(event.target.closest('quick-view-button').previousElementSibling)\n    }))\n  }\n\n  openDropdown(item) {\n    this.stopAnimation()\n\n    if (!item.nextElementSibling) return;\n\n    this.alignDropdown(item.nextElementSibling)\n    item.classList.add('open', 'active')\n    item.classList.remove('closing')\n    item.closest('.image-with-hotspots__hotspot').style.zIndex = 6\n  }\n\n  closeDropdown(item) {\n    if (!item.nextElementSibling) return;\n\n    item.classList.add('closing')\n\n    this.timeout = setTimeout(() => {\n      item.classList.remove('closing')\n      item.classList.remove('open')\n      item.closest('.image-with-hotspots__hotspot').removeAttribute('style')\n      this.content = item.nextElementSibling\n      this.contentIcon = this.content.querySelector('.image-with-hotspots__content-icon')\n      this.content.removeAttribute('style')\n      this.contentIcon.removeAttribute('style')\n    }, 300);\n\n    item.classList.remove('active')\n  }\n\n  alignDropdown(item) {\n    this.itemCoordinate = item.getBoundingClientRect();\n    this.contentIcon = item.querySelector('.image-with-hotspots__content-icon')\n    this.itemWidth = item.offsetWidth\n    this.viewportWidth = window.innerWidth\n    this.dotPosition = Math.round(item.closest('.image-with-hotspots__hotspot').getBoundingClientRect().left)\n    if(this.itemCoordinate.left < 0) {\n      item.style.left = 0 - this.dotPosition + 'px';\n      item.style.right = 'auto';\n      this.contentIcon.style.left = this.dotPosition + 22 - 8 + 'px';\n      this.contentIcon.style.right = 'auto';\n    } else if (this.itemCoordinate.right  > this.viewportWidth) {\n      item.style.right = 'auto';\n      item.style.left = this.viewportWidth - this.dotPosition - this.itemWidth + 'px';\n      this.contentIcon.style.left = 'auto';\n      this.contentIcon.style.right = this.viewportWidth - this.dotPosition - 22 - 8 + 'px';\n    } \n  }\n\n  stopAnimation() {\n    clearTimeout(this.timeout)\n    this.querySelectorAll('.image-with-hotspots__hotspot').forEach(item => item.removeAttribute('style'))\n  }\n}\ncustomElements.define('image-with-hotspots', ImageWithHotspots);\n\nclass PromoPopup extends HTMLElement {\n  constructor() {\n    super();\n\n    if (window.location.pathname === '/challenge') return;\n\n    this.cookieName = this.getAttribute('data-section-id');\n\n    this.classes = {\n      bodyClass: 'hidden',\n      openClass: 'open',\n      closingClass: 'is-closing',\n      showImage: 'show-image'\n    };\n\n    this.originalSection = this.closest('section');\n    this.popup = this.querySelector('.popup-wrapper');\n    this.popupPlaceholder = document.createComment('popup-placeholder');\n    this.stickyTab = this.querySelector('.promo-sticky-tab');\n    this.openTabButton = this.querySelector('.open-sticky-tab');\n    this.closeTabButton = this.querySelector('.close-sticky-tab');\n    this.overlay = document.querySelector('body > .overlay');\n    if (this.querySelector('.age-verification__overlay')) this.overlay = this.querySelector('.age-verification__overlay');\n\n    this.hasPopupedUp = false;\n    this.flyout = false;\n\n    if (this.popup?.dataset?.position === 'right_flyout' || this.popup?.dataset?.position === 'left_flyout') {\n      this.flyout = true;\n    }\n\n    this._onToggleClick = this.onButtonClick.bind(this);\n    this._onKeyDown = this._onKeyDown.bind(this);\n    this._onCartDrawerOpen = (event) => this.closePopup(event);\n\n    this._scrollDelayActive = false;\n    this._scrollDelayPercent = null;\n    this._activateScrollDelay = this._activateScrollDelay.bind(this);\n    this._onScrollDelay = this._onScrollDelay.bind(this);\n\n    this.onShopifySectionLoad = null;\n    this.onShopifySectionSelect = null;\n    this.onShopifySectionDeselect = null;\n\n    this._searchmodalListenerAdded = false;\n    this._onSearchModalOpen = () => {\n      const sec = this.closest('section');\n      if (sec) sec.style.zIndex = '9';\n    };\n\n    this._togglesBound = false;\n\n    if (this.closeTabButton) {\n      this.closeTabButton.addEventListener('click', this.closeStickyTab.bind(this));\n    }\n  }\n\n  connectedCallback() {\n    if (window.location.pathname === '/challenge') return;\n\n    if (!this._togglesBound) {\n      this._togglesBound = true;\n      this._toggleButtons = Array.from(this.querySelectorAll('[data-popup-toggle]'));\n      this._toggleButtons.forEach((button) => {\n        button.addEventListener('click', this._onToggleClick);\n      });\n    }\n\n    this.openStickyTab();\n\n    document.addEventListener('keydown', this._onKeyDown);\n    document.addEventListener('cart-drawer:open', this._onCartDrawerOpen);\n\n    if (!this.getCookie(this.cookieName)) {\n      this.init();\n    }\n\n    if (Shopify?.designMode) {\n      this.onShopifySectionLoad = this.onSectionLoad.bind(this);\n      this.onShopifySectionSelect = this.onSectionSelect.bind(this);\n      this.onShopifySectionDeselect = this.onSectionDeselect.bind(this);\n      document.addEventListener('shopify:section:load', this.onShopifySectionLoad);\n      document.addEventListener('shopify:section:select', this.onShopifySectionSelect);\n      document.addEventListener('shopify:section:deselect', this.onShopifySectionDeselect);\n    }\n  }\n\n  disconnectedCallback() {\n    if (window.location.pathname === '/challenge') return;\n\n    if (this._toggleButtons?.length) {\n      this._toggleButtons.forEach((button) => {\n        button.removeEventListener('click', this._onToggleClick);\n      });\n    }\n    this._toggleButtons = null;\n    this._togglesBound = false;\n\n    if (this.closeTabButton) {\n      this.closeTabButton.removeEventListener('click', this.closeStickyTab);\n    }\n\n    document.removeEventListener('keydown', this._onKeyDown);\n    document.removeEventListener('cart-drawer:open', this._onCartDrawerOpen);\n    window.removeEventListener('scroll', this._activateScrollDelay);\n    document.removeEventListener('scroll', this._onScrollDelay);\n\n    if (Shopify?.designMode) {\n      document.removeEventListener('shopify:section:load', this.onShopifySectionLoad);\n      document.removeEventListener('shopify:section:select', this.onShopifySectionSelect);\n      document.removeEventListener('shopify:section:deselect', this.onShopifySectionDeselect);\n      document.body.classList.remove(this.classes.bodyClass);\n    }\n\n    if (this._searchmodalListenerAdded) {\n      document.removeEventListener('searchmodal:open', this._onSearchModalOpen);\n      this._searchmodalListenerAdded = false;\n    }\n  }\n\n  _onKeyDown(event) {\n    if (event.code?.toUpperCase() === 'ESCAPE' && this.popup?.classList.contains(this.classes.openClass)) {\n      this.closePopup(event);\n    }\n  }\n\n  onSectionLoad(event) {\n    filterShopifyEvent(event, this, () => this.openPopup.bind(this));\n  }\n  onSectionSelect(event) {\n    filterShopifyEvent(event, this, this.openPopup.bind(this));\n  }\n  onSectionDeselect(event) {\n    filterShopifyEvent(event, this, this.closePopup.bind(this));\n  }\n\n  init() {\n    if (Shopify?.designMode) return;\n\n    if (this.dataset.delayType === 'timer') {\n      const delayValue = Shopify.designMode ? 0 : parseInt(this.dataset.delay, 10);\n\n      setTimeout(() => {\n        if (!document.body.classList.contains(this.classes.bodyClass)) {\n          this.openPopup();\n        } else if (!this.getCookie(this.cookieName)) {\n          const onVisible = () => {\n            if (!document.body.classList.contains(this.classes.bodyClass)) {\n              setTimeout(() => this.openPopup(), 1000);\n            }\n            document.removeEventListener('body:visible', onVisible);\n          };\n          document.addEventListener('body:visible', onVisible, { once: true });\n        }\n      }, (delayValue || 0) * 1000);\n\n      return;\n    }\n\n    if (this.dataset.delayType === 'scroll') {\n      const delayValue = parseInt(this.dataset.delay.slice(10).slice(0, -1), 10);\n      this._scrollDelayPercent = (delayValue || 0) / 100;\n\n      window.addEventListener('scroll', this._activateScrollDelay, { passive: true, once: true });\n      return;\n    }\n  }\n\n  _activateScrollDelay() {\n    if (this._scrollDelayActive || this.hasPopupedUp) return;\n\n    this._scrollDelayActive = true;\n    document.addEventListener('scroll', this._onScrollDelay, { passive: true });\n    this._onScrollDelay();\n  }\n\n  _onScrollDelay() {\n    if (this.hasPopupedUp) return;\n\n    const pct = this._scrollDelayPercent;\n    if (pct == null) return;\n\n    const maxScroll = Math.max(1, document.documentElement.scrollHeight - window.innerHeight);\n    const y = window.scrollY || window.pageYOffset || 0;\n    const progress = y / maxScroll;\n\n    if (progress >= pct) {\n      this.openPopup();\n      document.removeEventListener('scroll', this._onScrollDelay);\n    }\n  }\n\n  onButtonClick(event) {\n    event.preventDefault();\n    this.popup.classList.contains(this.classes.openClass) ? this.closePopup(event) : this.openPopup();\n  }\n\n  openPopup() {\n    const popupId = this.popup.dataset.popupId;\n\n    document.querySelectorAll('.promo-popup[data-popup-id]').forEach((popupEl) => {\n      if (popupEl.dataset.popupId === popupId && popupEl !== this.popup && document.body.contains(popupEl)) {\n        popupEl.remove();\n      }\n    });\n    if (!this.popupPlaceholder.parentNode) {\n      this.popup.parentNode.insertBefore(this.popupPlaceholder, this.popup);\n    }\n    document.body.appendChild(this.popup);\n\n    document.body.classList.remove(this.classes.bodyClass);\n    this.popup.classList.add(this.classes.openClass);\n    if (!this.flyout && this.overlay && !this.overlay.classList.contains(this.classes.openClass)) {\n      this.overlay.classList.add(this.classes.openClass);\n    }\n\n    if (this.popup.dataset.position === 'popup') {\n      document.body.classList.add(this.classes.bodyClass);\n    }\n\n    if (this.stickyTab) this.closeStickyTab();\n    this.hasPopupedUp = true;\n\n    window.removeEventListener('scroll', this._activateScrollDelay);\n    document.removeEventListener('scroll', this._onScrollDelay);\n  }\n\n  closePopup(event = {}) {\n    this.popup.classList.add(this.classes.closingClass);\n\n    setTimeout(() => {\n      this.popup.classList.remove(this.classes.openClass);\n\n      if (this.overlay && event.type !== 'cart-drawer:open') {\n        this.overlay.classList.remove(this.classes.openClass);\n      }\n\n      this.popup.classList.remove(this.classes.closingClass);\n      this.popup.classList.remove(this.classes.showImage);\n      this.openStickyTab();\n\n      // Restore popup to original location\n      if (this.popupPlaceholder && this.popupPlaceholder.parentNode) {\n        this.popupPlaceholder.parentNode.insertBefore(this.popup, this.popupPlaceholder);\n        this.popupPlaceholder.remove();\n      }\n\n      document.querySelectorAll('promo-popup').forEach(item => {\n        const sec = item.closest('section');\n        if (sec && sec.getAttribute('style')) sec.removeAttribute('style');\n      });\n\n      if (this.popup.dataset.position === 'popup' && event.type !== 'cart-drawer:open') {\n        document.body.classList.remove(this.classes.bodyClass);\n      }\n\n      if (this.querySelector('.age-verification')) {\n        document.dispatchEvent(new CustomEvent('body:visible'));\n      }\n    }, 0);\n\n    if (Shopify?.designMode) {\n      this.removeCookie(this.cookieName);\n      return;\n    }\n\n    this.setCookie(this.cookieName, this.dataset.frequency);\n  }\n\n  openStickyTab() {\n    if (!this.stickyTab) return;\n\n    if (!this._searchmodalListenerAdded) {\n      document.addEventListener('searchmodal:open', this._onSearchModalOpen);\n      this._searchmodalListenerAdded = true;\n    }\n\n    this.stickyTab.classList.add(this.classes.openClass);\n  }\n\n  closeStickyTab() {\n    if (!this.stickyTab) return;\n    this.stickyTab.classList.remove(this.classes.openClass);\n  }\n\n  getCookie(name) {\n    const match = document.cookie.match(`(^|;)\\\\s*${name}\\\\s*=\\\\s*([^;]+)`);\n    return match ? match[2] : null;\n  }\n\n  setCookie(name, frequency) {\n    document.cookie = `${name}=true; max-age=${(frequency * 60 * 60)}; path=/`;\n  }\n\n  removeCookie(name) {\n    document.cookie = `${name}=; max-age=0`;\n  }\n}\ncustomElements.define('promo-popup', PromoPopup);\n\nclass AnimateSticky extends HTMLElement {\n  constructor() {\n    super();\n\n    this._inited = false;\n    this._initScheduled = false;\n    this._topObserver = null;\n    this._bottomObserver = null;\n    this._topSentinel = null;\n    this._bottomSentinel = null;\n    this._buttonsVisible = true;\n    this._atBottom = false;\n    this._shown = false;\n\n    this._reveal = () => {\n      if (this._shown) return;\n      this._shown = true;\n      this.setAttribute('animate', '');\n    };\n\n    this._hide = () => {\n      if (!this._shown) return;\n      this._shown = false;\n      this.removeAttribute('animate');\n    };\n  }\n\n  connectedCallback() {\n    this._deferInitAfterLoad();\n  }\n\n  disconnectedCallback() {\n    this.destroy();\n  }\n\n  _deferInitAfterLoad() {\n    if (this._inited || this._initScheduled) return;\n    this._initScheduled = true;\n\n    const run = () => {\n      this._initScheduled = false;\n      this.init();\n    };\n\n    const schedule = () => {\n      if ('requestIdleCallback' in window) {\n        requestIdleCallback(run, { timeout: 2000 });\n      } else {\n        setTimeout(run, 0);\n      }\n    };\n\n    if (document.readyState === 'complete') schedule();\n    else window.addEventListener('load', schedule, { once: true });\n  }\n\n  init() {\n    if (this._inited) return;\n    this._inited = true;\n\n    const section = this.closest('section');\n    if (!section) return;\n\n    const buttons = section.querySelector('.product-form__buttons');\n    if (!buttons) return;\n\n    if (!('IntersectionObserver' in window)) {\n      this._initFallback(buttons);\n      return;\n    }\n\n    const topSentinel = document.createElement('span');\n    topSentinel.className = 'animate-sticky-sentinel';\n    topSentinel.setAttribute('aria-hidden', 'true');\n    topSentinel.style.cssText = 'display:block;width:1px;height:1px;margin:0;padding:0;';\n    buttons.parentNode.insertBefore(topSentinel, buttons);\n    this._topSentinel = topSentinel;\n\n    const bottomSentinel = document.createElement('span');\n    bottomSentinel.className = 'animate-sticky-bottom-sentinel';\n    bottomSentinel.setAttribute('aria-hidden', 'true');\n    bottomSentinel.style.cssText = 'display:block;width:1px;height:1px;margin:0;padding:0;';\n\n    const footer = document.querySelector('.shopify-section-footer') || document.querySelector('footer');\n    if (footer && footer.parentNode) {\n      footer.parentNode.insertBefore(bottomSentinel, footer.nextSibling);\n    } else {\n      document.body.appendChild(bottomSentinel);\n    }\n\n    this._bottomSentinel = bottomSentinel;\n\n    this._topObserver = new IntersectionObserver((entries) => {\n      const e = entries && entries[0];\n      if (!e) return;\n      this._buttonsVisible = !!e.isIntersecting;\n      this._apply();\n    }, { root: null, threshold: 0, rootMargin: '0px' });\n\n    this._bottomObserver = new IntersectionObserver((entries) => {\n      const e = entries && entries[0];\n      if (!e) return;\n      this._atBottom = !!e.isIntersecting;\n      this._apply();\n    }, { root: null, threshold: 0, rootMargin: '0px' });\n\n    this._topObserver.observe(topSentinel);\n    this._bottomObserver.observe(bottomSentinel);\n  }\n\n  _apply() {\n    if (this._buttonsVisible) {\n      this._hide();\n      return;\n    }\n    if (this._atBottom) {\n      this._hide();\n      return;\n    }\n    this._reveal();\n  }\n\n  _initFallback(buttons) {\n    this._buttons = buttons;\n    this._onScroll = () => {\n      const doc = document.documentElement;\n      const scrollTop = window.pageYOffset || doc.scrollTop || 0;\n      const top = this._buttons.getBoundingClientRect().top + scrollTop;\n\n      const remaining = doc.scrollHeight - (doc.scrollTop + doc.clientHeight);\n      const atBottom = remaining <= 1;\n\n      if (scrollTop > top && !atBottom) this._reveal();\n      else this._hide();\n    };\n\n    window.addEventListener('scroll', this._onScroll, { passive: true });\n    window.addEventListener('resize', this._onScroll, { passive: true });\n    this._onScroll();\n  }\n\n  destroy() {\n    if (this._topObserver) {\n      this._topObserver.disconnect();\n      this._topObserver = null;\n    }\n    if (this._bottomObserver) {\n      this._bottomObserver.disconnect();\n      this._bottomObserver = null;\n    }\n\n    if (this._topSentinel?.parentNode) this._topSentinel.parentNode.removeChild(this._topSentinel);\n    this._topSentinel = null;\n\n    if (this._bottomSentinel?.parentNode) this._bottomSentinel.parentNode.removeChild(this._bottomSentinel);\n    this._bottomSentinel = null;\n\n    if (this._onScroll) {\n      window.removeEventListener('scroll', this._onScroll);\n      window.removeEventListener('resize', this._onScroll);\n      this._onScroll = null;\n    }\n\n    this._inited = false;\n    this._initScheduled = false;\n\n    this._buttonsVisible = true;\n    this._atBottom = false;\n    this._shown = false;\n  }\n}\ncustomElements.define('animate-sticky', AnimateSticky);\n\nclass DrawerMenu extends HTMLElement {\n  constructor() {\n    super();\n\n    this.summaryElement = this.firstElementChild\n    this.contentElement = this.summaryElement.nextElementSibling\n\n    this.summaryElement.addEventListener('click', this.onSummaryClicked.bind(this))\n\n    if (this.contentElement) this.button = this.contentElement.querySelector('button')\n    if (this.button) this.button.addEventListener('click', () => {\n      this.isOpen = JSON.parse(this.getAttribute('open'))\n      if (this.isOpen) {\n        const panel = this.button.closest('.nested-submenu')\n\n        if (!panel) return\n\n        panel.classList.remove('nested-submenu--stagger-in')\n        panel.previousElementSibling.setAttribute('open', 'false')\n        panel.previousElementSibling.classList.add('closing') \n        this.updateTabIndex(this.contentElement, false)\n\n        setTimeout(() => {\n          panel.previousElementSibling.classList.remove('closing')\n        }, 400)\n      }\n    })\n\n    document.addEventListener('body:visible', () => {\n      if (!document.querySelector('#shopify-section-menu-drawer .menu-drawer.open') || !document.querySelector('#shopify-section-mega-menu-drawer .menu-drawer.open')) {\n        document.querySelectorAll('.nested-submenu').forEach(submenu => {\n          if (submenu.previousElementSibling.getAttribute('open') == 'true') {\n            submenu.previousElementSibling.setAttribute('open', 'false')\n            submenu.previousElementSibling.classList.add('closing')\n            this.updateTabIndex(submenu, false)\n            setTimeout(() => {\n              submenu.previousElementSibling.classList.remove('closing')\n            }, 500)\n          }\n        })\n      }\n    })\n\n    this.detectClickOutsideListener = this.detectClickOutside.bind(this)\n    this.detectEscKeyboardListener = this.detectEscKeyboard.bind(this)\n    this.detectFocusOutListener = this.detectFocusOut.bind(this)\n    this.addEventListener('keydown', this.onKeyDown.bind(this));\n  }\n\n\n  onSummaryClicked(event) {\n    if (event && event.target && event.target.closest('a')) return\n\n    this.isOpen = JSON.parse(this.summaryElement.getAttribute('open'))\n\n    if (this.isOpen) {\n      if (this.contentElement) this.contentElement.classList.remove('nested-submenu--stagger-in')\n      this.summaryElement.setAttribute('open', 'false')\n      this.setAttribute('open', 'false')\n      this.updateTabIndex(this.contentElement, false);\n    } else {\n      this.summaryElement.setAttribute('open', 'true')\n      this.setAttribute('open', 'true')\n\n      if (this.contentElement && this.closest('.mega-menu-drawer--animated')) {\n        const parentPanel = this.closest('.nested-submenu');\n        parentPanel?.classList.remove('nested-submenu--stagger-in');\n        \n        this.contentElement.classList.add('nested-submenu--stagger-in');\n\n        if (parentPanel) {\n          requestAnimationFrame(() => {\n            this.contentElement.classList.remove('nested-submenu--stagger-in');\n\n            requestAnimationFrame(() => {\n              this.contentElement.classList.add('nested-submenu--stagger-in');\n            });\n          });\n        }\n      }\n      \n      this.updateTabIndex(this.contentElement, true);\n    }\n  }\n\n  detectClickOutside(event) {\n    if (!this.contains(event.target) && !(event.target.closest('details') instanceof DetailsDropdown)) this.open = false\n  }\n\n  detectEscKeyboard(event) {\n    if (event.code === 'Escape') {\n      const targetMenu = event.target.closest('details[open]')\n      if (targetMenu) {\n        targetMenu.open = false\n      }\n    }\n  }\n\n  onKeyDown(event) {\n    const currentFocus = document.activeElement;\n\n    switch (event.code) {\n      case 'Enter':\n        if (currentFocus === this.summaryElement) {\n          event.preventDefault();\n          this.onSummaryClicked();\n        }\n        break;\n\n      case 'Escape':\n        this.updateTabIndex(this.contentElement, false)\n        break;\n    }\n  }\n\n  updateTabIndex(menuElement, isOpen) {\n    if (!menuElement) return;\n\n    const directFocusableElements = Array.from(\n      menuElement.querySelectorAll(\n        ':scope > ul > li > drawer-menu > summary > .menu__item-title > a[href], :scope > ul > li > drawer-menu > summary > .menu__item-title > button:not([disabled]), :scope > .menu-drawer__header button, :scope > ul > li > a[href'\n      )\n    );\n\n    directFocusableElements.forEach(element => {\n      isOpen ? element.setAttribute('tabindex', '0') : element.setAttribute('tabindex', '-1')\n    });\n  }\n\n  getFocusableElements() {\n    if (!menuElement) return \n    return Array.from(\n      this.contentElement?.querySelectorAll(\n        'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n      ) || []\n    );\n  }\n\n  detectFocusOut(event) {\n    if (event.relatedTarget && !this.contains(event.relatedTarget)) {\n      this.open = false\n    }\n  }\n\n  detectHover(event) {\n    if (this.trigger !== 'hover') return;\n\n    if (event.type === 'mouseenter') {\n      this.open = true\n    }\n    else {\n      this.open = false\n    }\n  }\n}\ncustomElements.define('drawer-menu', DrawerMenu)\n\nclass BannerHScroll extends HTMLElement {\n  constructor() {\n    super();\n\n    this.rootSelector = this.getAttribute('root') || '.horizontal-banners';\n    this.useVisualViewport = this.getAttribute('use-visual-viewport') !== 'false';\n    this.scrollSpeed = parseFloat(this.getAttribute('scroll-speed') || '1');\n    this.smooth = Math.max(0, Math.min(0.95, parseFloat(this.getAttribute('smooth') || '0.18')));\n    this.forceWheelRedirect = this.getAttribute('force-wheel-redirect') === 'true';\n\n    this.root = null;\n    this.wrapper = null;\n    this.track = null;\n\n    this.enabled = false;\n    this.active = false;\n\n    this.startY = 0;\n    this.endY = 0;\n    this.maxX = 0;\n    this.x = 0;\n    this.animX = 0;\n\n    this.animFrame = null;\n    this._recomputeRaf = 0;\n    this._vvTick = false;\n\n    this._touchActive = false;\n    this._touchLastX = 0;\n    this._touchLastY = 0;\n    this._touchStartX = 0;\n    this._touchStartY = 0;\n    this._touchIntent = null;\n\n    this._io = null;\n    this._mediaBound = false;\n    this.resizeObserver = new ResizeObserver(() => {\n      if (!this.active || !this.enabled) return;\n      this.scheduleRecompute();\n    });\n\n    this._lastPinHeight = null;\n\n    this.isRTL = document.documentElement.classList.contains('html-rtl');\n    this.isCoarse = typeof window.matchMedia === 'function'\n      ? window.matchMedia('(pointer: coarse)').matches\n      : 'ontouchstart' in window;\n\n    this.onScrollHandler     = this.onScroll.bind(this);\n    this.onResizeHandler     = this.onResize.bind(this);\n    this.onVvResizeHandler   = this.onVvResize.bind(this);\n    this.onWheelHandler      = this.onWheel.bind(this);\n    this.onTouchStartHandler = this.onTouchStart.bind(this);\n    this.onTouchMoveHandler  = this.onTouchMove.bind(this);\n    this.onTouchEndHandler   = this.onTouchEnd.bind(this);\n\n    this.scrollDownEl = null;\n    this._scrollDownDismissed = false;\n    this._scrollDownHideAfterX = 100;\n    this._scrollDownState = 0;\n    this._scrollDownRAF = 0;\n\n    this._userInteracted = false;\n\n    this._animIO = null;\n    this._blocksAnimatedOnce = false;\n  }\n\n  connectedCallback() {\n    this._resolveDOM();\n    if (!this.root || !this.wrapper || !this.track) return;\n\n    try {\n      this.root.style.overscrollBehavior = this.root.style.overscrollBehavior || 'contain';\n    } catch (_) {}\n\n    this._setupNearViewport();\n    this._setupBlocksAnimateOnMobile();\n\n    this.root.addEventListener('touchstart', this.onTouchStartHandler, { passive: true });\n    this.root.addEventListener('touchmove',  this.onTouchMoveHandler,  { passive: false });\n    this.root.addEventListener('touchend',   this.onTouchEndHandler,   { passive: true  });\n    this.root.addEventListener('touchcancel', this.onTouchEndHandler,  { passive: true  });\n\n    if (this.isCoarse || this.forceWheelRedirect) {\n      this.root.addEventListener('wheel', this.onWheelHandler, { passive: false });\n    }\n  }\n\n  disconnectedCallback() {\n    if (this._io) {\n      this._io.disconnect();\n      this._io = null;\n    }\n\n    if (this._animIO) {\n      this._animIO.disconnect();\n      this._animIO = null;\n    }\n\n    if (this.animFrame) cancelAnimationFrame(this.animFrame);\n    if (this._recomputeRaf) cancelAnimationFrame(this._recomputeRaf);\n    if (this._scrollDownRAF) cancelAnimationFrame(this._scrollDownRAF);\n\n    this._removeActiveListeners();\n    this.resizeObserver.disconnect();\n\n    if (this.root) {\n      this.root.removeEventListener('touchstart', this.onTouchStartHandler);\n      this.root.removeEventListener('touchmove',  this.onTouchMoveHandler);\n      this.root.removeEventListener('touchend',   this.onTouchEndHandler);\n      this.root.removeEventListener('touchcancel', this.onTouchEndHandler);\n      this.root.removeEventListener('wheel',      this.onWheelHandler);\n    }\n\n    this.disable();\n\n    this.root = null;\n    this.wrapper = null;\n    this.track = null;\n    this.scrollDownEl = null;\n  }\n\n  _resolveDOM() {\n    const p = this.parentElement;\n    if (p && p.matches && p.matches(this.rootSelector)) {\n      this.root = p;\n    } else {\n      this.root = this.closest(this.rootSelector);\n    }\n\n    this.wrapper = this.root?.querySelector('.horizontal-banners__wrapper') || null;\n    this.track   = this.root?.querySelector('.horizontal-banners__blocks') || null;\n    this.scrollDownEl = this.root?.querySelector('.horizontal-banners__scroll-down') || null;\n  }\n\n  _setupNearViewport() {\n    if (!('IntersectionObserver' in window)) {\n      this._setActive(true);\n      return;\n    }\n\n    this._io = new IntersectionObserver((entries) => {\n      const e = entries[0];\n      if (!e) return;\n      this._setActive(!!e.isIntersecting);\n    }, {\n      root: null,\n      rootMargin: '600px 0px',\n      threshold: 0.01\n    });\n\n    this._io.observe(this.root);\n  }\n\n  _setupBlocksAnimateOnMobile() {\n    if (!this.root || !this.track) return;\n\n    if (this._blocksAnimatedOnce) return;\n\n    if (!('IntersectionObserver' in window)) {\n      if (window.innerWidth < 769) this._addBlocksAnimateOnce();\n      return;\n    }\n\n    if (this._animIO) return;\n\n    this._animIO = new IntersectionObserver((entries) => {\n      const e = entries[0];\n      if (!e) return;\n\n      if (e.isIntersecting && window.innerWidth < 769) {\n        this._addBlocksAnimateOnce();\n      }\n    }, {\n      root: null,\n      rootMargin: '0px 0px',\n      threshold: 0.15\n    });\n\n    this._animIO.observe(this.root);\n  }\n\n  _addBlocksAnimateOnce() {\n    if (this._blocksAnimatedOnce) return;\n    if (!this.track) return;\n  \n    this._blocksAnimatedOnce = true;\n    this.track.classList.add('animate');\n  \n    window.setTimeout(() => {\n      if (!this.track) return;\n      this.track.classList.remove('animate');\n    }, 1800);\n  \n    if (this._animIO) {\n      this._animIO.disconnect();\n      this._animIO = null;\n    }\n  }\n\n  _addActiveListeners() {\n    window.addEventListener('scroll', this.onScrollHandler, { passive: true });\n    window.addEventListener('resize', this.onResizeHandler, { passive: true });\n\n    if (this.useVisualViewport && window.visualViewport) {\n      window.visualViewport.addEventListener('resize', this.onVvResizeHandler, { passive: true });\n      window.visualViewport.addEventListener('scroll',  this.onVvResizeHandler, { passive: true });\n    }\n  }\n\n  _removeActiveListeners() {\n    window.removeEventListener('scroll', this.onScrollHandler);\n    window.removeEventListener('resize', this.onResizeHandler);\n\n    if (this.useVisualViewport && window.visualViewport) {\n      window.visualViewport.removeEventListener('resize', this.onVvResizeHandler);\n      window.visualViewport.removeEventListener('scroll',  this.onVvResizeHandler);\n    }\n  }\n\n  _bindMediaEventsOnce() {\n    if (this._mediaBound || !this.root) return;\n    this._mediaBound = true;\n\n    const recomputeSoon = () => {\n      if (!this.active || !this.enabled) return;\n      this.scheduleRecompute();\n    };\n\n    this.root.querySelectorAll('img').forEach((img) => {\n      if (img.complete) return;\n      img.addEventListener('load', recomputeSoon, { passive: true });\n      img.addEventListener('error', recomputeSoon, { passive: true });\n    });\n\n    this.root.querySelectorAll('video').forEach((v) => {\n      v.addEventListener('loadedmetadata', recomputeSoon, { passive: true });\n      v.addEventListener('loadeddata', recomputeSoon, { passive: true });\n      v.addEventListener('canplay', recomputeSoon, { passive: true });\n    });\n  }\n\n  _setActive(isActive) {\n    if (this.active === isActive) return;\n    this.active = isActive;\n\n    if (this.active) {\n      this._addActiveListeners();\n      this._bindMediaEventsOnce();\n\n      this.updateEnabledByWidth();\n\n      if (this.enabled) {\n        this.track.style.willChange = 'transform';\n        this.track.style.backfaceVisibility = 'hidden';\n        this.resizeObserver.observe(this.track);\n        this.scheduleRecompute();\n      }\n\n      this._scheduleScrollDownUpdate();\n    } else {\n      this._removeActiveListeners();\n      this.resizeObserver.disconnect();\n\n      if (this.track) {\n        this.track.style.removeProperty('will-change');\n        this.track.style.removeProperty('backface-visibility');\n      }\n\n      if (this._userInteracted) {\n        this._setScrollDownState(0);\n      }\n    }\n  }\n\n  scheduleRecompute() {\n    if (!this.enabled || !this.active) return;\n    if (this._recomputeRaf) return;\n\n    this._recomputeRaf = requestAnimationFrame(() => {\n      this._recomputeRaf = 0;\n      this.recompute();\n      this.onScroll();\n    });\n  }\n\n  updateEnabledByWidth() {\n    const mobile = window.innerWidth < 769;\n\n    if (mobile) {\n      this.disable();\n      if (this.active) this._setupBlocksAnimateOnMobile();\n    } else {\n      this.enable();\n    }\n\n    this._scheduleScrollDownUpdate();\n  }\n\n  enable() {\n    if (this.enabled) return;\n    this.enabled = true;\n    this.root?.setAttribute('data-hscroll', 'enabled');\n    this._lastPinHeight = null;\n  }\n\n  disable() {\n    this.enabled = false;\n\n    if (this.root) {\n      this.root.removeAttribute('data-hscroll');\n      this.root.style.removeProperty('--pin-height');\n    }\n    if (this.track) {\n      this.track.style.removeProperty('transform');\n      this.track.style.removeProperty('will-change');\n      this.track.style.removeProperty('backface-visibility');\n    }\n    this._lastPinHeight = null;\n\n    if (this._userInteracted) {\n      this._setScrollDownState(0);\n    }\n  }\n\n  getViewportH() {\n    if (this.useVisualViewport && window.visualViewport?.height) {\n      return Math.round(window.visualViewport.height);\n    }\n    return window.innerHeight;\n  }\n\n  getContainerW() {\n    return this.wrapper ? (this.wrapper.clientWidth | 0) : 0;\n  }\n\n  progressToX(progress) {\n    const p = this.clamp(progress, 0, 1);\n    return Math.round(this.maxX * p);\n  }\n\n  recompute() {\n    if (!this.enabled || !this.active) return;\n\n    const viewportW = this.getContainerW();\n    const viewportH = this.getViewportH();\n    const fullContentWidth = this.track.scrollWidth || 0;\n\n    this.maxX = Math.max(0, fullContentWidth - viewportW);\n\n    if (this.maxX <= 0) {\n      if (this._lastPinHeight !== 'auto') {\n        this.root.style.setProperty('--pin-height', 'auto');\n        this._lastPinHeight = 'auto';\n      }\n      this.startY = Number.POSITIVE_INFINITY;\n      this.endY   = Number.NEGATIVE_INFINITY;\n      this.x = 0;\n      this.animX = 0;\n      this.applyTransform();\n\n      this._scheduleScrollDownUpdate();\n      return;\n    }\n\n    const pinHeight = viewportH + this.maxX;\n    const pinHeightStr = `${pinHeight}px`;\n\n    if (this._lastPinHeight !== pinHeightStr) {\n      this.root.style.setProperty('--pin-height', pinHeightStr);\n      this._lastPinHeight = pinHeightStr;\n    }\n\n    const rootRect = this.root.getBoundingClientRect();\n    const docY = window.scrollY || window.pageYOffset || 0;\n\n    this.startY = docY + rootRect.top;\n    this.endY   = this.startY + pinHeight - viewportH;\n\n    const y = window.pageYOffset || document.documentElement.scrollTop || 0;\n\n    if (y <= this.startY) {\n      this.x = 0;\n    } else if (y >= this.endY) {\n      this.x = this.maxX;\n    } else {\n      const progress = (y - this.startY) / (this.endY - this.startY);\n      this.x = this.clamp(this.progressToX(progress), 0, this.maxX);\n    }\n\n    this.applyTransform();\n    this._scheduleScrollDownUpdate();\n  }\n\n  isInsidePin(y) {\n    return y >= this.startY && y <= this.endY;\n  }\n\n  canConsume(delta) {\n    if (delta === 0) return false;\n    if (delta > 0)  return this.x < this.maxX;\n    return this.x > 0;\n  }\n\n  onScroll() {\n    if (!this.enabled || !this.active) return;\n\n    if (!this._userInteracted) this._userInteracted = true;\n\n    const y = window.pageYOffset || document.documentElement.scrollTop || 0;\n\n    if (y <= this.startY) {\n      if (this.x !== 0) this.x = 0;\n    } else if (y >= this.endY) {\n      if (this.x !== this.maxX) this.x = this.maxX;\n    } else {\n      const progress = (y - this.startY) / (this.endY - this.startY);\n      const nx = this.clamp(this.progressToX(progress), 0, this.maxX);\n      if (nx !== this.x) this.x = nx;\n    }\n\n    this.applyTransform();\n    this._scheduleScrollDownUpdate();\n  }\n\n  onResize() {\n    if (!this.active) return;\n    this.updateEnabledByWidth();\n    if (this.enabled) this.scheduleRecompute();\n  }\n\n  onVvResize() {\n    if (!this.enabled || !this.active) return;\n    if (this._vvTick) return;\n    this._vvTick = true;\n    requestAnimationFrame(() => {\n      this._vvTick = false;\n      this.scheduleRecompute();\n      this._scheduleScrollDownUpdate();\n    });\n  }\n\n  onWheel(e) {\n    if (!this.enabled || !this.active || this.maxX <= 0) return;\n\n    if (!this._userInteracted) this._userInteracted = true;\n\n    const pageY = window.pageYOffset || document.documentElement.scrollTop || 0;\n    if (!this.isInsidePin(pageY)) return;\n\n    const dyPrimary = Math.abs(e.deltaY) >= Math.abs(e.deltaX) ? e.deltaY : e.deltaX;\n    const delta = dyPrimary * this.scrollSpeed;\n\n    if (!this.canConsume(delta)) return;\n\n    e.preventDefault();\n    const target = this.clamp(this.x + delta, 0, this.maxX);\n    if (target !== this.x) {\n      this.x = target;\n      this.applyTransform();\n      this._scheduleScrollDownUpdate();\n    }\n  }\n\n  onTouchStart(e) {\n    if (!this.enabled || !this.active || this.maxX <= 0 || !e.touches?.length) return;\n\n    const pageY = window.pageYOffset || document.documentElement.scrollTop || 0;\n    if (!this.isInsidePin(pageY)) return;\n\n    const t = e.touches[0];\n    this._touchActive = true;\n    this._touchStartX = this._touchLastX = t.clientX;\n    this._touchStartY = this._touchLastY = t.clientY;\n    this._touchIntent = null;\n  }\n\n  onTouchMove(e) {\n    if (!this.enabled || !this.active || !this._touchActive || !e.touches?.length) return;\n\n    const pageY = window.pageYOffset || document.documentElement.scrollTop || 0;\n    if (!this.isInsidePin(pageY)) return;\n\n    const t = e.touches[0];\n    const dxTotal = t.clientX - this._touchStartX;\n    const dyTotal = t.clientY - this._touchStartY;\n    const absDx = Math.abs(dxTotal);\n    const absDy = Math.abs(dyTotal);\n\n    if (!this._touchIntent) {\n      const threshold = 5;\n      if (absDx < threshold && absDy < threshold) return;\n\n      if (absDx > absDy * 1.2) {\n        this._touchIntent = 'horizontal';\n      } else {\n        this._touchIntent = 'vertical';\n        this._touchActive = false;\n        return;\n      }\n    }\n\n    if (this._touchIntent !== 'horizontal') return;\n\n    if (!this._userInteracted) this._userInteracted = true;\n\n    const dx = this._touchLastX - t.clientX;\n    this._touchLastX = t.clientX;\n\n    const delta = dx * this.scrollSpeed;\n    if (!this.canConsume(delta)) return;\n\n    if (e.cancelable) e.preventDefault();\n    const target = this.clamp(this.x + delta, 0, this.maxX);\n    if (target !== this.x) {\n      this.x = target;\n      this.applyTransform();\n      this._scheduleScrollDownUpdate();\n    }\n  }\n\n  onTouchEnd() {\n    this._touchActive = false;\n    this._touchIntent = null;\n  }\n\n  applyTransform() {\n    if (!this.enabled || !this.active || !this.track) return;\n\n    const curX = (this.smooth > 0 ? this.animX : this.x);\n\n    if (this.smooth <= 0) {\n      const tX = this.isRTL ? curX : -curX;\n      this.track.style.transform = `translate3d(${tX}px,0,0)`;\n      return;\n    }\n\n    if (this.animFrame) return;\n\n    const tick = () => {\n      this.animX += (this.x - this.animX) * this.smooth;\n      if (Math.abs(this.x - this.animX) < 0.5) this.animX = this.x;\n\n      const tx = this.isRTL ? this.animX : -this.animX;\n      this.track.style.transform = `translate3d(${tx}px,0,0)`;\n\n      if (this.animX !== this.x) {\n        this.animFrame = requestAnimationFrame(tick);\n      } else {\n        this.animFrame = null;\n      }\n    };\n\n    this.animFrame = requestAnimationFrame(tick);\n  }\n\n  _scheduleScrollDownUpdate() {\n    if (!this.scrollDownEl) return;\n    if (!this._userInteracted) return;\n\n    if (this._scrollDownDismissed) {\n      this._setScrollDownState(2);\n      return;\n    }\n\n    if (this._scrollDownRAF) return;\n    this._scrollDownRAF = requestAnimationFrame(() => {\n      this._scrollDownRAF = 0;\n      this._updateScrollDownNow();\n    });\n  }\n\n  _updateScrollDownNow() {\n    if (!this.scrollDownEl) return;\n\n    if (this.x >= this._scrollDownHideAfterX) {\n      this._scrollDownDismissed = true;\n      this._setScrollDownState(2);\n      return;\n    }\n\n    if (!this.active) {\n      this._setScrollDownState(0);\n      return;\n    }\n\n    const rect = this.root.getBoundingClientRect();\n    const vh = this.getViewportH();\n\n    const visible = Math.min(rect.bottom, vh) - Math.max(rect.top, 0);\n    const halfViewportVisible = (visible > 0) && (visible >= (vh * 0.5));\n\n    if (halfViewportVisible) {\n      this._setScrollDownState(1);\n    } else {\n      this._setScrollDownState(0);\n    }\n  }\n\n  _setScrollDownState(next) {\n    if (!this.scrollDownEl) return;\n    if (this._scrollDownState === next) return;\n    this._scrollDownState = next;\n\n    if (next === 0) {\n      this.scrollDownEl.classList.remove('show', 'hide');\n      return;\n    }\n    if (next === 1) {\n      this.scrollDownEl.classList.add('show');\n      this.scrollDownEl.classList.remove('hide');\n      return;\n    }\n    this.scrollDownEl.classList.remove('show');\n    this.scrollDownEl.classList.add('hide');\n  }\n\n  clamp(v, min, max) {\n    return v < min ? min : v > max ? max : v;\n  }\n}\n\ncustomElements.define('banner-hscroll', BannerHScroll);\n\n/**\n * Desktop drag-to-scroll for featured collections slider.\n * Only initializes containers with .featured-collections__scroll-container (used when desktop_style is 'slider').\n */\nfunction initFeaturedCollectionsScroll() {\n  document.querySelectorAll('.featured-collections__scroll-container:not([data-scroll-inited])').forEach(function (container) {\n    container.setAttribute('data-scroll-inited', '');\n    var isDown = false, startX, scrollLeft, hasDragged = false;\n    container.addEventListener('mousedown', function (e) {\n      if (window.innerWidth < 921) return;\n      isDown = true;\n      hasDragged = false;\n      container.classList.add('is-dragging');\n      startX = e.pageX - container.offsetLeft;\n      scrollLeft = container.scrollLeft;\n    });\n    container.addEventListener('mouseleave', function () {\n      isDown = false;\n      container.classList.remove('is-dragging');\n    });\n    container.addEventListener('mouseup', function () {\n      isDown = false;\n      container.classList.remove('is-dragging');\n    });\n    container.addEventListener('mousemove', function (e) {\n      if (!isDown) return;\n      hasDragged = true;\n      e.preventDefault();\n      var x = e.pageX - container.offsetLeft;\n      var walk = (x - startX);\n      container.scrollLeft = scrollLeft - walk;\n    });\n    container.addEventListener('click', function (e) {\n      if (hasDragged) e.preventDefault();\n    }, true);\n  });\n}\ndocument.addEventListener('DOMContentLoaded', initFeaturedCollectionsScroll);\ndocument.addEventListener('shopify:section:load', initFeaturedCollectionsScroll);"],
  "mappings": "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",
  "names": ["observer", "errorMessage", "item", "panel", "topMainSidebar", "sectionToRemovalTargetMap", "animationTimeFrame", "menuElement"]
}
