{
  "version": 3,
  "sources": ["/cdn/shop/t/55/assets/theme.dev.js?section_id=api-cart-items"],
  "sourcesContent": ["\r\n/*\r\n* @license\r\n* Palo Alto Theme (c)\r\n*\r\n* This file is included for advanced development by\r\n* Shopify Agencies.  Modified versions of the theme\r\n* code are not supported by Shopify or Presidio Creative.\r\n*\r\n* In order to use this file you will need to change\r\n* theme.js to theme.dev.js in /layout/theme.liquid\r\n*\r\n*/\r\n\r\n(function (scrollLock, Flickity, themeCurrency, Ajaxinate, AOS) {\r\n\t'use strict';\r\n  \r\n\twindow.theme = window.theme || {};\r\n  \r\n\twindow.theme.sizes = {\r\n\t  mobile: 480,\r\n\t  small: 768,\r\n\t  large: 1024,\r\n\t  widescreen: 1440,\r\n\t};\r\n  \r\n\twindow.theme.keyboardKeys = {\r\n\t  TAB: 'Tab',\r\n\t  ENTER: 'Enter',\r\n\t  NUMPADENTER: 'NumpadEnter',\r\n\t  ESCAPE: 'Escape',\r\n\t  SPACE: 'Space',\r\n\t  LEFTARROW: 'ArrowLeft',\r\n\t  RIGHTARROW: 'ArrowRight',\r\n\t};\r\n  \r\n\twindow.theme.focusable = 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\r\n  \r\n\tfunction debounce(fn, time) {\r\n\t  let timeout;\r\n\t  return function () {\r\n\t\t// eslint-disable-next-line prefer-rest-params\r\n\t\tif (fn) {\r\n\t\t  const functionCall = () => fn.apply(this, arguments);\r\n\t\t  clearTimeout(timeout);\r\n\t\t  timeout = setTimeout(functionCall, time);\r\n\t\t}\r\n\t  };\r\n\t}\r\n  \r\n\tconst selectors$14 = {\r\n\t  body: 'body',\r\n\t  main: '[data-main]',\r\n\t  header: '[data-site-header]',\r\n\t  preventTransparentHeader: '[data-prevent-transparent-header]',\r\n\t};\r\n\tconst classes$S = {\r\n\t  supportsTransparentHeader: 'supports-transparent-header',\r\n\t  siteHeaderTransparent: 'site-header--transparent',\r\n\t  isFirstSectionTransparent: 'is-first-section-transparent',\r\n\t};\r\n  \r\n\tconst attributes$H = {\r\n\t  transparent: 'data-transparent',\r\n\t};\r\n  \r\n\tconst initTransparentHeader = () => {\r\n\t  // Determine what is the first\r\n\t  const body = document.querySelector(selectors$14.body);\r\n\t  const header = body.querySelector(selectors$14.header);\r\n  \r\n\t  if (!header) return;\r\n  \r\n\t  const headerTransparent = header.getAttribute(attributes$H.transparent) === 'true';\r\n\t  const firstSection = body.querySelector(selectors$14.main).children[0];\r\n  \r\n\t  if (!firstSection) return;\r\n  \r\n\t  const preventTransparentHeader = firstSection.querySelector(`${selectors$14.preventTransparentHeader}:first-of-type`);\r\n\t  window.isHeaderTransparent = headerTransparent && firstSection.classList.contains(classes$S.supportsTransparentHeader) && !preventTransparentHeader;\r\n  \r\n\t  const supportsHasSelector = CSS.supports('(selector(:has(*)))');\r\n\t  if (!supportsHasSelector) {\r\n\t\tbody.classList.toggle(classes$S.isFirstSectionTransparent, window.isHeaderTransparent);\r\n\t\theader.classList.toggle(classes$S.siteHeaderTransparent, window.isHeaderTransparent);\r\n\t  }\r\n\t};\r\n  \r\n\tlet screenOrientation = getScreenOrientation();\r\n  \r\n\tconst selectors$13 = {\r\n\t  body: 'body',\r\n\t  main: '[data-main]',\r\n\t  collectionFilters: '[data-collection-filters]',\r\n\t  footer: '[data-section-type*=\"footer\"]',\r\n\t  header: '[data-header-height]',\r\n\t  stickyHeader: '[data-site-header][data-position=\"fixed\"]',\r\n\t  announcementBar: '[data-announcement-bar]',\r\n\t  collectionStickyBar: '[data-collection-sticky-bar]',\r\n\t  logoTextLink: '[data-logo-text-link]',\r\n\t};\r\n  \r\n\tconst classes$R = {\r\n\t  templateCollection: 'template-collection',\r\n\t  templateSearch: 'template-search',\r\n\t  supportsTransparentHeader: 'supports-transparent-header',\r\n\t};\r\n  \r\n\tfunction readHeights() {\r\n\t  const h = {};\r\n\t  h.windowHeight = Math.min(window.screen.height, window.innerHeight);\r\n\t  h.footerHeight = getHeight(selectors$13.footer);\r\n\t  h.headerHeight = getHeight(selectors$13.header);\r\n\t  h.headerInitialHeight = parseInt(document.querySelector(selectors$13.header)?.dataset.height || document.querySelector(selectors$13.header)?.offsetHeight) || 0;\r\n\t  h.announcementBarHeight = getHeight(selectors$13.announcementBar);\r\n\t  h.collectionStickyBarHeight = getHeight(selectors$13.collectionStickyBar);\r\n\t  return h;\r\n\t}\r\n  \r\n\tfunction setVarsOnResize() {\r\n\t  document.addEventListener('theme:resize', resizeVars);\r\n\t  setVars();\r\n\t  document.dispatchEvent(new CustomEvent('theme:vars'), {bubbles: false});\r\n\t}\r\n  \r\n\tfunction setVars() {\r\n\t  calcVars();\r\n\t}\r\n  \r\n\tfunction resizeVars() {\r\n\t  // restrict the heights that are changed on resize to avoid iOS jump when URL bar is shown and hidden\r\n\t  calcVars(true);\r\n\t}\r\n  \r\n\tfunction calcVars(checkOrientation = false) {\r\n\t  const body = document.querySelector(selectors$13.body);\r\n\t  const hasCollectionFilters = document.querySelector(selectors$13.collectionFilters);\r\n\t  const hasLogoTextLink = document.querySelector(selectors$13.logoTextLink) !== null;\r\n  \r\n\t  let {windowHeight, headerHeight, headerInitialHeight, announcementBarHeight, footerHeight, collectionStickyBarHeight} = readHeights();\r\n  \r\n\t  if (hasLogoTextLink) headerHeight = recalcHeaderHeight();\r\n  \r\n\t  const contentFullHeight = window.isHeaderTransparent && checkFirstSectionTransparency() ? windowHeight - announcementBarHeight : windowHeight - headerInitialHeight - announcementBarHeight;\r\n\t  let fullHeight = isHeaderSticky() ? windowHeight - window.stickyHeaderHeight : windowHeight;\r\n\t  const isCollectionPage = body.classList.contains(classes$R.templateCollection);\r\n\t  const isSearchPage = body.classList.contains(classes$R.templateSearch);\r\n\t  const isPageWithFilters = (isCollectionPage && hasCollectionFilters) || (isSearchPage && hasCollectionFilters);\r\n  \r\n\t  document.documentElement.style.setProperty('--footer-height', `${footerHeight}px`);\r\n\t  document.documentElement.style.setProperty('--content-full', `${contentFullHeight}px`);\r\n\t  document.documentElement.style.setProperty('--content-min', `${windowHeight - headerHeight - footerHeight}px`);\r\n\t  document.documentElement.style.setProperty('--collection-sticky-bar-height', `${collectionStickyBarHeight}px`);\r\n  \r\n\t  if (isPageWithFilters) fullHeight = windowHeight;\r\n  \r\n\t  if (!checkOrientation) {\r\n\t\tdocument.documentElement.style.setProperty('--full-height', `${fullHeight}px`);\r\n\t\treturn;\r\n\t  }\r\n  \r\n\t  const currentScreenOrientation = getScreenOrientation();\r\n\t  if (currentScreenOrientation !== screenOrientation) {\r\n\t\t// Only update the heights on screen orientation change\r\n\t\tdocument.documentElement.style.setProperty('--full-height', `${fullHeight}px`);\r\n  \r\n\t\t// Update the screen orientation state\r\n\t\tscreenOrientation = currentScreenOrientation;\r\n\t  }\r\n\t}\r\n  \r\n\tfunction getHeight(selector) {\r\n\t  const el = document.querySelector(selector);\r\n\t  if (el) {\r\n\t\treturn el.clientHeight;\r\n\t  } else {\r\n\t\treturn 0;\r\n\t  }\r\n\t}\r\n  \r\n\tfunction checkFirstSectionTransparency() {\r\n\t  const firstSection = document.querySelector(selectors$13.main).firstElementChild;\r\n\t  return firstSection.classList.contains(classes$R.supportsTransparentHeader);\r\n\t}\r\n  \r\n\tfunction isHeaderSticky() {\r\n\t  return document.querySelector(selectors$13.stickyHeader);\r\n\t}\r\n  \r\n\tfunction getScreenOrientation() {\r\n\t  if (window.matchMedia('(orientation: portrait)').matches) {\r\n\t\treturn 'portrait';\r\n\t  }\r\n  \r\n\t  if (window.matchMedia('(orientation: landscape)').matches) {\r\n\t\treturn 'landscape';\r\n\t  }\r\n\t}\r\n  \r\n\tfunction recalcHeaderHeight() {\r\n\t  document.documentElement.style.setProperty('--header-height', 'auto');\r\n\t  document.documentElement.style.setProperty('--header-sticky-height', 'auto');\r\n  \r\n\t  // Header is declared here to avoid `offsetHeight` returning zero when the element has not been rendered to the DOM yet in the Theme editor\r\n\t  const header = document.querySelector(selectors$13.header);\r\n\t  const resetHeight = header.offsetHeight;\r\n  \r\n\t  // requestAnimationFrame method is needed to properly update the CSS variables on resize after they have been reset\r\n\t  requestAnimationFrame(() => {\r\n\t\tdocument.documentElement.style.setProperty('--header-height', `${resetHeight}px`);\r\n\t\tdocument.documentElement.style.setProperty('--header-sticky-height', `${resetHeight}px`);\r\n\t  });\r\n  \r\n\t  return resetHeight;\r\n\t}\r\n  \r\n\tconst selectors$12 = {\r\n\t  overflowBackground: '[data-overflow-background]',\r\n\t  overflowFrame: '[data-overflow-frame]',\r\n\t  overflowContent: '[data-overflow-content]',\r\n\t  overflowContainer: '[data-overflow-container]',\r\n\t  overflowWrapper: '[data-overflow-wrapper]',\r\n\t};\r\n  \r\n\tfunction singles(frame, wrappers) {\r\n\t  // sets the height of any frame passed in with the\r\n\t  // tallest preventOverflowContent as well as any image in that frame\r\n\t  let tallest = 0;\r\n  \r\n\t  wrappers.forEach((wrap) => {\r\n\t\ttallest = wrap.offsetHeight > tallest ? wrap.offsetHeight : tallest;\r\n\t  });\r\n\t  const images = frame.querySelectorAll(selectors$12.overflowBackground);\r\n\t  const frames = [frame, ...images];\r\n\t  frames.forEach((el) => {\r\n\t\tel.style.setProperty('min-height', `calc(${tallest}px + var(--header-height))`);\r\n\t  });\r\n\t}\r\n  \r\n\tfunction doubles(section) {\r\n\t  if (window.innerWidth < window.theme.sizes.small) {\r\n\t\t// if we are below the small breakpoint, the double section acts like two independent\r\n\t\t// single frames\r\n\t\tlet singleFrames = section.querySelectorAll(selectors$12.overflowFrame);\r\n\t\tsingleFrames.forEach((singleframe) => {\r\n\t\t  const wrappers = singleframe.querySelectorAll(selectors$12.overflowContent);\r\n\t\t  singles(singleframe, wrappers);\r\n\t\t});\r\n\t\treturn;\r\n\t  }\r\n  \r\n\t  let tallest = 0;\r\n  \r\n\t  const frames = section.querySelectorAll(selectors$12.overflowFrame);\r\n\t  const contentWrappers = section.querySelectorAll(selectors$12.overflowContent);\r\n\t  contentWrappers.forEach((content) => {\r\n\t\tif (content.offsetHeight > tallest) {\r\n\t\t  tallest = content.offsetHeight;\r\n\t\t}\r\n\t  });\r\n\t  const images = section.querySelectorAll(selectors$12.overflowBackground);\r\n\t  let applySizes = [...frames, ...images];\r\n\t  applySizes.forEach((el) => {\r\n\t\tel.style.setProperty('min-height', `${tallest}px`);\r\n\t  });\r\n\t  section.style.setProperty('min-height', `${tallest}px`);\r\n\t}\r\n  \r\n\tfunction preventOverflow(container) {\r\n\t  const singleFrames = container.querySelectorAll(selectors$12.overflowContainer);\r\n\t  if (singleFrames) {\r\n\t\tsingleFrames.forEach((frame) => {\r\n\t\t  const wrappers = frame.querySelectorAll(selectors$12.overflowContent);\r\n\t\t  singles(frame, wrappers);\r\n\t\t  document.addEventListener('theme:resize', () => {\r\n\t\t\tsingles(frame, wrappers);\r\n\t\t  });\r\n\t\t});\r\n\t  }\r\n  \r\n\t  const doubleSections = container.querySelectorAll(selectors$12.overflowWrapper);\r\n\t  if (doubleSections) {\r\n\t\tdoubleSections.forEach((section) => {\r\n\t\t  doubles(section);\r\n\t\t  document.addEventListener('theme:resize', () => {\r\n\t\t\tdoubles(section);\r\n\t\t  });\r\n\t\t});\r\n\t  }\r\n\t}\r\n  \r\n\twindow.lastWindowWidth = window.innerWidth;\r\n  \r\n\tfunction dispatchResizeEvent() {\r\n\t  document.dispatchEvent(\r\n\t\tnew CustomEvent('theme:resize', {\r\n\t\t  bubbles: true,\r\n\t\t})\r\n\t  );\r\n  \r\n\t  if (window.lastWindowWidth !== window.innerWidth) {\r\n\t\tdocument.dispatchEvent(\r\n\t\t  new CustomEvent('theme:resize:width', {\r\n\t\t\tbubbles: true,\r\n\t\t  })\r\n\t\t);\r\n  \r\n\t\twindow.lastWindowWidth = window.innerWidth;\r\n\t  }\r\n\t}\r\n  \r\n\tfunction resizeListener() {\r\n\t  window.addEventListener('resize', debounce(dispatchResizeEvent, 50));\r\n\t}\r\n  \r\n\tlet prev = window.pageYOffset;\r\n\tlet up = null;\r\n\tlet down = null;\r\n\tlet wasUp = null;\r\n\tlet wasDown = null;\r\n\tlet scrollLockTimer$1 = 0;\r\n  \r\n\tconst classes$Q = {\r\n\t  quickViewVisible: 'js-quick-view-visible',\r\n\t  cartDrawerOpen: 'js-drawer-open-cart',\r\n\t};\r\n  \r\n\tfunction dispatchScrollEvent() {\r\n\t  const position = window.pageYOffset;\r\n\t  if (position > prev) {\r\n\t\tdown = true;\r\n\t\tup = false;\r\n\t  } else if (position < prev) {\r\n\t\tdown = false;\r\n\t\tup = true;\r\n\t  } else {\r\n\t\tup = null;\r\n\t\tdown = null;\r\n\t  }\r\n\t  prev = position;\r\n\t  document.dispatchEvent(\r\n\t\tnew CustomEvent('theme:scroll', {\r\n\t\t  detail: {\r\n\t\t\tup,\r\n\t\t\tdown,\r\n\t\t\tposition,\r\n\t\t  },\r\n\t\t  bubbles: false,\r\n\t\t})\r\n\t  );\r\n\t  if (up && !wasUp) {\r\n\t\tdocument.dispatchEvent(\r\n\t\t  new CustomEvent('theme:scroll:up', {\r\n\t\t\tdetail: {position},\r\n\t\t\tbubbles: false,\r\n\t\t  })\r\n\t\t);\r\n\t  }\r\n\t  if (down && !wasDown) {\r\n\t\tdocument.dispatchEvent(\r\n\t\t  new CustomEvent('theme:scroll:down', {\r\n\t\t\tdetail: {position},\r\n\t\t\tbubbles: false,\r\n\t\t  })\r\n\t\t);\r\n\t  }\r\n\t  wasDown = down;\r\n\t  wasUp = up;\r\n\t}\r\n  \r\n\tfunction lock(e) {\r\n\t  // Prevent body scroll lock race conditions\r\n\t  setTimeout(() => {\r\n\t\tif (scrollLockTimer$1) {\r\n\t\t  clearTimeout(scrollLockTimer$1);\r\n\t\t}\r\n  \r\n\t\tscrollLock.disablePageScroll(e.detail, {\r\n\t\t  allowTouchMove: (el) => el.tagName === 'TEXTAREA',\r\n\t\t});\r\n  \r\n\t\tdocument.documentElement.setAttribute('data-scroll-locked', '');\r\n\t  });\r\n\t}\r\n  \r\n\tfunction unlock(e) {\r\n\t  const timeout = e.detail;\r\n  \r\n\t  if (timeout) {\r\n\t\tscrollLockTimer$1 = setTimeout(removeScrollLock, timeout);\r\n\t  } else {\r\n\t\tremoveScrollLock();\r\n\t  }\r\n\t}\r\n  \r\n\tfunction removeScrollLock() {\r\n\t  const isPopupVisible = document.body.classList.contains(classes$Q.quickViewVisible) || document.body.classList.contains(classes$Q.cartDrawerOpen);\r\n  \r\n\t  if (!isPopupVisible) {\r\n\t\tscrollLock.clearQueueScrollLocks();\r\n\t\tscrollLock.enablePageScroll();\r\n\t\tdocument.documentElement.removeAttribute('data-scroll-locked');\r\n\t  }\r\n\t}\r\n  \r\n\tfunction scrollListener() {\r\n\t  let timeout;\r\n\t  window.addEventListener(\r\n\t\t'scroll',\r\n\t\tfunction () {\r\n\t\t  if (timeout) {\r\n\t\t\twindow.cancelAnimationFrame(timeout);\r\n\t\t  }\r\n\t\t  timeout = window.requestAnimationFrame(function () {\r\n\t\t\tdispatchScrollEvent();\r\n\t\t  });\r\n\t\t},\r\n\t\t{passive: true}\r\n\t  );\r\n  \r\n\t  window.addEventListener('theme:scroll:lock', lock);\r\n\t  window.addEventListener('theme:scroll:unlock', unlock);\r\n\t}\r\n  \r\n\tconst wrap = (toWrap, wrapperClass = '', wrapperOption) => {\r\n\t  const wrapper = wrapperOption || document.createElement('div');\r\n\t  wrapper.classList.add(wrapperClass);\r\n\t  wrapper.setAttribute('data-scroll-lock-scrollable', '');\r\n\t  toWrap.parentNode.insertBefore(wrapper, toWrap);\r\n\t  return wrapper.appendChild(toWrap);\r\n\t};\r\n  \r\n\tfunction wrapElements(container) {\r\n\t  // Target tables to make them scrollable\r\n\t  const tableSelectors = 'table';\r\n\t  const tables = container.querySelectorAll(tableSelectors);\r\n\t  tables.forEach((table) => {\r\n\t\twrap(table, 'table-wrapper');\r\n\t  });\r\n\t}\r\n  \r\n\tfunction isTouchDevice() {\r\n\t  return 'ontouchstart' in window || navigator.maxTouchPoints > 0 || navigator.msMaxTouchPoints > 0;\r\n\t}\r\n  \r\n\tfunction isTouch() {\r\n\t  if (isTouchDevice()) {\r\n\t\tdocument.documentElement.className = document.documentElement.className.replace('no-touch', 'supports-touch');\r\n\t\twindow.theme.touch = true;\r\n\t  } else {\r\n\t\twindow.theme.touch = false;\r\n\t  }\r\n\t}\r\n  \r\n\tfunction loading() {\r\n\t  document.documentElement.classList.remove('is-loading');\r\n\t  document.documentElement.classList.add('is-loaded');\r\n\t}\r\n  \r\n\tconst selectors$11 = {\r\n\t  inputSearch: 'input[type=\"search\"]',\r\n\t  form: 'form',\r\n\t  allVisibleElements: '[role=\"option\"]',\r\n\t  ariaSelected: '[aria-selected=\"true\"]',\r\n\t  selectedOption: '[aria-selected=\"true\"] a, button[aria-selected=\"true\"]',\r\n\t  popularSearches: '[data-popular-searches]',\r\n\t  popdownBody: '[data-popdown-body]',\r\n\t  predictiveSearchResults: '[data-predictive-search-results]',\r\n\t  predictiveSearch: 'predictive-search',\r\n\t  searchForm: 'search-form',\r\n\t};\r\n  \r\n\tconst classes$P = {\r\n\t  isSearched: 'is-searched',\r\n\t};\r\n  \r\n\tclass SearchForm extends HTMLElement {\r\n\t  constructor() {\r\n\t\tsuper();\r\n  \r\n\t\tthis.input = this.querySelector(selectors$11.inputSearch);\r\n\t\tthis.form = this.querySelector(selectors$11.form);\r\n\t\tthis.popdownBody = this.closest(selectors$11.popdownBody);\r\n\t\tthis.popularSearches = this.popdownBody?.querySelector(selectors$11.popularSearches);\r\n\t\tthis.predictiveSearchResults = this.querySelector(selectors$11.predictiveSearchResults);\r\n\t\tthis.predictiveSearch = this.matches(selectors$11.predictiveSearch);\r\n\t\tthis.searchForm = this.matches(selectors$11.searchForm);\r\n\t\tthis.selectedElement = null;\r\n\t\tthis.activeElement = null;\r\n\t\tthis.searchTerm = '';\r\n\t\tthis.currentSearchTerm = '';\r\n  \r\n\t\tthis.input.addEventListener(\r\n\t\t  'input',\r\n\t\t  debounce((event) => {\r\n\t\t\tthis.onChange(event);\r\n\t\t  }, 300).bind(this)\r\n\t\t);\r\n  \r\n\t\tthis.input.addEventListener('focus', this.onFocus.bind(this));\r\n\t\tthis.input.form.addEventListener('submit', this.onFormSubmit.bind(this));\r\n\t\tthis.addEventListener('keyup', this.onKeyup.bind(this));\r\n\t\tthis.addEventListener('keydown', this.onKeydown.bind(this));\r\n\t  }\r\n  \r\n\t  getQuery() {\r\n\t\treturn this.input.value.trim();\r\n\t  }\r\n  \r\n\t  onFocus() {\r\n\t\tthis.currentSearchTerm = this.getQuery();\r\n\t  }\r\n  \r\n\t  onChange() {\r\n\t\tthis.classList.toggle(classes$P.isSearched, !this.isFormCleared());\r\n\t\tthis.searchTerm = this.getQuery();\r\n\t  }\r\n  \r\n\t  isFormCleared() {\r\n\t\treturn this.input.value.length === 0;\r\n\t  }\r\n  \r\n\t  submit() {\r\n\t\tthis.form.submit();\r\n\t  }\r\n  \r\n\t  reset() {\r\n\t\tthis.input.val = '';\r\n\t  }\r\n  \r\n\t  onFormSubmit(event) {\r\n\t\tif (!this.getQuery().length || this.querySelector(selectors$11.selectedLink)) event.preventDefault();\r\n\t  }\r\n  \r\n\t  onKeydown(event) {\r\n\t\t// Prevent the cursor from moving in the input when using the up and down arrow keys\r\n\t\tif (event.code === 'ArrowUp' || event.code === 'ArrowDown') {\r\n\t\t  event.preventDefault();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onKeyup(event) {\r\n\t\tif (!this.getQuery().length && this.predictiveSearch) {\r\n\t\t  this.close(true);\r\n\t\t}\r\n\t\tevent.preventDefault();\r\n  \r\n\t\tswitch (event.code) {\r\n\t\t  case 'ArrowUp':\r\n\t\t\tthis.switchOption('up');\r\n\t\t\tbreak;\r\n\t\t  case 'ArrowDown':\r\n\t\t\tthis.switchOption('down');\r\n\t\t\tbreak;\r\n\t\t  case 'Enter':\r\n\t\t\tthis.selectOption();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t  }\r\n  \r\n\t  switchOption(direction) {\r\n\t\tconst moveUp = direction === 'up';\r\n\t\tconst predictiveSearchOpened = this.classList.contains(classes$P.isSearched) && this.predictiveSearchResults;\r\n  \r\n\t\tconst visibleElementsContainer = predictiveSearchOpened ? this.predictiveSearchResults : this.popularSearches;\r\n  \r\n\t\tif (!visibleElementsContainer) return;\r\n\t\tthis.selectedElement = visibleElementsContainer.querySelector(selectors$11.ariaSelected);\r\n  \r\n\t\t// Filter out hidden elements\r\n\t\tconst allVisibleElements = Array.from(visibleElementsContainer.querySelectorAll(selectors$11.allVisibleElements)).filter((element) => element.offsetParent !== null);\r\n  \r\n\t\tlet activeElementIndex = 0;\r\n  \r\n\t\tif (moveUp && !this.selectedElement) return;\r\n  \r\n\t\tlet selectedElementIndex = -1;\r\n\t\tlet i = 0;\r\n  \r\n\t\twhile (selectedElementIndex === -1 && i <= allVisibleElements.length) {\r\n\t\t  if (allVisibleElements[i] === this.selectedElement) {\r\n\t\t\tselectedElementIndex = i;\r\n\t\t  }\r\n\t\t  i++;\r\n\t\t}\r\n  \r\n\t\tif (!moveUp && this.selectedElement) {\r\n\t\t  activeElementIndex = selectedElementIndex === allVisibleElements.length - 1 ? 0 : selectedElementIndex + 1;\r\n\t\t} else if (moveUp) {\r\n\t\t  activeElementIndex = selectedElementIndex === 0 ? allVisibleElements.length - 1 : selectedElementIndex - 1;\r\n\t\t}\r\n  \r\n\t\tif (activeElementIndex === selectedElementIndex) return;\r\n  \r\n\t\tthis.activeElement = allVisibleElements[activeElementIndex];\r\n\t\tthis.handleFocusableDescendants();\r\n\t  }\r\n  \r\n\t  selectOption() {\r\n\t\tconst selectedOption = this.querySelector(selectors$11.selectedOption);\r\n  \r\n\t\tif (selectedOption) selectedOption.click();\r\n\t  }\r\n  \r\n\t  handleFocusableDescendants(reset = false) {\r\n\t\tconst selected = this.selectedElement ? this.selectedElement : this.querySelector(selectors$11.ariaSelected);\r\n\t\tif (selected) selected.setAttribute('aria-selected', false);\r\n  \r\n\t\tif (!this.activeElement || reset) {\r\n\t\t  this.selectedElement = null;\r\n\t\t  this.activeElement?.setAttribute('aria-selected', false);\r\n\t\t  this.input.setAttribute('aria-expanded', false);\r\n\t\t  this.input.setAttribute('aria-activedescendant', '');\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tthis.activeElement.setAttribute('aria-selected', true);\r\n\t\tthis.input.setAttribute('aria-activedescendant', this.activeElement.id);\r\n\t  }\r\n\t}\r\n  \r\n\tcustomElements.define('search-form', SearchForm);\r\n  \r\n\tconst selectors$10 = {\r\n\t  predictiveSearch: 'predictive-search',\r\n\t  sectionPredictiveSearch: '#shopify-section-api-predictive-search',\r\n\t  predictiveSearchResults: '[data-predictive-search-results]',\r\n\t  predictiveSearchStatus: '[data-predictive-search-status]',\r\n\t  searchResultsLiveRegion: '[data-predictive-search-live-region-count-value]',\r\n\t  searchResultsWrapper: '[data-search-results-wrapper]',\r\n\t};\r\n  \r\n\tconst classes$O = {\r\n\t  reset: 'reset',\r\n\t};\r\n  \r\n\tclass PredictiveSearch extends SearchForm {\r\n\t  constructor() {\r\n\t\tsuper();\r\n  \r\n\t\tthis.abortController = new AbortController();\r\n\t\tthis.allPredictiveSearchInstances = document.querySelectorAll(selectors$10.predictiveSearch);\r\n\t\tthis.predictiveSearchResults = this.querySelector(selectors$10.predictiveSearchResults);\r\n\t\tthis.cachedResults = {};\r\n\t  }\r\n  \r\n\t  connectedCallback() {\r\n\t\tthis.predictiveSearchResults.addEventListener('transitionend', (event) => {\r\n\t\t  if (event.target === this.predictiveSearchResults && !this.getQuery().length) {\r\n\t\t\tthis.classList.remove(classes$O.reset);\r\n\t\t\trequestAnimationFrame(() => this.clearResultsHTML());\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  onChange() {\r\n\t\tsuper.onChange();\r\n\t\tthis.classList.remove(classes$O.reset);\r\n  \r\n\t\tif (!this.searchTerm.length) {\r\n\t\t  this.classList.add(classes$O.reset);\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\trequestAnimationFrame(() => this.getSearchResults(this.searchTerm));\r\n\t  }\r\n  \r\n\t  onFocus() {\r\n\t\tsuper.onFocus();\r\n  \r\n\t\tif (!this.currentSearchTerm.length) return;\r\n  \r\n\t\tif (this.searchTerm !== this.currentSearchTerm) {\r\n\t\t  // Search term was changed from other search input, treat it as a user change\r\n\t\t  this.onChange();\r\n\t\t} else if (this.getAttribute('results') === 'true') {\r\n\t\t  this.open();\r\n\t\t} else {\r\n\t\t  this.getSearchResults(this.searchTerm);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  getSearchResults(searchTerm) {\r\n\t\tconst queryKey = searchTerm.replace(' ', '-').toLowerCase();\r\n\t\tconst suggestionsResultsLimit = parseInt(window.theme.settings.suggestionsResultsLimit);\r\n\t\tlet resources = 'query';\r\n\t\tresources += window.theme.settings.suggestArticles ? ',article' : '';\r\n\t\tresources += window.theme.settings.suggestCollections ? ',collection' : '';\r\n\t\tresources += window.theme.settings.suggestProducts ? ',product' : '';\r\n\t\tresources += window.theme.settings.suggestPages ? ',page' : '';\r\n  \r\n\t\tthis.setLiveRegionLoadingState();\r\n  \r\n\t\tif (this.cachedResults[queryKey]) {\r\n\t\t  this.renderSearchResults(this.cachedResults[queryKey]);\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tfetch(`${theme.routes.predictiveSearchUrl}?q=${encodeURIComponent(searchTerm)}&resources[type]=${resources}&resources[limit]=${suggestionsResultsLimit}&section_id=api-predictive-search`, {\r\n\t\t  signal: this.abortController.signal,\r\n\t\t})\r\n\t\t  .then((response) => {\r\n\t\t\tif (!response.ok) {\r\n\t\t\t  var error = new Error(response.status);\r\n\t\t\t  this.close();\r\n\t\t\t  throw error;\r\n\t\t\t}\r\n  \r\n\t\t\treturn response.text();\r\n\t\t  })\r\n\t\t  .then((text) => {\r\n\t\t\tconst resultsMarkup = new DOMParser().parseFromString(text, 'text/html').querySelector(selectors$10.sectionPredictiveSearch).innerHTML;\r\n\t\t\t// Save bandwidth keeping the cache in all instances synced\r\n\t\t\tthis.allPredictiveSearchInstances.forEach((predictiveSearchInstance) => {\r\n\t\t\t  predictiveSearchInstance.cachedResults[queryKey] = resultsMarkup;\r\n\t\t\t});\r\n\t\t\tthis.renderSearchResults(resultsMarkup);\r\n\t\t  })\r\n\t\t  .catch((error) => {\r\n\t\t\tif (error?.code === 20) {\r\n\t\t\t  // Code 20 means the call was aborted\r\n\t\t\t  return;\r\n\t\t\t}\r\n\t\t\tthis.close();\r\n\t\t\tthrow error;\r\n\t\t  });\r\n\t  }\r\n  \r\n\t  switchOption(direction) {\r\n\t\tsuper.switchOption(direction);\r\n  \r\n\t\tif (this.statusElement) this.statusElement.textContent = '';\r\n\t  }\r\n  \r\n\t  setLiveRegionLoadingState() {\r\n\t\tthis.statusElement = this.statusElement || this.querySelector(selectors$10.predictiveSearchStatus);\r\n\t\tthis.loadingText = this.loadingText || this.getAttribute('data-loading-text');\r\n  \r\n\t\tthis.setLiveRegionText(this.loadingText);\r\n\t\tthis.setAttribute('loading', true);\r\n\t  }\r\n  \r\n\t  setLiveRegionText(statusText) {\r\n\t\tthis.statusElement.setAttribute('aria-hidden', 'false');\r\n\t\tthis.statusElement.textContent = statusText;\r\n  \r\n\t\tsetTimeout(() => {\r\n\t\t  this.statusElement.setAttribute('aria-hidden', 'true');\r\n\t\t}, 1000);\r\n\t  }\r\n  \r\n\t  renderSearchResults(resultsMarkup) {\r\n\t\tthis.predictiveSearchResults.innerHTML = resultsMarkup;\r\n  \r\n\t\tthis.setAttribute('results', true);\r\n  \r\n\t\tthis.setLiveRegionResults();\r\n\t\tthis.open();\r\n\t  }\r\n  \r\n\t  setLiveRegionResults() {\r\n\t\tthis.removeAttribute('loading');\r\n\t\tthis.setLiveRegionText(this.querySelector(selectors$10.searchResultsLiveRegion).textContent);\r\n\t  }\r\n  \r\n\t  open() {\r\n\t\tthis.setAttribute('open', true);\r\n\t  }\r\n  \r\n\t  close(clearSearchTerm = false) {\r\n\t\tthis.closeResults(clearSearchTerm);\r\n\t  }\r\n  \r\n\t  closeResults(clearSearchTerm = false) {\r\n\t\tif (clearSearchTerm) {\r\n\t\t  this.reset();\r\n\t\t  this.removeAttribute('results');\r\n\t\t  this.classList.remove(classes$O.reset);\r\n\t\t}\r\n  \r\n\t\tthis.removeAttribute('loading');\r\n\t\tthis.removeAttribute('open');\r\n\t  }\r\n  \r\n\t  clearResultsHTML() {\r\n\t\tthis.predictiveSearchResults.innerHTML = '';\r\n\t  }\r\n\t}\r\n  \r\n\tcustomElements.define('predictive-search', PredictiveSearch);\r\n  \r\n\tresizeListener();\r\n\tscrollListener();\r\n\tisTouch();\r\n  \r\n\tconst headerFunctions = debounce(() => {\r\n\t  // Recheck sticky header settings if section is set to hidden\r\n\t  initTransparentHeader();\r\n\t}, 300);\r\n  \r\n\twindow.addEventListener('load', () => {\r\n\t  \r\n\t  setVarsOnResize();\r\n\t  preventOverflow(document);\r\n\t  wrapElements(document);\r\n\t  loading();\r\n\t});\r\n  \r\n\tdocument.addEventListener('shopify:section:load', (e) => {\r\n\t  const container = e.target;\r\n  \r\n\t  window.dispatchEvent(new Event('resize'), {bubbles: true});\r\n  \r\n\t  preventOverflow(container);\r\n\t  wrapElements(container);\r\n\t  setVarsOnResize();\r\n  \r\n\t  headerFunctions();\r\n\t});\r\n  \r\n\tdocument.addEventListener('shopify:section:reorder', () => {\r\n\t  headerFunctions();\r\n\t});\r\n  \r\n\tdocument.addEventListener('shopify:section:unload', () => {\r\n\t  headerFunctions();\r\n\t});\r\n  \r\n\t(function () {\r\n\t  function n(n) {\r\n\t\tvar i = window.innerWidth || document.documentElement.clientWidth,\r\n\t\t  r = window.innerHeight || document.documentElement.clientHeight,\r\n\t\t  t = n.getBoundingClientRect();\r\n\t\treturn t.top >= 0 && t.bottom <= r && t.left >= 0 && t.right <= i;\r\n\t  }\r\n\t  function t(n) {\r\n\t\tvar i = window.innerWidth || document.documentElement.clientWidth,\r\n\t\t  r = window.innerHeight || document.documentElement.clientHeight,\r\n\t\t  t = n.getBoundingClientRect(),\r\n\t\t  u = (t.left >= 0 && t.left <= i) || (t.right >= 0 && t.right <= i),\r\n\t\t  f = (t.top >= 0 && t.top <= r) || (t.bottom >= 0 && t.bottom <= r);\r\n\t\treturn u && f;\r\n\t  }\r\n\t  function i(n, i) {\r\n\t\tfunction r() {\r\n\t\t  var r = t(n);\r\n\t\t  r != u && ((u = r), typeof i == 'function' && i(r, n));\r\n\t\t}\r\n\t\tvar u = t(n);\r\n\t\twindow.addEventListener('load', r);\r\n\t\twindow.addEventListener('resize', r);\r\n\t\twindow.addEventListener('scroll', r);\r\n\t  }\r\n\t  function r(t, i) {\r\n\t\tfunction r() {\r\n\t\t  var r = n(t);\r\n\t\t  r != u && ((u = r), typeof i == 'function' && i(r, t));\r\n\t\t}\r\n\t\tvar u = n(t);\r\n\t\twindow.addEventListener('load', r);\r\n\t\twindow.addEventListener('resize', r);\r\n\t\twindow.addEventListener('scroll', r);\r\n\t  }\r\n\t  window.visibilityHelper = {isElementTotallyVisible: n, isElementPartiallyVisible: t, inViewportPartially: i, inViewportTotally: r};\r\n\t})();\r\n  \r\n\twindow.Shopify = window.Shopify || {};\r\n\twindow.Shopify.theme = window.Shopify.theme || {};\r\n\twindow.Shopify.theme.sections = window.Shopify.theme.sections || {};\r\n  \r\n\twindow.Shopify.theme.sections.registered = window.Shopify.theme.sections.registered || {};\r\n\twindow.Shopify.theme.sections.instances = window.Shopify.theme.sections.instances || [];\r\n\tconst registered = window.Shopify.theme.sections.registered;\r\n\tconst instances = window.Shopify.theme.sections.instances;\r\n  \r\n\tconst attributes$G = {\r\n\t  id: 'data-section-id',\r\n\t  type: 'data-section-type',\r\n\t};\r\n  \r\n\tclass Registration {\r\n\t  constructor(type = null, components = []) {\r\n\t\tthis.type = type;\r\n\t\tthis.components = validateComponentsArray(components);\r\n\t\tthis.callStack = {\r\n\t\t  onLoad: [],\r\n\t\t  onUnload: [],\r\n\t\t  onSelect: [],\r\n\t\t  onDeselect: [],\r\n\t\t  onBlockSelect: [],\r\n\t\t  onBlockDeselect: [],\r\n\t\t  onReorder: [],\r\n\t\t};\r\n\t\tcomponents.forEach((comp) => {\r\n\t\t  for (const [key, value] of Object.entries(comp)) {\r\n\t\t\tconst arr = this.callStack[key];\r\n\t\t\tif (Array.isArray(arr) && typeof value === 'function') {\r\n\t\t\t  arr.push(value);\r\n\t\t\t} else {\r\n\t\t\t  console.warn(`Unregisted function: '${key}' in component: '${this.type}'`);\r\n\t\t\t  console.warn(value);\r\n\t\t\t}\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  getStack() {\r\n\t\treturn this.callStack;\r\n\t  }\r\n\t}\r\n  \r\n\tclass Section {\r\n\t  constructor(container, registration) {\r\n\t\tthis.container = validateContainerElement(container);\r\n\t\tthis.id = container.getAttribute(attributes$G.id);\r\n\t\tthis.type = registration.type;\r\n\t\tthis.callStack = registration.getStack();\r\n  \r\n\t\ttry {\r\n\t\t  this.onLoad();\r\n\t\t} catch (e) {\r\n\t\t  console.warn(`Error in section: ${this.id}`);\r\n\t\t  console.warn(this);\r\n\t\t  console.warn(e);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  callFunctions(key, e = null) {\r\n\t\tthis.callStack[key].forEach((func) => {\r\n\t\t  const props = {\r\n\t\t\tid: this.id,\r\n\t\t\ttype: this.type,\r\n\t\t\tcontainer: this.container,\r\n\t\t  };\r\n\t\t  if (e) {\r\n\t\t\tfunc.call(props, e);\r\n\t\t  } else {\r\n\t\t\tfunc.call(props);\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  onLoad() {\r\n\t\tthis.callFunctions('onLoad');\r\n\t  }\r\n  \r\n\t  onUnload() {\r\n\t\tthis.callFunctions('onUnload');\r\n\t  }\r\n  \r\n\t  onSelect(e) {\r\n\t\tthis.callFunctions('onSelect', e);\r\n\t  }\r\n  \r\n\t  onDeselect(e) {\r\n\t\tthis.callFunctions('onDeselect', e);\r\n\t  }\r\n  \r\n\t  onBlockSelect(e) {\r\n\t\tthis.callFunctions('onBlockSelect', e);\r\n\t  }\r\n  \r\n\t  onBlockDeselect(e) {\r\n\t\tthis.callFunctions('onBlockDeselect', e);\r\n\t  }\r\n  \r\n\t  onReorder(e) {\r\n\t\tthis.callFunctions('onReorder', e);\r\n\t  }\r\n\t}\r\n  \r\n\tfunction validateContainerElement(container) {\r\n\t  if (!(container instanceof Element)) {\r\n\t\tthrow new TypeError('Theme Sections: Attempted to load section. The section container provided is not a DOM element.');\r\n\t  }\r\n\t  if (container.getAttribute(attributes$G.id) === null) {\r\n\t\tthrow new Error('Theme Sections: The section container provided does not have an id assigned to the ' + attributes$G.id + ' attribute.');\r\n\t  }\r\n  \r\n\t  return container;\r\n\t}\r\n  \r\n\tfunction validateComponentsArray(value) {\r\n\t  if ((typeof value !== 'undefined' && typeof value !== 'object') || value === null) {\r\n\t\tthrow new TypeError('Theme Sections: The components object provided is not a valid');\r\n\t  }\r\n  \r\n\t  return value;\r\n\t}\r\n  \r\n\t/*\r\n\t * @shopify/theme-sections\r\n\t * -----------------------------------------------------------------------------\r\n\t *\r\n\t * A framework to provide structure to your Shopify sections and a load and unload\r\n\t * lifecycle. The lifecycle is automatically connected to theme editor events so\r\n\t * that your sections load and unload as the editor changes the content and\r\n\t * settings of your sections.\r\n\t */\r\n  \r\n\tfunction register(type, components) {\r\n\t  if (typeof type !== 'string') {\r\n\t\tthrow new TypeError('Theme Sections: The first argument for .register must be a string that specifies the type of the section being registered');\r\n\t  }\r\n  \r\n\t  if (typeof registered[type] !== 'undefined') {\r\n\t\tthrow new Error('Theme Sections: A section of type \"' + type + '\" has already been registered. You cannot register the same section type twice');\r\n\t  }\r\n  \r\n\t  if (!Array.isArray(components)) {\r\n\t\tcomponents = [components];\r\n\t  }\r\n  \r\n\t  const section = new Registration(type, components);\r\n\t  registered[type] = section;\r\n  \r\n\t  return registered;\r\n\t}\r\n  \r\n\tfunction load(types, containers) {\r\n\t  types = normalizeType(types);\r\n  \r\n\t  if (typeof containers === 'undefined') {\r\n\t\tcontainers = document.querySelectorAll('[' + attributes$G.type + ']');\r\n\t  }\r\n  \r\n\t  containers = normalizeContainers(containers);\r\n  \r\n\t  types.forEach(function (type) {\r\n\t\tconst registration = registered[type];\r\n  \r\n\t\tif (typeof registration === 'undefined') {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tcontainers = containers.filter(function (container) {\r\n\t\t  // Filter from list of containers because container already has an instance loaded\r\n\t\t  if (isInstance(container)) {\r\n\t\t\treturn false;\r\n\t\t  }\r\n  \r\n\t\t  // Filter from list of containers because container doesn't have data-section-type attribute\r\n\t\t  if (container.getAttribute(attributes$G.type) === null) {\r\n\t\t\treturn false;\r\n\t\t  }\r\n  \r\n\t\t  // Keep in list of containers because current type doesn't match\r\n\t\t  if (container.getAttribute(attributes$G.type) !== type) {\r\n\t\t\treturn true;\r\n\t\t  }\r\n  \r\n\t\t  instances.push(new Section(container, registration));\r\n  \r\n\t\t  // Filter from list of containers because container now has an instance loaded\r\n\t\t  return false;\r\n\t\t});\r\n\t  });\r\n\t}\r\n  \r\n\tfunction reorder(selector) {\r\n\t  var instancesToReorder = getInstances(selector);\r\n  \r\n\t  instancesToReorder.forEach(function (instance) {\r\n\t\tinstance.onReorder();\r\n\t  });\r\n\t}\r\n  \r\n\tfunction unload(selector) {\r\n\t  var instancesToUnload = getInstances(selector);\r\n  \r\n\t  instancesToUnload.forEach(function (instance) {\r\n\t\tvar index = instances\r\n\t\t  .map(function (e) {\r\n\t\t\treturn e.id;\r\n\t\t  })\r\n\t\t  .indexOf(instance.id);\r\n\t\tinstances.splice(index, 1);\r\n\t\tinstance.onUnload();\r\n\t  });\r\n\t}\r\n  \r\n\tfunction getInstances(selector) {\r\n\t  var filteredInstances = [];\r\n  \r\n\t  // Fetch first element if its an array\r\n\t  if (NodeList.prototype.isPrototypeOf(selector) || Array.isArray(selector)) {\r\n\t\tvar firstElement = selector[0];\r\n\t  }\r\n  \r\n\t  // If selector element is DOM element\r\n\t  if (selector instanceof Element || firstElement instanceof Element) {\r\n\t\tvar containers = normalizeContainers(selector);\r\n  \r\n\t\tcontainers.forEach(function (container) {\r\n\t\t  filteredInstances = filteredInstances.concat(\r\n\t\t\tinstances.filter(function (instance) {\r\n\t\t\t  return instance.container === container;\r\n\t\t\t})\r\n\t\t  );\r\n\t\t});\r\n  \r\n\t\t// If select is type string\r\n\t  } else if (typeof selector === 'string' || typeof firstElement === 'string') {\r\n\t\tvar types = normalizeType(selector);\r\n  \r\n\t\ttypes.forEach(function (type) {\r\n\t\t  filteredInstances = filteredInstances.concat(\r\n\t\t\tinstances.filter(function (instance) {\r\n\t\t\t  return instance.type === type;\r\n\t\t\t})\r\n\t\t  );\r\n\t\t});\r\n\t  }\r\n  \r\n\t  return filteredInstances;\r\n\t}\r\n  \r\n\tfunction getInstanceById(id) {\r\n\t  var instance;\r\n  \r\n\t  for (var i = 0; i < instances.length; i++) {\r\n\t\tif (instances[i].id === id) {\r\n\t\t  instance = instances[i];\r\n\t\t  break;\r\n\t\t}\r\n\t  }\r\n\t  return instance;\r\n\t}\r\n  \r\n\tfunction isInstance(selector) {\r\n\t  return getInstances(selector).length > 0;\r\n\t}\r\n  \r\n\tfunction normalizeType(types) {\r\n\t  // If '*' then fetch all registered section types\r\n\t  if (types === '*') {\r\n\t\ttypes = Object.keys(registered);\r\n  \r\n\t\t// If a single section type string is passed, put it in an array\r\n\t  } else if (typeof types === 'string') {\r\n\t\ttypes = [types];\r\n  \r\n\t\t// If single section constructor is passed, transform to array with section\r\n\t\t// type string\r\n\t  } else if (types.constructor === Section) {\r\n\t\ttypes = [types.prototype.type];\r\n  \r\n\t\t// If array of typed section constructors is passed, transform the array to\r\n\t\t// type strings\r\n\t  } else if (Array.isArray(types) && types[0].constructor === Section) {\r\n\t\ttypes = types.map(function (Section) {\r\n\t\t  return Section.type;\r\n\t\t});\r\n\t  }\r\n  \r\n\t  types = types.map(function (type) {\r\n\t\treturn type.toLowerCase();\r\n\t  });\r\n  \r\n\t  return types;\r\n\t}\r\n  \r\n\tfunction normalizeContainers(containers) {\r\n\t  // Nodelist with entries\r\n\t  if (NodeList.prototype.isPrototypeOf(containers) && containers.length > 0) {\r\n\t\tcontainers = Array.prototype.slice.call(containers);\r\n  \r\n\t\t// Empty Nodelist\r\n\t  } else if (NodeList.prototype.isPrototypeOf(containers) && containers.length === 0) {\r\n\t\tcontainers = [];\r\n  \r\n\t\t// Handle null (document.querySelector() returns null with no match)\r\n\t  } else if (containers === null) {\r\n\t\tcontainers = [];\r\n  \r\n\t\t// Single DOM element\r\n\t  } else if (!Array.isArray(containers) && containers instanceof Element) {\r\n\t\tcontainers = [containers];\r\n\t  }\r\n  \r\n\t  return containers;\r\n\t}\r\n  \r\n\tif (window.Shopify.designMode) {\r\n\t  document.addEventListener('shopify:section:load', function (event) {\r\n\t\tvar id = event.detail.sectionId;\r\n\t\tvar container = event.target.querySelector('[' + attributes$G.id + '=\"' + id + '\"]');\r\n  \r\n\t\tif (container !== null) {\r\n\t\t  load(container.getAttribute(attributes$G.type), container);\r\n\t\t}\r\n\t  });\r\n  \r\n\t  document.addEventListener('shopify:section:reorder', function (event) {\r\n\t\tvar id = event.detail.sectionId;\r\n\t\tvar container = event.target.querySelector('[' + attributes$G.id + '=\"' + id + '\"]');\r\n\t\tvar instance = getInstances(container)[0];\r\n  \r\n\t\tif (typeof instance === 'object') {\r\n\t\t  reorder(container);\r\n\t\t}\r\n\t  });\r\n  \r\n\t  document.addEventListener('shopify:section:unload', function (event) {\r\n\t\tvar id = event.detail.sectionId;\r\n\t\tvar container = event.target.querySelector('[' + attributes$G.id + '=\"' + id + '\"]');\r\n\t\tvar instance = getInstances(container)[0];\r\n  \r\n\t\tif (typeof instance === 'object') {\r\n\t\t  unload(container);\r\n\t\t}\r\n\t  });\r\n  \r\n\t  document.addEventListener('shopify:section:select', function (event) {\r\n\t\tvar instance = getInstanceById(event.detail.sectionId);\r\n  \r\n\t\tif (typeof instance === 'object') {\r\n\t\t  instance.onSelect(event);\r\n\t\t}\r\n\t  });\r\n  \r\n\t  document.addEventListener('shopify:section:deselect', function (event) {\r\n\t\tvar instance = getInstanceById(event.detail.sectionId);\r\n  \r\n\t\tif (typeof instance === 'object') {\r\n\t\t  instance.onDeselect(event);\r\n\t\t}\r\n\t  });\r\n  \r\n\t  document.addEventListener('shopify:block:select', function (event) {\r\n\t\tvar instance = getInstanceById(event.detail.sectionId);\r\n  \r\n\t\tif (typeof instance === 'object') {\r\n\t\t  instance.onBlockSelect(event);\r\n\t\t}\r\n\t  });\r\n  \r\n\t  document.addEventListener('shopify:block:deselect', function (event) {\r\n\t\tvar instance = getInstanceById(event.detail.sectionId);\r\n  \r\n\t\tif (typeof instance === 'object') {\r\n\t\t  instance.onBlockDeselect(event);\r\n\t\t}\r\n\t  });\r\n\t}\r\n  \r\n\tconst throttle = (fn, wait) => {\r\n\t  let prev, next;\r\n\t  return function invokeFn(...args) {\r\n\t\tconst now = Date.now();\r\n\t\tnext = clearTimeout(next);\r\n\t\tif (!prev || now - prev >= wait) {\r\n\t\t  // eslint-disable-next-line prefer-spread\r\n\t\t  fn.apply(null, args);\r\n\t\t  prev = now;\r\n\t\t} else {\r\n\t\t  next = setTimeout(invokeFn.bind(null, ...args), wait - (now - prev));\r\n\t\t}\r\n\t  };\r\n\t};\r\n  \r\n\tfunction FetchError(object) {\r\n\t  this.status = object.status || null;\r\n\t  this.headers = object.headers || null;\r\n\t  this.json = object.json || null;\r\n\t  this.body = object.body || null;\r\n\t}\r\n\tFetchError.prototype = Error.prototype;\r\n  \r\n\tconst selectors$$ = {\r\n\t  single: '[data-collapsible-single]', // Add this attribute when we want only one item expanded at the same time\r\n\t  trigger: '[data-collapsible-trigger]',\r\n\t  content: '[data-collapsible-content]',\r\n\t};\r\n  \r\n\tconst classes$N = {\r\n\t  isExpanded: 'is-expanded',\r\n\t};\r\n  \r\n\tconst attributes$F = {\r\n\t  expanded: 'aria-expanded',\r\n\t  controls: 'aria-controls',\r\n\t  triggerMobile: 'data-collapsible-trigger-mobile',\r\n\t  transitionOverride: 'data-collapsible-transition-override',\r\n\t};\r\n  \r\n\tconst settings$6 = {\r\n\t  animationDelay: 500,\r\n\t};\r\n  \r\n\tconst sections$y = {};\r\n  \r\n\tclass Collapsible {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t\tthis.single = this.container.querySelector(selectors$$.single);\r\n\t\tthis.triggers = this.container.querySelectorAll(selectors$$.trigger);\r\n\t\tthis.resetHeightTimer = 0;\r\n\t\tthis.isTransitioning = false;\r\n\t\tthis.transitionOverride = this.container.hasAttribute(attributes$F.transitionOverride);\r\n\t\tthis.collapsibleToggleEvent = (event) => throttle(this.collapsibleToggle(event), 1250);\r\n  \r\n\t\tthis.init();\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tthis.triggers.forEach((trigger) => {\r\n\t\t  trigger.addEventListener('click', this.collapsibleToggleEvent);\r\n\t\t  trigger.addEventListener('keyup', this.collapsibleToggleEvent);\r\n\t\t});\r\n\t  }\r\n  \r\n\t  collapsibleToggle(e) {\r\n\t\te.preventDefault();\r\n  \r\n\t\tconst trigger = e.target.matches(selectors$$.trigger) ? e.target : e.target.closest(selectors$$.trigger);\r\n\t\tconst dropdownId = trigger.getAttribute(attributes$F.controls);\r\n\t\tconst dropdown = document.getElementById(dropdownId);\r\n\t\tconst triggerMobile = trigger.hasAttribute(attributes$F.triggerMobile);\r\n\t\tconst isExpanded = trigger.classList.contains(classes$N.isExpanded);\r\n\t\tconst isSpace = e.code === theme.keyboardKeys.SPACE;\r\n\t\tconst isEscape = e.code === theme.keyboardKeys.ESCAPE;\r\n\t\tconst isMobile = window.innerWidth < theme.sizes.small;\r\n  \r\n\t\t// Do nothing if transitioning\r\n\t\tif (this.isTransitioning && !this.transitionOverride) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\t// Do nothing if any different than ESC and Space key pressed\r\n\t\tif (e.code && !isSpace && !isEscape) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\t// Do nothing if ESC key pressed and not expanded or mobile trigger clicked and screen not mobile\r\n\t\tif ((!isExpanded && isEscape) || (triggerMobile && !isMobile)) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tthis.isTransitioning = true;\r\n\t\ttrigger.disabled = true;\r\n  \r\n\t\t// When we want only one item expanded at the same time\r\n\t\tif (this.single) {\r\n\t\t  this.triggers.forEach((otherTrigger) => {\r\n\t\t\tconst isExpanded = otherTrigger.classList.contains(classes$N.isExpanded);\r\n  \r\n\t\t\tif (trigger == otherTrigger || !isExpanded) return;\r\n  \r\n\t\t\tconst dropdownId = otherTrigger.getAttribute(attributes$F.controls);\r\n\t\t\tconst dropdown = document.getElementById(dropdownId);\r\n  \r\n\t\t\trequestAnimationFrame(() => {\r\n\t\t\t  this.closeItem(dropdown, otherTrigger);\r\n\t\t\t});\r\n\t\t  });\r\n\t\t}\r\n  \r\n\t\t// requestAnimationFrame fixes content jumping when item is sliding down\r\n\t\tif (isExpanded) {\r\n\t\t  requestAnimationFrame(() => {\r\n\t\t\tthis.closeItem(dropdown, trigger);\r\n\t\t  });\r\n\t\t} else {\r\n\t\t  requestAnimationFrame(() => {\r\n\t\t\tthis.openItem(dropdown, trigger);\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  openItem(dropdown, trigger) {\r\n\t\tlet dropdownHeight = dropdown.querySelector(selectors$$.content).offsetHeight;\r\n  \r\n\t\tthis.setDropdownHeight(dropdown, dropdownHeight, trigger, true);\r\n\t\ttrigger.classList.add(classes$N.isExpanded);\r\n\t\ttrigger.setAttribute(attributes$F.expanded, true);\r\n  \r\n\t\ttrigger.dispatchEvent(\r\n\t\t  new CustomEvent('theme:form:sticky', {\r\n\t\t\tbubbles: true,\r\n\t\t\tdetail: {\r\n\t\t\t  element: 'accordion',\r\n\t\t\t},\r\n\t\t  })\r\n\t\t);\r\n\t  }\r\n  \r\n\t  closeItem(dropdown, trigger) {\r\n\t\tlet dropdownHeight = dropdown.querySelector(selectors$$.content).offsetHeight;\r\n  \r\n\t\trequestAnimationFrame(() => {\r\n\t\t  dropdownHeight = 0;\r\n\t\t  this.setDropdownHeight(dropdown, dropdownHeight, trigger, false);\r\n\t\t  trigger.classList.remove(classes$N.isExpanded);\r\n\t\t});\r\n  \r\n\t\tthis.setDropdownHeight(dropdown, dropdownHeight, trigger, false);\r\n\t\ttrigger.classList.remove(classes$N.isExpanded);\r\n\t\ttrigger.setAttribute(attributes$F.expanded, false);\r\n\t  }\r\n  \r\n\t  setDropdownHeight(dropdown, dropdownHeight, trigger, isExpanded) {\r\n\t\tdropdown.style.height = `${dropdownHeight}px`;\r\n\t\tdropdown.setAttribute(attributes$F.expanded, isExpanded);\r\n\t\tdropdown.classList.toggle(classes$N.isExpanded, isExpanded);\r\n  \r\n\t\tif (this.resetHeightTimer) {\r\n\t\t  clearTimeout(this.resetHeightTimer);\r\n\t\t}\r\n  \r\n\t\tif (dropdownHeight == 0) {\r\n\t\t  this.resetHeightTimer = setTimeout(() => {\r\n\t\t\tdropdown.style.height = '';\r\n\t\t  }, settings$6.animationDelay);\r\n\t\t}\r\n  \r\n\t\tif (isExpanded) {\r\n\t\t  this.resetHeightTimer = setTimeout(() => {\r\n\t\t\tdropdown.style.height = 'auto';\r\n\t\t\tthis.isTransitioning = false;\r\n\t\t  }, settings$6.animationDelay);\r\n\t\t} else {\r\n\t\t  this.isTransitioning = false;\r\n\t\t}\r\n  \r\n\t\t// Always remove trigger disabled attribute after animation completes\r\n\t\tsetTimeout(() => {\r\n\t\t  trigger.disabled = false;\r\n\t\t}, settings$6.animationDelay);\r\n\t  }\r\n  \r\n\t  onUnload() {\r\n\t\tthis.triggers.forEach((trigger) => {\r\n\t\t  trigger.removeEventListener('click', this.collapsibleToggleEvent);\r\n\t\t  trigger.removeEventListener('keyup', this.collapsibleToggleEvent);\r\n\t\t});\r\n\t  }\r\n\t}\r\n  \r\n\tconst collapsible = {\r\n\t  onLoad() {\r\n\t\tsections$y[this.id] = new Collapsible(this.container);\r\n\t  },\r\n\t  onUnload() {\r\n\t\tsections$y[this.id].onUnload();\r\n\t  },\r\n\t};\r\n  \r\n\tconst selectors$_ = {\r\n\t  quantityHolder: '[data-quantity-holder]',\r\n\t  quantityField: '[data-quantity-field]',\r\n\t  quantityButton: '[data-quantity-button]',\r\n\t  quantityMinusButton: '[data-quantity-minus]',\r\n\t  quantityPlusButton: '[data-quantity-plus]',\r\n\t};\r\n  \r\n\tconst classes$M = {\r\n\t  quantityReadOnly: 'read-only',\r\n\t  isDisabled: 'is-disabled',\r\n\t};\r\n  \r\n\tclass QuantityCounter {\r\n\t  constructor(holder, inCart = false) {\r\n\t\tthis.holder = holder;\r\n\t\tthis.quantityUpdateCart = inCart;\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\t// DOM Elements\r\n\t\tthis.quantity = this.holder.querySelector(selectors$_.quantityHolder);\r\n  \r\n\t\tif (!this.quantity) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tthis.field = this.quantity.querySelector(selectors$_.quantityField);\r\n\t\tthis.buttons = this.quantity.querySelectorAll(selectors$_.quantityButton);\r\n\t\tthis.increaseButton = this.quantity.querySelector(selectors$_.quantityPlusButton);\r\n  \r\n\t\t// Set value or classes\r\n\t\tthis.quantityValue = Number(this.field.value || 0);\r\n\t\tthis.cartItemID = this.field.getAttribute('data-id');\r\n\t\tthis.maxValue = Number(this.field.getAttribute('max')) > 0 ? Number(this.field.getAttribute('max')) : null;\r\n\t\tthis.minValue = Number(this.field.getAttribute('min')) > 0 ? Number(this.field.getAttribute('min')) : 0;\r\n\t\tthis.disableIncrease = this.disableIncrease.bind(this);\r\n  \r\n\t\t// Flags\r\n\t\tthis.emptyField = false;\r\n  \r\n\t\t// Methods\r\n\t\tthis.updateQuantity = this.updateQuantity.bind(this);\r\n\t\tthis.decrease = this.decrease.bind(this);\r\n\t\tthis.increase = this.increase.bind(this);\r\n  \r\n\t\tthis.disableIncrease();\r\n  \r\n\t\t// Events\r\n\t\tif (!this.quantity.classList.contains(classes$M.quantityReadOnly)) {\r\n\t\t  this.changeValueOnClick();\r\n\t\t  this.changeValueOnInput();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Change field value when click on quantity buttons\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  changeValueOnClick() {\r\n\t\tthis.buttons.forEach((element) => {\r\n\t\t  element.addEventListener('click', (event) => {\r\n\t\t\tevent.preventDefault();\r\n  \r\n\t\t\tthis.quantityValue = Number(this.field.value || 0);\r\n  \r\n\t\t\tconst clickedElement = event.target;\r\n\t\t\tconst isDescrease = clickedElement.matches(selectors$_.quantityMinusButton) || clickedElement.closest(selectors$_.quantityMinusButton);\r\n\t\t\tconst isIncrease = clickedElement.matches(selectors$_.quantityPlusButton) || clickedElement.closest(selectors$_.quantityPlusButton);\r\n  \r\n\t\t\tif (isDescrease) {\r\n\t\t\t  this.decrease();\r\n\t\t\t}\r\n  \r\n\t\t\tif (isIncrease) {\r\n\t\t\t  this.increase();\r\n\t\t\t}\r\n  \r\n\t\t\tthis.updateQuantity();\r\n\t\t  });\r\n\t\t});\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Change field value when input new value in a field\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  changeValueOnInput() {\r\n\t\tthis.field.addEventListener('input', () => {\r\n\t\t  this.quantityValue = this.field.value;\r\n\t\t  this.updateQuantity();\r\n\t\t});\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Update field value\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  updateQuantity() {\r\n\t\tif (this.maxValue < this.quantityValue && this.maxValue !== null) {\r\n\t\t  this.quantityValue = this.maxValue;\r\n\t\t}\r\n  \r\n\t\tif (this.minValue > this.quantityValue) {\r\n\t\t  this.quantityValue = this.minValue;\r\n\t\t}\r\n  \r\n\t\tthis.field.value = this.quantityValue;\r\n  \r\n\t\tthis.disableIncrease();\r\n  \r\n\t\tdocument.dispatchEvent(new CustomEvent('theme:cart:update'));\r\n  \r\n\t\tif (this.quantityUpdateCart) {\r\n\t\t  this.updateCart();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Decrease value\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  decrease() {\r\n\t\tif (this.quantityValue > this.minValue) {\r\n\t\t  this.quantityValue--;\r\n  \r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tthis.quantityValue = 0;\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Increase value\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  increase() {\r\n\t\tthis.quantityValue++;\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Disable increase\r\n\t   *\r\n\t   * @return  {[type]}  [return description]\r\n\t   */\r\n  \r\n\t  disableIncrease() {\r\n\t\tthis.increaseButton.classList.toggle(classes$M.isDisabled, this.quantityValue >= this.maxValue && this.maxValue !== null);\r\n\t  }\r\n  \r\n\t  updateCart() {\r\n\t\tif (this.quantityValue === '') return;\r\n  \r\n\t\tconst event = new CustomEvent('theme:cart:update', {\r\n\t\t  bubbles: true,\r\n\t\t  detail: {\r\n\t\t\tid: this.cartItemID,\r\n\t\t\tquantity: this.quantityValue,\r\n\t\t  },\r\n\t\t});\r\n  \r\n\t\tthis.holder.dispatchEvent(event);\r\n\t  }\r\n\t}\r\n  \r\n\tconst a11y = {\r\n\t  /**\r\n\t   * A11y Helpers\r\n\t   * -----------------------------------------------------------------------------\r\n\t   * A collection of useful functions that help make your theme more accessible\r\n\t   */\r\n  \r\n\t  state: {\r\n\t\tfirstFocusable: null,\r\n\t\tlastFocusable: null,\r\n\t\ttrigger: null,\r\n\t  },\r\n  \r\n\t  trapFocus: function (options) {\r\n\t\tvar focusableElements = Array.from(options.container.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex^=\"-\"])')).filter(function (element) {\r\n\t\t  var width = element.offsetWidth;\r\n\t\t  var height = element.offsetHeight;\r\n  \r\n\t\t  return width !== 0 && height !== 0 && getComputedStyle(element).getPropertyValue('display') !== 'none';\r\n\t\t});\r\n  \r\n\t\tfocusableElements = focusableElements.filter(function (element) {\r\n\t\t  return !element.classList.contains('deferred-media__poster');\r\n\t\t});\r\n  \r\n\t\tthis.state.firstFocusable = focusableElements[0];\r\n\t\tthis.state.lastFocusable = focusableElements[focusableElements.length - 1];\r\n  \r\n\t\tif (!options.elementToFocus) {\r\n\t\t  options.elementToFocus = this.state.firstFocusable || options.container;\r\n\t\t}\r\n\t\tthis._setupHandlers();\r\n  \r\n\t\tdocument.addEventListener('focusin', this._onFocusInHandler);\r\n\t\tdocument.addEventListener('focusout', this._onFocusOutHandler);\r\n  \r\n\t\toptions.container.setAttribute('tabindex', '-1');\r\n\t\toptions.elementToFocus.focus();\r\n\t  },\r\n  \r\n\t  removeTrapFocus: function (options) {\r\n\t\tconst focusVisible = !document.body.classList.contains('no-outline');\r\n\t\tif (options && options.container) {\r\n\t\t  options.container.removeAttribute('tabindex');\r\n\t\t}\r\n\t\tdocument.removeEventListener('focusin', this._onFocusInHandler);\r\n  \r\n\t\tif (this.state.trigger && focusVisible) {\r\n\t\t  this.state.trigger.focus();\r\n\t\t}\r\n\t  },\r\n  \r\n\t  _manageFocus: function (evt) {\r\n\t\tif (evt.code !== theme.keyboardKeys.TAB) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\t/**\r\n\t\t * On the last focusable element and tab forward,\r\n\t\t * focus the first element.\r\n\t\t */\r\n\t\tif (evt.target === this.state.lastFocusable && !evt.shiftKey) {\r\n\t\t  evt.preventDefault();\r\n\t\t  this.state.firstFocusable.focus();\r\n\t\t}\r\n  \r\n\t\t/**\r\n\t\t * On the first focusable element and tab backward,\r\n\t\t * focus the last element.\r\n\t\t */\r\n\t\tif (evt.target === this.state.firstFocusable && evt.shiftKey) {\r\n\t\t  evt.preventDefault();\r\n\t\t  this.state.lastFocusable.focus();\r\n\t\t}\r\n\t  },\r\n  \r\n\t  _onFocusOut: function () {\r\n\t\tdocument.removeEventListener('keydown', this._manageFocusHandler);\r\n\t  },\r\n  \r\n\t  _onFocusIn: function (evt) {\r\n\t\tif (evt.target !== this.state.lastFocusable && evt.target !== this.state.firstFocusable) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tdocument.addEventListener('keydown', this._manageFocusHandler);\r\n\t  },\r\n  \r\n\t  _setupHandlers: function () {\r\n\t\tif (!this._onFocusInHandler) {\r\n\t\t  this._onFocusInHandler = this._onFocusIn.bind(this);\r\n\t\t}\r\n  \r\n\t\tif (!this._onFocusOutHandler) {\r\n\t\t  this._onFocusOutHandler = this._onFocusIn.bind(this);\r\n\t\t}\r\n  \r\n\t\tif (!this._manageFocusHandler) {\r\n\t\t  this._manageFocusHandler = this._manageFocus.bind(this);\r\n\t\t}\r\n\t  },\r\n\t};\r\n  \r\n\tfunction getScript(url, callback, callbackError) {\r\n\t  let head = document.getElementsByTagName('head')[0];\r\n\t  let done = false;\r\n\t  let script = document.createElement('script');\r\n\t  script.src = url;\r\n  \r\n\t  // Attach handlers for all browsers\r\n\t  script.onload = script.onreadystatechange = function () {\r\n\t\tif (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) {\r\n\t\t  done = true;\r\n\t\t  callback();\r\n\t\t} else {\r\n\t\t  callbackError();\r\n\t\t}\r\n\t  };\r\n  \r\n\t  head.appendChild(script);\r\n\t}\r\n  \r\n\tconst loaders = {};\r\n\twindow.isYoutubeAPILoaded = false;\r\n\twindow.isVimeoAPILoaded = false;\r\n  \r\n\tfunction loadScript(options = {}) {\r\n\t  if (!options.type) {\r\n\t\toptions.type = 'json';\r\n\t  }\r\n  \r\n\t  if (options.url) {\r\n\t\tif (loaders[options.url]) {\r\n\t\t  return loaders[options.url];\r\n\t\t} else {\r\n\t\t  return getScriptWithPromise(options.url, options.type);\r\n\t\t}\r\n\t  } else if (options.json) {\r\n\t\tif (loaders[options.json]) {\r\n\t\t  return Promise.resolve(loaders[options.json]);\r\n\t\t} else {\r\n\t\t  return window\r\n\t\t\t.fetch(options.json)\r\n\t\t\t.then((response) => {\r\n\t\t\t  return response.json();\r\n\t\t\t})\r\n\t\t\t.then((response) => {\r\n\t\t\t  loaders[options.json] = response;\r\n\t\t\t  return response;\r\n\t\t\t});\r\n\t\t}\r\n\t  } else if (options.name) {\r\n\t\tconst key = ''.concat(options.name, options.version);\r\n\t\tif (loaders[key]) {\r\n\t\t  return loaders[key];\r\n\t\t} else {\r\n\t\t  return loadShopifyWithPromise(options);\r\n\t\t}\r\n\t  } else {\r\n\t\treturn Promise.reject();\r\n\t  }\r\n\t}\r\n  \r\n\tfunction getScriptWithPromise(url, type) {\r\n\t  const loader = new Promise((resolve, reject) => {\r\n\t\tif (type === 'text') {\r\n\t\t  fetch(url)\r\n\t\t\t.then((response) => response.text())\r\n\t\t\t.then((data) => {\r\n\t\t\t  resolve(data);\r\n\t\t\t})\r\n\t\t\t.catch((error) => {\r\n\t\t\t  reject(error);\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t  getScript(\r\n\t\t\turl,\r\n\t\t\tfunction () {\r\n\t\t\t  resolve();\r\n\t\t\t},\r\n\t\t\tfunction () {\r\n\t\t\t  reject();\r\n\t\t\t}\r\n\t\t  );\r\n\t\t}\r\n\t  });\r\n  \r\n\t  loaders[url] = loader;\r\n\t  return loader;\r\n\t}\r\n  \r\n\tfunction loadShopifyWithPromise(options) {\r\n\t  const key = ''.concat(options.name, options.version);\r\n\t  const loader = new Promise((resolve, reject) => {\r\n\t\ttry {\r\n\t\t  window.Shopify.loadFeatures([\r\n\t\t\t{\r\n\t\t\t  name: options.name,\r\n\t\t\t  version: options.version,\r\n\t\t\t  onLoad: (err) => {\r\n\t\t\t\tonLoadFromShopify(resolve, reject, err);\r\n\t\t\t  },\r\n\t\t\t},\r\n\t\t  ]);\r\n\t\t} catch (err) {\r\n\t\t  reject(err);\r\n\t\t}\r\n\t  });\r\n\t  loaders[key] = loader;\r\n\t  return loader;\r\n\t}\r\n  \r\n\tfunction onLoadFromShopify(resolve, reject, err) {\r\n\t  if (err) {\r\n\t\treturn reject(err);\r\n\t  } else {\r\n\t\treturn resolve();\r\n\t  }\r\n\t}\r\n  \r\n\tconst selectors$Z = {\r\n\t  videoIframe: '[data-video-id]',\r\n\t};\r\n  \r\n\tconst classes$L = {\r\n\t  loaded: 'loaded',\r\n\t};\r\n  \r\n\tconst attributes$E = {\r\n\t  dataEnableSound: 'data-enable-sound',\r\n\t  dataEnableBackground: 'data-enable-background',\r\n\t  dataEnableAutoplay: 'data-enable-autoplay',\r\n\t  dataEnableLoop: 'data-enable-loop',\r\n\t  dataVideoId: 'data-video-id',\r\n\t  dataVideoType: 'data-video-type',\r\n\t};\r\n  \r\n\tclass LoadVideoVimeo {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t\tthis.player = this.container.querySelector(selectors$Z.videoIframe);\r\n  \r\n\t\tif (this.player) {\r\n\t\t  this.videoID = this.player.getAttribute(attributes$E.dataVideoId);\r\n\t\t  this.videoType = this.player.getAttribute(attributes$E.dataVideoType);\r\n\t\t  this.enableBackground = this.player.getAttribute(attributes$E.dataEnableBackground) === 'true';\r\n\t\t  this.disableSound = this.player.getAttribute(attributes$E.dataEnableSound) === 'false';\r\n\t\t  this.enableAutoplay = this.player.getAttribute(attributes$E.dataEnableAutoplay) !== 'false';\r\n\t\t  this.enableLoop = this.player.getAttribute(attributes$E.dataEnableLoop) !== 'false';\r\n  \r\n\t\t  if (this.videoType == 'vimeo') {\r\n\t\t\tthis.init();\r\n\t\t  }\r\n\t\t}\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tthis.loadVimeoPlayer();\r\n\t  }\r\n  \r\n\t  loadVimeoPlayer() {\r\n\t\tconst oembedUrl = 'https://vimeo.com/api/oembed.json';\r\n\t\tconst vimeoUrl = 'https://vimeo.com/' + this.videoID;\r\n\t\tlet paramsString = '';\r\n\t\tconst state = this.player;\r\n  \r\n\t\tconst params = {\r\n\t\t  url: vimeoUrl,\r\n\t\t  background: this.enableBackground,\r\n\t\t  muted: this.disableSound,\r\n\t\t  autoplay: this.enableAutoplay,\r\n\t\t  loop: this.enableLoop,\r\n\t\t};\r\n  \r\n\t\tfor (let key in params) {\r\n\t\t  paramsString += encodeURIComponent(key) + '=' + encodeURIComponent(params[key]) + '&';\r\n\t\t}\r\n  \r\n\t\tfetch(`${oembedUrl}?${paramsString}`)\r\n\t\t  .then((response) => response.json())\r\n\t\t  .then(function (data) {\r\n\t\t\tstate.innerHTML = data.html;\r\n  \r\n\t\t\tsetTimeout(function () {\r\n\t\t\t  state.parentElement.classList.add(classes$L.loaded);\r\n\t\t\t}, 1000);\r\n\t\t  })\r\n\t\t  .catch(function () {\r\n\t\t\tconsole.log('error');\r\n\t\t  });\r\n\t  }\r\n\t}\r\n  \r\n\tconst selectors$Y = {\r\n\t  videoIframe: '[data-video-id]',\r\n\t  videoWrapper: '.video-wrapper',\r\n\t  youtubeWrapper: '[data-youtube-wrapper]',\r\n\t};\r\n  \r\n\tconst attributes$D = {\r\n\t  dataSectionId: 'data-section-id',\r\n\t  dataEnableSound: 'data-enable-sound',\r\n\t  dataHideOptions: 'data-hide-options',\r\n\t  dataCheckPlayerVisibility: 'data-check-player-visibility',\r\n\t  dataVideoId: 'data-video-id',\r\n\t  dataVideoType: 'data-video-type',\r\n\t};\r\n  \r\n\tconst classes$K = {\r\n\t  loaded: 'loaded',\r\n\t};\r\n  \r\n\tconst players = [];\r\n  \r\n\tclass LoadVideoYT {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t\tthis.player = this.container.querySelector(selectors$Y.videoIframe);\r\n  \r\n\t\tif (this.player) {\r\n\t\t  this.videoOptionsVars = {};\r\n\t\t  this.videoID = this.player.getAttribute(attributes$D.dataVideoId);\r\n\t\t  this.videoType = this.player.getAttribute(attributes$D.dataVideoType);\r\n\t\t  if (this.videoType == 'youtube') {\r\n\t\t\tthis.checkPlayerVisibilityFlag = this.player.getAttribute(attributes$D.dataCheckPlayerVisibility) === 'true';\r\n\t\t\tthis.playerID = this.player.querySelector(selectors$Y.youtubeWrapper) ? this.player.querySelector(selectors$Y.youtubeWrapper).id : this.player.id;\r\n\t\t\tif (this.player.hasAttribute(selectors$Y.dataHideOptions)) {\r\n\t\t\t  this.videoOptionsVars = {\r\n\t\t\t\tcc_load_policy: 0,\r\n\t\t\t\tiv_load_policy: 3,\r\n\t\t\t\tmodestbranding: 1,\r\n\t\t\t\tplaysinline: 1,\r\n\t\t\t\tautohide: 0,\r\n\t\t\t\tcontrols: 0,\r\n\t\t\t\tbranding: 0,\r\n\t\t\t\tshowinfo: 0,\r\n\t\t\t\trel: 0,\r\n\t\t\t\tfs: 0,\r\n\t\t\t\twmode: 'opaque',\r\n\t\t\t  };\r\n\t\t\t}\r\n  \r\n\t\t\tthis.init();\r\n  \r\n\t\t\tthis.container.addEventListener(\r\n\t\t\t  'touchstart',\r\n\t\t\t  function (e) {\r\n\t\t\t\tif (e.target.matches(selectors$Y.videoWrapper) || e.target.closest(selectors$Y.videoWrapper)) {\r\n\t\t\t\t  const playerID = e.target.querySelector(selectors$Y.videoIframe).id;\r\n\t\t\t\t  players[playerID].playVideo();\r\n\t\t\t\t}\r\n\t\t\t  },\r\n\t\t\t  {passive: true}\r\n\t\t\t);\r\n\t\t  }\r\n\t\t}\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tif (window.isYoutubeAPILoaded) {\r\n\t\t  this.loadYoutubePlayer();\r\n\t\t} else {\r\n\t\t  // Load Youtube API if not loaded yet\r\n\t\t  loadScript({url: 'https://www.youtube.com/iframe_api'}).then(() => this.loadYoutubePlayer());\r\n\t\t}\r\n\t  }\r\n  \r\n\t  loadYoutubePlayer() {\r\n\t\tconst defaultYoutubeOptions = {\r\n\t\t  height: '720',\r\n\t\t  width: '1280',\r\n\t\t  playerVars: this.videoOptionsVars,\r\n\t\t  events: {\r\n\t\t\tonReady: (event) => {\r\n\t\t\t  const eventIframe = event.target.getIframe();\r\n\t\t\t  const id = eventIframe.id;\r\n\t\t\t  const enableSound = document.querySelector(`#${id}`).getAttribute(attributes$D.dataEnableSound) === 'true';\r\n  \r\n\t\t\t  eventIframe.setAttribute('tabindex', '-1');\r\n  \r\n\t\t\t  if (enableSound) {\r\n\t\t\t\tevent.target.unMute();\r\n\t\t\t  } else {\r\n\t\t\t\tevent.target.mute();\r\n\t\t\t  }\r\n\t\t\t  event.target.playVideo();\r\n  \r\n\t\t\t  if (this.checkPlayerVisibilityFlag) {\r\n\t\t\t\tthis.checkPlayerVisibility(id);\r\n  \r\n\t\t\t\twindow.addEventListener(\r\n\t\t\t\t  'scroll',\r\n\t\t\t\t  throttle(() => {\r\n\t\t\t\t\tthis.checkPlayerVisibility(id);\r\n\t\t\t\t  }, 150)\r\n\t\t\t\t);\r\n\t\t\t  }\r\n\t\t\t},\r\n\t\t\tonStateChange: (event) => {\r\n\t\t\t  // Loop video if state is ended\r\n\t\t\t  if (event.data == 0) {\r\n\t\t\t\tevent.target.playVideo();\r\n\t\t\t  }\r\n\t\t\t  if (event.data == 1) {\r\n\t\t\t\t// video is playing\r\n\t\t\t\tevent.target.getIframe().parentElement.classList.add(classes$K.loaded);\r\n\t\t\t  }\r\n\t\t\t},\r\n\t\t  },\r\n\t\t};\r\n  \r\n\t\tconst currentYoutubeOptions = {...defaultYoutubeOptions};\r\n\t\tcurrentYoutubeOptions.videoId = this.videoID;\r\n\t\tif (this.videoID.length) {\r\n\t\t  YT.ready(() => {\r\n\t\t\tplayers[this.playerID] = new YT.Player(this.playerID, currentYoutubeOptions);\r\n\t\t  });\r\n\t\t}\r\n\t\twindow.isYoutubeAPILoaded = true;\r\n\t  }\r\n  \r\n\t  checkPlayerVisibility(id) {\r\n\t\tlet playerID;\r\n\t\tif (typeof id === 'string') {\r\n\t\t  playerID = id;\r\n\t\t} else if (id.data != undefined) {\r\n\t\t  playerID = id.data.id;\r\n\t\t} else {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tconst playerElement = document.getElementById(playerID + '-container');\r\n\t\tif (!playerElement) {\r\n\t\t  return;\r\n\t\t}\r\n\t\tconst player = players[playerID];\r\n\t\tconst box = playerElement.getBoundingClientRect();\r\n\t\tlet isVisible = visibilityHelper.isElementPartiallyVisible(playerElement) || visibilityHelper.isElementTotallyVisible(playerElement);\r\n  \r\n\t\t// Fix the issue when element height is bigger than the viewport height\r\n\t\tif (box.top < 0 && playerElement.clientHeight + box.top >= 0) {\r\n\t\t  isVisible = true;\r\n\t\t}\r\n  \r\n\t\tif (isVisible && player && typeof player.playVideo === 'function') {\r\n\t\t  player.playVideo();\r\n\t\t} else if (!isVisible && player && typeof player.pauseVideo === 'function') {\r\n\t\t  player.pauseVideo();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onUnload() {\r\n\t\tconst playerID = 'youtube-' + this.container.getAttribute(attributes$D.dataSectionId);\r\n\t\tif (!players[playerID]) {\r\n\t\t  return;\r\n\t\t}\r\n\t\tplayers[playerID].destroy();\r\n\t  }\r\n\t}\r\n  \r\n\tconst selectors$X = {\r\n\t  notificationForm: '[data-notification-form]',\r\n\t  notification: '[data-notification]',\r\n\t  popupClose: '[data-popup-close]',\r\n\t};\r\n  \r\n\tconst classes$J = {\r\n\t  popupSuccess: 'pswp--success',\r\n\t  notificationPopupVisible: 'notification-popup-visible',\r\n\t};\r\n  \r\n\tclass LoadNotification {\r\n\t  constructor(popup, pswpElement) {\r\n\t\tthis.popup = popup;\r\n\t\tthis.pswpElement = pswpElement;\r\n\t\tthis.notificationForm = null;\r\n\t\tthis.notificationStopSubmit = true;\r\n\t\tthis.sessionStorage = window.sessionStorage;\r\n\t\tconst notificationWrapper = this.pswpElement.querySelector(selectors$X.notification);\r\n\t\tthis.outerCloseEvent = (e) => {\r\n\t\t  if (!notificationWrapper.contains(e.target)) {\r\n\t\t\tthis.popup.close();\r\n\t\t  }\r\n\t\t};\r\n  \r\n\t\tthis.init();\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tthis.popup.listen('preventDragEvent', (e, isDown, preventObj) => {\r\n\t\t  preventObj.prevent = false;\r\n\t\t});\r\n  \r\n\t\tconst notificationFormSuccess = window.location.search.indexOf('?customer_posted=true') !== -1;\r\n\t\tthis.notificationForm = this.pswpElement.querySelector(selectors$X.notificationForm);\r\n\t\tconst closeBtn = this.pswpElement.querySelector(selectors$X.popupClose);\r\n\t\tdocument.body.classList.add(classes$J.notificationPopupVisible);\r\n  \r\n\t\tthis.pswpElement.addEventListener('mousedown', () => {\r\n\t\t  this.popup.framework.unbind(window, 'pointermove pointerup pointercancel', this.popup);\r\n\t\t});\r\n  \r\n\t\tif (notificationFormSuccess) {\r\n\t\t  this.pswpElement.classList.add(classes$J.popupSuccess);\r\n\t\t}\r\n  \r\n\t\tthis.notificationForm.addEventListener('submit', (e) => this.notificationSubmitEvent(e));\r\n  \r\n\t\t// Custom closing events\r\n\t\tthis.pswpElement.addEventListener('click', this.outerCloseEvent);\r\n  \r\n\t\tcloseBtn.addEventListener('click', () => {\r\n\t\t  this.popup.close();\r\n\t\t});\r\n  \r\n\t\tthis.popup.listen('destroy', () => {\r\n\t\t  this.notificationRemoveStorage();\r\n\t\t  this.pswpElement.removeEventListener('click', this.outerCloseEvent);\r\n\t\t  document.body.classList.remove(classes$J.notificationPopupVisible);\r\n\t\t});\r\n\t  }\r\n  \r\n\t  notificationSubmitEvent(e) {\r\n\t\tif (this.notificationStopSubmit) {\r\n\t\t  e.preventDefault();\r\n  \r\n\t\t  this.notificationRemoveStorage();\r\n\t\t  this.notificationWriteStorage();\r\n\t\t  this.notificationStopSubmit = false;\r\n\t\t  this.notificationForm.submit();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  notificationWriteStorage() {\r\n\t\tif (this.sessionStorage !== undefined) {\r\n\t\t  this.sessionStorage.setItem('notification_form_id', this.notificationForm.id);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  notificationRemoveStorage() {\r\n\t\tthis.sessionStorage.removeItem('notification_form_id');\r\n\t  }\r\n\t}\r\n  \r\n\t// iOS smooth scrolling fix\r\n\tfunction flickitySmoothScrolling(slider) {\r\n\t  const flkty = Flickity.data(slider);\r\n  \r\n\t  if (!flkty) {\r\n\t\treturn;\r\n\t  }\r\n  \r\n\t  flkty.on('dragStart', (event, pointer) => {\r\n\t\tdocument.ontouchmove = function (e) {\r\n\t\t  e.preventDefault();\r\n\t\t};\r\n\t  });\r\n  \r\n\t  flkty.on('dragEnd', (event, pointer) => {\r\n\t\tdocument.ontouchmove = function (e) {\r\n\t\t  return true;\r\n\t\t};\r\n\t  });\r\n\t}\r\n  \r\n\tconst hosts = {\r\n\t  html5: 'html5',\r\n\t  youtube: 'youtube',\r\n\t  vimeo: 'vimeo',\r\n\t};\r\n  \r\n\tconst selectors$W = {\r\n\t  deferredMedia: '[data-deferred-media]',\r\n\t  deferredMediaButton: '[data-deferred-media-button]',\r\n\t  productMediaWrapper: '[data-product-single-media-wrapper]',\r\n\t  mediaContainer: '[data-video]',\r\n\t  mediaHidden: '.media--hidden',\r\n\t};\r\n  \r\n\tconst classes$I = {\r\n\t  mediaHidden: 'media--hidden',\r\n\t};\r\n  \r\n\tconst attributes$C = {\r\n\t  loaded: 'loaded',\r\n\t  sectionId: 'data-section-id',\r\n\t  dataAutoplayVideo: 'data-autoplay-video',\r\n\t  mediaId: 'data-media-id',\r\n\t};\r\n  \r\n\tclass ProductVideo {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t\tthis.id = this.container.getAttribute(attributes$C.sectionId);\r\n\t\tthis.autoplayVideo = this.container.getAttribute(attributes$C.dataAutoplayVideo) === 'true';\r\n\t\tthis.players = {};\r\n\t\tthis.pauseContainerMedia = (mediaId, container = this.container) => this.pauseOtherMedia(mediaId, container);\r\n\t\tthis.init();\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tconst mediaContainers = this.container.querySelectorAll(selectors$W.mediaContainer);\r\n  \r\n\t\tmediaContainers.forEach((mediaContainer) => {\r\n\t\t  const deferredMediaButton = mediaContainer.querySelector(selectors$W.deferredMediaButton);\r\n  \r\n\t\t  if (deferredMediaButton) {\r\n\t\t\tdeferredMediaButton.addEventListener('click', this.loadContent.bind(this, mediaContainer));\r\n\t\t  }\r\n  \r\n\t\t  if (this.autoplayVideo) {\r\n\t\t\tthis.loadContent(mediaContainer);\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  loadContent(mediaContainer) {\r\n\t\tif (mediaContainer.querySelector(selectors$W.deferredMedia).getAttribute(attributes$C.loaded)) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tconst content = document.createElement('div');\r\n\t\tcontent.appendChild(mediaContainer.querySelector('template').content.firstElementChild.cloneNode(true));\r\n\t\tconst mediaId = mediaContainer.dataset.mediaId;\r\n\t\tconst element = content.querySelector('video, iframe');\r\n\t\tconst host = this.hostFromVideoElement(element);\r\n\t\tconst deferredMedia = mediaContainer.querySelector(selectors$W.deferredMedia);\r\n\t\tdeferredMedia.appendChild(element);\r\n\t\tdeferredMedia.setAttribute('loaded', true);\r\n  \r\n\t\tthis.players[mediaId] = {\r\n\t\t  mediaId: mediaId,\r\n\t\t  sectionId: this.id,\r\n\t\t  container: mediaContainer,\r\n\t\t  element: element,\r\n\t\t  host: host,\r\n\t\t  ready: () => {\r\n\t\t\tthis.createPlayer(mediaId);\r\n\t\t  },\r\n\t\t};\r\n  \r\n\t\tconst video = this.players[mediaId];\r\n  \r\n\t\tswitch (video.host) {\r\n\t\t  case hosts.html5:\r\n\t\t\tthis.loadVideo(video, hosts.html5);\r\n\t\t\tbreak;\r\n\t\t  case hosts.vimeo:\r\n\t\t\tif (window.isVimeoAPILoaded) {\r\n\t\t\t  this.loadVideo(video, hosts.vimeo);\r\n\t\t\t} else {\r\n\t\t\t  loadScript({url: 'https://player.vimeo.com/api/player.js'}).then(() => this.loadVideo(video, hosts.vimeo));\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t  case hosts.youtube:\r\n\t\t\tif (window.isYoutubeAPILoaded) {\r\n\t\t\t  this.loadVideo(video, hosts.youtube);\r\n\t\t\t} else {\r\n\t\t\t  loadScript({url: 'https://www.youtube.com/iframe_api'}).then(() => this.loadVideo(video, hosts.youtube));\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\t  }\r\n  \r\n\t  hostFromVideoElement(video) {\r\n\t\tif (video.tagName === 'VIDEO') {\r\n\t\t  return hosts.html5;\r\n\t\t}\r\n  \r\n\t\tif (video.tagName === 'IFRAME') {\r\n\t\t  if (/^(https?:\\/\\/)?(www\\.)?(youtube\\.com|youtube-nocookie\\.com|youtu\\.?be)\\/.+$/.test(video.src)) {\r\n\t\t\treturn hosts.youtube;\r\n\t\t  } else if (video.src.includes('vimeo.com')) {\r\n\t\t\treturn hosts.vimeo;\r\n\t\t  }\r\n\t\t}\r\n  \r\n\t\treturn null;\r\n\t  }\r\n  \r\n\t  loadVideo(video, host) {\r\n\t\tif (video.host === host) {\r\n\t\t  video.ready();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  createPlayer(mediaId) {\r\n\t\tconst video = this.players[mediaId];\r\n  \r\n\t\tswitch (video.host) {\r\n\t\t  case hosts.html5:\r\n\t\t\tvideo.element.addEventListener('play', () => {\r\n\t\t\t  video.container.dispatchEvent(new CustomEvent('theme:media:play'), {bubbles: true});\r\n\t\t\t});\r\n  \r\n\t\t\tvideo.element.addEventListener('pause', () => {\r\n\t\t\t  video.container.dispatchEvent(new CustomEvent('theme:media:pause'), {bubbles: true});\r\n\t\t\t});\r\n  \r\n\t\t\tif (this.autoplayVideo) {\r\n\t\t\t  this.observeVideo(video, mediaId);\r\n\t\t\t}\r\n  \r\n\t\t\tbreak;\r\n\t\t  case hosts.vimeo:\r\n\t\t\tvideo.player = new Vimeo.Player(video.element);\r\n\t\t\tvideo.player.play(); // Force video play on iOS\r\n\t\t\tvideo.container.dispatchEvent(new CustomEvent('theme:media:play'), {bubbles: true});\r\n  \r\n\t\t\twindow.isVimeoAPILoaded = true;\r\n  \r\n\t\t\tvideo.player.on('play', () => {\r\n\t\t\t  video.container.dispatchEvent(new CustomEvent('theme:media:play'), {bubbles: true});\r\n\t\t\t});\r\n  \r\n\t\t\tvideo.player.on('pause', () => {\r\n\t\t\t  video.container.dispatchEvent(new CustomEvent('theme:media:pause'), {bubbles: true});\r\n\t\t\t});\r\n  \r\n\t\t\tif (this.autoplayVideo) {\r\n\t\t\t  this.observeVideo(video, mediaId);\r\n\t\t\t}\r\n  \r\n\t\t\tbreak;\r\n\t\t  case hosts.youtube:\r\n\t\t\tif (video.host == hosts.youtube && video.player) {\r\n\t\t\t  return;\r\n\t\t\t}\r\n  \r\n\t\t\tYT.ready(() => {\r\n\t\t\t  const videoId = video.container.dataset.videoId;\r\n  \r\n\t\t\t  video.player = new YT.Player(video.element, {\r\n\t\t\t\tvideoId: videoId,\r\n\t\t\t\tevents: {\r\n\t\t\t\t  onReady: (event) => {\r\n\t\t\t\t\tevent.target.playVideo(); // Force video play on iOS\r\n\t\t\t\t\tvideo.container.dispatchEvent(new CustomEvent('theme:media:play'), {bubbles: true});\r\n\t\t\t\t  },\r\n\t\t\t\t  onStateChange: (event) => {\r\n\t\t\t\t\t// Playing\r\n\t\t\t\t\tif (event.data == 1) {\r\n\t\t\t\t\t  video.container.dispatchEvent(new CustomEvent('theme:media:play'), {bubbles: true});\r\n\t\t\t\t\t}\r\n  \r\n\t\t\t\t\t// Paused\r\n\t\t\t\t\tif (event.data == 2) {\r\n\t\t\t\t\t  video.container.dispatchEvent(new CustomEvent('theme:media:pause'), {bubbles: true});\r\n\t\t\t\t\t}\r\n  \r\n\t\t\t\t\t// Ended\r\n\t\t\t\t\tif (event.data == 0) {\r\n\t\t\t\t\t  video.container.dispatchEvent(new CustomEvent('theme:media:pause'), {bubbles: true});\r\n\t\t\t\t\t}\r\n\t\t\t\t  },\r\n\t\t\t\t},\r\n\t\t\t  });\r\n  \r\n\t\t\t  window.isYoutubeAPILoaded = true;\r\n  \r\n\t\t\t  if (this.autoplayVideo) {\r\n\t\t\t\tthis.observeVideo(video, mediaId);\r\n\t\t\t  }\r\n\t\t\t});\r\n  \r\n\t\t\tbreak;\r\n\t\t}\r\n  \r\n\t\tvideo.container.addEventListener('theme:media:visible', (event) => this.onVisible(event));\r\n\t\tvideo.container.addEventListener('theme:media:hidden', (event) => this.onHidden(event));\r\n\t\tvideo.container.addEventListener('xrLaunch', (event) => this.onHidden(event));\r\n\t  }\r\n  \r\n\t  observeVideo(video) {\r\n\t\tlet observer = new IntersectionObserver(\r\n\t\t  (entries, observer) => {\r\n\t\t\tentries.forEach((entry) => {\r\n\t\t\t  const outsideViewport = entry.intersectionRatio == 0;\r\n\t\t\t  const isVisible = !video.element.closest(selectors$W.mediaHidden);\r\n  \r\n\t\t\t  if (outsideViewport) {\r\n\t\t\t\tthis.pauseVideo(video);\r\n\t\t\t  } else if (isVisible) {\r\n\t\t\t\tthis.playVideo(video);\r\n\t\t\t  }\r\n\t\t\t});\r\n\t\t  },\r\n\t\t  {\r\n\t\t\trootMargin: '200px',\r\n\t\t\tthreshold: [0, 0.25, 0.75, 1],\r\n\t\t  }\r\n\t\t);\r\n\t\tobserver.observe(video.element);\r\n\t  }\r\n  \r\n\t  playVideo(video) {\r\n\t\tif (video.player && video.player.playVideo) {\r\n\t\t  video.player.playVideo();\r\n\t\t} else if (video.element && video.element.play) {\r\n\t\t  video.element.play();\r\n\t\t} else if (video.player && video.player.play) {\r\n\t\t  video.player.play();\r\n\t\t}\r\n  \r\n\t\tvideo.container.dispatchEvent(new CustomEvent('theme:media:play'), {bubbles: true});\r\n\t  }\r\n  \r\n\t  pauseVideo(video) {\r\n\t\tif (video.player && video.player.pauseVideo) {\r\n\t\t  // Youtube\r\n\t\t  if (video.player.playerInfo.playerState == '1') {\r\n\t\t\t// If Youtube video is playing\r\n\t\t\t// There is no need to trigger the 'pause' event since we are listening for it when initializing the YT Video\r\n\t\t\tvideo.player.pauseVideo();\r\n\t\t  }\r\n\t\t} else if (video.player && video.player.pause) {\r\n\t\t  // Vimeo\r\n\t\t  video.player.pause();\r\n\t\t} else if (video.element && !video.element.paused) {\r\n\t\t  // HTML5\r\n\t\t  // If HTML5 video is playing (we used .paused because there is no 'playing' property)\r\n\t\t  video.element?.pause();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onHidden(event) {\r\n\t\tif (typeof event.target.dataset.mediaId !== 'undefined') {\r\n\t\t  const mediaId = event.target.dataset.mediaId;\r\n\t\t  const video = this.players[mediaId];\r\n\t\t  this.pauseVideo(video);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onVisible(event) {\r\n\t\tif (typeof event.target.dataset.mediaId !== 'undefined') {\r\n\t\t  const mediaId = event.target.dataset.mediaId;\r\n\t\t  const video = this.players[mediaId];\r\n  \r\n\t\t  // Using a timeout so the video \"play\" event can triggers after the previous video \"pause\" event\r\n\t\t  // because both events change the \"draggable\" option of the slider and we need to time it right\r\n\t\t  setTimeout(() => {\r\n\t\t\tthis.playVideo(video);\r\n\t\t  }, 50);\r\n  \r\n\t\t  this.pauseContainerMedia(mediaId);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  pauseOtherMedia(mediaId, container) {\r\n\t\tconst currentMedia = `[${attributes$C.mediaId}=\"${mediaId}\"]`;\r\n\t\tconst otherMedia = container.querySelectorAll(`${selectors$W.productMediaWrapper}:not(${currentMedia})`);\r\n  \r\n\t\tif (otherMedia.length) {\r\n\t\t  otherMedia.forEach((media) => {\r\n\t\t\tmedia.dispatchEvent(new CustomEvent('theme:media:hidden'), {bubbles: true});\r\n\t\t\tmedia.classList.add(classes$I.mediaHidden);\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tconst selectors$V = {\r\n\t  scrollbar: '[data-custom-scrollbar]',\r\n\t  scrollbarItems: '[data-custom-scrollbar-items]',\r\n\t  scrollbarThumb: '[data-custom-scrollbar-thumb]',\r\n\t};\r\n  \r\n\tclass CustomScrollbar {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t\tthis.scrollbarItems = container.querySelector(selectors$V.scrollbarItems);\r\n\t\tthis.scrollbar = container.querySelector(selectors$V.scrollbar);\r\n\t\tthis.scrollbarThumb = container.querySelector(selectors$V.scrollbarThumb);\r\n\t\tthis.trackWidth = 0;\r\n\t\tthis.calcScrollbarEvent = () => this.calculateScrollbar();\r\n\t\tthis.onScrollbarChangeEvent = (e) => this.onScrollbarChange(e);\r\n  \r\n\t\tif (this.scrollbar && this.scrollbarItems) {\r\n\t\t  this.events();\r\n\t\t  this.calculateScrollbar();\r\n\t\t  if (this.scrollbarItems.children.length) {\r\n\t\t\tthis.calculateTrack(this.scrollbarItems.children[0]);\r\n\t\t  }\r\n\t\t}\r\n\t  }\r\n  \r\n\t  calculateTrack(element) {\r\n\t\tconst thumbScale = element.clientWidth / this.scrollbarThumb.parentElement.clientWidth;\r\n\t\tconst thumbPosition = element.offsetLeft / this.scrollbarThumb.parentElement.clientWidth;\r\n\t\tthis.scrollbar.style.setProperty('--thumb-scale', thumbScale);\r\n\t\tthis.scrollbar.style.setProperty('--thumb-position', `${this.trackWidth * thumbPosition}px`);\r\n\t  }\r\n  \r\n\t  calculateScrollbar() {\r\n\t\tif (this.scrollbarItems.children.length) {\r\n\t\t  const childrenArr = [...this.scrollbarItems.children];\r\n\t\t  this.trackWidth = 0;\r\n  \r\n\t\t  childrenArr.forEach((element) => {\r\n\t\t\tthis.trackWidth += element.getBoundingClientRect().width + parseInt(window.getComputedStyle(element).marginRight);\r\n\t\t  });\r\n\t\t  this.scrollbar.style.setProperty('--track-width', `${this.trackWidth}px`);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onScrollbarChange(e) {\r\n\t\tif (e && e.detail && e.detail.element && this.container.contains(e.detail.element)) {\r\n\t\t  this.calculateTrack(e.detail.element);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  events() {\r\n\t\tdocument.addEventListener('theme:resize:width', this.calcScrollbarEvent);\r\n\t\tdocument.addEventListener('theme:custom-scrollbar:change', this.onScrollbarChangeEvent);\r\n\t  }\r\n  \r\n\t  unload() {\r\n\t\tdocument.removeEventListener('theme:resize:width', this.calcScrollbarEvent);\r\n\t\tdocument.removeEventListener('theme:custom-scrollbar:change', this.onScrollbarChangeEvent);\r\n\t  }\r\n\t}\r\n  \r\n\tconst selectors$U = {\r\n\t  tabsLink: '[data-tabs-link]',\r\n\t  tab: '[data-tab]',\r\n\t  tabRef: '[data-tab-ref]',\r\n\t  scrollable: '[data-custom-scrollbar]',\r\n\t  scrollableHolder: '[data-custom-scrollbar-holder]',\r\n\t  slider: '[data-slider]',\r\n\t  tabsContents: '[data-tabs-contents]',\r\n\t};\r\n  \r\n\tconst classes$H = {\r\n\t  current: 'current',\r\n\t  hide: 'hide',\r\n\t  alt: 'alt',\r\n\t  aosAnimate: 'aos-animate',\r\n\t  aosInit: 'aos-init',\r\n\t};\r\n  \r\n\tconst attributes$B = {\r\n\t  tabsLink: 'data-tabs-link',\r\n\t  tab: 'data-tab',\r\n\t  tabRef: 'data-tab-ref',\r\n\t  tabStartIndex: 'data-start-index',\r\n\t};\r\n  \r\n\tconst sections$x = {};\r\n  \r\n\tclass Tabs {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t\tthis.tabsContents = container.querySelector(selectors$U.tabsContents);\r\n\t\tthis.animateElementsTimer = null;\r\n  \r\n\t\tif (this.container) {\r\n\t\t  this.scrollable = this.container.querySelector(selectors$U.scrollable);\r\n\t\t  this.tabRef = this.container.querySelectorAll(selectors$U.tabRef);\r\n  \r\n\t\t  this.init();\r\n\t\t  this.initCustomScrollbar();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tconst tabsNavList = this.container.querySelectorAll(selectors$U.tabsLink);\r\n\t\tconst firstTabsLink = this.container.querySelector(\r\n\t\t  `[${attributes$B.tabsLink}=\"${this.container.hasAttribute(attributes$B.tabStartIndex) ? this.container.getAttribute(attributes$B.tabStartIndex) : 0}\"]`\r\n\t\t);\r\n\t\tconst firstTab = this.container.querySelector(`[${attributes$B.tab}=\"${this.container.hasAttribute(attributes$B.tabStartIndex) ? this.container.getAttribute(attributes$B.tabStartIndex) : 0}\"]`);\r\n  \r\n\t\tfirstTab?.classList.add(classes$H.current);\r\n\t\tfirstTabsLink?.classList.add(classes$H.current);\r\n  \r\n\t\tthis.checkVisibleTabsLinks();\r\n  \r\n\t\ttabsNavList.forEach((element) => {\r\n\t\t  this.handleTabsNavListeners(element);\r\n\t\t});\r\n\t  }\r\n  \r\n\t  handleTabsNavListeners(element) {\r\n\t\tconst tabId = parseInt(element.getAttribute(attributes$B.tabsLink));\r\n\t\tconst tab = this.container.querySelector(`[${attributes$B.tab}=\"${tabId}\"]`);\r\n  \r\n\t\tif (!tab) return;\r\n  \r\n\t\telement.addEventListener('click', () => {\r\n\t\t  this.tabChange(element, tab);\r\n\t\t});\r\n  \r\n\t\telement.addEventListener('keyup', (event) => {\r\n\t\t  if (event.code === theme.keyboardKeys.SPACE || event.code === theme.keyboardKeys.ENTER || event.code === theme.keyboardKeys.NUMPADENTER) {\r\n\t\t\tthis.tabChange(element, tab);\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  initCustomScrollbar() {\r\n\t\tif (!this.scrollable) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tthis.customScrollbar = new CustomScrollbar(this.container);\r\n\t  }\r\n  \r\n\t  tabChange(element, tab) {\r\n\t\tif (element.classList.contains(classes$H.current)) return;\r\n  \r\n\t\tconst parent = element.closest(selectors$U.scrollableHolder) ? element.closest(selectors$U.scrollableHolder) : element.parentElement;\r\n\t\tconst parentPadding = parseInt(window.getComputedStyle(parent).getPropertyValue('padding-left'));\r\n\t\tconst lastActiveTab = this.container.querySelector(`${selectors$U.tab}.${classes$H.current}`);\r\n\t\tconst lastActiveTabsLink = this.container.querySelector(`${selectors$U.tabsLink}.${classes$H.current}`);\r\n\t\tconst slider = tab.querySelector(selectors$U.slider);\r\n  \r\n\t\tthis.tabRef?.forEach((refElement) => {\r\n\t\t  const isActive = refElement.classList.contains(classes$H.current);\r\n\t\t  const shouldBeActive = refElement.getAttribute(attributes$B.tabRef) === tab.getAttribute(attributes$B.tab);\r\n  \r\n\t\t  refElement.classList.toggle(classes$H.current, !isActive && shouldBeActive);\r\n\t\t});\r\n  \r\n\t\tlastActiveTab.classList.remove(classes$H.current);\r\n\t\tlastActiveTabsLink.classList.remove(classes$H.current);\r\n\t\telement.classList.add(classes$H.current);\r\n\t\ttab.classList.add(classes$H.current);\r\n  \r\n\t\t// Trigger theme:tab:change custom event to reset the selected tab slider position\r\n\t\tif (slider) slider.dispatchEvent(new CustomEvent('theme:tab:change', {bubbles: false}));\r\n  \r\n\t\t// Scroll to current tab link\r\n\t\tparent.scrollTo({\r\n\t\t  top: 0,\r\n\t\t  left: element.offsetLeft - parent.offsetWidth / 2 + element.offsetWidth / 2 + parentPadding,\r\n\t\t  behavior: 'smooth',\r\n\t\t});\r\n  \r\n\t\telement.dispatchEvent(\r\n\t\t  new CustomEvent('theme:custom-scrollbar:change', {\r\n\t\t\tbubbles: true,\r\n\t\t\tdetail: {\r\n\t\t\t  element: element,\r\n\t\t\t},\r\n\t\t  })\r\n\t\t);\r\n  \r\n\t\t// Trigger animations if they are enabled\r\n\t\tif (theme.settings.animations) {\r\n\t\t  this.tabsContents.querySelectorAll(`.${classes$H.aosInit}`).forEach((element) => {\r\n\t\t\telement.classList.remove(classes$H.aosAnimate);\r\n\t\t  });\r\n  \r\n\t\t  if (this.animateElementsTimer) {\r\n\t\t\tclearTimeout(this.animateElementsTimer);\r\n\t\t  }\r\n  \r\n\t\t  this.animateElementsTimer = setTimeout(() => {\r\n\t\t\ttab.querySelectorAll(`.${classes$H.aosInit}`).forEach((element) => {\r\n\t\t\t  element.classList.add(classes$H.aosAnimate);\r\n\t\t\t});\r\n\t\t  }, 150);\r\n\t\t}\r\n  \r\n\t\tif (element.classList.contains(classes$H.hide)) {\r\n\t\t  tab.classList.add(classes$H.hide);\r\n\t\t}\r\n  \r\n\t\tthis.checkVisibleTabsLinks();\r\n\t  }\r\n  \r\n\t  checkVisibleTabsLinks() {\r\n\t\tconst tabsNavList = this.container.querySelectorAll(selectors$U.tabsLink);\r\n\t\tconst tabsNavListHidden = this.container.querySelectorAll(`${selectors$U.tabsLink}.${classes$H.hide}`);\r\n\t\tconst difference = tabsNavList.length - tabsNavListHidden.length;\r\n  \r\n\t\tif (difference < 2) {\r\n\t\t  this.container.classList.add(classes$H.alt);\r\n\t\t} else {\r\n\t\t  this.container.classList.remove(classes$H.alt);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onBlockSelect(evt) {\r\n\t\tconst element = evt.target;\r\n\t\tif (element) {\r\n\t\t  element.dispatchEvent(new Event('click'));\r\n  \r\n\t\t  element.parentNode.scrollTo({\r\n\t\t\ttop: 0,\r\n\t\t\tleft: element.offsetLeft - element.clientWidth,\r\n\t\t\tbehavior: 'smooth',\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onUnload() {\r\n\t\tif (this.customScrollbar) {\r\n\t\t  this.customScrollbar.unload();\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tconst tabs = {\r\n\t  onLoad() {\r\n\t\tsections$x[this.id] = new Tabs(this.container);\r\n\t  },\r\n\t  onBlockSelect(e) {\r\n\t\tsections$x[this.id].onBlockSelect(e);\r\n\t  },\r\n\t  onUnload() {\r\n\t\tsections$x[this.id].onUnload();\r\n\t  },\r\n\t};\r\n  \r\n\tconst selectors$T = {\r\n\t  drawer: '[data-drawer]',\r\n\t  drawerToggle: '[data-drawer-toggle]',\r\n\t  scroller: '[data-scroll]',\r\n\t  quickviewItem: '[data-quick-view-item]',\r\n\t  tabsLink: '[data-tabs-link]',\r\n\t};\r\n\tconst classes$G = {\r\n\t  open: 'is-open',\r\n\t  drawerOpen: 'js-drawer-open',\r\n\t  contentVisibilityHidden: 'cv-h',\r\n\t  header: 'site-header',\r\n\t};\r\n\tconst attributes$A = {\r\n\t  ariaExpanded: 'aria-expanded',\r\n\t  ariaControls: 'aria-controls',\r\n\t};\r\n  \r\n\tlet sections$w = {};\r\n  \r\n\tclass Drawer {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t\tthis.drawers = this.container.querySelectorAll(selectors$T.drawer);\r\n\t\tthis.drawerToggleButtons = this.container.querySelectorAll(selectors$T.drawerToggle);\r\n\t\tthis.a11y = a11y;\r\n  \r\n\t\tthis.drawerToggleEvent = throttle((event) => {\r\n\t\t  this.toggle(event);\r\n\t\t}, 150);\r\n  \r\n\t\tthis.keyPressCloseEvent = throttle((event) => {\r\n\t\t  if (event.code === theme.keyboardKeys.ESCAPE) {\r\n\t\t\tthis.close(event);\r\n\t\t  }\r\n\t\t}, 150);\r\n  \r\n\t\t// Define drawer close event\r\n\t\tthis.drawerCloseEvent = (event) => {\r\n\t\t  const activeDrawer = document.querySelector(`${selectors$T.drawer}.${classes$G.open}`);\r\n\t\t  let isDrawerToggle = false;\r\n  \r\n\t\t  if (!activeDrawer) {\r\n\t\t\treturn;\r\n\t\t  }\r\n  \r\n\t\t  if (event.type === 'click') {\r\n\t\t\tisDrawerToggle = event.target.matches(selectors$T.drawerToggle);\r\n\t\t  }\r\n\t\t  const isDrawerChild = activeDrawer ? activeDrawer.contains(event.target) : false;\r\n\t\t  const quickviewItem = activeDrawer.closest(selectors$T.quickviewItem);\r\n\t\t  const isQuickviewChild = quickviewItem ? quickviewItem.contains(event.target) : false;\r\n  \r\n\t\t  if (!isDrawerToggle && !isDrawerChild && !isQuickviewChild) {\r\n\t\t\tthis.close();\r\n\t\t  }\r\n\t\t};\r\n  \r\n\t\tthis.initListeners();\r\n\t  }\r\n  \r\n\t  initListeners() {\r\n\t\t// Toggle event for each drawer button\r\n\t\tthis.drawerToggleButtons.forEach((button) => {\r\n\t\t  button.addEventListener('click', this.drawerToggleEvent);\r\n\t\t});\r\n  \r\n\t\t// Close drawers if escape key pressed\r\n\t\tthis.drawers.forEach((drawer) => {\r\n\t\t  drawer.addEventListener('keyup', this.keyPressCloseEvent);\r\n  \r\n\t\t  // Init collapsible mobile dropdowns\r\n\t\t  this.collapsible = new Collapsible(drawer);\r\n\t\t  this.tabs = new Tabs(drawer);\r\n\t\t});\r\n  \r\n\t\t// Close drawers on click outside\r\n\t\tdocument.addEventListener('click', this.drawerCloseEvent);\r\n  \r\n\t\t// Close drawers on closing event\r\n\t\tdocument.addEventListener('theme:drawer:closing', this.drawerCloseEvent);\r\n\t  }\r\n  \r\n\t  toggle(e) {\r\n\t\te.preventDefault();\r\n\t\tconst drawer = document.querySelector(`#${e.target.getAttribute(attributes$A.ariaControls)}`);\r\n\t\tif (!drawer) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tconst isDrawerOpen = drawer.classList.contains(classes$G.open);\r\n  \r\n\t\tif (isDrawerOpen) {\r\n\t\t  this.close();\r\n\t\t} else {\r\n\t\t  this.open(e);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  open(e) {\r\n\t\tconst drawerOpenButton = e.target;\r\n\t\tconst drawer = document.querySelector(`#${e.target.getAttribute(attributes$A.ariaControls)}`);\r\n  \r\n\t\tif (!drawer) {\r\n\t\t  return;\r\n\t\t}\r\n\t\tconst drawerScroller = drawer.querySelector(selectors$T.scroller) || drawer;\r\n  \r\n\t\t// Disable page scroll right away\r\n\t\tdocument.dispatchEvent(new CustomEvent('theme:scroll:lock', {bubbles: true, detail: drawerScroller}));\r\n\t\tdocument.dispatchEvent(new CustomEvent('theme:drawer:open'), {bubbles: true});\r\n\t\tdocument.body.classList.add(classes$G.drawerOpen);\r\n  \r\n\t\tdrawer.classList.add(classes$G.open);\r\n\t\tdrawer.classList.remove(classes$G.contentVisibilityHidden);\r\n\t\tdrawerOpenButton.setAttribute(attributes$A.ariaExpanded, true);\r\n  \r\n\t\tsetTimeout(() => {\r\n\t\t  this.a11y.state.trigger = drawerOpenButton;\r\n\t\t  this.a11y.trapFocus({\r\n\t\t\tcontainer: drawer,\r\n\t\t  });\r\n\t\t});\r\n\t  }\r\n  \r\n\t  close() {\r\n\t\tif (!document.body.classList.contains(classes$G.drawerOpen)) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tconst drawer = document.querySelector(`${selectors$T.drawer}.${classes$G.open}`);\r\n  \r\n\t\tthis.drawerToggleButtons.forEach((button) => {\r\n\t\t  button.setAttribute(attributes$A.ariaExpanded, false);\r\n\t\t});\r\n  \r\n\t\tthis.a11y.removeTrapFocus({\r\n\t\t  container: drawer,\r\n\t\t});\r\n  \r\n\t\tdrawer.classList.remove(classes$G.open);\r\n  \r\n\t\tconst onDrawerTransitionEnd = (event) => {\r\n\t\t  if (event.target !== drawer) return;\r\n  \r\n\t\t  requestAnimationFrame(() => {\r\n\t\t\tdrawer.classList.add(classes$G.contentVisibilityHidden);\r\n\t\t\tdocument.dispatchEvent(new CustomEvent('theme:drawer:close'), {bubbles: true});\r\n\t\t\tdocument.dispatchEvent(new CustomEvent('theme:scroll:unlock', {bubbles: true}));\r\n\t\t  });\r\n  \r\n\t\t  drawer.removeEventListener('transitionend', onDrawerTransitionEnd);\r\n\t\t};\r\n  \r\n\t\tdrawer.addEventListener('transitionend', onDrawerTransitionEnd);\r\n  \r\n\t\tdocument.body.classList.remove(classes$G.drawerOpen);\r\n\t  }\r\n  \r\n\t  onUnload() {\r\n\t\t// Close drawer\r\n\t\tthis.close();\r\n  \r\n\t\t// Unbind all event listeners for drawers\r\n\t\tthis.drawerToggleButtons.forEach((button) => {\r\n\t\t  button.removeEventListener('click', this.drawerToggleEvent);\r\n\t\t});\r\n\t\tthis.drawers.forEach((drawer) => {\r\n\t\t  drawer.removeEventListener('keyup', this.keyPressCloseEvent);\r\n\t\t});\r\n\t\tdocument.removeEventListener('click', this.drawerCloseEvent);\r\n\t\tdocument.removeEventListener('theme:drawer:closing', this.drawerCloseEvent);\r\n  \r\n\t\tif (this.collapsible) {\r\n\t\t  this.collapsible.onUnload();\r\n\t\t}\r\n  \r\n\t\tif (this.tabs) {\r\n\t\t  this.tabs.onUnload();\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tconst drawer = {\r\n\t  onLoad() {\r\n\t\tif (this.container.classList.contains(classes$G.header)) {\r\n\t\t  this.container = this.container.parentNode;\r\n\t\t}\r\n  \r\n\t\tsections$w[this.id] = new Drawer(this.container);\r\n\t  },\r\n\t  onUnload() {\r\n\t\tsections$w[this.id].onUnload();\r\n\t  },\r\n\t};\r\n  \r\n\tconst showElement = (elem, removeProp = false, prop = 'block') => {\r\n\t  if (elem) {\r\n\t\tif (removeProp) {\r\n\t\t  elem.style.removeProperty('display');\r\n\t\t} else {\r\n\t\t  elem.style.display = prop;\r\n\t\t}\r\n\t  }\r\n\t};\r\n  \r\n\tconst hideElement = (elem) => {\r\n\t  if (elem) {\r\n\t\telem.style.display = 'none';\r\n\t  }\r\n\t};\r\n  \r\n\tconst selectors$S = {\r\n\t  headerSticky: '[data-header-sticky]',\r\n\t  headerHeight: '[data-header-height]',\r\n\t};\r\n  \r\n\tconst scrollTo = (elementTop) => {\r\n\t  /* Sticky header check */\r\n\t  const headerHeight =\r\n\t\tdocument.querySelector(selectors$S.headerSticky) && document.querySelector(selectors$S.headerHeight) ? document.querySelector(selectors$S.headerHeight).getBoundingClientRect().height : 0;\r\n  \r\n\t  window.scrollTo({\r\n\t\ttop: elementTop + window.scrollY - headerHeight,\r\n\t\tleft: 0,\r\n\t\tbehavior: 'smooth',\r\n\t  });\r\n\t};\r\n  \r\n\t// /* \u5F53\u524D\u8BE6\u60C5\u9875\u7684\u6240\u6709variants */\r\n\t// var ql_all_variants = [];\r\n\t//   if(typeof(ql_arr_hb_all_variants) == \"undefined\"){\r\n\t//     let data = document.querySelector('script#qukciViewData').innerHTML;\r\n\t//     ql_all_variants = JSON.parse(data);\r\n\t//   }else{\r\n\t//     ql_all_variants = ql_arr_hb_all_variants;\r\n\t// }\r\n  \r\n\tfunction Listeners() {\r\n\t  this.entries = [];\r\n\t}\r\n  \r\n\tListeners.prototype.add = function (element, event, fn) {\r\n\t  this.entries.push({element: element, event: event, fn: fn});\r\n\t  element.addEventListener(event, fn);\r\n\t};\r\n  \r\n\tListeners.prototype.removeAll = function () {\r\n\t  this.entries = this.entries.filter(function (listener) {\r\n\t\tlistener.element.removeEventListener(listener.event, listener.fn);\r\n\t\treturn false;\r\n\t  });\r\n\t};\r\n  \r\n\t/**\r\n\t * Find a match in the project JSON (using a ID number) and return the variant (as an Object)\r\n\t * @param {Object} product Product JSON object\r\n\t * @param {Number} value Accepts Number (e.g. 6908023078973)\r\n\t * @returns {Object} The variant object once a match has been successful. Otherwise null will be return\r\n\t */\r\n  \r\n\t/**\r\n\t * Convert the Object (with 'name' and 'value' keys) into an Array of values, then find a match & return the variant (as an Object)\r\n\t * @param {Object} product Product JSON object\r\n\t * @param {Object} collection Object with 'name' and 'value' keys (e.g. [{ name: \"Size\", value: \"36\" }, { name: \"Color\", value: \"Black\" }])\r\n\t * @returns {Object || null} The variant object once a match has been successful. Otherwise null will be returned\r\n\t */\r\n\tfunction getVariantFromSerializedArray(product, collection) {\r\n\t  _validateProductStructure(product);\r\n  \r\n\t  // If value is an array of options\r\n\t  var optionArray = _createOptionArrayFromOptionCollection(product, collection);\r\n\t  let id = product.id;\r\n\t  collection.forEach(function(v){\r\n\t\tif(v.id) id = v.id;\r\n\t  });\r\n\t  return getVariantFromOptionArray(product, optionArray, id);\r\n\t}\r\n  \r\n\t/**\r\n\t * TODO:\r\n\t * \u8FD4\u56DE\u5F53\u524D\u9009\u4E2D\u7684variant\r\n\t * Find a match in the project JSON (using Array with option values) and return the variant (as an Object)\r\n\t * @param {Object} product Product JSON object\r\n\t * @param {Array} options List of submitted values (e.g. ['36', 'Black'])\r\n\t * @returns {Object || null} The variant object once a match has been successful. Otherwise null will be returned\r\n\t */\r\n\tfunction getVariantFromOptionArray(product, options, id) {\r\n\t  _validateProductStructure(product);\r\n\t  _validateOptionsArray(options);\r\n\t  let ql_all_variants = [];\r\n\t  let quickEl = document.querySelector('#shopify-section-api-quickview');\r\n\t  if(quickEl){\r\n\t\tlet data = document.querySelector('script#qukciViewData').innerHTML;\r\n\t\tql_all_variants = JSON.parse(data);\r\n\t  }else if(typeof(ql_arr_hb_all_variants) !== \"undefined\")\r\n\t  {\r\n\t\tql_all_variants = ql_arr_hb_all_variants;\r\n\t  }\r\n\t  var result = ql_all_variants.filter(function (variant) {\r\n\t\t\t\t\tif(variant.featured_image.product_id != id) return false;\r\n\t\t\t\t\treturn options.every(function (option, index) {\r\n\t\t\t\t\t  return variant.options[index] === option;\r\n\t\t\t\t\t});\r\n\t\t\t\t  });\r\n\t  \r\n\t  return result[0] || null;  // [0] \u786E\u4FDD\u9009\u4E2D\u7684\u662F\u552F\u4E00\u7684variant(\u8981\u4E48\u6CA1\u627E\u5230\uFF0C\u8981\u4E48\u53EA\u627E\u5230\u4E00\u4E2A)\r\n\t}\r\n  \r\n\t/**\r\n\t * Creates an array of selected options from the object\r\n\t * Loops through the project.options and check if the \"option name\" exist (product.options.name) and matches the target\r\n\t * @param {Object} product Product JSON object\r\n\t * @param {Array} collection Array of object (e.g. [{ name: \"Size\", value: \"36\" }, { name: \"Color\", value: \"Black\" }])\r\n\t * @returns {Array} The result of the matched values. (e.g. ['36', 'Black'])\r\n\t */\r\n\tfunction _createOptionArrayFromOptionCollection(product, collection) {\r\n\t  _validateProductStructure(product);\r\n\t  _validateSerializedArray(collection);\r\n  \r\n\t  var optionArray = [];\r\n  \r\n\t  collection.forEach(function (option) {\r\n\t\tfor (var i = 0; i < product.options.length; i++) {\r\n\t\t  var name = product.options[i].name || product.options[i];\r\n\t\t  if (name.toLowerCase() === option.name.toLowerCase()) {\r\n\t\t\toptionArray[i] = option.value;\r\n\t\t\tbreak;\r\n\t\t  }\r\n\t\t}\r\n\t  });\r\n  \r\n\t  return optionArray;\r\n\t}\r\n  \r\n\t/**\r\n\t * Check if the product data is a valid JS object\r\n\t * Error will be thrown if type is invalid\r\n\t * @param {object} product Product JSON object\r\n\t */\r\n\tfunction _validateProductStructure(product) {\r\n\t  if (typeof product !== 'object') {\r\n\t\tthrow new TypeError(product + ' is not an object.');\r\n\t  }\r\n  \r\n\t  if (Object.keys(product).length === 0 && product.constructor === Object) {\r\n\t\tthrow new Error(product + ' is empty.');\r\n\t  }\r\n\t}\r\n  \r\n\t/**\r\n\t * Validate the structure of the array\r\n\t * It must be formatted like jQuery's serializeArray()\r\n\t * @param {Array} collection Array of object [{ name: \"Size\", value: \"36\" }, { name: \"Color\", value: \"Black\" }]\r\n\t */\r\n\tfunction _validateSerializedArray(collection) {\r\n\t  if (!Array.isArray(collection)) {\r\n\t\tthrow new TypeError(collection + ' is not an array.');\r\n\t  }\r\n  \r\n\t  if (collection.length === 0) {\r\n\t\tthrow new Error(collection + ' is empty.');\r\n\t  }\r\n  \r\n\t  if (collection[0].hasOwnProperty('name')) {\r\n\t\tif (typeof collection[0].name !== 'string') {\r\n\t\t  throw new TypeError('Invalid value type passed for name of option ' + collection[0].name + '. Value should be string.');\r\n\t\t}\r\n\t  } else {\r\n\t\tthrow new Error(collection[0] + 'does not contain name key.');\r\n\t  }\r\n\t}\r\n  \r\n\t/**\r\n\t * Validate the structure of the array\r\n\t * It must be formatted as list of values\r\n\t * @param {Array} collection Array of object (e.g. ['36', 'Black'])\r\n\t */\r\n\tfunction _validateOptionsArray(options) {\r\n\t  if (Array.isArray(options) && typeof options[0] === 'object') {\r\n\t\tthrow new Error(options + 'is not a valid array of options.');\r\n\t  }\r\n\t}\r\n  \r\n\tvar selectors$R = {\r\n\t  idInput: '[name=\"id\"]',\r\n\t  planInput: '[name=\"selling_plan\"]',\r\n\t  optionInput: '[name^=\"options\"]',\r\n\t  quantityInput: '[name=\"quantity\"]',\r\n\t  propertyInput: '[name^=\"properties\"]',\r\n\t};\r\n  \r\n\t// Public Methods\r\n\t// -----------------------------------------------------------------------------\r\n  \r\n\t/**\r\n\t * Returns a URL with a variant ID query parameter. Useful for updating window.history\r\n\t * with a new URL based on the currently select product variant.\r\n\t * @param {string} url - The URL you wish to append the variant ID to\r\n\t * @param {number} id  - The variant ID you wish to append to the URL\r\n\t * @returns {string} - The new url which includes the variant ID query parameter\r\n\t */\r\n  \r\n\tfunction getUrlWithVariant(url,handle, id) {\r\n\t  if (/variant=/.test(url)) {\r\n\t\treturn url.replace(/(variant=)[^&]+/, '$1' + id);\r\n\t  } else if (/\\?/.test(url)) {\r\n\t\treturn url.concat('&variant=').concat(id);\r\n\t  }\r\n  \r\n\t  return url.concat('?variant=').concat(id);\r\n\t}\r\n  \r\n\t/**\r\n\t * Constructor class that creates a new instance of a product form controller.\r\n\t *\r\n\t * @param {Element} element - DOM element which is equal to the <form> node wrapping product form inputs\r\n\t * @param {Object} product - A product object\r\n\t * @param {Object} options - Optional options object\r\n\t * @param {Function} options.onOptionChange - Callback for whenever an option input changes\r\n\t * @param {Function} options.onPlanChange - Callback for changes to name=selling_plan\r\n\t * @param {Function} options.onQuantityChange - Callback for whenever an quantity input changes\r\n\t * @param {Function} options.onPropertyChange - Callback for whenever a property input changes\r\n\t * @param {Function} options.onFormSubmit - Callback for whenever the product form is submitted\r\n\t */\r\n\tclass ProductForm {\r\n\t  constructor(element, product, options) {\r\n\t\tthis.element = element;\r\n\t\tthis.form = this.element.tagName == 'FORM' ? this.element : this.element.querySelector('form');\r\n\t\tthis.product = this._validateProductObject(product);\r\n\t\tthis.variantElement = this.element.querySelector(selectors$R.idInput);  // \u5F53\u524D\u9009\u4E2D\u7684variant\r\n\t\toptions = options || {};\r\n  \r\n\t\tthis._listeners = new Listeners();\r\n\t\tthis._listeners.add(this.element, 'submit', this._onSubmit.bind(this, options));\r\n  \r\n\t\t// selectors$R.optionInput: \u62FF\u5230\u6240\u6709\u5C5E\u6027\u540D\u4E3Aname\u4E14\u5C5E\u6027\u503C\u5F00\u5934\u4E3Aoptions\u7684\u5143\u7D20\r\n\t\tthis.optionInputs = this._initInputs(selectors$R.optionInput, options.onOptionChange);\r\n  \r\n\t\tthis.planInputs = this._initInputs(selectors$R.planInput, options.onPlanChange);\r\n  \r\n\t\tthis.quantityInputs = this._initInputs(selectors$R.quantityInput, options.onQuantityChange);\r\n  \r\n\t\tthis.propertyInputs = this._initInputs(selectors$R.propertyInput, options.onPropertyChange);\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Cleans up all event handlers that were assigned when the Product Form was constructed.\r\n\t   * Useful for use when a section needs to be reloaded in the theme editor.\r\n\t   */\r\n\t  destroy() {\r\n\t\tthis._listeners.removeAll();\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Getter method which returns the array of currently selected option values\r\n\t   *\r\n\t   * @returns {Array} An array of option values\r\n\t   */\r\n\t  options() {\r\n\t\treturn this._serializeInputValues(this.optionInputs, function (item) {\r\n\t\t  var regex = /(?:^(options\\[))(.*?)(?:\\])/;\r\n\t\t  item.name = regex.exec(item.name)[2]; // Use just the value between 'options[' and ']'\r\n\t\t  return item;\r\n\t\t});\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Getter method which returns the currently selected variant, or `null` if variant\r\n\t   * doesn't exist.\r\n\t   *\r\n\t   * @returns {Object|null} Variant object\r\n\t   */\r\n\t  variant() {\r\n\t\tconst opts = this.options();\r\n\t\tif (opts.length) {\r\n\t\t  return getVariantFromSerializedArray(this.product, opts);\r\n\t\t} else {\r\n\t\t  return this.product.variants[0];\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Getter method which returns the current selling plan, or `null` if plan\r\n\t   * doesn't exist.\r\n\t   *\r\n\t   * @returns {Object|null} Variant object\r\n\t   */\r\n\t  plan(variant) {\r\n\t\tlet plan = {\r\n\t\t  allocation: null,\r\n\t\t  group: null,\r\n\t\t  detail: null,\r\n\t\t};\r\n\t\tconst formData = new FormData(this.form);\r\n\t\tconst id = formData.get('selling_plan');\r\n  \r\n\t\tif (id && variant) {\r\n\t\t  plan.allocation = variant.selling_plan_allocations.find(function (item) {\r\n\t\t\treturn item.selling_plan_id.toString() === id.toString();\r\n\t\t  });\r\n\t\t}\r\n\t\tif (plan.allocation) {\r\n\t\t  plan.group = this.product.selling_plan_groups.find(function (item) {\r\n\t\t\treturn item.id.toString() === plan.allocation.selling_plan_group_id.toString();\r\n\t\t  });\r\n\t\t}\r\n\t\tif (plan.group) {\r\n\t\t  plan.detail = plan.group.selling_plans.find(function (item) {\r\n\t\t\treturn item.id.toString() === id.toString();\r\n\t\t  });\r\n\t\t}\r\n  \r\n\t\tif (plan && plan.allocation && plan.detail && plan.allocation) {\r\n\t\t  return plan;\r\n\t\t} else return null;\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Getter method which returns a collection of objects containing name and values\r\n\t   * of property inputs\r\n\t   *\r\n\t   * @returns {Array} Collection of objects with name and value keys\r\n\t   */\r\n\t  properties() {\r\n\t\treturn this._serializeInputValues(this.propertyInputs, function (item) {\r\n\t\t  var regex = /(?:^(properties\\[))(.*?)(?:\\])/;\r\n\t\t  item.name = regex.exec(item.name)[2]; // Use just the value between 'properties[' and ']'\r\n\t\t  return item;\r\n\t\t});\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Getter method which returns the current quantity or 1 if no quantity input is\r\n\t   * included in the form\r\n\t   *\r\n\t   * @returns {Array} Collection of objects with name and value keys\r\n\t   */\r\n\t  quantity() {\r\n\t\treturn this.quantityInputs[0] ? Number.parseInt(this.quantityInputs[0].value, 10) : 1;\r\n\t  }\r\n  \r\n\t  getFormState() {\r\n\t\tconst variant = this.variant();\r\n\t\treturn {\r\n\t\t  options: this.options(),\r\n\t\t  variant: variant,\r\n\t\t  properties: this.properties(),\r\n\t\t  quantity: this.quantity(),\r\n\t\t  plan: this.plan(variant),\r\n\t\t};\r\n\t  }\r\n  \r\n\t  // Private Methods\r\n\t  // -----------------------------------------------------------------------------\r\n\t  _setIdInputValue(variant) {  // \u66F4\u65B0\u5F53\u524D\u9009\u4E2D\u7684variant\u503C\r\n\t\tif (variant && variant.id) {\r\n\t\t  this.variantElement.value = variant.id.toString();\r\n\t\t} else {\r\n\t\t  this.variantElement.value = '';\r\n\t\t}\r\n  \r\n\t\tthis.variantElement.dispatchEvent(new Event('change'));\r\n\t  }\r\n  \r\n\t  _onSubmit(options, event) {\r\n\t\tevent.dataset = this.getFormState();\r\n\t\tif (options.onFormSubmit) {\r\n\t\t  options.onFormSubmit(event);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  _onOptionChange(event) {\r\n\t\tthis._setIdInputValue(event.dataset.variant);\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * input\u6570\u636E\u53D1\u751F\u6539\u53D8\u65F6\u8C03\u7528\u7684\u51FD\u6570\r\n\t   * \u65B0\u589Ecolor swatch\u6539\u53D8\u65F6\uFF0C\u5224\u65AD\u8D27\u53F7\u662F\u5426\u6539\u53D8\uFF0C\u5982\u6539\u53D8\u4E86\uFF0C\u5219\u9700\u8981\u66F4\u65B0\u6807\u9898\u548C\u4EA7\u54C1\u4ECB\u7ECD\r\n\t   */\r\n\t  _onFormEvent(cb) {\r\n\t\tif (typeof cb === 'undefined') {\r\n\t\t  return Function.prototype.bind();\r\n\t\t}\r\n  \r\n\t\treturn function (event) {\r\n\t\t  event.dataset = this.getFormState();\r\n\t\t  this._setIdInputValue(event.dataset.variant);\r\n\t\t  cb(event);\r\n\t\t}.bind(this);\r\n\t  }\r\n  \r\n\t  _initInputs(selector, cb) {\r\n\t\tvar elements = Array.prototype.slice.call(this.element.querySelectorAll(selector));\r\n  \r\n\t\treturn elements.map(\r\n\t\t  function (element) {\r\n\t\t\tthis._listeners.add(element, 'change', this._onFormEvent(cb));\r\n\t\t\treturn element;\r\n\t\t  }.bind(this)\r\n\t\t);\r\n\t  }\r\n  \r\n\t  _serializeInputValues(inputs, transform) {\r\n\t\treturn inputs.reduce(function (options, input) {\r\n\t\t  if (\r\n\t\t\tinput.checked || // If input is a checked (means type radio or checkbox)\r\n\t\t\t(input.type !== 'radio' && input.type !== 'checkbox') // Or if its any other type of input\r\n\t\t  ) {\r\n\t\t\tvar id = '', obj = {name: input.name};\r\n\t\t\t// product id\r\n\t\t\tif(input.hasAttribute('data-id')){\r\n\t\t\t  // id = input.getAttribute('data-id');\r\n\t\t\t  obj['id'] = input.getAttribute('data-id');\r\n\t\t\t}\r\n\t\t\t \r\n  \r\n\t\t\tobj['value'] = input.value;\r\n  \r\n\t\t\t// handle\r\n\t\t\tif(input.hasAttribute('data-handle')){\r\n\t\t\t  obj['handle'] = input.getAttribute('data-handle');\r\n\t\t\t}\r\n  \r\n\t\t\toptions.push(transform(obj));\r\n\t\t\t// options.push(transform({name: input.name, value: input.value, id: id}));\r\n\t\t  }\r\n  \r\n\t\t  return options;\r\n\t\t}, []);\r\n\t  }\r\n  \r\n\t  _validateProductObject(product) {\r\n\t\tif (typeof product !== 'object') {\r\n\t\t  throw new TypeError(product + ' is not an object.');\r\n\t\t}\r\n  \r\n\t\tif (typeof product.variants[0].options === 'undefined') {\r\n\t\t  throw new TypeError('Product object is invalid. Make sure you use the product object that is output from {{ product | json }} or from the http://[your-product-url].js route');\r\n\t\t}\r\n\t\treturn product;\r\n\t  }\r\n\t}\r\n  \r\n\tconst selectors$Q = {\r\n\t  list: '[data-store-availability-list]',\r\n\t};\r\n  \r\n\tconst defaults$1 = {\r\n\t  close: '.js-modal-close',\r\n\t  open: '.js-modal-open-store-availability-modal',\r\n\t  openClass: 'modal--is-active',\r\n\t  openBodyClass: 'modal--is-visible',\r\n\t  closeModalOnClick: false,\r\n\t  scrollIntoView: false,\r\n\t};\r\n  \r\n\tclass Modals {\r\n\t  constructor(id, options) {\r\n\t\tthis.modal = document.getElementById(id);\r\n  \r\n\t\tif (!this.modal) return false;\r\n  \r\n\t\tthis.nodes = {\r\n\t\t  parents: [document.querySelector('html'), document.body],\r\n\t\t};\r\n\t\tthis.config = Object.assign(defaults$1, options);\r\n\t\tthis.modalIsOpen = false;\r\n\t\tthis.focusOnOpen = this.config.focusOnOpen ? document.getElementById(this.config.focusOnOpen) : this.modal;\r\n\t\tthis.openElement = document.querySelector(this.config.open);\r\n\t\tthis.a11y = a11y;\r\n  \r\n\t\tthis.init();\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tthis.openElement.addEventListener('click', this.open.bind(this));\r\n\t\tthis.modal.querySelector(this.config.close).addEventListener('click', this.closeModal.bind(this));\r\n\t  }\r\n  \r\n\t  open(evt) {\r\n\t\t// Keep track if modal was opened from a click, or called by another function\r\n\t\tlet externalCall = false;\r\n\t\t// Prevent following href if link is clicked\r\n\t\tif (evt) {\r\n\t\t  evt.preventDefault();\r\n\t\t} else {\r\n\t\t  externalCall = true;\r\n\t\t}\r\n  \r\n\t\tif (this.modalIsOpen && !externalCall) {\r\n\t\t  this.closeModal();\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tthis.modal.classList.add(this.config.openClass);\r\n\t\tthis.nodes.parents.forEach((node) => {\r\n\t\t  node.classList.add(this.config.openBodyClass);\r\n\t\t});\r\n\t\tthis.modalIsOpen = true;\r\n  \r\n\t\tconst scrollableElement = document.querySelector(selectors$Q.list);\r\n\t\tdocument.dispatchEvent(new CustomEvent('theme:scroll:lock', {bubbles: true, detail: scrollableElement}));\r\n  \r\n\t\tif (this.config.scrollIntoView) {\r\n\t\t  this.scrollIntoView();\r\n\t\t}\r\n\t\tthis.bindEvents();\r\n  \r\n\t\tthis.a11y.trapFocus({\r\n\t\t  container: this.modal,\r\n\t\t});\r\n\t  }\r\n  \r\n\t  closeModal() {\r\n\t\tif (!this.modalIsOpen) return;\r\n\t\tdocument.activeElement.blur();\r\n\t\tthis.modal.classList.remove(this.config.openClass);\r\n\t\tvar self = this;\r\n\t\tthis.nodes.parents.forEach(function (node) {\r\n\t\t  node.classList.remove(self.config.openBodyClass);\r\n\t\t});\r\n\t\tthis.modalIsOpen = false;\r\n\t\tthis.openElement.focus();\r\n\t\tthis.unbindEvents();\r\n  \r\n\t\tthis.a11y.removeTrapFocus({\r\n\t\t  container: this.modal,\r\n\t\t});\r\n  \r\n\t\t// Enable page scroll right after the closing animation ends\r\n\t\tconst timeout = 400;\r\n\t\tdocument.dispatchEvent(new CustomEvent('theme:scroll:unlock', {bubbles: true, detail: timeout}));\r\n\t  }\r\n  \r\n\t  bindEvents() {\r\n\t\tthis.keyupHandler = this.keyupHandler.bind(this);\r\n\t\tthis.clickHandler = this.clickHandler.bind(this);\r\n\t\tdocument.body.addEventListener('keyup', this.keyupHandler);\r\n\t\tdocument.body.addEventListener('click', this.clickHandler);\r\n\t  }\r\n  \r\n\t  unbindEvents() {\r\n\t\tdocument.body.removeEventListener('keyup', this.keyupHandler);\r\n\t\tdocument.body.removeEventListener('click', this.clickHandler);\r\n\t  }\r\n  \r\n\t  keyupHandler(event) {\r\n\t\tif (event.code === theme.keyboardKeys.ESCAPE) {\r\n\t\t  this.closeModal();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  clickHandler(event) {\r\n\t\tif (this.config.closeModalOnClick && !this.modal.contains(event.target) && !event.target.matches(this.config.open)) {\r\n\t\t  this.closeModal();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  scrollIntoView() {\r\n\t\tthis.focusOnOpen.scrollIntoView({\r\n\t\t  behavior: 'smooth',\r\n\t\t});\r\n\t  }\r\n\t}\r\n  \r\n\tconst selectors$P = {\r\n\t  body: 'body',\r\n\t  storeAvailabilityModal: '[data-store-availability-modal]',\r\n\t  storeAvailabilityModalOpen: '[data-store-availability-modal-open]',\r\n\t  storeAvailabilityModalClose: '[data-store-availability-modal-close]',\r\n\t  storeAvailabilityModalProductTitle: '[data-store-availability-modal-product__title]',\r\n\t};\r\n  \r\n\tconst classes$F = {\r\n\t  openClass: 'store-availabilities-modal--active',\r\n\t};\r\n  \r\n\tclass StoreAvailability {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t  }\r\n  \r\n\t  updateContent(variantId, productTitle) {\r\n\t\tthis._fetchStoreAvailabilities(variantId, productTitle);\r\n\t  }\r\n  \r\n\t  clearContent() {\r\n\t\tthis.container.innerHTML = '';\r\n\t  }\r\n  \r\n\t  _initModal() {\r\n\t\treturn new Modals('StoreAvailabilityModal', {\r\n\t\t  close: selectors$P.storeAvailabilityModalClose,\r\n\t\t  open: selectors$P.storeAvailabilityModalOpen,\r\n\t\t  closeModalOnClick: true,\r\n\t\t  openClass: classes$F.openClass,\r\n\t\t  scrollIntoView: false,\r\n\t\t});\r\n\t  }\r\n  \r\n\t  _fetchStoreAvailabilities(variantId, productTitle) {\r\n\t\tconst variantSectionUrl = '/variants/' + variantId + '/?section_id=store-availability';\r\n\t\tthis.clearContent();\r\n  \r\n\t\tconst self = this;\r\n\t\tfetch(variantSectionUrl)\r\n\t\t  .then(function (response) {\r\n\t\t\treturn response.text();\r\n\t\t  })\r\n\t\t  .then(function (storeAvailabilityHTML) {\r\n\t\t\tconst body = document.querySelector(selectors$P.body);\r\n\t\t\tlet storeAvailabilityModal = body.querySelector(selectors$P.storeAvailabilityModal);\r\n\t\t\tif (storeAvailabilityModal) {\r\n\t\t\t  storeAvailabilityModal.remove();\r\n\t\t\t}\r\n  \r\n\t\t\tself.container.innerHTML = storeAvailabilityHTML;\r\n\t\t\tself.container.innerHTML = self.container.firstElementChild.innerHTML;\r\n  \r\n\t\t\tif (self.container.firstElementChild.innerHTML.trim() === '') {\r\n\t\t\t  self.clearContent();\r\n\t\t\t  return;\r\n\t\t\t}\r\n  \r\n\t\t\tconst storeAvailabilityModalOpen = self.container.querySelector(selectors$P.storeAvailabilityModalOpen);\r\n\t\t\t// Only create modal if open modal element exists\r\n\t\t\tif (!storeAvailabilityModalOpen) {\r\n\t\t\t  return;\r\n\t\t\t}\r\n  \r\n\t\t\tself.modal = self._initModal();\r\n\t\t\tself._updateProductTitle(productTitle);\r\n  \r\n\t\t\tstoreAvailabilityModal = self.container.querySelector(selectors$P.storeAvailabilityModal);\r\n\t\t\tif (storeAvailabilityModal) {\r\n\t\t\t  body.appendChild(storeAvailabilityModal);\r\n\t\t\t}\r\n\t\t  });\r\n\t  }\r\n  \r\n\t  _updateProductTitle(productTitle) {\r\n\t\tconst storeAvailabilityModalProductTitle = this.container.querySelector(selectors$P.storeAvailabilityModalProductTitle);\r\n\t\tstoreAvailabilityModalProductTitle.textContent = productTitle;\r\n\t  }\r\n\t}\r\n  \r\n\t/**\r\n\t * Variant Sellout Precrime Click Preview\r\n\t * I think of this like the precrime machine in Minority report.  It gives a preview\r\n\t * of every possible click action, given the current form state.  The logic is:\r\n\t *\r\n\t * for each clickable name=options[] variant selection element\r\n\t * find the value of the form if the element were clicked\r\n\t * lookup the variant with those value in the product json\r\n\t * clear the classes, add .unavailable if it's not found,\r\n\t * and add .sold-out if it is out of stock\r\n\t *\r\n\t * Caveat: we rely on the option position so we don't need\r\n\t * to keep a complex map of keys and values.\r\n\t */\r\n  \r\n\tconst selectors$O = {\r\n\t  form: '[data-product-form]',\r\n\t  optionPosition: '[data-option-position]',\r\n\t  optionInput: '[name^=\"options\"], [data-popout-option]',\r\n\t};\r\n  \r\n\tconst classes$E = {\r\n\t  soldOut: 'sold-out',\r\n\t  unavailable: 'unavailable',\r\n\t};\r\n  \r\n\tconst attributes$z = {\r\n\t  optionPosition: 'data-option-position',\r\n\t  selectOptionValue: 'data-value',\r\n\t};\r\n  \r\n\tclass SelloutVariants {\r\n\t  constructor(container, productJSON) {\r\n\t\tthis.container = container;\r\n\t\tthis.productJSON = productJSON;\r\n\t\tthis.form = this.container.querySelector(selectors$O.form);\r\n\t\tthis.formData = new FormData(this.form);\r\n\t\tthis.optionElements = this.container.querySelectorAll(selectors$O.optionInput);\r\n  \r\n\t\tif (this.productJSON && this.form) {\r\n\t\t  this.init();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tthis.update();\r\n\t  }\r\n  \r\n\t  update() {\r\n\t\tthis.getCurrentState();\r\n  \r\n\t\tthis.optionElements.forEach((el) => {\r\n\t\t  const val = el.value || el.getAttribute(attributes$z.selectOptionValue);\r\n\t\t  const optionSelector = el.closest(selectors$O.optionPosition);\r\n  \r\n\t\t  if (!optionSelector) {\r\n\t\t\treturn;\r\n\t\t  }\r\n  \r\n\t\t  const positionString = optionSelector.getAttribute(attributes$z.optionPosition);\r\n\t\t  // subtract one because option.position in liquid does not count form zero, but JS arrays do\r\n\t\t  const position = parseInt(positionString, 10) - 1;\r\n  \r\n\t\t  let newVals = [...this.selections];\r\n\t\t  newVals[position] = val;\r\n  \r\n\t\t  let ql_all_variants = [];\r\n\t\t  let quickEl = document.querySelector('#shopify-section-api-quickview');\r\n\t\t  if(quickEl){\r\n\t\t\tlet data = document.querySelector('script#qukciViewData').innerHTML;\r\n\t\t\tql_all_variants = JSON.parse(data);\r\n\t\t  }else if(typeof(ql_arr_hb_all_variants) !== \"undefined\")\r\n\t\t  {\r\n\t\t\tql_all_variants = ql_arr_hb_all_variants;\r\n\t\t  }\r\n  \r\n\t\t  const found = ql_all_variants.find((element) => {\r\n\t\t\t// only return true if every option matches our hypothetical selection\r\n\t\t\tlet perfectMatch = true;\r\n\t\t\tfor (let index = 0; index < newVals.length; index++) {\r\n\t\t\t  if (element.options[index] !== newVals[index]) {\r\n\t\t\t\tperfectMatch = false;\r\n\t\t\t  }\r\n\t\t\t}\r\n\t\t\treturn perfectMatch;\r\n\t\t  });\r\n  \r\n\t\t  el.parentElement.classList.remove(classes$E.soldOut, classes$E.unavailable);\r\n\t\t  if (typeof found === 'undefined') {\r\n\t\t\tel.parentElement.classList.add(classes$E.unavailable);\r\n\t\t  } else if (found?.available === false) {\r\n\t\t\tel.parentElement.classList.add(classes$E.soldOut);\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  getCurrentState() {\r\n\t\tthis.formData = new FormData(this.form);\r\n\t\tthis.selections = [];\r\n\t\tfor (var value of this.formData.entries()) {\r\n\t\t  if (value[0].includes('options[')) {\r\n\t\t\t// push the current state of the form, dont worry about the group name\r\n\t\t\t// we will be using the array position instead of the name to match values\r\n\t\t\tthis.selections.push(value[1]);\r\n\t\t  }\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\t/*\r\n\tUsage:\r\n\t  import {NotificationPopup} from '../features/notification-popup';\r\n  \r\n\t  if (button.hasAttribute(attributes.notificationPopup) {\r\n\t\tnew NotificationPopup(button);\r\n\t  }\r\n  \r\n\t*/\r\n  \r\n\t\r\n\tconst settings$5 = {\r\n\t  templateIndex: 1,\r\n\t};\r\n  \r\n\tconst classes$D = {\r\n\t  popupNotification: 'pswp--notification pswp--not-close-btn',\r\n\t};\r\n  \r\n\tconst attributes$y = {\r\n\t  notificationPopup: 'data-notification-popup',\r\n\t};\r\n  \r\n\tconst options$1 = {\r\n\t  history: false,\r\n\t  focus: false,\r\n\t  mainClass: classes$D.popupNotification,\r\n\t  closeOnVerticalDrag: false,\r\n\t};\r\n  \r\n\tclass NotificationPopup {\r\n\t  constructor(button) {\r\n\t\tthis.button = button;\r\n\t\tthis.a11y = a11y;\r\n\t\tthis.notificationPopupHtml = this.button.getAttribute(attributes$y.notificationPopup);\r\n  \r\n\t\tif (this.notificationPopupHtml.trim() !== '') {\r\n\t\t  this.init();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tconst items = [\r\n\t\t  {\r\n\t\t\thtml: this.notificationPopupHtml,\r\n\t\t  },\r\n\t\t];\r\n  \r\n\t\tthis.a11y.state.trigger = this.button;\r\n  \r\n\t\tnew LoadPhotoswipe(items, options$1, settings$5.templateIndex);\r\n\t  }\r\n\t}\r\n  \r\n\tconst selectors$N = {\r\n\t  product: '[data-product]',\r\n\t  productForm: '[data-product-form]',\r\n\t  addToCart: '[data-add-to-cart]',\r\n\t  addToCartText: '[data-add-to-cart-text]',\r\n\t  buyItNow: '[data-buy-it-now]',\r\n\t  comparePrice: '[data-compare-price]',\r\n\t  formWrapper: '[data-form-wrapper]',\r\n\t  header: '[data-site-header]',\r\n\t  originalSelectorId: '[data-product-select]',\r\n\t  preOrderTag: '_preorder',\r\n\t  priceWrapper: '[data-price-wrapper]',\r\n\t  priceOffWrap: '[data-price-off]',\r\n\t  priceOffType: '[data-price-off-type]',\r\n\t  priceOffAmount: '[data-price-off-amount]',\r\n\t  productSlide: '[data-product-slide]',\r\n\t  productImage: '[data-product-image]',\r\n\t  productMediaSlider: '[data-product-single-media-slider]',\r\n\t  productJson: '[data-product-json]',\r\n\t  productPrice: '[data-product-price]',\r\n\t  unitPrice: '[data-product-unit-price]',\r\n\t  unitBase: '[data-product-base]',\r\n\t  unitWrapper: '[data-product-unit]',\r\n\t  subPrices: '[data-subscription-watch-price]',\r\n\t  subSelectors: '[data-subscription-selectors]',\r\n\t  subsToggle: '[data-toggles-group]',\r\n\t  subsChild: 'data-group-toggle',\r\n\t  subDescription: '[data-plan-description]',\r\n\t  remainingCount: '[data-remaining-count]',\r\n\t  remainingWrapper: '[data-remaining-wrapper]',\r\n\t  remainingJSON: '[data-product-remaining-json]',\r\n\t  idInput: '[name=\"id\"]',\r\n\t  storeAvailabilityContainer: '[data-store-availability-container]',\r\n\t  upsellButton: '[data-upsell-btn]',\r\n\t  sectionNode: '.shopify-section',\r\n\t  quickViewItem: '[data-quick-view-item]',\r\n\t  notificationButtonText: '[data-notification-button-text]',\r\n\t};\r\n  \r\n\tconst classes$C = {\r\n\t  hidden: 'hidden',\r\n\t  variantSoldOut: 'variant--soldout',\r\n\t  variantUnavailable: 'variant--unavailabe',\r\n\t  productPriceSale: 'product__price--sale',\r\n\t  priceWrapperHidden: 'product__price--hidden',\r\n\t  remainingLow: 'count-is-low',\r\n\t  remainingIn: 'count-is-in',\r\n\t  remainingOut: 'count-is-out',\r\n\t  remainingUnavailable: 'count-is-unavailable',\r\n\t};\r\n  \r\n\tconst attributes$x = {\r\n\t  productImageId: 'data-image-id',\r\n\t  tallLayout: 'data-tall-layout',\r\n\t  dataEnableHistoryState: 'data-enable-history-state',\r\n\t  notificationPopup: 'data-notification-popup',\r\n\t};\r\n  \r\n  \r\n\tclass ProductAddForm {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t\tthis.product = this.container.querySelector(selectors$N.product);\r\n\t\tthis.productForm = this.container.querySelector(selectors$N.productForm);\r\n\t\tthis.tallLayout = this.container.getAttribute(attributes$x.tallLayout) === 'true';\r\n  \r\n\t\t// Stop parsing if we don't have the product\r\n\t\tif (!this.product || !this.productForm) {\r\n\t\t  const counter = new QuantityCounter(this.container);\r\n\t\t  counter.init();\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tthis.storeAvailabilityContainer = this.container.querySelector(selectors$N.storeAvailabilityContainer);\r\n\t\tthis.enableHistoryState = this.container.getAttribute(attributes$x.dataEnableHistoryState) === 'true';\r\n\t\tthis.hasUnitPricing = this.container.querySelector(selectors$N.unitWrapper);\r\n\t\tthis.subSelectors = this.container.querySelector(selectors$N.subSelectors);\r\n\t\tthis.subPrices = this.container.querySelector(selectors$N.subPrices);\r\n  \r\n\t\tthis.priceOffWrap = this.container.querySelector(selectors$N.priceOffWrap);\r\n\t\tthis.priceOffAmount = this.container.querySelector(selectors$N.priceOffAmount);\r\n\t\tthis.priceOffType = this.container.querySelector(selectors$N.priceOffType);\r\n\t\tthis.planDecription = this.container.querySelector(selectors$N.subDescription);\r\n\t\tthis.latestVariantId = '';\r\n\t\tthis.latestVariantTitle = '';\r\n\t\tthis.sellout = null;\r\n  \r\n\t\tthis.sessionStorage = window.sessionStorage;\r\n  \r\n\t\tthis.remainingWrapper = this.container.querySelector(selectors$N.remainingWrapper);\r\n  \r\n\t\tif (this.remainingWrapper) {\r\n\t\t  this.remainingMaxInt = parseInt(this.remainingWrapper.dataset.remainingMax, 10);\r\n\t\t  this.remainingCount = this.container.querySelector(selectors$N.remainingCount);\r\n\t\t  this.remainingJSONWrapper = this.container.querySelector(selectors$N.remainingJSON);\r\n\t\t  this.remainingJSON = null;\r\n  \r\n\t\t  if (this.remainingJSONWrapper && this.remainingJSONWrapper.innerHTML !== '') {\r\n\t\t\tthis.remainingJSON = JSON.parse(this.remainingJSONWrapper.innerHTML);\r\n\t\t  }\r\n\t\t}\r\n  \r\n\t\tif (this.storeAvailabilityContainer) {\r\n\t\t  this.storeAvailability = new StoreAvailability(this.storeAvailabilityContainer);\r\n\t\t}\r\n  \r\n\t\tconst counter = new QuantityCounter(this.container);\r\n\t\tcounter.init();\r\n  \r\n\t\tthis.init();\r\n\t  }\r\n  \r\n  \r\n\t  init() {\r\n\t\tlet productJSON = null;\r\n\t\tconst productElemJSON = this.container.querySelector(selectors$N.productJson);\r\n\t\tthis._ql_products_js = this.container.querySelector('#ql_product_js') && this.container.querySelector('#ql_product_js').innerHTML && JSON.parse(this.container.querySelector('#ql_product_js').innerHTML) ;\r\n  \r\n\t\t//\u9ED8\u8BA4\u5C3A\u7801 \r\n\t\tvar url = window.location.href;\r\n\t\tif( typeof size_name_index != 'undefined' && url.indexOf('variant') == -1 && size_name_index != -1){\r\n\t\t  var optionBox = this.container.querySelectorAll('.product__selectors>*');\r\n\t\t  for(let i = 0; i < size_name_index.length; i++){\r\n\t\t\tlet index = size_name_index[i];\r\n\t\t\tvar oldchecked = optionBox[index].querySelector('.select-popout__item--current');\r\n\t\t\tvar newchecked = optionBox[index].querySelector(`.select-popout__item [data-value=\"${new_options[index]}\"]`);\r\n\t\t\tif(oldchecked && newchecked){\r\n\t\t\t  \r\n\t\t\t  oldchecked.classList.remove('select-popout__item--current');\r\n\t\t\t  oldchecked.querySelector('a').setAttribute('aria-current',false);\r\n\t\t\t  newchecked.setAttribute('aria-current',true);\r\n\t\t\t  newchecked.parentNode.classList.add('select-popout__item--current');\r\n\t\t\t  optionBox[index].querySelector('.select-popout__value').innerText = new_options[index];\r\n\t\t\t  \r\n\t\t\t  optionBox[index].querySelector(`[data-single-option-selector][data-index=\"option${Number(index) + 1}\"]`).value = new_options[index];\r\n\t\t\t}\r\n\t\t  }\r\n\t\t}\r\n  \r\n\t\t// \u9009\u4E2D\u7684\u989C\u8272 OOTD\r\n\t\tthis.selectedColor = this.container.querySelector('#MainContent input[name=\"options[Color]\"]:checked');\r\n\t\tif(this.selectedColor){\r\n\t\t  let handle = this.selectedColor.getAttribute('data-handle');\r\n\t\t  let color = this.selectedColor.getAttribute('value');\r\n\t\t  setTimeout(()=> {\r\n\t\t\tthis.updateOOTD(color, handle)\r\n\t\t  }, 3000);\r\n\t\t}\r\n  \r\n\t\tif (productElemJSON) {\r\n\t\t  productJSON = productElemJSON.innerHTML;\r\n\t\t}\r\n\t\tif (productJSON) {\r\n\t\t  this.productJSON = JSON.parse(productJSON);\r\n\t\t  this.linkForm();\r\n\t\t  this.sellout = new SelloutVariants(this.container, this.productJSON);\r\n\t\t} else {\r\n\t\t  console.error('Missing product JSON');\r\n\t\t}\r\n\r\n\t\tthis.oldHandle = this.productJSON.handle;\r\n\t  }\r\n  \r\n\t  destroy() {\r\n\t\tthis.productForm.destroy();\r\n\t  }\r\n  \r\n\t  linkForm() {\r\n\t\tthis.productForm = new ProductForm(this.productForm, this.productJSON, {\r\n\t\t  onOptionChange: this.onOptionChange.bind(this),\r\n\t\t  onPlanChange: this.onPlanChange.bind(this),\r\n\t\t});\r\n\t\tthis.pushState(this.productForm.getFormState());\r\n\t\tthis.subsToggleListeners();\r\n\t  }\r\n  \r\n\t  onOptionChange(evt) {\r\n\t\tthis.pushState(evt.dataset);\r\n\t\tthis.updateProductImage(evt);\r\n  \r\n\t\tsetTimeout(() => {\r\n\t\t  let handle = evt.target?.getAttribute('data-handle');\r\n\t\t  this.updateOOTD(evt.dataset.options[0].value, handle);\r\n\t\t},500)\r\n\t  }\r\n  \r\n\t  onPlanChange(evt) {\r\n\t\tif (this.subPrices) {\r\n\t\t  this.pushState(evt.dataset);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  // OOTD \u7A7F\u642D\u63A8\u8350\r\n\t  updateOOTD(option, handle){\r\n\t\tif(typeof(_ql_ootd_arr) != 'undefined' && _ql_ootd_arr && _ql_ootd_arr.length > 0){\r\n\t\t  var has_ootd = false;\r\n\t\t  var $ootd_btn = '<button class=\"shop_this_look\">Shop this look</button>'\r\n\t\t  for(let i = 0; i < _ql_ootd_arr.length; i++){\r\n\t\t\tvar obj = _ql_ootd_arr[i];\r\n\t\t\tvar this_handle = obj.handle,\r\n\t\t\tthis_color = obj.color,\r\n\t\t\tthis_pos = obj.img_pos,\r\n\t\t\tthis_relat_handle = obj.ootd_handle,\r\n\t\t\tthis_relat_color = obj.ootd_color;\r\n\t\t\tif(option != this_color || handle != this_handle) continue;\r\n\t\t\t$(`#ootd_show_${i}`).css(\"opacity\", 0).css(\"visibility\", \"hidden\").css(\"display\", \"none\");\r\n  \r\n\t\t\t// \u5C55\u793A\u5927\u56FE\r\n\t\t\tvar $target_pic = $('#MainContent [data-product] .product-single__media-slider .flickity-slider .product-single__media-slide').eq(this_pos - 1)\r\n  \r\n\t\t\t\r\n\t\t\t/** ootd\u5C55\u793A\u56FE */\r\n\t\t\tif( $(`#init_ootd_show>div:eq(${i})>a`).length > 0){\r\n\t\t\t  has_ootd = true;\r\n\t\t\t  if($target_pic.find(`#ootd_show_${i}`).length == 0){\r\n\t\t\t\tvar ql_ootd_show = `<div id=\"ootd_show_${i}\" class=\"ql_ootd_show theme-modal theme-modal--small\" style=\"display: none;\">\r\n\t\t\t\t\t\t\t\t\t<a class=\"modal-close\" data-modal-close href=\"#\">\u00D7</a>\r\n\t\t\t\t\t\t\t\t\t<h3 style=\"text-align: center;color:#fff\">Shop this look</h3>\r\n\t\t\t\t\t\t\t\t  </div>`\r\n\t\t\t\t$(ql_ootd_show).appendTo($target_pic);\r\n\t\t\t\t$(`#init_ootd_show>div:eq(${i})`).clone().appendTo($(`#ootd_show_${i}`));\r\n\t\t\t  }\r\n\t\t\r\n  \r\n\t\t\t  /** ootd\u6309\u94AE */\r\n\t\t\t  if(!$target_pic.find('.shop_this_look').length){\r\n\t\t\t\t$($ootd_btn).appendTo($target_pic);\r\n\t\t\t  }\r\n\t  \r\n\t\t\t  var $this_ootd_btn = $target_pic.find(\".shop_this_look\");\r\n\t\t\t  $this_ootd_btn.css(\"visibility\", \"visible\");\r\n\t\t\t  $this_ootd_btn.attr(\"data-pos\", i);\r\n\t  \r\n\t\t\t  // ootd\r\n\t\t\t  $this_ootd_btn.off('click').on('click',function(event){\r\n\t\t\t\tevent.stopPropagation()\r\n\t\t\t\tevent.preventDefault()\r\n\t\t\t\t$(`#ootd_show_${i}`).css(\"opacity\", 1).css(\"visibility\", \"visible\").css(\"display\", \"flex\");\r\n\t\t\t\t$(`#ootd_show_${i}>div`).attr(\"aria-hidden\", false);\r\n\t\t\t\t$this_ootd_btn.css(\"visibility\", \"hidden\");\r\n\t\t\t  });\r\n\t\t\t  // \u5173\u95ED\u6309\u94AE\r\n\t\t\t  $(`#ootd_show_${i}>a.modal-close`).off('click').on('click',function(event){\r\n\t\t\t\tevent.preventDefault();\r\n\t\t\t\tevent.stopPropagation();\r\n\t\t\t\t$this_ootd_btn.css(\"visibility\", \"visible\");\r\n\t\t\t\t$(`#ootd_show_${i}`).css(\"opacity\", 0).css(\"visibility\", \"hidden\").css(\"display\", \"none\");\r\n\t\t\t  })\r\n  \r\n\t\t\t   /** \u5927\u56FE */\r\n\t\t\t\t$('#ql-recommendation-box').css(\"display\", \"flex\");\r\n\t\t\t\tvar $recommendation_link = $('#ql-recommendation-box #recommendation-link');\r\n\t\t\t\t// var $recommendation_show = $('#ql-recommendation-box #recommendation-show');\r\n\t\t\t\tvar $ql_ootd_data = $(`#init_ootd_show>div:eq(${i})`).children().clone()\r\n\t\t\t\t// \u5220\u9664\u4E4B\u524D\u7684\u6240\u6709\u5B50\u8282\u70B9\r\n\t\t\t\t$recommendation_link.empty();\r\n\t\t\t\t// $recommendation_show.empty();\r\n\t\t\t\t$ql_ootd_data.appendTo($recommendation_link);\r\n\t\t\t\t// $target_pic.find('img').clone().appendTo($recommendation_show)\r\n\t\r\n\t\t\t}\r\n\t\t\t\r\n\t\t  }\r\n\t\r\n\t\t  if(!has_ootd){\r\n\t\t\t$('.shop_this_look').css(\"visibility\", \"hidden\");\r\n\t\t\t// $this_ootd_btn.remove();\r\n\t\t\t$(`.ql_ootd_show`).css(\"opacity\", 0).css(\"visibility\", \"hidden\").css(\"display\", \"none\");\r\n\t\t\t$('#ql-recommendation-box').css(\"display\", \"none\");\r\n\t\t  }\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * TODO:\r\n\t   * \u72B6\u6001\u53D8\u5316\u65F6\uFF0C\u9700\u8981\u4E00\u5E76\u6539\u53D8\u7684\u6570\u636E\r\n\t   * ?? \u9700\u8981\u6DFB\u52A0\u6807\u9898\u548C\u4EA7\u54C1\u8BE6\u60C5\u4ECB\u7ECD\u7684\u66F4\u65B0\r\n\t   * @param {*} formState \r\n\t   */\r\n\t  pushState(formState) {\r\n\t\tthis.productState = this.setProductState(formState);\r\n\t\tthis.updateAddToCartState(formState);\r\n\t\tthis.updateProductPrices(formState);\r\n\t\tthis.updateSaleText(formState);\r\n\t\tthis.updateSubscriptionText(formState);\r\n\t\tthis.fireHookEvent(formState);  // \u94A9\u5B50\u51FD\u6570\r\n\t\tthis.updateRemaining(formState);\r\n\t\tthis.sellout?.update(formState);\r\n  \r\n\t\t// \u65B0\u589E\u8BE6\u60C5\u9875\u6807\u9898\u548C\u4ECB\u7ECD\u7684\u66F4\u65B0\r\n\t\tthis.updateProductTitle(formState);\r\n\t\tthis.updateDescription(formState);\r\n  \r\n\t\tif (this.enableHistoryState) {\r\n\t\t  this.updateHistoryState(formState);\r\n\t\t}\r\n  \r\n\t\tif (this.storeAvailability) {\r\n\t\t  if (formState.variant) {\r\n\t\t\tthis.storeAvailability.updateContent(formState.variant.id, this.productForm.product.title);\r\n\t\t  } else {\r\n\t\t\tthis.storeAvailability.clearContent();\r\n\t\t  }\r\n\t\t}\r\n\t  }\r\n  \r\n\t  // \u66F4\u65B0\u4EA7\u54C1\u6807\u9898\r\n\t  updateProductTitle(formState){\r\n\t\tconst variant = formState.variant;\r\n\t\tif(variant){\r\n\t\t  const tempArr = variant.name.split('- ' + variant.title);\r\n\t\t  const title = tempArr[0].trim();\r\n\t\t  // console.log(\"title = \" + title)\r\n\t\t  var productTitleEl = this.container.querySelector('.form__wrapper .product__block .product__title');\r\n\t\t  var quickViewPTEl = this.container.querySelector('.popup-quick-view__body__inner .popup-quick-view__content .popup-quick-view__title>a');\r\n\t\t  if(productTitleEl){\r\n\t\t\tproductTitleEl.innerText = title;\r\n\t\t  }\r\n\t\t  if(quickViewPTEl){\r\n\t\t\tquickViewPTEl.innerText = title;\r\n\t\t  }\r\n\t\t}\r\n\t  }\r\n  \r\n\t  // \u66F4\u65B0\u4EA7\u54C1\u7B80\u4ECB\r\n\t  updateDescription(formState){\r\n\t\tconst color = formState.variant.option1;\r\n\t\tconst element = this.container.querySelector('[name=\"options[Color]\"][value=\"' + color + '\"]:checked' );\r\n\t\t\r\n\t\tif(element && this._ql_products_js != undefined){\r\n\t\t  const handle = element.getAttribute(\"data-handle\");\r\n\t\t  if(this.oldHandle !== handle){\r\n\t\t\tthis.oldHandle = handle;\r\n\t\t\tif(this._ql_products_js[handle] && this._ql_products_js[handle] != undefined){\r\n\t\t\t\tconst descriptionEl = this.container.querySelector('.form__wrapper[data-product-info] .product__description');\r\n\t\t\t\tif(descriptionEl){\r\n\t\t\t\tdescriptionEl.innerHTML = this._ql_products_js[handle].description;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t  }\r\n\t\t  \r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * \u66F4\u65B0\u52A0\u8D2D\u6309\u94AE\u7684\u72B6\u6001\r\n\t   */\r\n\t  updateAddToCartState(formState) {\r\n\t\tconst variant = formState.variant;\r\n\t\tconst priceWrapper = this.container.querySelectorAll(selectors$N.priceWrapper);\r\n\t\tconst addToCart = this.container.querySelectorAll(selectors$N.addToCart);\r\n\t\tconst addToCartText = this.container.querySelectorAll(selectors$N.addToCartText);\r\n\t\tconst formWrapper = this.container.querySelectorAll(selectors$N.formWrapper);\r\n\t\tconst buyItNow = this.container.querySelector(selectors$N.buyItNow);\r\n\t\tlet addText = theme.strings.add_to_cart;\r\n  \r\n\t\tif (this.productJSON.tags.includes(selectors$N.preOrderTag)) {\r\n\t\t  addText = theme.strings.preorder;\r\n\t\t}\r\n  \r\n\t\t// Price wrapper elements\r\n\t\tpriceWrapper?.forEach((element) => {\r\n\t\t  // Hide price if there is no variant\r\n\t\t  element.classList.toggle(classes$C.priceWrapperHidden, !variant);\r\n\t\t});\r\n  \r\n\t\t// ATC Button elements\r\n\t\taddToCart?.forEach((element) => {\r\n\t\t  // Skip the upsell \"add to cart\" button\r\n\t\t  if (element.matches(selectors$N.upsellButton)) return;\r\n  \r\n\t\t  element.disabled = true;\r\n\t\t  buyItNow?.classList.add(classes$C.hidden);\r\n  \r\n\t\t  // No variant\r\n\t\t  if (!variant) return;\r\n  \r\n\t\t  // Available variant\r\n\t\t  element.disabled = false;\r\n\t\t  if (variant.available) {\r\n\t\t\tbuyItNow?.classList.remove(classes$C.hidden);\r\n\t\t  }\r\n  \r\n\t\t  // Notification popup\r\n\t\t  if (!element.hasAttribute(attributes$x.notificationPopup)) return;\r\n  \r\n\t\t  const notificationFormId = element.id.replace('AddToCart', 'NotificationForm');\r\n\t\t  const formID = this.sessionStorage.getItem('notification_form_id');\r\n\t\t  let notificationFormSubmitted = false;\r\n\t\t  let variantId = variant.id;\r\n\t\t  let variantTitle = variant.title;\r\n  \r\n\t\t  if (formID) {\r\n\t\t\tconst sessionId = formID.substring(0, formID.lastIndexOf('--'));\r\n\t\t\tconst sessionVariantId = formID.split('--').slice(-1)[0];\r\n\t\t\tnotificationFormSubmitted = notificationFormId === sessionId;\r\n  \r\n\t\t\tif (notificationFormSubmitted) {\r\n\t\t\t  this.latestVariantId = variantId;\r\n\t\t\t  this.latestVariantTitle = variantTitle;\r\n\t\t\t  variantId = Number(sessionVariantId);\r\n  \r\n\t\t\t  let ql_all_variants = [];\r\n\t\t\t  let quickEl = document.querySelector('#shopify-section-api-quickview');\r\n\t\t\t  if(quickEl){\r\n\t\t\t\tlet data = document.querySelector('script#qukciViewData').innerHTML;\r\n\t\t\t\tql_all_variants = JSON.parse(data);\r\n\t\t\t  }else if(typeof(ql_arr_hb_all_variants) !== \"undefined\")\r\n\t\t\t  {\r\n\t\t\t\tql_all_variants = ql_arr_hb_all_variants;\r\n\t\t\t  }\r\n  \r\n\t\t\t  ql_all_variants.forEach((variant) => {\r\n\t\t\t\tif (variant.id === variantId) {\r\n\t\t\t\t  variantTitle = variant.title;\r\n\t\t\t\t}\r\n\t\t\t  });\r\n\t\t\t}\r\n\t\t  }\r\n  \r\n\t\t  let notificationPopupHtml = element.getAttribute(attributes$x.notificationPopup);\r\n\t\t  const notificationButtonText = new DOMParser().parseFromString(notificationPopupHtml, 'text/html').querySelector(selectors$N.notificationButtonText)?.innerHTML;\r\n  \r\n\t\t  if (this.latestVariantId != '' && this.latestVariantTitle != '') {\r\n\t\t\tnotificationPopupHtml = notificationPopupHtml.replaceAll(this.latestVariantId, variantId);\r\n\t\t\tnotificationPopupHtml = notificationPopupHtml.replaceAll(this.latestVariantTitle, variantTitle);\r\n  \r\n\t\t\t// Prevent updating of the \"Notify me\" button's text if the variant title matches part of it\r\n\t\t\tconst updatedNotificationButtonText = new DOMParser().parseFromString(notificationPopupHtml, 'text/html').querySelector(selectors$N.notificationButtonText)?.innerHTML;\r\n\t\t\tnotificationPopupHtml = notificationPopupHtml.replace(updatedNotificationButtonText, notificationButtonText);\r\n\t\t  }\r\n  \r\n\t\t  element.setAttribute(attributes$x.notificationPopup, notificationPopupHtml);\r\n  \r\n\t\t  if (notificationFormSubmitted) {\r\n\t\t\tthis.scrollToForm(this.product.closest(selectors$N.sectionNode));\r\n\t\t\tnew NotificationPopup(element);\r\n\t\t  }\r\n  \r\n\t\t  this.latestVariantId = variantId;\r\n\t\t  this.latestVariantTitle = variantTitle;\r\n\t\t});\r\n  \r\n\t\t// ATC Buttons' text elements\r\n\t\taddToCartText?.forEach((element) => {\r\n\t\t  // No variant\r\n\t\t  if (!variant) {  // options\u7EC4\u5408\u4E0D\u5B58\u5728\u65F6\r\n\t\t\telement.innerHTML = theme.strings.unavailable;  \r\n\t\t\treturn;\r\n\t\t  }\r\n  \r\n\t\t  // Unavailable variant\r\n\t\t  if (!variant.available) {  // options\u5BF9\u5E94\u7684variant\u663E\u793A\u65E0\u5E93\u5B58\u65F6\r\n\t\t\telement.innerHTML = theme.strings.sold_out;\r\n  \r\n\t\t\tif (element.parentNode.hasAttribute(attributes$x.notificationPopup)) {\r\n\t\t\t  if (element.closest(selectors$N.quickViewItem)) return; // Disable 'notify me' text change for Quickview\r\n  \r\n\t\t\t  element.innerHTML = `${theme.strings.sold_out} - ${theme.strings.newsletter_product_availability}`;\r\n\t\t\t}\r\n  \r\n\t\t\treturn;\r\n\t\t  }\r\n  \r\n\t\t  // Available variant\r\n\t\t  element.innerHTML = addText;\r\n\t\t});\r\n  \r\n\t\t// Form wrapper elements\r\n\t\tformWrapper?.forEach((element) => {\r\n\t\t  // No variant\r\n\t\t  if (!variant) {\r\n\t\t\telement.classList.add(classes$C.variantUnavailable);\r\n\t\t\telement.classList.remove(classes$C.variantSoldOut);\r\n\t\t\treturn;\r\n\t\t  }\r\n  \r\n\t\t  // form input \u4E2D\u7684variant id\r\n\t\t  const formSelect = element.querySelector(selectors$N.originalSelectorId);\r\n\t\t  if (formSelect) {\r\n\t\t\tformSelect.value = variant.id;\r\n\t\t  }\r\n  \r\n\t\t  // Unavailable variant\r\n\t\t  if (!variant.available) {\r\n\t\t\telement.classList.add(classes$C.variantSoldOut);\r\n\t\t\telement.classList.remove(classes$C.variantUnavailable);\r\n\t\t\treturn;\r\n\t\t  }\r\n  \r\n\t\t  // Available variant\r\n\t\t  element.classList.remove(classes$C.variantSoldOut, classes$C.variantUnavailable);\r\n\t\t});\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * TODO:\r\n\t   *  \u66F4\u65B0\u4EA7\u54C1url\r\n\t   * @param {*} formState \r\n\t   */\r\n\t  updateHistoryState(formState) {\r\n\t\tconst variant = formState.variant;\r\n\t\tconst plan = formState.plan;\r\n\t\tconst colorName = formState.options ? formState.options[0].name : \"Color\";\r\n\t\tlet productId = formState.options ? formState.options[0].id : \"\";\r\n\t\tconst location = window.location.href;\r\n\t\tif (variant && location.includes('/product')) {\r\n\t\t  // console.log(document.querySelector('.product__selectors [name=\"options['+colorName+']\"][value=\"'+variant.option1+'\"]'))\r\n\t\t  const handle = document.querySelector('.product__selectors [name=\"options['+colorName+']\"][data-id=\"'+productId+'\"][value=\"'+variant.option1+'\"]')?.getAttribute('data-handle');\r\n\t\t  const url = new window.URL(location);\r\n\t\t  const params = url.searchParams;\r\n\t\t  params.set('variant', variant.id);\r\n\t\t  if (plan && plan.detail && plan.detail.id && this.productState.hasPlan) {\r\n\t\t\tparams.set('selling_plan', plan.detail.id);\r\n\t\t  } else {\r\n\t\t\tparams.delete('selling_plan');\r\n\t\t  }\r\n\t\t  url.search = params.toString();\r\n\t\t  if(handle){\r\n\t\t\turl.pathname = '/products/' + handle;\r\n\t\t  }\r\n\t\t  const urlString = url.toString();\r\n\t\t  window.history.replaceState({path: urlString}, '', urlString);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  updateRemaining(formState) {\r\n\t\tconst variant = formState.variant;\r\n\t\tconst remainingClasses = [classes$C.remainingIn, classes$C.remainingOut, classes$C.remainingUnavailable, classes$C.remainingLow];\r\n  \r\n\t\tif (variant && this.remainingWrapper && this.remainingJSON) {\r\n\t\t  const remaining = this.remainingJSON[variant.id];\r\n  \r\n\t\t  if (remaining === 'out' || remaining < 1) {\r\n\t\t\tthis.remainingWrapper.classList.remove(...remainingClasses);\r\n\t\t\tthis.remainingWrapper.classList.add(classes$C.remainingOut);\r\n\t\t  }\r\n  \r\n\t\t  if (remaining === 'in' || remaining >= this.remainingMaxInt) {\r\n\t\t\tthis.remainingWrapper.classList.remove(...remainingClasses);\r\n\t\t\tthis.remainingWrapper.classList.add(classes$C.remainingIn);\r\n\t\t  }\r\n  \r\n\t\t  if (remaining === 'low' || (remaining > 0 && remaining < this.remainingMaxInt)) {\r\n\t\t\tthis.remainingWrapper.classList.remove(...remainingClasses);\r\n\t\t\tthis.remainingWrapper.classList.add(classes$C.remainingLow);\r\n  \r\n\t\t\tif (this.remainingCount) {\r\n\t\t\t  this.remainingCount.innerHTML = remaining;\r\n\t\t\t}\r\n\t\t  }\r\n\t\t} else if (!variant && this.remainingWrapper) {\r\n\t\t  this.remainingWrapper.classList.remove(...remainingClasses);\r\n\t\t  this.remainingWrapper.classList.add(classes$C.remainingUnavailable);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  getBaseUnit(variant) {\r\n\t\treturn variant.unit_price_measurement.reference_value === 1\r\n\t\t  ? variant.unit_price_measurement.reference_unit\r\n\t\t  : variant.unit_price_measurement.reference_value + variant.unit_price_measurement.reference_unit;\r\n\t  }\r\n  \r\n\t  subsToggleListeners() {\r\n\t\tconst toggles = this.container.querySelectorAll(selectors$N.subsToggle);\r\n  \r\n\t\ttoggles.forEach((toggle) => {\r\n\t\t  toggle.addEventListener(\r\n\t\t\t'change',\r\n\t\t\tfunction (e) {\r\n\t\t\t  const val = e.target.value.toString();\r\n\t\t\t  const selected = this.container.querySelector(`[${selectors$N.subsChild}=\"${val}\"]`);\r\n\t\t\t  const groups = this.container.querySelectorAll(`[${selectors$N.subsChild}]`);\r\n\t\t\t  if (selected) {\r\n\t\t\t\tselected.classList.remove(classes$C.hidden);\r\n\t\t\t\tconst first = selected.querySelector('[name=\"selling_plan\"]');\r\n\t\t\t\tfirst.checked = true;\r\n\t\t\t\tfirst.dispatchEvent(new Event('change'));\r\n\t\t\t  }\r\n\t\t\t  groups.forEach((group) => {\r\n\t\t\t\tif (group !== selected) {\r\n\t\t\t\t  group.classList.add(classes$C.hidden);\r\n\t\t\t\t  const plans = group.querySelectorAll('[name=\"selling_plan\"]');\r\n\t\t\t\t  plans.forEach((plan) => {\r\n\t\t\t\t\tplan.checked = false;\r\n\t\t\t\t\tplan.dispatchEvent(new Event('change'));\r\n\t\t\t\t  });\r\n\t\t\t\t}\r\n\t\t\t  });\r\n\t\t\t}.bind(this)\r\n\t\t  );\r\n\t\t});\r\n\t  }\r\n  \r\n\t  updateSaleText(formState) {\r\n\t\tif (this.productState.planSale) {\r\n\t\t  this.updateSaleTextSubscription(formState);\r\n\t\t} else if (this.productState.onSale) {\r\n\t\t  this.updateSaleTextStandard(formState);\r\n\t\t} else if (this.priceOffWrap) {\r\n\t\t  this.priceOffWrap.classList.add(classes$C.hidden);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  updateSaleTextStandard(formState) {\r\n\t\tif (!this.priceOffType) {\r\n\t\t  return;\r\n\t\t}\r\n\t\tthis.priceOffType.innerHTML = window.theme.strings.sale_badge_text || 'sale';\r\n\t\tconst variant = formState.variant;\r\n\t\tif (window.theme.settings.savingBadgeType && window.theme.settings.savingBadgeType === 'percentage') {\r\n\t\t  const discountFloat = (variant.compare_at_price - variant.price) / variant.compare_at_price;\r\n\t\t  const discountInt = Math.floor(discountFloat * 100);\r\n\t\t  this.priceOffAmount.innerHTML = `${discountInt}%`;\r\n\t\t} else {\r\n\t\t  const discount = variant.compare_at_price - variant.price;\r\n\t\t  this.priceOffAmount.innerHTML = themeCurrency.formatMoney(discount, theme.moneyFormat);\r\n\t\t}\r\n\t\tthis.priceOffWrap.classList.remove(classes$C.hidden);\r\n\t  }\r\n  \r\n\t  updateSaleTextSubscription(formState) {\r\n\t\tconst variant = formState.variant;\r\n\t\tconst variantFirstPlan = this.productForm.product.selling_plan_groups.find((plan) => plan.id === variant.selling_plan_allocations[0].selling_plan_group_id);\r\n\t\tconst adjustment = formState.plan ? formState.plan.detail.price_adjustments[0] : variantFirstPlan.selling_plans[0].price_adjustments[0];\r\n\t\tconst discount = adjustment.value || 0;\r\n\t\tconst saleText = adjustment.value_type === 'percentage' ? `${discount}%` : themeCurrency.formatMoney(variant.price - discount, theme.moneyFormat);\r\n  \r\n\t\tthis.priceOffType.innerHTML = window.theme.strings.subscription || 'subscripton';\r\n\t\tthis.priceOffAmount.innerHTML = saleText;\r\n\t\tthis.priceOffWrap.classList.remove(classes$C.hidden);\r\n\t  }\r\n  \r\n\t  updateSubscriptionText(formState) {\r\n\t\tif (formState.plan && this.planDecription && formState.plan.detail.description !== null) {\r\n\t\t  this.planDecription.innerHTML = formState.plan.detail.description;\r\n\t\t  this.planDecription.classList.remove(classes$C.hidden);\r\n\t\t} else if (this.planDecription) {\r\n\t\t  this.planDecription.classList.add(classes$C.hidden);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * \u4EF7\u683C\u66F4\u65B0\r\n\t   */\r\n\t  updateProductPrices(formState) {\r\n\t\tconst variant = formState.variant;\r\n\t\tconst plan = formState.plan;\r\n\t\tconst priceWrappers = this.container.querySelectorAll(selectors$N.priceWrapper);\r\n  \r\n\t\tpriceWrappers.forEach((wrap) => {\r\n\t\t  const comparePriceEl = wrap.querySelector(selectors$N.comparePrice);\r\n\t\t  const productPriceEl = wrap.querySelector(selectors$N.productPrice);\r\n  \r\n\t\t  let comparePrice = '';\r\n\t\t  let price = '';\r\n\t\t  let oPrice = '';  //\u6298\u6263\u539F\u4EF7\r\n  \r\n\t\t  if (this.productState.available) {\r\n\t\t\tcomparePrice = variant.compare_at_price;\r\n\t\t\tprice = variant.price;\r\n\t\t  }\r\n  \r\n\t\t  if (this.productState.hasPlan) {\r\n\t\t\tconst allocationPrice = plan ? plan.allocation.price : variant.selling_plan_allocations[0].per_delivery_price;\r\n\t\t\tprice = allocationPrice;\r\n\t\t  }\r\n  \r\n\t\t  if (this.productState.planSale) {\r\n\t\t\tconst allocationPrice = plan ? plan.allocation.price : variant.selling_plan_allocations[0].per_delivery_price;\r\n\t\t\tconst allocationPriceCompare = plan ? plan.allocation.compare_at_price : variant.selling_plan_allocations[0].compare_at_price;\r\n\t\t\tcomparePrice = allocationPriceCompare;\r\n\t\t\tprice = allocationPrice;\r\n\t\t  }\r\n  \r\n\t\t  // \u6298\u6263\u5012\u8BA1\u65F6\r\n\t\t  var all_discount = document.querySelectorAll('discount-countdown');\r\n\t\t  for(let i = 0; i < all_discount.length; i++){\r\n\t\t\tall_discount[i].style.display = 'none';\r\n\t\t  }\r\n\t\t  var target_discount = document.querySelector(`discount-countdown[data-d-handle=\"${formState.options[0].handle}\"]`);\r\n\t\t  if(target_discount){\r\n\t\t\t// oPrice = price;\r\n\t\t\t// let off = target_discount.getAttribute('data-d-value');\r\n\t\t\t// let dc = off.trim().replace('%','') - 0;\r\n\t\t\t// price = Math.ceil(price  - price * dc * 0.01);\r\n  \r\n\t\t\ttarget_discount.style.display = 'block';\r\n\t\t  }\r\n  \r\n\t\t//   if(target_discount && comparePriceEl){\r\n\t\t// \tcomparePriceEl.classList.remove(classes$C.hidden);\r\n\t\t// \tproductPriceEl.classList.add(classes$C.productPriceSale);\r\n\t\t// \tcomparePriceEl.innerHTML = theme.settings.currency_code_enable ? themeCurrency.formatMoney(oPrice, theme.moneyWithCurrencyFormat) : themeCurrency.formatMoney(oPrice, theme.moneyFormat);\r\n\t\t//   }\r\n\t\t//   else if (comparePriceEl) {\r\n\t\tif (comparePriceEl) {\r\n\t\t\tif (this.productState.onSale || this.productState.planSale) {\r\n\t\t\t  comparePriceEl.classList.remove(classes$C.hidden);\r\n\t\t\t  productPriceEl.classList.add(classes$C.productPriceSale);\r\n\t\t\t} else {\r\n\t\t\t  comparePriceEl.classList.add(classes$C.hidden);\r\n\t\t\t  productPriceEl.classList.remove(classes$C.productPriceSale);\r\n\t\t\t}\r\n\t\t\tcomparePriceEl.innerHTML = theme.settings.currency_code_enable ? themeCurrency.formatMoney(comparePrice, theme.moneyWithCurrencyFormat) : themeCurrency.formatMoney(comparePrice, theme.moneyFormat);\r\n\t\t  }\r\n  \r\n\t\t  if (price === 0) {\r\n\t\t\tproductPriceEl.innerHTML = window.theme.strings.free;\r\n\t\t  } else {\r\n\t\t\tproductPriceEl.innerHTML = '';\r\n\t\t\tlet html = theme.settings.currency_code_enable ? themeCurrency.formatMoney(price, theme.moneyWithCurrencyFormat) : themeCurrency.formatMoney(price, theme.moneyFormat);\r\n\t\t\thtml = html.split('.');\r\n\t\t\tproductPriceEl.setAttribute('data-int', html[0]);\r\n\t\t\tif(html.length > 1){\r\n\t\t\t  productPriceEl.setAttribute('data-point', '.' + html[1]);\r\n\t\t\t}\r\n\t\t  }\r\n\t\t});\r\n  \r\n\t\tif (this.hasUnitPricing) {\r\n\t\t  this.updateProductUnits(formState);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  updateProductUnits(formState) {\r\n\t\tconst variant = formState.variant;\r\n\t\tconst plan = formState.plan;\r\n\t\tlet unitPrice = null;\r\n  \r\n\t\tif (variant && variant.unit_price) {\r\n\t\t  unitPrice = variant.unit_price;\r\n\t\t}\r\n\t\tif (plan && plan?.allocation && plan?.allocation.unit_price) {\r\n\t\t  unitPrice = plan.allocation.unit_price;\r\n\t\t}\r\n\t\tif (!plan && variant.selling_plan_allocations) {\r\n\t\t  if (variant.selling_plan_allocations.length > 0) {\r\n\t\t\tconst allocationUnitPrice = variant.selling_plan_allocations[0].unit_price;\r\n\t\t\tunitPrice = allocationUnitPrice;\r\n\t\t  }\r\n\t\t}\r\n  \r\n\t\tif (unitPrice) {\r\n\t\t  const base = this.getBaseUnit(variant);\r\n\t\t  const formattedPrice = unitPrice === 0 ? window.theme.strings.free : themeCurrency.formatMoney(unitPrice, theme.moneyFormat);\r\n\t\t  this.container.querySelector(selectors$N.unitPrice).innerHTML = formattedPrice;\r\n\t\t  this.container.querySelector(selectors$N.unitBase).innerHTML = base;\r\n\t\t  showElement(this.container.querySelector(selectors$N.unitWrapper));\r\n\t\t} else {\r\n\t\t  hideElement(this.container.querySelector(selectors$N.unitWrapper));\r\n\t\t}\r\n\t  }\r\n  \r\n\t  fireHookEvent(formState) {\r\n\t\tconst variant = formState.variant;\r\n  \r\n\t\t// Hook for product variant change event \u94A9\u5B50\u51FD\u6570\r\n\t\tthis.container.dispatchEvent(\r\n\t\t  new CustomEvent('theme:variant:change', {\r\n\t\t\tdetail: {\r\n\t\t\t  variant: variant,\r\n\t\t\t},\r\n\t\t\tbubbles: true,\r\n\t\t  })\r\n\t\t);\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Tracks aspects of the product state that are relevant to UI updates\r\n\t   * @param {object} evt - variant change event\r\n\t   * @return {object} productState - represents state of variant + plans\r\n\t   *  productState.available - current variant and selling plan options result in valid offer\r\n\t   *  productState.soldOut - variant is sold out\r\n\t   *  productState.onSale - variant is on sale\r\n\t   *  productState.showUnitPrice - variant has unit price\r\n\t   *  productState.requiresPlan - all the product variants requires a selling plan\r\n\t   *  productState.hasPlan - there is a valid selling plan\r\n\t   *  productState.planSale - plan has a discount to show next to price\r\n\t   *  productState.planPerDelivery - plan price does not equal per_delivery_price - a prepaid subscribtion\r\n\t   */\r\n\t  setProductState(dataset) {\r\n\t\tconst variant = dataset.variant;\r\n\t\tconst plan = dataset.plan;\r\n  \r\n\t\tconst productState = {\r\n\t\t  available: true,\r\n\t\t  soldOut: false,\r\n\t\t  onSale: false,\r\n\t\t  showUnitPrice: false,\r\n\t\t  requiresPlan: false,\r\n\t\t  hasPlan: false,\r\n\t\t  planPerDelivery: false,\r\n\t\t  planSale: false,\r\n\t\t};\r\n  \r\n\t\t/**\r\n\t\t * TODO: \r\n\t\t * \u5F53\u524Doptions\u7EC4\u5408\u6CA1\u6709\u5BF9\u5E94\u7684variant\u7684\u60C5\u51B5\r\n\t\t *  */ \r\n\t\tif (!variant) {\r\n\t\t  productState.available = false;\r\n\t\t} else {\r\n\t\t  const requiresPlan = variant.requires_selling_plan || false;\r\n  \r\n\t\t  if (!variant.available) {\r\n\t\t\tproductState.soldOut = true;\r\n\t\t  }\r\n  \r\n\t\t  if (variant.compare_at_price > variant.price) {\r\n\t\t\tproductState.onSale = true;\r\n\t\t  }\r\n  \r\n\t\t  if (variant.unit_price) {\r\n\t\t\tproductState.showUnitPrice = true;\r\n\t\t  }\r\n  \r\n\t\t  if (this.product && this.product.requires_selling_plan) {\r\n\t\t\tproductState.requiresPlan = true;\r\n\t\t  }\r\n  \r\n\t\t  if (plan && this.subPrices) {\r\n\t\t\tproductState.hasPlan = true;\r\n\t\t\tif (plan.allocation.per_delivery_price !== plan.allocation.price) {\r\n\t\t\t  productState.planPerDelivery = true;\r\n\t\t\t}\r\n\t\t\tif (variant.price > plan.allocation.price) {\r\n\t\t\t  productState.planSale = true;\r\n\t\t\t}\r\n\t\t  }\r\n  \r\n\t\t  if (!plan && requiresPlan) {\r\n\t\t\tproductState.hasPlan = true;\r\n\t\t\tif (variant.selling_plan_allocations[0].per_delivery_price !== variant.selling_plan_allocations[0].price) {\r\n\t\t\t  productState.planPerDelivery = true;\r\n\t\t\t}\r\n\t\t\tif (variant.price > variant.selling_plan_allocations[0].price) {\r\n\t\t\t  productState.planSale = true;\r\n\t\t\t}\r\n\t\t  }\r\n\t\t}\r\n\t\treturn productState;\r\n\t  }\r\n  \r\n\t  updateProductImage(evt) {\r\n\t\tconst variant = evt.dataset.variant;\r\n  \r\n\t\tif (!variant || !variant?.featured_media) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\t// Update variant image, if one is set\r\n\t\tconst newImg = this.container.querySelector(`${selectors$N.productImage}[${attributes$x.productImageId}=\"${variant.featured_media.id}\"]`);\r\n\t\tconst newImageParent = newImg?.closest(selectors$N.productSlide);\r\n  \r\n\t\tif (newImageParent) {\r\n\t\t  const newImagePos = parseInt([...newImageParent.parentElement.children].indexOf(newImageParent));\r\n\t\t  const imgSlider = this.container.querySelector(selectors$N.productMediaSlider);\r\n\t\t  const flkty = Flickity.data(imgSlider);\r\n  \r\n\t\t  // Activate image slide in mobile view\r\n\t\t  if (flkty && flkty.isActive) {\r\n\t\t\tconst variantSlide = imgSlider.querySelector(`[data-id=\"${variant.featured_media.id}\"]`);\r\n  \r\n\t\t\tif (variantSlide) {\r\n\t\t\t  const slideIndex = parseInt([...variantSlide.parentNode.children].indexOf(variantSlide));\r\n\t\t\t  flkty.select(slideIndex);\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t  }\r\n  \r\n\t\t  if (this.tallLayout) {\r\n\t\t\t// We know its a tall layout, if it's sticky\r\n\t\t\t// scroll to the images\r\n\t\t\t// Scroll to/reorder image unless it's the first photo on load\r\n\t\t\tconst newImgTop = newImg.getBoundingClientRect().top;\r\n  \r\n\t\t\tif (newImagePos === 0 && newImgTop + window.scrollY > window.pageYOffset) return;\r\n  \r\n\t\t\t// Scroll to variant image\r\n\t\t\tdocument.dispatchEvent(\r\n\t\t\t  new CustomEvent('theme:tooltip:close', {\r\n\t\t\t\tbubbles: false,\r\n\t\t\t\tdetail: {\r\n\t\t\t\t  hideTransition: false,\r\n\t\t\t\t},\r\n\t\t\t  })\r\n\t\t\t);\r\n  \r\n\t\t\tscrollTo(newImgTop);\r\n\t\t  }\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Scroll to the last submitted notification form\r\n\t   */\r\n\t  scrollToForm(section) {\r\n\t\tconst headerHeight = document.querySelector(selectors$N.header)?.dataset.height;\r\n\t\tconst isVisible = visibilityHelper.isElementPartiallyVisible(section) || visibilityHelper.isElementTotallyVisible(section);\r\n  \r\n\t\tif (!isVisible) {\r\n\t\t  setTimeout(() => {\r\n\t\t\tconst rect = section.getBoundingClientRect();\r\n\t\t\tconst sectionTop = rect.top - headerHeight;\r\n  \r\n\t\t\twindow.scrollTo({\r\n\t\t\t  top: sectionTop,\r\n\t\t\t  left: 0,\r\n\t\t\t  behavior: 'smooth',\r\n\t\t\t});\r\n\t\t  }, 400);\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tconst productFormSection = {\r\n\t  onLoad() {\r\n\t\tthis.section = new ProductAddForm(this.container);\r\n\t  },\r\n\t};\r\n  \r\n\t/**\r\n\t * Image Helper Functions\r\n\t * -----------------------------------------------------------------------------\r\n\t * https://github.com/Shopify/slate.git.\r\n\t *\r\n\t */\r\n  \r\n\t/**\r\n\t * Adds a Shopify size attribute to a URL\r\n\t *\r\n\t * @param src\r\n\t * @param size\r\n\t * @returns {*}\r\n\t */\r\n\tfunction getSizedImageUrl(src, size) {\r\n\t  if (size === null) {\r\n\t\treturn src;\r\n\t  }\r\n  \r\n\t  if (typeof src === 'undefined' || src === null) {\r\n\t\tsrc = window.theme.assets.noImage;\r\n\t  }\r\n  \r\n\t  if (size === 'master') {\r\n\t\treturn removeProtocol(src);\r\n\t  }\r\n  \r\n\t  const match = src.match(/\\.(jpg|jpeg|gif|png|bmp|bitmap|tiff|tif|webp)(\\?v=\\d+)?$/i);\r\n  \r\n\t  if (match) {\r\n\t\tconst prefix = src.split(match[0]);\r\n\t\tconst suffix = match[0];\r\n  \r\n\t\treturn removeProtocol(`${prefix[0]}_${size}${suffix}`);\r\n\t  } else {\r\n\t\treturn null;\r\n\t  }\r\n\t}\r\n  \r\n\tfunction removeProtocol(path) {\r\n\t  return path.replace(/http(s)?:/, '');\r\n\t}\r\n  \r\n\tfunction fetchProduct(handle) {\r\n\t  const requestRoute = `${theme.routes.root}products/${handle}.js`;\r\n  \r\n\t  return window\r\n\t\t.fetch(requestRoute)\r\n\t\t.then((response) => {\r\n\t\t  return response.json();\r\n\t\t})\r\n\t\t.catch((e) => {\r\n\t\t  console.error(e);\r\n\t\t});\r\n\t}\r\n  \r\n\tconst defaults = {\r\n\t  color: 'ash',\r\n\t};\r\n  \r\n\tconst selectors$M = {\r\n\t  swatch: '[data-swatch]',\r\n\t  swatchColor: '[data-swatch-color]',\r\n\t  productBlock: '[data-product-block]',\r\n\t  productImage: '[data-product-image]',\r\n\t  productImageSecondary: '[data-product-image-secondary]',\r\n\t  productImageHover: '[data-product-image-hover]',\r\n\t  quickView: '[data-button-quick-view]',\r\n\t  gridImage: '[data-grid-image]',\r\n\t  link: '[data-grid-link]',\r\n\t  loadHovers: '[data-load-hovers]',\r\n\t};\r\n  \r\n\tconst classes$B = {\r\n\t  mediaVisible: 'product__media--featured-visible',\r\n\t  mediaHoverVisible: 'product__media__hover-img--visible',\r\n\t  noImage: 'swatch__link--no-image',\r\n\t  noOutline: 'no-outline',\r\n\t};\r\n  \r\n\tconst attributes$w = {\r\n\t  swatch: 'data-swatch',\r\n\t  handle: 'data-swatch-handle',\r\n\t  handles: 'data-swatch-handles',\r\n\t  label: 'data-swatch-label',\r\n\t  image: 'data-swatch-image',\r\n\t  imageId: 'data-swatch-image-id',\r\n\t  variant: 'data-swatch-variant',\r\n\t  index: 'data-swatch-index',\r\n\t  swatchVariant: 'data-swatch-variant',\r\n\t  variandId: 'data-variant-id',\r\n\t  loaded: 'data-loaded',\r\n\t  href: 'href',\r\n\t  bgSet: 'data-bgset',\r\n\t  aspectRatio: 'data-aspectratio',\r\n\t  dataFetchedImage: 'data-fetched-image',\r\n\t  dataFetchedImageIndex: 'data-fetched-image-index',\r\n\t  dataGridImageDefault: 'data-grid-image-default',\r\n\t  dataGridImageTarget: 'data-grid-image-target',\r\n\t  dataGridImageTargetDefault: 'data-grid-image-target-default',\r\n\t};\r\n  \r\n\tvar swatches = {};\r\n  \r\n\tclass ColorMatch {\r\n\t  constructor(options = {}, colors) {\r\n\t\tthis.settings = {\r\n\t\t  ...defaults,\r\n\t\t  ...options,\r\n\t\t};\r\n  \r\n\t\tthis.colors = colors;\r\n  \r\n\t\tthis.match = this.init();\r\n  \r\n\t  }\r\n  \r\n\t  getColor() {\r\n\t\treturn this.match;\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tif(this.colors && this.colors.colors){\r\n\t\t  return this.matchColors(this.colors, this.settings.color);\r\n\t\t}else{\r\n\t\t  const getColors = loadScript({json: theme.assets.swatches});\r\n\t\t  // const getColors = swatches;\r\n\t\t  return getColors\r\n\t\t\t.then((colors) => {\r\n\t\t\t  return this.matchColors(colors, this.settings.color);\r\n\t\t\t})\r\n\t\t\t.catch((e) => {\r\n\t\t\t  console.log('failed to load swatch colors script');\r\n\t\t\t  console.log(e);\r\n\t\t\t});\r\n\t\t}\r\n\t\t\r\n\t  }\r\n  \r\n\t  matchColors(colors, name) {\r\n\t\tlet bg = '#E5E5E5';\r\n\t\tlet img = null;\r\n\t\tconst path = theme.assets.base || '/';\r\n\t\tconst comparisonName = name.toLowerCase().replace(/\\s/g, '');\r\n\t\tconst array = colors.colors;\r\n  \r\n\t\tif (array) {\r\n\t\t  let indexArray = null;\r\n  \r\n\t\t  const hexColorArr = array.filter((colorObj, index) => {\r\n\t\t\tconst neatName = Object.keys(colorObj).toString().toLowerCase().replace(/\\s/g, '');\r\n  \r\n\t\t\tif (neatName === comparisonName) {\r\n\t\t\t  indexArray = index;\r\n  \r\n\t\t\t  return colorObj;\r\n\t\t\t}\r\n\t\t  });\r\n  \r\n\t\t  if (hexColorArr.length && indexArray !== null) {\r\n\t\t\tconst value = Object.values(array[indexArray])[0];\r\n\t\t\tbg = value;\r\n  \r\n\t\t\tif (value.includes('.jpg') || value.includes('.jpeg') || value.includes('.png') || value.includes('.svg')) {\r\n\t\t\t  img = `${path}${value}`;\r\n\t\t\t  bg = '#888888';\r\n\t\t\t}\r\n\t\t  }\r\n\t\t}\r\n  \r\n\t\treturn {\r\n\t\t  color: this.settings.color,\r\n\t\t  path: img,\r\n\t\t  hex: bg,\r\n\t\t};\r\n\t  }\r\n\t}\r\n  \r\n\tclass Swatch {\r\n\t  constructor(element, colors) {\r\n\t\tthis.element = element;\r\n\t\tthis.swatchLink = this.element.nextElementSibling;\r\n\t\tthis.colorString = element.getAttribute(attributes$w.swatch);\r\n\t\tthis.image = this.element.getAttribute(attributes$w.image);\r\n\t\tthis.imageId = this.element.getAttribute(attributes$w.imageId);\r\n\t\tthis.variant = this.element.getAttribute(attributes$w.variant);\r\n\t\tthis.handle = this.element.getAttribute(attributes$w.handle);\r\n\t\tthis.outer = this.element.closest(selectors$M.productBlock);\r\n\t\tthis.gridImage = null;\r\n\t\tthis.imageDefault = null;\r\n\t\tthis.hoverImages = [];\r\n\t\tthis.loadHovers = null;\r\n  \r\n\t\tconst matcher = new ColorMatch({color: this.colorString}, colors);\r\n\t\tthis.colorMatch = matcher.getColor();\r\n\t\tthis.init();\r\n\t\t// matcher.getColor().then((result) => {\r\n\t\t//   this.colorMatch = result;\r\n\t\t//   this.init();\r\n\t\t// });\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tthis.setStyles();\r\n  \r\n\t\tif (this.variant && this.outer) {\r\n\t\t  this.handleHovers();\r\n\t\t  this.handleClicks();\r\n\t\t}\r\n  \r\n\t\tif (!this.image && this.swatchLink) {\r\n\t\t  this.swatchLink.classList.add(classes$B.noImage);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  setStyles() {\r\n\t\tif (this.colorMatch && this.colorMatch.hex) {\r\n\t\t  this.element.style.setProperty('--swatch', `${this.colorMatch.hex}`);\r\n\t\t}\r\n  \r\n\t\tif (this.colorMatch && this.colorMatch.path) {\r\n\t\t  this.element.style.setProperty('background-image', `url(${this.colorMatch.path})`);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  handleHovers() {\r\n\t\t// Load images on PGI swatch hover\r\n\t\tthis.swatchLink.addEventListener('mouseenter', () => {\r\n\t\t  this.imageReplace = null;\r\n  \r\n\t\t  if (this.imageId) {\r\n\t\t\tconst target = this.outer.querySelector(`[${attributes$w.dataGridImageTarget}=\"${this.imageId}\"]`);\r\n\t\t\tif (!target) {\r\n\t\t\t  this.gridImage = this.outer.querySelector(selectors$M.gridImage);\r\n  \r\n\t\t\t  if (this.image && this.gridImage) {\r\n\t\t\t\t// Container width rounded to the nearest 180 pixels\r\n\t\t\t\t// Increses likelihood that the image will be cached\r\n\t\t\t\tconst ratio = window.devicePixelRatio || 1;\r\n\t\t\t\tconst pixels = this.gridImage.offsetWidth * ratio;\r\n\t\t\t\tconst widthRounded = Math.ceil(pixels / 180) * 180;\r\n\t\t\t\tconst defaultImageId = this.gridImage.hasAttribute(attributes$w.dataGridImageTargetDefault) ? this.gridImage.getAttribute(attributes$w.dataGridImageTargetDefault) : '';\r\n\t\t\t\tif (defaultImageId === this.imageId && this.gridImage.hasAttribute(attributes$w.dataGridImageDefault)) {\r\n\t\t\t\t  // Get default loaded image\r\n\t\t\t\t  this.imageReplace = this.gridImage.getAttribute(attributes$w.dataGridImageDefault);\r\n\t\t\t\t  return;\r\n\t\t\t\t}\r\n  \r\n\t\t\t\tif (this.element.hasAttribute(attributes$w.dataFetchedImage)) {\r\n\t\t\t\t  // Get already loaded image\r\n\t\t\t\t  this.imageReplace = this.element.getAttribute(attributes$w.dataFetchedImage);\r\n\t\t\t\t} else {\r\n\t\t\t\t  // Fetch new image\r\n\t\t\t\t  const sizedImage = getSizedImageUrl(this.image, `${widthRounded}x`);\r\n  \r\n\t\t\t\t  window\r\n\t\t\t\t\t.fetch(sizedImage)\r\n\t\t\t\t\t.then((response) => {\r\n\t\t\t\t\t  return response.blob();\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.then((blob) => {\r\n\t\t\t\t\t  const objectURL = URL.createObjectURL(blob);\r\n\t\t\t\t\t  this.imageReplace = `url(\"${objectURL}\")`;\r\n\t\t\t\t\t  this.element.setAttribute(attributes$w.dataFetchedImage, this.imageReplace);\r\n  \r\n\t\t\t\t\t  if (\r\n\t\t\t\t\t\tthis.element.hasAttribute(attributes$w.index) &&\r\n\t\t\t\t\t\tthis.outer.hasAttribute(attributes$w.dataFetchedImageIndex) &&\r\n\t\t\t\t\t\tparseInt(this.element.getAttribute(attributes$w.index)) === parseInt(this.outer.getAttribute(attributes$w.dataFetchedImageIndex))\r\n\t\t\t\t\t  ) {\r\n\t\t\t\t\t\tthis.replaceImages();\r\n  \r\n\t\t\t\t\t\tthis.outer.removeAttribute(attributes$w.dataFetchedImageIndex);\r\n\t\t\t\t\t  }\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch((error) => {\r\n\t\t\t\t\t  console.log(`Error: ${error}`);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t  }\r\n\t\t\t}\r\n\t\t  }\r\n  \r\n\t\t  this.loadHovers = this.outer.querySelector(selectors$M.loadHovers);\r\n  \r\n\t\t  if (this.loadHovers && !this.loadHovers?.hasAttribute(attributes$w.loaded)) {\r\n\t\t\tconst content = document.createElement('div');\r\n\t\t\tcontent.appendChild(this.loadHovers.querySelector('template').content.firstElementChild.cloneNode(true));\r\n\t\t\tthis.loadHovers.appendChild(content);\r\n\t\t\tthis.loadHovers.setAttribute(attributes$w.loaded, true);\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  handleClicks() {\r\n\t\t// Change PGI featured image on swatch click\r\n\t\tthis.swatchLink.addEventListener('click', (event) => {\r\n\t\t  const isFocusEnabled = !document.body.classList.contains(classes$B.noOutline);\r\n  \r\n\t\t  if (!isFocusEnabled) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tthis.updateImagesAndLinksOnEvent();\r\n\t\t  }\r\n\t\t});\r\n  \r\n\t\tthis.swatchLink.addEventListener('keyup', (event) => {\r\n\t\t  const isFocusEnabled = !document.body.classList.contains(classes$B.noOutline);\r\n  \r\n\t\t  if (event.code !== theme.keyboardKeys.ENTER && event.code !== theme.keyboardKeys.NUMPADENTER) {\r\n\t\t\treturn;\r\n\t\t  }\r\n  \r\n\t\t  if (!isFocusEnabled) {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tthis.swatchLink.dispatchEvent(new Event('mouseenter', {bubbles: true}));\r\n\t\t\tthis.updateImagesAndLinksOnEvent();\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  updateImagesAndLinksOnEvent() {\r\n\t\tthis.updateLinks();\r\n\t\tthis.replaceImages();\r\n\t  }\r\n  \r\n\t  updateLinks() {\r\n\t\tthis.linkElements = this.outer.querySelectorAll(selectors$M.link);\r\n\t\tthis.quickView = this.outer.querySelector(selectors$M.quickView);\r\n  \r\n\t\t// Update links\r\n\t\tif (this.linkElements.length) {\r\n\t\t  this.linkElements.forEach((element) => {\r\n\t\t\tconst destination = getUrlWithVariant(element.getAttribute('href'), this.handle, this.variant);\r\n\t\t\telement.setAttribute('href', destination);\r\n\t\t  });\r\n\t\t}\r\n  \r\n\t\t// Change quickview variant with swatch one\r\n\t\tif (this.quickView && theme.settings.quickBuy === 'quick_buy') {\r\n\t\t  this.quickView.setAttribute(attributes$w.variandId, this.variant);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  // \u5207\u6362\u5A92\u4F53\u56FE\r\n\t  replaceImages() {\r\n\t\tthis.imageSecondary = this.outer.querySelector(selectors$M.productImageSecondary);\r\n\t\tthis.outer.removeAttribute(attributes$w.dataFetchedImageIndex);\r\n  \r\n\t\tif (!this.imageReplace && this.element.hasAttribute(attributes$w.index)) {\r\n\t\t  this.outer.setAttribute(attributes$w.dataFetchedImageIndex, parseInt(this.element.getAttribute(attributes$w.index)));\r\n\t\t}\r\n  \r\n\t\t// Add new loaded image and sync with the secondary image for smooth animation\r\n\t\tif (this.imageReplace && this.gridImage && this.imageId) {\r\n\t\t  this.gridImage.setAttribute(attributes$w.dataGridImageTarget, this.imageId);\r\n  \r\n\t\t  if (!this.gridImage.hasAttribute(attributes$w.dataGridImageDefault)) {\r\n\t\t\tthis.gridImage.setAttribute(attributes$w.dataGridImageDefault, window.getComputedStyle(this.gridImage).backgroundImage);\r\n\t\t  }\r\n  \r\n\t\t  const onAnimationEnd = () => {\r\n\t\t\trequestAnimationFrame(() => {\r\n\t\t\t  this.gridImage.style.setProperty('background-image', this.imageReplace);\r\n  \r\n\t\t\t  requestAnimationFrame(() => {\r\n\t\t\t\tthis.imageSecondary.classList.remove(classes$B.mediaVisible);\r\n\t\t\t  });\r\n\t\t\t});\r\n  \r\n\t\t\tthis.imageSecondary.removeEventListener('animationend', onAnimationEnd);\r\n\t\t  };\r\n  \r\n\t\t  requestAnimationFrame(() => {\r\n\t\t\tthis.imageSecondary.classList.add(classes$B.mediaVisible);\r\n\t\t\tthis.imageSecondary.style.setProperty('background-image', this.imageReplace);\r\n\t\t  });\r\n  \r\n\t\t  this.imageSecondary.addEventListener('animationend', onAnimationEnd);\r\n\t\t}\r\n  \r\n\t\t// Change all hover images classes\r\n\t\tif (theme.settings.productGridHover === 'image') {\r\n\t\t  this.hoverImages = this.outer.querySelectorAll(selectors$M.productImageHover);\r\n\t\t}\r\n  \r\n\t\tif (this.hoverImages.length > 1) {\r\n\t\t  this.hoverImages.forEach((hoverImage) => {\r\n\t\t\thoverImage.classList.remove(classes$B.mediaHoverVisible);\r\n  \r\n\t\t\tif (hoverImage.getAttribute(attributes$w.variandId) === this.variant) {\r\n\t\t\t  hoverImage.classList.add(classes$B.mediaHoverVisible);\r\n\t\t\t} else {\r\n\t\t\t  this.hoverImages[0].classList.add(classes$B.mediaHoverVisible);\r\n\t\t\t}\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tclass GridSwatch extends HTMLElement {\r\n\t  constructor() {\r\n\t\tsuper();\r\n  \r\n\t\tthis.handle = this.getAttribute(attributes$w.handle)\r\n\t\tthis.handles = JSON.parse(this.getAttribute(attributes$w.handles));\r\n\t\tthis.label = this.getAttribute(attributes$w.label) ? this.getAttribute(attributes$w.label).trim().toLowerCase(): 'color';\r\n\t\tthis.colorGroup = this.getAttribute('data-color-group') ? this.getAttribute('data-color-group') : 'Color';\r\n\t\tthis.colorOption = {};\r\n\t\tthis.colorOption.name = this.label;\r\n\t\tthis.colorOption.values = [];\r\n\t\tthis.swatchesEl = new DocumentFragment();\r\n\t\tif(this.handles && this.handles.length > 0){\r\n\t\t  Promise.all(\r\n\t\t\tthis.handles && this.handles.map((h) => {\r\n\t\t\t  return new Promise((resolve, reject) => {\r\n\t\t\t\tif(window.qlAllProductds[h]){\r\n\t\t\t\t  let product = window.qlAllProductds[h];\r\n\t\t\t\t  product !== undefined && this.colorSwatches(this, product);\r\n\t\t  \r\n\t\t\t\t resolve();\r\n\t\t\t\t}else{\r\n\t\t\t\t  fetchProduct(h).then((product) => {\r\n\t\t\t\t\twindow.qlAllProductds[h] = product;\r\n\t\t\t\t\tproduct !== undefined && this.colorSwatches(this, product);\r\n\t\t\t\r\n\t\t\t\t   resolve();\r\n\t\t\t\t  });\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t  })\r\n\t\t\t})\r\n\t\t  ).then(() => {\r\n\t\t\tthis.appendChild(this.swatchesEl);\r\n\t\t\tif (this.colorOption) {\r\n\t\t\t  this.swatches = this.colorOption.values;\r\n\t\t\t  this.init();\r\n\t\t\t}\r\n\t\t  })\r\n\t\t}\r\n  \r\n\t  }\r\n  \r\n\t  colorSwatches(container, product){\r\n\t\tconst label = container.getAttribute(attributes$w.label) ? container.getAttribute(attributes$w.label).trim().toLowerCase(): 'color';\r\n\t\t// \u989C\u8272\u5BF9\u5E94\u7684\u5206\u7EC4\r\n\t\t  let color_group_name = product && product.tags.filter((tag) => {\r\n\t\t\treturn tag.indexOf(\"Colorgroup_\") != -1;\r\n\t\t  });\r\n\t\t  color_group_name = color_group_name.length > 0 ? color_group_name[0].replace(\"Colorgroup_\",\"\") : \"Color\";\r\n\r\n\t\t// let color_group_name = product && product.tags.filter((tag) => {\r\n\t\t// \treturn tag.includes(\"QLG_\") && tag.replace(\"QLG_\",\"\").split('_')[1] == this.colorGroup;\r\n\t\t// });\r\n\t\t// color_group_name = color_group_name.length > 0 && color_group_name[0].replace(\"QLG_\",\"\").split('_')[1];\r\n\r\n\t\tif(this.colorGroup !== color_group_name) return;\r\n\r\n\t\tvar colorObj = {};\r\n\t\tproduct && (colorObj =  product.options.find((element) => {\r\n\t\t\treturn element.name.toLowerCase() === label || null;\r\n\t\t}));\r\n\r\n\r\n\t\tcolorObj && container.colorOption.values.concat(colorObj.values) ;\r\n\r\n\t\tvar len = colorObj && colorObj.values ? colorObj.values.length : 0;\r\n\t\tfor(let i = 0 ; i < len; i++){\r\n\t\t\tvar o = colorObj.values[i];\r\n\t\t\t// \u989C\u8272\u5BF9\u5E94variant\r\n\t\t\tfor (let x = 0; x < product.variants.length; x++) {\r\n\t\t\t\tvar v = product.variants[x];\r\n\t\t\t\tvar vrOpt = v.options;\r\n\t\t\t\tif (vrOpt.indexOf(o) !== -1) {\r\n\r\n\t\t\t\t\tcontainer.optionWithValues = {\r\n\t\t\t\t\t\tvalue: o,\r\n\t\t\t\t\t\timage: v.featured_image && v.featured_image.src,\r\n\t\t\t\t\t\tvariant: v\r\n\t\t\t\t\t};\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar html = document.createElement('div');\r\n\t\t\thtml.classList.add('swatch__button');\r\n\t\t\thtml.setAttribute('data-swatch-button','');\r\n\t\t\thtml.setAttribute('data-value',o);\r\n\t\t\thtml.setAttribute('role','listitem');\r\n\t\t\thtml.innerHTML = `<div id=\"${product.id}-${container.optionWithValues.variant.id}-${container.handlezie(o)}\" class=\"swatch__label\" data-swatch=\"${o}\" data-swatch-handle=\"${product.handle}\" data-swatch-variant=\"${container.optionWithValues.variant.id}\" data-swatch-image=\"${container.optionWithValues.image}\" data-swatch-image-id=\"${container.optionWithValues.variant.id}\" data-swatch-index=\"${i}\" data-tooltip=\"${o}\">\r\n\t\t\t</div>\r\n\t\t\t<a href=\"${product.url}?variant=${container.optionWithValues.variant.id}\" data-swatch-variant=\"${container.optionWithValues.variant.id}\" aria-label=\"Swatch link\" class=\"swatch__link\"></a>`\r\n\t\t\tcontainer.swatchesEl.appendChild(html);\r\n\r\n\t\t}\r\n\r\n\t  }\r\n  \r\n  \r\n\t  init() {\r\n\t\tconst getColors = loadScript({json: theme.assets.swatches});\r\n\t\tconst swatchElements = this.querySelectorAll(selectors$M.swatch);\r\n\t\tgetColors\r\n\t\t  .then((colors) => {\r\n\t\t\t// return this.matchColors(colors, this.settings.color);\r\n  \r\n\t\t\tswatchElements.forEach((el) => {\r\n\t\t\t  new Swatch(el, colors);\r\n\t\t\t});\r\n\t\t  })\r\n\t\t  // .catch((e) => {\r\n\t\t  //   console.log('failed to load swatch colors script');\r\n\t\t  //   console.log(e);\r\n\t\t  // });\r\n\t\t\r\n\t  }\r\n  \r\n\t  handlezie (str) {\r\n\t\tvar x = str || \"\";\r\n\t\treturn x.toLowerCase().replace(\"'\", '').replace(/[^\\w\\u00C0-\\u024f]+/g, \"-\").replace(/^-+|-+$/g, \"\").normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\")\r\n\t  }\r\n\t}\r\n  \r\n\tclass DiscountCountdown extends HTMLElement{\r\n\t  constructor() {\r\n\t\tsuper();\r\n  \r\n\t\tthis.handle = this.getAttribute('data-d-handle');\r\n\t\tthis.endDate = this.getAttribute('data-d-end');\r\n\t\tthis.startDate = this.getAttribute('data-d-start');\r\n\t\tthis.dType = this.getAttribute('data-d-type');\r\n\t\tthis.dValue = this.getAttribute('data-d-value');\r\n\t\tthis.dCode = this.getAttribute('data-d-code');\r\n  \r\n\t\tif(this.dType == 'auto'){\r\n\t\t  this.innerHTML = `\r\n\t\t  <div class=\"ql-discount-box\">\r\n\t\t\t\t\t\t\t<p class=\"discount-data\">\r\n\t\t\t\t\t\t\t  <span class=\"ql-discount-value red-color ql-weight\" style=\"padding-right: .6em;\">Save\r\n\t\t\t\t\t\t\t\t${this.dValue}   </span><span>   Ends in <span class=\"ql-discount-time\"\r\n\t\t\t\t\t\t\t\t  ><span data-launch-days>00</span> <span class=\"red-color underline\"><span\r\n\t\t\t\t\t\t\t\t\t  data-launch-hours>00</span>\r\n\t\t\t\t\t\t\t\t\t  :\r\n\t\t\t\t\t\t\t\t\t  <span data-launch-mins>00</span>\r\n\t\t\t\t\t\t\t\t\t  :\r\n\t\t\t\t\t\t\t\t\t  <span data-launch-secs>00</span>\r\n\t\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t  </span>\r\n\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t  </div>\r\n\t\t  `;\r\n\t\t}else if(this.dType == 'code'){\r\n\t\t  this.innerHTML = `\r\n\t\t  <div class=\"ql-discount-box\">\r\n\t\t\t\t\t\t\t<p class=\"discount-data padding\">\r\n\t\t\t\t\t\t\t  <span class=\"ql-discount-value\">\r\n\t\t\t\t\t\t\t\t<span class=\"ql-weight\">\r\n\t\t\t\t\t\t\t\t  Save ${this.dValue}\r\n\t\t\t\t\t\t\t\t</span> with code \r\n\t\t\t\t\t\t\t\t<span class=\"ql-discount-code\">\r\n\t\t\t\t\t\t\t\t${this.dCode}\r\n\t\t\t\t\t\t\t\t  <span class=\"ql-copy pointer tooltip\" data-value=\"${this.dCode}\"><svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"29\" height=\"25\" viewBox=\"0 0 29 25\" fill=\"none\" style=\"width: 29px;height: 25px;vertical-align: bottom;\">\r\n\t\t\t\t\t\t\t\t\t<path d=\"M17.9122 5.48097C18.5166 5.48097 19.0451 5.8913 19.1969 6.47554L19.3324 6.99728L19.8636 7.07608C20.132 7.11684 20.3271 7.33967 20.3271 7.60869L20.3271 19.2935C20.3271 19.5924 20.0832 19.837 19.785 19.837L9.75701 19.837C9.45888 19.837 9.21495 19.5924 9.21495 19.2935L9.21495 7.60869C9.21495 7.34239 9.40738 7.11956 9.67028 7.07608L10.1934 6.99184L10.3262 6.47826C10.4807 5.8913 11.0092 5.48097 11.6108 5.48097L17.9122 5.48097ZM17.9122 4.66576L11.6136 4.66576C10.6162 4.66576 9.7814 5.34782 9.54019 6.27173C8.89514 6.375 8.40187 6.93206 8.40187 7.60869L8.40187 19.2935C8.40187 20.0435 9.00897 20.6522 9.75701 20.6522L19.785 20.6522C20.5331 20.6522 21.1402 20.0435 21.1402 19.2935L21.1402 7.60869C21.1402 6.92663 20.6361 6.36684 19.9829 6.26902C19.7417 5.34782 18.9069 4.66576 17.9122 4.66576Z\" fill=\"#000000\">\r\n\t\t\t\t\t\t\t\t\t</path>\r\n\t\t\t\t\t\t\t\t\t<path d=\"M17.8851 5.45653C18.6196 5.45653 19.2159 6.05436 19.2159 6.79077C19.2159 7.52718 18.6196 8.12501 17.8851 8.12501L11.5864 8.12501C10.852 8.12501 10.2557 7.52718 10.2557 6.79077C10.2557 6.05436 10.852 5.45653 11.5864 5.45653L17.8851 5.45653ZM17.8851 4.64131L11.5864 4.64131C10.4021 4.64131 9.44261 5.60327 9.44261 6.79077C9.44261 7.97827 10.4021 8.94022 11.5864 8.94022L17.8851 8.94022C19.0695 8.94022 20.029 7.97827 20.029 6.79077C20.029 5.60327 19.0695 4.64131 17.8851 4.64131Z\" fill=\"#000000\">\r\n\t\t\t\t\t\t\t\t\t</path>\r\n\t\t\t\t\t\t\t\t\t</svg> \r\n\t\t\t\t\t\t\t\t\t<span class=\"tooltiptext\">Copied</span>\r\n\t\t\t\t\t\t\t\t  </span>\r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t  </span>\r\n\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t<p><span>Ends in \r\n\t\t\t\t\t\t\t  <span class=\"ql-discount-time\">\r\n\t\t\t\t\t\t\t\t<span data-launch-days>00</span>\r\n\t\t\t\t\t\t\t\t  <span class=\"red-color underline\">\r\n\t\t\t\t\t\t\t\t\t<span data-launch-hours>00</span>\r\n\t\t\t\t\t\t\t\t\t:\r\n\t\t\t\t\t\t\t\t\t<span data-launch-mins>00</span>\r\n\t\t\t\t\t\t\t\t\t:\r\n\t\t\t\t\t\t\t\t\t<span data-launch-secs>00</span>\r\n\t\t\t\t\t\t\t\t  </span> \r\n\t\t\t\t\t\t\t\t</span>\r\n\t\t\t\t\t\t\t  </span>\r\n\t\t\t\t\t\t\t</p>\r\n\t\t\t\t\t\t\t<p>This discount code can be used on both Inlyric and amazon. </p>\r\n\t\t\t\t\t\t  </div>\r\n\t\t  `;\r\n\t\t}\r\n\t\t\r\n  \r\n  \r\n\t\tif(this.querySelector('.ql-copy')){\r\n\t\t  this.querySelector('.ql-copy').addEventListener('click', this.getCopyCode);\r\n\t\t}\r\n  \r\n\t\t\r\n  \r\n\t\tthis.getCountDown(this);\r\n\t\t\r\n\t\t\r\n\t  }\r\n\t  getCountDown(container){\r\n\t\tvar timestamp = this.endDate;\r\n\t\t\t\r\n\t\tif ( !timestamp ) return false;\r\n\t\r\n\t\tvar count = setInterval(function(){\r\n\t\t  var nowTime = new Date();\r\n\t\t  // var endTime = new Date(timestamp * 1000);\r\n\t\t  var endTime = new Date(timestamp * 1000);\r\n\t\r\n\t\t  var t = endTime.getTime() - nowTime.getTime();\r\n\t\t  var days = Math.floor(t/1000/60/60/24);\r\n\t\t  var hours = Math.floor(t/1000/60/60%24);\r\n\t\t  var mins = Math.floor(t/1000/60%60);\r\n\t\t  var secs = Math.floor(t/1000%60);\r\n\t\r\n\t\t  if (days < 10) {\r\n\t\t\tdays = days;\r\n\t\t  }\r\n\t\t  if (hours < 10) {\r\n\t\t\thours = \"0\" + hours;\r\n\t\t  }\r\n\t\t  if (mins < 10) {\r\n\t\t\tmins = \"0\" + mins;\r\n\t\t  }\r\n\t\t  if (secs < 10) {\r\n\t\t\tsecs = \"0\" + secs;\r\n\t\t  }\r\n\t\r\n\t\t  if ( days >= 0 && days != '00' ) container.querySelector('[data-launch-days]').innerHTML = days +' Days';\r\n\t\t  else container.querySelector('[data-launch-days]').innerHTML = ''; \r\n\t\t  if ( hours >= 0 ) container.querySelector('[data-launch-hours]').innerHTML = hours;\r\n\t\t  if ( mins >= 0 ) container.querySelector('[data-launch-mins]').innerHTML = mins;\r\n\t\t  if ( secs > 0 ) container.querySelector('[data-launch-secs]').innerHTML = secs;\r\n\t\r\n\t\t  if (t < 0) {\r\n\t\t\tclearInterval(count);\r\n\t\t\tcontainer.style.display = 'none';\r\n\t\t  }\r\n\t\r\n\t\t},1000);\r\n\t  }\r\n  \r\n\t  getCopyCode(){\r\n\t\tvar value = this.getAttribute('data-value');\r\n\t\tnavigator.clipboard.writeText(value);\r\n\t\tthis.classList.add('copy');\r\n\t\tsetTimeout(() => this.classList.remove('copy'), 3000);\r\n\t  }\r\n\t}\r\n  \r\n\tif (!customElements.get('discount-countdown')) {\r\n\t  customElements.define('discount-countdown', DiscountCountdown);\r\n\t}\r\n  \r\n\tconst makeSwatches = (container) => {\r\n\t  swatches = [];\r\n\t  const els = container.querySelectorAll(selectors$M.swatch);\r\n  \r\n\t  const getColors = loadScript({json: theme.assets.swatches});\r\n\t  getColors\r\n\t\t.then((colors) => {\r\n\t\t  // return this.matchColors(colors, this.settings.color);\r\n  \r\n\t\t  els.forEach((el) => {\r\n\t\t\tswatches.push(new Swatch(el, colors));\r\n\t\t  });\r\n\t\t})\r\n\t};\r\n  \r\n\tconst swatchSection = {\r\n\t  onLoad() {\r\n\t\tmakeSwatches(this.container);\r\n\t  },\r\n\t};\r\n  \r\n\tconst selectors$L = {\r\n\t  form: 'form',\r\n\t  popoutWrapper: '[data-popout]',\r\n\t  popoutList: '[data-popout-list]',\r\n\t  popoutToggle: '[data-popout-toggle]',\r\n\t  popoutInput: '[data-popout-input]',\r\n\t  popoutOptions: '[data-popout-option]',\r\n\t  popoutText: '[data-popout-text]',\r\n\t  ariaCurrent: '[aria-current]',\r\n\t  productGridImage: '[data-product-image]',\r\n\t  productGrid: '[data-product-grid-item]',\r\n\t};\r\n  \r\n\tconst classes$A = {\r\n\t  listVisible: 'select-popout__list--visible',\r\n\t  popoutAlternative: 'select-popout--alt',\r\n\t  currentSuffix: '--current',\r\n\t  visible: 'is-visible',\r\n\t};\r\n  \r\n\tconst attributes$v = {\r\n\t  ariaCurrent: 'aria-current',\r\n\t  ariaExpanded: 'aria-expanded',\r\n\t  dataValue: 'data-value',\r\n\t  popoutPrevent: 'data-popout-prevent',\r\n\t  popoutQuantity: 'data-quantity-field',\r\n\t  quickViewItem: 'data-quick-view-item',\r\n\t};\r\n  \r\n\tlet sections$v = {};\r\n  \r\n\tclass Popout {\r\n\t  constructor(popout) {\r\n\t\tthis.popout = popout;\r\n\t\tthis.popoutList = this.popout.querySelector(selectors$L.popoutList);\r\n\t\tthis.popoutToggle = this.popout.querySelector(selectors$L.popoutToggle);\r\n\t\tthis.popoutText = this.popout.querySelector(selectors$L.popoutText);\r\n\t\tthis.popoutInput = this.popout.querySelector(selectors$L.popoutInput);\r\n\t\tthis.popoutOptions = this.popout.querySelectorAll(selectors$L.popoutOptions);\r\n\t\tthis.popoutPrevent = this.popout.getAttribute(attributes$v.popoutPrevent) === 'true';\r\n\t\tthis.popupToggleFocusoutEvent = (evt) => this.popupToggleFocusout(evt);\r\n\t\tthis.popupListFocusoutEvent = (evt) => this.popupListFocusout(evt);\r\n\t\tthis.popupToggleClickEvent = (evt) => this.popupToggleClick(evt);\r\n\t\tthis.popoutKeyupEvent = (evt) => this.popoutKeyup(evt);\r\n\t\tthis.popupOptionsClickEvent = (evt) => this.popupOptionsClick(evt);\r\n\t\tthis._connectOptionsDispatchEvent = (evt) => this._connectOptionsDispatch(evt);\r\n\t\tthis.bodyClick = this.bodyClick.bind(this);\r\n\t\tthis.updatePopout = this.updatePopout.bind(this);\r\n  \r\n\t\tthis._connectOptions();\r\n\t\tthis._connectToggle();\r\n\t\tthis._onFocusOut();\r\n  \r\n\t\tif (this.popoutInput && this.popoutInput.hasAttribute(attributes$v.popoutQuantity)) {\r\n\t\t  document.addEventListener('theme:cart:update', this.updatePopout);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  unload() {\r\n\t\tif (this.popoutOptions.length) {\r\n\t\t  this.popoutOptions.forEach((element) => {\r\n\t\t\telement.removeEventListener('theme:popout:click', this.popupOptionsClickEvent);\r\n\t\t\telement.removeEventListener('click', this._connectOptionsDispatchEvent);\r\n\t\t  });\r\n\t\t}\r\n  \r\n\t\tthis.popoutToggle.removeEventListener('click', this.popupToggleClickEvent);\r\n\t\tthis.popoutToggle.removeEventListener('focusout', this.popupToggleFocusoutEvent);\r\n\t\tthis.popoutList.removeEventListener('focusout', this.popupListFocusoutEvent);\r\n\t\tthis.popout.removeEventListener('keyup', this.popoutKeyupEvent);\r\n\t\tdocument.removeEventListener('theme:cart:update', this.updatePopout);\r\n\t\tdocument.body.removeEventListener('click', this.bodyClick);\r\n\t  }\r\n  \r\n\t  popupToggleClick(evt) {\r\n\t\tconst ariaExpanded = evt.currentTarget.getAttribute(attributes$v.ariaExpanded) === 'true';\r\n  \r\n\t\tif (this.popoutList.closest(selectors$L.productGrid)) {\r\n\t\t  const productGridItemImage = this.popoutList.closest(selectors$L.productGrid).querySelector(selectors$L.productGridImage);\r\n  \r\n\t\t  if (productGridItemImage) {\r\n\t\t\tproductGridItemImage.classList.toggle(classes$A.visible, !ariaExpanded);\r\n\t\t  }\r\n\t\t}\r\n  \r\n\t\tevt.currentTarget.setAttribute(attributes$v.ariaExpanded, !ariaExpanded);\r\n\t\tthis.popoutList.classList.toggle(classes$A.listVisible);\r\n\t  }\r\n  \r\n\t  popupToggleFocusout(evt) {\r\n\t\tif (!evt.relatedTarget) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tconst popoutLostFocus = this.popout.contains(evt.relatedTarget);\r\n\t\tconst popoutFromQuickView = evt.relatedTarget.hasAttribute(attributes$v.quickViewItem);\r\n  \r\n\t\tif (!popoutLostFocus && !popoutFromQuickView) {\r\n\t\t  this._hideList();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  popupListFocusout(evt) {\r\n\t\tconst childInFocus = evt.currentTarget.contains(evt.relatedTarget);\r\n\t\tconst isVisible = this.popoutList.classList.contains(classes$A.listVisible);\r\n  \r\n\t\tif (isVisible && !childInFocus) {\r\n\t\t  this._hideList();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  popupOptionsClick(evt) {\r\n\t\tconst link = evt.target.closest(selectors$L.popoutOptions);\r\n\t\tif (link.attributes.href.value === '#') {\r\n\t\t  evt.preventDefault();\r\n  \r\n\t\t  let attrValue = '';\r\n  \r\n\t\t  if (evt.currentTarget.getAttribute(attributes$v.dataValue)) {\r\n\t\t\tattrValue = evt.currentTarget.getAttribute(attributes$v.dataValue);\r\n\t\t  }\r\n  \r\n\t\t  this.popoutInput.value = attrValue;\r\n  \r\n\t\t  if (this.popoutPrevent) {\r\n\t\t\tthis.popoutInput.dispatchEvent(new Event('change'));\r\n  \r\n\t\t\tif (!evt.detail.preventTrigger && this.popoutInput.hasAttribute(attributes$v.popoutQuantity)) {\r\n\t\t\t  this.popoutInput.dispatchEvent(new Event('input'));\r\n\t\t\t}\r\n  \r\n\t\t\tconst currentElement = this.popoutList.querySelector(`[class*=\"${classes$A.currentSuffix}\"]`);\r\n\t\t\tlet targetClass = classes$A.currentSuffix;\r\n  \r\n\t\t\tif (currentElement && currentElement.classList.length) {\r\n\t\t\t  for (const currentElementClass of currentElement.classList) {\r\n\t\t\t\tif (currentElementClass.includes(classes$A.currentSuffix)) {\r\n\t\t\t\t  targetClass = currentElementClass;\r\n\t\t\t\t  break;\r\n\t\t\t\t}\r\n\t\t\t  }\r\n\t\t\t}\r\n  \r\n\t\t\tconst listTargetElement = this.popoutList.querySelector(`.${targetClass}`);\r\n  \r\n\t\t\tif (listTargetElement) {\r\n\t\t\t  listTargetElement.classList.remove(`${targetClass}`);\r\n\t\t\t  evt.currentTarget.parentElement.classList.add(`${targetClass}`);\r\n\t\t\t}\r\n  \r\n\t\t\tconst targetAttribute = this.popoutList.querySelector(selectors$L.ariaCurrent);\r\n  \r\n\t\t\tif (targetAttribute) {\r\n\t\t\t  targetAttribute.removeAttribute(attributes$v.ariaCurrent);\r\n\t\t\t  evt.currentTarget.setAttribute(attributes$v.ariaCurrent, 'true');\r\n\t\t\t}\r\n  \r\n\t\t\tif (attrValue !== '') {\r\n\t\t\t  this.popoutText.textContent = attrValue;\r\n\t\t\t}\r\n  \r\n\t\t\tthis.popupToggleFocusout(evt);\r\n\t\t\tthis.popupListFocusout(evt);\r\n\t\t  } else {\r\n\t\t\tthis._submitForm(attrValue);\r\n\t\t  }\r\n\t\t}\r\n\t  }\r\n  \r\n\t  updatePopout() {\r\n\t\tconst targetElement = this.popoutList.querySelector(`[${attributes$v.dataValue}=\"${this.popoutInput.value}\"]`);\r\n\t\tif (targetElement) {\r\n\t\t  targetElement.dispatchEvent(\r\n\t\t\tnew CustomEvent('theme:popout:click', {\r\n\t\t\t  cancelable: true,\r\n\t\t\t  bubbles: true,\r\n\t\t\t  detail: {\r\n\t\t\t\tpreventTrigger: true,\r\n\t\t\t  },\r\n\t\t\t})\r\n\t\t  );\r\n  \r\n\t\t  if (!targetElement.parentElement.nextSibling) {\r\n\t\t\tthis.popout.classList.add(classes$A.popoutAlternative);\r\n\t\t  }\r\n\t\t} else {\r\n\t\t  this.popout.classList.add(classes$A.popoutAlternative);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  popoutKeyup(event) {\r\n\t\tif (event.code !== theme.keyboardKeys.ESCAPE) {\r\n\t\t  return;\r\n\t\t}\r\n\t\tthis._hideList();\r\n\t\tthis.popoutToggle.focus();\r\n\t  }\r\n  \r\n\t  bodyClick(event) {\r\n\t\tconst isOption = this.popout.contains(event.target);\r\n\t\tconst isVisible = this.popoutList.classList.contains(classes$A.listVisible);\r\n  \r\n\t\tif (isVisible && !isOption) {\r\n\t\t  this._hideList();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  _connectToggle() {\r\n\t\tthis.popoutToggle.addEventListener('click', this.popupToggleClickEvent);\r\n\t  }\r\n  \r\n\t  _connectOptions() {\r\n\t\tif (this.popoutOptions.length) {\r\n\t\t  this.popoutOptions.forEach((element) => {\r\n\t\t\telement.addEventListener('theme:popout:click', this.popupOptionsClickEvent);\r\n\t\t\telement.addEventListener('click', this._connectOptionsDispatchEvent);\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  _connectOptionsDispatch(evt) {\r\n\t\tconst event = new CustomEvent('theme:popout:click', {\r\n\t\t  cancelable: true,\r\n\t\t  bubbles: true,\r\n\t\t  detail: {\r\n\t\t\tpreventTrigger: false,\r\n\t\t  },\r\n\t\t});\r\n  \r\n\t\tif (!evt.target.dispatchEvent(event)) {\r\n\t\t  evt.preventDefault();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  _onFocusOut() {\r\n\t\tthis.popoutToggle.addEventListener('focusout', this.popupToggleFocusoutEvent);\r\n\t\tthis.popoutList.addEventListener('focusout', this.popupListFocusoutEvent);\r\n\t\tthis.popout.addEventListener('keyup', this.popoutKeyupEvent);\r\n  \r\n\t\tdocument.body.addEventListener('click', this.bodyClick);\r\n\t  }\r\n  \r\n\t  _submitForm() {\r\n\t\tconst form = this.popout.closest(selectors$L.form);\r\n\t\tif (form) {\r\n\t\t  form.submit();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  _hideList() {\r\n\t\tthis.popoutList.classList.remove(classes$A.listVisible);\r\n\t\tthis.popoutToggle.setAttribute(attributes$v.ariaExpanded, false);\r\n\t  }\r\n\t}\r\n  \r\n\tconst popoutSection = {\r\n\t  onLoad() {\r\n\t\tsections$v[this.id] = [];\r\n\t\tconst wrappers = this.container.querySelectorAll(selectors$L.popoutWrapper);\r\n\t\twrappers.forEach((wrapper) => {\r\n\t\t  sections$v[this.id].push(new Popout(wrapper));\r\n\t\t});\r\n\t  },\r\n\t  onUnload() {\r\n\t\tsections$v[this.id].forEach((popout) => {\r\n\t\t  if (typeof popout.unload === 'function') {\r\n\t\t\tpopout.unload();\r\n\t\t  }\r\n\t\t});\r\n\t  },\r\n\t};\r\n  \r\n\tconst selectors$K = {\r\n\t  tooltip: '[data-tooltip]',\r\n\t  tooltipContainer: '[data-tooltip-container]',\r\n\t  tooltipArrow: '[data-tooltip-arrow]',\r\n\t  aos: '[data-aos]',\r\n\t};\r\n  \r\n\tconst classes$z = {\r\n\t  root: 'tooltip-default',\r\n\t  isAnimating: 'is-animating',\r\n\t  visible: 'is-visible',\r\n\t  hiding: 'is-hiding',\r\n\t};\r\n  \r\n\tconst attributes$u = {\r\n\t  tooltip: 'data-tooltip',\r\n\t  tooltipContainer: 'data-tooltip-container',\r\n\t  tooltipStopMouseEnter: 'data-tooltip-stop-mouseenter',\r\n\t};\r\n  \r\n\tconst sections$u = {};\r\n  \r\n\tclass Tooltip {\r\n\t  constructor(el) {\r\n\t\tthis.tooltip = el;\r\n\t\tif (!this.tooltip.hasAttribute(attributes$u.tooltip)) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tthis.rootClass = classes$z.root;\r\n\t\tthis.isAnimatingClass = classes$z.isAnimating;\r\n\t\tthis.label = this.tooltip.getAttribute(attributes$u.tooltip);\r\n\t\tthis.transitionSpeed = 200;\r\n\t\tthis.hideTransitionTimeout = 0;\r\n\t\tthis.animatedContainer = this.tooltip.closest(selectors$K.aos);\r\n\t\tthis.addPinEvent = () => this.addPin();\r\n\t\tthis.addPinMouseEvent = () => this.addPin(true);\r\n\t\tthis.removePinEvent = (event) => throttle(this.removePin(event), 50);\r\n\t\tthis.removePinMouseEvent = (event) => this.removePin(event, true, true);\r\n\t\tthis.init();\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tif (!document.querySelector(selectors$K.tooltipContainer)) {\r\n\t\t  const tooltipTemplate = `<div class=\"${this.rootClass}__inner\"><div class=\"${this.rootClass}__arrow\" data-tooltip-arrow></div><div class=\"${this.rootClass}__text\"></div></div>`;\r\n\t\t  const tooltipElement = document.createElement('div');\r\n\t\t  tooltipElement.className = `${this.rootClass} ${this.isAnimatingClass}`;\r\n\t\t  tooltipElement.setAttribute(attributes$u.tooltipContainer, '');\r\n\t\t  tooltipElement.innerHTML = tooltipTemplate;\r\n\t\t  document.body.appendChild(tooltipElement);\r\n\t\t}\r\n  \r\n\t\tthis.tooltip.addEventListener('mouseenter', this.addPinMouseEvent);\r\n\t\tthis.tooltip.addEventListener('mouseleave', this.removePinMouseEvent);\r\n\t\tthis.tooltip.addEventListener('theme:tooltip:init', this.addPinEvent);\r\n\t\tdocument.addEventListener('theme:tooltip:close', this.removePinEvent);\r\n  \r\n\t\tconst tooltipTarget = document.querySelector(selectors$K.tooltipContainer);\r\n  \r\n\t\tif (theme.settings.animations && this.animatedContainer) {\r\n\t\t  this.animatedContainer.addEventListener('transitionend', (event) => {\r\n\t\t\t// This will fire the event when the last transition end\r\n\t\t\tif (event.propertyName === 'transform') {\r\n\t\t\t  tooltipTarget.classList.remove(classes$z.isAnimating);\r\n\t\t\t}\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  addPin(stopMouseEnter = false) {\r\n\t\tconst tooltipTarget = document.querySelector(selectors$K.tooltipContainer);\r\n\t\tconst tooltipTargetArrow = tooltipTarget.querySelector(selectors$K.tooltipArrow);\r\n  \r\n\t\tif (tooltipTarget && ((stopMouseEnter && !this.tooltip.hasAttribute(attributes$u.tooltipStopMouseEnter)) || !stopMouseEnter)) {\r\n\t\t  const tooltipTargetInner = tooltipTarget.querySelector(`.${this.rootClass}__inner`);\r\n\t\t  const tooltipTargetText = tooltipTarget.querySelector(`.${this.rootClass}__text`);\r\n\t\t  tooltipTargetText.textContent = this.label;\r\n  \r\n\t\t  const tooltipTargetWidth = tooltipTargetInner.offsetWidth;\r\n\t\t  const tooltipRect = this.tooltip.getBoundingClientRect();\r\n\t\t  const tooltipTop = tooltipRect.top;\r\n\t\t  const tooltipWidth = tooltipRect.width;\r\n\t\t  const tooltipHeight = tooltipRect.height;\r\n\t\t  const tooltipTargetPositionTop = tooltipTop + tooltipHeight + window.scrollY;\r\n\t\t  let tooltipTargetPositionLeft = tooltipRect.left - tooltipTargetWidth / 2 + tooltipWidth / 2;\r\n\t\t  let tooltipArrowPositionLeft = '50%';\r\n\t\t  const tooltipLeftWithWidth = tooltipTargetPositionLeft + tooltipTargetWidth;\r\n\t\t  const tooltipTargetWindowDifference = tooltipLeftWithWidth - window.innerWidth;\r\n  \r\n\t\t  if (tooltipTargetWindowDifference > 0) {\r\n\t\t\ttooltipTargetPositionLeft -= tooltipTargetWindowDifference;\r\n\t\t  }\r\n  \r\n\t\t  if (tooltipTargetPositionLeft < 0) {\r\n\t\t\ttooltipArrowPositionLeft = `calc(50% + ${tooltipTargetPositionLeft}px)`;\r\n\t\t\ttooltipTargetPositionLeft = 0;\r\n\t\t  }\r\n  \r\n\t\t  tooltipTargetArrow.style.left = tooltipArrowPositionLeft;\r\n\t\t  tooltipTarget.style.transform = `translate(${tooltipTargetPositionLeft}px, ${tooltipTargetPositionTop}px)`;\r\n\t\t  tooltipTarget.classList.remove(classes$z.hiding);\r\n\t\t  tooltipTarget.classList.add(classes$z.visible);\r\n  \r\n\t\t  document.addEventListener('theme:scroll', this.removePinEvent);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  removePin(event, stopMouseEnter = false, hideTransition = false) {\r\n\t\tconst tooltipTarget = document.querySelector(selectors$K.tooltipContainer);\r\n\t\tconst tooltipVisible = tooltipTarget.classList.contains(classes$z.visible);\r\n  \r\n\t\tif (tooltipTarget && ((stopMouseEnter && !this.tooltip.hasAttribute(attributes$u.tooltipStopMouseEnter)) || !stopMouseEnter)) {\r\n\t\t  if (tooltipVisible && (hideTransition || event.detail.hideTransition)) {\r\n\t\t\ttooltipTarget.classList.add(classes$z.hiding);\r\n  \r\n\t\t\tif (this.hideTransitionTimeout) {\r\n\t\t\t  clearTimeout(this.hideTransitionTimeout);\r\n\t\t\t}\r\n  \r\n\t\t\tthis.hideTransitionTimeout = setTimeout(() => {\r\n\t\t\t  tooltipTarget.classList.remove(classes$z.hiding);\r\n\t\t\t}, this.transitionSpeed);\r\n\t\t  }\r\n  \r\n\t\t  tooltipTarget.classList.remove(classes$z.visible);\r\n\t\t  tooltipTarget.style.transform = `translate(100%, 0)`;\r\n  \r\n\t\t  document.removeEventListener('theme:scroll', this.removePinEvent);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  unload() {\r\n\t\tthis.tooltip.removeEventListener('mouseenter', this.addPinMouseEvent);\r\n\t\tthis.tooltip.removeEventListener('mouseleave', this.removePinMouseEvent);\r\n\t\tthis.tooltip.removeEventListener('theme:tooltip:init', this.addPinEvent);\r\n\t\tdocument.removeEventListener('theme:tooltip:close', this.removePinEvent);\r\n\t\tdocument.removeEventListener('theme:scroll', this.removePinEvent);\r\n\t  }\r\n\t}\r\n  \r\n\tconst tooltip = {\r\n\t  onLoad() {\r\n\t\tsections$u[this.id] = [];\r\n\t\tconst tooltips = this.container.querySelectorAll(selectors$K.tooltip);\r\n\t\ttooltips.forEach((tooltip) => {\r\n\t\t  sections$u[this.id].push(new Tooltip(tooltip));\r\n\t\t});\r\n\t  },\r\n\t  onUnload() {\r\n\t\tsections$u[this.id].forEach((tooltip) => {\r\n\t\t  if (typeof tooltip.unload === 'function') {\r\n\t\t\ttooltip.unload();\r\n\t\t  }\r\n\t\t});\r\n\t  },\r\n\t};\r\n  \r\n\tconst selectors$J = {\r\n\t  addToCart: '[data-add-to-cart]',\r\n\t  deferredMedia: '[data-deferred-media]',\r\n\t  deferredMediaButton: '[data-deferred-media-button]',\r\n\t  popupClose: '[data-popup-close]',\r\n\t  popout: '[data-popout]',\r\n\t  quickViewInner: '[data-quick-view-inner]',\r\n\t  quickViewItemHolder: '[data-quick-view-item-holder]',\r\n\t  product: '[data-product]',\r\n\t  productForm: '[data-product-form]',\r\n\t  productMediaSlider: '[data-product-single-media-slider]',\r\n\t  productMediaWrapper: '[data-product-single-media-wrapper]',\r\n\t  productModel: '[data-model]',\r\n\t  productJSON: '[data-product-json]',\r\n\t  quickViewFootInner: '[data-quick-view-foot-inner]',\r\n\t  shopTheLookThumb: '[data-shop-the-look-thumb]',\r\n\t  tooltip: '[data-tooltip]',\r\n\t  drawerToggle: '[data-drawer-toggle]',\r\n\t};\r\n  \r\n\tconst classes$y = {\r\n\t  hasMediaActive: 'has-media-active',\r\n\t  isActive: 'is-active',\r\n\t  isLoading: 'is-loading',\r\n\t  mediaHidden: 'media--hidden',\r\n\t  noOutline: 'no-outline',\r\n\t  notificationPopupVisible: 'notification-popup-visible',\r\n\t  popupQuickViewAnimateIn: 'popup-quick-view--animate-in',\r\n\t  popupQuickViewAnimateOut: 'popup-quick-view--animate-out',\r\n\t  popupQuickViewAnimated: 'popup-quick-view--animated',\r\n\t  popupQuickView: 'popup-quick-view',\r\n\t  jsQuickViewVisible: 'js-quick-view-visible',\r\n\t  jsQuickViewFromCart: 'js-quick-view-from-cart',\r\n\t  drawerOpen: 'js-drawer-open',\r\n\t};\r\n  \r\n\tconst attributes$t = {\r\n\t  id: 'id',\r\n\t  mediaId: 'data-media-id',\r\n\t  sectionId: 'data-section-id',\r\n\t  handle: 'data-handle',\r\n\t  loaded: 'loaded',\r\n\t  tabindex: 'tabindex',\r\n\t  quickViewOnboarding: 'data-quick-view-onboarding',\r\n\t  hotspot: 'data-hotspot',\r\n\t  hotspotRef: 'data-hotspot-ref',\r\n\t};\r\n  \r\n\tconst ids = {\r\n\t  addToCartFormId: 'AddToCartForm--',\r\n\t  addToCartId: 'AddToCart--',\r\n\t};\r\n  \r\n\tclass LoadQuickview {\r\n\t  constructor(popup, pswpElement) {\r\n\t\tthis.popup = popup;\r\n\t\tthis.pswpElement = pswpElement;\r\n\t\tthis.quickViewFoot = this.pswpElement.querySelector(selectors$J.quickViewFootInner);\r\n\t\tthis.quickViewInner = this.pswpElement.querySelector(selectors$J.quickViewInner);\r\n\t\tthis.product = this.pswpElement.querySelectorAll(selectors$J.product);\r\n\t\tthis.flkty = [];\r\n\t\tthis.videos = [];\r\n\t\tthis.productForms = [];\r\n\t\tthis.deferredMedias = this.pswpElement.querySelectorAll(selectors$J.deferredMedia);\r\n\t\tthis.buttonsShopTheLookThumb = this.pswpElement.querySelectorAll(selectors$J.shopTheLookThumb);\r\n\t\tthis.quickViewItemHolders = this.pswpElement.querySelectorAll(selectors$J.quickViewItemHolder);\r\n\t\tthis.popupCloseButtons = this.quickViewInner.querySelectorAll(selectors$J.popupClose);\r\n\t\tthis.a11y = a11y;\r\n  \r\n\t\tthis.prevent3dModelSubmitEvent = (event) => this.prevent3dModelSubmit(event);\r\n\t\tthis.closeOnAnimationEndEvent = (event) => this.closeOnAnimationEnd(event);\r\n\t\tthis.closeOnEscapeEvent = (event) => this.closeOnEscape(event);\r\n  \r\n\t\tthis.outerCloseEvent = (event) => {\r\n\t\t  if (!this.quickViewInner.contains(event.target)) {\r\n\t\t\t// Check if quickview has drawer\r\n\t\t\tconst drawer = this.quickViewInner.nextElementSibling;\r\n\t\t\tif (drawer && drawer.contains(event.target)) return;\r\n  \r\n\t\t\tthis.closePopup(event);\r\n\t\t  }\r\n\t\t};\r\n  \r\n\t\tthis.product.forEach((item, index) => {\r\n\t\t  const isQuickViewOnboarding = item.hasAttribute(attributes$t.quickViewOnboarding);\r\n  \r\n\t\t  if (!isQuickViewOnboarding) {\r\n\t\t\tthis.initItems(item, index);\r\n\t\t  }\r\n\t\t});\r\n  \r\n\t\tthis.init();\r\n\t\tthis.initTooltips();\r\n\t\tthis.initPopouts();\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Init tooltips for swatches\r\n\t   */\r\n\t  initTooltips() {\r\n\t\tthis.tooltips = this.pswpElement.querySelectorAll(selectors$J.tooltip);\r\n\t\tthis.tooltips.forEach((tooltip) => {\r\n\t\t  new Tooltip(tooltip);\r\n\t\t});\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Init popouts\r\n\t   */\r\n\t  initPopouts() {\r\n\t\tthis.popoutElements = this.pswpElement.querySelectorAll(selectors$J.popout);\r\n\t\tthis.popouts = {};\r\n  \r\n\t\tthis.popoutElements?.forEach((popout, index) => {\r\n\t\t  this.popouts[index] = new Popout(popout);\r\n\t\t});\r\n\t  }\r\n  \r\n\t  handleDraggable(slider, draggableStatus) {\r\n\t\tif (!slider) return;\r\n  \r\n\t\tslider.options.draggable = Boolean(draggableStatus);\r\n\t\tslider.updateDraggable();\r\n\t  }\r\n  \r\n\t  initItems(item, index) {\r\n\t\tthis.addFormSuffix(item);\r\n\t\tthis.initProductSlider(item, index);\r\n\t\tthis.initProductVideo(item);\r\n\t\tthis.initProductModel(item);\r\n\t\tthis.initShopifyXrLaunch(item);\r\n  \r\n\t\t// Init swatches\r\n\t\tmakeSwatches(item);\r\n  \r\n\t\t// Init drawer\r\n\t\tconst drawerToggles = this.pswpElement.querySelectorAll(selectors$J.drawerToggle);\r\n\t\tif (drawerToggles.length) {\r\n\t\t  new Drawer(item);\r\n\t\t}\r\n  \r\n\t\t// Wrap tables\r\n\t\twrapElements(item);\r\n  \r\n\t\tconst productForm = new ProductAddForm(item.parentNode);\r\n\t\tthis.productForms.push(productForm);\r\n  \r\n\t\tif (Shopify.PaymentButton) {\r\n\t\t  Shopify.PaymentButton.init();\r\n\t\t}\r\n  \r\n\t\titem.classList.remove(classes$y.isLoading);\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\t// Prevent 3d models button redirecting to cart page when enabling/disabling the model a couple of times\r\n\t\tdocument.addEventListener('submit', this.prevent3dModelSubmitEvent);\r\n  \r\n\t\t// Custom closing events\r\n\t\tthis.popupCloseButtons.forEach((popupClose) => {\r\n\t\t  popupClose.addEventListener('keyup', (event) => {\r\n\t\t\tif (event.code === theme.keyboardKeys.ENTER || event.code === theme.keyboardKeys.NUMPADENTER || event.code === theme.keyboardKeys.SPACE) {\r\n\t\t\t  this.closePopup(event);\r\n\t\t\t}\r\n\t\t  });\r\n  \r\n\t\t  popupClose.addEventListener('click', (event) => {\r\n\t\t\tthis.closePopup(event);\r\n\t\t  });\r\n\t\t});\r\n  \r\n\t\tthis.pswpElement.addEventListener('click', this.outerCloseEvent);\r\n  \r\n\t\tdocument.dispatchEvent(new CustomEvent('theme:popup:open', {bubbles: true}));\r\n  \r\n\t\tthis.popup.listen('preventDragEvent', (e, isDown, preventObj) => {\r\n\t\t  preventObj.prevent = false;\r\n\t\t});\r\n  \r\n\t\tthis.pswpElement.addEventListener('mousedown', () => {\r\n\t\t  this.popup.framework.unbind(window, 'pointermove pointerup pointercancel', this.popup);\r\n\t\t});\r\n  \r\n\t\t// Opening event\r\n\t\tthis.popup.listen('initialZoomInEnd', () => {\r\n\t\t  document.body.classList.add(classes$y.jsQuickViewVisible);\r\n  \r\n\t\t  this.a11y.trapFocus({\r\n\t\t\tcontainer: this.quickViewInner,\r\n\t\t  });\r\n\t\t});\r\n  \r\n\t\tthis.pswpElement.addEventListener('animationend', this.closeOnAnimationEndEvent);\r\n  \r\n\t\tthis.popup.listen('destroy', () => {\r\n\t\t  if (this.flkty.length > 0) {\r\n\t\t\trequestAnimationFrame(() => {\r\n\t\t\t  this.flkty.forEach((slider) => slider.pausePlayer());\r\n\t\t\t});\r\n\t\t  }\r\n\t\t  document.body.classList.remove(classes$y.jsQuickViewVisible);\r\n\t\t  document.removeEventListener('keyup', this.closeOnEscapeEvent);\r\n\t\t  document.addEventListener('keyup', this.closeOnEscapeEvent);\r\n\t\t  this.pswpElement.removeEventListener('click', this.outerCloseEvent);\r\n\t\t  this.pswpElement.removeEventListener('animationend', this.closeOnAnimationEndEvent);\r\n\t\t  document.removeEventListener('submit', this.prevent3dModelSubmitEvent);\r\n  \r\n\t\t  this.deferredMedias.forEach((deferredMedia) => {\r\n\t\t\t// Remove the 'loaded' attribute so the videos will can load properly when we reopening the quickview\r\n\t\t\tdeferredMedia.removeAttribute(attributes$t.loaded);\r\n\t\t  });\r\n\t\t});\r\n  \r\n\t\tdocument.addEventListener('keyup', this.closeOnEscapeEvent);\r\n\t\tdocument.addEventListener('theme:cart:added', () => {\r\n\t\t  if (this.pswpElement.classList.contains(classes$y.popupQuickView)) {\r\n\t\t\tthis.pswpElement.classList.add(classes$y.popupQuickViewAnimateOut);\r\n\t\t  }\r\n\t\t});\r\n  \r\n\t\tthis.animateInQuickview();\r\n  \r\n\t\t// 'Shop the look' thumbnails nav\r\n\t\tthis.initShopTheLookListeners();\r\n\t  }\r\n  \r\n\t  initShopTheLookListeners() {\r\n\t\tthis.buttonsShopTheLookThumb?.forEach((button) => {\r\n\t\t  button.addEventListener('click', (event) => {\r\n\t\t\tevent.preventDefault();\r\n  \r\n\t\t\tconst thumb = event.target.matches(selectors$J.shopTheLookThumb) ? event.target : event.target.closest(selectors$J.shopTheLookThumb);\r\n\t\t\tconst holder = this.pswpElement.querySelector(`[${attributes$t.hotspot}=\"${thumb.getAttribute(attributes$t.hotspotRef)}\"]`);\r\n  \r\n\t\t\tif (thumb.classList.contains(classes$y.isActive) || !holder) return;\r\n  \r\n\t\t\t// Handle sliders\r\n\t\t\tif (this.flkty.length > 0) {\r\n\t\t\t  requestAnimationFrame(() => {\r\n\t\t\t\tthis.flkty.forEach((slider) => {\r\n\t\t\t\t  slider.resize();\r\n  \r\n\t\t\t\t  const allMediaItems = this.quickViewInner.querySelectorAll(selectors$J.productMediaWrapper);\r\n  \r\n\t\t\t\t  // Pause all media\r\n\t\t\t\t  if (allMediaItems.length) {\r\n\t\t\t\t\tallMediaItems.forEach((media) => {\r\n\t\t\t\t\t  media.dispatchEvent(new CustomEvent('theme:media:hidden'), {bubbles: true});\r\n\t\t\t\t\t  media.classList.add(classes$y.mediaHidden);\r\n\t\t\t\t\t});\r\n\t\t\t\t  }\r\n\t\t\t\t});\r\n\t\t\t  });\r\n\t\t\t}\r\n  \r\n\t\t\t// Active Quick View item class toggle\r\n\t\t\tholder.classList.add(classes$y.isActive);\r\n  \r\n\t\t\tthis.quickViewItemHolders.forEach((element) => {\r\n\t\t\t  if (element !== holder) {\r\n\t\t\t\telement.classList.remove(classes$y.isActive);\r\n\t\t\t  }\r\n\t\t\t});\r\n\t\t  });\r\n\t\t});\r\n\t  }\r\n  \r\n\t  // Prevents the 3d model buttons submitting the form\r\n\t  prevent3dModelSubmit(event) {\r\n\t\tif (event.submitter.closest(selectors$J.deferredMedia) && event.submitter.closest(selectors$J.productForm)) {\r\n\t\t  event.preventDefault();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  closeQuickviewOnMobile() {\r\n\t\tif (window.innerWidth < window.theme.sizes.large && document.body.classList.contains(classes$y.jsQuickViewVisible)) {\r\n\t\t  this.popup.close();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  animateInQuickview() {\r\n\t\tthis.pswpElement.classList.add(classes$y.popupQuickViewAnimateIn);\r\n  \r\n\t\tthis.quickViewFoot.addEventListener('animationend', (event) => {\r\n\t\t  this.handleAnimatedState(event);\r\n\t\t});\r\n  \r\n\t\t// Mobile\r\n\t\tthis.pswpElement.addEventListener('animationend', (event) => {\r\n\t\t  this.handleAnimatedState(event, true);\r\n\t\t});\r\n\t  }\r\n  \r\n\t  handleAnimatedState(event, isMobileAnimation = false) {\r\n\t\tif (event.animationName == 'quickViewAnimateInUp') {\r\n\t\t  if (isMobileAnimation && window.innerWidth >= window.theme.sizes.small) {\r\n\t\t\t// Checks mobile animation but it's not mobile screen size\r\n\t\t\treturn;\r\n\t\t  }\r\n  \r\n\t\t  this.pswpElement.classList.add(classes$y.popupQuickViewAnimated);\r\n\t\t  this.pswpElement.classList.remove(classes$y.popupQuickViewAnimateIn);\r\n\t\t  document.body.classList.remove(classes$y.jsQuickViewFromCart); // Clear the class that we are adding in quick-view-popup.js when the animation ends\r\n\t\t}\r\n\t  }\r\n  \r\n\t  closePopup(event) {\r\n\t\tevent?.preventDefault();\r\n\t\tconst isNavDrawerOpen = document.body.classList.contains(classes$y.drawerOpen);\r\n  \r\n\t\tif (isNavDrawerOpen) {\r\n\t\t  document.dispatchEvent(new CustomEvent('theme:drawer:closing', {bubbles: true}));\r\n\t\t}\r\n  \r\n\t\tthis.pswpElement.classList.add(classes$y.popupQuickViewAnimateOut); // Adding this class triggers the 'animationend' event which calls closeOnAnimationEndEvent()\r\n  \r\n\t\tif (this.productForms.length > 0) {\r\n\t\t  this.productForms.forEach((form) => {\r\n\t\t\tform.destroy();\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  closeOnAnimationEnd(event) {\r\n\t\tif (event.animationName == 'quickViewAnimateOutRight' || event.animationName == 'quickViewAnimateOutDown') {\r\n\t\t  this.popup.template.classList.remove(classes$y.popupQuickViewAnimateOut, classes$y.popupQuickViewAnimated);\r\n\t\t  this.popup.close();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  closeOnEscape(event) {\r\n\t\tconst isQuickViewVisible = document.body.classList.contains(classes$y.jsQuickViewVisible);\r\n\t\tconst isNotificationVisible = document.body.classList.contains(classes$y.notificationPopupVisible);\r\n  \r\n\t\tif (event.code === theme.keyboardKeys.ESCAPE && isQuickViewVisible && !isNotificationVisible) {\r\n\t\t  this.closePopup(event);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  initProductSlider(item, index) {\r\n\t\tconst slider = item.querySelector(selectors$J.productMediaSlider);\r\n\t\tconst mediaItems = item.querySelectorAll(selectors$J.productMediaWrapper);\r\n  \r\n\t\tif (mediaItems.length > 1) {\r\n\t\t  const itemSlider = new Flickity(slider, {\r\n\t\t\twrapAround: true,\r\n\t\t\tcellAlign: 'left',\r\n\t\t\tpageDots: false,\r\n\t\t\tprevNextButtons: true,\r\n\t\t\tadaptiveHeight: false,\r\n\t\t\tpauseAutoPlayOnHover: false,\r\n\t\t\tselectedAttraction: 0.2,\r\n\t\t\tfriction: 1,\r\n\t\t\tautoPlay: false,\r\n\t\t\ton: {\r\n\t\t\t  ready: () => {\r\n\t\t\t\tslider.setAttribute(attributes$t.tabindex, '-1');\r\n  \r\n\t\t\t\t// This resize should happen when the show animation of the PhotoSwipe starts and after PhotoSwipe adds the custom 'popup--quickview' class with the mainClass option.\r\n\t\t\t\t// This class is changing the slider width with CSS and looks like this is happening after the slider loads which is breaking it. That's why we need to call the resize() method here.\r\n\t\t\t\trequestAnimationFrame(() => {\r\n\t\t\t\t  itemSlider.resize();\r\n\t\t\t\t});\r\n\t\t\t  },\r\n\t\t\t  settle: () => {\r\n\t\t\t\tconst currentSlide = itemSlider.selectedElement;\r\n\t\t\t\tconst mediaId = currentSlide.getAttribute(attributes$t.mediaId);\r\n  \r\n\t\t\t\tcurrentSlide.setAttribute(attributes$t.tabindex, '0');\r\n  \r\n\t\t\t\titemSlider.cells.forEach((slide) => {\r\n\t\t\t\t  if (slide.element === currentSlide) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t  }\r\n  \r\n\t\t\t\t  slide.element.setAttribute(attributes$t.tabindex, '-1');\r\n\t\t\t\t});\r\n  \r\n\t\t\t\tthis.switchMedia(item, mediaId);\r\n\t\t\t  },\r\n\t\t\t},\r\n\t\t  });\r\n  \r\n\t\t  this.flkty.push(itemSlider);\r\n  \r\n\t\t  // Toggle flickity draggable functionality based on media play/pause state\r\n\t\t  if (mediaItems.length) {\r\n\t\t\tmediaItems.forEach((element) => {\r\n\t\t\t  element.addEventListener('theme:media:play', () => {\r\n\t\t\t\tthis.handleDraggable(this.flkty[index], false);\r\n\t\t\t\telement.closest(selectors$J.productMediaSlider).classList.add(classes$y.hasMediaActive);\r\n\t\t\t  });\r\n  \r\n\t\t\t  element.addEventListener('theme:media:pause', () => {\r\n\t\t\t\tthis.handleDraggable(this.flkty[index], true);\r\n\t\t\t\telement.closest(selectors$J.productMediaSlider).classList.remove(classes$y.hasMediaActive);\r\n\t\t\t  });\r\n\t\t\t});\r\n\t\t  }\r\n  \r\n\t\t  // iOS smooth scrolling fix\r\n\t\t  flickitySmoothScrolling(slider);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  switchMedia(item, mediaId) {\r\n\t\tconst allMediaItems = this.quickViewInner.querySelectorAll(selectors$J.productMediaWrapper);\r\n\t\tconst selectedMedia = item.querySelector(`${selectors$J.productMediaWrapper}[${attributes$t.mediaId}=\"${mediaId}\"]`);\r\n\t\tconst isFocusEnabled = !document.body.classList.contains(classes$y.noOutline);\r\n  \r\n\t\t// Pause other media\r\n\t\tif (allMediaItems.length) {\r\n\t\t  allMediaItems.forEach((media) => {\r\n\t\t\tmedia.dispatchEvent(new CustomEvent('theme:media:hidden'), {bubbles: true});\r\n\t\t\tmedia.classList.add(classes$y.mediaHidden);\r\n\t\t  });\r\n\t\t}\r\n  \r\n\t\tif (isFocusEnabled) {\r\n\t\t  selectedMedia.focus();\r\n\t\t}\r\n  \r\n\t\tselectedMedia.closest(selectors$J.productMediaSlider).classList.remove(classes$y.hasMediaActive);\r\n\t\tselectedMedia.classList.remove(classes$y.mediaHidden);\r\n\t\tselectedMedia.dispatchEvent(new CustomEvent('theme:media:visible'), {bubbles: true});\r\n  \r\n\t\t// If media is not loaded, trigger poster button click to load it\r\n\t\tconst deferredMedia = selectedMedia.querySelector(selectors$J.deferredMedia);\r\n\t\tif (deferredMedia && deferredMedia.getAttribute(attributes$t.loaded) !== 'true') {\r\n\t\t  selectedMedia.querySelector(selectors$J.deferredMediaButton).dispatchEvent(new Event('click'));\r\n\t\t}\r\n\t  }\r\n  \r\n\t  initProductVideo(item) {\r\n\t\tconst videos = new ProductVideo(item);\r\n  \r\n\t\tthis.videos.push(videos);\r\n\t  }\r\n  \r\n\t  initProductModel(item) {\r\n\t\tconst sectionId = item.getAttribute(attributes$t.sectionId);\r\n\t\tconst modelItems = item.querySelectorAll(selectors$J.productModel);\r\n  \r\n\t\tif (modelItems.length) {\r\n\t\t  modelItems.forEach((element) => {\r\n\t\t\ttheme.ProductModel.init(element, sectionId);\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  initShopifyXrLaunch(item) {\r\n\t\tdocument.addEventListener('shopify_xr_launch', () => {\r\n\t\t  const currentMedia = item.querySelector(`${selectors$J.productModel}:not(.${classes$y.mediaHidden})`);\r\n\t\t  currentMedia.dispatchEvent(new CustomEvent('xrLaunch'));\r\n\t\t});\r\n\t  }\r\n  \r\n\t  addFormSuffix(item) {\r\n\t\tconst sectionId = item.getAttribute(attributes$t.sectionId);\r\n\t\tconst productObject = JSON.parse(item.querySelector(selectors$J.productJSON).innerHTML);\r\n  \r\n\t\tconst formSuffix = `${sectionId}-${productObject.handle}`;\r\n\t\tconst productForm = item.querySelector(selectors$J.productForm);\r\n\t\tconst addToCart = item.querySelector(selectors$J.addToCart);\r\n  \r\n\t\tproductForm.setAttribute(attributes$t.id, ids.addToCartFormId + formSuffix);\r\n\t\taddToCart.setAttribute(attributes$t.id, ids.addToCartId + formSuffix);\r\n\t  }\r\n\t}\r\n  \r\n\tconst settings$4 = {\r\n\t  unlockScrollDelay: 400,\r\n\t};\r\n  \r\n\tconst selectors$I = {\r\n\t  popupContainer: '.pswp',\r\n\t  popupCloseBtn: '.pswp__custom-close',\r\n\t  popupIframe: 'iframe, video',\r\n\t  popupCustomIframe: '.pswp__custom-iframe',\r\n\t  popupThumbs: '.pswp__thumbs',\r\n\t  popupButtons: '.pswp__button, .pswp__caption-close',\r\n\t  product: '[data-product]',\r\n\t  productJSON: '[data-product-json]',\r\n\t};\r\n  \r\n\tconst classes$x = {\r\n\t  current: 'is-current',\r\n\t  customLoader: 'pswp--custom-loader',\r\n\t  customOpen: 'pswp--custom-opening',\r\n\t  loader: 'pswp__loader',\r\n\t  opened: 'pswp--open',\r\n\t  popupCloseButton: 'pswp__button--close',\r\n\t  notificationPopup: 'pswp--notification',\r\n\t  quickviewPopup: 'popup-quick-view',\r\n\t  isCartDrawerOpen: 'js-drawer-open-cart',\r\n\t  quickViewAnimateOut: 'popup-quick-view--animate-out',\r\n\t};\r\n  \r\n\tconst attributes$s = {\r\n\t  dataOptionClasses: 'data-pswp-option-classes',\r\n\t  dataVideoType: 'data-video-type',\r\n\t};\r\n  \r\n\tconst loaderHTML = `<div class=\"${classes$x.loader}\"><div class=\"loader loader--image\"><div class=\"loader__image\"></div></div></div>`;\r\n  \r\n\tclass LoadPhotoswipe {\r\n\t  constructor(items, options = '', templateIndex = 0, triggerButton = null) {\r\n\t\tthis.items = items;\r\n\t\tthis.triggerBtn = triggerButton;\r\n\t\tthis.pswpElements = document.querySelectorAll(selectors$I.popupContainer);\r\n\t\tthis.pswpElement = this.pswpElements[templateIndex];\r\n\t\tthis.popup = null;\r\n\t\tthis.popupThumbs = null;\r\n\t\tthis.popupThumbsContainer = this.pswpElement.querySelector(selectors$I.popupThumbs);\r\n\t\tthis.closeBtn = this.pswpElement.querySelector(selectors$I.popupCloseBtn);\r\n\t\tconst defaultOptions = {\r\n\t\t  history: false,\r\n\t\t  focus: false,\r\n\t\t  mainClass: '',\r\n\t\t};\r\n\t\tthis.options = options !== '' ? options : defaultOptions;\r\n\t\tthis.onCloseCallback = () => this.onClose();\r\n\t\tthis.dispatchPopupInitEventCallback = () => this.dispatchPopupInitEvent();\r\n\t\tthis.setCurrentThumbCallback = () => this.setCurrentThumb();\r\n\t\tthis.a11y = a11y;\r\n  \r\n\t\tthis.init();\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tdocument.dispatchEvent(new CustomEvent('theme:scroll:lock', {bubbles: true}));\r\n  \r\n\t\tthis.pswpElement.classList.add(classes$x.customOpen);\r\n  \r\n\t\tthis.initLoader();\r\n  \r\n\t\tloadScript({url: window.theme.assets.photoswipe})\r\n\t\t  .then(() => this.loadPopup())\r\n\t\t  .catch((e) => console.error(e));\r\n\t  }\r\n  \r\n\t  initLoader() {\r\n\t\tif (this.pswpElement.classList.contains(classes$x.customLoader) && this.options !== '' && this.options.mainClass) {\r\n\t\t  this.pswpElement.setAttribute(attributes$s.dataOptionClasses, this.options.mainClass);\r\n\t\t  let loaderElem = document.createElement('div');\r\n\t\t  loaderElem.innerHTML = loaderHTML;\r\n\t\t  loaderElem = loaderElem.firstChild;\r\n\t\t  this.pswpElement.appendChild(loaderElem);\r\n\t\t} else {\r\n\t\t  this.pswpElement.setAttribute(attributes$s.dataOptionClasses, '');\r\n\t\t}\r\n\t  }\r\n  \r\n\t  loadPopup() {\r\n\t\tconst PhotoSwipe = window.themePhotoswipe.PhotoSwipe.default;\r\n\t\tconst PhotoSwipeUI = window.themePhotoswipe.PhotoSwipeUI.default;\r\n  \r\n\t\tif (this.pswpElement.classList.contains(classes$x.customLoader)) {\r\n\t\t  this.pswpElement.classList.remove(classes$x.customLoader);\r\n\t\t}\r\n  \r\n\t\tthis.pswpElement.classList.remove(classes$x.customOpen);\r\n  \r\n\t\tthis.popup = new PhotoSwipe(this.pswpElement, PhotoSwipeUI, this.items, this.options);\r\n  \r\n\t\tthis.popup.listen('afterInit', this.dispatchPopupInitEventCallback);\r\n\t\tthis.popup.listen('imageLoadComplete', this.setCurrentThumbCallback);\r\n\t\tthis.popup.listen('beforeChange', this.setCurrentThumbCallback);\r\n\t\tthis.popup.listen('close', this.onCloseCallback);\r\n  \r\n\t\tthis.popup.init();\r\n  \r\n\t\tthis.initPopupCallback();\r\n\t  }\r\n  \r\n\t  initPopupCallback() {\r\n\t\tif (this.isVideo) {\r\n\t\t  this.hideUnusedButtons();\r\n\t\t}\r\n  \r\n\t\tthis.initVideo();\r\n\t\tthis.thumbsActions();\r\n  \r\n\t\tthis.a11y.trapFocus({\r\n\t\t  container: this.pswpElement,\r\n\t\t});\r\n  \r\n\t\tif (this.pswpElement.classList.contains(classes$x.quickviewPopup)) {\r\n\t\t  new LoadQuickview(this.popup, this.pswpElement);\r\n\t\t}\r\n  \r\n\t\tif (this.pswpElement.classList.contains(classes$x.notificationPopup)) {\r\n\t\t  new LoadNotification(this.popup, this.pswpElement);\r\n\t\t}\r\n  \r\n\t\tthis.closePopup = () => {\r\n\t\t  if (this.pswpElement.classList.contains(classes$x.quickviewPopup)) {\r\n\t\t\tthis.pswpElement.classList.add(classes$x.quickViewAnimateOut); // Close the Quickview popup accordingly\r\n\t\t  } else {\r\n\t\t\tthis.popup.close();\r\n\t\t  }\r\n\t\t};\r\n  \r\n\t\tif (this.closeBtn) {\r\n\t\t  this.closeBtn.addEventListener('click', this.closePopup);\r\n\t\t}\r\n  \r\n\t\t// Close Quick view popup when product added to cart\r\n\t\tdocument.addEventListener('theme:cart:added', this.closePopup);\r\n\t  }\r\n  \r\n\t  dispatchPopupInitEvent() {\r\n\t\tif (this.triggerBtn) {\r\n\t\t  this.triggerBtn.dispatchEvent(new CustomEvent('theme:popup:init', {bubbles: true}));\r\n\t\t}\r\n\t  }\r\n  \r\n\t  initVideo() {\r\n\t\tconst videoContainer = this.pswpElement.querySelector(selectors$I.popupCustomIframe);\r\n\t\tif (videoContainer) {\r\n\t\t  const videoType = videoContainer.getAttribute(attributes$s.dataVideoType);\r\n\t\t  this.isVideo = true;\r\n  \r\n\t\t  if (videoType == 'youtube') {\r\n\t\t\tnew LoadVideoYT(videoContainer.parentElement);\r\n\t\t  } else if (videoType == 'vimeo') {\r\n\t\t\tnew LoadVideoVimeo(videoContainer.parentElement);\r\n\t\t  }\r\n\t\t}\r\n\t  }\r\n  \r\n\t  thumbsActions() {\r\n\t\tif (this.popupThumbsContainer && this.popupThumbsContainer.firstChild) {\r\n\t\t  this.popupThumbsContainer.addEventListener('wheel', (e) => this.stopDisabledScroll(e));\r\n\t\t  this.popupThumbsContainer.addEventListener('mousewheel', (e) => this.stopDisabledScroll(e));\r\n\t\t  this.popupThumbsContainer.addEventListener('DOMMouseScroll', (e) => this.stopDisabledScroll(e));\r\n  \r\n\t\t  this.popupThumbs = this.pswpElement.querySelectorAll(`${selectors$I.popupThumbs} > *`);\r\n\t\t  this.popupThumbs.forEach((element, i) => {\r\n\t\t\telement.addEventListener('click', (e) => {\r\n\t\t\t  e.preventDefault();\r\n\t\t\t  element.parentElement.querySelector(`.${classes$x.current}`).classList.remove(classes$x.current);\r\n\t\t\t  element.classList.add(classes$x.current);\r\n\t\t\t  this.popup.goTo(i);\r\n\t\t\t});\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  hideUnusedButtons() {\r\n\t\tconst buttons = this.pswpElement.querySelectorAll(selectors$I.popupButtons);\r\n\t\tbuttons.forEach((element) => {\r\n\t\t  if (!element.classList.contains(classes$x.popupCloseButton)) {\r\n\t\t\telement.style.display = 'none';\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  stopDisabledScroll(e) {\r\n\t\te.stopPropagation();\r\n\t  }\r\n  \r\n\t  onClose() {\r\n\t\tconst popupIframe = this.pswpElement.querySelector(selectors$I.popupIframe);\r\n\t\tif (popupIframe) {\r\n\t\t  popupIframe.parentNode.removeChild(popupIframe);\r\n\t\t}\r\n  \r\n\t\tif (this.popupThumbsContainer && this.popupThumbsContainer.firstChild) {\r\n\t\t  while (this.popupThumbsContainer.firstChild) {\r\n\t\t\tthis.popupThumbsContainer.removeChild(this.popupThumbsContainer.firstChild);\r\n\t\t  }\r\n\t\t}\r\n  \r\n\t\tthis.pswpElement.setAttribute(attributes$s.dataOptionClasses, '');\r\n\t\tconst loaderElem = this.pswpElement.querySelector(`.${classes$x.loader}`);\r\n\t\tif (loaderElem) {\r\n\t\t  this.pswpElement.removeChild(loaderElem);\r\n\t\t}\r\n  \r\n\t\tif (!document.body.classList.contains(classes$x.isCartDrawerOpen)) {\r\n\t\t  this.a11y.removeTrapFocus();\r\n\t\t}\r\n  \r\n\t\tdocument.removeEventListener('theme:cart:added', this.closePopup);\r\n  \r\n\t\t// Unlock scroll if only cart drawer is closed and there are no more popups opened\r\n\t\tsetTimeout(() => {\r\n\t\t  const recentlyOpenedPopups = this.recentlyOpenedPopupsCount();\r\n\t\t  const isCartDrawerOpen = document.body.classList.contains(classes$x.isCartDrawerOpen);\r\n  \r\n\t\t  if (recentlyOpenedPopups === 0 && !isCartDrawerOpen) {\r\n\t\t\tdocument.dispatchEvent(new CustomEvent('theme:scroll:unlock', {bubbles: true}));\r\n\t\t  }\r\n\t\t}, settings$4.unlockScrollDelay);\r\n\t  }\r\n  \r\n\t  recentlyOpenedPopupsCount() {\r\n\t\tlet count = 0;\r\n  \r\n\t\tthis.pswpElements.forEach((popup) => {\r\n\t\t  const isOpened = popup.classList.contains(classes$x.opened);\r\n  \r\n\t\t  if (isOpened) {\r\n\t\t\tcount += 1;\r\n\t\t  }\r\n\t\t});\r\n  \r\n\t\treturn count;\r\n\t  }\r\n  \r\n\t  setCurrentThumb() {\r\n\t\tconst hasThumbnails = this.popupThumbsContainer && this.popupThumbsContainer.firstChild;\r\n  \r\n\t\tif (hasThumbnails) return;\r\n  \r\n\t\tconst lastCurrentThumb = this.pswpElement.querySelector(`${selectors$I.popupThumbs} > .${classes$x.current}`);\r\n\t\tif (lastCurrentThumb) {\r\n\t\t  lastCurrentThumb.classList.remove(classes$x.current);\r\n\t\t}\r\n  \r\n\t\tif (!this.popupThumbs) {\r\n\t\t  return;\r\n\t\t}\r\n\t\tconst currentThumb = this.popupThumbs[this.popup.getCurrentIndex()];\r\n\t\tcurrentThumb.classList.add(classes$x.current);\r\n\t\tthis.scrollThumbs(currentThumb);\r\n\t  }\r\n  \r\n\t  scrollThumbs(currentThumb) {\r\n\t\tconst thumbsContainerLeft = this.popupThumbsContainer.scrollLeft;\r\n\t\tconst thumbsContainerWidth = this.popupThumbsContainer.offsetWidth;\r\n\t\tconst thumbsContainerPos = thumbsContainerLeft + thumbsContainerWidth;\r\n\t\tconst currentThumbLeft = currentThumb.offsetLeft;\r\n\t\tconst currentThumbWidth = currentThumb.offsetWidth;\r\n\t\tconst currentThumbPos = currentThumbLeft + currentThumbWidth;\r\n  \r\n\t\tif (thumbsContainerPos <= currentThumbPos || thumbsContainerPos > currentThumbLeft) {\r\n\t\t  const currentThumbMarginLeft = parseInt(window.getComputedStyle(currentThumb).marginLeft);\r\n\t\t  this.popupThumbsContainer.scrollTo({\r\n\t\t\ttop: 0,\r\n\t\t\tleft: currentThumbLeft - currentThumbMarginLeft,\r\n\t\t\tbehavior: 'smooth',\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tconst settings$3 = {\r\n\t  templateIndex: 0,\r\n\t};\r\n  \r\n\tconst selectors$H = {\r\n\t  buttonQuickView: '[data-button-quick-view]',\r\n\t  quickViewItemsTemplate: '[data-quick-view-items-template]',\r\n\t  cartDrawer: '[data-cart-drawer]',\r\n\t  shopTheLookQuickViewButton: '[data-shop-the-look-quick-view-button]',\r\n\t  shopTheLookThumb: '[data-shop-the-look-thumb]',\r\n\t  quickViewItemHolder: '[data-quick-view-item-holder]',\r\n\t};\r\n  \r\n\tconst classes$w = {\r\n\t  loading: 'is-loading',\r\n\t  isActive: 'is-active',\r\n\t  quickViewFromCart: 'js-quick-view-from-cart',\r\n\t  mainClass: 'popup-quick-view pswp--not-close-btn',\r\n\t  shopTheLookPopupClass: 'popup-quick-view popup-quick-view--shop-the-look pswp--not-close-btn',\r\n\t};\r\n  \r\n\tconst attributes$r = {\r\n\t  loaded: 'data-loaded',\r\n\t  handle: 'data-handle',\r\n\t  variantId: 'data-variant-id',\r\n\t  shopTheLookQuickView: 'data-shop-the-look-quick-view',\r\n\t  hotspot: 'data-hotspot',\r\n\t  quickButtonInit: 'data-initialized',\r\n\t};\r\n  \r\n\tconst options = {\r\n\t  history: false,\r\n\t  focus: false,\r\n\t  mainClass: classes$w.mainClass,\r\n\t  showHideOpacity: false, // we need that off to control the animation ourselves\r\n\t  closeOnVerticalDrag: false,\r\n\t  closeOnScroll: false,\r\n\t  modal: false,\r\n\t  escKey: false,\r\n\t};\r\n  \r\n\t/**\r\n\t * TODO:\r\n\t * \u5FEB\u901F\u8D2D\u4E70  quick view / quick buy\r\n\t */\r\n\tclass QuickViewPopup {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t\tthis.a11y = a11y;\r\n\t\tthis.buttonsQuickView = this.container.querySelectorAll(selectors$H.buttonQuickView);  // \u5FEB\u901F\u8D2D\u4E70\u6309\u94AE\r\n\t\tthis.buttonsShopTheLookQuickView = this.container.querySelectorAll(selectors$H.shopTheLookQuickViewButton);\r\n\t\tthis.popupInitCallback = (trigger) => this.popupInit(trigger);\r\n  \r\n\t\tthis.buttonsQuickView?.forEach((button) => {\r\n\t\t  if (!button.hasAttribute(attributes$r.quickButtonInit)) {\r\n\t\t\t// \u5FEB\u901F\u8D2D\u4E70\u7684\u70B9\u51FB\u4E8B\u4EF6\r\n\t\t\tbutton.addEventListener('click', (event) => this.initPhotoswipe(event));\r\n\t\t\tbutton.addEventListener('theme:popup:init', () => {\r\n\t\t\t  button.classList.remove(classes$w.loading);\r\n  \r\n\t\t\t  if (button.hasAttribute(attributes$r.shopTheLookQuickView)) {\r\n\t\t\t\tthis.popupInitCallback(button);\r\n\t\t\t  }\r\n\t\t\t});\r\n\t\t\tbutton.setAttribute(attributes$r.quickButtonInit, '');\r\n\t\t  }\r\n\t\t});\r\n  \r\n\t\tthis.buttonsShopTheLookQuickView?.forEach((button) => {\r\n\t\t  button.addEventListener('click', () => {\r\n\t\t\tthis.buttonsQuickView[0]?.dispatchEvent(new Event('click'));\r\n\t\t  });\r\n\t\t});\r\n\t  }\r\n  \r\n\t  popupInit(trigger) {\r\n\t\t// Handle active Quick View item\r\n\t\tconst holder = this.loadPhotoswipe.pswpElement.querySelector(`[${attributes$r.hotspot}=\"${trigger.getAttribute(attributes$r.hotspot)}\"]`);\r\n\t\tconst quickViewItemHolders = this.loadPhotoswipe.pswpElement.querySelectorAll(selectors$H.quickViewItemHolder);\r\n  \r\n\t\tholder.classList.add(classes$w.isActive);\r\n  \r\n\t\tquickViewItemHolders.forEach((element) => {\r\n\t\t  if (element !== holder) {\r\n\t\t\telement.classList.remove(classes$w.isActive);\r\n\t\t  }\r\n\t\t});\r\n  \r\n\t\t// Handle pointer events\r\n\t\tthis.toggleQuickViewButtonsLoadingClasses(true);\r\n\t\tthis.toggleQuickViewThumbsLoadingClasses(true);\r\n  \r\n\t\tconst onAnimationInEnd = (event) => {\r\n\t\t  // Animation on open\r\n\t\t  if (event.animationName === 'quickViewAnimateInUp') {\r\n\t\t\trequestAnimationFrame(() => {\r\n\t\t\t  this.toggleQuickViewThumbsLoadingClasses(false);\r\n\t\t\t});\r\n\t\t  }\r\n  \r\n\t\t  // Animation on close\r\n\t\t  if (event.animationName === 'quickViewAnimateOutDown') {\r\n\t\t\tthis.loadPhotoswipe.pswpElement.removeEventListener('animationend', onAnimationInEnd);\r\n\t\t  }\r\n\t\t};\r\n  \r\n\t\tthis.loadPhotoswipe.pswpElement.addEventListener('animationend', onAnimationInEnd);\r\n  \r\n\t\tthis.loadPhotoswipe?.popup?.listen('destroy', () => {\r\n\t\t  this.toggleQuickViewButtonsLoadingClasses(false);\r\n\t\t  this.toggleQuickViewThumbsLoadingClasses(false);\r\n\t\t});\r\n\t  }\r\n  \r\n\t  toggleQuickViewButtonsLoadingClasses(isLoading = true) {\r\n\t\tif (isLoading) {\r\n\t\t  this.buttonsQuickView?.forEach((element) => {\r\n\t\t\telement.classList.add(classes$w.loading);\r\n\t\t  });\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tthis.buttonsQuickView?.forEach((element) => {\r\n\t\t  element.classList.remove(classes$w.loading);\r\n\t\t});\r\n\t  }\r\n  \r\n\t  toggleQuickViewThumbsLoadingClasses(isLoading = true) {\r\n\t\tthis.buttonsShopTheLookThumb = this.loadPhotoswipe?.pswpElement.querySelectorAll(selectors$H.shopTheLookThumb);\r\n  \r\n\t\tif (isLoading) {\r\n\t\t  this.buttonsShopTheLookThumb?.forEach((element) => {\r\n\t\t\telement.classList.add(classes$w.loading);\r\n\t\t  });\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tthis.buttonsShopTheLookThumb?.forEach((element) => {\r\n\t\t  element.classList.remove(classes$w.loading);\r\n\t\t});\r\n\t  }\r\n  \r\n\t  initPhotoswipe(event) {\r\n\t\tevent.preventDefault();\r\n  \r\n\t\tconst button = event.target.matches(selectors$H.buttonQuickView) ? event.target : event.target.closest(selectors$H.buttonQuickView);\r\n\t\tconst isMobile = window.innerWidth < theme.sizes.small;\r\n\t\tlet quickViewVariant = '';\r\n\t\tlet isShopTheLookPopupTrigger = false;\r\n  \r\n\t\tif (button.hasAttribute(attributes$r.shopTheLookQuickView)) {\r\n\t\t  if (!isMobile) return;\r\n\t\t  isShopTheLookPopupTrigger = true;\r\n\t\t}\r\n  \r\n\t\toptions.mainClass = classes$w.mainClass;\r\n\t\tbutton.classList.add(classes$w.loading);\r\n  \r\n\t\t// Add class js-quick-view-from-cart to change the default Quick view animation\r\n\t\tif (button.closest(selectors$H.cartDrawer)) {\r\n\t\t  document.body.classList.add(classes$w.quickViewFromCart);\r\n\t\t}\r\n  \r\n\t\t// Set the trigger element before calling trapFocus\r\n\t\tthis.a11y.state.trigger = button;\r\n  \r\n\t\tif (button.hasAttribute(attributes$r.variantId)) {\r\n\t\t  quickViewVariant = `&variant=${button.getAttribute(attributes$r.variantId)}`;\r\n\t\t}\r\n  \r\n\t\tconst productUrl = `${theme.routes.root}products/${button.getAttribute(attributes$r.handle)}?section_id=api-quickview${quickViewVariant}`;\r\n  \r\n\t\tif (isShopTheLookPopupTrigger) {\r\n\t\t  options.mainClass = classes$w.shopTheLookPopupClass;\r\n  \r\n\t\t  this.buttonsQuickView.forEach((element) => {\r\n\t\t\telement.classList.add(classes$w.loading);\r\n\t\t  });\r\n  \r\n\t\t  const XMLS = new XMLSerializer();\r\n\t\t  const quickViewItemsTemplate = this.container.querySelector(selectors$H.quickViewItemsTemplate).content.firstElementChild.cloneNode(true);\r\n  \r\n\t\t  const itemsData = XMLS.serializeToString(quickViewItemsTemplate);\r\n  \r\n\t\t  this.loadPhotoswipeWithTemplate(itemsData, button);\r\n\t\t} else {\r\n\t\t  this.loadPhotoswipeFromFetch(productUrl, button);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  loadPhotoswipeWithTemplate(data, button) {\r\n\t\tconst items = [\r\n\t\t  {\r\n\t\t\thtml: data,\r\n\t\t  },\r\n\t\t];\r\n  \r\n\t\tthis.loadPhotoswipe = new LoadPhotoswipe(items, options, settings$3.templateIndex, button);\r\n\t  }\r\n  \r\n  \r\n\t  /**\r\n\t   * TODO:\r\n\t   * \u56FE\u7247\u52A0\u8F7D\uFF1F\r\n\t   * @param {*} url \r\n\t   * @param {*} button \r\n\t   */\r\n\t  loadPhotoswipeFromFetch(url, button) {  // fetch\u8BF7\u6C42, Promise\u5F02\u6B65\u4E0D\u9700\u8981\u56DE\u8C03\u51FD\u6570\u7684\u8BF7\u6C42\r\n\t\tfetch(url)\r\n\t\t  .then((response) => {\r\n\t\t\treturn response.text();\r\n\t\t  })\r\n\t\t  .then((data) => {\r\n\t\t\tconst items = [\r\n\t\t\t  {\r\n\t\t\t\thtml: data,\r\n\t\t\t  },\r\n\t\t\t];\r\n  \r\n\t\t\tthis.loadPhotoswipe = new LoadPhotoswipe(items, options, settings$3.templateIndex, button);\r\n\t\t  })\r\n\t\t  .catch((error) => console.log('error: ', error));\r\n\t  }\r\n\t}\r\n  \r\n\tconst settings$2 = {\r\n\t  cartDrawerEnabled: window.theme.settings.cartType === 'drawer',\r\n\t  timers: {\r\n\t\taddProductTimeout: 1000,\r\n\t  },\r\n\t  animations: {\r\n\t\tdata: 'data-aos',\r\n\t\tmethod: 'fade-up',\r\n\t  },\r\n\t};\r\n  \r\n\tconst selectors$G = {\r\n\t  outerSection: '[data-section-id]',\r\n\t  aos: '[data-aos]',\r\n\t  additionalCheckoutButtons: '[data-additional-checkout-button]',\r\n\t  apiContent: '[data-api-content]',\r\n\t  apiLineItems: '[data-api-line-items]',\r\n\t  apiUpsellItems: '[data-api-upsell-items]',\r\n\t  apiCartPrice: '[data-api-cart-price]',\r\n\t  buttonAddToCart: '[data-add-to-cart]',\r\n\t  upsellButtonByHandle: '[data-handle]',\r\n\t  cartCloseError: '[data-cart-error-close]',\r\n\t  cartDrawer: '[data-cart-drawer]',\r\n\t  cartDrawerTemplate: '[data-cart-drawer-template]',\r\n\t  cartDrawerToggle: '[data-cart-drawer-toggle]',\r\n\t  cartDrawerBody: '[data-cart-drawer-body]',\r\n\t  cartErrors: '[data-cart-errors]',\r\n\t  cartForm: '[data-cart-form]',\r\n\t  cartTermsCheckbox: '[data-cart-acceptance-checkbox]',\r\n\t  cartCheckoutButtonWrapper: '[data-cart-checkout-buttons]',\r\n\t  cartCheckoutButton: '[data-cart-checkout-button]',\r\n\t  cartItemRemove: '[data-item-remove]',\r\n\t  cartItemsQty: '[data-cart-items-qty]',\r\n\t  cartTotal: '[data-cart-total]',\r\n\t  cartTotalPrice: '[data-cart-total-price]',\r\n\t  cartMessage: '[data-cart-message]',\r\n\t  cartMessageDefault: '[data-message-default]',\r\n\t  cartPage: '[data-cart-page]',\r\n\t  cartProgress: '[data-cart-message-progress]',\r\n\t  emptyMessage: '[data-empty-message]',\r\n\t  buttonHolder: '[data-foot-holder]',\r\n\t  item: '[data-cart-item]',\r\n\t  itemsHolder: '[data-items-holder]',\r\n\t  itemsWrapper: '[data-items-wrapper]',\r\n\t  formCloseError: '[data-close-error]',\r\n\t  formErrorsContainer: '[data-cart-errors-container]',\r\n\t  upsellHolder: '[data-upsell-holder]',\r\n\t  errorMessage: '[data-error-message]',\r\n\t  termsErrorMessage: '[data-terms-error-message]',\r\n\t  pairProductsHolder: '[data-pair-products-holder]',\r\n\t  pairProducts: '[data-pair-products]',\r\n\t  priceHolder: '[data-cart-price-holder]',\r\n\t  leftToSpend: '[data-left-to-spend]',\r\n\t  quickBuyForm: '[data-quickbuy-form]',\r\n\t  qtyInput: '[data-quantity-field]',\r\n\t  productMediaContainer: '[data-product-media-container]',\r\n\t  formWrapper: '[data-form-wrapper]',\r\n\t  productForm: '[data-product-form]',\r\n\t  popupQuickView: '.popup-quick-view',\r\n\t  popupClose: '[data-popup-close]',\r\n\t  error: '[data-error]',\r\n\t  quickViewOnboarding: '[data-quick-view-onboarding]',\r\n\t  flickityEnabled: '.flickity-enabled',\r\n\t};\r\n  \r\n\tconst classes$v = {\r\n\t  hidden: 'hidden',\r\n\t  added: 'is-added',\r\n\t  isHidden: 'is-hidden',\r\n\t  cartDrawerOpen: 'js-drawer-open-cart',\r\n\t  open: 'is-open',\r\n\t  visible: 'is-visible',\r\n\t  expanded: 'is-expanded',\r\n\t  loading: 'is-loading',\r\n\t  disabled: 'is-disabled',\r\n\t  success: 'is-success',\r\n\t  error: 'has-error',\r\n\t  cartItems: 'cart__toggle--has-items',\r\n\t  variantSoldOut: 'variant--soldout',\r\n\t  removed: 'is-removed',\r\n\t  aosAnimate: 'aos-animate',\r\n\t  updated: 'is-updated',\r\n\t  noOutline: 'no-outline',\r\n\t  productGridImageError: 'product-grid-item__image--error',\r\n\t  contentVisibilityHidden: 'cv-h',\r\n\t};\r\n  \r\n\tconst attributes$q = {\r\n\t  shippingMessageLimit: 'data-limit',\r\n\t  cartMessageValue: 'data-cart-message',\r\n\t  cartTotal: 'data-cart-total',\r\n\t  ariaExpanded: 'aria-expanded',\r\n\t  disabled: 'disabled',\r\n\t  value: 'value',\r\n\t  dataId: 'data-id',\r\n\t  item: 'data-item',\r\n\t  itemIndex: 'data-item-index',\r\n\t  itemTitle: 'data-item-title',\r\n\t  atcTrigger: 'data-atc-trigger',\r\n\t  upsellButton: 'data-upsell-btn',\r\n\t  notificationPopup: 'data-notification-popup',\r\n\t  sectionId: 'data-section-id',\r\n\t};\r\n  \r\n\tlet sections$t = {};\r\n  \r\n\tclass CartDrawer {\r\n\t  constructor() {\r\n\t\tif (window.location.pathname === '/password') {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tthis.init();\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\t// DOM Elements\r\n\t\tthis.cartToggleButtons = document.querySelectorAll(selectors$G.cartDrawerToggle);\r\n\t\tthis.cartPage = document.querySelector(selectors$G.cartPage);\r\n\t\tthis.cartDrawer = document.querySelector(selectors$G.cartDrawer);\r\n\t\tthis.cart = this.cartDrawer || this.cartPage;\r\n  \r\n\t\tthis.cartCount = this.getCartItemCount();\r\n  \r\n\t\tthis.assignArguments();\r\n  \r\n\t\tthis.flktyUpsell = null;\r\n\t\tthis.form = null;\r\n\t\tthis.collapsible = null;\r\n\t\tthis.a11y = a11y;\r\n  \r\n\t\tthis.build = this.build.bind(this);\r\n  \r\n\t\t// AJAX request\r\n\t\tthis.addToCart = this.addToCart.bind(this);\r\n\t\tthis.updateCart = this.updateCart.bind(this);\r\n  \r\n\t\t// Cart events\r\n\t\tthis.openCartDrawer = this.openCartDrawer.bind(this);\r\n\t\tthis.closeCartDrawer = this.closeCartDrawer.bind(this);\r\n\t\tthis.toggleCartDrawer = this.toggleCartDrawer.bind(this);\r\n\t\tthis.formSubmitHandler = throttle(this.formSubmitHandler.bind(this), 50);\r\n\t\tthis.closeCartError = () => {\r\n\t\t  this.cartErrorHolder.classList.remove(classes$v.expanded);\r\n\t\t};\r\n\t\tthis.cartDrawerCloseEvent = null;\r\n  \r\n\t\t// Checking\r\n\t\tthis.hasItemsInCart = this.hasItemsInCart.bind(this);\r\n\t\tthis.isCartPage = Boolean(this.cart && this.cartDrawer === null);\r\n\t\tthis.showAnimations = Boolean(document.body.dataset.animations === 'true');\r\n  \r\n\t\t// Set classes\r\n\t\tthis.toggleClassesOnContainers = this.toggleClassesOnContainers.bind(this);\r\n  \r\n\t\t// Flags\r\n\t\tthis.totalItems = 0;\r\n\t\tthis.isCartDrawerOpen = false;\r\n\t\tthis.isCartDrawerLoaded = false;\r\n\t\tthis.cartDiscounts = 0;\r\n\t\tthis.cartDrawerEnabled = settings$2.cartDrawerEnabled;\r\n\t\tthis.cartAnimationTimer = 0;\r\n\t\tthis.cartUpdateFailed = false;\r\n  \r\n\t\t// Cart Events\r\n\t\tthis.cartEvents();\r\n\t\tthis.cartAddEvent();\r\n\t\tthis.cartDrawerToggleEvents();\r\n  \r\n\t\t// Init quantity for fields\r\n\t\tthis.initQuantity();\r\n  \r\n\t\t// Init collapsible function for the cart accordions\r\n\t\tif (this.buttonHolder) {\r\n\t\t  this.collapsible = new Collapsible(this.buttonHolder);\r\n\t\t}\r\n  \r\n\t\tif (this.isCartPage) {\r\n\t\t  this.renderPairProducts();\r\n\t\t}\r\n  \r\n\t\tdocument.addEventListener('theme:popup:open', this.closeCartDrawer);\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Assign cart constructor arguments on page load or after cart drawer is loaded\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n\t  assignArguments() {\r\n\t\tthis.cartDrawerBody = document.querySelector(selectors$G.cartDrawerBody);\r\n\t\tthis.emptyMessage = document.querySelector(selectors$G.emptyMessage);\r\n\t\tthis.buttonHolder = document.querySelector(selectors$G.buttonHolder);\r\n\t\tthis.itemsHolder = document.querySelector(selectors$G.itemsHolder);\r\n\t\tthis.cartItemsQty = document.querySelector(selectors$G.cartItemsQty);\r\n\t\tthis.itemsWrapper = document.querySelector(selectors$G.itemsWrapper);\r\n\t\tthis.items = document.querySelectorAll(selectors$G.item);\r\n\t\tthis.cartTotal = document.querySelector(selectors$G.cartTotal);\r\n\t\tthis.cartTotalPrice = document.querySelectorAll(selectors$G.cartTotalPrice);\r\n\t\tthis.cartMessage = document.querySelectorAll(selectors$G.cartMessage);\r\n\t\tthis.cartOriginalTotal = document.querySelector(selectors$G.cartOriginalTotal);\r\n\t\tthis.cartErrorHolder = document.querySelector(selectors$G.cartErrors);\r\n\t\tthis.cartCloseErrorMessage = document.querySelector(selectors$G.cartCloseError);\r\n\t\tthis.pairProductsHolder = document.querySelector(selectors$G.pairProductsHolder);\r\n\t\tthis.pairProducts = document.querySelector(selectors$G.pairProducts);\r\n\t\tthis.priceHolder = document.querySelector(selectors$G.priceHolder);\r\n\t\tthis.upsellHolders = document.querySelectorAll(selectors$G.upsellHolder);\r\n\t\tthis.cartTermsCheckbox = document.querySelector(selectors$G.cartTermsCheckbox);\r\n\t\tthis.cartCheckoutButtonWrapper = document.querySelector(selectors$G.cartCheckoutButtonWrapper);\r\n\t\tthis.cartCheckoutButton = document.querySelector(selectors$G.cartCheckoutButton);\r\n\t\tthis.cartForm = document.querySelector(selectors$G.cartForm);\r\n\t\tthis.cartItemCount = 0;\r\n\t\tthis.subtotal = window.theme.subtotal;\r\n\t\tthis.button = null;\r\n  \r\n\t\tif (this.cartMessage.length > 0) {\r\n\t\t  this.cartFreeLimitShipping = Number(this.cartMessage[0].getAttribute(attributes$q.shippingMessageLimit)) * 100 * window.Shopify.currency.rate;\r\n\t\t}\r\n  \r\n\t\tthis.updateProgress();\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Init quantity field functionality\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  initQuantity() {\r\n\t\tthis.items = document.querySelectorAll(selectors$G.item);\r\n  \r\n\t\tthis.items?.forEach((item) => {\r\n\t\t  const quantity = new QuantityCounter(item, true);\r\n  \r\n\t\t  quantity.init();\r\n\t\t  this.cartUpdateEvent(item);\r\n\t\t});\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Custom event who change the cart\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  cartUpdateEvent(item) {\r\n\t\titem.addEventListener('theme:cart:update', (event) => {\r\n\t\t  this.updateCart(\r\n\t\t\t{\r\n\t\t\t  id: event.detail.id,\r\n\t\t\t  quantity: event.detail.quantity,\r\n\t\t\t},\r\n\t\t\titem\r\n\t\t  );\r\n\t\t});\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Cart events\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  cartEvents() {\r\n\t\tconst cartItemRemove = document.querySelectorAll(selectors$G.cartItemRemove);\r\n\t\tthis.totalItems = cartItemRemove.length;\r\n  \r\n\t\tcartItemRemove?.forEach((button) => {\r\n\t\t  const item = button.closest(selectors$G.item);\r\n\t\t  button.addEventListener('click', (event) => {\r\n\t\t\tevent.preventDefault();\r\n  \r\n\t\t\tif (button.classList.contains(classes$v.disabled)) return;\r\n  \r\n\t\t\tthis.updateCart(\r\n\t\t\t  {\r\n\t\t\t\tid: item.getAttribute(attributes$q.dataId),\r\n\t\t\t\tquantity: 0,\r\n\t\t\t  },\r\n\t\t\t  item\r\n\t\t\t);\r\n\t\t  });\r\n\t\t});\r\n  \r\n\t\tif (this.cartCloseErrorMessage) {\r\n\t\t  this.cartCloseErrorMessage.removeEventListener('click', this.closeCartError);\r\n\t\t  this.cartCloseErrorMessage.addEventListener('click', this.closeCartError);\r\n\t\t}\r\n  \r\n\t\tif (this.cartTermsCheckbox) {\r\n\t\t  this.cartTermsCheckbox.removeEventListener('change', this.formSubmitHandler);\r\n\t\t  this.cartCheckoutButtonWrapper.removeEventListener('click', this.formSubmitHandler);\r\n\t\t  this.cartForm.removeEventListener('submit', this.formSubmitHandler);\r\n  \r\n\t\t  this.cartTermsCheckbox.addEventListener('change', this.formSubmitHandler);\r\n\t\t  this.cartCheckoutButtonWrapper.addEventListener('click', this.formSubmitHandler);\r\n\t\t  this.cartForm.addEventListener('submit', this.formSubmitHandler);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Cart event add product to cart\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  cartAddEvent() {\r\n\t\tdocument.addEventListener('click', (event) => {\r\n\t\t  const clickedElement = event.target;\r\n\t\t  const isButtonATC = clickedElement?.matches(selectors$G.buttonAddToCart);\r\n\t\t  const getButtonATC = clickedElement?.closest(selectors$G.buttonAddToCart);\r\n  \r\n\t\t  if (isButtonATC || getButtonATC) {\r\n\t\t\tevent.preventDefault();\r\n  \r\n\t\t\tthis.button = isButtonATC ? clickedElement : getButtonATC;\r\n\t\t\tthis.form = clickedElement.closest('form');\r\n\t\t\tthis.formWrapper = this.button.closest(selectors$G.formWrapper);\r\n\t\t\tconst isVariantSoldOut = this.formWrapper?.classList.contains(classes$v.variantSoldOut);\r\n\t\t\tconst isButtonDisabled = this.button.hasAttribute(attributes$q.disabled);\r\n\t\t\tconst isQuickViewOnboarding = this.button.closest(selectors$G.quickViewOnboarding);\r\n\t\t\tconst hasDataAtcTrigger = this.button.hasAttribute(attributes$q.atcTrigger);\r\n\t\t\tconst hasNotificationPopup = this.button.hasAttribute(attributes$q.notificationPopup);\r\n\t\t\tconst hasFileInput = this.form?.querySelector('[type=\"file\"]');\r\n  \r\n\t\t\tif (isButtonDisabled || hasFileInput || isQuickViewOnboarding) return;\r\n  \r\n\t\t\t// Notification popup\r\n\t\t\tif (isVariantSoldOut && hasNotificationPopup) {\r\n\t\t\t  new NotificationPopup(this.button);\r\n\t\t\t  return;\r\n\t\t\t}\r\n  \r\n\t\t\tif (hasDataAtcTrigger) {\r\n\t\t\t  this.a11y.state.trigger = this.button;\r\n\t\t\t}\r\n  \r\n\t\t\tconst formData = new FormData(this.form);\r\n\t\t\tthis.addToCart(formData);\r\n  \r\n\t\t\t// Hook for cart/add.js event\r\n\t\t\tdocument.dispatchEvent(\r\n\t\t\t  new CustomEvent('theme:cart:add', {\r\n\t\t\t\tbubbles: true,\r\n\t\t\t\tdetail: {\r\n\t\t\t\t  selector: clickedElement,\r\n\t\t\t\t},\r\n\t\t\t  })\r\n\t\t\t);\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Get response from the cart\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  getCart() {\r\n\t\t// Render cart drawer if it exists but it's not loaded yet\r\n\t\tif (this.cartDrawer && !this.isCartDrawerLoaded) {\r\n\t\t  const alwaysOpen = false;\r\n\t\t  this.renderCartDrawer(alwaysOpen);\r\n\t\t}\r\n  \r\n\t\tfetch(theme.routes.cart_url + '?section_id=api-cart-items')\r\n\t\t  .then(this.handleErrors)\r\n\t\t  .then((response) => response.text())\r\n\t\t  .then((response) => {\r\n\t\t\tconst element = document.createElement('div');\r\n\t\t\telement.innerHTML = response;\r\n  \r\n\t\t\tconst cleanResponse = element.querySelector(selectors$G.apiContent);\r\n\t\t\tthis.build(cleanResponse);\r\n\t\t  })\r\n\t\t  .catch((error) => console.log(error));\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Add item(s) to the cart and show the added item(s)\r\n\t   *\r\n\t   * @param   {String}  data\r\n\t   * @param   {DOM Element}  button\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  addToCart(data) {\r\n\t\tif (this.cartDrawerEnabled && this.button) {\r\n\t\t  this.button.classList.add(classes$v.loading);\r\n\t\t  this.button.setAttribute(attributes$q.disabled, true);\r\n\t\t}\r\n  \r\n\t\tfetch(theme.routes.cart_add_url, {\r\n\t\t  method: 'POST',\r\n\t\t  headers: {\r\n\t\t\t'X-Requested-With': 'XMLHttpRequest',\r\n\t\t\tAccept: 'application/javascript',\r\n\t\t  },\r\n\t\t  body: data,\r\n\t\t})\r\n\t\t  .then((response) => response.json())\r\n\t\t  .then((response) => {\r\n\t\t\tthis.button.disabled = true;\r\n\t\t\tthis.addLoadingClass();\r\n  \r\n\t\t\tif (response.status) {\r\n\t\t\t  this.addToCartError(response);\r\n  \r\n\t\t\t  this.removeLoadingClass();\r\n  \r\n\t\t\t  return;\r\n\t\t\t}\r\n  \r\n\t\t\tif (this.cartDrawerEnabled) {\r\n\t\t\t  this.getCart();\r\n\t\t\t} else {\r\n\t\t\t  window.location = theme.routes.cart_url;\r\n\t\t\t}\r\n\t\t  })\r\n\t\t  .catch((error) => console.log(error));\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Update cart\r\n\t   *\r\n\t   * @param   {Object}  updateData\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  updateCart(updateData = {}, currentItem = null) {\r\n\t\tlet updatedQuantity = updateData.quantity;\r\n\t\tif (currentItem !== null) {\r\n\t\t  if (updatedQuantity) {\r\n\t\t\tcurrentItem.classList.add(classes$v.loading);\r\n\t\t  } else {\r\n\t\t\tcurrentItem.classList.add(classes$v.removed);\r\n\t\t  }\r\n\t\t}\r\n\t\tthis.disableCartButtons();\r\n\t\tthis.addLoadingClass();\r\n  \r\n\t\tconst newItem = this.cart.querySelector(`[${attributes$q.item}=\"${updateData.id}\"]`) || currentItem;\r\n\t\tconst lineIndex = newItem?.hasAttribute(attributes$q.itemIndex) ? parseInt(newItem.getAttribute(attributes$q.itemIndex)) : 0;\r\n\t\tconst itemTitle = newItem?.hasAttribute(attributes$q.itemTitle) ? newItem.getAttribute(attributes$q.itemTitle) : null;\r\n  \r\n\t\tif (lineIndex === 0) return;\r\n  \r\n\t\tconst data = {\r\n\t\t  line: lineIndex,\r\n\t\t  quantity: updatedQuantity,\r\n\t\t};\r\n  \r\n\t\tfetch(theme.routes.cart_change_url, {\r\n\t\t  method: 'post',\r\n\t\t  headers: {'Content-Type': 'application/json', Accept: 'application/json'},\r\n\t\t  body: JSON.stringify(data),\r\n\t\t})\r\n\t\t  .then((response) => {\r\n\t\t\tif (response.status === 400) {\r\n\t\t\t  const error = new Error(response.status);\r\n\t\t\t  this.cartDrawerEnabled ? this.getCart() : (window.location = theme.routes.cart_url);\r\n\t\t\t  throw error;\r\n\t\t\t}\r\n  \r\n\t\t\treturn response.text();\r\n\t\t  })\r\n\t\t  .then((state) => {\r\n\t\t\tconst parsedState = JSON.parse(state);\r\n  \r\n\t\t\tif (parsedState.errors) {\r\n\t\t\t  this.cartUpdateFailed = true;\r\n\t\t\t  this.updateErrorText(itemTitle);\r\n\t\t\t  this.toggleErrorMessage();\r\n\t\t\t  this.resetLineItem(currentItem);\r\n\t\t\t  this.enableCartButtons();\r\n\t\t\t  this.removeLoadingClass();\r\n  \r\n\t\t\t  return;\r\n\t\t\t}\r\n  \r\n\t\t\tthis.getCart();\r\n\t\t  })\r\n\t\t  .catch((error) => {\r\n\t\t\tconsole.log(error);\r\n\t\t\tthis.enableCartButtons();\r\n\t\t\tthis.removeLoadingClass();\r\n\t\t  });\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Reset line item initial state\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n\t  resetLineItem(item) {\r\n\t\tconst qtyInput = item.querySelector(selectors$G.qtyInput);\r\n\t\tconst qty = qtyInput.getAttribute('value');\r\n\t\tqtyInput.value = qty;\r\n\t\titem.classList.remove(classes$v.loading);\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Disable cart buttons and inputs\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n\t  disableCartButtons() {\r\n\t\tconst inputs = this.cart.querySelectorAll('input');\r\n\t\tconst buttons = this.cart.querySelectorAll(`button, ${selectors$G.cartItemRemove}`);\r\n  \r\n\t\tif (inputs.length) {\r\n\t\t  inputs.forEach((item) => {\r\n\t\t\titem.classList.add(classes$v.disabled);\r\n\t\t\titem.blur();\r\n\t\t\titem.disabled = true;\r\n\t\t  });\r\n\t\t}\r\n  \r\n\t\tif (buttons.length) {\r\n\t\t  buttons.forEach((item) => {\r\n\t\t\titem.setAttribute(attributes$q.disabled, true);\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Enable cart buttons and inputs\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n\t  enableCartButtons() {\r\n\t\tconst inputs = this.cart.querySelectorAll('input');\r\n\t\tconst buttons = this.cart.querySelectorAll(`button, ${selectors$G.cartItemRemove}`);\r\n  \r\n\t\tif (inputs.length) {\r\n\t\t  inputs.forEach((item) => {\r\n\t\t\titem.classList.remove(classes$v.disabled);\r\n\t\t\titem.disabled = false;\r\n\t\t  });\r\n\t\t}\r\n  \r\n\t\tif (buttons.length) {\r\n\t\t  buttons.forEach((item) => {\r\n\t\t\titem.removeAttribute(attributes$q.disabled);\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Update error text\r\n\t   *\r\n\t   * @param   {String}  itemTitle\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  updateErrorText(itemTitle) {\r\n\t\tthis.cartErrorHolder.querySelector(selectors$G.errorMessage).innerText = itemTitle;\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Toggle error message\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  toggleErrorMessage() {\r\n\t\tif (!this.cartErrorHolder) return;\r\n  \r\n\t\tthis.cartErrorHolder.classList.toggle(classes$v.expanded, this.cartUpdateFailed);\r\n  \r\n\t\t// Reset cart error events flag\r\n\t\tthis.cartUpdateFailed = false;\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Handle errors\r\n\t   *\r\n\t   * @param   {Object}  response\r\n\t   *\r\n\t   * @return  {Object}\r\n\t   */\r\n  \r\n\t  handleErrors(response) {\r\n\t\tif (!response.ok) {\r\n\t\t  return response.json().then(function (json) {\r\n\t\t\tconst e = new FetchError({\r\n\t\t\t  status: response.statusText,\r\n\t\t\t  headers: response.headers,\r\n\t\t\t  json: json,\r\n\t\t\t});\r\n\t\t\tthrow e;\r\n\t\t  });\r\n\t\t}\r\n\t\treturn response;\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Add to cart error handle\r\n\t   *\r\n\t   * @param   {Object}  data\r\n\t   * @param   {DOM Element/Null} button\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  addToCartError(data) {\r\n\t\tconst buttonQuickBuyForm = this.button.closest(selectors$G.quickBuyForm);\r\n\t\tconst buttonUpsellHolder = this.button.closest(selectors$G.upsellHolder);\r\n\t\tconst isFocusEnabled = !document.body.classList.contains(classes$v.noOutline);\r\n\t\t// holder: Product form containers or Upsell products in Cart form\r\n\t\tlet holder = this.button.closest(selectors$G.productForm) ? this.button.closest(selectors$G.productForm) : this.button.closest(selectors$G.upsellHolder);\r\n\t\tlet errorContainer = holder.querySelector(selectors$G.formErrorsContainer);\r\n  \r\n\t\t// Upsell products in Cart form\r\n\t\tif (buttonUpsellHolder) {\r\n\t\t  errorContainer = buttonUpsellHolder.querySelector(selectors$G.formErrorsContainer);\r\n\t\t}\r\n  \r\n\t\tif (this.cartDrawerEnabled && this.button && this.button.closest(selectors$G.cartDrawer) !== null && !this.button.closest(selectors$G.cartDrawer)) {\r\n\t\t  this.closeCartDrawer();\r\n\t\t}\r\n  \r\n\t\tthis.button.classList.remove(classes$v.loading);\r\n\t\tthis.button.removeAttribute(attributes$q.disabled);\r\n  \r\n\t\t// Error message content\r\n\t\tconst closeErrorButton = buttonQuickBuyForm\r\n\t\t  ? ''\r\n\t\t  : `\r\n\t\t<button type=\"button\" class=\"errors__button-close\" data-close-error>\r\n\t\t  ${theme.icons.close}\r\n\t\t</button>\r\n\t  `;\r\n  \r\n\t\terrorContainer.innerHTML = `\r\n\t\t<div class=\"errors\" data-error>\r\n\t\t  ${data.message}: ${data.description}\r\n\t\t  ${closeErrorButton}\r\n\t\t</div>\r\n\t  `;\r\n  \r\n\t\t// Quick buy in PGI errors\r\n\t\tif (buttonQuickBuyForm) {\r\n\t\t  const productMediaContainer = errorContainer.closest(selectors$G.productMediaContainer);\r\n\t\t  productMediaContainer.classList.add(classes$v.productGridImageError);\r\n  \r\n\t\t  errorContainer.querySelector(selectors$G.error).addEventListener('animationend', () => {\r\n\t\t\tproductMediaContainer.classList.remove(classes$v.productGridImageError);\r\n\t\t\terrorContainer.innerHTML = '';\r\n  \r\n\t\t\tif (!isFocusEnabled) {\r\n\t\t\t  document.activeElement.blur();\r\n\t\t\t}\r\n\t\t  });\r\n\t\t} else {\r\n\t\t  // PDP form, Quick view popup forms and Upsell sliders errors\r\n\t\t  errorContainer.classList.add(classes$v.visible);\r\n\t\t  errorContainer.addEventListener('transitionend', () => {\r\n\t\t\tthis.resizeSliders(errorContainer);\r\n\t\t  });\r\n  \r\n\t\t  this.handleCloseErrorMessages(errorContainer);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Handle close buttons in error messages containers\r\n\t   *\r\n\t   * @param   {Object}  The error container that holds the close button\r\n\t   * @return  {Void}\r\n\t   */\r\n\t  handleCloseErrorMessages(container) {\r\n\t\tconst formErrorClose = container.querySelector(selectors$G.formCloseError);\r\n  \r\n\t\tformErrorClose.addEventListener('click', (event) => {\r\n\t\t  const clickedElement = event.target;\r\n\t\t  const isFormCloseError = clickedElement.matches(selectors$G.formCloseError) || clickedElement.closest(selectors$G.formCloseError);\r\n  \r\n\t\t  if (!isFormCloseError) return;\r\n  \r\n\t\t  event.preventDefault();\r\n\t\t  container.classList.remove(classes$v.visible);\r\n\t\t  container.querySelector(selectors$G.error).addEventListener('transitionend', () => {\r\n\t\t\tcontainer.innerHTML = '';\r\n\t\t\tthis.resizeSliders(clickedElement);\r\n\t\t  });\r\n\t\t});\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Resize sliders height\r\n\t   *\r\n\t   * @param   {Object}  Element within the slider container that would be resized\r\n\t   * @return  {Void}\r\n\t   */\r\n\t  resizeSliders(element) {\r\n\t\tconst slider = element.closest(selectors$G.flickityEnabled);\r\n  \r\n\t\tif (!slider) return;\r\n  \r\n\t\tconst flkty = Flickity.data(slider);\r\n\t\trequestAnimationFrame(() => flkty.resize());\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Render cart and define all elements after cart drawer is open for a first time\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n\t  renderCartDrawer(alwaysOpen = true) {\r\n\t\tconst cartDrawerTemplate = document.querySelector(selectors$G.cartDrawerTemplate);\r\n  \r\n\t\tif (!cartDrawerTemplate) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\t// Append cart items HTML to the cart drawer container\r\n\t\tthis.cartDrawer.innerHTML = cartDrawerTemplate.innerHTML;\r\n\t\tthis.assignArguments();\r\n  \r\n\t\t// Bind cart quantity events\r\n\t\tthis.initQuantity();\r\n  \r\n\t\t// Bind cart events\r\n\t\tthis.cartEvents();\r\n  \r\n\t\t// Init collapsible function for the cart drawer accordions\r\n\t\tif (this.buttonHolder) {\r\n\t\t  this.collapsible = new Collapsible(this.buttonHolder);\r\n\t\t}\r\n  \r\n\t\t// Bind cart drawer close button event\r\n\t\tthis.cartDrawerToggle = this.cartDrawer.querySelector(selectors$G.cartDrawerToggle);\r\n\t\tthis.cartDrawerToggle.addEventListener('click', this.cartDrawerToggleClickEvent);\r\n  \r\n\t\tthis.isCartDrawerLoaded = true;\r\n  \r\n\t\tthis.renderPairProducts();\r\n  \r\n\t\t// Hook for cart drawer loaded event\r\n\t\tdocument.dispatchEvent(new CustomEvent('theme:cart:loaded', {bubbles: true}));\r\n  \r\n\t\t// Open cart drawer after cart items and events are loaded\r\n\t\tif (alwaysOpen) {\r\n\t\t  this.openCartDrawer();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Open cart dropdown and add class on body\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  openCartDrawer() {\r\n\t\tif (this.isCartDrawerOpen) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tif (!this.isCartDrawerLoaded) {\r\n\t\t  this.renderCartDrawer();\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\t// Hook for cart drawer open event\r\n\t\tdocument.dispatchEvent(new CustomEvent('theme:cart:open', {bubbles: true}));\r\n\t\tdocument.dispatchEvent(new CustomEvent('theme:scroll:lock', {bubbles: true, detail: this.cartDrawer}));\r\n\t\tdocument.dispatchEvent(new CustomEvent('theme:scroll:lock', {bubbles: true, detail: this.cartDrawerBody}));\r\n  \r\n\t\tdocument.body.classList.add(classes$v.cartDrawerOpen);\r\n\t\tthis.cartDrawer.classList.add(classes$v.open);\r\n\t\tthis.cartDrawer.classList.remove(classes$v.contentVisibilityHidden);\r\n  \r\n\t\t// Cart elements opening animation\r\n\t\tthis.cartDrawer.querySelectorAll(selectors$G.aos).forEach((item) => {\r\n\t\t  requestAnimationFrame(() => {\r\n\t\t\titem.classList.add(classes$v.aosAnimate);\r\n\t\t  });\r\n\t\t});\r\n  \r\n\t\tthis.cartToggleButtons.forEach((button) => {\r\n\t\t  button.setAttribute(attributes$q.ariaExpanded, true);\r\n\t\t});\r\n  \r\n\t\tthis.a11y.trapFocus({\r\n\t\t  container: this.cartDrawer,\r\n\t\t});\r\n  \r\n\t\t// Observe Additional Checkout Buttons\r\n\t\tthis.observeAdditionalCheckoutButtons();\r\n\t\tthis.isCartDrawerOpen = true;\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Close cart dropdown and remove class on body\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  closeCartDrawer() {\r\n\t\tif (!this.isCartDrawerOpen) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\t// Hook for cart drawer close event\r\n\t\tdocument.dispatchEvent(new CustomEvent('theme:cart:close', {bubbles: true}));\r\n  \r\n\t\t// Cart elements closing animation\r\n  \r\n\t\tif (this.cartAnimationTimer) {\r\n\t\t  clearTimeout(this.cartAnimationTimer);\r\n\t\t}\r\n  \r\n\t\tthis.cartAnimationTimer = setTimeout(() => {\r\n\t\t  this.cartDrawer.querySelectorAll(selectors$G.aos).forEach((item) => {\r\n\t\t\titem.classList.remove(classes$v.aosAnimate);\r\n\t\t  });\r\n\t\t}, 300);\r\n  \r\n\t\tthis.cartErrorHolder.classList.remove(classes$v.expanded);\r\n  \r\n\t\tthis.a11y.removeTrapFocus();\r\n  \r\n\t\tthis.cartToggleButtons.forEach((button) => {\r\n\t\t  button.setAttribute(attributes$q.ariaExpanded, false);\r\n\t\t});\r\n  \r\n\t\tdocument.body.classList.remove(classes$v.cartDrawerOpen);\r\n\t\tthis.cartDrawer.classList.remove(classes$v.open);\r\n\t\tthis.itemsHolder.classList.remove(classes$v.updated);\r\n  \r\n\t\tconst onCartDrawerTransitionEnd = (event) => {\r\n\t\t  if (event.target !== this.cartDrawer) return;\r\n  \r\n\t\t  requestAnimationFrame(() => {\r\n\t\t\tthis.cartDrawer.classList.add(classes$v.contentVisibilityHidden);\r\n\t\t  });\r\n  \r\n\t\t  this.cartDrawer.removeEventListener('transitionend', onCartDrawerTransitionEnd);\r\n\t\t};\r\n  \r\n\t\tthis.cartDrawer.addEventListener('transitionend', onCartDrawerTransitionEnd);\r\n  \r\n\t\t// Fixes header background update on cart-drawer close\r\n\t\tconst isFocusEnabled = !document.body.classList.contains(classes$v.noOutline);\r\n\t\tif (!isFocusEnabled) {\r\n\t\t  requestAnimationFrame(() => {\r\n\t\t\tdocument.activeElement.blur();\r\n\t\t  });\r\n\t\t}\r\n  \r\n\t\t// Enable page scroll right after the closing animation ends\r\n\t\tconst timeout = 400;\r\n\t\tdocument.dispatchEvent(new CustomEvent('theme:scroll:unlock', {bubbles: true, detail: timeout}));\r\n  \r\n\t\tthis.isCartDrawerOpen = false;\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Toggle cart dropdown\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  toggleCartDrawer() {\r\n\t\tif (this.isCartDrawerOpen) {\r\n\t\t  this.closeCartDrawer();\r\n\t\t} else {\r\n\t\t  this.openCartDrawer();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Cart drawer toggle events\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  cartDrawerToggleEvents() {\r\n\t\tif (!this.cartDrawer) return;\r\n  \r\n\t\t// Close cart drawer on ESC key pressed\r\n\t\tthis.cartDrawer.addEventListener('keyup', (event) => {\r\n\t\t  if (event.code === theme.keyboardKeys.ESCAPE) {\r\n\t\t\tthis.closeCartDrawer();\r\n\t\t  }\r\n\t\t});\r\n  \r\n\t\t// Define cart drawer toggle button click event\r\n\t\tthis.cartDrawerToggleClickEvent = (event) => {\r\n\t\t  event.preventDefault();\r\n\t\t  const button = event.target;\r\n  \r\n\t\t  if (button.getAttribute(attributes$q.ariaExpanded) === 'false') {\r\n\t\t\tthis.a11y.state.trigger = button;\r\n\t\t  }\r\n  \r\n\t\t  this.toggleCartDrawer();\r\n\t\t};\r\n  \r\n\t\t// Define cart drawer close event\r\n\t\tthis.cartDrawerCloseEvent = (event) => {\r\n\t\t  const isCartDrawerToggle = event.target.matches(selectors$G.cartDrawerToggle);\r\n\t\t  const isCartDrawerChild = document.querySelector(selectors$G.cartDrawer).contains(event.target);\r\n\t\t  const isPopupQuickView = event.target.closest(selectors$G.popupQuickView);\r\n  \r\n\t\t  if (!isCartDrawerToggle && !isCartDrawerChild && !isPopupQuickView) {\r\n\t\t\tthis.closeCartDrawer();\r\n\t\t  }\r\n\t\t};\r\n  \r\n\t\t// Bind cart drawer toggle buttons click event\r\n\t\tthis.cartToggleButtons.forEach((button) => {\r\n\t\t  button.addEventListener('click', this.cartDrawerToggleClickEvent);\r\n\t\t});\r\n  \r\n\t\t// Close drawers on click outside\r\n\t\t//   Replaced 'click' with 'mousedown' as a quick and simple fix to the dragging issue on the upsell slider\r\n\t\t//   which was causing the cart-drawer to close when we start dragging the slider and finish our drag outside the cart-drawer\r\n\t\t//   which was triggering the 'click' event\r\n\t\tdocument.addEventListener('mousedown', this.cartDrawerCloseEvent);\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Toggle classes on different containers and messages\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  toggleClassesOnContainers() {\r\n\t\tconst that = this;\r\n  \r\n\t\tthis.emptyMessage.classList.toggle(classes$v.hidden, that.hasItemsInCart());\r\n\t\tthis.buttonHolder.classList.toggle(classes$v.hidden, !that.hasItemsInCart());\r\n\t\tthis.itemsHolder.classList.toggle(classes$v.hidden, !that.hasItemsInCart());\r\n\t\tthis.cartItemsQty.classList.toggle(classes$v.hidden, !that.hasItemsInCart());\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Build cart depends on results\r\n\t   *\r\n\t   * @param   {Object}  data\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  build(data) {\r\n\t\tconst cartItemsData = data.querySelector(selectors$G.apiLineItems);\r\n\t\tconst upsellItemsData = data.querySelector(selectors$G.apiUpsellItems);\r\n\t\tconst cartEmptyData = Boolean(cartItemsData === null && upsellItemsData === null);\r\n\t\tconst priceData = data.querySelector(selectors$G.apiCartPrice);\r\n\t\tconst cartTotal = data.querySelector(selectors$G.cartTotal);\r\n  \r\n\t\tif (this.priceHolder && priceData) {\r\n\t\t  this.priceHolder.innerHTML = priceData.innerHTML;\r\n\t\t}\r\n  \r\n\t\tif (cartEmptyData) {\r\n\t\t  this.itemsHolder.innerHTML = data;\r\n  \r\n\t\t  if (this.pairProductsHolder) {\r\n\t\t\tthis.pairProductsHolder.innerHTML = '';\r\n\t\t  }\r\n\t\t} else {\r\n\t\t  this.itemsHolder.innerHTML = cartItemsData.innerHTML;\r\n  \r\n\t\t  if (this.pairProductsHolder) {\r\n\t\t\tthis.pairProductsHolder.innerHTML = upsellItemsData.innerHTML;\r\n\t\t  }\r\n  \r\n\t\t  this.renderPairProducts();\r\n\t\t}\r\n  \r\n\t\tthis.newTotalItems = cartItemsData && cartItemsData.querySelectorAll(selectors$G.item).length ? cartItemsData.querySelectorAll(selectors$G.item).length : 0;\r\n\t\tthis.subtotal = cartTotal && cartTotal.hasAttribute(attributes$q.cartTotal) ? parseInt(cartTotal.getAttribute(attributes$q.cartTotal)) : 0;\r\n\t\tthis.cartCount = this.getCartItemCount();\r\n  \r\n\t\tif (this.cartMessage.length > 0) {\r\n\t\t  this.updateProgress();\r\n\t\t}\r\n  \r\n\t\tthis.cartToggleButtons.forEach((button) => {\r\n\t\t  button.classList.remove(classes$v.cartItems);\r\n  \r\n\t\t  if (this.newTotalItems > 0) {\r\n\t\t\tbutton.classList.add(classes$v.cartItems);\r\n\t\t  }\r\n\t\t});\r\n  \r\n\t\tthis.toggleErrorMessage();\r\n\t\tthis.updateItemsQuantity(this.cartCount);\r\n  \r\n\t\t// Update cart total price\r\n\t\tthis.cartTotalPrice.forEach((item) => {\r\n\t\t  item.innerHTML = this.subtotal === 0 ? window.theme.strings.free : themeCurrency.formatMoney(this.subtotal, theme.moneyWithCurrencyFormat);\r\n\t\t});\r\n  \r\n\t\tif (this.totalItems !== this.newTotalItems) {\r\n\t\t  this.totalItems = this.newTotalItems;\r\n  \r\n\t\t  this.toggleClassesOnContainers();\r\n\t\t}\r\n  \r\n\t\t// Add class \"is-updated\" line items holder to reduce cart items animation delay via CSS variables\r\n\t\tif (this.isCartDrawerOpen) {\r\n\t\t  this.itemsHolder.classList.add(classes$v.updated);\r\n\t\t}\r\n  \r\n\t\tthis.cartEvents();\r\n\t\tthis.initQuantity();\r\n\t\tthis.enableCartButtons();\r\n\t\tthis.resetButtonClasses();\r\n\t\tthis.removeLoadingClass();\r\n  \r\n\t\tdocument.dispatchEvent(new CustomEvent('theme:cart:added', {bubbles: true}));\r\n  \r\n\t\tif (this.cartDrawer) {\r\n\t\t  this.openCartDrawer();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Get cart item count\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  getCartItemCount() {\r\n\t\t// Returning 0 and not the actual cart items count is done only for when \"Cart type\" settings are set to \"Page\"\r\n\t\t// The actual count is necessary only when we build and render the cart/cart-drawer after we get a response from the Cart API\r\n\t\tif (!this.cart) return 0;\r\n\t\treturn Array.from(this.cart.querySelectorAll(selectors$G.qtyInput)).reduce((total, quantityInput) => total + parseInt(quantityInput.value), 0);\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Check for items in the cart\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  hasItemsInCart() {\r\n\t\treturn this.totalItems > 0;\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Show/hide free shipping message\r\n\t   *\r\n\t   * @param   {Number}  total\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  freeShippingMessageHandle(total) {\r\n\t\tif (this.cartMessage.length > 0) {\r\n\t\t  document.querySelectorAll(selectors$G.cartMessage).forEach((message) => {\r\n\t\t\tconst hasFreeShipping = message.hasAttribute(attributes$q.cartMessageValue) && message.getAttribute(attributes$q.cartMessageValue) === 'true' && total !== 0;\r\n\t\t\tconst cartMessageDefault = message.querySelector(selectors$G.cartMessageDefault);\r\n  \r\n\t\t\tmessage.classList.toggle(classes$v.success, total >= this.cartFreeLimitShipping && hasFreeShipping);\r\n\t\t\tmessage.classList.toggle(classes$v.isHidden, total === 0);\r\n\t\t\tcartMessageDefault.classList.toggle(classes$v.isHidden, total >= this.cartFreeLimitShipping);\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Update progress when update cart\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  updateProgress() {\r\n\t\tconst newPercentValue = (this.subtotal / this.cartFreeLimitShipping) * 100;\r\n\t\tconst leftToSpend = theme.settings.currency_code_enable\r\n\t\t  ? themeCurrency.formatMoney(this.cartFreeLimitShipping - this.subtotal, theme.moneyWithCurrencyFormat)\r\n\t\t  : themeCurrency.formatMoney(this.cartFreeLimitShipping - this.subtotal, theme.moneyFormat);\r\n  \r\n\t\tif (this.cartMessage.length > 0) {\r\n\t\t  document.querySelectorAll(selectors$G.cartMessage).forEach((message) => {\r\n\t\t\tconst cartMessageProgressItems = message.querySelectorAll(selectors$G.cartProgress);\r\n\t\t\tconst leftToSpendMessage = message.querySelector(selectors$G.leftToSpend);\r\n  \r\n\t\t\tif (leftToSpendMessage) {\r\n\t\t\t  leftToSpendMessage.innerHTML = leftToSpend.replace('.00', '').replace(',00', '');\r\n\t\t\t}\r\n  \r\n\t\t\tif (cartMessageProgressItems.length) {\r\n\t\t\t  cartMessageProgressItems.forEach((cartMessageProgress, index) => {\r\n\t\t\t\tcartMessageProgress.classList.toggle(classes$v.isHidden, this.subtotal / this.cartFreeLimitShipping >= 1);\r\n\t\t\t\tcartMessageProgress.style.setProperty('--progress-width', `${newPercentValue}%`);\r\n\t\t\t\tif (index === 0) {\r\n\t\t\t\t  cartMessageProgress.setAttribute(attributes$q.value, newPercentValue);\r\n\t\t\t\t}\r\n\t\t\t  });\r\n\t\t\t}\r\n  \r\n\t\t\tthis.freeShippingMessageHandle(this.subtotal);\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Render Upsell Products\r\n\t   */\r\n\t  renderPairProducts() {\r\n\t\tthis.flktyUpsell = null;\r\n\t\tthis.pairProductsHolder = document.querySelector(selectors$G.pairProductsHolder);\r\n\t\tthis.pairProducts = document.querySelector(selectors$G.pairProducts);\r\n\t\tthis.upsellHolders = document.querySelectorAll(selectors$G.upsellHolder);\r\n  \r\n\t\tif (this.pairProductsHolder === null || this.pairProductsHolder === undefined) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\t// Upsell slider\r\n\t\tconst that = this;\r\n\t\tif (this.upsellHolders.length > 1) {\r\n\t\t  this.flktyUpsell = new Flickity(this.pairProducts, {\r\n\t\t\twrapAround: true,\r\n\t\t\tpageDots: true,\r\n\t\t\tadaptiveHeight: true,\r\n\t\t\tprevNextButtons: false,\r\n\t\t\ton: {\r\n\t\t\t  ready: function () {\r\n\t\t\t\tnew QuickViewPopup(that.cart);\r\n\t\t\t\tthis.reloadCells();\r\n\t\t\t\trequestAnimationFrame(() => this.resize());\r\n\t\t\t  },\r\n\t\t\t},\r\n\t\t  });\r\n  \r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\t// Single upsell item\r\n\t\tnew QuickViewPopup(this.cart);\r\n\t  }\r\n  \r\n\t  updateItemsQuantity(itemsQty) {\r\n\t\tlet oneItemText = theme.strings.cart_items_one;\r\n\t\tlet manyItemsText = theme.strings.cart_items_many;\r\n\t\toneItemText = oneItemText.split('}}')[1];\r\n\t\tmanyItemsText = manyItemsText.split('}}')[1];\r\n  \r\n\t\tif (this.cartItemsQty) {\r\n\t\t  this.cartItemsQty.textContent = itemsQty === 1 ? `${itemsQty} ${oneItemText}` : `${itemsQty} ${manyItemsText}`;\r\n\t\t}\r\n\t  }\r\n  \r\n\t  observeAdditionalCheckoutButtons() {\r\n\t\t// identify an element to observe\r\n\t\tconst additionalCheckoutButtons = this.cart.querySelector(selectors$G.additionalCheckoutButtons);\r\n\t\tif (additionalCheckoutButtons) {\r\n\t\t  // create a new instance of `MutationObserver` named `observer`,\r\n\t\t  // passing it a callback function\r\n\t\t  const observer = new MutationObserver(() => {\r\n\t\t\tthis.a11y.removeTrapFocus();\r\n\t\t\tthis.a11y.trapFocus({\r\n\t\t\t  container: this.cart,\r\n\t\t\t});\r\n\t\t\tobserver.disconnect();\r\n\t\t  });\r\n  \r\n\t\t  // call `observe()` on that MutationObserver instance,\r\n\t\t  // passing it the element to observe, and the options object\r\n\t\t  observer.observe(additionalCheckoutButtons, {subtree: true, childList: true});\r\n\t\t}\r\n\t  }\r\n  \r\n\t  formSubmitHandler() {\r\n\t\tconst termsAccepted = document.querySelector(selectors$G.cartTermsCheckbox).checked;\r\n\t\tconst termsError = document.querySelector(selectors$G.termsErrorMessage);\r\n  \r\n\t\t// Disable form submit if terms and conditions are not accepted\r\n\t\tif (!termsAccepted) {\r\n\t\t  if (document.querySelector(selectors$G.termsErrorMessage).length > 0) {\r\n\t\t\treturn;\r\n\t\t  }\r\n  \r\n\t\t  termsError.innerText = theme.strings.cart_acceptance_error;\r\n\t\t  this.cartCheckoutButton.setAttribute(attributes$q.disabled, true);\r\n\t\t  termsError.classList.add(classes$v.expanded);\r\n\t\t} else {\r\n\t\t  termsError.classList.remove(classes$v.expanded);\r\n\t\t  this.cartCheckoutButton.removeAttribute(attributes$q.disabled);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  resetButtonClasses() {\r\n\t\tconst buttons = document.querySelectorAll(selectors$G.buttonAddToCart);\r\n\t\tif (buttons) {\r\n\t\t  buttons.forEach((button) => {\r\n\t\t\tif (button.classList.contains(classes$v.loading)) {\r\n\t\t\t  button.classList.remove(classes$v.loading);\r\n\t\t\t  button.classList.add(classes$v.success);\r\n  \r\n\t\t\t  setTimeout(() => {\r\n\t\t\t\tbutton.removeAttribute(attributes$q.disabled);\r\n\t\t\t\tbutton.classList.remove(classes$v.success);\r\n\t\t\t  }, settings$2.timers.addProductTimeout);\r\n\t\t\t}\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  addLoadingClass() {\r\n\t\tif (this.cartDrawer) {\r\n\t\t  this.cartDrawer.classList.add(classes$v.loading);\r\n\t\t} else if (this.itemsWrapper) {\r\n\t\t  this.itemsWrapper.classList.add(classes$v.loading);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  removeLoadingClass() {\r\n\t\tif (this.cartDrawer) {\r\n\t\t  this.cartDrawer.classList.remove(classes$v.loading);\r\n\t\t} else if (this.itemsWrapper) {\r\n\t\t  this.itemsWrapper.classList.remove(classes$v.loading);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  unload() {\r\n\t\tif (this.cartDrawerToggle) {\r\n\t\t  this.cartDrawerToggle.removeEventListener('click', this.cartDrawerToggleClickEvent);\r\n\t\t}\r\n  \r\n\t\tthis.cartToggleButtons.forEach((button) => {\r\n\t\t  button.removeEventListener('click', this.cartDrawerToggleClickEvent);\r\n\t\t});\r\n  \r\n\t\t// Close drawers on click outside\r\n\t\tdocument.removeEventListener('mousedown', this.cartDrawerCloseEvent);\r\n  \r\n\t\tif (this.collapsible !== null) {\r\n\t\t  this.collapsible.onUnload();\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tconst cartDrawer = {\r\n\t  onLoad() {\r\n\t\tsections$t[this.id] = new CartDrawer();\r\n\t  },\r\n\t  onUnload() {\r\n\t\tif (typeof sections$t[this.id].unload === 'function') {\r\n\t\t  sections$t[this.id].unload();\r\n\t\t}\r\n\t  },\r\n\t};\r\n\tregister('cart-template', cartDrawer);\r\n  \r\n\tconst selectors$F = {\r\n\t  scrollToTop: '[data-scroll-top-button]',\r\n\t};\r\n\tconst classes$u = {\r\n\t  isVisible: 'is-visible',\r\n\t};\r\n  \r\n\t// Scroll to top button\r\n\tconst scrollTopButton = document.querySelector(selectors$F.scrollToTop);\r\n\tif (scrollTopButton) {\r\n\t  scrollTopButton.addEventListener('click', () => {\r\n\t\twindow.scrollTo({\r\n\t\t  top: 0,\r\n\t\t  left: 0,\r\n\t\t  behavior: 'smooth',\r\n\t\t});\r\n\t  });\r\n\t  document.addEventListener(\r\n\t\t'scroll',\r\n\t\tthrottle(() => {\r\n\t\t  scrollTopButton.classList.toggle(classes$u.isVisible, window.pageYOffset > window.innerHeight);\r\n\t\t}, 150)\r\n\t  );\r\n\t}\r\n  \r\n\tconst selectors$E = {\r\n\t  details: 'details',\r\n\t  popdownBody: '[data-popdown-body]',\r\n\t  popdownClose: '[data-popdown-close]',\r\n\t  popdownToggle: '[data-popdown-toggle]',\r\n\t  searchFormInner: '[data-search-form-inner]',\r\n\t  input: 'input:not([type=\"hidden\"])',\r\n\t  popularSearchesLink: '[data-popular-searches-link]',\r\n\t  header: '[data-site-header]',\r\n\t  nav: '[data-nav]',\r\n\t  navItemsCompress: '[data-nav-items-compress]',\r\n\t  navIcons: '[data-nav-icons]',\r\n\t  mobileMenu: '[data-mobile-menu]',\r\n\t  predictiveSearch: 'predictive-search',\r\n\t  searchForm: 'search-form',\r\n\t};\r\n  \r\n\tconst attributes$p = {\r\n\t  popdownInHeader: 'data-popdown-in-header',\r\n\t  popdownInPage: 'data-popdown-in-page',\r\n\t  searchPerformed: 'data-search-performed',\r\n\t};\r\n  \r\n\tconst classes$t = {\r\n\t  searchOpened: 'search-opened',\r\n\t  headerMenuOpened: 'site-header--menu-opened',\r\n\t  navCompress: 'nav--compress',\r\n\t};\r\n  \r\n\tclass SearchPopdown extends HTMLElement {\r\n\t  constructor() {\r\n\t\tsuper();\r\n\t\tthis.isPopdownInHeader = this.hasAttribute(attributes$p.popdownInHeader);\r\n\t\tthis.isPopdownInPage = this.hasAttribute(attributes$p.popdownInPage);\r\n\t\tthis.popdownBody = this.querySelector(selectors$E.popdownBody);\r\n\t\tthis.popdownClose = this.querySelector(selectors$E.popdownClose);\r\n\t\tthis.searchFormInner = this.querySelector(selectors$E.searchFormInner);\r\n\t\tthis.popularSearchesLink = this.querySelectorAll(selectors$E.popularSearchesLink);\r\n\t\tthis.searchFormWrapper = this.querySelector(selectors$E.searchForm) ? this.querySelector(selectors$E.searchForm) : this.querySelector(selectors$E.predictiveSearch);\r\n\t\tthis.predictiveSearch = this.searchFormWrapper.matches(selectors$E.predictiveSearch);\r\n\t\tthis.header = document.querySelector(selectors$E.header);\r\n\t\tthis.headerSection = this.header?.parentNode;\r\n\t\tthis.nav = this.header?.querySelector(selectors$E.nav);\r\n\t\tthis.mobileMenu = this.headerSection?.querySelector(selectors$E.mobileMenu);\r\n\t\tthis.a11y = a11y;\r\n\t\tthis.ensureClosingOnResizeEvent = () => this.ensureClosingOnResize();\r\n  \r\n\t\tif (this.isPopdownInHeader) {\r\n\t\t  this.details = this.querySelector(selectors$E.details);\r\n\t\t  this.popdownToggle = this.querySelector(selectors$E.popdownToggle);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  connectedCallback() {\r\n\t\tif (this.isPopdownInHeader) {\r\n\t\t  this.details.addEventListener('keyup', (event) => event.code.toUpperCase() === 'ESCAPE' && this.close());\r\n\t\t  this.popdownClose.addEventListener('click', () => this.close());\r\n\t\t  this.popdownToggle.addEventListener('click', (event) => this.onPopdownToggleClick(event));\r\n\t\t  this.popdownToggle.setAttribute('role', 'button');\r\n\t\t}\r\n  \r\n\t\tif (this.isPopdownInPage) {\r\n\t\t  this.popdownClose.addEventListener('click', () => this.triggerPopdownClose());\r\n\t\t  this.searchFormWrapper.addEventListener('focusout', () => this.onFocusOut());\r\n\t\t  this.searchFormWrapper.input.addEventListener('click', (event) => this.triggerPopdownOpen(event));\r\n\t\t}\r\n  \r\n\t\tthis.searchFormInner.addEventListener('transitionend', (event) => {\r\n\t\t  if (event.target === this.searchFormInner && this.details.hasAttribute('open') && this.details.getAttribute('open') == 'false') {\r\n\t\t\tthis.onClose();\r\n\t\t  }\r\n\t\t});\r\n  \r\n\t\tthis.popularSearchesLink.forEach((element) => {\r\n\t\t  element.addEventListener('click', (event) => {\r\n\t\t\tevent.preventDefault();\r\n\t\t\tconst popularSearchText = event.target.textContent;\r\n  \r\n\t\t\tthis.searchFormWrapper.input.value = popularSearchText;\r\n\t\t\tthis.searchFormWrapper.submit();\r\n\t\t  });\r\n\t\t});\r\n\t  }\r\n  \r\n\t  onPopdownToggleClick(event) {\r\n\t\tevent.preventDefault();\r\n\t\tevent.target.closest(selectors$E.details).hasAttribute('open') ? this.close() : this.open(event);\r\n\t  }\r\n  \r\n\t  onBodyClick(event) {\r\n\t\tconst isTargetInPopdown = this.contains(event.target);\r\n\t\tconst isHeaderMenuOpened = this.header?.classList.contains(classes$t.headerMenuOpened);\r\n  \r\n\t\tif (isHeaderMenuOpened || isTargetInPopdown) return;\r\n\t\tif (!isTargetInPopdown) this.close();\r\n\t  }\r\n  \r\n\t  onFocusOut() {\r\n\t\tif (!this.predictiveSearch) return;\r\n  \r\n\t\trequestAnimationFrame(() => {\r\n\t\t  if (!this.searchFormWrapper.contains(document.activeElement)) {\r\n\t\t\tthis.searchFormWrapper.close();\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  triggerPopdownOpen(event) {\r\n\t\tconst isSearchPageWithoutTerms = this.closest(`[${attributes$p.searchPerformed}=\"false\"]`);\r\n\t\tconst isTouch = matchMedia('(pointer:coarse)').matches;\r\n\t\tconst viewportMobile = window.innerWidth < theme.sizes.small;\r\n\t\tconst shouldOpenPopdownOnTouchDevice = isTouch || viewportMobile;\r\n\t\tconst shouldOpenPopdownOnNoTerms = isSearchPageWithoutTerms != null;\r\n  \r\n\t\tif (!this.nav || !this.mobileMenu) return;\r\n  \r\n\t\tif (shouldOpenPopdownOnTouchDevice || shouldOpenPopdownOnNoTerms) {\r\n\t\t  event.preventDefault();\r\n  \r\n\t\t  const isNavCompressed = this.nav.classList.contains(classes$t.navCompress);\r\n\t\t  let popdownToggle = this.mobileMenu.querySelector(selectors$E.popdownToggle);\r\n  \r\n\t\t  if (!isTouch) {\r\n\t\t\tpopdownToggle = isNavCompressed\r\n\t\t\t  ? this.nav.querySelector(`${selectors$E.navItemsCompress} ${selectors$E.popdownToggle}`)\r\n\t\t\t  : this.nav.querySelector(`${selectors$E.navIcons} ${selectors$E.popdownToggle}`);\r\n\t\t  }\r\n  \r\n\t\t  setTimeout(() => {\r\n\t\t\tpopdownToggle?.dispatchEvent(new Event('click', {bubbles: true}));\r\n\t\t  }, 300);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  open(event) {\r\n\t\tthis.onBodyClickEvent = (event) => this.onBodyClick(event);\r\n\t\tevent.target.closest(selectors$E.details).setAttribute('open', '');\r\n\t\tthis.searchFormWrapper.input.setAttribute('aria-expanded', true);\r\n  \r\n\t\tdocument.body.classList.add(classes$t.searchOpened);\r\n\t\tdocument.body.addEventListener('click', this.onBodyClickEvent);\r\n\t\tdocument.addEventListener('theme:resize', this.ensureClosingOnResizeEvent);\r\n\t\tdocument.dispatchEvent(new CustomEvent('theme:scroll:lock', {bubbles: true}));\r\n  \r\n\t\tthis.a11y.state.trigger = event.target;\r\n  \r\n\t\t// Safari opening transition fix\r\n\t\trequestAnimationFrame(() => {\r\n\t\t  // Firefox opening transition fix (single requestAnimationFrame method does not work everytime)\r\n\t\t  requestAnimationFrame(() => {\r\n\t\t\tevent.target.closest(selectors$E.details).setAttribute('open', 'true');\r\n\t\t\tthis.a11y.trapFocus({\r\n\t\t\t  container: this.searchFormInner,\r\n\t\t\t});\r\n\t\t  });\r\n\t\t});\r\n\t  }\r\n  \r\n\t  close() {\r\n\t\tthis.a11y.removeTrapFocus();\r\n\t\tthis.details.setAttribute('open', 'false');\r\n\t\tif (this.predictiveSearch) this.searchFormWrapper.close();\r\n\t\tthis.searchFormWrapper.handleFocusableDescendants(true);\r\n\t  }\r\n  \r\n\t  triggerPopdownClose() {\r\n\t\tif (this.predictiveSearch) this.searchFormWrapper.close();\r\n  \r\n\t\tif (this.searchFormWrapper.popularSearches) {\r\n\t\t  requestAnimationFrame(() => document.activeElement.blur());\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onClose() {\r\n\t\tthis.details.removeAttribute('open');\r\n\t\tdocument.dispatchEvent(new CustomEvent('theme:search:close', {bubbles: true}));\r\n\t\tdocument.body.classList.remove(classes$t.searchOpened);\r\n\t\tdocument.body.removeEventListener('click', this.onBodyClickEvent);\r\n\t\tdocument.removeEventListener('theme:resize', this.ensureClosingOnResizeEvent);\r\n\t\tdocument.dispatchEvent(new CustomEvent('theme:scroll:unlock', {bubbles: true}));\r\n\t  }\r\n  \r\n\t  ensureClosingOnResize() {\r\n\t\t// Due to having multiple <search-popdown> elements in `.mobile-menu`, `.nav--default` or `.nav--compress` parents,\r\n\t\t// the element can become hidden when the browser is resized\r\n\t\t// `transitionend` event is then not fired and the closing methods are not finished properly\r\n\t\tconst isElementHiddenFromView = this.offsetParent === null;\r\n\t\tif (!isElementHiddenFromView) return;\r\n  \r\n\t\tthis.onClose();\r\n\t  }\r\n\t}\r\n  \r\n\tcustomElements.define('search-popdown', SearchPopdown);\r\n  \r\n\ttheme.ProductModel = (function () {\r\n\t  let modelJsonSections = {};\r\n\t  let models = {};\r\n\t  let xrButtons = {};\r\n  \r\n\t  const selectors = {\r\n\t\tproductMediaWrapper: '[data-product-single-media-wrapper]',\r\n\t\tmediaGroup: '[data-product-single-media-group]',\r\n\t\tproductXr: '[data-shopify-xr]',\r\n\t\tmediaId: 'data-media-id',\r\n\t\tmodel3d: 'data-shopify-model3d-id',\r\n\t\tmodelViewer: 'model-viewer',\r\n\t\tmodelJson: '#ModelJson-',\r\n\t\tdeferredMedia: '[data-deferred-media]',\r\n\t\tdeferredMediaButton: '[data-deferred-media-button]',\r\n\t  };\r\n\t  const classes = {\r\n\t\tisLoading: 'is-loading',\r\n\t\tmediaHidden: 'media--hidden',\r\n\t  };\r\n  \r\n\t  function init(mediaContainer, sectionId) {\r\n\t\tmodelJsonSections[sectionId] = {\r\n\t\t  loaded: false,\r\n\t\t};\r\n  \r\n\t\tconst deferredMediaButton = mediaContainer.querySelector(selectors.deferredMediaButton);\r\n  \r\n\t\tif (deferredMediaButton) {\r\n\t\t  deferredMediaButton.addEventListener('click', loadContent.bind(this, mediaContainer, sectionId));\r\n\t\t}\r\n\t  }\r\n  \r\n\t  function loadContent(mediaContainer, sectionId) {\r\n\t\tif (mediaContainer.querySelector(selectors.deferredMedia).getAttribute('loaded')) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tmediaContainer.classList.add(classes.isLoading);\r\n\t\tconst content = document.createElement('div');\r\n\t\tcontent.appendChild(mediaContainer.querySelector('template').content.firstElementChild.cloneNode(true));\r\n\t\tconst modelViewerElement = content.querySelector('model-viewer');\r\n\t\tconst deferredMedia = mediaContainer.querySelector(selectors.deferredMedia);\r\n\t\tdeferredMedia.appendChild(modelViewerElement);\r\n\t\tdeferredMedia.setAttribute('loaded', true);\r\n\t\tconst mediaId = mediaContainer.dataset.mediaId;\r\n\t\tconst modelId = modelViewerElement.dataset.modelId;\r\n\t\tconst xrButton = mediaContainer.closest(selectors.mediaGroup).parentElement.querySelector(selectors.productXr);\r\n\t\txrButtons[sectionId] = {\r\n\t\t  element: xrButton,\r\n\t\t  defaultId: modelId,\r\n\t\t};\r\n  \r\n\t\tmodels[mediaId] = {\r\n\t\t  modelId: modelId,\r\n\t\t  mediaId: mediaId,\r\n\t\t  sectionId: sectionId,\r\n\t\t  container: mediaContainer,\r\n\t\t  element: modelViewerElement,\r\n\t\t};\r\n  \r\n\t\tif (!window.ShopifyXR) {\r\n\t\t  window.Shopify.loadFeatures([\r\n\t\t\t{\r\n\t\t\t  name: 'shopify-xr',\r\n\t\t\t  version: '1.0',\r\n\t\t\t  onLoad: setupShopifyXr,\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t  name: 'model-viewer-ui',\r\n\t\t\t  version: '1.0',\r\n\t\t\t  onLoad: setupModelViewerUi,\r\n\t\t\t},\r\n\t\t  ]);\r\n\t\t} else {\r\n\t\t  setupModelViewerUi();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  function setupShopifyXr(errors) {\r\n\t\tif (errors) {\r\n\t\t  console.warn(errors);\r\n\t\t  return;\r\n\t\t}\r\n\t\tif (!window.ShopifyXR) {\r\n\t\t  document.addEventListener('shopify_xr_initialized', function () {\r\n\t\t\tsetupShopifyXr();\r\n\t\t  });\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tfor (const sectionId in modelJsonSections) {\r\n\t\t  if (modelJsonSections.hasOwnProperty(sectionId)) {\r\n\t\t\tconst modelSection = modelJsonSections[sectionId];\r\n  \r\n\t\t\tif (modelSection.loaded) {\r\n\t\t\t  continue;\r\n\t\t\t}\r\n  \r\n\t\t\tconst modelJson = document.querySelector(`${selectors.modelJson}${sectionId}`);\r\n  \r\n\t\t\tif (modelJson) {\r\n\t\t\t  window.ShopifyXR.addModels(JSON.parse(modelJson.innerHTML));\r\n\t\t\t  modelSection.loaded = true;\r\n\t\t\t}\r\n\t\t  }\r\n\t\t}\r\n  \r\n\t\twindow.ShopifyXR.setupXRElements();\r\n\t  }\r\n  \r\n\t  function setupModelViewerUi(errors) {\r\n\t\tif (errors) {\r\n\t\t  console.warn(errors);\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tfor (const key in models) {\r\n\t\t  if (models.hasOwnProperty(key)) {\r\n\t\t\tconst model = models[key];\r\n\t\t\tif (!model.modelViewerUi) {\r\n\t\t\t  model.modelViewerUi = new Shopify.ModelViewerUI(model.element);\r\n\t\t\t  setupModelViewerListeners(model);\r\n\t\t\t}\r\n\t\t  }\r\n\t\t}\r\n\t  }\r\n  \r\n\t  function setupModelViewerListeners(model) {\r\n\t\tconst xrButton = xrButtons[model.sectionId];\r\n\t\tmodel.container.addEventListener('theme:media:visible', function () {\r\n\t\t  xrButton.element.setAttribute(selectors.model3d, model.modelId);\r\n  \r\n\t\t  if (window.theme.touch) {\r\n\t\t\treturn;\r\n\t\t  }\r\n  \r\n\t\t  model.modelViewerUi.play();\r\n\t\t  model.container.dispatchEvent(new CustomEvent('theme:media:play'), {bubbles: true});\r\n\t\t});\r\n  \r\n\t\tmodel.container.addEventListener('theme:media:hidden', function () {\r\n\t\t  model.modelViewerUi.pause();\r\n\t\t});\r\n  \r\n\t\tmodel.container.addEventListener('xrLaunch', function () {\r\n\t\t  model.modelViewerUi.pause();\r\n\t\t});\r\n  \r\n\t\tmodel.element.addEventListener('load', () => {\r\n\t\t  xrButton.element.setAttribute(selectors.model3d, model.modelId);\r\n\t\t  model.container.classList.remove(classes.isLoading);\r\n\t\t  model.container.dispatchEvent(new CustomEvent('theme:media:play'), {bubbles: true});\r\n\t\t});\r\n  \r\n\t\tmodel.element.addEventListener('shopify_model_viewer_ui_toggle_play', function () {\r\n\t\t  pauseOtherMedia(model.mediaId);\r\n\t\t  setTimeout(() => {\r\n\t\t\t// Timeout to trigger play event after pause events\r\n\t\t\tmodel.container.dispatchEvent(new CustomEvent('theme:media:play'), {bubbles: true});\r\n\t\t  }, 50);\r\n\t\t});\r\n\t\tmodel.element.addEventListener('shopify_model_viewer_ui_toggle_pause', function () {\r\n\t\t  model.container.dispatchEvent(new CustomEvent('theme:media:pause'), {bubbles: true});\r\n\t\t});\r\n  \r\n\t\tpauseOtherMedia(model.mediaId);\r\n\t  }\r\n  \r\n\t  function pauseOtherMedia(mediaId) {\r\n\t\tconst currentMedia = `[${selectors.mediaId}=\"${mediaId}\"]`;\r\n\t\tconst otherMedia = document.querySelectorAll(`${selectors.productMediaWrapper}:not(${currentMedia})`);\r\n  \r\n\t\tif (otherMedia.length) {\r\n\t\t  otherMedia.forEach((media) => {\r\n\t\t\tmedia.dispatchEvent(new CustomEvent('theme:media:hidden'), {bubbles: true});\r\n\t\t\tmedia.classList.add(classes.mediaHidden);\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  function removeSectionModels(sectionId) {\r\n\t\tfor (const key in models) {\r\n\t\t  if (models.hasOwnProperty(key)) {\r\n\t\t\tconst model = models[key];\r\n\t\t\tif (model.sectionId === sectionId) {\r\n\t\t\t  delete models[key];\r\n\t\t\t}\r\n\t\t  }\r\n\t\t}\r\n\t\tdelete modelJsonSections[sectionId];\r\n\t\tdelete theme.mediaInstances[sectionId];\r\n\t  }\r\n  \r\n\t  return {\r\n\t\tinit: init,\r\n\t\tloadContent: loadContent,\r\n\t\tremoveSectionModels: removeSectionModels,\r\n\t  };\r\n\t})();\r\n  \r\n\tconst selectors$D = {\r\n\t  rangeSlider: '[data-range-slider]',\r\n\t  rangeDotLeft: '[data-range-left]',\r\n\t  rangeDotRight: '[data-range-right]',\r\n\t  rangeLine: '[data-range-line]',\r\n\t  rangeHolder: '[data-range-holder]',\r\n\t  dataMin: 'data-se-min',\r\n\t  dataMax: 'data-se-max',\r\n\t  dataMinValue: 'data-se-min-value',\r\n\t  dataMaxValue: 'data-se-max-value',\r\n\t  dataStep: 'data-se-step',\r\n\t  dataFilterUpdate: 'data-range-filter-update',\r\n\t  priceMin: '[data-field-price-min]',\r\n\t  priceMax: '[data-field-price-max]',\r\n\t};\r\n  \r\n\tconst classes$s = {\r\n\t  isInitialized: 'is-initialized',\r\n\t};\r\n  \r\n\tclass RangeSlider {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t\tthis.init();\r\n\t\tthis.initListener = () => this.init();\r\n  \r\n\t\tdocument.addEventListener('theme:filters:init', this.initListener);\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tthis.slider = this.container.querySelector(selectors$D.rangeSlider);\r\n  \r\n\t\tif (!this.slider) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tthis.resizeFilters = debounce(this.reset.bind(this), 50);\r\n  \r\n\t\tthis.onMoveEvent = (event) => this.onMove(event);\r\n\t\tthis.onStopEvent = (event) => this.onStop(event);\r\n\t\tthis.onStartEvent = (event) => this.onStart(event);\r\n\t\tthis.startX = 0;\r\n\t\tthis.x = 0;\r\n  \r\n\t\t// retrieve touch button\r\n\t\tthis.touchLeft = this.slider.querySelector(selectors$D.rangeDotLeft);\r\n\t\tthis.touchRight = this.slider.querySelector(selectors$D.rangeDotRight);\r\n\t\tthis.lineSpan = this.slider.querySelector(selectors$D.rangeLine);\r\n  \r\n\t\t// get some properties\r\n\t\tthis.min = parseFloat(this.slider.getAttribute(selectors$D.dataMin));\r\n\t\tthis.max = parseFloat(this.slider.getAttribute(selectors$D.dataMax));\r\n  \r\n\t\tthis.step = 0.0;\r\n  \r\n\t\t// normalize flag\r\n\t\tthis.normalizeFact = 20;\r\n  \r\n\t\t// retrieve default values\r\n\t\tlet defaultMinValue = this.min;\r\n\t\tif (this.slider.hasAttribute(selectors$D.dataMinValue)) {\r\n\t\t  defaultMinValue = parseFloat(this.slider.getAttribute(selectors$D.dataMinValue));\r\n\t\t}\r\n\t\tlet defaultMaxValue = this.max;\r\n  \r\n\t\tif (this.slider.hasAttribute(selectors$D.dataMaxValue)) {\r\n\t\t  defaultMaxValue = parseFloat(this.slider.getAttribute(selectors$D.dataMaxValue));\r\n\t\t}\r\n  \r\n\t\t// check values are correct\r\n\t\tif (defaultMinValue < this.min) {\r\n\t\t  defaultMinValue = this.min;\r\n\t\t}\r\n  \r\n\t\tif (defaultMaxValue > this.max) {\r\n\t\t  defaultMaxValue = this.max;\r\n\t\t}\r\n  \r\n\t\tif (defaultMinValue > defaultMaxValue) {\r\n\t\t  defaultMinValue = defaultMaxValue;\r\n\t\t}\r\n  \r\n\t\tif (this.slider.getAttribute(selectors$D.dataStep)) {\r\n\t\t  this.step = Math.abs(parseFloat(this.slider.getAttribute(selectors$D.dataStep)));\r\n\t\t}\r\n  \r\n\t\t// initial reset\r\n\t\tthis.reset();\r\n\t\twindow.addEventListener('theme:resize', this.resizeFilters);\r\n  \r\n\t\t// usefull values, min, max, normalize fact is the width of both touch buttons\r\n\t\tthis.maxX = this.slider.offsetWidth - this.touchRight.offsetWidth;\r\n\t\tthis.selectedTouch = null;\r\n\t\tthis.initialValue = this.lineSpan.offsetWidth - this.normalizeFact;\r\n  \r\n\t\t// set defualt values\r\n\t\tthis.setMinValue(defaultMinValue);\r\n\t\tthis.setMaxValue(defaultMaxValue);\r\n  \r\n\t\t// link events\r\n\t\tthis.touchLeft.addEventListener('mousedown', this.onStartEvent);\r\n\t\tthis.touchRight.addEventListener('mousedown', this.onStartEvent);\r\n\t\tthis.touchLeft.addEventListener('touchstart', this.onStartEvent, {passive: true});\r\n\t\tthis.touchRight.addEventListener('touchstart', this.onStartEvent, {passive: true});\r\n  \r\n\t\t// initialize\r\n\t\tthis.slider.classList.add(classes$s.isInitialized);\r\n\t  }\r\n  \r\n\t  reset() {\r\n\t\tthis.touchLeft.style.left = '0px';\r\n\t\tthis.touchRight.style.left = this.slider.offsetWidth - this.touchLeft.offsetWidth + 'px';\r\n\t\tthis.lineSpan.style.marginLeft = '0px';\r\n\t\tthis.lineSpan.style.width = this.slider.offsetWidth - this.touchLeft.offsetWidth + 'px';\r\n\t\tthis.startX = 0;\r\n\t\tthis.x = 0;\r\n  \r\n\t\tthis.maxX = this.slider.offsetWidth - this.touchRight.offsetWidth;\r\n\t\tthis.initialValue = this.lineSpan.offsetWidth - this.normalizeFact;\r\n\t  }\r\n  \r\n\t  setMinValue(minValue) {\r\n\t\tconst ratio = (minValue - this.min) / (this.max - this.min);\r\n\t\tthis.touchLeft.style.left = Math.ceil(ratio * (this.slider.offsetWidth - (this.touchLeft.offsetWidth + this.normalizeFact))) + 'px';\r\n\t\tthis.lineSpan.style.marginLeft = this.touchLeft.offsetLeft + 'px';\r\n\t\tthis.lineSpan.style.width = this.touchRight.offsetLeft - this.touchLeft.offsetLeft + 'px';\r\n\t\tthis.slider.setAttribute(selectors$D.dataMinValue, minValue);\r\n\t  }\r\n  \r\n\t  setMaxValue(maxValue) {\r\n\t\tconst ratio = (maxValue - this.min) / (this.max - this.min);\r\n\t\tthis.touchRight.style.left = Math.ceil(ratio * (this.slider.offsetWidth - (this.touchLeft.offsetWidth + this.normalizeFact)) + this.normalizeFact) + 'px';\r\n\t\tthis.lineSpan.style.marginLeft = this.touchLeft.offsetLeft + 'px';\r\n\t\tthis.lineSpan.style.width = this.touchRight.offsetLeft - this.touchLeft.offsetLeft + 'px';\r\n\t\tthis.slider.setAttribute(selectors$D.dataMaxValue, maxValue);\r\n\t  }\r\n  \r\n\t  onStart(event) {\r\n\t\t// Prevent default dragging of selected content\r\n\t\tevent.preventDefault();\r\n\t\tlet eventTouch = event;\r\n  \r\n\t\tif (event.touches) {\r\n\t\t  eventTouch = event.touches[0];\r\n\t\t}\r\n  \r\n\t\tif (event.currentTarget === this.touchLeft) {\r\n\t\t  this.x = this.touchLeft.offsetLeft;\r\n\t\t} else if (event.currentTarget === this.touchRight) {\r\n\t\t  this.x = this.touchRight.offsetLeft;\r\n\t\t}\r\n  \r\n\t\tthis.startX = eventTouch.pageX - this.x;\r\n\t\tthis.selectedTouch = event.currentTarget;\r\n\t\tdocument.addEventListener('mousemove', this.onMoveEvent);\r\n\t\tdocument.addEventListener('mouseup', this.onStopEvent);\r\n\t\tdocument.addEventListener('touchmove', this.onMoveEvent, {passive: true});\r\n\t\tdocument.addEventListener('touchend', this.onStopEvent, {passive: true});\r\n\t  }\r\n  \r\n\t  onMove(event) {\r\n\t\tlet eventTouch = event;\r\n  \r\n\t\tif (event.touches) {\r\n\t\t  eventTouch = event.touches[0];\r\n\t\t}\r\n  \r\n\t\tthis.x = eventTouch.pageX - this.startX;\r\n  \r\n\t\tif (this.selectedTouch === this.touchLeft) {\r\n\t\t  if (this.x > this.touchRight.offsetLeft - this.selectedTouch.offsetWidth + 10) {\r\n\t\t\tthis.x = this.touchRight.offsetLeft - this.selectedTouch.offsetWidth + 10;\r\n\t\t  } else if (this.x < 0) {\r\n\t\t\tthis.x = 0;\r\n\t\t  }\r\n  \r\n\t\t  this.selectedTouch.style.left = this.x + 'px';\r\n\t\t} else if (this.selectedTouch === this.touchRight) {\r\n\t\t  if (this.x < this.touchLeft.offsetLeft + this.touchLeft.offsetWidth - 10) {\r\n\t\t\tthis.x = this.touchLeft.offsetLeft + this.touchLeft.offsetWidth - 10;\r\n\t\t  } else if (this.x > this.maxX) {\r\n\t\t\tthis.x = this.maxX;\r\n\t\t  }\r\n\t\t  this.selectedTouch.style.left = this.x + 'px';\r\n\t\t}\r\n  \r\n\t\t// update line span\r\n\t\tthis.lineSpan.style.marginLeft = this.touchLeft.offsetLeft + 'px';\r\n\t\tthis.lineSpan.style.width = this.touchRight.offsetLeft - this.touchLeft.offsetLeft + 'px';\r\n  \r\n\t\t// write new value\r\n\t\tthis.calculateValue();\r\n  \r\n\t\t// call on change\r\n\t\tif (this.slider.getAttribute('on-change')) {\r\n\t\t  const fn = new Function('min, max', this.slider.getAttribute('on-change'));\r\n\t\t  fn(this.slider.getAttribute(selectors$D.dataMinValue), this.slider.getAttribute(selectors$D.dataMaxValue));\r\n\t\t}\r\n  \r\n\t\tthis.onChange(this.slider.getAttribute(selectors$D.dataMinValue), this.slider.getAttribute(selectors$D.dataMaxValue));\r\n\t  }\r\n  \r\n\t  onStop(event) {\r\n\t\tdocument.removeEventListener('mousemove', this.onMoveEvent);\r\n\t\tdocument.removeEventListener('mouseup', this.onStopEvent);\r\n\t\tdocument.removeEventListener('touchmove', this.onMoveEvent, {passive: true});\r\n\t\tdocument.removeEventListener('touchend', this.onStopEvent, {passive: true});\r\n  \r\n\t\tthis.selectedTouch = null;\r\n  \r\n\t\t// write new value\r\n\t\tthis.calculateValue();\r\n  \r\n\t\t// call did changed\r\n\t\tthis.onChanged(this.slider.getAttribute(selectors$D.dataMinValue), this.slider.getAttribute(selectors$D.dataMaxValue));\r\n\t  }\r\n  \r\n\t  onChange(min, max) {\r\n\t\tconst rangeHolder = this.slider.closest(selectors$D.rangeHolder);\r\n\t\tif (rangeHolder) {\r\n\t\t  const priceMin = rangeHolder.querySelector(selectors$D.priceMin);\r\n\t\t  const priceMax = rangeHolder.querySelector(selectors$D.priceMax);\r\n  \r\n\t\t  if (priceMin && priceMax) {\r\n\t\t\tpriceMin.value = parseInt(min);\r\n\t\t\tpriceMax.value = parseInt(max);\r\n\t\t  }\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onChanged(min, max) {\r\n\t\tif (this.slider.hasAttribute(selectors$D.dataFilterUpdate)) {\r\n\t\t  this.slider.dispatchEvent(new CustomEvent('theme:filter:range-update', {bubbles: true}));\r\n\t\t}\r\n\t  }\r\n  \r\n\t  calculateValue() {\r\n\t\tconst newValue = (this.lineSpan.offsetWidth - this.normalizeFact) / this.initialValue;\r\n\t\tlet minValue = this.lineSpan.offsetLeft / this.initialValue;\r\n\t\tlet maxValue = minValue + newValue;\r\n  \r\n\t\tminValue = minValue * (this.max - this.min) + this.min;\r\n\t\tmaxValue = maxValue * (this.max - this.min) + this.min;\r\n  \r\n\t\tif (this.step !== 0.0) {\r\n\t\t  let multi = Math.floor(minValue / this.step);\r\n\t\t  minValue = this.step * multi;\r\n  \r\n\t\t  multi = Math.floor(maxValue / this.step);\r\n\t\t  maxValue = this.step * multi;\r\n\t\t}\r\n  \r\n\t\tif (this.selectedTouch === this.touchLeft) {\r\n\t\t  this.slider.setAttribute(selectors$D.dataMinValue, minValue);\r\n\t\t}\r\n  \r\n\t\tif (this.selectedTouch === this.touchRight) {\r\n\t\t  this.slider.setAttribute(selectors$D.dataMaxValue, maxValue);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  unload() {\r\n\t\tdocument.removeEventListener('theme:filters:init', this.initListener);\r\n\t\twindow.removeEventListener('theme:resize', this.resizeFilters);\r\n\t  }\r\n\t}\r\n  \r\n\tconst selectors$C = {\r\n\t  slider: '[data-slider]',\r\n\t  productMediaContainer: '[data-product-media-container]',\r\n\t  productMediaSlider: '[data-product-media-slideshow]',\r\n\t  productMediaSlide: '[data-product-media-slideshow-slide]',\r\n\t  progressBar: '[data-product-slideshow-progress]',\r\n\t  flickityButton: '.flickity-button',\r\n\t  popupProduct: '[data-product]',\r\n\t  popupClose: '[data-popup-close]',\r\n\t};\r\n  \r\n\tconst classes$r = {\r\n\t  fill: 'fill',\r\n\t  quickViewVisible: 'js-quick-view-visible',\r\n\t};\r\n  \r\n\tconst sections$s = {};\r\n  \r\n\tclass ProductGrid {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t\tthis.body = document.body;\r\n\t\tthis.sliders = this.container.querySelectorAll(selectors$C.slider);\r\n  \r\n\t\tif (theme.settings.productGridHover === 'slideshow' && !window.theme.touch) {\r\n\t\t  this.productGridSlideshow();\r\n\t\t}\r\n  \r\n\t\tnew QuickViewPopup(this.container);\r\n\t  }\r\n  \r\n\t  /* Product grid slideshow */\r\n\t  productGridSlideshow() {\r\n\t\tconst productMediaSlider = this.container.querySelectorAll(selectors$C.productMediaSlider);\r\n\t\tconst linkedImages = this.container.querySelectorAll(selectors$C.productMediaContainer);\r\n  \r\n\t\tif (productMediaSlider.length) {\r\n\t\t  productMediaSlider.forEach((slider) => {\r\n\t\t\tconst mediaContainer = slider.closest(selectors$C.productMediaContainer);\r\n\t\t\tconst progressBar = mediaContainer.querySelector(selectors$C.progressBar);\r\n\t\t\tconst countImages = slider.querySelectorAll(selectors$C.productMediaSlide).length;\r\n\t\t\tconst autoplaySpeed = 2200;\r\n\t\t\tconst draggable = !this.sliders.length; // Enable dragging if only layout is not Carousel\r\n\t\t\tlet flkty = new Flickity.data(slider);\r\n\t\t\tlet timer = 0;\r\n\t\t\tlet cellSelector = selectors$C.productMediaSlide;\r\n  \r\n\t\t\tif (!flkty.isActive && countImages > 1) {\r\n\t\t\t  flkty = new Flickity(slider, {\r\n\t\t\t\tdraggable: draggable,\r\n\t\t\t\tcellSelector: cellSelector,\r\n\t\t\t\tcontain: true,\r\n\t\t\t\twrapAround: true,\r\n\t\t\t\timagesLoaded: true,\r\n\t\t\t\tlazyLoad: true,\r\n\t\t\t\tpageDots: false,\r\n\t\t\t\tprevNextButtons: false,\r\n\t\t\t\tadaptiveHeight: false,\r\n\t\t\t\tpauseAutoPlayOnHover: false,\r\n\t\t\t\tselectedAttraction: 0.2,\r\n\t\t\t\tfriction: 1,\r\n\t\t\t\ton: {\r\n\t\t\t\t  ready: () => {\r\n\t\t\t\t\tthis.container.style.setProperty('--autoplay-speed', `${autoplaySpeed}ms`);\r\n\t\t\t\t  },\r\n\t\t\t\t  change: () => {\r\n\t\t\t\t\tif (timer) {\r\n\t\t\t\t\t  clearTimeout(timer);\r\n\t\t\t\t\t}\r\n  \r\n\t\t\t\t\tprogressBar.classList.remove(classes$r.fill);\r\n  \r\n\t\t\t\t\trequestAnimationFrame(() => {\r\n\t\t\t\t\t  progressBar.classList.add(classes$r.fill);\r\n\t\t\t\t\t});\r\n  \r\n\t\t\t\t\ttimer = setTimeout(() => {\r\n\t\t\t\t\t  progressBar.classList.remove(classes$r.fill);\r\n\t\t\t\t\t}, autoplaySpeed);\r\n\t\t\t\t  },\r\n\t\t\t\t  dragEnd: () => {\r\n\t\t\t\t\tflkty.playPlayer();\r\n\t\t\t\t  },\r\n\t\t\t\t},\r\n\t\t\t  });\r\n  \r\n\t\t\t  if (!window.theme.touch) {\r\n\t\t\t\tmediaContainer.addEventListener('mouseenter', () => {\r\n\t\t\t\t  progressBar.classList.add(classes$r.fill);\r\n  \r\n\t\t\t\t  if (timer) {\r\n\t\t\t\t\tclearTimeout(timer);\r\n\t\t\t\t  }\r\n  \r\n\t\t\t\t  timer = setTimeout(() => {\r\n\t\t\t\t\tprogressBar.classList.remove(classes$r.fill);\r\n\t\t\t\t  }, autoplaySpeed);\r\n  \r\n\t\t\t\t  flkty.options.autoPlay = autoplaySpeed;\r\n\t\t\t\t  flkty.playPlayer();\r\n\t\t\t\t});\r\n\t\t\t\tmediaContainer.addEventListener('mouseleave', () => {\r\n\t\t\t\t  flkty.stopPlayer();\r\n\t\t\t\t  if (timer) {\r\n\t\t\t\t\tclearTimeout(timer);\r\n\t\t\t\t  }\r\n\t\t\t\t  progressBar.classList.remove(classes$r.fill);\r\n\t\t\t\t});\r\n\t\t\t  }\r\n\t\t\t}\r\n\t\t  });\r\n\t\t}\r\n  \r\n\t\t// Prevent page redirect on slideshow arrow click\r\n\t\tif (linkedImages.length) {\r\n\t\t  linkedImages.forEach((item) => {\r\n\t\t\titem.addEventListener('click', (e) => {\r\n\t\t\t  if (e.target.matches(selectors$C.flickityButton)) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t  }\r\n\t\t\t});\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Quickview popup close function\r\n\t   */\r\n\t  popupClose() {\r\n\t\tconst popupProduct = document.querySelector(selectors$C.popupProduct);\r\n\t\tif (popupProduct) {\r\n\t\t  const popupClose = popupProduct.querySelector(selectors$C.popupClose);\r\n\t\t  popupClose.dispatchEvent(new Event('click'));\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Event callback for Theme Editor `section:block:select` event\r\n\t   */\r\n\t  onBlockSelect() {\r\n\t\tif (this.body.classList.contains(classes$r.quickViewVisible)) {\r\n\t\t  this.popupClose();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Event callback for Theme Editor `section:deselect` event\r\n\t   */\r\n\t  onDeselect() {\r\n\t\tif (this.body.classList.contains(classes$r.quickViewVisible)) {\r\n\t\t  this.popupClose();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Event callback for Theme Editor `section:unload` event\r\n\t   */\r\n\t  onUnload() {\r\n\t\tif (this.body.classList.contains(classes$r.quickViewVisible)) {\r\n\t\t  this.popupClose();\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tconst productGrid = {\r\n\t  onLoad() {\r\n\t\tsections$s[this.id] = new ProductGrid(this.container);\r\n\t  },\r\n\t  onBlockSelect() {\r\n\t\tsections$s[this.id].onBlockSelect();\r\n\t  },\r\n\t  onDeselect() {\r\n\t\tsections$s[this.id].onDeselect();\r\n\t  },\r\n\t  onUnload() {\r\n\t\tsections$s[this.id].onUnload();\r\n\t  },\r\n\t};\r\n  \r\n\tconst selectors$B = {\r\n\t  ajaxinateContainer: '#AjaxinateLoop',\r\n\t  ajaxinatePagination: '#AjaxinatePagination',\r\n\t};\r\n  \r\n\tlet sections$r = {};\r\n  \r\n\tclass Ajaxify {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t\tthis.endlessScroll = null;\r\n  \r\n\t\tif (theme.settings.enableInfinityScroll) {\r\n\t\t  this.init();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tthis.loadMoreFix();\r\n\t\tthis.endlessScroll = new Ajaxinate({\r\n\t\t  container: selectors$B.ajaxinateContainer,\r\n\t\t  pagination: selectors$B.ajaxinatePagination,\r\n\t\t  method: 'scroll',\r\n\t\t});\r\n\t  }\r\n  \r\n\t  loadMoreFix() {\r\n\t\t// Fix ajaxinate in theme editor\r\n\t\tAjaxinate.prototype.loadMore = function loadMore() {\r\n\t\t  this.request = new XMLHttpRequest();\r\n  \r\n\t\t  this.request.onreadystatechange = function success() {\r\n\t\t\tif (!this.request.responseXML) {\r\n\t\t\t  return;\r\n\t\t\t}\r\n\t\t\tif (!this.request.readyState === 4 || !this.request.status === 200) {\r\n\t\t\t  return;\r\n\t\t\t}\r\n  \r\n\t\t\tconst newContainer = this.request.responseXML.querySelector(this.settings.container);\r\n\t\t\tconst newPagination = this.request.responseXML.querySelector(this.settings.pagination);\r\n  \r\n\t\t\tthis.containerElement.insertAdjacentHTML('beforeend', newContainer.innerHTML);\r\n  \r\n\t\t\tif (typeof newPagination === 'undefined' || newPagination === null) {\r\n\t\t\t  this.removePaginationElement();\r\n\t\t\t} else {\r\n\t\t\t  this.paginationElement.innerHTML = newPagination.innerHTML;\r\n  \r\n\t\t\t  if (this.settings.callback && typeof this.settings.callback === 'function') {\r\n\t\t\t\tthis.settings.callback(this.request.responseXML);\r\n\t\t\t  }\r\n  \r\n\t\t\t  this.initialize();\r\n\t\t\t}\r\n\t\t  }.bind(this);\r\n  \r\n\t\t  this.request.open('GET', this.nextPageUrl, true);\r\n\t\t  this.request.responseType = 'document';\r\n\t\t  this.request.send();\r\n\t\t};\r\n\t  }\r\n  \r\n\t  unload() {\r\n\t\tif (this.endlessScroll) {\r\n\t\t  this.endlessScroll.destroy();\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tconst ajaxify = {\r\n\t  onLoad() {\r\n\t\tsections$r = new Ajaxify(this.container);\r\n\t  },\r\n\t  onUnload: function () {\r\n\t\tif (typeof sections$r.unload === 'function') {\r\n\t\t  sections$r.unload();\r\n\t\t}\r\n\t  },\r\n\t};\r\n  \r\n\tconst settings$1 = {\r\n\t  loadingTimeout: 300,\r\n\t};\r\n  \r\n\tconst selectors$A = {\r\n\t  buttons: 'button',\r\n\t  toggleFilters: '[data-toggle-filters]',\r\n\t  closeFilters: '[data-close-filters]',\r\n\t  openFilters: '[data-open-filters]',\r\n\t  collectionWrapper: '[data-collection-wrapper]',\r\n\t  collapsibleTrigger: '[data-collapsible-trigger]',\r\n\t  sortToggle: '[data-sort-toggle]',\r\n\t  collectionSortOptions: '[data-collection-sort-options]',\r\n\t  inputs: 'input, select, label, textarea',\r\n\t  inputSort: '[data-input-sort]',\r\n\t  filters: '[data-collection-filters]',\r\n\t  filtersWrapper: '[data-collection-filters-wrapper]',\r\n\t  filtersList: '[data-collection-filters-list]',\r\n\t  filtersStickyBar: '[data-collection-sticky-bar]',\r\n\t  filter: '[data-collection-filter]',\r\n\t  filterTag: '[data-collection-filter-tag]',\r\n\t  filterTagButton: '[data-collection-filter-tag-button]',\r\n\t  filtersForm: '[data-collection-filters-form]',\r\n\t  filterResetButton: '[data-filter-reset-button]',\r\n\t  filterTagClearButton: '[data-filter-tag-reset-button]',\r\n\t  popupsSection: '[data-section-type=\"popups\"]',\r\n\t  productGrid: '[data-collection-products]',\r\n\t  productsCount: '[data-products-count]',\r\n\t  priceMin: '[data-field-price-min]',\r\n\t  priceMax: '[data-field-price-max]',\r\n\t  rangeMin: '[data-se-min-value]',\r\n\t  rangeMax: '[data-se-max-value]',\r\n\t  rangeMinValue: 'data-se-min-value',\r\n\t  rangeMaxValue: 'data-se-max-value',\r\n\t  rangeMinDefault: 'data-se-min',\r\n\t  rangeMaxDefault: 'data-se-max',\r\n\t  tooltip: '[data-tooltip]',\r\n\t  showMore: '[data-show-more]',\r\n\t  showMoreActions: '[data-show-more-actions]',\r\n\t  showMoreContainer: '[data-show-more-container]',\r\n\t  showMoreTrigger: '[data-show-more-trigger]',\r\n\t};\r\n  \r\n\tconst classes$q = {\r\n\t  isActive: 'is-active',\r\n\t  isExpanded: 'is-expanded',\r\n\t  isVisible: 'is-visible',\r\n\t  isLoading: 'is-loading',\r\n\t  popupVisible: 'popup--visible',\r\n\t  collectionFiltersVisible: 'collection__filters--visible',\r\n\t  collectionSortOptionWrapperVisible: 'collection__sort__option-wrapper--visible',\r\n\t  hidden: 'is-hidden',\r\n\t};\r\n  \r\n\tconst attributes$o = {\r\n\t  filterActive: 'data-filter-active',\r\n\t  preventScrollLock: 'data-prevent-scroll-lock',\r\n\t  filtersDefaultState: 'data-filters-default-state',\r\n\t  tabIndex: 'tabindex',\r\n\t  ariaExpanded: 'aria-expanded',\r\n\t};\r\n  \r\n\tconst sections$q = {};\r\n  \r\n\tclass Filters {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t\tthis.sectionId = container.dataset.sectionId;\r\n\t\tthis.enableFilters = container.dataset.enableFilters === 'true';\r\n\t\tthis.enableSorting = container.dataset.enableSorting === 'true';\r\n\t\tthis.filterMode = container.dataset.filterMode;\r\n\t\tthis.collectionHandle = this.container.dataset.collection;\r\n\t\tthis.productGrid = this.container.querySelector(selectors$A.productGrid);\r\n\t\tthis.productsCount = this.container.querySelector(selectors$A.productsCount);\r\n\t\tthis.groupTagFilters = this.container.querySelectorAll(selectors$A.filter);\r\n\t\tthis.filters = this.container.querySelector(selectors$A.filters);\r\n\t\tthis.filterTriggers = this.container.querySelectorAll(selectors$A.collapsibleTrigger);\r\n\t\tthis.filtersStickyBar = this.container.querySelector(selectors$A.filtersStickyBar);\r\n\t\tthis.filtersForm = this.container.querySelector(selectors$A.filtersForm);\r\n\t\tthis.inputSort = this.container.querySelectorAll(selectors$A.inputSort);\r\n\t\tthis.sortToggle = this.container.querySelector(selectors$A.sortToggle);\r\n\t\tthis.collectionSortOptions = this.container.querySelector(selectors$A.collectionSortOptions);\r\n\t\tthis.a11y = a11y;\r\n\t\tthis.filterData = [];\r\n\t\tthis.rangeSlider = null;\r\n\t\tthis.sortDropdownEvent = () => this.sortDropdownToggle();\r\n\t\tthis.onTabHandlerEvent = (event) => this.onTabHandler(event);\r\n\t\tthis.updateCollectionFormSortEvent = (event) => this.updateCollectionFormSort(event);\r\n\t\tthis.bodyClickEvent = (event) => this.bodyClick(event);\r\n\t\tthis.onFilterResetClick = this.onFilterResetClick.bind(this);\r\n\t\tthis.onFilterTagResetClick = this.onFilterTagResetClick.bind(this);\r\n\t\tthis.onFilterTagClearClick = this.onFilterTagClearClick.bind(this);\r\n\t\tthis.onFilterToggleClick = this.onFilterToggleClick.bind(this);\r\n\t\tthis.onKeyUpHandler = this.onKeyUpHandler.bind(this);\r\n\t\tthis.updateRangeEvent = this.updateRange.bind(this);\r\n\t\tthis.debouncedSubmitEvent = debounce((event) => {\r\n\t\t  this.onSubmitHandler(event);\r\n\t\t}, 500);\r\n\t\tthis.debouncedSortEvent = debounce((event) => {\r\n\t\t  this.onSortChange(event);\r\n\t\t}, 500);\r\n\t\tthis.productGridEvents = {};\r\n  \r\n\t\tif (this.filters) {\r\n\t\t  this.hideFiltersDrawer = this.hideFiltersDrawer.bind(this);\r\n\t\t  this.showFiltersDrawer = this.showFiltersDrawer.bind(this);\r\n\t\t  this.resizeEvent = debounce(() => {\r\n\t\t\tthis.filtersResizeEvents();\r\n\t\t  }, 500);\r\n\t\t  this.filtersResizeEvents();\r\n\t\t  document.addEventListener('theme:resize:width', this.resizeEvent);\r\n\t\t}\r\n  \r\n\t\tthis.initTagFilters();\r\n\t\tthis.initFacetedFilters();\r\n\t\tthis.bindToggleButtonsEvents();\r\n\t\tthis.bindFilterButtonsEvents();\r\n\t\tthis.initProductGridEvents(theme.settings.enableInfinityScroll);\r\n  \r\n\t\tmakeSwatches(this.container);\r\n\t\tthis.collapsible = new Collapsible(this.container);\r\n  \r\n\t\t// Update css variable for collection sticky bar height\r\n\t\tsetVars();\r\n  \r\n\t\twindow.addEventListener('popstate', this.onHistoryChange.bind(this));\r\n  \r\n\t\tthis.sortToggle?.addEventListener('click', this.sortDropdownEvent);\r\n  \r\n\t\tdocument.addEventListener('click', this.bodyClickEvent);\r\n  \r\n\t\tthis.filterShowMore();\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Init faceted filters\r\n\t   */\r\n\t  initFacetedFilters() {\r\n\t\tif (this.filterMode == 'tag' || this.filterMode == 'group' || !this.enableFilters) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tthis.rangeSlider = new RangeSlider(this.container);\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Init tooltips for swatches\r\n\t   */\r\n\t  initTooltips() {\r\n\t\tthis.tooltips = this.container.querySelectorAll(selectors$A.tooltip);\r\n  \r\n\t\tif (window.innerWidth < theme.sizes.small) {\r\n\t\t  this.tooltips = this.productGrid?.querySelectorAll(selectors$A.tooltip);\r\n\t\t}\r\n  \r\n\t\tthis.tooltips?.forEach((tooltip) => {\r\n\t\t  new Tooltip(tooltip);\r\n\t\t});\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Price range slider update\r\n\t   */\r\n\t  updateRange() {\r\n\t\tconst rangeMin = this.filtersForm.querySelector(selectors$A.rangeMin);\r\n\t\tconst rangeMax = this.filtersForm.querySelector(selectors$A.rangeMax);\r\n\t\tconst priceMin = this.filtersForm.querySelector(selectors$A.priceMin);\r\n\t\tconst priceMax = this.filtersForm.querySelector(selectors$A.priceMax);\r\n  \r\n\t\tif (rangeMin.hasAttribute(selectors$A.rangeMinValue) && rangeMax.hasAttribute(selectors$A.rangeMaxValue)) {\r\n\t\t  const priceMinValue = parseFloat(priceMin.placeholder, 10);\r\n\t\t  const priceMaxValue = parseFloat(priceMax.placeholder, 10);\r\n\t\t  const rangeMinValue = parseFloat(rangeMin.getAttribute(selectors$A.rangeMinValue), 10);\r\n\t\t  const rangeMaxValue = parseFloat(rangeMax.getAttribute(selectors$A.rangeMaxValue), 10);\r\n  \r\n\t\t  if (priceMinValue !== rangeMinValue || priceMaxValue !== rangeMaxValue) {\r\n\t\t\tpriceMin.value = parseInt(rangeMinValue);\r\n\t\t\tpriceMax.value = parseInt(rangeMaxValue);\r\n  \r\n\t\t\tthis.filtersForm.dispatchEvent(new Event('input', {bubbles: true}));\r\n\t\t  }\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Render product grid and filters on form submission\r\n\t   */\r\n\t  onSubmitHandler(event) {\r\n\t\tevent.preventDefault();\r\n\t\tconst formData = new FormData(this.filtersForm);\r\n\t\tconst searchParams = new URLSearchParams(formData);\r\n  \r\n\t\t// if submitted price equal to price range min and max remove price parameters\r\n\t\tconst rangeMin = this.filtersForm.querySelector(selectors$A.rangeMin);\r\n\t\tconst rangeMax = this.filtersForm.querySelector(selectors$A.rangeMax);\r\n\t\tconst priceMin = this.filtersForm.querySelector(selectors$A.priceMin);\r\n\t\tconst priceMax = this.filtersForm.querySelector(selectors$A.priceMax);\r\n\t\tconst checkElements = rangeMin && rangeMax && priceMin && priceMax;\r\n  \r\n\t\tif (checkElements && rangeMin.hasAttribute(selectors$A.rangeMinDefault) && rangeMax.hasAttribute(selectors$A.rangeMaxDefault)) {\r\n\t\t  const rangeMinDefault = parseFloat(rangeMin.getAttribute(selectors$A.rangeMinDefault), 10);\r\n\t\t  const rangeMaxDefault = parseFloat(rangeMax.getAttribute(selectors$A.rangeMaxDefault), 10);\r\n\t\t  const priceMinValue = !priceMin.value ? rangeMinDefault : parseFloat(priceMin.value, 10);\r\n\t\t  const priceMaxValue = !priceMax.value ? rangeMaxDefault : parseFloat(priceMax.value, 10);\r\n  \r\n\t\t  if (priceMinValue <= rangeMinDefault && priceMaxValue >= rangeMaxDefault) {\r\n\t\t\tsearchParams.delete('filter.v.price.gte');\r\n\t\t\tsearchParams.delete('filter.v.price.lte');\r\n\t\t  }\r\n\t\t}\r\n  \r\n\t\tthis.renderSection(searchParams.toString(), event);\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Call renderSection on history change\r\n\t   */\r\n\t  onHistoryChange(event) {\r\n\t\tif (!this.filters) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tconst searchParams = event.state?.searchParams || '';\r\n\t\tthis.renderSection(searchParams, null, false);\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Render section on history change or filter/sort change event\r\n\t   */\r\n\t  renderSection(searchParams, event, updateURLHash = true) {\r\n\t\tthis.startLoading();\r\n\t\tconst url = `${window.location.pathname}?section_id=${this.sectionId}&${searchParams}`;\r\n\t\tconst filterDataUrl = (element) => element.url === url;\r\n\t\tthis.filterData.some(filterDataUrl) ? this.renderSectionFromCache(filterDataUrl, event) : this.renderSectionFromFetch(url, event);\r\n  \r\n\t\tif (updateURLHash) {\r\n\t\t  this.updateURLHash(searchParams);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Render section from fetch call\r\n\t   */\r\n\t  renderSectionFromFetch(url) {\r\n\t\tfetch(url)\r\n\t\t  .then((response) => response.text())\r\n\t\t  .then((responseText) => {\r\n\t\t\tconst html = responseText;\r\n\t\t\tthis.filterData = [...this.filterData, {html, url}];\r\n\t\t\tthis.inputSort = this.container.querySelectorAll(selectors$A.inputSort);\r\n\t\t\tthis.renderFilters(html);\r\n\t\t\tthis.bindFilterButtonsEvents();\r\n\t\t\tthis.hideFiltersOnMobile();\r\n\t\t\tthis.renderProductGrid(html);\r\n\t\t\tthis.updateProductsCount(html);\r\n\t\t\tthis.finishLoading();\r\n\t\t\tthis.mobileFiltersScrollLock();\r\n\t\t  });\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Render section from Cache\r\n\t   */\r\n\t  renderSectionFromCache(filterDataUrl, event) {\r\n\t\tconst html = this.filterData.find(filterDataUrl).html;\r\n\t\tthis.renderFilters(html, event);\r\n\t\tthis.hideFiltersOnMobile();\r\n\t\tthis.renderProductGrid(html);\r\n\t\tthis.updateProductsCount(html);\r\n\t\tthis.finishLoading();\r\n\t\tthis.mobileFiltersScrollLock();\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Render product grid items on fetch call\r\n\t   */\r\n\t  renderProductGrid(html) {\r\n\t\tconst newProductGrid = new DOMParser().parseFromString(html, 'text/html').querySelector(selectors$A.productGrid);\r\n  \r\n\t\tif (!newProductGrid) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tthis.productGrid.innerHTML = newProductGrid.innerHTML;\r\n  \r\n\t\tthis.initProductGridEvents(theme.settings.enableInfinityScroll);\r\n\t\tthis.filterShowMore();\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Update total number of products on fetch call\r\n\t   */\r\n\t  updateProductsCount(html) {\r\n\t\tconst newProductsCount = new DOMParser().parseFromString(html, 'text/html').querySelector(selectors$A.productsCount);\r\n  \r\n\t\tif (!newProductsCount) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tthis.productsCount.innerHTML = newProductsCount.innerHTML;\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Render filters on fetch call\r\n\t   */\r\n\t  renderFilters(html) {\r\n\t\tconst newFilters = new DOMParser().parseFromString(html, 'text/html').querySelector(selectors$A.filters);\r\n  \r\n\t\tif (!newFilters) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tthis.filters.innerHTML = newFilters.innerHTML;\r\n\t\tthis.filtersForm = document.querySelector(selectors$A.filtersForm);\r\n\t\tthis.bindFilterButtonsEvents();\r\n\t\tthis.bindToggleButtonsEvents();\r\n\t\tmakeSwatches(this.container);\r\n\t\tthis.collapsible = new Collapsible(this.container);\r\n  \r\n\t\t// Init price range slider\r\n\t\tdocument.dispatchEvent(new CustomEvent('theme:filters:init', {bubbles: true}));\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Update URL when filter/sort is changed\r\n\t   */\r\n\t  updateURLHash(searchParams) {\r\n\t\thistory.pushState({searchParams}, '', `${window.location.pathname}${searchParams && '?'.concat(searchParams)}`);\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Bind filter buttons events\r\n\t   */\r\n\t  bindFilterButtonsEvents() {\r\n\t\tif (this.inputSort.length > 0) {\r\n\t\t  this.inputSort.forEach((input) => {\r\n\t\t\tinput.addEventListener('change', this.updateCollectionFormSortEvent);\r\n\t\t  });\r\n\t\t}\r\n  \r\n\t\tif (this.filtersForm) {\r\n\t\t  this.filtersForm.addEventListener('input', this.debouncedSubmitEvent.bind(this));\r\n  \r\n\t\t  this.filtersForm.addEventListener('theme:filter:range-update', this.updateRangeEvent);\r\n\t\t}\r\n  \r\n\t\tif (this.collectionSortOptions) {\r\n\t\t  this.collectionSortOptions.addEventListener('keyup', this.onTabHandlerEvent);\r\n\t\t}\r\n  \r\n\t\tif (this.filterMode == 'tag' || this.filterMode == 'group' || !this.enableFilters) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tthis.container.querySelectorAll(selectors$A.filterResetButton).forEach((button) => {\r\n\t\t  button.addEventListener('click', this.onFilterResetClick, {once: true});\r\n\t\t});\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Render products on specific filter click event\r\n\t   */\r\n\t  onFilterResetClick(event) {\r\n\t\tevent.preventDefault();\r\n\t\tthis.renderSection(new URL(event.currentTarget.href).searchParams.toString());\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Bind filter title click events to toggle options visibility\r\n\t   */\r\n\t  bindToggleButtonsEvents() {\r\n\t\tthis.container.querySelectorAll(selectors$A.toggleFilters).forEach((button) => {\r\n\t\t  button.addEventListener('click', this.onFilterToggleClick);\r\n\t\t});\r\n\t\tthis.container.querySelectorAll(selectors$A.closeFilters).forEach((button) => {\r\n\t\t  button.addEventListener('click', this.hideFiltersDrawer);\r\n\t\t});\r\n\t\tthis.container.querySelectorAll(selectors$A.openFilters).forEach((button) => {\r\n\t\t  button.addEventListener('click', this.showFiltersDrawer);\r\n\t\t});\r\n  \r\n\t\tthis.container.querySelector(selectors$A.collectionWrapper)?.addEventListener('keyup', this.onKeyUpHandler);\r\n\t  }\r\n  \r\n\t  onTabHandler(event) {\r\n\t\tif (event.code === theme.keyboardKeys.SPACE || event.code === theme.keyboardKeys.ENTER || event.code === theme.keyboardKeys.NUMPADENTER) {\r\n\t\t  const newSortValue = event.target.previousElementSibling.value;\r\n  \r\n\t\t  this.filtersForm.querySelectorAll(selectors$A.inputSort).forEach((input) => {\r\n\t\t\tif (input.checked) {\r\n\t\t\t  input.checked = false;\r\n\t\t\t}\r\n\t\t\tif (input.value === newSortValue) {\r\n\t\t\t  input.checked = true;\r\n\t\t\t}\r\n\t\t  });\r\n  \r\n\t\t  this.filtersForm.dispatchEvent(new Event('input', {bubbles: true}));\r\n\t\t  event.target.dispatchEvent(new Event('click', {bubbles: true}));\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Event handler on user ESC key press\r\n\t   */\r\n\t  onKeyUpHandler(event) {\r\n\t\tif (event.code === theme.keyboardKeys.ESCAPE) {\r\n\t\t  this.hideFiltersDrawer();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Toggle filter options on title click\r\n\t   */\r\n\t  onFilterToggleClick(event) {\r\n\t\tevent.preventDefault();\r\n\t\tsetVars(); // Update css variables for correct filters drawer height\r\n  \r\n\t\tconst filtersVisible = this.filters.classList.contains(classes$q.collectionFiltersVisible);\r\n  \r\n\t\tfiltersVisible ? this.hideFiltersDrawer() : this.showFiltersDrawer();\r\n\t  }\r\n  \r\n\t  sortDropdownToggle() {\r\n\t\tif (!this.collectionSortOptions) return;\r\n  \r\n\t\tthis.collectionSortOptions.classList.toggle(classes$q.collectionSortOptionWrapperVisible);\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Close the sort dropdown on button click outside the dropdown (for desktop)\r\n\t   */\r\n\t  bodyClick(event) {\r\n\t\tif (!this.collectionSortOptions) return;\r\n  \r\n\t\tconst isSortBar = this.sortToggle.contains(event.target);\r\n\t\tconst isVisible = this.collectionSortOptions.classList.contains(classes$q.collectionSortOptionWrapperVisible);\r\n  \r\n\t\tif (isVisible && !isSortBar) {\r\n\t\t  this.sortDropdownToggle();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  updateCollectionFormSort(event) {\r\n\t\tconst target = event.target;\r\n\t\tconst newSortValue = target.value;\r\n\t\tconst secondarySortBy = target.closest(selectors$A.collectionSortOptions);\r\n  \r\n\t\tthis.container.querySelectorAll(selectors$A.inputSort).forEach((input) => {\r\n\t\t  if (input.value === newSortValue) {\r\n\t\t\tinput.checked = true;\r\n\t\t  }\r\n\t\t});\r\n  \r\n\t\tif (secondarySortBy !== null) {\r\n\t\t  this.filtersForm.dispatchEvent(new Event('input', {bubbles: true}));\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Scroll down and open collection filters if they are hidden\r\n\t   */\r\n\t  showFiltersDrawer() {\r\n\t\tconst instance = this;\r\n  \r\n\t\tthis.a11y.state.trigger = document.querySelector(selectors$A.toggleFilters);\r\n  \r\n\t\t// Trap focus\r\n\t\tthis.a11y.trapFocus({\r\n\t\t  container: instance.filters,\r\n\t\t});\r\n  \r\n\t\tthis.mobileFiltersScrollLock();\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Scroll lock activation for filters drawer (on mobile)\r\n\t   */\r\n\t  mobileFiltersScrollLock() {\r\n\t\t// Open filters and scroll lock if only they are hidden on lower sized screens\r\n\t\tif (window.innerWidth < theme.sizes.small) {\r\n\t\t  const scrollableElement = document.querySelector(selectors$A.filtersList);\r\n  \r\n\t\t  if (!this.filters.classList.contains(classes$q.collectionFiltersVisible)) {\r\n\t\t\tthis.filters.classList.add(classes$q.collectionFiltersVisible);\r\n\t\t  }\r\n  \r\n\t\t  document.dispatchEvent(new CustomEvent('theme:scroll:lock', {bubbles: true, detail: scrollableElement}));\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Hide filter accordion elements on mobile\r\n\t   */\r\n\t  hideFiltersOnMobile() {\r\n\t\tconst filterTriggers = this.container.querySelectorAll(`${selectors$A.collapsibleTrigger}:not(${selectors$A.showMoreTrigger})`);\r\n  \r\n\t\tif (window.innerWidth < theme.sizes.small) {\r\n\t\t  requestAnimationFrame(() => {\r\n\t\t\tfilterTriggers.forEach((element) => {\r\n\t\t\t  const isFilterActive = element.getAttribute(attributes$o.filterActive) === 'true';\r\n  \r\n\t\t\t  if (element.classList.contains(classes$q.isExpanded) && !isFilterActive) {\r\n\t\t\t\telement.dispatchEvent(new Event('click'));\r\n\t\t\t  }\r\n\t\t\t});\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Show filter accordion elements on desktop if they should be opened by default\r\n\t   */\r\n\t  showFiltersOnDesktop() {\r\n\t\tconst filterTriggers = this.container.querySelectorAll(`${selectors$A.collapsibleTrigger}:not(${selectors$A.showMoreTrigger})`);\r\n  \r\n\t\t// \"Default filter layout\" states\r\n\t\tconst filtersDefaultState = this.container.getAttribute(attributes$o.filtersDefaultState);\r\n\t\tconst openFirstFilterOnly = filtersDefaultState === 'first-open';\r\n\t\tconst openAllFilters = filtersDefaultState === 'open';\r\n\t\tconst closeAllFilters = filtersDefaultState === 'closed';\r\n\t\t// When sorting is enabled the first `${filterTrigger}` element on mobile is a 'Sort by' button\r\n\t\tconst firstTriggerIndex = this.enableSorting ? 1 : 0;\r\n  \r\n\t\tfilterTriggers.forEach((element, index) => {\r\n\t\t  const isCurrentFilterExpanded = element.classList.contains(classes$q.isExpanded);\r\n\t\t  const isCurrentFilterActive = element.getAttribute(attributes$o.filterActive) === 'true';\r\n\t\t  // 'first-open' state conditions\r\n\t\t  const isFirstClosed = !isCurrentFilterExpanded && index === firstTriggerIndex;\r\n\t\t  const allElseExpanded = isCurrentFilterExpanded && index !== firstTriggerIndex;\r\n\t\t  const shouldOpenFirst = openFirstFilterOnly && isFirstClosed;\r\n\t\t  const shouldCloseAllExceptFirst = openFirstFilterOnly && allElseExpanded;\r\n\t\t  // 'open' state conditions\r\n\t\t  const shouldOpenAllClosedOnes = openAllFilters && !isCurrentFilterExpanded;\r\n\t\t  const shouldOpenActiveOnes = isCurrentFilterActive && !isCurrentFilterExpanded && openAllFilters;\r\n\t\t  // 'close' state conditions\r\n\t\t  const shouldCloseExpandedOnes = closeAllFilters && isCurrentFilterExpanded;\r\n  \r\n\t\t  if (isCurrentFilterActive && !shouldOpenActiveOnes) return;\r\n  \r\n\t\t  if (shouldCloseExpandedOnes || shouldOpenFirst || shouldCloseAllExceptFirst || shouldOpenAllClosedOnes || shouldOpenActiveOnes) {\r\n\t\t\telement.dispatchEvent(new Event('click'));\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Hide filters drawer\r\n\t   */\r\n\t  hideFiltersDrawer() {\r\n\t\tlet filtersVisible = this.filters.classList.contains(classes$q.collectionFiltersVisible);\r\n\t\tlet loading = this.container.classList.contains(classes$q.isLoading);\r\n  \r\n\t\tif (filtersVisible) {\r\n\t\t  this.filters.classList.remove(classes$q.collectionFiltersVisible);\r\n\t\t  this.a11y.removeTrapFocus();\r\n\t\t}\r\n  \r\n\t\t// Enable page scroll if no loading state\r\n\t\tif (!loading) {\r\n\t\t  document.dispatchEvent(new CustomEvent('theme:scroll:unlock', {bubbles: true, detail: settings$1.loadingTimeout}));\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Hiding the filters drawer on desktop & hiding the filters on mobile (showing only filter title)\r\n\t   */\r\n\t  filtersResizeEvents() {\r\n\t\tif (window.innerWidth >= theme.sizes.small) {\r\n\t\t  this.showFiltersOnDesktop();\r\n\t\t  this.hideFiltersDrawer();\r\n\t\t} else {\r\n\t\t  this.hideFiltersOnMobile();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Show more functionality\r\n\t   */\r\n\t  filterShowMore() {\r\n\t\tthis.showMore = this.container.querySelectorAll(selectors$A.showMore);\r\n\t\tif (this.showMore.length === 0) return;\r\n  \r\n\t\tthis.showMore.forEach((element) => {\r\n\t\t  const filterCollapsibleTrigger = element.querySelector(selectors$A.collapsibleTrigger);\r\n\t\t  const showMoreActions = element.querySelector(selectors$A.showMoreActions);\r\n  \r\n\t\t  if (!showMoreActions) return;\r\n  \r\n\t\t  const showMoreTrigger = showMoreActions.querySelector(selectors$A.showMoreTrigger);\r\n\t\t  const showMoreContainer = showMoreActions.querySelector(selectors$A.showMoreContainer);\r\n\t\t  const focusable = showMoreContainer.querySelectorAll(window.theme.focusable);\r\n\t\t  const isShowMoreContainerExpanded = showMoreContainer.getAttribute(attributes$o.ariaExpanded) === 'true';\r\n  \r\n\t\t  if (!isShowMoreContainerExpanded) {\r\n\t\t\tfocusable.forEach((item) => {\r\n\t\t\t  item.setAttribute(attributes$o.tabIndex, '-1');\r\n\t\t\t});\r\n\t\t  }\r\n  \r\n\t\t  showMoreTrigger.addEventListener('keyup', (event) => {\r\n\t\t\tif (event.code === theme.keyboardKeys.SPACE || event.code === theme.keyboardKeys.ENTER || event.code === theme.keyboardKeys.NUMPADENTER) {\r\n\t\t\t  this.updateShowMoreFocusableElements(event, focusable);\r\n\t\t\t}\r\n\t\t  });\r\n\t\t  showMoreTrigger.addEventListener('click', (event) => {\r\n\t\t\tthis.updateShowMoreFocusableElements(event, focusable);\r\n\t\t  });\r\n  \r\n\t\t  filterCollapsibleTrigger.addEventListener('keyup', (event) => {\r\n\t\t\tif (event.code === theme.keyboardKeys.SPACE || event.code === theme.keyboardKeys.ENTER || event.code === theme.keyboardKeys.NUMPADENTER) {\r\n\t\t\t  this.updateCollapsedContainerFocusableElements(filterCollapsibleTrigger, showMoreTrigger, focusable);\r\n\t\t\t}\r\n\t\t  });\r\n\t\t  filterCollapsibleTrigger.addEventListener('click', () => {\r\n\t\t\tthis.updateCollapsedContainerFocusableElements(filterCollapsibleTrigger, showMoreTrigger, focusable);\r\n\t\t  });\r\n\t\t});\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * A11y: Update tabindex for all focusable elements in show-more collapsible containers,\r\n\t   * on opening and closing events of their parent collapsible container\r\n\t   * Solves wrongful tabbing in cases where a collapsible content is opened,\r\n\t   * but it is located in another parent collapsible container that is closed\r\n\t   */\r\n\t  updateCollapsedContainerFocusableElements(filterCollapsibleTrigger, showMoreTrigger, focusable) {\r\n\t\trequestAnimationFrame(() => {\r\n\t\t  const isFilterExpanded = filterCollapsibleTrigger.getAttribute(attributes$o.ariaExpanded) === 'true';\r\n\t\t  const isShowMoreExpanded = showMoreTrigger.getAttribute(attributes$o.ariaExpanded) === 'true';\r\n  \r\n\t\t  focusable.forEach((item) => {\r\n\t\t\tif (!isFilterExpanded && isShowMoreExpanded) {\r\n\t\t\t  item.setAttribute(attributes$o.tabIndex, '-1');\r\n\t\t\t}\r\n  \r\n\t\t\tif (isFilterExpanded && isShowMoreExpanded) {\r\n\t\t\t  item.removeAttribute(attributes$o.tabIndex);\r\n\t\t\t}\r\n\t\t  });\r\n\t\t});\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * A11y: Update tabindex for all focusable elements in show-more collapsible containers on opening and closing events\r\n\t   * Double requestAnimationFrame method is used to make sure the collapsible content has already been expanded\r\n\t   */\r\n\t  updateShowMoreFocusableElements(event, focusable) {\r\n\t\trequestAnimationFrame(() => {\r\n\t\t  requestAnimationFrame(() => {\r\n\t\t\tconst isExpanded = event.target.getAttribute(attributes$o.ariaExpanded) === 'true';\r\n  \r\n\t\t\tfocusable.forEach((item, index) => {\r\n\t\t\t  if (isExpanded) {\r\n\t\t\t\titem.removeAttribute(attributes$o.tabIndex);\r\n  \r\n\t\t\t\tif (index === 0) item.focus();\r\n\t\t\t\treturn;\r\n\t\t\t  }\r\n\t\t\t  item.setAttribute(attributes$o.tabIndex, '-1');\r\n\t\t\t});\r\n\t\t  });\r\n\t\t});\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Init functions required when \"Filter by tag/group\" is selected from Collection page -> Collection pages -> Filter mode\r\n\t   */\r\n\t  initTagFilters() {\r\n\t\tif ((this.filterMode != 'tag' && this.filterMode != 'group') || !this.enableFilters) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tthis.tags = this.container.dataset.tags.split('+').filter((item) => item);\r\n\t\tthis.bindFilterTagButtonsEvents();\r\n\t\tthis.bindSortChangeEvent();\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Render products when tag filter is selected\r\n\t   */\r\n\t  renderTagFiltersProducts(url) {\r\n\t\tthis.startLoading();\r\n  \r\n\t\tif (typeof this.endlessCollection === 'object') {\r\n\t\t  this.endlessCollection.unload();\r\n\t\t}\r\n  \r\n\t\tfetch(url)\r\n\t\t  .then((response) => response.text())\r\n\t\t  .then((responseText) => {\r\n\t\t\tconst html = responseText;\r\n\t\t\tconst parsedData = new DOMParser().parseFromString(html, 'text/html');\r\n\t\t\tconst productsHTML = parsedData.querySelector(selectors$A.productGrid).innerHTML;\r\n\t\t\tconst filtersHTML = parsedData.querySelector(selectors$A.filters).innerHTML;\r\n  \r\n\t\t\tthis.productGrid.innerHTML = productsHTML;\r\n\t\t\tthis.filters.innerHTML = filtersHTML;\r\n\t\t\tthis.inputSort = this.container.querySelectorAll(selectors$A.inputSort);\r\n\t\t\tthis.filtersForm = document.querySelector(selectors$A.filtersForm);\r\n\t\t\tthis.filterData = [...this.filterData, {html, url}];\r\n\t\t\tthis.alreadyClicked = false;\r\n  \r\n\t\t\tthis.bindFilterTagButtonsEvents();\r\n\t\t\tthis.bindFilterButtonsEvents();\r\n\t\t\tthis.bindSortChangeEvent();\r\n\t\t\tthis.bindToggleButtonsEvents();\r\n\t\t\tthis.initProductGridEvents(theme.settings.enableInfinityScroll);\r\n\t\t\tthis.updateProductsCount(html);\r\n\t\t\tthis.mobileFiltersScrollLock();\r\n\t\t\tthis.hideFiltersOnMobile();\r\n\t\t\tmakeSwatches(this.container);\r\n\t\t\tthis.collapsible = new Collapsible(this.container);\r\n\t\t\tthis.filterShowMore();\r\n  \r\n\t\t\t// Update page URL if supported by the browser\r\n\t\t\tif (history.replaceState) {\r\n\t\t\t  window.history.pushState({path: url}, '', url);\r\n\t\t\t}\r\n\t\t  })\r\n\t\t  .catch((error) => {\r\n\t\t\tthis.finishLoading();\r\n\t\t\tconsole.log(`Error: ${error}`);\r\n\t\t  });\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Bind Filter by tag buttons\r\n\t   */\r\n\t  bindFilterTagButtonsEvents() {\r\n\t\tthis.container.querySelectorAll(selectors$A.filterTagButton).forEach((button) => {\r\n\t\t  button.addEventListener('click', this.onFilterTagButtonClick.bind(this));\r\n\t\t});\r\n  \r\n\t\tthis.container.querySelectorAll(selectors$A.filterTagClearButton).forEach((button) => {\r\n\t\t  button.addEventListener('click', this.onFilterTagClearClick);\r\n\t\t});\r\n  \r\n\t\tthis.container.querySelectorAll(selectors$A.filterResetButton).forEach((button) => {\r\n\t\t  button.addEventListener('click', this.onFilterTagResetClick);\r\n\t\t});\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Bind input Sort by change event for \"filters by tag/group\" only\r\n\t   */\r\n\t  bindSortChangeEvent() {\r\n\t\tthis.container.querySelectorAll(selectors$A.inputSort).forEach((input) => {\r\n\t\t  input.addEventListener('input', this.debouncedSortEvent.bind(this));\r\n\t\t});\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Filter by tag buttons click event\r\n\t   */\r\n\t  onFilterTagButtonClick(event) {\r\n\t\tevent.preventDefault();\r\n\t\tif (this.alreadyClicked) {\r\n\t\t  return;\r\n\t\t}\r\n\t\tthis.alreadyClicked = true;\r\n\t\tconst button = event.currentTarget;\r\n\t\tconst selectedTag = button.dataset.tag;\r\n\t\tlet isTagSelected = button.parentNode.classList.contains(classes$q.isActive);\r\n  \r\n\t\tif (isTagSelected) {\r\n\t\t  let tagIndex = this.tags.indexOf(selectedTag);\r\n  \r\n\t\t  button.parentNode.classList.remove(classes$q.isActive);\r\n  \r\n\t\t  if (tagIndex > -1) {\r\n\t\t\tthis.tags.splice(tagIndex, 1);\r\n\t\t  }\r\n\t\t} else {\r\n\t\t  button.parentNode.classList.add(classes$q.isActive);\r\n  \r\n\t\t  this.tags.push(selectedTag);\r\n\t\t}\r\n  \r\n\t\tlet url = this.collectionHandle + '/' + this.tags.join('+') + '?sort_by=' + this.getSortValue();\r\n  \r\n\t\t// Close filters dropdown on tag select\r\n\t\tthis.container.querySelector(selectors$A.filter).classList.remove(classes$q.isExpanded);\r\n\t\tthis.container.querySelector(selectors$A.filter).setAttribute(attributes$o.ariaExpanded, false);\r\n\t\tthis.container.setAttribute('data-tags', '[' + this.tags + ']');\r\n\t\tthis.renderTagFiltersProducts(url);\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Remove a specific tag filter\r\n\t   */\r\n\t  onFilterTagClearClick(event) {\r\n\t\tevent.preventDefault();\r\n\t\tif (this.alreadyClicked) {\r\n\t\t  return;\r\n\t\t}\r\n\t\tthis.alreadyClicked = true;\r\n\t\tconst button = event.currentTarget;\r\n\t\tconst selectedTag = button.dataset.tag;\r\n\t\tconst tagIndex = this.tags.indexOf(selectedTag);\r\n  \r\n\t\tif (tagIndex > -1) {\r\n\t\t  this.tags.splice(tagIndex, 1);\r\n\t\t}\r\n\t\tconst url = this.collectionHandle + '/' + this.tags.join('+') + '?sort_by=' + this.getSortValue();\r\n  \r\n\t\tthis.container.setAttribute('data-tags', '[' + this.tags + ']');\r\n\t\tthis.renderTagFiltersProducts(url);\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Re-render products with the new sort option selected\r\n\t   */\r\n\t  onSortChange() {\r\n\t\tlet url = this.collectionHandle + '/' + this.tags.join('+') + '?sort_by=' + this.getSortValue();\r\n  \r\n\t\tthis.renderTagFiltersProducts(url);\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Get the selected sort option value\r\n\t   */\r\n\t  getSortValue() {\r\n\t\tlet sortValue = '';\r\n\t\tthis.inputSort.forEach((input) => {\r\n\t\t  if (input.checked) {\r\n\t\t\tsortValue = input.value;\r\n\t\t  }\r\n\t\t});\r\n  \r\n\t\treturn sortValue;\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Filter by tag reset button click event\r\n\t   */\r\n\t  onFilterTagResetClick(event) {\r\n\t\tevent?.preventDefault();\r\n  \r\n\t\tif (this.alreadyClicked) {\r\n\t\t  return;\r\n\t\t}\r\n\t\tthis.alreadyClicked = true;\r\n  \r\n\t\tthis.container.querySelectorAll(selectors$A.filterTag).forEach((element) => {\r\n\t\t  element.classList.remove(classes$q.isActive);\r\n\t\t});\r\n  \r\n\t\tthis.container.querySelectorAll(selectors$A.filter).forEach((element) => {\r\n\t\t  element.classList.remove(classes$q.isExpanded);\r\n\t\t  element.setAttribute(attributes$o.ariaExpanded, false);\r\n\t\t});\r\n  \r\n\t\t// Reset saved tags\r\n\t\tthis.tags = [];\r\n\t\tthis.container.setAttribute('data-tags', '');\r\n  \r\n\t\tlet url = this.collectionHandle + '/?sort_by=' + this.getSortValue();\r\n  \r\n\t\tthis.renderTagFiltersProducts(url);\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Get products container top position\r\n\t   */\r\n\t  getProductsOffsetTop() {\r\n\t\treturn this.productGrid.getBoundingClientRect().top - document.body.getBoundingClientRect().top - this.filtersStickyBar.offsetHeight;\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Get collection page sticky bar top position\r\n\t   */\r\n\t  getStickyBarOffsetTop() {\r\n\t\treturn this.filtersStickyBar.getBoundingClientRect().top - document.body.getBoundingClientRect().top;\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Init all the events required on product grid items\r\n\t   */\r\n\t  initProductGridEvents(infinityScroll) {\r\n\t\tthis.productGridEvents = new ProductGrid(this.container);\r\n  \r\n\t\tthis.initTooltips();\r\n  \r\n\t\tif (infinityScroll) {\r\n\t\t  this.initInfinityScroll();\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\t// Stop loading animation\r\n\t\tsetTimeout(() => {\r\n\t\t  this.finishLoading();\r\n\t\t}, settings$1.loadingTimeout * 1.5);\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Init Infinity scroll functionality\r\n\t   */\r\n\t  initInfinityScroll() {\r\n\t\tif (typeof this.endlessCollection === 'object') {\r\n\t\t  this.endlessCollection.unload();\r\n\t\t}\r\n\t\tthis.endlessCollection = new Ajaxify(this.container);\r\n  \r\n\t\tthis.endlessCollection.endlessScroll.settings.callback = () => {\r\n\t\t  this.initProductGridEvents(false);\r\n\t\t};\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Show loading animation and lock body scroll\r\n\t   */\r\n\t  startLoading() {\r\n\t\tthis.container.classList.add(classes$q.isLoading);\r\n  \r\n\t\tif (window.innerWidth >= theme.sizes.small) {\r\n\t\t  document.dispatchEvent(new CustomEvent('theme:scroll:lock', {bubbles: true}));\r\n\t\t}\r\n  \r\n\t\tlet productsTop = this.getProductsOffsetTop();\r\n  \r\n\t\twindow.scrollTo({\r\n\t\t  top: productsTop,\r\n\t\t  left: 0,\r\n\t\t  behavior: 'smooth',\r\n\t\t});\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * Hide loading animation and unlock body scroll\r\n\t   */\r\n\t  finishLoading() {\r\n\t\tconst popups = document.querySelectorAll(`${selectors$A.popupsSection} .${classes$q.popupVisible}`);\r\n\t\tconst isPopupActive = popups.length > 0;\r\n  \r\n\t\tthis.container.classList.remove(classes$q.isLoading);\r\n  \r\n\t\t// Unlock the scroll unless there is a visible popup or there are only popups of types 'bar' and 'cookie'\r\n\t\tif (isPopupActive) {\r\n\t\t  let preventScrollPopupsCount = 0;\r\n\t\t  [...popups].forEach((popup) => {\r\n\t\t\tif (popup.hasAttribute(attributes$o.preventScrollLock)) {\r\n\t\t\t  preventScrollPopupsCount += 1;\r\n\t\t\t}\r\n\t\t  });\r\n  \r\n\t\t  if (preventScrollPopupsCount === popups.length) {\r\n\t\t\tdocument.dispatchEvent(new CustomEvent('theme:scroll:unlock', {bubbles: true, detail: settings$1.loadingTimeout}));\r\n\t\t  }\r\n\t\t} else if (window.innerWidth >= theme.sizes.small) {\r\n\t\t  document.dispatchEvent(new CustomEvent('theme:scroll:unlock', {bubbles: true, detail: settings$1.loadingTimeout}));\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * On block:deselect event\r\n\t   */\r\n\t  onDeselect() {\r\n\t\tif (this.productGridEvents) {\r\n\t\t  this.productGridEvents.onDeselect();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /*\r\n\t   * On section:unload event\r\n\t   */\r\n\t  onUnload() {\r\n\t\tif (typeof this.endlessCollection === 'object') {\r\n\t\t  this.endlessCollection.unload();\r\n\t\t}\r\n  \r\n\t\tif (this.productGridEvents) {\r\n\t\t  this.productGridEvents.onUnload();\r\n\t\t}\r\n  \r\n\t\tif (this.collapsible) {\r\n\t\t  this.collapsible.onUnload();\r\n\t\t}\r\n  \r\n\t\tif (this.rangeSlider) {\r\n\t\t  this.rangeSlider.unload();\r\n\t\t}\r\n  \r\n\t\tif (this.filters) {\r\n\t\t  document.removeEventListener('theme:resize:width', this.resizeEvent);\r\n\t\t}\r\n\t\tdocument.removeEventListener('click', this.bodyClickEvent);\r\n  \r\n\t\tif (this.groupTagFilters.length > 0) {\r\n\t\t  this.onFilterTagResetClick();\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tconst filters = {\r\n\t  onLoad() {\r\n\t\tsections$q[this.id] = new Filters(this.container);\r\n\t  },\r\n\t  onDeselect() {\r\n\t\tsections$q[this.id].onDeselect();\r\n\t  },\r\n\t  onUnload() {\r\n\t\tsections$q[this.id].onUnload();\r\n\t  },\r\n\t};\r\n  \r\n\tregister('collection-template', filters);\r\n  \r\n\tconst selectors$z = {\r\n\t  templateAddresses: '.template-customers-addresses',\r\n\t  accountForm: '[data-form]',\r\n\t  addressNewForm: '[data-form-new]',\r\n\t  btnNew: '[data-button-new]',\r\n\t  btnEdit: '[data-button-edit]',\r\n\t  btnDelete: '[data-button-delete]',\r\n\t  btnCancel: '[data-button-cancel]',\r\n\t  editAddress: 'data-form-edit',\r\n\t  addressCountryNew: 'AddressCountryNew',\r\n\t  addressProvinceNew: 'AddressProvinceNew',\r\n\t  addressProvinceContainerNew: 'AddressProvinceContainerNew',\r\n\t  addressCountryOption: '[data-country-option]',\r\n\t  addressCountry: 'AddressCountry',\r\n\t  addressProvince: 'AddressProvince',\r\n\t  addressProvinceContainer: 'AddressProvinceContainer',\r\n\t  requiredInputs: 'input[type=\"text\"]:not(.optional)',\r\n\t};\r\n  \r\n\tconst attributes$n = {\r\n\t  dataFormId: 'data-form-id',\r\n\t};\r\n  \r\n\tconst classes$p = {\r\n\t  hidden: 'is-hidden',\r\n\t  validation: 'validation--showup',\r\n\t};\r\n  \r\n\tclass Addresses {\r\n\t  constructor(section) {\r\n\t\tthis.section = section;\r\n\t\tthis.addressNewForm = this.section.querySelector(selectors$z.addressNewForm);\r\n\t\tthis.accountForms = this.section.querySelectorAll(selectors$z.accountForm);\r\n  \r\n\t\tthis.init();\r\n\t\tthis.validate();\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tif (this.addressNewForm) {\r\n\t\t  const section = this.section;\r\n\t\t  const newAddressForm = this.addressNewForm;\r\n\t\t  this.customerAddresses();\r\n  \r\n\t\t  const newButtons = section.querySelectorAll(selectors$z.btnNew);\r\n\t\t  if (newButtons.length) {\r\n\t\t\tnewButtons.forEach((button) => {\r\n\t\t\t  button.addEventListener('click', function (e) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tbutton.classList.add(classes$p.hidden);\r\n\t\t\t\tnewAddressForm.classList.remove(classes$p.hidden);\r\n\t\t\t  });\r\n\t\t\t});\r\n\t\t  }\r\n  \r\n\t\t  const editButtons = section.querySelectorAll(selectors$z.btnEdit);\r\n\t\t  if (editButtons.length) {\r\n\t\t\teditButtons.forEach((button) => {\r\n\t\t\t  button.addEventListener('click', function (e) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tconst formId = this.getAttribute(attributes$n.dataFormId);\r\n\t\t\t\tsection.querySelector(`[${selectors$z.editAddress}=\"${formId}\"]`).classList.toggle(classes$p.hidden);\r\n\t\t\t  });\r\n\t\t\t});\r\n\t\t  }\r\n  \r\n\t\t  const deleteButtons = section.querySelectorAll(selectors$z.btnDelete);\r\n\t\t  if (deleteButtons.length) {\r\n\t\t\tdeleteButtons.forEach((button) => {\r\n\t\t\t  button.addEventListener('click', function (e) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tconst formId = this.getAttribute(attributes$n.dataFormId);\r\n\t\t\t\tif (confirm(theme.strings.delete_confirm)) {\r\n\t\t\t\t  Shopify.postLink('/account/addresses/' + formId, {parameters: {_method: 'delete'}});\r\n\t\t\t\t}\r\n\t\t\t  });\r\n\t\t\t});\r\n\t\t  }\r\n  \r\n\t\t  const cancelButtons = section.querySelectorAll(selectors$z.btnCancel);\r\n\t\t  if (cancelButtons.length) {\r\n\t\t\tcancelButtons.forEach((button) => {\r\n\t\t\t  button.addEventListener('click', function (e) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.closest(selectors$z.accountForm).classList.add(classes$p.hidden);\r\n\t\t\t\tdocument.querySelector(selectors$z.btnNew).classList.remove(classes$p.hidden);\r\n\t\t\t  });\r\n\t\t\t});\r\n\t\t  }\r\n\t\t}\r\n\t  }\r\n  \r\n\t  customerAddresses() {\r\n\t\t// Initialize observers on address selectors, defined in shopify_common.js\r\n\t\tif (Shopify.CountryProvinceSelector) {\r\n\t\t  new Shopify.CountryProvinceSelector(selectors$z.addressCountryNew, selectors$z.addressProvinceNew, {\r\n\t\t\thideElement: selectors$z.addressProvinceContainerNew,\r\n\t\t  });\r\n\t\t}\r\n  \r\n\t\t// Initialize each edit form's country/province selector\r\n\t\tconst countryOptions = this.section.querySelectorAll(selectors$z.addressCountryOption);\r\n\t\tcountryOptions.forEach((element) => {\r\n\t\t  const formId = element.getAttribute(attributes$n.dataFormId);\r\n\t\t  const countrySelector = `${selectors$z.addressCountry}_${formId}`;\r\n\t\t  const provinceSelector = `${selectors$z.addressProvince}_${formId}`;\r\n\t\t  const containerSelector = `${selectors$z.addressProvinceContainer}_${formId}`;\r\n  \r\n\t\t  new Shopify.CountryProvinceSelector(countrySelector, provinceSelector, {\r\n\t\t\thideElement: containerSelector,\r\n\t\t  });\r\n\t\t});\r\n\t  }\r\n  \r\n\t  validate() {\r\n\t\tthis.accountForms.forEach((accountForm) => {\r\n\t\t  const form = accountForm.querySelector('form');\r\n\t\t  const inputs = form.querySelectorAll(selectors$z.requiredInputs);\r\n  \r\n\t\t  form.addEventListener('submit', (event) => {\r\n\t\t\tlet isEmpty = false;\r\n  \r\n\t\t\t// Display notification if input is empty\r\n\t\t\tinputs.forEach((input) => {\r\n\t\t\t  if (!input.value) {\r\n\t\t\t\tinput.nextElementSibling.classList.add(classes$p.validation);\r\n\t\t\t\tisEmpty = true;\r\n\t\t\t  } else {\r\n\t\t\t\tinput.nextElementSibling.classList.remove(classes$p.validation);\r\n\t\t\t  }\r\n\t\t\t});\r\n  \r\n\t\t\tif (isEmpty) {\r\n\t\t\t  event.preventDefault();\r\n\t\t\t}\r\n\t\t  });\r\n\t\t});\r\n\t  }\r\n\t}\r\n  \r\n\tconst template = document.querySelector(selectors$z.templateAddresses);\r\n\tif (template) {\r\n\t  new Addresses(template);\r\n\t}\r\n  \r\n\tconst selectors$y = {\r\n\t  form: '[data-account-form]',\r\n\t  showReset: '[data-show-reset]',\r\n\t  hideReset: '[data-hide-reset]',\r\n\t  recover: '[data-recover-password]',\r\n\t  login: '[data-login-form]',\r\n\t  recoverSuccess: '[data-recover-success]',\r\n\t  recoverSuccessText: '[data-recover-success-text]',\r\n\t  recoverHash: '#recover',\r\n\t};\r\n  \r\n\tconst classes$o = {\r\n\t  hidden: 'is-hidden',\r\n\t};\r\n  \r\n\tclass Login {\r\n\t  constructor(form) {\r\n\t\tthis.form = form;\r\n\t\tthis.showButton = form.querySelector(selectors$y.showReset);\r\n\t\tthis.hideButton = form.querySelector(selectors$y.hideReset);\r\n\t\tthis.recover = form.querySelector(selectors$y.recover);\r\n\t\tthis.login = form.querySelector(selectors$y.login);\r\n\t\tthis.success = form.querySelector(selectors$y.recoverSuccess);\r\n\t\tthis.successText = form.querySelector(selectors$y.recoverSuccessText);\r\n\t\tthis.init();\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tif (window.location.hash == selectors$y.recoverHash) {\r\n\t\t  this.showRecoverPasswordForm();\r\n\t\t} else {\r\n\t\t  this.hideRecoverPasswordForm();\r\n\t\t}\r\n  \r\n\t\tif (this.success) {\r\n\t\t  this.successText.classList.remove(classes$o.hidden);\r\n\t\t}\r\n  \r\n\t\tthis.showButton.addEventListener(\r\n\t\t  'click',\r\n\t\t  (e) => {\r\n\t\t\te.preventDefault();\r\n\t\t\tthis.showRecoverPasswordForm();\r\n\t\t  },\r\n\t\t  false\r\n\t\t);\r\n\t\tthis.hideButton.addEventListener(\r\n\t\t  'click',\r\n\t\t  (e) => {\r\n\t\t\te.preventDefault();\r\n\t\t\tthis.hideRecoverPasswordForm();\r\n\t\t  },\r\n\t\t  false\r\n\t\t);\r\n\t  }\r\n  \r\n\t  showRecoverPasswordForm() {\r\n\t\tthis.recover.classList.remove(classes$o.hidden);\r\n\t\tthis.login.classList.add(classes$o.hidden);\r\n\t\twindow.location.hash = selectors$y.recoverHash;\r\n\t\treturn false;\r\n\t  }\r\n  \r\n\t  hideRecoverPasswordForm() {\r\n\t\tthis.login.classList.remove(classes$o.hidden);\r\n\t\tthis.recover.classList.add(classes$o.hidden);\r\n\t\twindow.location.hash = '';\r\n\t\treturn false;\r\n\t  }\r\n\t}\r\n  \r\n\tconst loginForm = document.querySelector(selectors$y.form);\r\n\tif (loginForm) {\r\n\t  new Login(loginForm);\r\n\t}\r\n  \r\n\tregister('search-template', filters);\r\n  \r\n\tconst selectors$x = {\r\n\t  frame: '[data-ticker-frame]',\r\n\t  scale: '[data-ticker-scale]',\r\n\t  text: '[data-ticker-text]',\r\n\t  clone: 'data-clone',\r\n\t};\r\n  \r\n\tconst attributes$m = {\r\n\t  speed: 'data-marquee-speed',\r\n\t};\r\n  \r\n\tconst classes$n = {\r\n\t  animationClass: 'ticker--animated',\r\n\t  unloadedClass: 'ticker--unloaded',\r\n\t  comparitorClass: 'ticker__comparitor',\r\n\t};\r\n  \r\n\tconst settings = {\r\n\t  moveTime: 1.63, // 100px going to move for 1.63s\r\n\t  space: 100, // 100px\r\n\t};\r\n  \r\n\tclass Ticker {\r\n\t  constructor(el, stopClone = false) {\r\n\t\tthis.frame = el;\r\n\t\tthis.stopClone = stopClone;\r\n\t\tthis.scale = this.frame.querySelector(selectors$x.scale);\r\n\t\tthis.text = this.frame.querySelector(selectors$x.text);\r\n  \r\n\t\tthis.comparitor = this.text.cloneNode(true);\r\n\t\tthis.comparitor.classList.add(classes$n.comparitorClass);\r\n\t\tthis.frame.appendChild(this.comparitor);\r\n\t\tthis.scale.classList.remove(classes$n.unloadedClass);\r\n\t\tthis.resizeEvent = debounce(() => this.checkWidth(), 100);\r\n\t\tthis.listen();\r\n\t  }\r\n  \r\n\t  listen() {\r\n\t\tdocument.addEventListener('theme:resize:width', this.resizeEvent);\r\n\t\tthis.checkWidth();\r\n\t  }\r\n  \r\n\t  checkWidth() {\r\n\t\tconst padding = window.getComputedStyle(this.frame).paddingLeft.replace('px', '') * 2;\r\n  \r\n\t\tif (this.frame.clientWidth - padding < this.comparitor.clientWidth || this.stopClone) {\r\n\t\t  this.text.classList.add(classes$n.animationClass);\r\n\t\t  if (this.scale.childElementCount === 1) {\r\n\t\t\tthis.clone = this.text.cloneNode(true);\r\n\t\t\tthis.clone.setAttribute(selectors$x.clone, '');\r\n\t\t\tthis.scale.appendChild(this.clone);\r\n  \r\n\t\t\tif (this.stopClone) {\r\n\t\t\t  for (let index = 0; index < 10; index++) {\r\n\t\t\t\tconst cloneSecond = this.text.cloneNode(true);\r\n\t\t\t\tcloneSecond.setAttribute(selectors$x.clone, '');\r\n\t\t\t\tthis.scale.appendChild(cloneSecond);\r\n\t\t\t  }\r\n\t\t\t}\r\n  \r\n\t\t\tlet frameSpeed = this.frame.getAttribute(attributes$m.speed);\r\n\t\t\tif (frameSpeed === null) {\r\n\t\t\t  frameSpeed = 100;\r\n\t\t\t}\r\n\t\t\tconst speed = settings.moveTime * (100 / parseInt(frameSpeed, 10));\r\n\t\t\tconst animationTimeFrame = (this.text.clientWidth / settings.space) * speed;\r\n  \r\n\t\t\tthis.scale.style.setProperty('--animation-time', `${animationTimeFrame}s`);\r\n\t\t  }\r\n\t\t} else {\r\n\t\t  this.text.classList.add(classes$n.animationClass);\r\n\t\t  let clone = this.scale.querySelector(`[${selectors$x.clone}]`);\r\n\t\t  if (clone) {\r\n\t\t\tthis.scale.removeChild(clone);\r\n\t\t  }\r\n\t\t  this.text.classList.remove(classes$n.animationClass);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  unload() {\r\n\t\tdocument.removeEventListener('theme:resize:width', this.resizeEvent);\r\n\t  }\r\n\t}\r\n  \r\n\tconst selectors$w = {\r\n\t  bar: '[data-bar]',\r\n\t  barSlide: '[data-slide]',\r\n\t  topBarSlide: '[data-top-bar-slide]',\r\n\t  frame: '[data-ticker-frame]',\r\n\t  slider: '[data-slider]',\r\n\t  tickerScale: '[data-ticker-scale]',\r\n\t  tickerText: '[data-ticker-text]',\r\n\t};\r\n  \r\n\tconst attributes$l = {\r\n\t  slide: 'data-slide',\r\n\t  speed: 'data-slider-speed',\r\n\t  stop: 'data-stop',\r\n\t  style: 'style',\r\n\t  dataTargetReferrer: 'data-target-referrer',\r\n\t};\r\n  \r\n\tconst classes$m = {\r\n\t  desktop: 'desktop',\r\n\t  mobile: 'mobile',\r\n\t  tickerAnimated: 'ticker--animated',\r\n\t};\r\n  \r\n\tconst sections$p = {};\r\n  \r\n\tclass AnnouncementBar {\r\n\t  constructor(container) {\r\n\t\tthis.barHolder = container;\r\n\t\tthis.locationPath = location.href;\r\n\t\tthis.slides = this.barHolder.querySelectorAll(selectors$w.barSlide);\r\n\t\tthis.slider = this.barHolder.querySelector(selectors$w.slider);\r\n\t\tthis.flkty = null;\r\n  \r\n\t\tthis.init();\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tthis.removeAnnouncement();\r\n  \r\n\t\tif (this.slider) {\r\n\t\t  this.initSlider();\r\n\t\t  document.addEventListener('theme:resize:width', this.initSlider.bind(this));\r\n\t\t}\r\n  \r\n\t\tif (!this.slider) {\r\n\t\t  this.initTickers(true);\r\n\t\t  this.tickerAnimationPause();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Delete announcement which has a target referrer attribute and it is not contained in page URL\r\n\t   */\r\n\t  removeAnnouncement() {\r\n\t\tfor (let i = 0; i < this.slides.length; i++) {\r\n\t\t  const element = this.slides[i];\r\n  \r\n\t\t  if (!element.hasAttribute(attributes$l.dataTargetReferrer)) {\r\n\t\t\tcontinue;\r\n\t\t  }\r\n  \r\n\t\t  if (this.locationPath.indexOf(element.getAttribute(attributes$l.dataTargetReferrer)) === -1 && !window.Shopify.designMode) {\r\n\t\t\telement.parentNode.removeChild(element);\r\n\t\t  }\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Init slider\r\n\t   */\r\n\t  initSlider() {\r\n\t\tconst slides = this.slider.querySelectorAll(selectors$w.barSlide);\r\n  \r\n\t\tif (slides) {\r\n\t\t  let slideSelector = `${selectors$w.barSlide}`;\r\n  \r\n\t\t  if (window.innerWidth < theme.sizes.small) {\r\n\t\t\tslideSelector = `${selectors$w.barSlide}:not(.${classes$m.desktop})`;\r\n\t\t  } else {\r\n\t\t\tslideSelector = `${selectors$w.barSlide}:not(.${classes$m.mobile})`;\r\n\t\t  }\r\n  \r\n\t\t  if (this.flkty != null) {\r\n\t\t\tthis.flkty.destroy();\r\n\t\t  }\r\n  \r\n\t\t  this.flkty = new Flickity(this.slider, {\r\n\t\t\tcellSelector: slideSelector,\r\n\t\t\tpageDots: false,\r\n\t\t\tprevNextButtons: false,\r\n\t\t\twrapAround: true,\r\n\t\t\tautoPlay: parseInt(this.slider.getAttribute(attributes$l.speed), 10),\r\n\t\t\ton: {\r\n\t\t\t  ready: () => {\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t  this.slider.dispatchEvent(\r\n\t\t\t\t\tnew CustomEvent('slider-is-loaded', {\r\n\t\t\t\t\t  bubbles: true,\r\n\t\t\t\t\t  detail: {\r\n\t\t\t\t\t\tslider: this,\r\n\t\t\t\t\t  },\r\n\t\t\t\t\t})\r\n\t\t\t\t  );\r\n\t\t\t\t}, 10);\r\n\t\t\t  },\r\n\t\t\t},\r\n\t\t  });\r\n\t\t  this.flkty.reposition();\r\n\t\t}\r\n  \r\n\t\tthis.slider.addEventListener('slider-is-loaded', () => {\r\n\t\t  this.initTickers();\r\n\t\t});\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Init tickers in sliders\r\n\t   */\r\n\t  initTickers(stopClone = false) {\r\n\t\tconst frames = this.barHolder.querySelectorAll(selectors$w.frame);\r\n  \r\n\t\tframes.forEach((element) => {\r\n\t\t  new Ticker(element, stopClone);\r\n  \r\n\t\t  const slides = element.querySelectorAll(selectors$w.barSlide);\r\n\t\t  if (slides.length !== 0) {\r\n\t\t\tconst slidesMobile = element.querySelectorAll(`${selectors$w.barSlide}.${classes$m.mobile}`);\r\n\t\t\tconst slidesDesktop = element.querySelectorAll(`${selectors$w.barSlide}.${classes$m.desktop}`);\r\n  \r\n\t\t\tif (slides.length === slidesMobile.length) {\r\n\t\t\t  element.parentNode.classList.add(classes$m.mobile);\r\n\t\t\t} else if (slides.length === slidesDesktop.length) {\r\n\t\t\t  element.parentNode.classList.add(classes$m.desktop);\r\n\t\t\t}\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  toggleTicker(e, isStoped) {\r\n\t\tconst tickerScale = e.target.closest(selectors$w.tickerScale);\r\n\t\tconst element = document.querySelector(`[${attributes$l.slide}=\"${e.detail.blockId}\"]`);\r\n  \r\n\t\tif (isStoped && element) {\r\n\t\t  tickerScale.setAttribute(attributes$l.stop, '');\r\n\t\t  tickerScale.querySelectorAll(selectors$w.tickerText).forEach((textHolder) => {\r\n\t\t\ttextHolder.classList.remove(classes$m.tickerAnimated);\r\n\t\t\ttextHolder.style.transform = `translate3d(${-(element.offsetLeft - parseInt(getComputedStyle(element).marginLeft, 10))}px, 0, 0)`;\r\n\t\t  });\r\n\t\t}\r\n  \r\n\t\tif (!isStoped && element) {\r\n\t\t  tickerScale.querySelectorAll(selectors$w.tickerText).forEach((textHolder) => {\r\n\t\t\ttextHolder.classList.add(classes$m.tickerAnimated);\r\n\t\t\ttextHolder.removeAttribute(attributes$l.style);\r\n\t\t  });\r\n\t\t  tickerScale.removeAttribute(attributes$l.stop);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  tickerAnimationPause() {\r\n\t\tlet hoverTimer = 0;\r\n\t\tlet isHovered = false;\r\n\t\tconst tickerContainer = this.barHolder.querySelector(selectors$w.topBarSlide);\r\n  \r\n\t\ttickerContainer.addEventListener('mouseenter', () => {\r\n\t\t  isHovered = true;\r\n  \r\n\t\t  hoverTimer = setTimeout(() => {\r\n\t\t\tif (isHovered) {\r\n\t\t\t  tickerContainer.querySelectorAll(selectors$w.tickerText).forEach((element) => {\r\n\t\t\t\telement.style.animationPlayState = 'paused';\r\n\t\t\t  });\r\n\t\t\t}\r\n  \r\n\t\t\tclearTimeout(hoverTimer);\r\n\t\t  }, 500);\r\n\t\t});\r\n  \r\n\t\ttickerContainer.addEventListener('mouseleave', () => {\r\n\t\t  isHovered = false;\r\n  \r\n\t\t  tickerContainer.querySelectorAll(selectors$w.tickerText).forEach((element) => {\r\n\t\t\telement.style.animationPlayState = 'running';\r\n\t\t  });\r\n\t\t});\r\n\t  }\r\n  \r\n\t  onBlockSelect(evt) {\r\n\t\tconst index = parseInt([...evt.target.parentNode.children].indexOf(evt.target));\r\n  \r\n\t\tif (this.slider && this.flkty !== null) {\r\n\t\t  this.flkty.select(index);\r\n\t\t  this.flkty.pausePlayer();\r\n\t\t}\r\n\t\tif (!this.slider) {\r\n\t\t  this.toggleTicker(evt, true);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onBlockDeselect(evt) {\r\n\t\tif (this.slider && this.flkty !== null) {\r\n\t\t  this.flkty.unpausePlayer();\r\n\t\t}\r\n\t\tif (!this.slider) {\r\n\t\t  this.toggleTicker(evt, false);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onUnload() {\r\n\t\tdocument.removeEventListener('theme:resize:width', this.initSlider.bind(this));\r\n\t  }\r\n\t}\r\n  \r\n\tconst bar = {\r\n\t  onLoad() {\r\n\t\tsections$p[this.id] = [];\r\n\t\tconst element = this.container.querySelector(selectors$w.bar);\r\n\t\tif (element) {\r\n\t\t  sections$p[this.id].push(new AnnouncementBar(element));\r\n\t\t}\r\n\t  },\r\n\t  onBlockSelect(e) {\r\n\t\tif (sections$p[this.id].length) {\r\n\t\t  sections$p[this.id].forEach((el) => {\r\n\t\t\tif (typeof el.onBlockSelect === 'function') {\r\n\t\t\t  el.onBlockSelect(e);\r\n\t\t\t}\r\n\t\t  });\r\n\t\t}\r\n\t  },\r\n\t  onBlockDeselect(e) {\r\n\t\tif (sections$p[this.id].length) {\r\n\t\t  sections$p[this.id].forEach((el) => {\r\n\t\t\tif (typeof el.onBlockSelect === 'function') {\r\n\t\t\t  el.onBlockDeselect(e);\r\n\t\t\t}\r\n\t\t  });\r\n\t\t}\r\n\t  },\r\n\t};\r\n  \r\n\tregister('announcement-bar', bar);\r\n\tregister('marquee', bar);\r\n  \r\n\tconst selectors$v = {\r\n\t  trigger: '[data-collapsible-trigger]',\r\n\t};\r\n  \r\n\tconst classes$l = {\r\n\t  isExpanded: 'is-expanded',\r\n\t};\r\n  \r\n\tconst accordionSection = {\r\n\t  onBlockSelect(e) {\r\n\t\tconst trigger = e.target.querySelector(selectors$v.trigger);\r\n\t\trequestAnimationFrame(() => {\r\n\t\t  if (!trigger.classList.contains(classes$l.isExpanded)) {\r\n\t\t\ttrigger.dispatchEvent(new Event('click'));\r\n\t\t  }\r\n\t\t});\r\n\t  },\r\n\t};\r\n  \r\n\tregister('accordions', [accordionSection, collapsible]);\r\n  \r\n\tconst selectors$u = {\r\n\t  button: '[data-share-button]',\r\n\t  tooltip: '[data-share-button-tooltip]',\r\n\t};\r\n  \r\n\tconst classes$k = {\r\n\t  visible: 'is-visible',\r\n\t  hiding: 'is-hiding',\r\n\t};\r\n  \r\n\tconst sections$o = {};\r\n  \r\n\tclass ShareButton {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t\tthis.button = this.container.querySelector(selectors$u.button);\r\n\t\tthis.tooltip = this.container.querySelector(selectors$u.tooltip);\r\n\t\tthis.transitionSpeed = 200;\r\n\t\tthis.hideTransitionTimeout = 0;\r\n\t\tthis.init();\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tif (this.button) {\r\n\t\t  this.button.addEventListener('click', () => {\r\n\t\t\tlet targetUrl = window.location.href;\r\n\t\t\tif (this.button.dataset.shareLink) {\r\n\t\t\t  targetUrl = this.button.dataset.shareLink;\r\n\t\t\t}\r\n  \r\n\t\t\tif (!this.tooltip.classList.contains(classes$k.visible)) {\r\n\t\t\t  navigator.clipboard.writeText(targetUrl).then(() => {\r\n\t\t\t\tthis.tooltip.classList.add(classes$k.visible);\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t  this.tooltip.classList.add(classes$k.hiding);\r\n\t\t\t\t  this.tooltip.classList.remove(classes$k.visible);\r\n  \r\n\t\t\t\t  if (this.hideTransitionTimeout) {\r\n\t\t\t\t\tclearTimeout(this.hideTransitionTimeout);\r\n\t\t\t\t  }\r\n  \r\n\t\t\t\t  this.hideTransitionTimeout = setTimeout(() => {\r\n\t\t\t\t\tthis.tooltip.classList.remove(classes$k.hiding);\r\n\t\t\t\t  }, this.transitionSpeed);\r\n\t\t\t\t}, 1500);\r\n\t\t\t  });\r\n\t\t\t}\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tconst shareButton = {\r\n\t  onLoad() {\r\n\t\tsections$o[this.id] = new ShareButton(this.container);\r\n\t  },\r\n\t};\r\n  \r\n\tregister('article', [shareButton]);\r\n  \r\n\tconst selectors$t = {\r\n\t  videoPlay: '[data-video-play]',\r\n\t};\r\n  \r\n\tconst attributes$k = {\r\n\t  videoPlayValue: 'data-video-play',\r\n\t};\r\n  \r\n\tclass VideoPlay {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t\tthis.videoPlay = this.container.querySelectorAll(selectors$t.videoPlay);\r\n\t\tthis.a11y = a11y;\r\n  \r\n\t\tthis.init();\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tif (this.videoPlay.length) {\r\n\t\t  this.videoPlay.forEach((element) => {\r\n\t\t\telement.addEventListener('click', (e) => {\r\n\t\t\t  if (element.hasAttribute(attributes$k.videoPlayValue) && element.getAttribute(attributes$k.videoPlayValue).trim() !== '') {\r\n\t\t\t\te.preventDefault();\r\n  \r\n\t\t\t\tconst items = [\r\n\t\t\t\t  {\r\n\t\t\t\t\thtml: element.getAttribute(attributes$k.videoPlayValue),\r\n\t\t\t\t  },\r\n\t\t\t\t];\r\n\t\t\t\tthis.a11y.state.trigger = element;\r\n\t\t\t\tnew LoadPhotoswipe(items);\r\n\t\t\t  }\r\n\t\t\t});\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tconst videoPlay = {\r\n\t  onLoad() {\r\n\t\tnew VideoPlay(this.container);\r\n\t  },\r\n\t};\r\n  \r\n\tconst selectors$s = {\r\n\t  header: '[data-site-header]',\r\n\t  main: '[data-main]',\r\n\t};\r\n  \r\n\tlet sections$n = {};\r\n  \r\n\tclass ZoomAnimation {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t\tthis.header = document.querySelector(selectors$s.header);\r\n  \r\n\t\tthis.init();\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tif (this.container.dataset.zoomAnimation !== 'true') {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\t// Target element to be observed.\r\n\t\tconst observedElement = this.container;\r\n\t\tconst firstSection = document.body.querySelector(selectors$s.main).children[0];\r\n\t\tconst isFirstSection = this.container.parentNode === firstSection;\r\n\t\tconst hasTransparentHeader = this.header?.dataset.transparent == 'true';\r\n  \r\n\t\tconst renderZoomEffect = () => {\r\n\t\t  const headerHeight = isFirstSection & hasTransparentHeader ? 0 : parseInt(this.header?.dataset.height || this.header?.offsetHeight);\r\n\t\t  const rect = observedElement.getBoundingClientRect();\r\n\t\t  const sectionHeight = observedElement.offsetHeight;\r\n\t\t  const scrolled = isFirstSection ? headerHeight - rect.top : headerHeight - rect.top + window.innerHeight;\r\n\t\t  const scrolledPercentage = scrolled / sectionHeight;\r\n\t\t  let transitionSpeed = 0.1; // Set value between 0 and 1. Bigger value will make the zoom more aggressive\r\n\t\t  if (isFirstSection) {\r\n\t\t\ttransitionSpeed *= 1.5;\r\n\t\t  }\r\n  \r\n\t\t  let scale = 1 + scrolledPercentage * transitionSpeed;\r\n  \r\n\t\t  // Prevent image scale down under 100%\r\n\t\t  scale = scale > 1 ? scale : 1;\r\n\t\t  observedElement.style.setProperty('--scale', scale);\r\n\t\t};\r\n  \r\n\t\trenderZoomEffect();\r\n  \r\n\t\tthis.zoomOnScrollEvent = throttle(renderZoomEffect, 5);\r\n  \r\n\t\t// Intersection Observer Configuration\r\n\t\tconst observerOptions = {\r\n\t\t  root: null,\r\n\t\t  rootMargin: '0px', // important: needs units on all values\r\n\t\t  threshold: 0,\r\n\t\t};\r\n  \r\n\t\t// Intersection Observer Callback Function\r\n\t\tconst intersectionCallback = (entry) => {\r\n\t\t  if (entry[0].isIntersecting) {\r\n\t\t\twindow.addEventListener('scroll', this.zoomOnScrollEvent);\r\n\t\t  } else {\r\n\t\t\twindow.removeEventListener('scroll', this.zoomOnScrollEvent);\r\n\t\t  }\r\n\t\t};\r\n  \r\n\t\t// Intersection Observer Constructor.\r\n\t\tconst observer = new IntersectionObserver(intersectionCallback, observerOptions);\r\n  \r\n\t\tobserver.observe(observedElement);\r\n\t  }\r\n  \r\n\t  onUnload() {\r\n\t\tif (this.zoomOnScrollEvent !== null) {\r\n\t\t  window.removeEventListener('scroll', this.zoomOnScrollEvent);\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tconst zoomAnimation = {\r\n\t  onLoad() {\r\n\t\tsections$n[this.id] = new ZoomAnimation(this.container);\r\n\t  },\r\n\t  onUnload() {\r\n\t\tsections$n[this.id].onUnload();\r\n\t  },\r\n\t};\r\n  \r\n\tregister('banner-image', [zoomAnimation, videoPlay]);\r\n  \r\n\tconst selectors$r = {\r\n\t  banner: '[data-banner]',\r\n\t  slider: '[data-slider]',\r\n\t  sliderMedia: '[data-banners-media]',\r\n\t};\r\n  \r\n\tconst attributes$j = {\r\n\t  index: 'data-index',\r\n\t  singleImage: 'data-slider-single-image',\r\n\t};\r\n  \r\n\tlet sections$m = {};\r\n  \r\n\tclass BannerWithTextColumns {\r\n\t  constructor(section) {\r\n\t\tthis.container = section.container;\r\n\t\tthis.slider = this.container.querySelector(selectors$r.slider);\r\n\t\tthis.singleImageEnabled = this.slider?.hasAttribute(attributes$j.singleImage);\r\n\t\tthis.banners = this.container.querySelectorAll(selectors$r.banner);\r\n\t\tthis.links = this.container.querySelectorAll('a');\r\n\t\tthis.sliderMedia = this.container.querySelector(selectors$r.sliderMedia);\r\n\t\tthis.flkty = null;\r\n\t\tthis.flktyMedia = null;\r\n\t\tthis.sliderResizeEvent = () => this.resizeSlider();\r\n  \r\n\t\tif (!this.slider) return;\r\n  \r\n\t\tthis.initSliders();\r\n  \r\n\t\tdocument.addEventListener('theme:resize:width', this.sliderResizeEvent);\r\n\t  }\r\n  \r\n\t  initSliders() {\r\n\t\tif (this.slider.children.length <= 1) return;\r\n  \r\n\t\tlet isDraggable = window.innerWidth < window.theme.sizes.small;\r\n  \r\n\t\tif (this.sliderMedia.children.length > 1) {\r\n\t\t  this.flktyMedia = new Flickity(this.sliderMedia, {\r\n\t\t\tdraggable: false,\r\n\t\t\twrapAround: false,\r\n\t\t\tfade: true,\r\n\t\t\tprevNextButtons: false,\r\n\t\t\tadaptiveHeight: false,\r\n\t\t\tpageDots: false,\r\n\t\t\tsetGallerySize: false,\r\n\t\t  });\r\n  \r\n\t\t  flickitySmoothScrolling(this.sliderMedia);\r\n\t\t}\r\n  \r\n\t\tthis.flkty = new Flickity(this.slider, {\r\n\t\t  draggable: isDraggable,\r\n\t\t  prevNextButtons: false,\r\n\t\t  pageDots: true,\r\n\t\t  cellAlign: 'left',\r\n\t\t  adaptiveHeight: false,\r\n\t\t  imagesLoaded: true,\r\n\t\t  lazyLoad: true,\r\n\t\t  on: {\r\n\t\t\tready: () => {\r\n\t\t\t  this.links.forEach((link) => {\r\n\t\t\t\tlink.addEventListener('focus', () => {\r\n\t\t\t\t  const selectedIndex = Number(link.closest(selectors$r.banner).getAttribute(attributes$j.index));\r\n  \r\n\t\t\t\t  if (window.innerWidth >= theme.sizes.small) {\r\n\t\t\t\t\tthis.syncContent(selectedIndex);\r\n\t\t\t\t  }\r\n\t\t\t\t});\r\n\t\t\t  });\r\n  \r\n\t\t\t  this.banners.forEach((slide) => {\r\n\t\t\t\tslide.addEventListener('mouseenter', () => {\r\n\t\t\t\t  const selectedIndex = Number(slide.getAttribute(attributes$j.index));\r\n  \r\n\t\t\t\t  if (window.innerWidth >= theme.sizes.small && !window.theme.touch) {\r\n\t\t\t\t\tthis.syncContent(selectedIndex);\r\n\t\t\t\t  }\r\n\t\t\t\t});\r\n  \r\n\t\t\t\tslide.addEventListener('pointerup', () => {\r\n\t\t\t\t  const selectedIndex = Number(slide.getAttribute(attributes$j.index));\r\n  \r\n\t\t\t\t  if (window.innerWidth >= theme.sizes.small && window.theme.touch) {\r\n\t\t\t\t\tthis.syncContent(selectedIndex);\r\n\t\t\t\t  }\r\n\t\t\t\t});\r\n\t\t\t  });\r\n\t\t\t},\r\n\t\t\tchange: (index) => {\r\n\t\t\t  if (window.innerWidth < theme.sizes.small && !this.singleImageEnabled) {\r\n\t\t\t\tthis.flktyMedia.select(index);\r\n\t\t\t  }\r\n\t\t\t},\r\n\t\t  },\r\n\t\t});\r\n  \r\n\t\tflickitySmoothScrolling(this.slider);\r\n\t  }\r\n  \r\n\t  syncContent(index = 0) {\r\n\t\tthis.flkty.selectCell(index);\r\n  \r\n\t\tif (this.flktyMedia) {\r\n\t\t  this.flktyMedia.selectCell(index);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  resizeSlider() {\r\n\t\tif (this.flkty) {\r\n\t\t  this.flkty.resize();\r\n\t\t  this.toggleDraggable();\r\n\t\t}\r\n  \r\n\t\tif (this.flktyMedia) {\r\n\t\t  this.flktyMedia.resize();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  toggleDraggable() {\r\n\t\tthis.flkty.options.draggable = window.innerWidth < window.theme.sizes.small;\r\n\t\tthis.flkty.updateDraggable();\r\n\t  }\r\n  \r\n\t  onBlockSelect(evt) {\r\n\t\tconst selectedIndex = parseInt([...evt.target.parentNode.children].indexOf(evt.target));\r\n\t\tif (this.flktyMedia) {\r\n\t\t  this.flktyMedia.selectCell(selectedIndex);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onUnload() {\r\n\t\tdocument.removeEventListener('theme:resize:width', this.sliderResizeEvent);\r\n\t  }\r\n\t}\r\n  \r\n\tconst BannerWithTextColumnsSection = {\r\n\t  onLoad() {\r\n\t\tsections$m[this.id] = new BannerWithTextColumns(this);\r\n\t  },\r\n\t  onBlockSelect(e) {\r\n\t\tsections$m[this.id].onBlockSelect(e);\r\n\t  },\r\n\t};\r\n  \r\n\tregister('banner-with-text-columns', BannerWithTextColumnsSection);\r\n  \r\n\tregister('blog-posts', ajaxify);\r\n  \r\n\t\r\n  \r\n\tconst selectors$q = {\r\n\t  slider: '[data-slider]',\r\n\t  sliderItem: '[data-slider-item]',\r\n\t  sliderItemImage: '[data-media-container]',\r\n\t  links: 'a, button',\r\n\t  flickityButton: '.flickity-button',\r\n\t};\r\n  \r\n\tconst classes$j = {\r\n\t  carouselInactive: 'carousel--inactive',\r\n\t};\r\n  \r\n\tconst attributes$i = {\r\n\t  tabIndex: 'tabindex',\r\n\t};\r\n  \r\n\tconst sections$l = {};\r\n  \r\n\tclass ColumnsWithImage {\r\n\t  constructor(section) {\r\n\t\tthis.container = section.container;\r\n\t\tthis.slider = this.container.querySelector(selectors$q.slider);\r\n\t\tthis.flkty = null;\r\n\t\tthis.gutter = 0;\r\n\t\tthis.checkSlidesSizeOnResize = () => this.checkSlidesSize();\r\n\t\tthis.listen();\r\n\t  }\r\n  \r\n\t  initSlider() {\r\n\t\tthis.slider.classList.remove(classes$j.carouselInactive);\r\n  \r\n\t\tthis.flkty = new Flickity(this.slider, {\r\n\t\t  pageDots: false,\r\n\t\t  cellAlign: 'left',\r\n\t\t  groupCells: true,\r\n\t\t  contain: true,\r\n\t\t  on: {\r\n\t\t\tready: () => {\r\n\t\t\t  this.setSliderArrowsPosition(this.slider);\r\n\t\t\t  setTimeout(() => {\r\n\t\t\t\tthis.changeTabIndex();\r\n\t\t\t  }, 0);\r\n\t\t\t},\r\n\t\t\tchange: () => {\r\n\t\t\t  this.changeTabIndex();\r\n\t\t\t},\r\n\t\t  },\r\n\t\t});\r\n\t  }\r\n  \r\n\t  destroySlider() {\r\n\t\tthis.slider.classList.add(classes$j.carouselInactive);\r\n  \r\n\t\tif (this.flkty !== null) {\r\n\t\t  this.flkty.destroy();\r\n\t\t  this.flkty = null;\r\n\t\t}\r\n\t  }\r\n  \r\n\t  checkSlidesSize() {\r\n\t\tconst sliderItemStyle = this.container.querySelector(selectors$q.sliderItem).currentStyle || window.getComputedStyle(this.container.querySelector(selectors$q.sliderItem));\r\n\t\tthis.gutter = parseInt(sliderItemStyle.marginRight);\r\n\t\tconst containerWidth = this.slider.offsetWidth;\r\n\t\tconst itemsWidth = this.getItemsWidth();\r\n\t\tconst itemsOverflowViewport = containerWidth < itemsWidth;\r\n  \r\n\t\tif (window.innerWidth >= theme.sizes.small && itemsOverflowViewport) {\r\n\t\t  this.initSlider();\r\n\t\t} else {\r\n\t\t  this.destroySlider();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  changeTabIndex() {\r\n\t\tconst selectedElementsIndex = this.flkty.selectedIndex;\r\n  \r\n\t\tthis.flkty.slides.forEach((slide, index) => {\r\n\t\t  slide.cells.forEach((cell) => {\r\n\t\t\tcell.element.querySelectorAll(selectors$q.links).forEach((link) => {\r\n\t\t\t  link.setAttribute(attributes$i.tabIndex, selectedElementsIndex === index ? '0' : '-1');\r\n\t\t\t});\r\n\t\t  });\r\n\t\t});\r\n\t  }\r\n  \r\n\t  getItemsWidth() {\r\n\t\tlet itemsWidth = 0;\r\n\t\tconst slides = this.slider.querySelectorAll(selectors$q.sliderItem);\r\n\t\tif (slides.length) {\r\n\t\t  slides.forEach((item) => {\r\n\t\t\titemsWidth += item.offsetWidth + this.gutter;\r\n\t\t  });\r\n\t\t}\r\n  \r\n\t\treturn itemsWidth;\r\n\t  }\r\n  \r\n\t  listen() {\r\n\t\tif (this.slider) {\r\n\t\t  this.checkSlidesSize();\r\n\t\t  document.addEventListener('theme:resize:width', this.checkSlidesSizeOnResize);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  setSliderArrowsPosition(slider) {\r\n\t\tconst arrows = slider.querySelectorAll(selectors$q.flickityButton);\r\n\t\tconst image = slider.querySelector(selectors$q.sliderItemImage);\r\n  \r\n\t\tif (arrows.length && image) {\r\n\t\t  arrows.forEach((arrow) => {\r\n\t\t\tarrow.style.top = `${image.offsetHeight / 2}px`;\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onBlockSelect(evt) {\r\n\t\tif (this.flkty !== null) {\r\n\t\t  const index = parseInt([...evt.target.parentNode.children].indexOf(evt.target));\r\n\t\t  const slidesPerPage = parseInt(this.flkty.slides[0].cells.length);\r\n\t\t  const groupIndex = Math.floor(index / slidesPerPage);\r\n  \r\n\t\t  this.flkty.select(groupIndex);\r\n\t\t} else {\r\n\t\t  const sliderStyle = this.slider.currentStyle || window.getComputedStyle(this.slider);\r\n\t\t  const sliderPadding = parseInt(sliderStyle.paddingLeft);\r\n\t\t  const blockPositionLeft = evt.target.offsetLeft - sliderPadding;\r\n  \r\n\t\t  // Native scroll to item\r\n\t\t  this.slider.scrollTo({\r\n\t\t\ttop: 0,\r\n\t\t\tleft: blockPositionLeft,\r\n\t\t\tbehavior: 'smooth',\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onUnload() {\r\n\t\tdocument.removeEventListener('theme:resize:width', this.checkSlidesSizeOnResize);\r\n\t  }\r\n\t}\r\n  \r\n\tconst ColumnsWithImageSection = {\r\n\t  onLoad() {\r\n\t\tsections$l[this.id] = new ColumnsWithImage(this);\r\n\t  },\r\n\t  onUnload(e) {\r\n\t\tsections$l[this.id].onUnload(e);\r\n\t  },\r\n\t  onBlockSelect(e) {\r\n\t\tsections$l[this.id].onBlockSelect(e);\r\n\t  },\r\n\t};\r\n  \r\n\tregister('columns-with-image', [ColumnsWithImageSection, videoPlay]);\r\n  \r\n\tconst selectors$p = {\r\n\t  formMessageClose: '[data-form-message-close]',\r\n\t  formMessageWrapper: '[data-form-message]',\r\n\t};\r\n  \r\n\tconst classes$i = {\r\n\t  hideDown: 'hide-down',\r\n\t  notificationVisible: 'notification-visible',\r\n\t};\r\n  \r\n\tlet sections$k = {};\r\n  \r\n\tclass ContactForm {\r\n\t  constructor(section) {\r\n\t\tthis.container = section.container;\r\n\t\tthis.closeButton = this.container.querySelector(selectors$p.formMessageClose);\r\n\t\tthis.messageWrapper = this.container.querySelector(selectors$p.formMessageWrapper);\r\n  \r\n\t\tif (this.messageWrapper) {\r\n\t\t  this.hidePopups();\r\n\t\t  this.closeFormMessage();\r\n\t\t  this.autoHideMessage();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  hidePopups() {\r\n\t\tdocument.body.classList.add(classes$i.notificationVisible);\r\n\t  }\r\n  \r\n\t  showPopups() {\r\n\t\tdocument.body.classList.remove(classes$i.notificationVisible);\r\n\t  }\r\n  \r\n\t  closeFormMessage() {\r\n\t\tthis.closeButton.addEventListener('click', this.closeMessage.bind(this));\r\n\t  }\r\n  \r\n\t  closeMessage(e) {\r\n\t\te.preventDefault();\r\n\t\tthis.messageWrapper.classList.add(classes$i.hideDown);\r\n\t\tthis.showPopups();\r\n\t  }\r\n  \r\n\t  autoHideMessage() {\r\n\t\tsetTimeout(() => {\r\n\t\t  this.messageWrapper.classList.add(classes$i.hideDown);\r\n\t\t  this.showPopups();\r\n\t\t}, 10000);\r\n\t  }\r\n\t}\r\n  \r\n\tconst contactFormSection = {\r\n\t  onLoad() {\r\n\t\tsections$k[this.id] = new ContactForm(this);\r\n\t  },\r\n\t};\r\n  \r\n\tregister('contact-form', contactFormSection);\r\n  \r\n\tconst selectors$o = {\r\n\t  videoId: '[data-video-id]',\r\n\t  videoPlayer: '[data-video-player]',\r\n\t  videoTemplate: '[data-video-template]',\r\n\t  videoAutoplay: '[data-video-autoplay]',\r\n\t  videoWrapper: '[data-video-wrapper]',\r\n\t};\r\n  \r\n\tconst classes$h = {\r\n\t  loading: 'is-loading',\r\n\t};\r\n  \r\n\tconst sections$j = {};\r\n  \r\n\tclass VideoBackground {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t\tthis.videoId = this.container.querySelector(selectors$o.videoId);\r\n\t\tthis.videoPlayer = this.container.querySelector(selectors$o.videoPlayer);\r\n\t\tthis.videoTemplate = this.container.querySelector(selectors$o.videoTemplate);\r\n\t\tthis.init();\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tif (!this.videoId) return;\r\n  \r\n\t\t/*\r\n\t\t  Observe video element and pull it out from its template tag\r\n\t\t*/\r\n\t\tconst videoObserver = new IntersectionObserver(\r\n\t\t  (entries, observer) => {\r\n\t\t\tentries.forEach((entry) => {\r\n\t\t\t  if (entry.isIntersecting) {\r\n\t\t\t\tconst videoMarkup = this.videoTemplate.innerHTML;\r\n\t\t\t\tthis.videoPlayer.innerHTML = videoMarkup;\r\n\t\t\t\tthis.video = this.container.querySelector(selectors$o.videoAutoplay);\r\n\t\t\t\tthis.videoPlayer.classList.remove(classes$h.loading);\r\n  \r\n\t\t\t\tthis.listen();\r\n  \r\n\t\t\t\t// Stop observing element after it was animated\r\n\t\t\t\tobserver.unobserve(entry.target);\r\n\t\t\t  }\r\n\t\t\t});\r\n\t\t  },\r\n\t\t  {\r\n\t\t\troot: null,\r\n\t\t\trootMargin: '300px',\r\n\t\t\tthreshold: [0, 0.1, 0.25, 0.5, 0.75, 1],\r\n\t\t  }\r\n\t\t);\r\n  \r\n\t\tvideoObserver.observe(this.videoPlayer);\r\n\t  }\r\n  \r\n\t  listen() {\r\n\t\t// Force video autoplay on iOS when Low Power Mode is On\r\n\t\tthis.container.addEventListener(\r\n\t\t  'touchstart',\r\n\t\t  () => {\r\n\t\t\tthis.video.play();\r\n\t\t  },\r\n\t\t  {passive: true}\r\n\t\t);\r\n\t  }\r\n\t}\r\n  \r\n\tconst videoBackground = {\r\n\t  onLoad() {\r\n\t\tsections$j[this.id] = [];\r\n\t\tconst videoWrappers = this.container.querySelectorAll(selectors$o.videoWrapper);\r\n\t\tvideoWrappers.forEach((videoWrapper) => {\r\n\t\t  sections$j[this.id].push(new VideoBackground(videoWrapper));\r\n\t\t});\r\n\t  },\r\n\t};\r\n  \r\n\tclass PopupCookie {\r\n\t  constructor(name, value) {\r\n\t\tthis.configuration = {\r\n\t\t  expires: null, // session cookie\r\n\t\t  path: '/',\r\n\t\t  domain: window.location.hostname,\r\n\t\t  sameSite: 'none',\r\n\t\t  secure: true,\r\n\t\t};\r\n\t\tthis.name = name;\r\n\t\tthis.value = value;\r\n\t  }\r\n  \r\n\t  write() {\r\n\t\tconst hasCookie = document.cookie.indexOf('; ') !== -1 && !document.cookie.split('; ').find((row) => row.startsWith(this.name));\r\n\t\tif (hasCookie || document.cookie.indexOf('; ') === -1) {\r\n\t\t  document.cookie = `${this.name}=${this.value}; expires=${this.configuration.expires}; path=${this.configuration.path}; domain=${this.configuration.domain}; sameSite=${this.configuration.sameSite}; secure=${this.configuration.secure}`;\r\n\t\t}\r\n\t  }\r\n  \r\n\t  read() {\r\n\t\tif (document.cookie.indexOf('; ') !== -1 && document.cookie.split('; ').find((row) => row.startsWith(this.name))) {\r\n\t\t  const returnCookie = document.cookie\r\n\t\t\t.split('; ')\r\n\t\t\t.find((row) => row.startsWith(this.name))\r\n\t\t\t.split('=')[1];\r\n  \r\n\t\t  return returnCookie;\r\n\t\t} else {\r\n\t\t  return false;\r\n\t\t}\r\n\t  }\r\n  \r\n\t  destroy() {\r\n\t\tif (document.cookie.split('; ').find((row) => row.startsWith(this.name))) {\r\n\t\t  document.cookie = `${this.name}=null; expires=${this.configuration.expires}; path=${this.configuration.path}; domain=${this.configuration.domain}; sameSite=${this.configuration.sameSite}; secure=${this.configuration.secure}`;\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tconst selectors$n = {\r\n\t  newsletterForm: '[data-newsletter-form]',\r\n\t  popup: '[data-popup]',\r\n\t};\r\n  \r\n\tconst classes$g = {\r\n\t  success: 'has-success',\r\n\t  error: 'has-error',\r\n\t};\r\n  \r\n\tconst attributes$h = {\r\n\t  storageNewsletterFormId: 'newsletter_form_id',\r\n\t};\r\n  \r\n\tconst sections$i = {};\r\n  \r\n\tclass Newsletter {\r\n\t  constructor(newsletter) {\r\n\t\tthis.newsletter = newsletter;\r\n\t\tthis.sessionStorage = window.sessionStorage;\r\n\t\tthis.popup = this.newsletter.closest(selectors$n.popup);\r\n\t\tthis.stopSubmit = true;\r\n\t\tthis.isChallengePage = false;\r\n\t\tthis.formID = null;\r\n\t\tthis.formIdSuccess = null;\r\n  \r\n\t\tthis.checkForChallengePage();\r\n  \r\n\t\tthis.newsletterSubmit = (e) => this.newsletterSubmitEvent(e);\r\n  \r\n\t\tif (!this.isChallengePage) {\r\n\t\t  this.init();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tthis.newsletter.addEventListener('submit', this.newsletterSubmit);\r\n  \r\n\t\tthis.showMessage();\r\n\t  }\r\n  \r\n\t  newsletterSubmitEvent(e) {\r\n\t\tif (this.stopSubmit) {\r\n\t\t  e.preventDefault();\r\n  \r\n\t\t  this.removeStorage();\r\n\t\t  this.writeStorage();\r\n\t\t  this.stopSubmit = false;\r\n\t\t  this.newsletter.submit();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  checkForChallengePage() {\r\n\t\tthis.isChallengePage = window.location.pathname === theme.routes.root + 'challenge';\r\n\t  }\r\n  \r\n\t  writeStorage() {\r\n\t\tif (this.sessionStorage !== undefined) {\r\n\t\t  this.sessionStorage.setItem(attributes$h.storageNewsletterFormId, this.newsletter.id);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  readStorage() {\r\n\t\tthis.formID = this.sessionStorage.getItem(attributes$h.storageNewsletterFormId);\r\n\t  }\r\n  \r\n\t  removeStorage() {\r\n\t\tthis.sessionStorage.removeItem(attributes$h.storageNewsletterFormId);\r\n\t  }\r\n  \r\n\t  showMessage() {\r\n\t\tthis.readStorage();\r\n  \r\n\t\tif (this.newsletter.id === this.formID) {\r\n\t\t  const newsletter = document.getElementById(this.formID);\r\n\t\t  const submissionSuccess = window.location.search.indexOf('?customer_posted=true') !== -1;\r\n\t\t  const submissionFailure = window.location.search.indexOf('accepts_marketing') !== -1;\r\n  \r\n\t\t  if (submissionSuccess) {\r\n\t\t\tnewsletter.classList.remove(classes$g.error);\r\n\t\t\tnewsletter.classList.add(classes$g.success);\r\n  \r\n\t\t\tif (this.popup) {\r\n\t\t\t  this.cookie = new PopupCookie(this.popup.dataset.cookieName, 'user_has_closed');\r\n\t\t\t  this.cookie.write();\r\n\t\t\t}\r\n\t\t  } else if (submissionFailure) {\r\n\t\t\tnewsletter.classList.remove(classes$g.success);\r\n\t\t\tnewsletter.classList.add(classes$g.error);\r\n\t\t  }\r\n  \r\n\t\t  if (submissionSuccess || submissionFailure) {\r\n\t\t\tthis.scrollToForm(newsletter);\r\n\t\t  }\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Scroll to the last submitted newsletter form\r\n\t   */\r\n\t  scrollToForm(newsletter) {\r\n\t\tconst rect = newsletter.getBoundingClientRect();\r\n\t\tconst isVisible = visibilityHelper.isElementPartiallyVisible(newsletter) || visibilityHelper.isElementTotallyVisible(newsletter);\r\n  \r\n\t\tif (!isVisible) {\r\n\t\t  setTimeout(() => {\r\n\t\t\twindow.scrollTo({\r\n\t\t\t  top: rect.top,\r\n\t\t\t  left: 0,\r\n\t\t\t  behavior: 'smooth',\r\n\t\t\t});\r\n\t\t  }, 400);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Event callback for Theme Editor `section:unload` event\r\n\t   */\r\n\t  onUnload() {\r\n\t\tthis.newsletter.removeEventListener('submit', this.newsletterSubmit);\r\n\t  }\r\n\t}\r\n  \r\n\tconst newsletterSection = {\r\n\t  onLoad() {\r\n\t\tsections$i[this.id] = [];\r\n\t\tconst newsletters = this.container.querySelectorAll(selectors$n.newsletterForm);\r\n\t\tnewsletters.forEach((form) => {\r\n\t\t  sections$i[this.id].push(new Newsletter(form));\r\n\t\t});\r\n\t  },\r\n\t  onUnload() {\r\n\t\tsections$i[this.id].forEach((form) => {\r\n\t\t  if (typeof form.onUnload === 'function') {\r\n\t\t\tform.onUnload();\r\n\t\t  }\r\n\t\t});\r\n\t  },\r\n\t};\r\n  \r\n\tconst selectors$m = {\r\n\t  product: '[data-product]',\r\n\t  productSlider: '[data-slider]',\r\n\t  productSlide: '[data-slide]',\r\n\t  productGridItemImage: '[data-product-media-container]',\r\n\t  flickityButton: '.flickity-button',\r\n\t  item: '[data-slide]',\r\n\t  links: 'a, button',\r\n\t};\r\n  \r\n\tconst attributes$g = {\r\n\t  tabIndex: 'tabindex',\r\n\t};\r\n  \r\n\tconst sections$h = {};\r\n  \r\n\tclass CustomContent {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t\tthis.product = this.container.querySelectorAll(selectors$m.product);\r\n\t\tthis.productSlider = this.container.querySelectorAll(selectors$m.productSlider);\r\n\t\tthis.checkSliderOnResize = () => this.checkSlider();\r\n\t\tthis.flkty = [];\r\n\t\tthis.videoObj = [];\r\n\t\tthis.quickViewObj = [];\r\n  \r\n\t\tthis.listen();\r\n\t  }\r\n  \r\n\t  checkSlider() {\r\n\t\tif (window.innerWidth >= theme.sizes.small) {\r\n\t\t  this.productSlider.forEach((slider) => {\r\n\t\t\tthis.initProductSlider(slider);\r\n\t\t  });\r\n\t\t} else {\r\n\t\t  this.productSlider.forEach((slider) => {\r\n\t\t\tthis.destroyProductSlider(slider);\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  initProductSlider(slider) {\r\n\t\tconst slidesCount = slider.querySelectorAll(selectors$m.productSlide).length;\r\n\t\tconst sliderId = slider.dataset.slider;\r\n  \r\n\t\tif (slidesCount > 1) {\r\n\t\t  if (this.flkty[sliderId] === undefined || !this.flkty[sliderId].isActive) {\r\n\t\t\tthis.flkty[sliderId] = new Flickity(slider, {\r\n\t\t\t  prevNextButtons: true,\r\n\t\t\t  pageDots: true,\r\n\t\t\t  wrapAround: true,\r\n\t\t\t  on: {\r\n\t\t\t\tready: () => {\r\n\t\t\t\t  this.setSliderArrowsPosition(slider);\r\n\t\t\t\t},\r\n\t\t\t\tchange: (index) => {\r\n\t\t\t\t  this.flkty[sliderId].cells.forEach((slide, i) => {\r\n\t\t\t\t\tslide.element.querySelectorAll(selectors$m.links).forEach((link) => {\r\n\t\t\t\t\t  link.setAttribute(attributes$g.tabIndex, i === index ? '0' : '-1');\r\n\t\t\t\t\t});\r\n\t\t\t\t  });\r\n\t\t\t\t},\r\n\t\t\t  },\r\n\t\t\t});\r\n\t\t  } else {\r\n\t\t\tthis.setSliderArrowsPosition(slider);\r\n\t\t  }\r\n\t\t}\r\n\t  }\r\n  \r\n\t  destroyProductSlider(slider) {\r\n\t\tconst sliderId = slider.dataset.slider;\r\n  \r\n\t\tif (typeof this.flkty[sliderId] === 'object') {\r\n\t\t  this.flkty[sliderId].destroy();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  setSliderArrowsPosition(slider) {\r\n\t\tconst arrows = slider.querySelectorAll(selectors$m.flickityButton);\r\n\t\tconst image = slider.querySelector(selectors$m.productGridItemImage);\r\n  \r\n\t\tif (arrows.length && image) {\r\n\t\t  arrows.forEach((arrow) => {\r\n\t\t\tarrow.style.top = `${image.offsetHeight / 2}px`;\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  listen() {\r\n\t\tthis.checkSlider();\r\n\t\tdocument.addEventListener('theme:resize:width', this.checkSliderOnResize);\r\n\t  }\r\n  \r\n\t  onUnload() {\r\n\t\tif (this.flkty) {\r\n\t\t  for (const key in this.flkty) {\r\n\t\t\tif (this.flkty.hasOwnProperty(key)) {\r\n\t\t\t  this.flkty[key].destroy();\r\n\t\t\t}\r\n\t\t  }\r\n\t\t}\r\n  \r\n\t\tdocument.removeEventListener('theme:resize:width', this.checkSliderOnResize);\r\n\t  }\r\n\t}\r\n  \r\n\tconst CustomContentSection = {\r\n\t  onLoad() {\r\n\t\tsections$h[this.id] = new CustomContent(this.container);\r\n\t  },\r\n\t  onUnload(e) {\r\n\t\tsections$h[this.id].onUnload(e);\r\n\t  },\r\n\t};\r\n  \r\n\tregister('custom-content', [CustomContentSection, newsletterSection, videoPlay, videoBackground, productGrid]);\r\n  \r\n\tconst selectors$l = {\r\n\t  slider: '[data-slider]',\r\n\t  sliderItem: '[data-slide]',\r\n\t  productGridItemImage: '[data-product-media-container]',\r\n\t  links: 'a, button',\r\n\t  flickityButton: '.flickity-button',\r\n\t  promo: '[data-promo]',\r\n\t};\r\n  \r\n\tconst classes$f = {\r\n\t  carousel: 'carousel',\r\n\t  carouselInactive: 'carousel--inactive',\r\n\t  isLastSlideVisible: 'is-last-slide-visible',\r\n\t  featuredCollection: 'featured-collection',\r\n\t  promoFullWidth: 'collection-promo--full',\r\n\t  promoTwoItemsWidth: 'collection-promo--two-columns',\r\n\t};\r\n  \r\n\tconst attributes$f = {\r\n\t  sliderId: 'data-slider-id',\r\n\t  showImage: 'data-slider-show-image',\r\n\t  tabIndex: 'tabindex',\r\n\t};\r\n  \r\n\tconst sections$g = {};\r\n  \r\n\tclass GridSlider {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t\tthis.columns = parseInt(this.container.dataset.columns);\r\n\t\tthis.sliders = this.container.querySelectorAll(selectors$l.slider);\r\n\t\tthis.checkSlidesSizeOnResize = () => this.checkSlidesSize();\r\n\t\tthis.resetSliderEvent = (e) => this.resetSlider(e);\r\n\t\tthis.flkty = [];\r\n\t\tthis.listen();\r\n  \r\n\t\tthis.handleLastSlideOverlayOnMobile();\r\n\t  }\r\n  \r\n\t  initSlider(slider) {\r\n\t\tconst sliderId = slider.getAttribute(attributes$f.sliderId);\r\n\t\tslider.classList.remove(classes$f.carouselInactive);\r\n  \r\n\t\tif (this.flkty[sliderId] === undefined || !this.flkty[sliderId].isActive) {\r\n\t\t  this.flkty[sliderId] = new Flickity(slider, {\r\n\t\t\tpageDots: false,\r\n\t\t\tcellSelector: selectors$l.sliderItem,\r\n\t\t\tcellAlign: 'left',\r\n\t\t\tgroupCells: true,\r\n\t\t\tcontain: true,\r\n\t\t\twrapAround: false,\r\n\t\t\tadaptiveHeight: false,\r\n\t\t\ton: {\r\n\t\t\t  ready: () => {\r\n\t\t\t\tthis.setSliderArrowsPosition(slider);\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t  this.changeTabIndex(slider);\r\n\t\t\t\t}, 0);\r\n\t\t\t  },\r\n\t\t\t  change: () => {\r\n\t\t\t\tthis.changeTabIndex(slider);\r\n\t\t\t  },\r\n\t\t\t},\r\n\t\t  });\r\n  \r\n\t\t  this.handleLastSlideOverlayOnTablet(slider);\r\n\t\t} else {\r\n\t\t  this.setSliderArrowsPosition(slider);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  destroySlider(slider) {\r\n\t\tconst sliderId = slider.getAttribute(attributes$f.sliderId);\r\n  \r\n\t\tif (slider.classList.contains(classes$f.carousel)) {\r\n\t\t  slider.classList.add(classes$f.carouselInactive);\r\n\t\t}\r\n  \r\n\t\tif (typeof this.flkty[sliderId] === 'object') {\r\n\t\t  this.flkty[sliderId].destroy();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  // Move slides to their initial position\r\n\t  resetSlider(e) {\r\n\t\tconst slider = e.target;\r\n\t\tconst sliderId = slider.getAttribute(attributes$f.sliderId);\r\n  \r\n\t\tif (typeof this.flkty[sliderId] === 'object') {\r\n\t\t  this.flkty[sliderId].select(0, false, true);\r\n\t\t} else {\r\n\t\t  slider.scrollTo({\r\n\t\t\tleft: 0,\r\n\t\t\tbehavior: 'instant',\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  checkSlidesSize() {\r\n\t\tif (this.sliders.length) {\r\n\t\t  this.sliders.forEach((slider) => {\r\n\t\t\tconst columns = this.columns;\r\n\t\t\tconst isDesktop = window.innerWidth >= theme.sizes.large;\r\n\t\t\tconst isTablet = window.innerWidth >= theme.sizes.small && window.innerWidth < theme.sizes.large;\r\n\t\t\tconst slides = slider.querySelectorAll(selectors$l.sliderItem);\r\n\t\t\tlet itemsCount = slides.length;\r\n\t\t\tconst promos = slider.querySelectorAll(selectors$l.promo);\r\n\t\t\tlet checkForSlider = false;\r\n  \r\n\t\t\t// If there are promos in the grid with different width\r\n\t\t\tif (promos.length && isDesktop) {\r\n\t\t\t  promos.forEach((promo) => {\r\n\t\t\t\tif (promo.classList.contains(classes$f.promoFullWidth)) {\r\n\t\t\t\t  itemsCount += columns - 1;\r\n\t\t\t\t} else if (promo.classList.contains(classes$f.promoTwoItemsWidth)) {\r\n\t\t\t\t  itemsCount += 1;\r\n\t\t\t\t}\r\n\t\t\t  });\r\n\t\t\t}\r\n  \r\n\t\t\t// If tab collection has show image enabled\r\n\t\t\tif (slider.hasAttribute(attributes$f.showImage)) {\r\n\t\t\t  itemsCount += 1;\r\n\t\t\t}\r\n  \r\n\t\t\t// If list collection\r\n\t\t\tif (!columns) {\r\n\t\t\t  const sliderComputedStyle = window.getComputedStyle(slider, null);\r\n\t\t\t  let sliderWidth = slider.clientWidth;\r\n\t\t\t  sliderWidth -= parseFloat(sliderComputedStyle.paddingLeft) + parseFloat(sliderComputedStyle.paddingRight);\r\n  \r\n\t\t\t  checkForSlider = this.getSlidesWidth(slides) > sliderWidth;\r\n\t\t\t} else {\r\n\t\t\t  checkForSlider = itemsCount > columns;\r\n\t\t\t}\r\n  \r\n\t\t\tif ((isDesktop && checkForSlider) || (isTablet && itemsCount > 2)) {\r\n\t\t\t  this.initSlider(slider);\r\n\t\t\t} else {\r\n\t\t\t  this.destroySlider(slider);\r\n\t\t\t}\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  changeTabIndex(slider) {\r\n\t\tconst sliderId = slider.getAttribute(attributes$f.sliderId);\r\n\t\tconst selectedElementsIndex = this.flkty[sliderId].selectedIndex;\r\n  \r\n\t\tthis.flkty[sliderId].slides.forEach((slide, index) => {\r\n\t\t  slide.cells.forEach((cell) => {\r\n\t\t\tcell.element.querySelectorAll(selectors$l.links).forEach((link) => {\r\n\t\t\t  link.setAttribute(attributes$f.tabIndex, selectedElementsIndex === index ? '0' : '-1');\r\n\t\t\t});\r\n\t\t  });\r\n\t\t});\r\n\t  }\r\n  \r\n\t  getSlidesWidth(slides) {\r\n\t\tlet slidesTotalWidth = 0;\r\n  \r\n\t\tif (slides.length) {\r\n\t\t  slides.forEach((slide) => {\r\n\t\t\tslidesTotalWidth += slide.offsetWidth;\r\n\t\t  });\r\n\t\t}\r\n\t\treturn slidesTotalWidth;\r\n\t  }\r\n  \r\n\t  setSliderArrowsPosition(slider) {\r\n\t\tconst arrows = slider.querySelectorAll(selectors$l.flickityButton);\r\n\t\tconst image = slider.querySelector(selectors$l.productGridItemImage);\r\n  \r\n\t\tif (arrows.length && image) {\r\n\t\t  arrows.forEach((arrow) => {\r\n\t\t\tarrow.style.top = `${image.offsetHeight / 2}px`;\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  handleLastSlideOverlayOnTablet(slider) {\r\n\t\tconst sliderId = slider.getAttribute(attributes$f.sliderId);\r\n  \r\n\t\tthis.flkty[sliderId].on('select', () => {\r\n\t\t  const isTablet = window.innerWidth >= theme.sizes.small && window.innerWidth < theme.sizes.large;\r\n  \r\n\t\t  if (!isTablet) return;\r\n  \r\n\t\t  const selectedIndex = this.flkty[sliderId].selectedIndex;\r\n\t\t  const sliderGroups = this.flkty[sliderId].slides.length - 1;\r\n\t\t  const isLastSliderGroup = sliderGroups === selectedIndex;\r\n  \r\n\t\t  slider.parentNode.classList.toggle(classes$f.isLastSlideVisible, isLastSliderGroup);\r\n\t\t});\r\n\t  }\r\n  \r\n\t  handleLastSlideOverlayOnMobile() {\r\n\t\tthis.sliders.forEach((slider) => {\r\n\t\t  slider.addEventListener('scroll', (event) => {\r\n\t\t\tconst isMobile = window.innerWidth < theme.sizes.small;\r\n  \r\n\t\t\tif (!isMobile) return;\r\n  \r\n\t\t\tconst offsetWidth = event.target.offsetWidth;\r\n\t\t\tconst lastSlide = Array.from(slider.children).pop();\r\n\t\t\tconst rect = lastSlide.getBoundingClientRect();\r\n\t\t\tconst isLastSlideVisible = rect.left + 80 < offsetWidth; // 80px is enough to negate the small visible part of the slide on the right\r\n  \r\n\t\t\tslider.parentNode.classList.toggle(classes$f.isLastSlideVisible, isLastSlideVisible);\r\n\t\t  });\r\n\t\t});\r\n\t  }\r\n  \r\n\t  listen() {\r\n\t\tif (this.sliders.length) {\r\n\t\t  this.checkSlidesSize();\r\n\t\t  document.addEventListener('theme:resize:width', this.checkSlidesSizeOnResize);\r\n  \r\n\t\t  this.sliders.forEach((slider) => {\r\n\t\t\tslider.addEventListener('theme:tab:change', this.resetSliderEvent);\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Event callback for Theme Editor `section:block:select` event\r\n\t   */\r\n\t  onBlockSelect(evt) {\r\n\t\tconst slider = evt.target.closest(selectors$l.slider);\r\n\t\tconst flkty = Flickity.data(slider) || null;\r\n  \r\n\t\tif (!slider) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tlet parent = evt.target.parentNode;\r\n\t\tlet target = evt.target;\r\n  \r\n\t\tif (this.container.classList.contains(classes$f.featuredCollection)) {\r\n\t\t  // In Featured collection section the shopify block attributes are on inner element\r\n\t\t  parent = parent.parentNode;\r\n\t\t  target = target.parentNode;\r\n\t\t}\r\n  \r\n\t\tif (flkty !== null && flkty.isActive) {\r\n\t\t  const index = parseInt([...parent.children].indexOf(target));\r\n\t\t  const slidesPerPage = parseInt(flkty.slides[0].cells.length);\r\n\t\t  const groupIndex = Math.floor(index / slidesPerPage);\r\n  \r\n\t\t  flkty.select(groupIndex);\r\n\t\t} else {\r\n\t\t  const sliderStyle = slider.currentStyle || window.getComputedStyle(slider);\r\n\t\t  const sliderPadding = parseInt(sliderStyle.paddingLeft);\r\n\t\t  const blockPositionLeft = target.offsetLeft - sliderPadding;\r\n  \r\n\t\t  // Native scroll to item\r\n\t\t  slider.scrollTo({\r\n\t\t\ttop: 0,\r\n\t\t\tleft: blockPositionLeft,\r\n\t\t\tbehavior: 'smooth',\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Event callback for Theme Editor `section:unload` event\r\n\t   */\r\n\t  onUnload() {\r\n\t\tif (this.flkty) {\r\n\t\t  for (const key in this.flkty) {\r\n\t\t\tif (this.flkty.hasOwnProperty(key)) {\r\n\t\t\t  this.flkty[key].destroy();\r\n\t\t\t}\r\n\t\t  }\r\n\t\t}\r\n  \r\n\t\tdocument.removeEventListener('theme:resize:width', this.checkSlidesSizeOnResize);\r\n  \r\n\t\tif (this.sliders.length) {\r\n\t\t  this.sliders.forEach((slider) => {\r\n\t\t\tslider.removeEventListener('theme:tab:change', this.resetSliderEvent);\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tconst gridSlider = {\r\n\t  onLoad() {\r\n\t\tsections$g[this.id] = [];\r\n\t\tconst els = this.container.querySelectorAll(selectors$l.slider);\r\n\t\tels.forEach((el) => {\r\n\t\t  sections$g[this.id].push(new GridSlider(this.container));\r\n\t\t});\r\n\t  },\r\n\t  onUnload() {\r\n\t\tsections$g[this.id].forEach((el) => {\r\n\t\t  if (typeof el.onUnload === 'function') {\r\n\t\t\tel.onUnload();\r\n\t\t  }\r\n\t\t});\r\n\t  },\r\n\t  onBlockSelect(e) {\r\n\t\tsections$g[this.id].forEach((el) => {\r\n\t\t  if (typeof el.onBlockSelect === 'function') {\r\n\t\t\tel.onBlockSelect(e);\r\n\t\t  }\r\n\t\t});\r\n\t  },\r\n\t};\r\n  \r\n\tregister('featured-collection', [productGrid, tooltip, gridSlider]);\r\n  \r\n\tregister('featured-video', [videoPlay, videoBackground]);\r\n  \r\n\tconst selectors$k = {\r\n\t  trigger: '[data-collapsible-trigger-mobile]',\r\n\t};\r\n  \r\n\tconst classes$e = {\r\n\t  isExpanded: 'is-expanded',\r\n\t};\r\n  \r\n\tconst footerAccordionSection = {\r\n\t  onBlockSelect(e) {\r\n\t\tconst trigger = e.target.querySelector(selectors$k.trigger);\r\n\t\trequestAnimationFrame(() => {\r\n\t\t  if (trigger && !trigger.classList.contains(classes$e.isExpanded)) {\r\n\t\t\ttrigger.dispatchEvent(new Event('click'));\r\n\t\t  }\r\n\t\t});\r\n\t  },\r\n\t  onBlockDeselect(e) {\r\n\t\tconst trigger = e.target.querySelector(selectors$k.trigger);\r\n\t\trequestAnimationFrame(() => {\r\n\t\t  if (trigger && trigger.classList.contains(classes$e.isExpanded)) {\r\n\t\t\ttrigger.dispatchEvent(new Event('click'));\r\n\t\t  }\r\n\t\t});\r\n\t  },\r\n\t};\r\n  \r\n\tregister('footer', [popoutSection, newsletterSection, collapsible, footerAccordionSection]);\r\n  \r\n\tconst selectors$j = {\r\n\t  disclosureWrappper: '[data-hover-disclosure]',\r\n\t  header: '[data-site-header]',\r\n\t  link: '[data-top-link]',\r\n\t  headerBackground: '[data-header-background]',\r\n\t  navItem: '[data-nav-item]',\r\n\t};\r\n  \r\n\tconst classes$d = {\r\n\t  isVisible: 'is-visible',\r\n\t  grandparent: 'grandparent',\r\n\t  headerMenuOpened: 'site-header--menu-opened',\r\n\t  hasScrolled: 'has-scrolled',\r\n\t};\r\n  \r\n\tconst attributes$e = {\r\n\t  disclosureToggle: 'data-hover-disclosure-toggle',\r\n\t  ariaHasPopup: 'aria-haspopup',\r\n\t  ariaExpanded: 'aria-expanded',\r\n\t  ariaControls: 'aria-controls',\r\n\t};\r\n  \r\n\tlet sections$f = {};\r\n  \r\n\tclass HoverDisclosure {\r\n\t  constructor(el) {\r\n\t\tthis.disclosure = el;\r\n\t\tthis.header = el.closest(selectors$j.header);\r\n\t\tthis.key = this.disclosure.id;\r\n\t\tthis.trigger = document.querySelector(`[${attributes$e.disclosureToggle}='${this.key}']`);\r\n\t\tthis.link = this.trigger.querySelector(selectors$j.link);\r\n\t\tthis.grandparent = this.trigger.classList.contains(classes$d.grandparent);\r\n\t\tthis.background = document.querySelector(selectors$j.headerBackground);\r\n\t\tthis.trigger.setAttribute(attributes$e.ariaHasPopup, true);\r\n\t\tthis.trigger.setAttribute(attributes$e.ariaExpanded, false);\r\n\t\tthis.trigger.setAttribute(attributes$e.ariaControls, this.key);\r\n\t\tthis.dropdown = this.trigger.querySelector(selectors$j.disclosureWrappper);\r\n  \r\n\t\tthis.connectHoverToggle();\r\n\t\tthis.handleTablets();\r\n\t  }\r\n  \r\n\t  showDisclosure() {\r\n\t\tthis.hasScrolled = document.body.classList.contains(classes$d.hasScrolled);\r\n\t\tthis.headerHeight = this.hasScrolled ? window.stickyHeaderHeight : this.header.offsetHeight;\r\n  \r\n\t\tif (this.grandparent) {\r\n\t\t  this.dropdown.style.height = 'auto';\r\n\t\t  this.dropdownHeight = this.dropdown.offsetHeight;\r\n\t\t} else {\r\n\t\t  this.dropdownHeight = this.headerHeight;\r\n\t\t}\r\n  \r\n\t\tthis.background.style.setProperty('--header-background-height', `${this.dropdownHeight}px`);\r\n  \r\n\t\t// Set accessibility and classes\r\n\t\tthis.trigger.setAttribute(attributes$e.ariaExpanded, true);\r\n\t\tthis.trigger.classList.add(classes$d.isVisible);\r\n\t\tthis.header.classList.add(classes$d.headerMenuOpened);\r\n\t  }\r\n  \r\n\t  hideDisclosure() {\r\n\t\tthis.background.style.removeProperty('--header-background-height');\r\n  \r\n\t\tthis.trigger.classList.remove(classes$d.isVisible);\r\n\t\tthis.trigger.setAttribute(attributes$e.ariaExpanded, false);\r\n\t\tthis.header.classList.remove(classes$d.headerMenuOpened);\r\n\t  }\r\n  \r\n\t  handleTablets() {\r\n\t\t// first click opens the popup, second click opens the link\r\n\t\tthis.trigger.addEventListener('touchstart', (e) => {\r\n\t\t  const isOpen = this.trigger.classList.contains(classes$d.isVisible);\r\n\t\t  if (!isOpen) {\r\n\t\t\te.preventDefault();\r\n  \r\n\t\t\t// Hide the rest of the active nav items\r\n\t\t\tconst activeNavItems = this.header.querySelectorAll(`.${classes$d.isVisible}${selectors$j.navItem}`);\r\n  \r\n\t\t\tif (activeNavItems.length > 0) {\r\n\t\t\t  activeNavItems.forEach((item) => {\r\n\t\t\t\tif (item !== this.trigger) {\r\n\t\t\t\t  item.dispatchEvent(new Event('mouseleave', {bubbles: true}));\r\n  \r\n\t\t\t\t  const onTransitionEnd = () => {\r\n\t\t\t\t\trequestAnimationFrame(() => {\r\n\t\t\t\t\t  this.showDisclosure();\r\n\t\t\t\t\t});\r\n  \r\n\t\t\t\t\titem.removeEventListener('transitionend', onTransitionEnd);\r\n\t\t\t\t  };\r\n  \r\n\t\t\t\t  item.addEventListener('transitionend', onTransitionEnd);\r\n\t\t\t\t}\r\n\t\t\t  });\r\n  \r\n\t\t\t  return;\r\n\t\t\t}\r\n  \r\n\t\t\tthis.showDisclosure();\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  connectHoverToggle() {\r\n\t\tthis.trigger.addEventListener('mouseenter', () => this.showDisclosure());\r\n\t\tthis.link.addEventListener('focus', () => this.showDisclosure());\r\n  \r\n\t\tthis.trigger.addEventListener('mouseleave', () => this.hideDisclosure());\r\n\t\tthis.trigger.addEventListener('focusout', (event) => {\r\n\t\t  const inMenu = this.trigger.contains(event.relatedTarget);\r\n  \r\n\t\t  if (!inMenu) {\r\n\t\t\tthis.hideDisclosure();\r\n\t\t  }\r\n\t\t});\r\n\t\tthis.disclosure.addEventListener('keyup', (event) => {\r\n\t\t  if (event.code !== theme.keyboardKeys.ESCAPE) {\r\n\t\t\treturn;\r\n\t\t  }\r\n\t\t  this.hideDisclosure();\r\n\t\t});\r\n\t  }\r\n  \r\n\t  onBlockSelect(event) {\r\n\t\tif (this.disclosure.contains(event.target)) {\r\n\t\t  this.showDisclosure(event);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onBlockDeselect(event) {\r\n\t\tif (this.disclosure.contains(event.target)) {\r\n\t\t  this.hideDisclosure();\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tconst hoverDisclosure = {\r\n\t  onLoad() {\r\n\t\tsections$f[this.id] = [];\r\n\t\tconst disclosures = this.container.querySelectorAll(selectors$j.disclosureWrappper);\r\n  \r\n\t\tdisclosures.forEach((el) => {\r\n\t\t  sections$f[this.id].push(new HoverDisclosure(el));\r\n\t\t});\r\n\t  },\r\n\t  onBlockSelect(evt) {\r\n\t\tsections$f[this.id].forEach((el) => {\r\n\t\t  if (typeof el.onBlockSelect === 'function') {\r\n\t\t\tel.onBlockSelect(evt);\r\n\t\t  }\r\n\t\t});\r\n\t  },\r\n\t  onBlockDeselect(evt) {\r\n\t\tsections$f[this.id].forEach((el) => {\r\n\t\t  if (typeof el.onBlockDeselect === 'function') {\r\n\t\t\tel.onBlockDeselect(evt);\r\n\t\t  }\r\n\t\t});\r\n\t  },\r\n\t};\r\n  \r\n\tconst selectors$i = {\r\n\t  header: '[data-site-header]',\r\n\t  announcementBar: '[data-announcement-wrapper]',\r\n\t  collectionFilters: '[data-collection-filters]',\r\n\t  logo: '[data-logo]',\r\n\t  logoTextLink: '[data-logo-text-link]',\r\n\t  mobileNavDropdownTrigger: '[data-collapsible-trigger]',\r\n\t  navDrawer: '#nav-drawer',\r\n\t  drawer: '[data-drawer]',\r\n\t  drawerToggle: '[data-drawer-toggle]',\r\n\t  popdownToggle: '[data-popdown-toggle]',\r\n\t  mobileMenu: '[data-mobile-menu]',\r\n\t  nav: '[data-nav]',\r\n\t  navIcons: '[data-nav-icons]',\r\n\t  navItem: '[data-nav-item]',\r\n\t  navLinkMobile: '[data-nav-link-mobile]',\r\n\t  navSearchOpen: '[data-nav-search-open]',\r\n\t  wrapper: '[data-wrapper]',\r\n\t  headerBackground: '[data-header-background]',\r\n\t  cartPage: '[data-cart-page]',\r\n\t  widthContent: '[data-takes-space]',\r\n\t};\r\n  \r\n\tconst classes$c = {\r\n\t  jsDrawerOpenAll: ['js-drawer-open', 'js-drawer-open-cart', 'js-quick-view-visible'],\r\n\t  headerTransparent: 'site-header--transparent',\r\n\t  headerLoading: 'site-header--loading',\r\n\t  headerHovered: 'site-header--hovered',\r\n\t  headerMenuOpened: 'site-header--menu-opened',\r\n\t  hasScrolled: 'has-scrolled',\r\n\t  hideHeader: 'hide-header',\r\n\t  navCompress: 'nav--compress',\r\n\t  logoCompress: 'logo--compress',\r\n\t  isVisible: 'is-visible',\r\n\t  isOpen: 'is-open',\r\n\t  searchOpened: 'search-opened',\r\n\t  noOutline: 'no-outline',\r\n\t  cloneClass: 'js__header__clone',\r\n\t};\r\n  \r\n\tconst attributes$d = {\r\n\t  navAlignment: 'data-nav-alignment',\r\n\t};\r\n  \r\n\tconst sections$e = {};\r\n  \r\n\tclass Header {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t\tthis.background = document.querySelector(selectors$i.headerBackground);\r\n\t\tthis.header = container;\r\n\t\tthis.headerSection = container.parentNode;\r\n\t\tthis.headerWrapper = container.querySelector(selectors$i.wrapper);\r\n\t\tthis.logo = container.querySelector(selectors$i.logo);\r\n\t\tthis.logoTextLink = container.querySelector(selectors$i.logoTextLink);\r\n\t\tthis.nav = container.querySelector(selectors$i.nav);\r\n\t\tthis.navIcons = container.querySelector(selectors$i.navIcons);\r\n\t\tthis.headerStateEvent = (event) => this.headerState(event);\r\n\t\tthis.handleTouchstartEvent = (event) => this.handleTouchstart(event);\r\n\t\tthis.updateBackgroundHeightEvent = (event) => this.updateBackgroundHeight(event);\r\n  \r\n\t\tinitTransparentHeader();\r\n  \r\n\t\tthis.minWidth = this.getMinWidth();\r\n\t\tthis.checkWidthEvent = () => this.checkWidth();\r\n\t\tthis.listenWidth();\r\n\t\tthis.initMobileNav();\r\n\t\tthis.handleTextLinkLogos();\r\n\t\tthis.initStickyHeader();\r\n\t\tthis.handleBackgroundEvents();\r\n  \r\n\t\tif (!document.querySelector(selectors$i.cartPage)) {\r\n\t\t  window.cart = new CartDrawer();\r\n\t\t}\r\n  \r\n\t\tdocument.body.addEventListener('touchstart', this.handleTouchstartEvent, {passive: true});\r\n\t  }\r\n  \r\n\t  handleTouchstart(event) {\r\n\t\tconst isInHeader = this.header.contains(event.target);\r\n\t\tconst activeNavItem = this.header.querySelector(`.${classes$c.isVisible}${selectors$i.navItem}`);\r\n  \r\n\t\tif (!isInHeader && activeNavItem) {\r\n\t\t  activeNavItem.dispatchEvent(new Event('mouseleave', {bubbles: true}));\r\n\t\t}\r\n\t  }\r\n  \r\n\t  handleTextLinkLogos() {\r\n\t\tif (this.logoTextLink === null) return;\r\n  \r\n\t\tconst headerHeight = this.header.offsetHeight;\r\n\t\tdocument.documentElement.style.setProperty('--header-height', `${headerHeight}px`);\r\n\t\tdocument.documentElement.style.setProperty('--header-sticky-height', `${headerHeight}px`);\r\n\t  }\r\n  \r\n\t  initStickyHeader() {\r\n\t\tthis.hasScrolled = false;\r\n\t\tthis.hasCollectionFilters = document.querySelector(selectors$i.collectionFilters);\r\n\t\tthis.position = this.header.dataset.position;\r\n  \r\n\t\tconst shouldShowCompactHeader = this.position === 'fixed' && !this.hasCollectionFilters;\r\n\t\tif (shouldShowCompactHeader) {\r\n\t\t  this.header.classList.remove(classes$c.headerLoading);\r\n\t\t  this.headerState();\r\n\t\t  document.addEventListener('theme:scroll', this.headerStateEvent);\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tdocument.body.classList.remove(classes$c.hasScrolled);\r\n\t\tif (window.isHeaderTransparent) {\r\n\t\t  this.header.classList.add(classes$c.headerTransparent);\r\n\t\t}\r\n\t\tthis.header.classList.remove(classes$c.headerLoading);\r\n\t  }\r\n  \r\n\t  // Switch to \"compact\" header on scroll\r\n\t  headerState(event) {\r\n\t\tconst headerHeight = parseInt(this.header.dataset.height || this.header.offsetHeight);\r\n\t\tconst announcementBar = document.querySelector(selectors$i.announcementBar);\r\n\t\tconst announcementHeight = announcementBar ? announcementBar.offsetHeight : 0;\r\n\t\tconst pageOffset = headerHeight + announcementHeight;\r\n\t\tconst currentScrollTop = window.pageYOffset || document.documentElement.scrollTop;\r\n\t\tconst scrollUp = event && event.detail && event.detail.up;\r\n  \r\n\t\t// Show compact header when scroll down\r\n\t\tthis.hasScrolled = currentScrollTop > pageOffset;\r\n\t\tdocument.body.classList.toggle(classes$c.hasScrolled, this.hasScrolled);\r\n  \r\n\t\t// Hide compact header when scroll back to top\r\n\t\tconst hideHeaderThreshold = pageOffset + window.stickyHeaderHeight;\r\n\t\tconst bellowThreshold = currentScrollTop < hideHeaderThreshold;\r\n\t\tconst shouldHideHeader = bellowThreshold && scrollUp;\r\n\t\tdocument.body.classList.toggle(classes$c.hideHeader, shouldHideHeader);\r\n  \r\n\t\tif (window.isHeaderTransparent) {\r\n\t\t  const shouldShowTransparentHeader = !this.hasScrolled || shouldHideHeader;\r\n\t\t  this.header.classList.toggle(classes$c.headerTransparent, shouldShowTransparentHeader);\r\n\t\t}\r\n  \r\n\t\t// Update header background height if users scroll the page with their mouse over the header or over an opened nav menu\r\n\t\tif (this.header.classList.contains(classes$c.headerHovered)) {\r\n\t\t  const currentHeight = this.hasScrolled ? window.stickyHeaderHeight : headerHeight;\r\n\t\t  this.background.style.setProperty('--header-background-height', `${currentHeight}px`);\r\n  \r\n\t\t  const activeNavItem = this.header.querySelector(`.${classes$c.isVisible}${selectors$i.navItem}`);\r\n\t\t  if (activeNavItem) {\r\n\t\t\tactiveNavItem.dispatchEvent(new Event('mouseenter', {bubbles: true}));\r\n\t\t  }\r\n\t\t}\r\n\t  }\r\n  \r\n\t  handleBackgroundEvents() {\r\n\t\tthis.headerWrapper.addEventListener('mouseenter', this.updateBackgroundHeightEvent);\r\n  \r\n\t\tthis.headerWrapper.addEventListener('mouseleave', this.updateBackgroundHeightEvent);\r\n  \r\n\t\tthis.header.addEventListener('focusout', this.updateBackgroundHeightEvent);\r\n  \r\n\t\tdocument.addEventListener('theme:cart:close', this.updateBackgroundHeightEvent);\r\n  \r\n\t\t// Helps fixing Safari issues with background not being updated on search close and mouse over the header\r\n\t\tdocument.addEventListener('theme:search:close', this.updateBackgroundHeightEvent);\r\n\t  }\r\n  \r\n\t  updateBackgroundHeight(event) {\r\n\t\tconst isDesktop = matchMedia('(pointer:fine)').matches;\r\n\t\tconst isFocusEnabled = !document.body.classList.contains(classes$c.noOutline);\r\n\t\tconst isNotTabbingOnDesktop = isDesktop && !isFocusEnabled;\r\n  \r\n\t\tif (!event) return;\r\n  \r\n\t\t// Update header background height on:\r\n\t\t// 'mouseenter' event\r\n\t\tif (event.type === 'mouseenter') {\r\n\t\t  let popupsVisible = false;\r\n  \r\n\t\t  classes$c.jsDrawerOpenAll.forEach((popupClass) => {\r\n\t\t\tif (document.body.classList.contains(popupClass)) {\r\n\t\t\t  popupsVisible = true;\r\n\t\t\t}\r\n\t\t  });\r\n  \r\n\t\t  // Prevent background update:\r\n\t\t  // On visible popups\r\n\t\t  if (popupsVisible) return;\r\n  \r\n\t\t  // Update header background height:\r\n\t\t  this.headerHeight = this.hasScrolled ? window.stickyHeaderHeight : this.header.offsetHeight;\r\n  \r\n\t\t  this.header.classList.add(classes$c.headerHovered);\r\n  \r\n\t\t  if (!this.header.classList.contains(classes$c.headerMenuOpened)) {\r\n\t\t\tthis.background.style.setProperty('--header-background-height', `${this.headerHeight}px`);\r\n\t\t  }\r\n  \r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\t// Remove header background and handle focus on:\r\n\t\t// 'mouseleave' event\r\n\t\t// 'theme:cart:close' event\r\n\t\t// 'theme:search:close' event\r\n\t\t// 'focusout' event\r\n  \r\n\t\tif (event.type === 'focusout' && !isDesktop) return;\r\n\t\tif (event.type === 'theme:search:close' && !isNotTabbingOnDesktop) return;\r\n\t\tif (this.hasScrolled) return;\r\n  \r\n\t\trequestAnimationFrame(() => {\r\n\t\t  const focusOutOfHeader = document.activeElement.closest(selectors$i.header) === null;\r\n\t\t  const isSearchOpened = document.body.classList.contains(classes$c.searchOpened);\r\n  \r\n\t\t  if (isSearchOpened) return;\r\n  \r\n\t\t  if (event.type === 'focusout') {\r\n\t\t\tif (!focusOutOfHeader) return;\r\n\t\t  }\r\n  \r\n\t\t  this.header.classList.remove(classes$c.headerHovered);\r\n\t\t  this.background.style.setProperty('--header-background-height', '0px');\r\n  \r\n\t\t  if (!isFocusEnabled) {\r\n\t\t\tdocument.activeElement.blur();\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  listenWidth() {\r\n\t\tdocument.addEventListener('theme:resize', this.checkWidthEvent);\r\n\t\tthis.checkWidth();\r\n\t  }\r\n  \r\n\t  checkWidth() {\r\n\t\tif (window.innerWidth < this.minWidth) {\r\n\t\t  this.nav.classList.add(classes$c.navCompress);\r\n\t\t  this.logo.classList.add(classes$c.logoCompress);\r\n\t\t} else {\r\n\t\t  this.nav.classList.remove(classes$c.navCompress);\r\n\t\t  this.logo.classList.remove(classes$c.logoCompress);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  getMinWidth() {\r\n\t\tconst headerWrapperStyles = this.headerWrapper.currentStyle || window.getComputedStyle(this.headerWrapper);\r\n\t\tconst headerPaddings = parseInt(headerWrapperStyles.paddingLeft) * 2;\r\n\t\tconst comparitor = this.header.cloneNode(true);\r\n\t\tcomparitor.classList.add(classes$c.cloneClass);\r\n\t\tdocument.body.appendChild(comparitor);\r\n\t\tconst wideElements = comparitor.querySelectorAll(selectors$i.widthContent);\r\n\t\tconst navAlignment = this.header.getAttribute(attributes$d.navAlignment);\r\n\t\tconst minWidth = _sumSplitWidths(wideElements, navAlignment);\r\n  \r\n\t\tdocument.body.removeChild(comparitor);\r\n  \r\n\t\treturn minWidth + wideElements.length * 20 + headerPaddings;\r\n\t  }\r\n  \r\n\t  initMobileNav() {\r\n\t\t// Search popdown link\r\n\t\tthis.mobileMenu = this.headerSection.querySelector(selectors$i.mobileMenu);\r\n\t\tthis.navDrawer = this.headerSection.querySelector(selectors$i.navDrawer);\r\n\t\tthis.drawerToggle = this.navDrawer.querySelector(selectors$i.drawerToggle);\r\n\t\tthis.navSearchOpen = this.navDrawer.querySelectorAll(selectors$i.navSearchOpen);\r\n  \r\n\t\tthis.navSearchOpen?.forEach((element) => {\r\n\t\t  element.addEventListener('click', (event) => {\r\n\t\t\tevent.preventDefault();\r\n  \r\n\t\t\tconst drawer = this.drawerToggle.closest(`${selectors$i.drawer}.${classes$c.isOpen}`);\r\n\t\t\tconst isMobile = matchMedia('(pointer:coarse)').matches;\r\n\t\t\tconst popdownToggle = isMobile ? this.mobileMenu.querySelector(selectors$i.popdownToggle) : this.nav.querySelector(selectors$i.popdownToggle);\r\n  \r\n\t\t\tthis.drawerToggle.dispatchEvent(new Event('click', {bubbles: true}));\r\n  \r\n\t\t\tconst onDrawerTransitionEnd = (e) => {\r\n\t\t\t  if (e.target !== drawer) return;\r\n\t\t\t  requestAnimationFrame(() => popdownToggle.dispatchEvent(new Event('click', {bubbles: true})));\r\n\t\t\t  drawer.removeEventListener('transitionend', onDrawerTransitionEnd);\r\n\t\t\t};\r\n  \r\n\t\t\tdrawer.addEventListener('transitionend', onDrawerTransitionEnd);\r\n\t\t  });\r\n\t\t});\r\n  \r\n\t\t// First item in dropdown menu\r\n\t\tif (theme.settings.mobileMenuBehaviour === 'link') {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tconst navMobileLinks = this.headerSection.querySelectorAll(selectors$i.navLinkMobile);\r\n\t\tif (navMobileLinks.length) {\r\n\t\t  navMobileLinks.forEach((link) => {\r\n\t\t\tlink.addEventListener('click', (e) => {\r\n\t\t\t  const hasDropdown = link.parentNode.querySelectorAll(selectors$i.mobileNavDropdownTrigger).length;\r\n\t\t\t  const dropdownTrigger = link.nextElementSibling;\r\n  \r\n\t\t\t  if (hasDropdown) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tdropdownTrigger.dispatchEvent(new Event('click'), {bubbles: true});\r\n\t\t\t  }\r\n\t\t\t});\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onUnload() {\r\n\t\t// Reset variables so that the proper ones are applied before saving in the Theme editor\r\n\t\t// Necessary only when they were previously updated in `handleTextLinkLogos()` function\r\n\t\tdocument.documentElement.style.removeProperty('--header-height');\r\n\t\tdocument.documentElement.style.removeProperty('--header-sticky-height');\r\n  \r\n\t\tthis.initStickyHeader();\r\n\t\tdocument.body.classList.remove(...classes$c.jsDrawerOpenAll);\r\n\t\tdocument.removeEventListener('theme:scroll', this.headerStateEvent);\r\n\t\tdocument.removeEventListener('theme:resize', this.checkWidthEvent);\r\n\t\tdocument.removeEventListener('theme:cart:close', this.updateBackgroundHeightEvent);\r\n\t\tdocument.removeEventListener('theme:search:close', this.updateBackgroundHeightEvent);\r\n\t\tdocument.body.removeEventListener('touchstart', this.handleTouchstartEvent);\r\n\t\tdocument.dispatchEvent(new CustomEvent('theme:scroll:unlock', {bubbles: true}));\r\n  \r\n\t\tif (typeof window.cart.unload === 'function') {\r\n\t\t  window.cart.unload();\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tfunction _sumSplitWidths(nodes, alignment) {\r\n\t  let arr = [];\r\n\t  nodes.forEach((el) => {\r\n\t\tarr.push(el.clientWidth);\r\n\t  });\r\n\t  let [logoWidth, navWidth, iconsWidth] = arr;\r\n  \r\n\t  // Check if nav is left and set correct width\r\n\t  if (alignment === 'left') {\r\n\t\tconst tempWidth = logoWidth;\r\n\t\tlogoWidth = navWidth;\r\n\t\tnavWidth = tempWidth;\r\n\t  }\r\n  \r\n\t  if (alignment !== 'right') {\r\n\t\tif (logoWidth > iconsWidth) {\r\n\t\t  iconsWidth = logoWidth;\r\n\t\t} else {\r\n\t\t  logoWidth = iconsWidth;\r\n\t\t}\r\n\t  }\r\n  \r\n\t  return logoWidth + navWidth + iconsWidth;\r\n\t}\r\n  \r\n\tconst headerSection = {\r\n\t  onLoad() {\r\n\t\tsections$e[this.id] = new Header(this.container);\r\n\t  },\r\n\t  onUnload() {\r\n\t\tsections$e[this.id].onUnload();\r\n\t  },\r\n\t};\r\n  \r\n\tregister('header', [headerSection, hoverDisclosure, drawer]);\r\n  \r\n\tconst selectors$h = {\r\n\t  slider: '[data-slider]',\r\n\t};\r\n  \r\n\tlet sections$d = {};\r\n  \r\n\tclass IconsRow {\r\n\t  constructor(section) {\r\n\t\tthis.container = section.container;\r\n\t\tthis.slider = this.container.querySelector(selectors$h.slider);\r\n\t  }\r\n  \r\n\t  onBlockSelect(evt) {\r\n\t\tconst sliderStyle = this.slider.currentStyle || window.getComputedStyle(this.slider);\r\n\t\tconst sliderPadding = parseInt(sliderStyle.paddingLeft);\r\n\t\tconst blockPositionLeft = evt.target.offsetLeft - sliderPadding;\r\n  \r\n\t\tthis.slider.scrollTo({\r\n\t\t  top: 0,\r\n\t\t  left: blockPositionLeft,\r\n\t\t  behavior: 'smooth',\r\n\t\t});\r\n\t  }\r\n\t}\r\n  \r\n\tconst iconsRowSection = {\r\n\t  onLoad() {\r\n\t\tsections$d[this.id] = new IconsRow(this);\r\n\t  },\r\n\t  onBlockSelect(e) {\r\n\t\tsections$d[this.id].onBlockSelect(e);\r\n\t  },\r\n\t};\r\n  \r\n\tregister('icons-row', iconsRowSection);\r\n  \r\n\tconst selectors$g = {\r\n\t  item: '[data-accordion-item]',\r\n\t  button: '[data-accordion-button]',\r\n\t};\r\n  \r\n\tconst classes$b = {\r\n\t  isExpanded: 'is-expanded',\r\n\t};\r\n  \r\n\tconst sections$c = {};\r\n  \r\n\tclass ImageAccordions {\r\n\t  constructor(section) {\r\n\t\tthis.container = section.container;\r\n\t\tthis.imageAccordionsItems = this.container.querySelectorAll(selectors$g.item);\r\n\t\tthis.buttons = this.container.querySelectorAll(selectors$g.button);\r\n\t\tthis.accordionExpandEvent = (item) => this.accordionExpand(item);\r\n\t\tthis.accordionFocusEvent = (item) => this.accordionFocus(item);\r\n  \r\n\t\tthis.init();\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tthis.imageAccordionsItems.forEach((item) => {\r\n\t\t  item.addEventListener('mouseenter', this.accordionExpandEvent.bind(this, item));\r\n\t\t});\r\n  \r\n\t\tthis.buttons.forEach((button) => {\r\n\t\t  button.addEventListener('focusin', this.accordionFocusEvent.bind(this, button));\r\n\t\t});\r\n\t  }\r\n  \r\n\t  accordionExpand(item) {\r\n\t\tif (!item.classList.contains(classes$b.isExpanded)) {\r\n\t\t  this.imageAccordionsItems.forEach((item) => {\r\n\t\t\titem.classList.remove(classes$b.isExpanded);\r\n\t\t  });\r\n\t\t  item.classList.add(classes$b.isExpanded);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  accordionFocus(button) {\r\n\t\tbutton.closest(selectors$g.item).dispatchEvent(new Event('mouseenter'));\r\n\t  }\r\n  \r\n\t  onBlockSelect(evt) {\r\n\t\tconst element = evt.target;\r\n\t\tif (element) {\r\n\t\t  element.dispatchEvent(new Event('mouseenter'));\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tconst imageAccordionsSection = {\r\n\t  onLoad() {\r\n\t\tsections$c[this.id] = new ImageAccordions(this);\r\n\t  },\r\n\t  onBlockSelect(evt) {\r\n\t\tsections$c[this.id].onBlockSelect(evt);\r\n\t  },\r\n\t};\r\n  \r\n\tregister('image-accordions', imageAccordionsSection);\r\n  \r\n\tregister('image-with-text', videoPlay);\r\n  \r\n\tregister('list-collections', gridSlider);\r\n  \r\n\tconst sections$b = {};\r\n  \r\n\tconst selectors$f = {\r\n\t  slider: '[data-slider-gallery]',\r\n\t  sliderNav: '[data-slider-info]',\r\n\t  item: '[data-slide-item]',\r\n\t};\r\n  \r\n\tclass Locations {\r\n\t  constructor(section) {\r\n\t\tthis.container = section.container;\r\n\t\tthis.slider = this.container.querySelector(selectors$f.slider);\r\n\t\tthis.sliderNav = this.container.querySelector(selectors$f.sliderNav);\r\n  \r\n\t\tthis.initSlider();\r\n\t  }\r\n  \r\n\t  initSlider() {\r\n\t\tconst slidesCount = this.container.querySelectorAll(selectors$f.item).length;\r\n\t\tlet flkty = Flickity.data(this.slider) || null;\r\n\t\tlet flktyNav = Flickity.data(this.sliderNav) || null;\r\n  \r\n\t\tif (slidesCount <= 1) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tflkty = new Flickity(this.slider, {\r\n\t\t  fade: true,\r\n\t\t  wrapAround: true,\r\n\t\t  adaptiveHeight: true,\r\n\t\t  prevNextButtons: false,\r\n\t\t  pageDots: false,\r\n\t\t});\r\n  \r\n\t\t// iOS smooth scrolling fix\r\n\t\tflickitySmoothScrolling(this.slider);\r\n  \r\n\t\tflktyNav = new Flickity(this.sliderNav, {\r\n\t\t  fade: true,\r\n\t\t  wrapAround: true,\r\n\t\t  imagesLoaded: true,\r\n\t\t  lazyLoad: true,\r\n\t\t  asNavFor: this.slider,\r\n\t\t  prevNextButtons: true,\r\n\t\t  pageDots: false,\r\n\t\t});\r\n  \r\n\t\t// Trigger text change on image move/drag\r\n\t\tflktyNav.on('change', () => {\r\n\t\t  flkty.selectCell(flktyNav.selectedIndex);\r\n\t\t});\r\n  \r\n\t\t// Trigger text change on image move/drag\r\n\t\tflkty.on('change', () => {\r\n\t\t  flktyNav.selectCell(flkty.selectedIndex);\r\n\t\t});\r\n\t  }\r\n  \r\n\t  onBlockSelect(evt) {\r\n\t\tconst flkty = Flickity.data(this.slider) || null;\r\n\t\tconst flktyNav = Flickity.data(this.sliderNav) || null;\r\n\t\tconst index = parseInt([...evt.target.parentNode.children].indexOf(evt.target));\r\n  \r\n\t\tif (flkty !== null) {\r\n\t\t  flkty.select(index);\r\n\t\t}\r\n\t\tif (flktyNav !== null) {\r\n\t\t  flktyNav.select(index);\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tconst LocationsSection = {\r\n\t  onLoad() {\r\n\t\tsections$b[this.id] = new Locations(this);\r\n\t  },\r\n\t  onBlockSelect(e) {\r\n\t\tsections$b[this.id].onBlockSelect(e);\r\n\t  },\r\n\t};\r\n  \r\n\tregister('locations', LocationsSection);\r\n  \r\n\tconst sections$a = {};\r\n  \r\n\tconst selectors$e = {\r\n\t  slider: '[data-slider]',\r\n\t  sliderItem: '[data-slide-item]',\r\n\t  pointer: '[data-pointer]',\r\n\t  productGridItemImage: '[data-product-media-container]',\r\n\t  quickViewItemHolder: '[data-quick-view-item-holder]',\r\n\t  flickityButton: '.flickity-button',\r\n\t  links: 'a, button',\r\n\t  tooltip: '[data-tooltip]',\r\n\t};\r\n  \r\n\tconst attributes$c = {\r\n\t  pointer: 'data-pointer',\r\n\t  hotspot: 'data-hotspot',\r\n\t  tabIndex: 'tabindex',\r\n\t};\r\n  \r\n\tconst classes$a = {\r\n\t  productGridItemImageHover: 'product-grid-item__image--hovered',\r\n\t  pointerSelected: 'pointer--selected',\r\n\t  isSelected: 'is-selected',\r\n\t  isActive: 'is-active',\r\n\t  popupOpen: 'pswp--open',\r\n\t};\r\n  \r\n\tclass Look {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t\tthis.slider = this.container.querySelector(selectors$e.slider);\r\n\t\tthis.slides = this.container.querySelectorAll(selectors$e.sliderItem);\r\n\t\tthis.pointers = this.container.querySelectorAll(selectors$e.pointer);\r\n\t\tthis.flkty = null;\r\n\t\tthis.observer = null;\r\n  \r\n\t\tthis.checkSlidesSizeOnResize = () => this.checkSlidesSize();\r\n\t\tthis.pointersInit = (event) => this.dotPointers(event);\r\n\t\tthis.pointersOver = (event) => this.dotPointerIn(event);\r\n\t\tthis.pointersOut = (event) => this.dotPointerOut(event);\r\n  \r\n\t\tthis.debouncedBlockSelectCallback = debounce((event) => this.debouncedBlockSelect(event), 500);\r\n  \r\n\t\tthis.quickViewPopup = new QuickViewPopup(this.container);\r\n\t\tthis.listen();\r\n\t  }\r\n  \r\n\t  listen() {\r\n\t\tif (this.slider) {\r\n\t\t  this.checkSlidesSize();\r\n\t\t  document.addEventListener('theme:resize:width', this.checkSlidesSizeOnResize);\r\n\t\t}\r\n  \r\n\t\tif (this.pointers.length > 0) {\r\n\t\t  this.pointers.forEach((pointer) => {\r\n\t\t\tpointer.addEventListener('click', this.pointersInit);\r\n\t\t\tpointer.addEventListener('mouseover', this.pointersOver);\r\n\t\t\tpointer.addEventListener('mouseleave', this.pointersOut);\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  checkSlidesSize() {\r\n\t\tconst isDesktop = window.innerWidth >= theme.sizes.small;\r\n  \r\n\t\tthis.initTooltips();\r\n  \r\n\t\tif (isDesktop) {\r\n\t\t  if (this.slides.length > 2) {\r\n\t\t\tthis.initSlider();\r\n\t\t  } else {\r\n\t\t\tthis.destroySlider();\r\n\t\t\tthis.slidesTabIndex();\r\n\t\t  }\r\n  \r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tif (!isDesktop && this.slides.length > 1) {\r\n\t\t  this.initSlider();\r\n  \r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tthis.destroySlider();\r\n\t  }\r\n  \r\n\t  initTooltips() {\r\n\t\tthis.tooltips = this.container.querySelectorAll(selectors$e.tooltip);\r\n\t\tthis.tooltips.forEach((tooltip) => {\r\n\t\t  new Tooltip(tooltip);\r\n\t\t});\r\n\t  }\r\n  \r\n\t  initSlider() {\r\n\t\tif (this.flkty === null) {\r\n\t\t  this.flkty = new Flickity(this.slider, {\r\n\t\t\tprevNextButtons: true,\r\n\t\t\twrapAround: true,\r\n\t\t\tadaptiveHeight: false,\r\n\t\t\tcellAlign: 'left',\r\n\t\t\tgroupCells: false,\r\n\t\t\tcontain: true,\r\n\t\t\ton: {\r\n\t\t\t  ready: () => {\r\n\t\t\t\tthis.slidesTabIndex();\r\n\t\t\t\tthis.setSliderArrowsPosition();\r\n\t\t\t\tthis.dotPointers();\r\n\t\t\t  },\r\n\t\t\t  change: () => {\r\n\t\t\t\tthis.slidesTabIndex();\r\n\t\t\t\tthis.dotPointers();\r\n\t\t\t  },\r\n\t\t\t},\r\n\t\t  });\r\n  \r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tthis.setSliderArrowsPosition();\r\n\t  }\r\n  \r\n\t  setSliderArrowsPosition() {\r\n\t\tconst isDesktop = window.innerWidth >= theme.sizes.small;\r\n  \r\n\t\tif (!isDesktop) return;\r\n  \r\n\t\tconst arrows = this.slider.querySelectorAll(selectors$e.flickityButton);\r\n\t\tconst image = this.slider.querySelector(selectors$e.productGridItemImage);\r\n  \r\n\t\tif (arrows.length && image) {\r\n\t\t  arrows.forEach((arrow) => {\r\n\t\t\tarrow.style.top = `${image.offsetHeight / 2}px`;\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  slidesTabIndex() {\r\n\t\tif (this.slides.length < 3) {\r\n\t\t  this.slider.querySelectorAll(selectors$e.links).forEach((link) => {\r\n\t\t\tlink.setAttribute(attributes$c.tabIndex, '0');\r\n\t\t  });\r\n  \r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tconst slider = Flickity.data(this.slider);\r\n  \r\n\t\tslider.cells.forEach((slide) => {\r\n\t\t  slide.element.querySelectorAll(selectors$e.links).forEach((link) => {\r\n\t\t\tlink.setAttribute(attributes$c.tabIndex, '-1');\r\n\t\t  });\r\n\t\t});\r\n  \r\n\t\tslider.cells.forEach((slide) => {\r\n\t\t  if (slide.element.classList.contains(classes$a.isSelected)) {\r\n\t\t\tslide.element.querySelectorAll(selectors$e.links).forEach((link) => {\r\n\t\t\t  link.setAttribute(attributes$c.tabIndex, '0');\r\n\t\t\t});\r\n  \r\n\t\t\t// Used to add tabindex = 0 to the other slide element that's visible as well, but is not marked as selected\r\n\t\t\tconst secondaryElement = slide.element.nextSibling ? slide.element.nextSibling : slide.element.parentNode.firstChild;\r\n  \r\n\t\t\tsecondaryElement.querySelectorAll(selectors$e.links).forEach((link) => {\r\n\t\t\t  link.setAttribute(attributes$c.tabIndex, '0');\r\n\t\t\t});\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  destroySlider() {\r\n\t\tif (typeof this.flkty === 'object' && this.flkty !== null) {\r\n\t\t  this.flkty.destroy();\r\n\t\t  this.flkty = null;\r\n\t\t}\r\n\t  }\r\n  \r\n\t  dotPointers(event) {\r\n\t\tif (this.pointers.length === 0) return;\r\n  \r\n\t\tthis.pointers.forEach((button) => {\r\n\t\t  button.classList.remove(classes$a.pointerSelected);\r\n\t\t});\r\n  \r\n\t\tif (event) {\r\n\t\t  const dotIndex = event.target.getAttribute(attributes$c.pointer);\r\n  \r\n\t\t  this.flkty?.select(dotIndex);\r\n  \r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tconst slideIndex = this.flkty == null ? 0 : this.flkty.selectedIndex;\r\n  \r\n\t\tif (slideIndex >= 0) {\r\n\t\t  this.pointers[slideIndex].classList.add(classes$a.pointerSelected);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  dotPointerIn(event) {\r\n\t\tconst dotIndex = event.target.getAttribute(attributes$c.pointer);\r\n\t\tconst image = this.slides[dotIndex].querySelector(selectors$e.productGridItemImage);\r\n\t\tconst isTouch = matchMedia('(pointer:coarse)').matches;\r\n\t\tconst isMobile = window.innerWidth < theme.sizes.small;\r\n\t\tif (!isMobile && !isTouch) {\r\n\t\t  this.observeImage(image);\r\n\t\t}\r\n  \r\n\t\tthis.pointers.forEach((pointer) => {\r\n\t\t  pointer.style.setProperty('--look-animation', 'none');\r\n\t\t});\r\n\t  }\r\n  \r\n\t  dotPointerOut(event) {\r\n\t\tconst dotIndex = event.target.getAttribute(attributes$c.pointer);\r\n\t\tconst image = this.slides[dotIndex].querySelector(selectors$e.productGridItemImage);\r\n\t\timage.classList.remove(classes$a.productGridItemImageHover);\r\n\t\timage.dispatchEvent(new Event('mouseleave'));\r\n\t\tif (this.observer) {\r\n\t\t  this.observer.disconnect();\r\n\t\t}\r\n  \r\n\t\tthis.pointers.forEach((pointer) => {\r\n\t\t  pointer.style.removeProperty('--look-animation');\r\n\t\t});\r\n\t  }\r\n  \r\n\t  observeImage(image) {\r\n\t\tthis.observer = new IntersectionObserver(\r\n\t\t  (entries, observer) => {\r\n\t\t\tentries.forEach((entry) => {\r\n\t\t\t  const target = entry.target;\r\n\t\t\t  const outsideWrapper = entry.intersectionRatio == 0;\r\n  \r\n\t\t\t  if (!outsideWrapper) {\r\n\t\t\t\ttarget.dispatchEvent(new Event('mouseenter'));\r\n\t\t\t\ttarget.classList.add(classes$a.productGridItemImageHover);\r\n\t\t\t  }\r\n\t\t\t});\r\n\t\t  },\r\n\t\t  {\r\n\t\t\troot: this.slider,\r\n\t\t\tthreshold: [0.95, 1],\r\n\t\t  }\r\n\t\t);\r\n\t\tthis.observer.observe(image);\r\n\t  }\r\n  \r\n\t  triggerClick(target) {\r\n\t\trequestAnimationFrame(() => target.dispatchEvent(new Event('click')));\r\n\t  }\r\n  \r\n\t  destroyQuickViewPopup() {\r\n\t\tconst pswpElement = this.quickViewPopup?.loadPhotoswipe?.pswpElement;\r\n\t\tif (!pswpElement) return;\r\n\t\tif (pswpElement.classList.contains(classes$a.popupOpen)) {\r\n\t\t  this.quickViewPopup.loadPhotoswipe.popup.close();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Event callback for Theme Editor `shopify:block:select` event\r\n\t   * The timeouts here are necessary for issues with selecting blocks from one `Shop the look` section to another\r\n\t   */\r\n\t  onBlockSelect(event) {\r\n\t\tthis.debouncedBlockSelectCallback(event);\r\n\t  }\r\n  \r\n\t  debouncedBlockSelect(event) {\r\n\t\tconst pswpElement = this.quickViewPopup?.loadPhotoswipe?.pswpElement;\r\n  \r\n\t\t// No popup element\r\n\t\tif (!pswpElement) {\r\n\t\t  setTimeout(() => this.triggerClick(event.target), 400);\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tsetTimeout(() => {\r\n\t\t  // Popup initialized\r\n\t\t  if (pswpElement.classList.contains(classes$a.popupOpen)) {\r\n\t\t\t// Popup opened\r\n\t\t\tconst holder = this.quickViewPopup.loadPhotoswipe.pswpElement.querySelector(`[${attributes$c.hotspot}=\"${event.target.getAttribute(attributes$c.hotspot)}\"]`);\r\n\t\t\tconst quickViewItemHolders = this.quickViewPopup.loadPhotoswipe.pswpElement.querySelectorAll(selectors$e.quickViewItemHolder);\r\n  \r\n\t\t\tholder.classList.add(classes$a.isActive);\r\n  \r\n\t\t\tquickViewItemHolders.forEach((element) => {\r\n\t\t\t  if (element !== holder) {\r\n\t\t\t\telement.classList.remove(classes$a.isActive);\r\n\t\t\t  }\r\n\t\t\t});\r\n\t\t  } else {\r\n\t\t\t// Popup closed\r\n\t\t\tthis.triggerClick(event.target);\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Event callback for Theme Editor `shopify:section:unload` event\r\n\t   */\r\n\t  onUnload() {\r\n\t\tthis.destroyQuickViewPopup();\r\n\t\tdocument.removeEventListener('theme:resize:width', this.checkSlidesSizeOnResize);\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Event callback for Theme Editor `shopify:section:deselect` event\r\n\t   */\r\n\t  onDeselect() {\r\n\t\tthis.destroyQuickViewPopup();\r\n\t  }\r\n\t}\r\n  \r\n\tconst lookSection = {\r\n\t  onLoad() {\r\n\t\tsections$a[this.id] = new Look(this.container);\r\n\t  },\r\n\t  onUnload() {\r\n\t\tsections$a[this.id].onUnload();\r\n\t  },\r\n\t  onBlockSelect(event) {\r\n\t\tsections$a[this.id].onBlockSelect(event);\r\n\t  },\r\n\t  onDeselect() {\r\n\t\tsections$a[this.id].onDeselect();\r\n\t  },\r\n\t};\r\n  \r\n\tregister('look', [lookSection, productGrid]);\r\n  \r\n\tconst selectors$d = {\r\n\t  grid: '[data-grid]',\r\n\t};\r\n  \r\n\tconst mosaicSection = {\r\n\t  onBlockSelect(e) {\r\n\t\tconst grid = e.target.closest(selectors$d.grid);\r\n\t\tconst wrapperStyle = grid.currentStyle || window.getComputedStyle(grid);\r\n\t\tconst wrapperPadding = parseInt(wrapperStyle.paddingLeft);\r\n\t\tconst blockPositionLeft = e.target.offsetLeft - wrapperPadding;\r\n  \r\n\t\t// Native scroll to item\r\n\t\tgrid.scrollTo({\r\n\t\t  top: 0,\r\n\t\t  left: blockPositionLeft,\r\n\t\t  behavior: 'smooth',\r\n\t\t});\r\n\t  },\r\n\t};\r\n  \r\n\tregister('mosaic', mosaicSection);\r\n  \r\n\tregister('newsletter', newsletterSection);\r\n  \r\n\tregister('overlapping-images', videoPlay);\r\n  \r\n\tconst selectors$c = {\r\n\t  toggleAdmin: '[data-toggle-admin]',\r\n\t  toggleNewsletter: '[data-toggle-newsletter]',\r\n\t  adminForm: '[data-form-admin]',\r\n\t  newsletterForm: '[data-form-newsletter]',\r\n\t};\r\n  \r\n\tlet sections$9 = {};\r\n  \r\n\tclass Password {\r\n\t  constructor(section) {\r\n\t\tthis.container = section.container;\r\n\t\tthis.toggleAdmin = this.container.querySelector(selectors$c.toggleAdmin);\r\n\t\tthis.toggleNewsletter = this.container.querySelector(selectors$c.toggleNewsletter);\r\n\t\tthis.adminForm = this.container.querySelector(selectors$c.adminForm);\r\n\t\tthis.newsletterForm = this.container.querySelector(selectors$c.newsletterForm);\r\n\t\tthis.adminErrors = this.adminForm.querySelector('.errors');\r\n\t\tthis.newsletterErrors = this.newsletterForm.querySelector('.errors');\r\n  \r\n\t\tthis.init();\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tthis.toggleAdmin.addEventListener('click', (e) => {\r\n\t\t  e.preventDefault();\r\n\t\t  this.showPasswordForm();\r\n\t\t});\r\n  \r\n\t\tthis.toggleNewsletter.addEventListener('click', (e) => {\r\n\t\t  e.preventDefault();\r\n\t\t  this.hidePasswordForm();\r\n\t\t});\r\n  \r\n\t\tif (window.location.hash == '#login' || this.adminErrors) {\r\n\t\t  this.showPasswordForm();\r\n\t\t} else {\r\n\t\t  this.hidePasswordForm();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  showPasswordForm() {\r\n\t\tshowElement(this.adminForm);\r\n\t\thideElement(this.newsletterForm);\r\n\t\twindow.location.hash = '#login';\r\n\t  }\r\n  \r\n\t  hidePasswordForm() {\r\n\t\tshowElement(this.newsletterForm);\r\n\t\thideElement(this.adminForm);\r\n\t\twindow.location.hash = '';\r\n\t  }\r\n\t}\r\n  \r\n\tconst passwordSection = {\r\n\t  onLoad() {\r\n\t\tsections$9[this.id] = new Password(this);\r\n\t  },\r\n\t};\r\n  \r\n\tregister('password-template', passwordSection);\r\n  \r\n\tconst selectors$b = {\r\n\t  largePromo: '[data-large-promo]',\r\n\t  largePromoInner: '[data-large-promo-inner]',\r\n\t  tracking: '[data-tracking-consent]',\r\n\t  trackingInner: '[data-tracking-consent-inner]',\r\n\t  trackingAccept: '[data-confirm-cookies]',\r\n\t  popupBar: '[data-popup-bar]',\r\n\t  popupBarHolder: '[data-popup-bar-holder]',\r\n\t  popupBarToggle: '[data-popup-bar-toggle]',\r\n\t  popupBody: '[data-popup-body]',\r\n\t  popupClose: '[data-popup-close]',\r\n\t  popupUnderlay: '[data-popup-underlay]',\r\n\t  newsletterForm: '[data-newsletter-form]',\r\n\t};\r\n  \r\n\tconst attributes$b = {\r\n\t  cookieName: 'data-cookie-name',\r\n\t  targetReferrer: 'data-target-referrer',\r\n\t  preventScrollLock: 'data-prevent-scroll-lock',\r\n\t};\r\n  \r\n\tconst classes$9 = {\r\n\t  success: 'has-success',\r\n\t  error: 'has-error',\r\n\t  selected: 'selected',\r\n\t  hasBlockSelected: 'has-block-selected',\r\n\t  expanded: 'popup--expanded',\r\n\t  visible: 'popup--visible',\r\n\t  mobile: 'mobile',\r\n\t  desktop: 'desktop',\r\n\t  popupBar: 'popup--bar',\r\n\t  barIsVisible: 'popup-bar-is-visible',\r\n\t};\r\n  \r\n\tlet sections$8 = {};\r\n\tlet scrollLockTimer = 0;\r\n\tlet activePopups = 0;\r\n\tlet popups = [];\r\n  \r\n\tclass DelayShow {\r\n\t  constructor(popupContainer, popup) {\r\n\t\tthis.popupContainer = popupContainer;\r\n\t\tthis.popup = popup;\r\n\t\tthis.popupBody = popup.querySelector(selectors$b.popupBody);\r\n\t\tthis.delay = popupContainer.dataset.popupDelay;\r\n\t\tthis.isSubmitted = window.location.href.indexOf('accepts_marketing') !== -1 || window.location.href.indexOf('customer_posted=true') !== -1;\r\n\t\tthis.a11y = a11y;\r\n\t\tthis.showPopupOnScrollEvent = () => this.showPopupOnScroll();\r\n  \r\n\t\tif (this.delay === 'always' || this.isSubmitted) {\r\n\t\t  this.always();\r\n\t\t}\r\n  \r\n\t\tif (this.delay && this.delay.includes('delayed') && !this.isSubmitted) {\r\n\t\t  const seconds = this.delay.includes('_') ? parseInt(this.delay.split('_')[1]) : 10;\r\n\t\t  this.delayed(seconds);\r\n\t\t}\r\n  \r\n\t\tif (this.delay === 'bottom' && !this.isSubmitted) {\r\n\t\t  this.bottom();\r\n\t\t}\r\n  \r\n\t\tif (this.delay === 'idle' && !this.isSubmitted) {\r\n\t\t  this.idle();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  always() {\r\n\t\tthis.showPopup();\r\n\t  }\r\n  \r\n\t  delayed(seconds = 10) {\r\n\t\tsetTimeout(() => {\r\n\t\t  // Show popup after specific seconds\r\n\t\t  this.showPopup();\r\n\t\t}, seconds * 1000);\r\n\t  }\r\n  \r\n\t  // Scroll to the bottom of the page\r\n\t  bottom() {\r\n\t\tdocument.addEventListener('theme:scroll', this.showPopupOnScrollEvent);\r\n\t  }\r\n  \r\n\t  // Idle for 1 min\r\n\t  idle() {\r\n\t\tconst isTargetValid = this.checkPopupTarget() === true;\r\n\t\tif (!isTargetValid) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tlet timer = 0;\r\n\t\tlet idleTime = 60000;\r\n\t\tconst documentEvents = ['mousemove', 'mousedown', 'click', 'touchmove', 'touchstart', 'touchend', 'keydown', 'keypress'];\r\n\t\tconst windowEvents = ['load', 'resize', 'scroll'];\r\n  \r\n\t\tconst startTimer = () => {\r\n\t\t  timer = setTimeout(() => {\r\n\t\t\ttimer = 0;\r\n\t\t\tthis.showPopup();\r\n\t\t  }, idleTime);\r\n  \r\n\t\t  documentEvents.forEach((eventType) => {\r\n\t\t\tdocument.addEventListener(eventType, resetTimer);\r\n\t\t  });\r\n  \r\n\t\t  windowEvents.forEach((eventType) => {\r\n\t\t\twindow.addEventListener(eventType, resetTimer);\r\n\t\t  });\r\n\t\t};\r\n  \r\n\t\tconst resetTimer = () => {\r\n\t\t  if (timer) {\r\n\t\t\tclearTimeout(timer);\r\n\t\t  }\r\n  \r\n\t\t  documentEvents.forEach((eventType) => {\r\n\t\t\tdocument.removeEventListener(eventType, resetTimer);\r\n\t\t  });\r\n  \r\n\t\t  windowEvents.forEach((eventType) => {\r\n\t\t\twindow.removeEventListener(eventType, resetTimer);\r\n\t\t  });\r\n  \r\n\t\t  startTimer();\r\n\t\t};\r\n  \r\n\t\tstartTimer();\r\n\t  }\r\n  \r\n\t  showPopup() {\r\n\t\t// Push every popup in array, so we can focus the next one, after closing each\r\n\t\tconst popupElement = {id: this.popup.id, body: this.popupBody};\r\n\t\tpopups.push(popupElement);\r\n  \r\n\t\tconst isTargetValid = this.checkPopupTarget() === true;\r\n  \r\n\t\tif (isTargetValid) {\r\n\t\t  activePopups += 1;\r\n\t\t  this.popup.classList.add(classes$9.visible);\r\n\t\t  if (this.popup.classList.contains(classes$9.popupBar)) {\r\n\t\t\tdocument.body.classList.add(classes$9.barIsVisible);\r\n\t\t  }\r\n  \r\n\t\t  this.a11y.trapFocus({\r\n\t\t\tcontainer: this.popupBody,\r\n\t\t  });\r\n  \r\n\t\t  // The scroll is not locking if data-prevent-scroll-lock is added to the Popup container\r\n\t\t  if (this.popup.hasAttribute(attributes$b.preventScrollLock)) {\r\n\t\t\treturn false;\r\n\t\t  }\r\n  \r\n\t\t  this.scrollLock();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  checkPopupTarget() {\r\n\t\tconst targetMobile = this.popup.parentNode.classList.contains(classes$9.mobile);\r\n\t\tconst targetDesktop = this.popup.parentNode.classList.contains(classes$9.desktop);\r\n  \r\n\t\tif ((targetMobile && window.innerWidth >= theme.sizes.small) || (targetDesktop && window.innerWidth < theme.sizes.small)) {\r\n\t\t  return false;\r\n\t\t} else {\r\n\t\t  return true;\r\n\t\t}\r\n\t  }\r\n  \r\n\t  scrollLock() {\r\n\t\tdocument.dispatchEvent(new CustomEvent('theme:scroll:lock', {bubbles: true, detail: this.popupBody}));\r\n\t  }\r\n  \r\n\t  showPopupOnScroll() {\r\n\t\tif (window.scrollY + window.innerHeight >= document.body.clientHeight) {\r\n\t\t  this.showPopup();\r\n\t\t  document.removeEventListener('theme:scroll', this.showPopupOnScrollEvent);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onUnload() {\r\n\t\tdocument.removeEventListener('theme:scroll', this.showPopupOnScrollEvent);\r\n\t  }\r\n\t}\r\n  \r\n\tclass TargetReferrer {\r\n\t  constructor(el) {\r\n\t\tthis.popupContainer = el;\r\n\t\tthis.locationPath = location.href;\r\n  \r\n\t\tif (!this.popupContainer.hasAttribute(attributes$b.targetReferrer)) {\r\n\t\t  return false;\r\n\t\t}\r\n  \r\n\t\tif (this.locationPath.indexOf(this.popupContainer.getAttribute(attributes$b.targetReferrer)) === -1 && !window.Shopify.designMode) {\r\n\t\t  this.popupContainer.parentNode.removeChild(this.popupContainer);\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tclass LargePopup {\r\n\t  constructor(el) {\r\n\t\tthis.popupContainer = el;\r\n\t\tthis.popup = this.popupContainer.querySelector(selectors$b.largePromoInner);\r\n\t\tthis.popupBody = this.popup.querySelector(selectors$b.popupBody);\r\n\t\tthis.popupId = this.popup.id;\r\n\t\tthis.close = this.popup.querySelector(selectors$b.popupClose);\r\n\t\tthis.underlay = this.popup.querySelector(selectors$b.popupUnderlay);\r\n\t\tthis.form = this.popup.querySelector(selectors$b.newsletterForm);\r\n\t\tthis.cookie = new PopupCookie(this.popupContainer.dataset.cookieName, 'user_has_closed');\r\n\t\tthis.isTargeted = new TargetReferrer(this.popupContainer);\r\n\t\tthis.a11y = a11y;\r\n  \r\n\t\tthis.init();\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tconst cookieExists = this.cookie.read() !== false;\r\n  \r\n\t\tif (!cookieExists || window.Shopify.designMode) {\r\n\t\t  if (!window.Shopify.designMode) {\r\n\t\t\tnew DelayShow(this.popupContainer, this.popup);\r\n\t\t  } else {\r\n\t\t\tthis.showPopup();\r\n\t\t  }\r\n  \r\n\t\t  if (this.form) {\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t  if (this.form.classList.contains(classes$9.success)) {\r\n\t\t\t\tthis.showPopupIfNoCookie();\r\n\t\t\t\tactivePopups -= 1;\r\n\t\t\t  }\r\n\t\t\t});\r\n\t\t  }\r\n  \r\n\t\t  this.initClosers();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  checkPopupTarget() {\r\n\t\tconst targetMobile = this.popup.parentNode.classList.contains(classes$9.mobile);\r\n\t\tconst targetDesktop = this.popup.parentNode.classList.contains(classes$9.desktop);\r\n  \r\n\t\tif ((targetMobile && window.innerWidth >= theme.sizes.small) || (targetDesktop && window.innerWidth < theme.sizes.small)) {\r\n\t\t  return false;\r\n\t\t} else {\r\n\t\t  return true;\r\n\t\t}\r\n\t  }\r\n  \r\n\t  showPopupIfNoCookie() {\r\n\t\tthis.showPopup();\r\n\t  }\r\n  \r\n\t  initClosers() {\r\n\t\tthis.close.addEventListener('click', this.closePopup.bind(this));\r\n\t\tthis.underlay.addEventListener('click', this.closePopup.bind(this));\r\n\t\tthis.popupContainer.addEventListener('keyup', (event) => {\r\n\t\t  if (event.code === theme.keyboardKeys.ESCAPE) {\r\n\t\t\tthis.closePopup(event);\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  closePopup(event) {\r\n\t\tevent.preventDefault();\r\n\t\tthis.hidePopup();\r\n\t\tthis.cookie.write();\r\n\t  }\r\n  \r\n\t  scrollLock() {\r\n\t\tthis.resetScrollUnlock();\r\n\t\tthis.a11y.trapFocus({\r\n\t\t  container: this.popupBody,\r\n\t\t});\r\n\t\tdocument.dispatchEvent(new CustomEvent('theme:scroll:lock', {bubbles: true, detail: this.popupBody}));\r\n\t  }\r\n  \r\n\t  scrollUnlock() {\r\n\t\tthis.resetScrollUnlock();\r\n  \r\n\t\t// Unlock scrollbar after popup animation completes\r\n\t\tscrollLockTimer = setTimeout(() => {\r\n\t\t  document.dispatchEvent(new CustomEvent('theme:scroll:unlock', {bubbles: true}));\r\n\t\t}, 300);\r\n\t  }\r\n  \r\n\t  resetScrollUnlock() {\r\n\t\tif (scrollLockTimer) {\r\n\t\t  clearTimeout(scrollLockTimer);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  showPopup() {\r\n\t\tconst isTargetValid = this.checkPopupTarget() === true;\r\n\t\tconst popupElement = {id: this.popupId, body: this.popup};\r\n\t\tpopups.push(popupElement);\r\n\t\tif (isTargetValid) {\r\n\t\t  activePopups += 1;\r\n\t\t  this.popup.classList.add(classes$9.visible);\r\n\t\t  this.scrollLock();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  hidePopup() {\r\n\t\tthis.popup.classList.remove(classes$9.visible);\r\n\t\tconst popupIndex = popups.findIndex((x) => x.id === this.popupId);\r\n\t\tactivePopups -= 1;\r\n\t\tpopups.splice(popupIndex, 1);\r\n  \r\n\t\tif (activePopups == 1 && document.body.classList.contains(classes$9.barIsVisible)) {\r\n\t\t  this.scrollUnlock();\r\n\t\t} else if (activePopups < 1) {\r\n\t\t  this.scrollUnlock();\r\n\t\t  this.a11y.removeTrapFocus();\r\n\t\t} else if (popups.length > 0) {\r\n\t\t  const nextPopup = popups[popups.length - 1].body;\r\n\t\t  this.a11y.trapFocus({\r\n\t\t\tcontainer: nextPopup,\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onBlockSelect(evt) {\r\n\t\tif (this.popupContainer.contains(evt.target) && !this.popup.classList.contains(classes$9.visible)) {\r\n\t\t  this.popup.classList.add(classes$9.selected);\r\n\t\t  this.popupContainer.classList.add(classes$9.hasBlockSelected);\r\n\t\t  this.showPopup();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onBlockDeselect(evt) {\r\n\t\tif (this.popupContainer.contains(evt.target)) {\r\n\t\t  this.popup.classList.remove(classes$9.selected);\r\n\t\t  this.popupContainer.classList.remove(classes$9.hasBlockSelected);\r\n\t\t  this.hidePopup();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onUnload() {\r\n\t\tthis.scrollUnlock();\r\n\t  }\r\n  \r\n\t  onDeselect() {\r\n\t\tthis.popup.classList.remove(classes$9.selected);\r\n\t\tthis.popupContainer.classList.remove(classes$9.hasBlockSelected);\r\n\t\tthis.hidePopup();\r\n\t  }\r\n\t}\r\n  \r\n\tclass Tracking {\r\n\t  constructor(el) {\r\n\t\tthis.popupContainer = el;\r\n\t\tthis.popup = this.popupContainer.querySelector(selectors$b.trackingInner);\r\n\t\tthis.popupId = this.popup.id;\r\n\t\tthis.close = this.popup.querySelector(selectors$b.popupClose);\r\n\t\tthis.acceptButton = this.popup.querySelector(selectors$b.trackingAccept);\r\n\t\tthis.enable = this.popupContainer.dataset.enable === 'true';\r\n\t\tthis.a11y = a11y;\r\n  \r\n\t\twindow.Shopify.loadFeatures(\r\n\t\t  [\r\n\t\t\t{\r\n\t\t\t  name: 'consent-tracking-api',\r\n\t\t\t  version: '0.1',\r\n\t\t\t},\r\n\t\t  ],\r\n\t\t  (error) => {\r\n\t\t\tif (error) {\r\n\t\t\t  throw error;\r\n\t\t\t}\r\n  \r\n\t\t\tconst userCanBeTracked = window.Shopify.customerPrivacy.userCanBeTracked();\r\n\t\t\tconst userTrackingConsent = window.Shopify.customerPrivacy.getTrackingConsent();\r\n  \r\n\t\t\tthis.enableTracking = !userCanBeTracked && userTrackingConsent === 'no_interaction' && this.enable;\r\n  \r\n\t\t\tif (window.Shopify.designMode) {\r\n\t\t\t  this.enableTracking = true;\r\n\t\t\t}\r\n  \r\n\t\t\tthis.init();\r\n\t\t  }\r\n\t\t);\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tif (this.enableTracking) {\r\n\t\t  this.showPopup();\r\n\t\t}\r\n  \r\n\t\tthis.clickEvents();\r\n\t  }\r\n  \r\n\t  clickEvents() {\r\n\t\tthis.close.addEventListener('click', (event) => {\r\n\t\t  event.preventDefault();\r\n  \r\n\t\t  window.Shopify.customerPrivacy.setTrackingConsent(false, () => this.hidePopup());\r\n\t\t});\r\n  \r\n\t\tthis.acceptButton.addEventListener('click', (event) => {\r\n\t\t  event.preventDefault();\r\n  \r\n\t\t  window.Shopify.customerPrivacy.setTrackingConsent(true, () => this.hidePopup());\r\n\t\t});\r\n  \r\n\t\tdocument.addEventListener('trackingConsentAccepted', () => {\r\n\t\t  console.log('trackingConsentAccepted event fired');\r\n\t\t});\r\n\t  }\r\n  \r\n\t  showPopup() {\r\n\t\tconst popupElement = {id: this.popupId, body: this.popup};\r\n\t\tpopups.push(popupElement);\r\n\t\tthis.popup.classList.add(classes$9.visible);\r\n\t\tthis.a11y.trapFocus({\r\n\t\t  container: this.popup,\r\n\t\t});\r\n\t  }\r\n  \r\n\t  hidePopup() {\r\n\t\tthis.popup.classList.remove(classes$9.visible);\r\n\t\tconst popupIndex = popups.findIndex((x) => x.id === this.popupId);\r\n\t\tpopups.splice(popupIndex, 1);\r\n  \r\n\t\tif (activePopups < 1) {\r\n\t\t  this.a11y.removeTrapFocus();\r\n\t\t} else if (popups.length > 0) {\r\n\t\t  const nextPopup = popups[popups.length - 1].body;\r\n\t\t  this.a11y.trapFocus({\r\n\t\t\tcontainer: nextPopup,\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onBlockSelect(evt) {\r\n\t\tif (this.popupContainer.contains(evt.target) && this.enableTracking && !this.popup.classList.contains(classes$9.visible)) {\r\n\t\t  this.showPopup();\r\n\t\t  this.popup.classList.add(classes$9.selected);\r\n\t\t  this.popup.parentNode.classList.add(classes$9.hasBlockSelected);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onBlockDeselect(evt) {\r\n\t\tif (this.popupContainer.contains(evt.target)) {\r\n\t\t  this.popup.classList.remove(classes$9.selected);\r\n\t\t  this.popupContainer.classList.remove(classes$9.hasBlockSelected);\r\n\t\t  this.hidePopup();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onDeselect() {\r\n\t\tthis.popup.classList.remove(classes$9.selected);\r\n\t\tthis.popupContainer.classList.remove(classes$9.hasBlockSelected);\r\n\t\tthis.hidePopup();\r\n\t  }\r\n\t}\r\n  \r\n\tclass PopupBar {\r\n\t  constructor(el) {\r\n\t\tthis.popupContainer = el;\r\n\t\tthis.popup = this.popupContainer.querySelector(selectors$b.popupBarHolder);\r\n\t\tthis.popupBody = this.popup.querySelector(selectors$b.popupBody);\r\n\t\tthis.popupId = this.popup.id;\r\n\t\tthis.close = this.popup.querySelector(selectors$b.popupClose);\r\n\t\tthis.underlay = this.popup.querySelector(selectors$b.popupUnderlay);\r\n\t\tthis.toggle = this.popup.querySelector(selectors$b.popupBarToggle);\r\n\t\tthis.cookie = new PopupCookie(this.popupContainer.dataset.cookieName, 'user_has_closed');\r\n\t\tthis.form = this.popup.querySelector(selectors$b.newsletterForm);\r\n\t\tthis.isTargeted = new TargetReferrer(this.popupContainer);\r\n\t\tthis.a11y = a11y;\r\n  \r\n\t\tthis.init();\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tconst cookieExists = this.cookie.read() !== false;\r\n  \r\n\t\tif (!cookieExists || window.Shopify.designMode) {\r\n\t\t  if (!window.Shopify.designMode) {\r\n\t\t\tnew DelayShow(this.popupContainer, this.popup);\r\n\t\t  } else {\r\n\t\t\tthis.showPopup();\r\n\t\t  }\r\n  \r\n\t\t  this.initPopupToggleButton();\r\n\t\t  this.initClosers();\r\n  \r\n\t\t  if (this.form) {\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t  if (this.form.classList.contains(classes$9.success)) {\r\n\t\t\t\tthis.showPopupIfNoCookie();\r\n\t\t\t  }\r\n  \r\n\t\t\t  if (this.form.classList.contains(classes$9.error)) {\r\n\t\t\t\t// Expand popup if form has error\r\n\t\t\t\tthis.toggle.dispatchEvent(new Event('click'));\r\n\t\t\t  }\r\n\t\t\t});\r\n\t\t  }\r\n\t\t}\r\n\t  }\r\n  \r\n\t  checkPopupTarget() {\r\n\t\tconst targetMobile = this.popup.parentNode.classList.contains(classes$9.mobile);\r\n\t\tconst targetDesktop = this.popup.parentNode.classList.contains(classes$9.desktop);\r\n  \r\n\t\tif ((targetMobile && window.innerWidth >= theme.sizes.small) || (targetDesktop && window.innerWidth < theme.sizes.small)) {\r\n\t\t  return false;\r\n\t\t} else {\r\n\t\t  return true;\r\n\t\t}\r\n\t  }\r\n  \r\n\t  showPopupIfNoCookie() {\r\n\t\tthis.showPopup();\r\n\t\tthis.toggle.dispatchEvent(new Event('click'));\r\n\t  }\r\n  \r\n\t  initPopupToggleButton() {\r\n\t\tthis.toggle.addEventListener('click', (event) => {\r\n\t\t  event.preventDefault();\r\n  \r\n\t\t  this.popup.classList.toggle(classes$9.expanded);\r\n  \r\n\t\t  if (this.popup.classList.contains(classes$9.expanded)) {\r\n\t\t\tthis.scrollLock();\r\n\t\t  } else {\r\n\t\t\tthis.scrollUnlock();\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  showPopup() {\r\n\t\tconst popupElement = {id: this.popupId, body: this.popup};\r\n\t\tpopups.push(popupElement);\r\n\t\tthis.a11y.trapFocus({\r\n\t\t  container: this.popupBody,\r\n\t\t});\r\n\t\tconst isTargetValid = this.checkPopupTarget() === true;\r\n\t\tif (isTargetValid) {\r\n\t\t  activePopups += 1;\r\n\t\t  document.body.classList.add(classes$9.barIsVisible);\r\n\t\t  this.popup.classList.add(classes$9.visible);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  hidePopup() {\r\n\t\tthis.popup.classList.remove(classes$9.visible);\r\n\t\tdocument.body.classList.remove(classes$9.barIsVisible);\r\n\t\tconst popupIndex = popups.findIndex((x) => x.id === this.popupId);\r\n\t\tpopups.splice(popupIndex, 1);\r\n  \r\n\t\tif (activePopups >= 1) {\r\n\t\t  activePopups -= 1;\r\n\t\t}\r\n  \r\n\t\tif (activePopups < 1) {\r\n\t\t  this.scrollUnlock();\r\n\t\t  this.a11y.removeTrapFocus();\r\n\t\t} else if (popups.length > 0) {\r\n\t\t  const nextPopup = popups[popups.length - 1].body;\r\n\t\t  this.a11y.trapFocus({\r\n\t\t\tcontainer: nextPopup,\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  initClosers() {\r\n\t\tthis.close.addEventListener('click', this.closePopup.bind(this));\r\n\t\tthis.underlay.addEventListener('click', () => this.toggle.dispatchEvent(new Event('click')));\r\n\t\tthis.popupContainer.addEventListener('keyup', (event) => {\r\n\t\t  if (event.code === theme.keyboardKeys.ESCAPE) {\r\n\t\t\tthis.popup.classList.remove(classes$9.expanded);\r\n\t\t\tthis.scrollUnlock();\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  closePopup(event) {\r\n\t\tevent.preventDefault();\r\n  \r\n\t\tthis.cookie.write();\r\n\t\tthis.hidePopup();\r\n\t  }\r\n  \r\n\t  scrollLock() {\r\n\t\tdocument.dispatchEvent(new CustomEvent('theme:scroll:lock', {bubbles: true, detail: this.popupBody}));\r\n\t  }\r\n  \r\n\t  scrollUnlock() {\r\n\t\tthis.resetScrollUnlock();\r\n  \r\n\t\t// Unlock scrollbar after popup animation completes\r\n\t\tscrollLockTimer = setTimeout(() => {\r\n\t\t  document.dispatchEvent(new CustomEvent('theme:scroll:unlock', {bubbles: true}));\r\n\t\t}, 300);\r\n\t  }\r\n  \r\n\t  resetScrollUnlock() {\r\n\t\tif (scrollLockTimer) {\r\n\t\t  clearTimeout(scrollLockTimer);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onBlockSelect(evt) {\r\n\t\tif (this.popupContainer.contains(evt.target) && !this.popup.classList.contains(classes$9.visible)) {\r\n\t\t  this.showPopup();\r\n\t\t  this.popup.classList.add(classes$9.expanded);\r\n\t\t  this.popup.classList.add(classes$9.selected);\r\n\t\t  this.popup.parentNode.classList.add(classes$9.hasBlockSelected);\r\n\t\t  this.resetScrollUnlock();\r\n\t\t  this.scrollLock();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onBlockDeselect(evt) {\r\n\t\tif (this.popupContainer.contains(evt.target)) {\r\n\t\t  this.popup.classList.remove(classes$9.expanded);\r\n\t\t  this.popup.classList.remove(classes$9.selected);\r\n\t\t  this.popup.parentNode.classList.remove(classes$9.hasBlockSelected);\r\n\t\t  this.hidePopup();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onUnload() {\r\n\t\tthis.scrollUnlock();\r\n\t  }\r\n  \r\n\t  onDeselect() {\r\n\t\tthis.popup.classList.remove(classes$9.expanded);\r\n\t\tthis.popup.classList.remove(classes$9.selected);\r\n\t\tthis.popup.parentNode.classList.remove(classes$9.hasBlockSelected);\r\n\t\tthis.hidePopup();\r\n\t  }\r\n\t}\r\n  \r\n\tconst popupSection = {\r\n\t  onLoad() {\r\n\t\tsections$8[this.id] = [];\r\n  \r\n\t\tif (window.Shopify.designMode) {\r\n\t\t  activePopups = 0;\r\n\t\t}\r\n  \r\n\t\tconst popupsLarge = this.container.querySelectorAll(selectors$b.largePromo);\r\n\t\tif (popupsLarge.length) {\r\n\t\t  popupsLarge.forEach((el) => {\r\n\t\t\tsections$8[this.id].push(new LargePopup(el));\r\n\t\t  });\r\n\t\t}\r\n  \r\n\t\tconst popupBars = this.container.querySelectorAll(selectors$b.popupBar);\r\n\t\tif (popupBars.length) {\r\n\t\t  popupBars.forEach((el) => {\r\n\t\t\tsections$8[this.id].push(new PopupBar(el));\r\n\t\t  });\r\n\t\t}\r\n  \r\n\t\tconst cookiesPopups = this.container.querySelectorAll(selectors$b.tracking);\r\n\t\tif (cookiesPopups.length) {\r\n\t\t  cookiesPopups.forEach((el) => {\r\n\t\t\tsections$8[this.id].push(new Tracking(el));\r\n\t\t  });\r\n\t\t}\r\n\t  },\r\n\t  onDeselect() {\r\n\t\tsections$8[this.id].forEach((el) => {\r\n\t\t  if (typeof el.onDeselect === 'function') {\r\n\t\t\tel.onDeselect();\r\n\t\t  }\r\n\t\t});\r\n\t  },\r\n\t  onBlockSelect(evt) {\r\n\t\tsections$8[this.id].forEach((el) => {\r\n\t\t  if (typeof el.onBlockSelect === 'function') {\r\n\t\t\tel.onBlockSelect(evt);\r\n\t\t  }\r\n\t\t});\r\n\t  },\r\n\t  onBlockDeselect(evt) {\r\n\t\tsections$8[this.id].forEach((el) => {\r\n\t\t  if (typeof el.onBlockDeselect === 'function') {\r\n\t\t\tel.onBlockDeselect(evt);\r\n\t\t  }\r\n\t\t});\r\n\t  },\r\n\t  onUnload(evt) {\r\n\t\tsections$8[this.id].forEach((el) => {\r\n\t\t  if (typeof el.onUnload === 'function') {\r\n\t\t\tel.onUnload(evt);\r\n\t\t  }\r\n\t\t});\r\n\t  },\r\n\t};\r\n  \r\n\tregister('popups', [popupSection, newsletterSection]);\r\n  \r\n\tconst selectors$a = {\r\n\t  pressItems: '[data-press-items]',\r\n\t  logoSlider: '[data-logo-slider]',\r\n\t  logoSlide: '[data-logo-slide]',\r\n\t  links: 'a, button',\r\n\t};\r\n  \r\n\tconst attributes$a = {\r\n\t  logoSlide: 'data-logo-index',\r\n\t  tabIndex: 'tabindex',\r\n\t};\r\n  \r\n\tlet sections$7 = {};\r\n  \r\n\tclass Press {\r\n\t  constructor(section) {\r\n\t\tthis.container = section.container;\r\n\t\tthis.slider = this.container.querySelector(selectors$a.pressItems);\r\n\t\tthis.sliderNav = this.container.querySelector(selectors$a.logoSlider);\r\n\t\tthis.sliderResizeEvent = () => this.checkSlides();\r\n  \r\n\t\tthis.initSlider();\r\n\t\tthis.checkSlides();\r\n  \r\n\t\twindow.addEventListener('load', this.resizeSlider.bind(this));\r\n\t\tdocument.addEventListener('theme:resize:width', this.sliderResizeEvent);\r\n\t  }\r\n  \r\n\t  checkSlides() {\r\n\t\tconst containerWidth = this.container.offsetWidth;\r\n\t\tconst slides = this.container.querySelectorAll(selectors$a.logoSlide);\r\n\t\tconst sliderNav = Flickity.data(this.sliderNav) || null;\r\n  \r\n\t\tif (sliderNav !== null) {\r\n\t\t  sliderNav.options.draggable = false;\r\n\t\t  sliderNav.options.wrapAround = false;\r\n\t\t  sliderNav.options.contain = true;\r\n  \r\n\t\t  if (this.getSlidesWidth() > containerWidth && slides.length > 2) {\r\n\t\t\tsliderNav.options.draggable = true;\r\n\t\t\tsliderNav.options.wrapAround = true;\r\n\t\t\tsliderNav.options.contain = false;\r\n\t\t  }\r\n\t\t  sliderNav.resize();\r\n\t\t  sliderNav.updateDraggable();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  getSlidesWidth() {\r\n\t\tconst slides = this.container.querySelectorAll(selectors$a.logoSlide);\r\n\t\tlet slidesTotalWidth = 0;\r\n  \r\n\t\tif (slides.length) {\r\n\t\t  slides.forEach((slide) => {\r\n\t\t\tslidesTotalWidth += slide.offsetWidth;\r\n\t\t  });\r\n\t\t}\r\n\t\treturn slidesTotalWidth;\r\n\t  }\r\n  \r\n\t  /* Init slider */\r\n\t  initSlider() {\r\n\t\tlet flkty = Flickity.data(this.slider) || null;\r\n\t\tlet flktyNav = Flickity.data(this.sliderNav) || null;\r\n  \r\n\t\tflkty = new Flickity(this.slider, {\r\n\t\t  fade: true,\r\n\t\t  wrapAround: true,\r\n\t\t  adaptiveHeight: true,\r\n\t\t  prevNextButtons: false,\r\n\t\t  pageDots: false,\r\n\t\t});\r\n  \r\n\t\tflktyNav = new Flickity(this.sliderNav, {\r\n\t\t  draggable: false,\r\n\t\t  wrapAround: false,\r\n\t\t  contain: true,\r\n\t\t  imagesLoaded: true,\r\n\t\t  lazyLoad: true,\r\n\t\t  asNavFor: this.slider,\r\n\t\t  prevNextButtons: false,\r\n\t\t  adaptiveHeight: false,\r\n\t\t  pageDots: false,\r\n\t\t  on: {\r\n\t\t\tready: () => {\r\n\t\t\t  const slides = this.container.querySelectorAll(selectors$a.logoSlide);\r\n\t\t\t  slides.forEach((slide) => {\r\n\t\t\t\t// Change slide text on logo change for a11y reasons\r\n\t\t\t\tslide.addEventListener('keyup', (event) => {\r\n\t\t\t\t  if (event.code === theme.keyboardKeys.ENTER || event.code === theme.keyboardKeys.NUMPADENTER || event.code === theme.keyboardKeys.SPACE) {\r\n\t\t\t\t\tconst selectedIndex = Number(slide.getAttribute(attributes$a.logoSlide));\r\n\t\t\t\t\tflkty.selectCell(selectedIndex);\r\n\t\t\t\t  }\r\n\t\t\t\t});\r\n\t\t\t  });\r\n\t\t\t},\r\n\t\t  },\r\n\t\t});\r\n  \r\n\t\t// iOS smooth scrolling fix\r\n\t\tflickitySmoothScrolling(this.slider);\r\n\t\tflickitySmoothScrolling(this.sliderNav);\r\n  \r\n\t\t// Trigger text change on image move/drag\r\n\t\tflktyNav.on('change', (index) => {\r\n\t\t  flkty.selectCell(index);\r\n\t\t});\r\n  \r\n\t\t// Trigger text change on image move/drag\r\n\t\tflkty.on('change', (index) => {\r\n\t\t  flktyNav.selectCell(index);\r\n  \r\n\t\t  flkty.cells.forEach((slide, i) => {\r\n\t\t\tslide.element.querySelectorAll(selectors$a.links).forEach((link) => {\r\n\t\t\t  link.setAttribute(attributes$a.tabIndex, i === index ? '0' : '-1');\r\n\t\t\t});\r\n\t\t  });\r\n\t\t});\r\n\t  }\r\n  \r\n\t  // slider height fix on window load\r\n\t  resizeSlider() {\r\n\t\tconst hasSlider = Flickity.data(this.slider);\r\n  \r\n\t\tif (hasSlider) {\r\n\t\t  hasSlider.resize();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onBlockSelect(evt) {\r\n\t\tconst slider = Flickity.data(this.slider) || null;\r\n\t\tconst sliderNav = Flickity.data(this.sliderNav) || null;\r\n\t\tconst index = parseInt([...evt.target.parentNode.children].indexOf(evt.target));\r\n  \r\n\t\tif (slider !== null) {\r\n\t\t  slider.select(index);\r\n\t\t}\r\n  \r\n\t\tif (sliderNav !== null) {\r\n\t\t  sliderNav.select(index);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onUnload() {\r\n\t\tdocument.removeEventListener('theme:resize:width', this.sliderResizeEvent);\r\n\t  }\r\n\t}\r\n  \r\n\tconst pressSection = {\r\n\t  onLoad() {\r\n\t\tsections$7[this.id] = new Press(this);\r\n\t  },\r\n\t  onUnload(e) {\r\n\t\tsections$7[this.id].onUnload(e);\r\n\t  },\r\n\t  onBlockSelect(e) {\r\n\t\tsections$7[this.id].onBlockSelect(e);\r\n\t  },\r\n\t};\r\n  \r\n\tregister('press', pressSection);\r\n  \r\n\tconst selectors$9 = {\r\n\t  slideshow: '[data-product-single-media-slider]',\r\n\t  productInfo: '[data-product-info]',\r\n\t  headerSticky: '[data-header-sticky]',\r\n\t  headerHeight: '[data-header-height]',\r\n\t};\r\n  \r\n\tconst classes$8 = {\r\n\t  sticky: 'is-sticky',\r\n\t};\r\n  \r\n\tconst attributes$9 = {\r\n\t  stickyEnabled: 'data-sticky-enabled',\r\n\t};\r\n  \r\n\twindow.theme.variables = {\r\n\t  productPageSticky: false,\r\n\t};\r\n  \r\n\tconst sections$6 = {};\r\n  \r\n\tclass ProductSticky {\r\n\t  constructor(section) {\r\n\t\tthis.container = section.container;\r\n\t\tthis.stickyEnabled = this.container.getAttribute(attributes$9.stickyEnabled) === 'true';\r\n\t\tthis.productInfo = this.container.querySelector(selectors$9.productInfo);\r\n\t\tthis.stickyScrollTop = 0;\r\n\t\tthis.scrollLastPosition = 0;\r\n\t\tthis.stickyDefaultTop = 0;\r\n\t\tthis.currentPoint = 0;\r\n\t\tthis.defaultTopBottomSpacings = 30;\r\n\t\tthis.scrollTop = window.scrollY;\r\n\t\tthis.scrollDirectionDown = true;\r\n\t\tthis.requestAnimationSticky = null;\r\n\t\tthis.stickyFormLoad = true;\r\n\t\tthis.stickyFormLastHeight = null;\r\n\t\tthis.onChangeCounter = 0;\r\n\t\tthis.scrollEvent = (e) => this.scrollEvents(e);\r\n\t\tthis.resizeEvent = (e) => this.resizeEvents(e);\r\n  \r\n\t\tthis.init();\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tif (this.stickyEnabled) {\r\n\t\t  this.stickyScrollCheck();\r\n  \r\n\t\t  document.addEventListener('theme:resize', this.resizeEvent);\r\n\t\t}\r\n  \r\n\t\tthis.initSticky();\r\n\t  }\r\n  \r\n\t  initSticky() {\r\n\t\tif (theme.variables.productPageSticky) {\r\n\t\t  this.requestAnimationSticky = requestAnimationFrame(() => this.calculateStickyPosition());\r\n  \r\n\t\t  this.productInfo.addEventListener('theme:form:sticky', (e) => {\r\n\t\t\tthis.removeAnimationFrame();\r\n  \r\n\t\t\tthis.requestAnimationSticky = requestAnimationFrame(() => this.calculateStickyPosition(e));\r\n\t\t  });\r\n  \r\n\t\t  document.addEventListener('theme:scroll', this.scrollEvent);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  scrollEvents(e) {\r\n\t\tif (e.detail !== null) {\r\n\t\t  this.scrollTop = e.detail.position;\r\n\t\t  this.scrollDirectionDown = e.detail.down;\r\n\t\t}\r\n  \r\n\t\tif (!this.requestAnimationSticky) {\r\n\t\t  this.requestAnimationSticky = requestAnimationFrame(() => this.calculateStickyPosition());\r\n\t\t}\r\n\t  }\r\n  \r\n\t  resizeEvents() {\r\n\t\tthis.stickyScrollCheck();\r\n  \r\n\t\tdocument.removeEventListener('theme:scroll', this.scrollEvent);\r\n  \r\n\t\tthis.initSticky();\r\n\t  }\r\n  \r\n\t  stickyScrollCheck() {\r\n\t\tconst windowWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;\r\n\t\tconst isDesktop = windowWidth >= window.theme.sizes.large;\r\n\t\tconst targetProductInfo = this.container.querySelector(selectors$9.productInfo);\r\n  \r\n\t\tif (!targetProductInfo) return;\r\n  \r\n\t\tif (isDesktop) {\r\n\t\t  const productInfo = this.container.querySelector(selectors$9.productInfo);\r\n\t\t  const slideshow = this.container.querySelector(selectors$9.slideshow);\r\n  \r\n\t\t  if (!productInfo || !slideshow) return;\r\n\t\t  const productCopyHeight = productInfo.offsetHeight;\r\n\t\t  const productImagesHeight = slideshow.offsetHeight;\r\n  \r\n\t\t  // Is the product form and description taller than window space\r\n\t\t  // Is also shorter than the window and images\r\n\t\t  if (productCopyHeight < productImagesHeight) {\r\n\t\t\ttheme.variables.productPageSticky = true;\r\n\t\t\ttargetProductInfo.classList.add(classes$8.sticky);\r\n\t\t  } else {\r\n\t\t\ttheme.variables.productPageSticky = false;\r\n\t\t\ttargetProductInfo.classList.remove(classes$8.sticky);\r\n\t\t  }\r\n\t\t} else {\r\n\t\t  theme.variables.productPageSticky = false;\r\n\t\t  targetProductInfo.classList.remove(classes$8.sticky);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  calculateStickyPosition(e = null) {\r\n\t\tconst eventExist = Boolean(e && e.detail);\r\n\t\tconst isAccordion = Boolean(eventExist && e.detail.element && e.detail.element === 'accordion');\r\n\t\tconst productInfoHeight = this.productInfo.offsetHeight;\r\n\t\tconst heightDifference = window.innerHeight - productInfoHeight - this.defaultTopBottomSpacings;\r\n\t\tconst scrollDifference = Math.abs(this.scrollTop - this.scrollLastPosition);\r\n  \r\n\t\tif (this.scrollDirectionDown) {\r\n\t\t  this.stickyScrollTop -= scrollDifference;\r\n\t\t} else {\r\n\t\t  this.stickyScrollTop += scrollDifference;\r\n\t\t}\r\n  \r\n\t\tif (this.stickyFormLoad) {\r\n\t\t  if (document.querySelector(selectors$9.headerSticky) && document.querySelector(selectors$9.headerHeight)) {\r\n\t\t\tthis.stickyDefaultTop = parseInt(document.querySelector(selectors$9.headerHeight).getBoundingClientRect().height);\r\n\t\t  } else {\r\n\t\t\tthis.stickyDefaultTop = this.defaultTopBottomSpacings;\r\n\t\t  }\r\n  \r\n\t\t  this.stickyScrollTop = this.stickyDefaultTop;\r\n\t\t}\r\n  \r\n\t\tthis.stickyScrollTop = Math.min(Math.max(this.stickyScrollTop, heightDifference), this.stickyDefaultTop);\r\n  \r\n\t\tconst differencePoint = this.stickyScrollTop - this.currentPoint;\r\n\t\tthis.currentPoint = this.stickyFormLoad ? this.stickyScrollTop : this.currentPoint + differencePoint * 0.5;\r\n  \r\n\t\tthis.productInfo.style.setProperty('--sticky-top', `${this.currentPoint}px`);\r\n  \r\n\t\tthis.scrollLastPosition = this.scrollTop;\r\n\t\tthis.stickyFormLoad = false;\r\n  \r\n\t\tif (\r\n\t\t  (isAccordion && this.onChangeCounter <= 10) ||\r\n\t\t  (isAccordion && this.stickyFormLastHeight !== productInfoHeight) ||\r\n\t\t  (this.stickyScrollTop !== this.currentPoint && this.requestAnimationSticky)\r\n\t\t) {\r\n\t\t  if (isAccordion) {\r\n\t\t\tthis.onChangeCounter += 1;\r\n\t\t  }\r\n  \r\n\t\t  if (isAccordion && this.stickyFormLastHeight !== productInfoHeight) {\r\n\t\t\tthis.onChangeCounter = 11;\r\n\t\t  }\r\n  \r\n\t\t  this.requestAnimationSticky = requestAnimationFrame(() => this.calculateStickyPosition(e));\r\n\t\t} else if (this.requestAnimationSticky) {\r\n\t\t  this.removeAnimationFrame();\r\n\t\t}\r\n  \r\n\t\tthis.stickyFormLastHeight = productInfoHeight;\r\n\t  }\r\n  \r\n\t  removeAnimationFrame() {\r\n\t\tif (this.requestAnimationSticky) {\r\n\t\t  cancelAnimationFrame(this.requestAnimationSticky);\r\n\t\t  this.requestAnimationSticky = null;\r\n\t\t  this.onChangeCounter = 0;\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onUnload() {\r\n\t\tif (this.stickyEnabled) {\r\n\t\t  document.removeEventListener('theme:resize', this.resizeEvent);\r\n\t\t}\r\n  \r\n\t\tif (theme.variables.productPageSticky) {\r\n\t\t  document.removeEventListener('theme:scroll', this.scrollEvent);\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tconst productStickySection = {\r\n\t  onLoad() {\r\n\t\tsections$6[this.id] = new ProductSticky(this);\r\n\t  },\r\n\t  onUnload() {\r\n\t\tsections$6[this.id].onUnload();\r\n\t  },\r\n\t};\r\n  \r\n\tconst selectors$8 = {\r\n\t  mediaContainer: '[data-product-single-media-group]',\r\n\t  productMediaSlider: '[data-product-single-media-slider]',\r\n\t  zoomWrapper: '[data-zoom-wrapper]',\r\n\t};\r\n  \r\n\tconst classes$7 = {\r\n\t  popupClass: 'pswp-zoom-gallery',\r\n\t  popupClassNoThumbs: 'pswp-zoom-gallery--single',\r\n\t  isMoving: 'is-moving',\r\n\t};\r\n  \r\n\tconst attributes$8 = {\r\n\t  dataImageWidth: 'data-image-width',\r\n\t  dataImageHeight: 'data-image-height',\r\n\t};\r\n  \r\n\tclass Zoom {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t\tthis.mediaContainer = this.container.querySelector(selectors$8.mediaContainer);\r\n\t\tthis.slider = this.container.querySelector(selectors$8.productMediaSlider);\r\n\t\tthis.zoomWrappers = this.container.querySelectorAll(selectors$8.zoomWrapper);\r\n\t\tthis.zoomEnable = this.mediaContainer.dataset.gallery === 'true';\r\n\t\tthis.a11y = a11y;\r\n  \r\n\t\tif (this.zoomEnable) {\r\n\t\t  this.init();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tif (this.zoomWrappers.length) {\r\n\t\t  this.zoomWrappers.forEach((element, i) => {\r\n\t\t\telement.addEventListener('click', (e) => {\r\n\t\t\t  e.preventDefault();\r\n  \r\n\t\t\t  const isMoving = this.slider && this.slider.classList.contains(classes$7.isMoving);\r\n  \r\n\t\t\t  if (!isMoving) {\r\n\t\t\t\tthis.a11y.state.trigger = element;\r\n\t\t\t\tthis.createZoom(i);\r\n\t\t\t  }\r\n\t\t\t});\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  createZoom(indexImage) {\r\n\t\tconst instance = this;\r\n\t\tlet items = [];\r\n\t\tlet counter = 0;\r\n  \r\n\t\tthis.zoomWrappers.forEach((elementImage) => {\r\n\t\t  const imgSrc = elementImage.getAttribute('href');\r\n\t\t  const imgWidth = parseInt(elementImage.getAttribute(attributes$8.dataImageWidth));\r\n\t\t  const imgHeight = parseInt(elementImage.getAttribute(attributes$8.dataImageHeight));\r\n  \r\n\t\t  items.push({\r\n\t\t\tsrc: imgSrc,\r\n\t\t\tw: imgWidth,\r\n\t\t\th: imgHeight,\r\n\t\t\tmsrc: imgSrc,\r\n\t\t  });\r\n  \r\n\t\t  counter += 1;\r\n\t\t  if (instance.zoomWrappers.length === counter) {\r\n\t\t\tlet popupClass = `${classes$7.popupClass}`;\r\n  \r\n\t\t\tif (counter === 1) {\r\n\t\t\t  popupClass = `${classes$7.popupClass} ${classes$7.popupClassNoThumbs}`;\r\n\t\t\t}\r\n\t\t\tconst options = {\r\n\t\t\t  barsSize: {top: 60, bottom: 60},\r\n\t\t\t  history: false,\r\n\t\t\t  focus: false,\r\n\t\t\t  index: indexImage,\r\n\t\t\t  mainClass: popupClass,\r\n\t\t\t  showHideOpacity: true,\r\n\t\t\t  showAnimationDuration: 250,\r\n\t\t\t  hideAnimationDuration: 250,\r\n\t\t\t  closeOnScroll: false,\r\n\t\t\t  closeOnVerticalDrag: false,\r\n\t\t\t  captionEl: false,\r\n\t\t\t  closeEl: true,\r\n\t\t\t  closeElClasses: ['caption-close'],\r\n\t\t\t  tapToClose: false,\r\n\t\t\t  clickToCloseNonZoomable: false,\r\n\t\t\t  maxSpreadZoom: 2,\r\n\t\t\t  loop: true,\r\n\t\t\t  spacing: 0,\r\n\t\t\t  allowPanToNext: true,\r\n\t\t\t  pinchToClose: false,\r\n\t\t\t};\r\n  \r\n\t\t\tnew LoadPhotoswipe(items, options);\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n\t}\r\n  \r\n\tconst selectors$7 = {\r\n\t  complementaryProducts: '[data-complementary-products]',\r\n\t  buttonQuickView: '[data-button-quick-view]',\r\n\t};\r\n  \r\n\tconst attributes$7 = {\r\n\t  url: 'data-url',\r\n\t};\r\n  \r\n\tclass ComplementaryProducts extends HTMLElement {\r\n\t  constructor() {\r\n\t\tsuper();\r\n\t  }\r\n  \r\n\t  connectedCallback() {\r\n\t\tconst handleIntersection = (entries, observer) => {\r\n\t\t  if (!entries[0].isIntersecting) return;\r\n\t\t  observer.unobserve(this);\r\n  \r\n\t\t  if (this.hasAttribute(attributes$7.url) && this.getAttribute(attributes$7.url) !== '') {\r\n\t\t\tfetch(this.getAttribute(attributes$7.url))\r\n\t\t\t  .then((response) => response.text())\r\n\t\t\t  .then((text) => {\r\n\t\t\t\tconst html = document.createElement('div');\r\n\t\t\t\thtml.innerHTML = text;\r\n\t\t\t\tconst recommendations = html.querySelector(selectors$7.complementaryProducts);\r\n  \r\n\t\t\t\tif (recommendations && recommendations.innerHTML.trim().length) {\r\n\t\t\t\t  this.innerHTML = recommendations.innerHTML;\r\n\t\t\t\t}\r\n  \r\n\t\t\t\tif (html.querySelector(selectors$7.buttonQuickView)) {\r\n\t\t\t\t  new QuickViewPopup(this);\r\n\t\t\t\t}\r\n\t\t\t  })\r\n\t\t\t  .catch((e) => {\r\n\t\t\t\tconsole.error(e);\r\n\t\t\t  });\r\n\t\t  }\r\n\t\t};\r\n  \r\n\t\tnew IntersectionObserver(handleIntersection.bind(this), {rootMargin: '0px 0px 400px 0px'}).observe(this);\r\n\t  }\r\n\t}\r\n  \r\n\tconst selectors$6 = {\r\n\t  option: '[data-option]',\r\n\t  popout: '[data-popout]',\r\n\t  productMediaSlider: '[data-product-single-media-slider]',\r\n\t  productMediaThumb: '[data-thumbnail-id]',\r\n\t  productMediaThumbs: '[data-product-single-media-thumbs]',\r\n\t  productMediaWrapper: '[data-product-single-media-wrapper]',\r\n\t  productModel: '[data-model]',\r\n\t  productSingleThumbnailLink: '.product-single__thumbnail-link',\r\n\t  deferredMedia: '[data-deferred-media]',\r\n\t  deferredMediaButton: '[data-deferred-media-button]',\r\n\t  modalScrollContainer: '[data-tabs-holder]',\r\n\t  tooltip: '[data-tooltip]',\r\n\t  productRating: '[data-product-rating]',\r\n\t  productReviews: '#shopify-product-reviews',\r\n\t  links: 'a, button',\r\n\t  upsellProduct: '[data-upsell-holder]',\r\n\t  upsellProductSlider: '[data-upsell-slider]',\r\n\t  featureSlider: '[data-slider]',\r\n\t};\r\n  \r\n\tconst classes$6 = {\r\n\t  featuredProduct: 'featured-product',\r\n\t  featuredProductOnboarding: 'featured-product--onboarding',\r\n\t  hasMediaActive: 'has-media-active',\r\n\t  isSelected: 'is-selected',\r\n\t  mediaHidden: 'media--hidden',\r\n\t  noOutline: 'no-outline',\r\n\t  hasPopup: 'has-popup',\r\n\t  isMoving: 'is-moving',\r\n\t};\r\n  \r\n\tconst attributes$6 = {\r\n\t  mediaId: 'data-media-id',\r\n\t  sectionId: 'data-section-id',\r\n\t  thumbId: 'data-thumbnail-id',\r\n\t  dataTallLayout: 'data-tall-layout',\r\n\t  loaded: 'loaded',\r\n\t  tabindex: 'tabindex',\r\n\t};\r\n  \r\n\tconst sections$5 = {};\r\n  \r\n\tclass Product {\r\n\t  constructor(section) {\r\n\t\tthis.container = section.container;\r\n\t\tthis.sectionId = this.container.getAttribute(attributes$6.sectionId);\r\n\t\tthis.tallLayout = this.container.getAttribute(attributes$6.dataTallLayout) === 'true';\r\n\t\tthis.featureSliders = this.container.querySelectorAll(selectors$6.featureSlider);\r\n\t\tthis.flkty = null;\r\n\t\tthis.flktyNav = null;\r\n\t\tthis.isFlickityDragging = false;\r\n\t\tthis.enableHistoryState = !this.container.classList.contains(classes$6.featuredProduct);\r\n\t\tthis.checkSliderOnResize = () => this.checkSlider();\r\n\t\tthis.flktyNavOnResize = () => this.resizeFlickityNav();\r\n  \r\n\t\tthis.scrollToReviews();\r\n\t\tthis.initUpsellSlider();\r\n\t\tthis.initFeatureSlider();\r\n  \r\n\t\tnew QuickViewPopup(this.container);\r\n  \r\n\t\t// Skip initialization of product form, slider and media functions if section has onboarding content only\r\n\t\tif (this.container.classList.contains(classes$6.featuredProductOnboarding)) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tnew Zoom(this.container);\r\n  \r\n\t\tthis.productSlider();\r\n\t\tthis.initMediaSwitch();\r\n\t\tthis.initProductVideo();\r\n\t\tthis.initProductModel();\r\n\t\tthis.initShopifyXrLaunch();\r\n\t  }\r\n  \r\n\t  productSlider() {\r\n\t\tthis.checkSlider();\r\n\t\tdocument.addEventListener('theme:resize:width', this.checkSliderOnResize);\r\n\t  }\r\n  \r\n\t  checkSlider() {\r\n\t\tif (!this.tallLayout || window.innerWidth < theme.sizes.large) {\r\n\t\t  this.initProductSlider();\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tthis.destroyProductSlider();\r\n\t  }\r\n  \r\n\t  resizeFlickityNav() {\r\n\t\tif (this.flktyNav !== null) {\r\n\t\t  this.flktyNav.resize();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /* Product Slider */\r\n\t  initProductSlider() {\r\n\t\tconst slider = this.container.querySelector(selectors$6.productMediaSlider);\r\n\t\tconst thumbs = this.container.querySelector(selectors$6.productMediaThumbs);\r\n\t\tconst media = this.container.querySelectorAll(selectors$6.productMediaWrapper);\r\n  \r\n\t\tif (media.length > 1) {\r\n\t\t  this.flkty = new Flickity(slider, {\r\n\t\t\twrapAround: true,\r\n\t\t\tpageDots: false,\r\n\t\t\tadaptiveHeight: true,\r\n\t\t\ton: {\r\n\t\t\t  ready: () => {\r\n\t\t\t\tslider.setAttribute(attributes$6.tabindex, '-1');\r\n  \r\n\t\t\t\tmedia.forEach((item) => {\r\n\t\t\t\t  if (!item.classList.contains(classes$6.isSelected)) {\r\n\t\t\t\t\tconst links = item.querySelectorAll(selectors$6.links);\r\n\t\t\t\t\tif (links.length) {\r\n\t\t\t\t\t  links.forEach((link) => {\r\n\t\t\t\t\t\tlink.setAttribute(attributes$6.tabindex, '-1');\r\n\t\t\t\t\t  });\r\n\t\t\t\t\t}\r\n\t\t\t\t  }\r\n\t\t\t\t});\r\n\t\t\t  },\r\n\t\t\t  dragStart: () => {\r\n\t\t\t\tslider.classList.add(classes$6.isMoving);\r\n\t\t\t  },\r\n\t\t\t  dragMove: () => {\r\n\t\t\t\t// Prevent lightbox trigger on dragMove\r\n\t\t\t\tthis.isFlickityDragging = true;\r\n\t\t\t  },\r\n\t\t\t  staticClick: () => {\r\n\t\t\t\tthis.isFlickityDragging = false;\r\n\t\t\t  },\r\n\t\t\t  settle: (index) => {\r\n\t\t\t\tconst currentSlide = this.flkty.selectedElement;\r\n\t\t\t\tconst mediaId = currentSlide.getAttribute(attributes$6.mediaId);\r\n  \r\n\t\t\t\tthis.flkty.cells.forEach((slide, i) => {\r\n\t\t\t\t  const links = slide.element.querySelectorAll(selectors$6.links);\r\n\t\t\t\t  if (links.length) {\r\n\t\t\t\t\tlinks.forEach((link) => {\r\n\t\t\t\t\t  link.setAttribute(attributes$6.tabindex, i === index ? '0' : '-1');\r\n\t\t\t\t\t});\r\n\t\t\t\t  }\r\n\t\t\t\t});\r\n\t\t\t\tthis.switchMedia(mediaId);\r\n\t\t\t\tslider.classList.remove(classes$6.isMoving);\r\n\t\t\t  },\r\n\t\t\t},\r\n\t\t  });\r\n  \r\n\t\t  // Toggle flickity draggable functionality based on media play/pause state\r\n\t\t  if (media.length) {\r\n\t\t\tmedia.forEach((el) => {\r\n\t\t\t  el.addEventListener('theme:media:play', () => {\r\n\t\t\t\tthis.flkty.options.draggable = false;\r\n\t\t\t\tthis.flkty.updateDraggable();\r\n\t\t\t\tel.closest(selectors$6.productMediaSlider).classList.add(classes$6.hasMediaActive);\r\n\t\t\t  });\r\n  \r\n\t\t\t  el.addEventListener('theme:media:pause', () => {\r\n\t\t\t\tthis.flkty.options.draggable = true;\r\n\t\t\t\tthis.flkty.updateDraggable();\r\n\t\t\t\tel.closest(selectors$6.productMediaSlider).classList.remove(classes$6.hasMediaActive);\r\n\t\t\t  });\r\n\t\t\t});\r\n\t\t  }\r\n  \r\n\t\t  // iOS smooth scrolling fix\r\n\t\t  flickitySmoothScrolling(slider);\r\n  \r\n\t\t  if (thumbs !== null) {\r\n\t\t\tthis.flktyNav = new Flickity(thumbs, {\r\n\t\t\t  asNavFor: slider,\r\n\t\t\t  contain: true,\r\n\t\t\t  pageDots: false,\r\n\t\t\t  prevNextButtons: false,\r\n\t\t\t  resize: true,\r\n\t\t\t  on: {\r\n\t\t\t\tready: () => {\r\n\t\t\t\t  thumbs.setAttribute(attributes$6.tabindex, '-1');\r\n\t\t\t\t},\r\n\t\t\t  },\r\n\t\t\t});\r\n  \r\n\t\t\tif (this.flktyNav !== null) {\r\n\t\t\t  document.addEventListener('theme:resize:width', this.flktyNavOnResize);\r\n\t\t\t}\r\n  \r\n\t\t\t// iOS smooth scrolling fix\r\n\t\t\tflickitySmoothScrolling(thumbs);\r\n  \r\n\t\t\t// Disable link click\r\n\t\t\tconst thumbLinks = this.container.querySelectorAll(selectors$6.productSingleThumbnailLink);\r\n\t\t\tif (thumbLinks.length) {\r\n\t\t\t  thumbLinks.forEach((el) => {\r\n\t\t\t\tel.addEventListener('click', (e) => {\r\n\t\t\t\t  e.preventDefault();\r\n\t\t\t\t});\r\n\t\t\t  });\r\n\t\t\t}\r\n\t\t  }\r\n\t\t}\r\n\t  }\r\n  \r\n\t  destroyProductSlider() {\r\n\t\tif (this.flkty !== null) {\r\n\t\t  this.flkty.destroy();\r\n\t\t  this.flktyNav.destroy();\r\n  \r\n\t\t  this.flkty = null;\r\n\t\t  this.flktyNav = null;\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /* Upsell Products Slider */\r\n\t  initUpsellSlider() {\r\n\t\tconst slider = this.container.querySelector(selectors$6.upsellProductSlider);\r\n\t\tconst items = this.container.querySelectorAll(selectors$6.upsellProduct);\r\n  \r\n\t\tif (items.length > 1) {\r\n\t\t  const flktyUpsell = new Flickity(slider, {\r\n\t\t\twrapAround: true,\r\n\t\t\tpageDots: true,\r\n\t\t\tadaptiveHeight: true,\r\n\t\t\tprevNextButtons: false,\r\n\t\t  });\r\n  \r\n\t\t  flktyUpsell.on('change', (index) => {\r\n\t\t\tflktyUpsell.cells.forEach((slide, i) => {\r\n\t\t\t  const links = slide.element.querySelectorAll(selectors$6.links);\r\n\t\t\t  if (links.length) {\r\n\t\t\t\tlinks.forEach((link) => {\r\n\t\t\t\t  link.setAttribute(attributes$6.tabindex, i === index ? '0' : '-1');\r\n\t\t\t\t});\r\n\t\t\t  }\r\n\t\t\t});\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /* Feature Block Slider */\r\n\t  initFeatureSlider() {\r\n\t\tthis.featureSliders.forEach((featureSliders) => {\r\n\t\t  const featureSlideIndex = Array.from(featureSliders.children);\r\n  \r\n\t\t  if (featureSlideIndex.length > 1) {\r\n\t\t\tthis.flktyFeature = new Flickity(featureSliders, {\r\n\t\t\t  wrapAround: true,\r\n\t\t\t  pageDots: true,\r\n\t\t\t  adaptiveHeight: true,\r\n\t\t\t  prevNextButtons: false,\r\n\t\t\t});\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  handleMediaFocus(event) {\r\n\t\t// Do nothing unless ENTER or TAB key are pressed\r\n\t\tif (event.code !== theme.keyboardKeys.ENTER && event.code !== theme.keyboardKeys.TAB) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tconst mediaId = event.currentTarget.getAttribute(attributes$6.thumbId);\r\n\t\tconst activeSlide = this.container.querySelector(`[${attributes$6.mediaId}=\"${mediaId}\"]`);\r\n\t\tconst slideIndex = parseInt([...activeSlide.parentNode.children].indexOf(activeSlide));\r\n\t\tconst slider = this.container.querySelector(selectors$6.productMediaSlider);\r\n\t\tconst sliderNav = this.container.querySelector(selectors$6.productMediaThumbs);\r\n\t\tconst flkty = Flickity.data(slider) || null;\r\n\t\tconst flktyNav = Flickity.data(sliderNav) || null;\r\n  \r\n\t\t// Go to the related slide media\r\n\t\tif (flkty && flkty.isActive && slideIndex > -1 && (event.code === theme.keyboardKeys.ENTER || event.code === theme.keyboardKeys.NUMPADENTER)) {\r\n\t\t  flkty.select(slideIndex);\r\n\t\t}\r\n  \r\n\t\t// Move thumbs to the selected one\r\n\t\tif (flktyNav && flktyNav.isActive && slideIndex > -1) {\r\n\t\t  flktyNav.select(slideIndex);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  switchMedia(mediaId) {\r\n\t\tconst mediaItems = document.querySelectorAll(`${selectors$6.productMediaWrapper}`);\r\n\t\tconst selectedMedia = this.container.querySelector(`${selectors$6.productMediaWrapper}[${attributes$6.mediaId}=\"${mediaId}\"]`);\r\n\t\tconst isFocusEnabled = !document.body.classList.contains(classes$6.noOutline);\r\n  \r\n\t\t// Pause other media\r\n\t\tif (mediaItems.length) {\r\n\t\t  mediaItems.forEach((media) => {\r\n\t\t\tmedia.dispatchEvent(new CustomEvent('theme:media:hidden'), {bubbles: true});\r\n\t\t\tmedia.classList.add(classes$6.mediaHidden);\r\n\t\t  });\r\n\t\t}\r\n  \r\n\t\tif (isFocusEnabled) {\r\n\t\t  selectedMedia.focus();\r\n\t\t}\r\n  \r\n\t\tselectedMedia.closest(selectors$6.productMediaSlider).classList.remove(classes$6.hasMediaActive);\r\n\t\tselectedMedia.classList.remove(classes$6.mediaHidden);\r\n\t\tselectedMedia.dispatchEvent(new CustomEvent('theme:media:visible'), {bubbles: true});\r\n  \r\n\t\t// If media is not loaded, trigger poster button click to load it\r\n\t\tconst deferredMedia = selectedMedia.querySelector(selectors$6.deferredMedia);\r\n\t\tif (deferredMedia && deferredMedia.getAttribute(attributes$6.loaded) !== 'true') {\r\n\t\t  selectedMedia.querySelector(selectors$6.deferredMediaButton).dispatchEvent(new Event('click'));\r\n\t\t}\r\n\t  }\r\n  \r\n\t  initMediaSwitch() {\r\n\t\tconst productThumbImages = this.container.querySelectorAll(selectors$6.productMediaThumb);\r\n\t\tif (productThumbImages.length) {\r\n\t\t  productThumbImages.forEach((el) => {\r\n\t\t\tel.addEventListener('keyup', this.handleMediaFocus.bind(this));\r\n\t\t\tel.addEventListener('click', (e) => {\r\n\t\t\t  e.preventDefault();\r\n\t\t\t});\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  initProductVideo() {\r\n\t\tthis.videos = new ProductVideo(this.container);\r\n\t  }\r\n  \r\n\t  initProductModel() {\r\n\t\tconst modelItems = this.container.querySelectorAll(selectors$6.productModel);\r\n\t\tif (modelItems.length) {\r\n\t\t  modelItems.forEach((element) => {\r\n\t\t\ttheme.ProductModel.init(element, this.sectionId);\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  initShopifyXrLaunch() {\r\n\t\tdocument.addEventListener('shopify_xr_launch', () => {\r\n\t\t  const currentMedia = this.container.querySelector(`${selectors$6.productModel}:not(.${classes$6.mediaHidden})`);\r\n\t\t  currentMedia.dispatchEvent(new CustomEvent('xrLaunch'));\r\n\t\t});\r\n\t  }\r\n  \r\n\t  onUnload() {\r\n\t\tif (this.flktyNav !== null) {\r\n\t\t  document.removeEventListener('theme:resize:width', this.flktyNavOnResize);\r\n\t\t}\r\n  \r\n\t\tdocument.removeEventListener('theme:resize:width', this.checkSliderOnResize);\r\n\t  }\r\n  \r\n\t  scrollToReviews() {\r\n\t\tconst productRating = this.container.querySelector(selectors$6.productRating);\r\n\t\tconst events = ['click', 'keydown'];\r\n  \r\n\t\tif (!productRating) {\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tevents.forEach((eventName) => {\r\n\t\t  productRating.addEventListener(eventName, (event) => {\r\n\t\t\tif ((event.code !== theme.keyboardKeys.ENTER && event.code !== theme.keyboardKeys.NUMPADENTER) || event.type != 'click') {\r\n\t\t\t  const reviewsContainer = document.querySelector(selectors$6.productReviews);\r\n  \r\n\t\t\t  if (!reviewsContainer) {\r\n\t\t\t\treturn;\r\n\t\t\t  }\r\n  \r\n\t\t\t  reviewsContainer.scrollIntoView({behavior: 'smooth'});\r\n\t\t\t}\r\n\t\t  });\r\n\t\t});\r\n\t  }\r\n  \r\n\t  onBlockSelect(event) {\r\n\t\tconst flkty = Flickity.data(event.target.closest(selectors$6.featureSlider));\r\n\t\tconst index = parseInt([...event.target.parentNode.children].indexOf(event.target));\r\n  \r\n\t\tif (flkty) {\r\n\t\t  flkty.select(index);\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tconst productSection = {\r\n\t  onLoad() {\r\n\t\tsections$5[this.id] = new Product(this);\r\n\t  },\r\n\t  onUnload: function () {\r\n\t\tsections$5[this.id].onUnload();\r\n\t  },\r\n\t  onBlockSelect(event) {\r\n\t\tsections$5[this.id].onBlockSelect(event);\r\n\t  },\r\n\t};\r\n  \r\n\tregister('product-template', [productFormSection, productSection, swatchSection, shareButton, collapsible, tooltip, popoutSection, drawer, productStickySection]);\r\n\tregister('featured-product', [productFormSection, productSection, swatchSection, shareButton, collapsible, tooltip, popoutSection, drawer, productStickySection]);\r\n  \r\n\tif (!customElements.get('complementary-products')) {\r\n\t  customElements.define('complementary-products', ComplementaryProducts);\r\n\t}\r\n  \r\n\tconst classes$5 = {\r\n\t  isDisabled: 'is-disabled',\r\n\t};\r\n  \r\n\tconst attributes$5 = {\r\n\t  circleTextParallax: 'data-circle-text-parallax',\r\n\t};\r\n  \r\n\tclass CircleText {\r\n\t  constructor(el) {\r\n\t\tthis.circleText = el;\r\n\t\tthis.rotateDegree = 70;\r\n\t\tthis.adjustRotateDegree = this.rotateDegree / 2; // We use this to keep the image upright when scrolling and it gets to the middle of the page\r\n  \r\n\t\tthis.scrollEvent = () => this.updateParallax();\r\n\t\tthis.init();\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tif (this.circleText.hasAttribute(attributes$5.circleTextParallax)) {\r\n\t\t  document.addEventListener('theme:scroll', this.scrollEvent);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  updateParallax() {\r\n\t\tif (this.circleText.classList.contains(classes$5.isDisabled)) return;\r\n  \r\n\t\tconst windowHeight = Math.round(window.innerHeight);\r\n\t\tconst scrollTop = Math.round(window.scrollY);\r\n\t\tconst scrollBottom = scrollTop + windowHeight;\r\n\t\tconst elementOffsetTopPoint = Math.round(this.circleText.getBoundingClientRect().top + scrollTop);\r\n\t\tconst elementHeight = this.circleText.offsetHeight;\r\n\t\tconst elementOffsetBottomPoint = elementOffsetTopPoint + elementHeight;\r\n\t\tconst isBottomOfElementPassed = elementOffsetBottomPoint < scrollTop;\r\n\t\tconst isTopOfElementReached = elementOffsetTopPoint < scrollBottom;\r\n\t\tconst isInView = isTopOfElementReached && !isBottomOfElementPassed;\r\n  \r\n\t\tif (isInView) {\r\n\t\t  const scrollProgress = scrollBottom - elementOffsetTopPoint - elementHeight / 2;\r\n\t\t  const percentage = (scrollProgress * 100) / windowHeight;\r\n\t\t  let angle = ((this.rotateDegree * percentage) / 100) * -1; // The -1 negates the value to have it rotate counterclockwise\r\n  \r\n\t\t  if (percentage > 0) {\r\n\t\t\tthis.circleText.style.transform = `rotate(${this.adjustRotateDegree + angle}deg)`;\r\n\t\t  }\r\n\t\t}\r\n\t  }\r\n  \r\n\t  unload() {\r\n\t\tdocument.removeEventListener('theme:scroll', this.scrollEvent);\r\n\t  }\r\n\t}\r\n  \r\n\tconst attributes$4 = {\r\n\t  href: 'href',\r\n\t  mediaId: 'data-media-id',\r\n\t  deferredMediaLoaded: 'data-deferred-media-loaded',\r\n\t};\r\n  \r\n\tconst selectors$5 = {\r\n\t  deferredMedia: '[data-deferred-media]',\r\n\t  deferredMediaButton: '[data-deferred-media-button]',\r\n\t  productContentWrapper: '[data-product-content-wrapper]',\r\n\t  productMediaWrapper: '[data-product-single-media-wrapper]',\r\n\t  productModel: '[data-model]',\r\n\t  productLink: '[data-product-link]',\r\n\t  productSingleMediaImage: '[data-product-single-media-image]',\r\n\t  sliderContents: '[data-slider-contents]',\r\n\t  sliderImages: '[data-slider-images]',\r\n\t  tabButton: '[data-tab-button]',\r\n\t  tabItem: '[data-tab-item]',\r\n\t  circleText: '[data-circle-text]',\r\n\t};\r\n  \r\n\tconst classes$4 = {\r\n\t  aosAnimate: 'aos-animate',\r\n\t  tabButtonActive: 'products-list__nav__button--active',\r\n\t  tabItemActive: 'products-list__item--active',\r\n\t  mediaHidden: 'media--hidden',\r\n\t  isDisabled: 'is-disabled',\r\n\t};\r\n  \r\n\tconst sections$4 = {};\r\n  \r\n\tclass ProductsList {\r\n\t  constructor(section) {\r\n\t\tthis.container = section.container;\r\n\t\tthis.sectionId = this.container.dataset.sectionId;\r\n\t\tthis.tabButtons = this.container.querySelectorAll(selectors$5.tabButton);\r\n\t\tthis.tabItems = this.container.querySelectorAll(selectors$5.tabItem);\r\n\t\tthis.slidersImages = this.container.querySelectorAll(selectors$5.sliderImages);\r\n\t\tthis.slidersContents = this.container.querySelectorAll(selectors$5.sliderContents);\r\n\t\tthis.videos = [];\r\n\t\tthis.flktyImages = [];\r\n\t\tthis.flktyContent = [];\r\n\t\tthis.sliderResizeEvent = () => this.resizeSlider();\r\n  \r\n\t\tthis.initButtons();\r\n\t\tthis.initSliders();\r\n\t\tthis.initProductVideos();\r\n\t\tthis.initProductModel();\r\n\t\tthis.initShopifyXrLaunch();\r\n\t\tthis.initCircleText();\r\n\t\tthis.listen();\r\n\t  }\r\n  \r\n\t  listen() {\r\n\t\tif (this.slidersImages.length > 0 || this.slidersContents.length > 0) {\r\n\t\t  document.addEventListener('theme:resize', this.sliderResizeEvent);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  resizeSlider() {\r\n\t\tif (this.flktyImages.length > 0) {\r\n\t\t  requestAnimationFrame(() => {\r\n\t\t\tthis.flktyImages.forEach((flktyImages) => flktyImages.resize());\r\n\t\t  });\r\n\t\t}\r\n  \r\n\t\tif (this.flktyContent.length > 0) {\r\n\t\t  requestAnimationFrame(() => {\r\n\t\t\tthis.flktyContent.forEach((flktyContent) => flktyContent.resize());\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  initButtons() {\r\n\t\tif (this.tabButtons.length) {\r\n\t\t  this.tabButtons.forEach((tabButton) => {\r\n\t\t\ttabButton.addEventListener('click', (e) => {\r\n\t\t\t  if (tabButton.classList.contains(classes$4.tabButtonActive)) {\r\n\t\t\t\treturn;\r\n\t\t\t  }\r\n  \r\n\t\t\t  const currentTabAnchor = tabButton.getAttribute(attributes$4.href);\r\n\t\t\t  const currentTab = this.container.querySelector(currentTabAnchor);\r\n\t\t\t  const currentMedia = currentTab.querySelector(selectors$5.productMediaWrapper);\r\n\t\t\t  const mediaId = currentMedia ? currentMedia.dataset.mediaId : null;\r\n\t\t\t  const currentCircleText = currentTab.querySelector(selectors$5.circleText);\r\n  \r\n\t\t\t  this.tabButtons.forEach((button) => {\r\n\t\t\t\tbutton.classList.remove(classes$4.tabButtonActive);\r\n\t\t\t  });\r\n\t\t\t  this.tabItems.forEach((item) => {\r\n\t\t\t\tconst circleText = item.querySelector(selectors$5.circleText);\r\n\t\t\t\titem.classList.remove(classes$4.tabItemActive);\r\n\t\t\t\tcircleText?.classList.add(classes$4.isDisabled);\r\n  \r\n\t\t\t\tif (theme.settings.animations) {\r\n\t\t\t\t  item.querySelectorAll(`.${classes$4.aosAnimate}`).forEach((element) => {\r\n\t\t\t\t\telement.classList.remove(classes$4.aosAnimate);\r\n\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t  element.classList.add(classes$4.aosAnimate);\r\n\t\t\t\t\t});\r\n\t\t\t\t  });\r\n\t\t\t\t}\r\n\t\t\t  });\r\n  \r\n\t\t\t  tabButton.classList.add(classes$4.tabButtonActive);\r\n\t\t\t  currentTab.classList.add(classes$4.tabItemActive);\r\n  \r\n\t\t\t  document.dispatchEvent(new Event('theme:resize')); // Trigger theme:resize event to refresh the slider height\r\n  \r\n\t\t\t  if (currentCircleText) {\r\n\t\t\t\tcurrentCircleText.classList.remove(classes$4.isDisabled);\r\n\t\t\t\tdocument.dispatchEvent(new Event('theme:scroll')); // Trigger theme:scroll event to refresh the circle-text values\r\n\t\t\t  }\r\n  \r\n\t\t\t  this.handleProductVideos(currentTab, mediaId);\r\n  \r\n\t\t\t  e.preventDefault();\r\n\t\t\t});\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  initSliders() {\r\n\t\tthis.slidersImages.forEach((sliderImages, idx) => {\r\n\t\t  const contentsElement = sliderImages.closest(selectors$5.tabItem).querySelector(selectors$5.sliderContents);\r\n  \r\n\t\t  const flktyImages = new Flickity(sliderImages, {\r\n\t\t\tfade: true,\r\n\t\t\tpageDots: false,\r\n\t\t\tprevNextButtons: true,\r\n\t\t\twrapAround: true,\r\n\t\t\tadaptiveHeight: true,\r\n\t\t\tasNavFor: contentsElement,\r\n\t\t\ton: {\r\n\t\t\t  change: (index) => {\r\n\t\t\t\tif (this.flktyContent.length > 0) {\r\n\t\t\t\t  this.flktyContent[idx].select(index);\r\n\t\t\t\t}\r\n\t\t\t  },\r\n\t\t\t},\r\n\t\t  });\r\n  \r\n\t\t  flktyImages.on('settle', (index) => {\r\n\t\t\tconst elements = sliderImages.querySelectorAll(selectors$5.productMediaWrapper);\r\n  \r\n\t\t\tfor (let i = 0; i < elements.length; i++) {\r\n\t\t\t  if (i === index) {\r\n\t\t\t\telements[i].querySelector(selectors$5.productSingleMediaImage).removeAttribute('tabindex');\r\n\t\t\t  } else {\r\n\t\t\t\telements[i].querySelector(selectors$5.productSingleMediaImage).setAttribute('tabindex', '-1');\r\n\t\t\t  }\r\n\t\t\t}\r\n\t\t  });\r\n  \r\n\t\t  this.flktyImages.push(flktyImages);\r\n\t\t});\r\n  \r\n\t\tthis.slidersContents.forEach((sliderContent) => {\r\n\t\t  const flktyContent = new Flickity(sliderContent, {\r\n\t\t\tfade: true,\r\n\t\t\tpageDots: false,\r\n\t\t\tprevNextButtons: false,\r\n\t\t\twrapAround: true,\r\n\t\t\tadaptiveHeight: true,\r\n\t\t  });\r\n  \r\n\t\t  flktyContent.on('settle', (index) => {\r\n\t\t\tconst elements = sliderContent.querySelectorAll(selectors$5.productContentWrapper);\r\n  \r\n\t\t\tfor (let i = 0; i < elements.length; i++) {\r\n\t\t\t  if (i === index) {\r\n\t\t\t\telements[i].querySelectorAll(selectors$5.productLink).forEach((element) => {\r\n\t\t\t\t  element.removeAttribute('tabindex');\r\n\t\t\t\t});\r\n\t\t\t  } else {\r\n\t\t\t\telements[i].querySelectorAll(selectors$5.productLink).forEach((element) => {\r\n\t\t\t\t  element.setAttribute('tabindex', '-1');\r\n\t\t\t\t});\r\n\t\t\t  }\r\n\t\t\t}\r\n\t\t  });\r\n  \r\n\t\t  this.flktyContent.push(flktyContent);\r\n\t\t});\r\n\t  }\r\n  \r\n\t  initProductVideos() {\r\n\t\tthis.tabItems.forEach((item) => {\r\n\t\t  if (item.classList.contains(classes$4.tabItemActive)) {\r\n\t\t\tthis.handleProductVideos(item);\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  loadVideos(container, mediaId = null) {\r\n\t\tconst videoObserver = new IntersectionObserver(\r\n\t\t  (entries, observer) => {\r\n\t\t\tentries.forEach((entry) => {\r\n\t\t\t  if (entry.isIntersecting) {\r\n\t\t\t\tconst productVideo = new ProductVideo(container);\r\n  \r\n\t\t\t\tthis.videos.push(productVideo);\r\n\t\t\t\tcontainer.setAttribute(attributes$4.deferredMediaLoaded, '');\r\n\t\t\t\tthis.playToggle(mediaId);\r\n  \r\n\t\t\t\tobserver.unobserve(entry.target);\r\n\t\t\t  }\r\n\t\t\t});\r\n\t\t  },\r\n\t\t  {\r\n\t\t\troot: null,\r\n\t\t\trootMargin: '300px',\r\n\t\t\tthreshold: [0, 0.1, 0.25, 0.5, 0.75, 1],\r\n\t\t  }\r\n\t\t);\r\n  \r\n\t\tvideoObserver.observe(container);\r\n\t  }\r\n  \r\n\t  handleProductVideos(container, mediaId = null) {\r\n\t\tif (!container.hasAttribute(attributes$4.deferredMediaLoaded)) {\r\n\t\t  this.loadVideos(container, mediaId);\r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tthis.playToggle(mediaId);\r\n\t  }\r\n  \r\n\t  playToggle(mediaId) {\r\n\t\tthis.videos.forEach((element) => {\r\n\t\t  if (typeof element.pauseContainerMedia === 'function' && mediaId) {\r\n\t\t\telement.pauseContainerMedia(mediaId, this.container);\r\n\t\t\tthis.switchMedia(mediaId);\r\n\t\t  }\r\n  \r\n\t\t  if (!mediaId && Object.keys(element.players).length === 0) {\r\n\t\t\tthis.pauseContainerMedia(this.container);\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  switchMedia(mediaId) {\r\n\t\tconst selectedMedia = this.container.querySelector(`${selectors$5.productMediaWrapper}[${attributes$4.mediaId}=\"${mediaId}\"]`);\r\n\t\tconst isFocusEnabled = !document.body.classList.contains(classes$4.noOutline);\r\n  \r\n\t\tif (isFocusEnabled) {\r\n\t\t  selectedMedia.focus();\r\n\t\t}\r\n  \r\n\t\tselectedMedia.classList.remove(classes$4.mediaHidden);\r\n\t\tselectedMedia.dispatchEvent(new CustomEvent('theme:media:visible'), {bubbles: true});\r\n\t  }\r\n  \r\n\t  pauseContainerMedia(container) {\r\n\t\tconst mediaItems = container.querySelectorAll(selectors$5.productMediaWrapper);\r\n  \r\n\t\tif (mediaItems.length === 0) return;\r\n  \r\n\t\tmediaItems.forEach((media) => {\r\n\t\t  media.dispatchEvent(new CustomEvent('theme:media:hidden'), {bubbles: true});\r\n\t\t  media.classList.add(classes$4.mediaHidden);\r\n\t\t});\r\n\t  }\r\n  \r\n\t  initProductModel() {\r\n\t\tconst modelItems = this.container.querySelectorAll(selectors$5.productModel);\r\n\t\tif (modelItems.length) {\r\n\t\t  modelItems.forEach((element) => {\r\n\t\t\ttheme.ProductModel.init(element, this.sectionId);\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  initShopifyXrLaunch() {\r\n\t\tdocument.addEventListener('shopify_xr_launch', () => {\r\n\t\t  const currentMedia = this.container.querySelector(`${selectors$5.productModel}:not(.${classes$4.mediaHidden})`);\r\n\t\t  currentMedia.dispatchEvent(new CustomEvent('xrLaunch'));\r\n\t\t});\r\n\t  }\r\n  \r\n\t  initCircleText() {\r\n\t\tconst elements = this.container.querySelectorAll(selectors$5.circleText);\r\n  \r\n\t\telements.forEach((circleText) => {\r\n\t\t  new CircleText(circleText);\r\n\t\t});\r\n\t  }\r\n  \r\n\t  onBlockSelect(evt) {\r\n\t\t// Show selected tab\r\n\t\tevt.target.dispatchEvent(new Event('click'));\r\n\t  }\r\n  \r\n\t  onUnload() {\r\n\t\tif (this.slidersImages.length > 0 || this.slidersContents.length > 0) {\r\n\t\t  document.removeEventListener('theme:resize', this.sliderResizeEvent);\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tconst productsListSection = {\r\n\t  onLoad() {\r\n\t\tsections$4[this.id] = new ProductsList(this);\r\n\t  },\r\n\t  onUnload() {\r\n\t\tsections$4[this.id].onUnload();\r\n\t  },\r\n\t  onBlockSelect(e) {\r\n\t\tsections$4[this.id].onBlockSelect(e);\r\n\t  },\r\n\t};\r\n  \r\n\tregister('products-list', productsListSection);\r\n  \r\n\tconst selectors$4 = {\r\n\t  product: '[data-product-block]',\r\n\t  relatedProducts: '[data-related-products]',\r\n\t};\r\n  \r\n\tconst attributes$3 = {\r\n\t  sectionId: 'data-section-id',\r\n\t  productId: 'data-product-id',\r\n\t  limit: 'data-limit',\r\n\t};\r\n  \r\n\tconst sections$3 = {};\r\n  \r\n\tclass RelatedProducts {\r\n\t  constructor(container) {\r\n\t\tthis.container = container;\r\n\t\tthis.relatedProducts = this.container.querySelector(selectors$4.relatedProducts);\r\n  \r\n\t\tthis.init();\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\tconst sectionId = this.container.getAttribute(attributes$3.sectionId);\r\n\t\tconst productId = this.container.getAttribute(attributes$3.productId);\r\n\t\tconst limit = this.container.getAttribute(attributes$3.limit);\r\n\t\tconst requestUrl = `${theme.routes.product_recommendations_url}?section_id=${sectionId}&limit=${limit}&product_id=${productId}`;\r\n  \r\n\t\tfetch(requestUrl)\r\n\t\t  .then((response) => {\r\n\t\t\treturn response.text();\r\n\t\t  })\r\n\t\t  .then((data) => {\r\n\t\t\tconst createdElement = document.createElement('div');\r\n\t\t\tcreatedElement.innerHTML = data;\r\n\t\t\tconst inner = createdElement.querySelector(selectors$4.relatedProducts);\r\n  \r\n\t\t\tif (inner.querySelectorAll(selectors$4.product).length) {\r\n\t\t\t  this.relatedProducts.innerHTML = inner.innerHTML;\r\n  \r\n\t\t\t  this.productGrid = new ProductGrid(this.container);\r\n\t\t\t  this.gridSlider = new GridSlider(this.container);\r\n\t\t\t}\r\n\t\t  });\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Event callback for Theme Editor `section:deselect` event\r\n\t   */\r\n\t  onDeselect() {\r\n\t\tif (this.productGrid) {\r\n\t\t  this.productGrid.onDeselect();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Event callback for Theme Editor `section:unload` event\r\n\t   */\r\n\t  onUnload() {\r\n\t\tif (this.productGrid) {\r\n\t\t  this.productGrid.onUnload();\r\n\t\t}\r\n  \r\n\t\tif (this.gridSlider) {\r\n\t\t  this.gridSlider.onUnload();\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tconst RelatedProductsSection = {\r\n\t  onLoad() {\r\n\t\tsections$3[this.id] = new RelatedProducts(this.container);\r\n\t  },\r\n\t  onDeselect() {\r\n\t\tsections$3[this.id].onDeselect();\r\n\t  },\r\n\t  onUnload() {\r\n\t\tsections$3[this.id].onUnload();\r\n\t  },\r\n\t};\r\n  \r\n\tregister('related-products', RelatedProductsSection);\r\n  \r\n\tconst sections$2 = {};\r\n  \r\n\tconst selectors$3 = {\r\n\t  slider: '[data-slider]',\r\n\t  sliderItem: '[data-item]',\r\n\t  buttonProductsShow: '[data-button-show]',\r\n\t  buttonProductsHide: '[data-button-hide]',\r\n\t  itemProducts: '[data-item-products]',\r\n\t  itemProductSlider: '[data-item-products-slider]',\r\n\t  itemProduct: '[data-item-product]',\r\n\t  links: 'a, button',\r\n\t};\r\n  \r\n\tconst classes$3 = {\r\n\t  itemActive: 'blog-item--active',\r\n\t  itemProductsVisible: 'blog-item__products--visible',\r\n\t  featuredBlogSlider: 'shoppable-blog__slider',\r\n\t  flickityEnabled: 'flickity-enabled',\r\n\t  isSelected: 'is-selected',\r\n\t};\r\n  \r\n\tconst attributes$2 = {\r\n\t  slider: 'data-slider',\r\n\t  slidePosition: 'data-slide-position',\r\n\t  sectionId: 'data-section-id',\r\n\t  tabIndex: 'tabindex',\r\n\t};\r\n  \r\n\tclass ShoppableBlog {\r\n\t  constructor(section) {\r\n\t\tthis.container = section.container;\r\n\t\tthis.flkty = null;\r\n\t\tthis.slider = this.container.querySelector(selectors$3.slider);\r\n\t\tthis.checkSlidesSizeOnResize = () => this.checkSlidesSize();\r\n\t\tthis.isFullWidth = this.container.hasAttribute(attributes$2.fullWidth);\r\n\t\tthis.gutter = 0;\r\n\t\tthis.a11y = a11y;\r\n\t\tthis.clickOutsideItemEvent = (e) => {\r\n\t\t  const clickOutsideSliderItem = !(e.target.matches(selectors$3.sliderItem) || e.target.closest(selectors$3.sliderItem));\r\n  \r\n\t\t  if (clickOutsideSliderItem) {\r\n\t\t\tconst sliderItem = this.container.querySelectorAll(selectors$3.sliderItem);\r\n\t\t\tif (sliderItem.length) {\r\n\t\t\t  sliderItem.forEach((item) => {\r\n\t\t\t\tconst itemProducts = item.querySelector(selectors$3.itemProducts);\r\n\t\t\t\tif (itemProducts) {\r\n\t\t\t\t  itemProducts.classList.remove(classes$3.itemProductsVisible);\r\n  \r\n\t\t\t\t  this.changeTabIndex(itemProducts);\r\n\t\t\t\t}\r\n\t\t\t\titem.classList.remove(classes$3.itemActive);\r\n\t\t\t  });\r\n\t\t\t}\r\n\t\t  }\r\n\t\t};\r\n  \r\n\t\tthis.bindButtons();\r\n\t\tthis.listen();\r\n\t  }\r\n  \r\n\t  initSlider() {\r\n\t\tthis.flkty = new Flickity(this.slider, {\r\n\t\t  prevNextButtons: true,\r\n\t\t  pageDots: false,\r\n\t\t  cellAlign: 'left',\r\n\t\t  wrapAround: false,\r\n\t\t  groupCells: true,\r\n\t\t  contain: true,\r\n\t\t  on: {\r\n\t\t\tready: () => {\r\n\t\t\t  this.handleFocus();\r\n\t\t\t},\r\n\t\t  },\r\n\t\t});\r\n  \r\n\t\tthis.flkty.on('change', () => {\r\n\t\t  const slides = this.container.querySelectorAll(selectors$3.sliderItem);\r\n  \r\n\t\t  this.handleFocus();\r\n  \r\n\t\t  if (slides.length) {\r\n\t\t\tslides.forEach((el) => {\r\n\t\t\t  const itemProducts = el.querySelector(selectors$3.itemProducts);\r\n  \r\n\t\t\t  el.classList.remove(classes$3.itemActive);\r\n  \r\n\t\t\t  if (itemProducts) {\r\n\t\t\t\tel.querySelector(selectors$3.itemProducts).classList.remove(classes$3.itemProductsVisible);\r\n\t\t\t  }\r\n\t\t\t});\r\n\t\t  }\r\n  \r\n\t\t  if (this.flkty && !this.flkty.options.draggable) {\r\n\t\t\tthis.flkty.options.draggable = true;\r\n\t\t\tthis.flkty.updateDraggable();\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  destroySlider() {\r\n\t\tif (this.flkty !== null) {\r\n\t\t  this.flkty.destroy();\r\n\t\t  this.flkty = null;\r\n\t\t}\r\n\t  }\r\n  \r\n\t  checkSlidesSize() {\r\n\t\tconst sliderItemStyle = this.container.querySelector(selectors$3.sliderItem).currentStyle || window.getComputedStyle(this.container.querySelector(selectors$3.sliderItem));\r\n\t\tthis.gutter = parseInt(sliderItemStyle.marginRight);\r\n\t\tconst containerWidth = this.slider.offsetWidth + this.gutter;\r\n\t\tconst itemsWidth = this.getItemsWidth();\r\n\t\tconst itemsOverflowViewport = containerWidth < itemsWidth;\r\n  \r\n\t\tif (window.innerWidth >= theme.sizes.small && itemsOverflowViewport) {\r\n\t\t  this.initSlider();\r\n\t\t} else {\r\n\t\t  this.destroySlider();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  getItemsWidth() {\r\n\t\tlet itemsWidth = 0;\r\n\t\tconst slides = this.slider.querySelectorAll(selectors$3.sliderItem);\r\n\t\tif (slides.length) {\r\n\t\t  slides.forEach((item) => {\r\n\t\t\titemsWidth += item.offsetWidth + this.gutter;\r\n\t\t  });\r\n\t\t}\r\n  \r\n\t\treturn itemsWidth;\r\n\t  }\r\n  \r\n\t  bindButtons() {\r\n\t\tconst itemProductSlider = this.container.querySelectorAll(selectors$3.itemProductSlider);\r\n\t\tconst buttonProductsShow = this.container.querySelectorAll(selectors$3.buttonProductsShow);\r\n\t\tconst buttonProductsHide = this.container.querySelectorAll(selectors$3.buttonProductsHide);\r\n  \r\n\t\tif (buttonProductsShow.length) {\r\n\t\t  buttonProductsShow.forEach((button) => {\r\n\t\t\tbutton.addEventListener('click', (e) => {\r\n\t\t\t  e.preventDefault();\r\n  \r\n\t\t\t  this.container.querySelectorAll(selectors$3.sliderItem).forEach((item) => {\r\n\t\t\t\tconst itemProducts = item.querySelector(selectors$3.itemProducts);\r\n\t\t\t\titem.classList.remove(classes$3.itemActive);\r\n  \r\n\t\t\t\tif (itemProducts) {\r\n\t\t\t\t  itemProducts.classList.remove(classes$3.itemProductsVisible);\r\n  \r\n\t\t\t\t  this.changeTabIndex(itemProducts);\r\n\t\t\t\t}\r\n\t\t\t  });\r\n  \r\n\t\t\t  const item = button.closest(selectors$3.sliderItem);\r\n\t\t\t  const itemProducts = item.querySelector(selectors$3.itemProducts);\r\n\t\t\t  item.classList.add(classes$3.itemActive);\r\n  \r\n\t\t\t  if (itemProducts) {\r\n\t\t\t\titemProducts.classList.add(classes$3.itemProductsVisible);\r\n\t\t\t\tthis.changeTabIndex(itemProducts, 'enable');\r\n  \r\n\t\t\t\tconst itemProductsSlider = itemProducts.querySelector(selectors$3.itemProductSlider);\r\n\t\t\t\tconst allSlides = itemProductsSlider.querySelectorAll(selectors$3.itemProduct);\r\n\t\t\t\tconst sliderActive = itemProductsSlider.classList.contains(classes$3.flickityEnabled);\r\n  \r\n\t\t\t\tif (sliderActive) {\r\n\t\t\t\t  const currentSlide = itemProductsSlider.querySelector(`.${classes$3.isSelected}`);\r\n\t\t\t\t  const currentSlideIndex = currentSlide.getAttribute(attributes$2.slidePosition);\r\n  \r\n\t\t\t\t  allSlides.forEach((slide, i) => {\r\n\t\t\t\t\tslide.setAttribute(attributes$2.tabIndex, i === currentSlideIndex ? '0' : '-1');\r\n\t\t\t\t  });\r\n\t\t\t\t}\r\n\t\t\t  }\r\n  \r\n\t\t\t  if (this.flkty !== null) {\r\n\t\t\t\tthis.flkty.options.draggable = false;\r\n\t\t\t\tthis.flkty.updateDraggable();\r\n\t\t\t  }\r\n  \r\n\t\t\t  this.a11y.state.trigger = button;\r\n\t\t\t});\r\n\t\t  });\r\n\t\t}\r\n  \r\n\t\tif (buttonProductsHide.length) {\r\n\t\t  buttonProductsHide.forEach((button) => {\r\n\t\t\tbutton.addEventListener('click', (e) => {\r\n\t\t\t  e.preventDefault();\r\n\t\t\t  const item = button.closest(selectors$3.sliderItem);\r\n\t\t\t  const itemProducts = item.querySelector(selectors$3.itemProducts);\r\n\t\t\t  item.classList.remove(classes$3.itemActive);\r\n  \r\n\t\t\t  if (itemProducts) {\r\n\t\t\t\titemProducts.classList.remove(classes$3.itemProductsVisible);\r\n  \r\n\t\t\t\tthis.changeTabIndex(itemProducts);\r\n\t\t\t  }\r\n  \r\n\t\t\t  if (this.flkty !== null) {\r\n\t\t\t\tthis.flkty.options.draggable = true;\r\n\t\t\t\tthis.flkty.updateDraggable();\r\n\t\t\t  }\r\n  \r\n\t\t\t  this.a11y.state.trigger.focus();\r\n\t\t\t});\r\n\t\t  });\r\n\t\t}\r\n  \r\n\t\tif (itemProductSlider.length) {\r\n\t\t  itemProductSlider.forEach((slider) => {\r\n\t\t\tconst countSlides = slider.querySelectorAll(selectors$3.itemProduct).length;\r\n  \r\n\t\t\tif (countSlides > 1) {\r\n\t\t\t  const flktyProducts = new Flickity(slider, {\r\n\t\t\t\tprevNextButtons: true,\r\n\t\t\t\tcontain: true,\r\n\t\t\t\tpageDots: false,\r\n\t\t\t\twrapAround: true,\r\n\t\t\t\ton: {\r\n\t\t\t\t  change: (index) => {\r\n\t\t\t\t\tflktyProducts.cells.forEach((slide, i) => {\r\n\t\t\t\t\t  slide.element.querySelectorAll(selectors$3.links).forEach((link) => {\r\n\t\t\t\t\t\tlink.setAttribute(attributes$2.tabIndex, i === index ? '0' : '-1');\r\n\t\t\t\t\t  });\r\n\t\t\t\t\t});\r\n\t\t\t\t  },\r\n\t\t\t\t},\r\n\t\t\t  });\r\n\t\t\t}\r\n\t\t  });\r\n\t\t}\r\n  \r\n\t\tthis.slider.addEventListener('keyup', (event) => {\r\n\t\t  if (event.code === theme.keyboardKeys.ESCAPE) {\r\n\t\t\tconst sliderItem = event.target.hasAttribute(attributes$2.slider)\r\n\t\t\t  ? event.target.querySelectorAll(selectors$3.sliderItem)\r\n\t\t\t  : event.target.closest(selectors$3.slider).querySelectorAll(selectors$3.sliderItem);\r\n  \r\n\t\t\tif (sliderItem.length) {\r\n\t\t\t  sliderItem.forEach((item) => {\r\n\t\t\t\tconst itemProducts = item.querySelector(selectors$3.itemProducts);\r\n\t\t\t\titem.classList.remove(classes$3.itemActive);\r\n\t\t\t\tif (itemProducts) {\r\n\t\t\t\t  itemProducts.classList.remove(classes$3.itemProductsVisible);\r\n  \r\n\t\t\t\t  this.changeTabIndex(itemProducts);\r\n\t\t\t\t}\r\n\t\t\t  });\r\n  \r\n\t\t\t  if (this.flkty) {\r\n\t\t\t\tthis.flkty.options.draggable = true;\r\n\t\t\t\tthis.flkty.updateDraggable();\r\n\t\t\t  }\r\n\t\t\t}\r\n  \r\n\t\t\tthis.a11y.state.trigger.focus();\r\n\t\t  }\r\n\t\t});\r\n\t  }\r\n  \r\n\t  handleFocus() {\r\n\t\tconst sliderItems = this.container.querySelectorAll(selectors$3.sliderItem);\r\n  \r\n\t\tif (sliderItems.length) {\r\n\t\t  sliderItems.forEach((item) => {\r\n\t\t\tconst selected = item.classList.contains(classes$3.isSelected);\r\n\t\t\tconst itemProducts = item.querySelector(selectors$3.itemProducts);\r\n  \r\n\t\t\tif (!selected) {\r\n\t\t\t  this.changeTabIndex(item);\r\n  \r\n\t\t\t  if (itemProducts) {\r\n\t\t\t\titemProducts.classList.remove(classes$3.itemProductsVisible);\r\n\t\t\t  }\r\n\t\t\t} else {\r\n\t\t\t  this.changeTabIndex(item, 'enable');\r\n  \r\n\t\t\t  if (itemProducts) {\r\n\t\t\t\tthis.changeTabIndex(itemProducts);\r\n\t\t\t  }\r\n\t\t\t}\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  listen() {\r\n\t\tif (this.slider) {\r\n\t\t  this.checkSlidesSize();\r\n\t\t  document.addEventListener('theme:resize:width', this.checkSlidesSizeOnResize);\r\n\t\t}\r\n  \r\n\t\tdocument.addEventListener('mousedown', this.clickOutsideItemEvent);\r\n\t  }\r\n  \r\n\t  changeTabIndex(items, state = '') {\r\n\t\tconst tabIndex = state === 'enable' ? '0' : '-1';\r\n\t\titems.querySelectorAll(selectors$3.links).forEach((link) => {\r\n\t\t  link.setAttribute(attributes$2.tabIndex, tabIndex);\r\n\t\t});\r\n\t  }\r\n  \r\n\t  onBlockSelect(evt) {\r\n\t\tif (this.flkty !== null) {\r\n\t\t  const index = parseInt([...evt.target.parentNode.children].indexOf(evt.target));\r\n\t\t  const slidesPerPage = parseInt(this.flkty.slides[0].cells.length);\r\n\t\t  const groupIndex = Math.floor(index / slidesPerPage);\r\n  \r\n\t\t  this.flkty.select(groupIndex);\r\n\t\t} else {\r\n\t\t  const sliderStyle = this.slider.currentStyle || window.getComputedStyle(this.slider);\r\n\t\t  const sliderPadding = parseInt(sliderStyle.paddingLeft);\r\n\t\t  const blockPositionLeft = evt.target.offsetLeft - sliderPadding;\r\n  \r\n\t\t  // Native scroll to item\r\n\t\t  this.slider.scrollTo({\r\n\t\t\ttop: 0,\r\n\t\t\tleft: blockPositionLeft,\r\n\t\t\tbehavior: 'smooth',\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onUnload() {\r\n\t\tdocument.removeEventListener('theme:resize:width', this.checkSlidesSizeOnResize);\r\n\t\tdocument.removeEventListener('mousedown', this.clickOutsideItemEvent);\r\n\t  }\r\n\t}\r\n  \r\n\tconst shoppableBlogSection = {\r\n\t  onLoad() {\r\n\t\tsections$2[this.id] = new ShoppableBlog(this);\r\n\t  },\r\n\t  onUnload(e) {\r\n\t\tsections$2[this.id].onUnload(e);\r\n\t  },\r\n\t  onBlockSelect(e) {\r\n\t\tsections$2[this.id].onBlockSelect(e);\r\n\t  },\r\n\t};\r\n  \r\n\tregister('shoppable-blog', shoppableBlogSection);\r\n  \r\n\tconst selectors$2 = {\r\n\t  arrowScrollDown: '[data-scroll-down]',\r\n\t  header: '[data-site-header]',\r\n\t  item: '[data-slide]',\r\n\t  links: 'a, button',\r\n\t  slider: '[data-slider]',\r\n\t};\r\n  \r\n\tconst attributes$1 = {\r\n\t  style: 'data-style',\r\n\t  currentStyle: 'data-current-style',\r\n\t  tabIndex: 'tabindex',\r\n\t  slidePosition: 'data-slide-position',\r\n\t};\r\n  \r\n\tconst classes$2 = {\r\n\t  headerFixed: 'site-header--fixed',\r\n\t};\r\n  \r\n\tconst sections$1 = {};\r\n  \r\n\tclass Slider {\r\n\t  constructor(section) {\r\n\t\tthis.container = section.container;\r\n\t\tthis.header = document.querySelector(selectors$2.header);\r\n\t\tthis.flkty = null;\r\n\t\tthis.resizeEvent = () => {\r\n\t\t  this.flkty.resize();\r\n\t\t};\r\n  \r\n\t\tthis.initSlider();\r\n\t\tthis.bindScrollButton();\r\n\t  }\r\n  \r\n\t  initSlider() {\r\n\t\tconst slidesCount = this.container.querySelectorAll(selectors$2.item).length;\r\n\t\tconst duration = parseInt(this.container.dataset.duration);\r\n\t\tconst pageDots = this.container.dataset.pageDots === 'true' && slidesCount > 1;\r\n\t\tconst prevNextButtons = this.container.dataset.navArrows === 'true' && slidesCount > 1;\r\n\t\tlet autoplay = this.container.dataset.autoplay === 'true';\r\n  \r\n\t\tif (autoplay) {\r\n\t\t  autoplay = duration;\r\n\t\t}\r\n  \r\n\t\tif (slidesCount > 1) {\r\n\t\t  this.flkty = new Flickity(this.container, {\r\n\t\t\tfade: true,\r\n\t\t\tcellSelector: selectors$2.item,\r\n\t\t\tautoPlay: autoplay,\r\n\t\t\twrapAround: true,\r\n\t\t\tadaptiveHeight: true,\r\n\t\t\tsetGallerySize: true,\r\n\t\t\timagesLoaded: true,\r\n\t\t\tpageDots: pageDots,\r\n\t\t\tprevNextButtons: prevNextButtons,\r\n\t\t\ton: {\r\n\t\t\t  ready: () => {\r\n\t\t\t\tconst currentStyle = this.container.querySelector(`${selectors$2.item}[${attributes$1.slidePosition}=\"1\"]`).getAttribute(attributes$1.style);\r\n\t\t\t\tthis.container.setAttribute(attributes$1.currentStyle, currentStyle);\r\n\t\t\t\trequestAnimationFrame(this.resizeEvent);\r\n\t\t\t\tdocument.addEventListener('theme:vars', this.resizeEvent); // Update slideshow height after height vars init\r\n\t\t\t  },\r\n\t\t\t  change: (index) => {\r\n\t\t\t\tconst currentSlide = this.flkty.selectedElement;\r\n\t\t\t\tconst currentStyle = currentSlide.getAttribute(attributes$1.style);\r\n  \r\n\t\t\t\tthis.container.setAttribute(attributes$1.currentStyle, currentStyle);\r\n  \r\n\t\t\t\tthis.flkty.cells.forEach((slide, i) => {\r\n\t\t\t\t  slide.element.querySelectorAll(selectors$2.links).forEach((link) => {\r\n\t\t\t\t\tlink.setAttribute(attributes$1.tabIndex, i === index ? '0' : '-1');\r\n\t\t\t\t  });\r\n\t\t\t\t});\r\n\t\t\t  },\r\n\t\t\t},\r\n\t\t  });\r\n  \r\n\t\t  // iOS smooth scrolling fix\r\n\t\t  flickitySmoothScrolling(this.container);\r\n\t\t} else if (slidesCount === 1) {\r\n\t\t  const currentStyle = this.container.querySelector(selectors$2.item).getAttribute(attributes$1.style);\r\n\t\t  this.container.setAttribute(attributes$1.currentStyle, currentStyle);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  // Scroll down function\r\n\t  bindScrollButton() {\r\n\t\tconst arrowDown = this.container.querySelector(selectors$2.arrowScrollDown);\r\n  \r\n\t\tif (arrowDown) {\r\n\t\t  arrowDown.addEventListener('click', (e) => {\r\n\t\t\te.preventDefault();\r\n  \r\n\t\t\tconst headerHeight = this.header.classList.contains(classes$2.headerFixed) ? 60 : 0;\r\n\t\t\tconst scrollToPosition = parseInt(Math.ceil(this.container.offsetTop + this.container.offsetHeight - headerHeight));\r\n  \r\n\t\t\twindow.scrollTo({\r\n\t\t\t  top: scrollToPosition,\r\n\t\t\t  left: 0,\r\n\t\t\t  behavior: 'smooth',\r\n\t\t\t});\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onBlockSelect(evt) {\r\n\t\tconst index = parseInt([...evt.target.parentNode.children].indexOf(evt.target));\r\n  \r\n\t\tif (this.flkty !== null) {\r\n\t\t  this.flkty.select(index);\r\n\t\t  this.flkty.pausePlayer();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onBlockDeselect(evt) {\r\n\t\tconst autoplay = evt.target.closest(selectors$2.slider).dataset.autoplay === 'true';\r\n\t\tif (autoplay && this.flkty !== null) {\r\n\t\t  this.flkty.playPlayer();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onReorder() {\r\n\t\tif (this.flkty !== null) {\r\n\t\t  this.flkty.resize();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onUnload() {\r\n\t\tif (this.flkty !== null) {\r\n\t\t  document.removeEventListener('theme:vars', this.resizeEvent);\r\n\t\t  this.flkty.destroy();\r\n\t\t  this.flkty = null;\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tconst slider = {\r\n\t  onLoad() {\r\n\t\tsections$1[this.id] = new Slider(this);\r\n\t  },\r\n\t  onReorder(e) {\r\n\t\tsections$1[this.id].onReorder(e);\r\n\t  },\r\n\t  onUnload(e) {\r\n\t\tsections$1[this.id].onUnload(e);\r\n\t  },\r\n\t  onBlockSelect(e) {\r\n\t\tsections$1[this.id].onBlockSelect(e);\r\n\t  },\r\n\t  onBlockDeselect(e) {\r\n\t\tsections$1[this.id].onBlockDeselect(e);\r\n\t  },\r\n\t};\r\n  \r\n\tregister('slider', [slider, videoPlay, zoomAnimation]);\r\n  \r\n\tregister('subcollections', gridSlider);\r\n  \r\n\tregister('tab-collections', [productGrid, gridSlider, tabs]);\r\n  \r\n\tconst sections = {};\r\n  \r\n\tconst selectors$1 = {\r\n\t  slider: '[data-slider]',\r\n\t  item: '[data-item]',\r\n\t};\r\n  \r\n\tconst classes$1 = {\r\n\t  flickityEnabled: 'flickity-enabled',\r\n\t};\r\n  \r\n\tconst attributes = {\r\n\t  sectionId: 'data-section-id',\r\n\t};\r\n  \r\n\tclass Testimonials {\r\n\t  constructor(section) {\r\n\t\tthis.container = section.container;\r\n\t\tthis.sectionId = this.container.getAttribute(attributes.sectionId);\r\n\t\tthis.slider = this.container.querySelector(selectors$1.slider);\r\n\t\tthis.sliderResizeEvent = () => this.initSlider();\r\n\t\tthis.flkty = null;\r\n\t\tthis.initSlider();\r\n  \r\n\t\tdocument.addEventListener('theme:resize:width', this.sliderResizeEvent);\r\n\t  }\r\n  \r\n\t  initSlider() {\r\n\t\tconst slidesCount = this.slider.querySelectorAll(selectors$1.item).length;\r\n\t\tlet flickityEnabled = this.slider.classList.contains(classes$1.flickityEnabled);\r\n  \r\n\t\t// Destroy slider if there are 3 slides on desktop or 2 on tablet\r\n\t\t// Use native scrolling on mobile\r\n\t\tif ((slidesCount == 2 && window.innerWidth >= theme.sizes.small) || slidesCount == 1 || window.innerWidth < theme.sizes.small) {\r\n\t\t  if (flickityEnabled) {\r\n\t\t\tthis.flkty.destroy();\r\n\t\t  }\r\n  \r\n\t\t  return;\r\n\t\t}\r\n  \r\n\t\tthis.flkty = new Flickity(this.slider, {\r\n\t\t  cellSelector: selectors$1.item,\r\n\t\t  prevNextButtons: true,\r\n\t\t  pageDots: false,\r\n\t\t  groupCells: true,\r\n\t\t  cellAlign: 'left',\r\n\t\t  contain: true,\r\n\t\t  adaptiveHeight: false,\r\n\t\t});\r\n  \r\n\t\tthis.flkty.resize();\r\n\t\tconst isLargerThanVw = this.flkty.slideableWidth > this.flkty.size.width;\r\n\t\t// Destroy slider if slidable container is smaller than the slider's container width\r\n\t\tif (!isLargerThanVw) {\r\n\t\t  this.flkty.destroy();\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onBlockSelect(evt) {\r\n\t\tif (this.flkty !== null) {\r\n\t\t  const index = parseInt([...evt.target.parentNode.children].indexOf(evt.target));\r\n\t\t  const slidesPerPage = parseInt(this.flkty.slides[0].cells.length);\r\n\t\t  const groupIndex = Math.floor(index / slidesPerPage);\r\n  \r\n\t\t  this.flkty.select(groupIndex);\r\n\t\t} else {\r\n\t\t  const sliderStyle = this.slider.currentStyle || window.getComputedStyle(this.slider);\r\n\t\t  const sliderPadding = parseInt(sliderStyle.paddingLeft);\r\n\t\t  const blockPositionLeft = evt.target.offsetLeft - sliderPadding;\r\n  \r\n\t\t  // Native scroll to item\r\n\t\t  this.slider.scrollTo({\r\n\t\t\ttop: 0,\r\n\t\t\tleft: blockPositionLeft,\r\n\t\t\tbehavior: 'smooth',\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  onUnload() {\r\n\t\tdocument.removeEventListener('theme:resize:width', this.sliderResizeEvent);\r\n\t  }\r\n\t}\r\n  \r\n\tconst TestimonialsSection = {\r\n\t  onLoad() {\r\n\t\tsections[this.id] = new Testimonials(this);\r\n\t  },\r\n\t  onUnload(e) {\r\n\t\tsections[this.id].onUnload(e);\r\n\t  },\r\n\t  onBlockSelect(e) {\r\n\t\tsections[this.id].onBlockSelect(e);\r\n\t  },\r\n\t};\r\n  \r\n\tregister('testimonials', TestimonialsSection);\r\n  \r\n\tconst classes = {\r\n\t  noOutline: 'no-outline',\r\n\t};\r\n  \r\n\tconst selectors = {\r\n\t  inPageLink: '[data-skip-content]',\r\n\t  linkesWithOnlyHash: 'a[href=\"#\"]',\r\n\t};\r\n  \r\n\t//\u7CFB\u5217\u9875\u5206\u7C7B\uFF0C classify\u6A21\u677F\r\n\tclass CollectionGrid extends HTMLElement {\r\n\t  constructor() {\r\n\t\tsuper();\r\n\t\tthis.abortController = new AbortController();\r\n\t\tthis.parameter = '';\r\n\t\tthis.sort = '';\r\n\t\tthis.collectionHandle = this.getAttribute('data-handle');\r\n\t\tvar that = this;\r\n\t\tthis.facets = {};\r\n\t\tvar url = `${usf.settings.searchSvcUrl}search?q=&apiKey=${usf.settings.siteId}&country=US&locale=en&getProductDescription=0&collection=${this.collectionHandle}&showFacets=1&skip=0&take=1`;\r\n\t\twindow.fetch(url).then((response) => { return response.json(); }).catch((e) => {\r\n\t\t  console.error(e);\r\n\t\t}).then((res) => {\r\n\t\t  res.data && res.data.facets && res.data.facets.forEach((facet) => {\r\n\t\t\tthat.facets[facet.facetName] = facet.id;\r\n\t\t  });\r\n\t\t});\r\n\t  }\r\n  \r\n\t  connectedCallback() {\r\n\t\tthis.parent = this.parentNode;\r\n\t\tthis.loadMode = this.parent && this.parent.querySelector('.usf-sr-paging');\r\n\t\tthis.numTip = this.loadMode && this.loadMode.querySelector('.usf-title');\r\n\t\tthis.progress = this.loadMode && this.loadMode.querySelector('.usf-progress div'); //\u8FDB\u5EA6\u6761\r\n\t\tthis.loadBtn = this.loadMode && this.loadMode.querySelector('.usf-load-more'); //\u52A0\u8F7D\u66F4\u591A\u6309\u94AE\r\n\t\tvar that = this;\r\n\t\tthis.productLimit = Number(this.getAttribute('data-product-limit'));  //\u4EA7\u54C1\u5C55\u793A\u4E2A\u6570\r\n  \r\n\t\tthis.loadLimit = Number(this.getAttribute('data-load-limit'));  //\u4E00\u6B21\u52A0\u8F7D\u4EA7\u54C1\u4E2A\u6570\r\n\t\tthis.loadBtn && this.loadBtn.addEventListener('click', this.loadMore.bind(that)); //\u52A0\u8F7D\u66F4\u591A\u70B9\u51FB\u4E8B\u4EF6\r\n\t  }\r\n  \r\n  \r\n\t  loadMore() {\r\n\t\tlet showN = Number(this.loadBtn.getAttribute('data-show-num')) + Number(this.loadLimit);\r\n\t\tlet totalN = this.loadBtn.getAttribute('data-total-num') - 0;\r\n\t\tlet matchItems = this.querySelectorAll('.match-hidden');\r\n  \r\n\t\tfor (let i = 0; i < matchItems.length; i++) {\r\n\t\t  (i < this.loadLimit) && matchItems[i].classList.remove('match-hidden');\r\n\t\t}\r\n  \r\n\t\tif (showN >= totalN) {\r\n\t\t  this.loadBtn.style.display = 'none';\r\n\t\t  this.numTip.innerText = \"You've viewed \" + totalN + \" of \" + totalN + \" products\";\r\n\t\t  this.progress.style.width = '100%';\r\n\t\t} else {\r\n\t\t  this.loadBtn.style.display = 'block';\r\n\t\t  this.numTip.innerText = \"You've viewed \" + showN + \" of \" + totalN + \" products\";\r\n\t\t  this.progress.style.width = (showN / totalN * 100) + '%';\r\n\t\t}\r\n  \r\n\t\tthis.loadBtn.setAttribute('data-show-num', showN);\r\n\t\tthis.loadBtn.setAttribute('data-total-num', totalN);\r\n  \r\n\t  }\r\n  \r\n\t  getFacetFilters(t) {\r\n\t\tfor (var e, r = {}, n = 0; n < t.length; n++) {\r\n\t\t  var i = t[n],\r\n\t\t\ts = i[0];\r\n\t\t  if (s.startsWith(\"uff_\")) {\r\n\t\t\tvar a = \"uff_\".length,\r\n  \r\n\t\t\t  o = s.indexOf(\"_\", a);\r\n\t\t\t// u = s.substring(a, o);\r\n\t\t\t// u = parseInt(u, 36);\r\n  \r\n\t\t\tvar l = s.substr(o + 1),\r\n\t\t\t  u = this.facets[l],\r\n\t\t\t  c = i[1];\r\n\t\t\tArray.isArray(c) || (c = [c]),\r\n\t\t\t  u && (r[u] = [l, c]),\r\n\t\t\t  (e = !0);\r\n\t\t  }\r\n\t\t}\r\n\t\treturn e ? r : null;\r\n\t  }\r\n  \r\n\t  //usf\u811A\u672C\uFF0C\u9009\u4E2D/\u53D6\u6D88\u8FC7\u6EE4\u9009\u9879\u65F6\uFF0C\u89E6\u53D1\u8BE5\u65B9\u6CD5\r\n\t  searchItems() {\r\n\t\tvar t = new usf.URLSearchParams(location.search);\r\n\t\tvar parameter = JSON.stringify(this.getFacetFilters(t.entries));\r\n\t\tvar sort = usf.search.sortBy,\r\n\t\t  strSort = '';\r\n\t\tif (this.parameter == parameter && this.sort == sort) return;\r\n\t\tthis.parameter = parameter;\r\n\t\tthis.sort = sort;\r\n\t\tif (this.sort && this.sort != 'r') strSort = '&sort=' + this.sort;\r\n\t\tthis.abortController.abort();\r\n\t\tthis.abortController = new AbortController();\r\n\t\tvar url = `${usf.settings.searchSvcUrl}search?q=&apiKey=${usf.settings.siteId}&country=US&locale=en&getProductDescription=0&collection=${this.collectionHandle}&skip=0${strSort}`;\r\n  \r\n\t\tif (parameter != 'null') {\r\n\t\t  url = `${usf.settings.searchSvcUrl}search?q=&apiKey=${usf.settings.siteId}&country=US&locale=en&getProductDescription=0&collection=${this.collectionHandle}&facetFilters=${parameter}&skip=0${strSort}`;\r\n\t\t}\r\n\t\tthis.classList.add('is-loading');\r\n\t\twindow.fetch(url, { single: this.abortController.signal }).then((response) => { return response.json(); }).catch((e) => {\r\n\t\t  console.error(e);\r\n\t\t}).then((res) => {\r\n\t\t  var productItem = this.querySelectorAll('.product-grid-item'),\r\n\t\t\tarr_handle = [],\r\n\t\t\tindex = 0,\r\n\t\t\tnoResultBox;\r\n\t\t  if (this.querySelector('.no-results')) {\r\n\t\t\tnoResultBox = this.querySelector('.no-results')\r\n\t\t\tnoResultBox.style.display = 'none';\r\n\t\t  } else {\r\n\t\t\tvar noResultBox = document.createElement('div');\r\n\t\t\tnoResultBox.classList.add('no-results');\r\n\t\t\tnoResultBox.innerHTML = `<p><strong>No result</strong></p>`;\r\n\t\t\tthis.appendChild(noResultBox);\r\n\t\t\tnoResultBox.style.display = 'none';\r\n\t\t  }\r\n  \r\n\t\t  res.data && res.data.items && res.data.items.forEach((product) => {\r\n\t\t\tarr_handle.push(product.urlName);\r\n\t\t  });\r\n  \r\n\t\t  let len = this.productLimit < arr_handle.length ? this.productLimit : arr_handle.length;\r\n\t\t  for (let i = 0; i < productItem.length; i++) {\r\n\t\t\tlet handle = productItem[i].getAttribute('data-handle');\r\n\t\t\tif (arr_handle.indexOf(handle) != -1) {\r\n\t\t\t  index++;\r\n\t\t\t  productItem[i].style.display = 'block';\r\n\t\t\t  if (len < index && index > this.productLimit) productItem[i].classList.add('match-hidden');\r\n\t\t\t} else {\r\n\t\t\t  productItem[i].style.display = 'none';\r\n\t\t\t  productItem[i].classList.remove('match-hidden');\r\n\t\t\t}\r\n\t\t  }\r\n  \r\n\t\t  if (this.productLimit >= index) {\r\n\t\t\tthis.loadBtn && (this.loadBtn.style.display = 'none');\r\n\t\t\tthis.numTip.innerText = \"You've viewed \" + index + \" of \" + index + \" products\";\r\n\t\t\tthis.progress.style.width = '100%';\r\n\t\t  } else {\r\n\t\t\tthis.loadBtn.style.display = 'block';\r\n\t\t\tthis.numTip.innerText = \"You've viewed \" + this.productLimit + \" of \" + index + \" products\";\r\n\t\t\tthis.progress.style.width = (this.productLimit / index * 100) + '%';\r\n\t\t  }\r\n\t\t  this.loadBtn && (this.loadBtn.setAttribute('data-show-num', len));\r\n\t\t  this.loadBtn && (this.loadBtn.setAttribute('data-total-num', index));\r\n\t\t  if (index == 0) {\r\n\t\t\tnoResultBox.style.display = 'block';\r\n\t\t\tthis.loadMode.style.display = 'none';\r\n\t\t  } else {\r\n\t\t\tnoResultBox.style.display = 'none';\r\n\t\t\tthis.loadMode.style.display = 'block';\r\n\t\t  }\r\n\t\t  this.classList.remove('is-loading');\r\n\t\t})\r\n  \r\n\t  }\r\n\t}\r\n  \r\n\t// \u7CFB\u5217\u9875\u5206\u7C7B\u5BFC\u822A\r\n\tclass ClassifyNav extends HTMLElement{\r\n\t  constructor(){\r\n\t\tsuper();\r\n\t\t\r\n\t  }\r\n  \r\n\t  connectedCallback(){\r\n\t\tvar that = this;\r\n\t\tthis.nav = this.querySelector('.ql-classifynav-top');\r\n\t\t\r\n\t\t// \u6DF1\u62F7\u8D1D\r\n\t\tthis.cloneNav = this.nav.cloneNode(true);\r\n\t\tthis.cloneNav.classList.add('ql-sticky-classifynav-top');\r\n\t\tthis.cloneNav.style.display = 'none';\r\n  \r\n\t\t// frag\r\n\t\tthis.frag = true;\r\n  \r\n\t\t//\u3010\u53EF\u6362\u3011#main\u5143\u7D20\r\n\t\tlet offsetTop = document.querySelector('#MainContent .collection-section').offsetTop + this.offsetTop;\r\n\t\t//\u3010\u53EF\u6362\u3011product-list \u53F3\u4FA7\u641C\u7D22\u7ED3\u679C\u663E\u793A\u7236\u5143\u7D20 \r\n\t\tthis.allCollectionsBox = document.querySelectorAll('#MainContent .collection-items .collection__products .featured-collection');\r\n\t\tthis.cOffsetTop = [];  //\u6BCF\u4E2A\u7CFB\u5217\u9875\u8DDD\u79BB\u9876\u90E8\u7684\u8DDD\u79BB\r\n\t\tfor(let i = 0; i < this.allCollectionsBox.length; i++){\r\n\t\t  this.cOffsetTop.push(this.allCollectionsBox[i].offsetTop + offsetTop);\r\n\t\t}\r\n  \r\n\t\t//\u3010\u53EF\u6362\u3011header\u5143\u7D20\r\n\t\tdocument.querySelector('#CollectionStickyBar')?.appendChild(this.cloneNav);\r\n  \r\n\t\t//\u9875\u9762\u6EDA\u52A8\u76D1\u542C\r\n\t\tdocument.addEventListener('scroll', this.pageScroll.bind(that));\r\n  \r\n\t\tthis.navItems = document.querySelectorAll('.classify-nav-item');\r\n\t\tvar that = this;\r\n\t\tfor(let i = 0 ; i < this.navItems.length; i++){\r\n\t\t  this.navItems[i].addEventListener('click', this.scrollToItem.bind(this.navItems[i], that));\r\n\t\t}\r\n  \r\n\t\tthis.pageScroll();\r\n\t  }\r\n  \r\n\t  // \u70B9\u51FB\u52A0\u8F7D\u4EE5\u540E\uFF0C\u66F4\u65B0\u6570\u636E\r\n\t  resizeTop(){\r\n\t\t//\u3010\u53EF\u6362\u3011\r\n\t\tlet offsetTop = document.querySelector('#MainContent .collection-section').offsetTop + this.offsetTop;\r\n\t\t//\u3010\u53EF\u6362\u3011\r\n\t\tthis.allCollectionsBox = document.querySelectorAll('#MainContent .collection-items .collection__products .featured-collection');\r\n\t\tthis.cOffsetTop = [];  //\u6BCF\u4E2A\u7CFB\u5217\u9875\u8DDD\u79BB\u9876\u90E8\u7684\u8DDD\u79BB\r\n\t\tfor(let i = 0; i < this.allCollectionsBox.length; i++){\r\n\t\t  this.cOffsetTop.push(this.allCollectionsBox[i].offsetTop + offsetTop);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  scrollToItem(that){\r\n\t\tthat.frag = false;\r\n\t\tlet allSelectNav = document.querySelectorAll('.classify-nav-item.ql-select');\r\n\t\tlet handle = this.getAttribute('data-collection');\r\n\t\tlet newSelectNav = document.querySelectorAll(`.classify-nav-item[data-collection=\"${handle}\"]`);\r\n\t\tfor(let i = 0; i < allSelectNav.length; i++){\r\n\t\t  allSelectNav[i].classList.remove('ql-select');\r\n\t\t}\r\n\t\t\r\n\t\tfor(let i = 0; i < newSelectNav.length; i++){\r\n\t\t  newSelectNav[i].classList.add('ql-select');\r\n\t\t}\r\n\t\tlet box = document.querySelector(`.featured-collection[data-url=${handle}]`);\r\n\t\t//\u3010\u53EF\u6362\u3011\r\n\t\tlet offsetTop = document.querySelector('#MainContent .collection-section').offsetTop;\r\n\t\twindow.scrollTo({\r\n\t\t  top: box.offsetTop + offsetTop,\r\n\t\t  behavior: \"smooth\"\r\n\t\t});\r\n\t\tsetTimeout(()=>{\r\n\t\t  that.frag = true;\r\n\t\t},1000);\r\n\t  }\r\n  \r\n\t  pageScroll(){\r\n\t\tif(this.frag){\r\n\t\t  var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\r\n\t\t  //\u3010\u53EF\u6362\u3011\r\n\t\t  var offsetTop = document.querySelector('#MainContent .collection-section').offsetTop + this.offsetTop;\r\n\t\t  if(scrollTop > offsetTop){\r\n\t\t\tthis.cloneNav.style.display = 'flex';\r\n\t\t\tthis.nav.style.visibility = 'hidden';\r\n\t\t\t\r\n\t\t  }else{\r\n\t\t\tthis.cloneNav.style.display = 'none';\r\n\t\t\tthis.nav.style.visibility = 'visible';\r\n\t\t  }\r\n  \r\n  \r\n\t\t  for(let i = 1; i < this.cOffsetTop.length; i++){\r\n\t\t\tif(scrollTop > this.cOffsetTop[i - 1] && scrollTop < this.cOffsetTop[i]){\r\n\t\t\t  let handle = this.allCollectionsBox[i - 1].getAttribute('data-url');\r\n\t\t\t  this.selectNav(handle);\r\n\t\t\t}else if((this.cOffsetTop.length - i) == 1 && scrollTop > this.cOffsetTop[i]){\r\n\t\t\t  let handle = this.allCollectionsBox[i].getAttribute('data-url');\r\n\t\t\t  this.selectNav(handle);\r\n\t\t\t}\r\n\t\t  }\r\n  \r\n\t\t}\r\n  \r\n\t  }\r\n  \r\n\t  selectNav(handle){\r\n\t\tlet allSelectNav = document.querySelectorAll('.classify-nav-item.ql-select');\r\n\t\tlet newSelectNav = document.querySelectorAll(`.classify-nav-item[data-collection=\"${handle}\"]`);\r\n\t\tfor(let i = 0; i < allSelectNav.length; i++){\r\n\t\t  allSelectNav[i].classList.remove('ql-select');\r\n\t\t}\r\n\t\t\r\n\t\tfor(let i = 0; i < newSelectNav.length; i++){\r\n\t\t  newSelectNav[i].classList.add('ql-select');\r\n\t\t}\r\n\t  }\r\n\t}\r\n  \r\n\tclass Accessibility {\r\n\t  constructor() {\r\n\t\tthis.init();\r\n\t  }\r\n  \r\n\t  init() {\r\n\t\t// this.a11y = a11y;\r\n  \r\n\t\t// DOM Elements\r\n\t\tthis.body = document.body;\r\n\t\tthis.inPageLink = document.querySelector(selectors.inPageLink);\r\n\t\tthis.linkesWithOnlyHash = document.querySelectorAll(selectors.linkesWithOnlyHash);\r\n  \r\n\t\t// Flags\r\n\t\tthis.isFocused = false;\r\n  \r\n\t\t// A11Y init methods\r\n\t\tthis.focusHash();\r\n\t\tthis.bindInPageLinks();\r\n  \r\n\t\t// Events\r\n\t\tthis.clickEvents();\r\n\t\tthis.focusEvents();\r\n\t\tthis.focusEventsOff();\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Clicked events accessibility\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  clickEvents() {\r\n\t\tif (this.inPageLink) {\r\n\t\t  this.inPageLink.addEventListener('click', (event) => {\r\n\t\t\tevent.preventDefault();\r\n\t\t  });\r\n\t\t}\r\n  \r\n\t\tif (this.linkesWithOnlyHash) {\r\n\t\t  this.linkesWithOnlyHash.forEach((item) => {\r\n\t\t\titem.addEventListener('click', (event) => {\r\n\t\t\t  event.preventDefault();\r\n\t\t\t});\r\n\t\t  });\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Focus events\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  focusEvents() {\r\n\t\tdocument.addEventListener('keyup', (event) => {\r\n\t\t  if (event.code !== theme.keyboardKeys.TAB) {\r\n\t\t\treturn;\r\n\t\t  }\r\n  \r\n\t\t  this.body.classList.remove(classes.noOutline);\r\n\t\t  this.isFocused = true;\r\n\t\t});\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Focus events off\r\n\t   *\r\n\t   * @return  {Void}\r\n\t   */\r\n  \r\n\t  focusEventsOff() {\r\n\t\tdocument.addEventListener('mousedown', () => {\r\n\t\t  this.body.classList.add(classes.noOutline);\r\n\t\t  this.isFocused = false;\r\n\t\t});\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * Moves focus to an HTML element\r\n\t   * eg for In-page links, after scroll, focus shifts to content area so that\r\n\t   * next `tab` is where user expects. Used in bindInPageLinks()\r\n\t   * eg move focus to a modal that is opened. Used in trapFocus()\r\n\t   *\r\n\t   * @param {Element} container - Container DOM element to trap focus inside of\r\n\t   * @param {Object} options - Settings unique to your theme\r\n\t   * @param {string} options.className - Class name to apply to element on focus.\r\n\t   */\r\n  \r\n\t  forceFocus(element, options) {\r\n\t\toptions = options || {};\r\n  \r\n\t\tvar savedTabIndex = element.tabIndex;\r\n  \r\n\t\telement.tabIndex = -1;\r\n\t\telement.dataset.tabIndex = savedTabIndex;\r\n\t\telement.focus();\r\n\t\tif (typeof options.className !== 'undefined') {\r\n\t\t  element.classList.add(options.className);\r\n\t\t}\r\n\t\telement.addEventListener('blur', callback);\r\n  \r\n\t\tfunction callback(event) {\r\n\t\t  event.target.removeEventListener(event.type, callback);\r\n  \r\n\t\t  element.tabIndex = savedTabIndex;\r\n\t\t  delete element.dataset.tabIndex;\r\n\t\t  if (typeof options.className !== 'undefined') {\r\n\t\t\telement.classList.remove(options.className);\r\n\t\t  }\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * If there's a hash in the url, focus the appropriate element\r\n\t   * This compensates for older browsers that do not move keyboard focus to anchor links.\r\n\t   * Recommendation: To be called once the page in loaded.\r\n\t   *\r\n\t   * @param {Object} options - Settings unique to your theme\r\n\t   * @param {string} options.className - Class name to apply to element on focus.\r\n\t   * @param {string} options.ignore - Selector for elements to not include.\r\n\t   */\r\n  \r\n\t  focusHash(options) {\r\n\t\toptions = options || {};\r\n\t\tlet hash = window.location.hash;\r\n  \r\n\t\tif (typeof theme.settings.newHash !== 'undefined') {\r\n\t\t  hash = theme.settings.newHash;\r\n\t\t  window.location.hash = `#${hash}`;\r\n\t\t}\r\n\t\tconst element = document.getElementById(hash.slice(1));\r\n  \r\n\t\t// if we are to ignore this element, early return\r\n\t\tif (element && options.ignore && element.matches(options.ignore)) {\r\n\t\t  return false;\r\n\t\t}\r\n  \r\n\t\tif (hash && element) {\r\n\t\t  this.forceFocus(element, options);\r\n\t\t}\r\n\t  }\r\n  \r\n\t  /**\r\n\t   * When an in-page (url w/hash) link is clicked, focus the appropriate element\r\n\t   * This compensates for older browsers that do not move keyboard focus to anchor links.\r\n\t   * Recommendation: To be called once the page in loaded.\r\n\t   *\r\n\t   * @param {Object} options - Settings unique to your theme\r\n\t   * @param {string} options.className - Class name to apply to element on focus.\r\n\t   * @param {string} options.ignore - CSS selector for elements to not include.\r\n\t   */\r\n  \r\n\t  bindInPageLinks(options) {\r\n\t\toptions = options || {};\r\n\t\tconst links = Array.prototype.slice.call(document.querySelectorAll('a[href^=\"#\"]'));\r\n  \r\n\t\tfunction queryCheck(selector) {\r\n\t\t  return document.getElementById(selector) !== null;\r\n\t\t}\r\n  \r\n\t\treturn links.filter((link) => {\r\n\t\t  if (link.hash === '#' || link.hash === '') {\r\n\t\t\treturn false;\r\n\t\t  }\r\n  \r\n\t\t  if (options.ignore && link.matches(options.ignore)) {\r\n\t\t\treturn false;\r\n\t\t  }\r\n  \r\n\t\t  if (!queryCheck(link.hash.substr(1))) {\r\n\t\t\treturn false;\r\n\t\t  }\r\n  \r\n\t\t  var element = document.querySelector(link.hash);\r\n  \r\n\t\t  if (!element) {\r\n\t\t\treturn false;\r\n\t\t  }\r\n  \r\n\t\t  link.addEventListener('click', () => {\r\n\t\t\tthis.forceFocus(element, options);\r\n\t\t  });\r\n  \r\n\t\t  return true;\r\n\t\t});\r\n\t  }\r\n\t}\r\n  \r\n\tconst getScrollbarWidth = () => {\r\n\t  // Creating invisible container\r\n\t  const outer = document.createElement('div');\r\n\t  outer.style.visibility = 'hidden';\r\n\t  outer.style.overflow = 'scroll'; // forcing scrollbar to appear\r\n\t  outer.style.msOverflowStyle = 'scrollbar'; // needed for WinJS apps\r\n\t  document.body.appendChild(outer);\r\n  \r\n\t  // Creating inner element and placing it in the container\r\n\t  const inner = document.createElement('div');\r\n\t  outer.appendChild(inner);\r\n  \r\n\t  // Calculating difference between container's full width and the child width\r\n\t  const scrollbarWidth = outer.offsetWidth - inner.offsetWidth;\r\n  \r\n\t  // Removing temporary elements from the DOM\r\n\t  outer.parentNode.removeChild(outer);\r\n  \r\n\t  return scrollbarWidth;\r\n\t};\r\n  \r\n\tdocument.documentElement.style.setProperty('--scrollbar-width', `${getScrollbarWidth()}px`);\r\n  \r\n  \r\n\t// \u5F53HTML\u6587\u6863\u5B8C\u5168\u89E3\u6790\uFF0C\u4E14\u6240\u6709\u5EF6\u8FDF\u811A\u672C\u4E0B\u8F7D\u548C\u6267\u884C\u5B8C\u6BD5\u540E\uFF0C\u4F1A\u89E6\u53D1\u8BE5\u4E8B\u4EF6\uFF08\u4E0D\u4F1A\u7B49\u5F85\u56FE\u7247\u3001\u5B50\u6846\u67B6\u548C\u5F02\u6B65\u811A\u672C\u7B49\u5176\u4ED6\u5185\u5BB9\u7684\u5B8C\u6210\uFF09\r\n\tdocument.addEventListener('DOMContentLoaded', function () {\r\n\t  // Load all registered sections on the page.\r\n\t  load('*');\r\n  \r\n\t  const showAnimations = document.body.dataset.animations === 'true';\r\n\t  if (showAnimations) {\r\n\t\tAOS.init({\r\n\t\t  once: true,\r\n\t\t  offset: 50,\r\n\t\t  duration: 400,\r\n\t\t  startEvent: 'load',\r\n\t\t});\r\n\t  }\r\n  \r\n\t  var box = document.querySelector('.section-shop-container #slider-mobile');\r\n\t  var lis = box && box.querySelectorAll('li');\r\n\t  for(let i = 0; i < lis && lis.length; i++){\r\n\t\tvar li = lis[i];\r\n\t\tli && li.addEventListener('touchend', function(e){\r\n\t\t  if(!this.classList.contains('unfold')){\r\n\t\t\te.preventDefault();\r\n\t\t\tfor(let j = 0; j < lis.length; j++){\r\n\t\t\t  lis[j] && lis[j].classList.remove('unfold');\r\n\t\t\t  lis[j] && lis[j].querySelector('a').setAttribute('href', 'javascript:;');\r\n\t\t\t  lis[j] && lis[j].querySelector('a').removeAttribute('target');\r\n\t\t\t}\r\n\t\t\tthis.classList.add('unfold');\r\n\t\t\tvar parent = box.parentNode;\r\n\t\t\tvar left = this.offsetLeft - parent.clientWidth + this.clientWidth / 2 + parent.clientWidth / 2;\r\n\t\t\tparent.scrollTo({\r\n\t\t\t  top: 0,\r\n\t\t\t  left: left,\r\n\t\t\t  behavior: \"smooth\",\r\n\t\t\t});\r\n  \r\n\t\t\tthis.querySelector('a').hasAttribute('data-href') && this.querySelector('a').setAttribute('href', this.querySelector('a').getAttribute('data-href'));\r\n\t\t\tthis.querySelector('a').setAttribute('target', '_blank');\r\n\t\t  }\r\n\t\t  \r\n\t\t})\r\n\t  }\r\n  \r\n\t  new Accessibility();\r\n  \r\n\t  // Safari smoothscroll polyfill\r\n\t  const hasNativeSmoothScroll = 'scrollBehavior' in document.documentElement.style;\r\n  \r\n\t  if (!hasNativeSmoothScroll) {\r\n\t\tloadScript({url: theme.assets.smoothscroll});\r\n\t  }\r\n  \r\n\t  if (!customElements.get('collection-grid')) {\r\n\t\tcustomElements.define('collection-grid', CollectionGrid);\r\n\t  }\r\n\t  if (!customElements.get('classify-nav')) {\r\n\t\tcustomElements.define('classify-nav', ClassifyNav);\r\n\t  }\r\n\t  \r\n\t});\r\n  \r\n  \r\n\t// \u5F53\u6240\u6709\u8D44\u6E90\u90FD\u5DF2\u7ECF\u52A0\u8F7D\u5B8C\u65F6\uFF0C\u89E6\u53D1\u8BE5\u4E8B\u4EF6\r\n\twindow.addEventListener('load', () => {\r\n\t  if (!customElements.get('product-grid-item-swatch') && window.theme.settings.enableColorSwatchesCollection) {\r\n\t\twindow.qlProductsJson = {};\r\n\t\tcustomElements.define('product-grid-item-swatch', GridSwatch);\r\n\t  }\r\n\t});\r\n  \r\n\t\r\n  \r\n\t\r\n  \r\n\t\r\n  })(themeVendor.ScrollLock, themeVendor.Flickity, themeVendor.themeCurrency, themeVendor.ajaxinate, themeVendor.AOS);\r\n  "],
  "mappings": "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",
  "names": ["wrap", "n", "i", "r", "t", "Section", "prev", "isExpanded", "dropdownId", "dropdown", "options", "slider", "container", "observer", "element", "drawer", "variant", "location", "tooltip", "isTouch", "event", "selectors", "classes", "loading", "popups", "item", "itemProducts"]
}
