{
  "version": 3,
  "sources": ["/cdn/shop/t/14/assets/global.js?cb=2"],
  "sourcesContent": ["/* EVENTS/SUBSCRIPTIONS */\nconst ON_CHANGE_DEBOUNCE_TIMER = 300;\n\nconst PUB_SUB_EVENTS = {\n  cartRemove: 'cart-remove',\n  cartAdd: 'cart-add',\n  cartOpen: 'cart-drawer-open',\n  cartClose: 'cart-drawer-closed',\n  cartUpdate: 'cart-update',\n  quickViewOpen: 'quick-view-open',\n  quickViewClose: 'quick-view-closed',\n  quantityUpdate: 'quantity-update',\n  variantChange: 'variant-change',\n  cartError: 'cart-error'\n};\n\nlet subscribers = {};\n\nfunction subscribe(eventName, callback) {\n  if (subscribers[eventName] === undefined) {\n    subscribers[eventName] = [];\n  }\n\n  subscribers[eventName] = [...subscribers[eventName], callback];\n\n  return function unsubscribe() {\n    subscribers[eventName] = subscribers[eventName].filter((cb) => {\n      return cb !== callback;\n    });\n  };\n}\n\nfunction publish(eventName, data) {\n  let eventData = { ...data };\n\n  if (eventName === PUB_SUB_EVENTS.cartUpdate) {\n    if (data.source === 'product-form') {\n      eventName = PUB_SUB_EVENTS.cartAdd;\n    } else if (data.source === 'cart-items' && !data.variantId) {\n      eventName = PUB_SUB_EVENTS.cartRemove;\n    }\n  }\n\n  if (eventName === PUB_SUB_EVENTS.variantChange) {\n    eventData =  { ...eventData.data };\n    delete eventData.html;\n  }\n\n  if (eventName === PUB_SUB_EVENTS.cartAdd) {\n    eventData.variantId = eventData.productVariantId;\n    delete eventData.productVariantId;\n  }\n\n  // Remove the 'source' node from eventData\n  delete eventData.source;\n\n  // Broadcast the event with modified eventData\n  document.dispatchEvent(new CustomEvent(eventName, {\n    detail: eventData\n  }));\n\n  if (subscribers[eventName]) {\n    subscribers[eventName].forEach((callback) => {\n      callback(data);\n    });\n  }\n}\n\n/* Custom selects */\n(function() {\n  !function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.NiceSelect=t():e.NiceSelect=t()}(self,(()=>(()=>{\"use strict\";var e={d:(t,i)=>{for(var s in i)e.o(i,s)&&!e.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:i[s]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})}},t={};function i(e){var t=document.createEvent(\"MouseEvents\");t.initEvent(\"click\",!0,!1),e.dispatchEvent(t)}function s(e){var t=document.createEvent(\"HTMLEvents\");t.initEvent(\"change\",!0,!1),e.dispatchEvent(t)}function o(e){var t=document.createEvent(\"FocusEvent\");t.initEvent(\"focusin\",!0,!1),e.dispatchEvent(t)}function n(e){var t=document.createEvent(\"FocusEvent\");t.initEvent(\"focusout\",!0,!1),e.dispatchEvent(t)}function d(e){var t=document.createEvent(\"UIEvent\");t.initEvent(\"modalclose\",!0,!1),e.dispatchEvent(t)}function l(e,t){\"invalid\"==t?(c(this.dropdown,\"invalid\"),h(this.dropdown,\"valid\")):(c(this.dropdown,\"valid\"),h(this.dropdown,\"invalid\"))}function r(e,t){return null!=e[t]?e[t]:e.getAttribute(t)}function a(e,t){return!!e&&e.classList.contains(t)}function c(e,t){if(e)return e.classList.add(t)}function h(e,t){if(e)return e.classList.remove(t)}e.r(t),e.d(t,{bind:()=>f,default:()=>u});var p={data:null,searchable:!1,showSelectedItems:!1};function u(e,t){this.el=e,this.config=Object.assign({},p,t||{}),this.data=this.config.data,this.selectedOptions=[],this.placeholder=r(this.el,\"placeholder\")||this.config.placeholder||\"Select an option\",this.searchtext=r(this.el,\"searchtext\")||this.config.searchtext||\"Search\",this.selectedtext=r(this.el,\"selectedtext\")||this.config.selectedtext||\"selected\",this.dropdown=null,this.multiple=r(this.el,\"multiple\"),this.disabled=r(this.el,\"disabled\"),this.create()}function f(e,t){return new u(e,t)}return u.prototype.create=function(){this.el.style.opacity=\"0\",this.el.style.minWidth=\"0\",this.el.setAttribute('tabindex', '-1'),this.el.style.width=\"0\",this.el.style.padding=\"0\",this.el.style.height=\"0\",this.data?this.processData(this.data):this.extractData(),this.renderDropdown(),this.bindEvent()},u.prototype.processData=function(e){var t=[];e.forEach((e=>{t.push({data:e,attributes:{selected:!!e.selected,disabled:!!e.disabled,optgroup:\"optgroup\"==e.value}})})),this.options=t},u.prototype.extractData=function(){var e=this.el.querySelectorAll(\"option,optgroup\"),t=[],i=[],s=[];e.forEach((e=>{if(\"OPTGROUP\"==e.tagName)var s={text:e.label,value:\"optgroup\"};else{let t=e.innerText;null!=e.dataset.display&&(t=e.dataset.display),s={text:t,value:e.value,selected:null!=e.getAttribute(\"selected\"),disabled:null!=e.getAttribute(\"disabled\")}}var o={selected:null!=e.getAttribute(\"selected\"),disabled:null!=e.getAttribute(\"disabled\"),optgroup:\"OPTGROUP\"==e.tagName};t.push(s),i.push({data:s,attributes:o})})),this.data=t,this.options=i,this.options.forEach((e=>{e.attributes.selected&&s.push(e)})),this.selectedOptions=s},u.prototype.renderDropdown=function(){var e=[\"nice-select\",r(this.el,\"class\")||\"\",this.disabled?\"disabled\":\"\",this.multiple?\"has-multiple\":\"\"];let t='<div class=\"nice-select-search-box field\">';t+=`<input type=\"text\" class=\"nice-select-search field__input visible-placeholder\" placeholder=\"${this.searchtext}...\" title=\"search\"/>`,t+=\"</div>\";var i=`<div class=\"${e.join(\" \")}\" tabindex=\"${this.disabled?null:0}\">`;i+=`<span class=\"${this.multiple?\"multiple-options\":\"current\"}\"></span>`,i+='<div class=\"nice-select-dropdown custom-scrollbar\">',i+=`${this.config.searchable?t:\"\"}`,i+='<ul class=\"nice-list\"></ul>',i+=\"</div>\",i+=\"</div>\",this.el.insertAdjacentHTML(\"afterend\",i),this.dropdown=this.el.nextElementSibling,this._renderSelectedItems(),this._renderItems()},u.prototype._renderSelectedItems=function(){if(this.multiple){var e=\"\";this.config.showSelectedItems||this.config.showSelectedItems||\"auto\"==window.getComputedStyle(this.dropdown).width||this.selectedOptions.length<2?(this.selectedOptions.forEach((function(t){e+=`<span class=\"current\">${t.data.text}</span>`})),e=\"\"==e?this.placeholder:e):e=this.selectedOptions.length+\" \"+this.selectedtext,this.dropdown.querySelector(\".multiple-options\").innerHTML=e}else{var t=this.selectedOptions.length>0?this.selectedOptions[0].data.text:this.placeholder;this.dropdown.querySelector(\".current\").innerHTML=t}},u.prototype._renderItems=function(){var e=this.dropdown.querySelector(\"ul\");this.options.forEach((t=>{e.appendChild(this._renderItem(t))}))},u.prototype._renderItem=function(e){var t=document.createElement(\"li\");if(t.innerHTML=e.data.text,e.attributes.optgroup)c(t,\"optgroup\");else{t.setAttribute(\"data-value\",e.data.value);var i=[\"option\",e.attributes.selected?\"selected\":null,e.attributes.disabled?\"disabled\":null];t.addEventListener(\"click\",this._onItemClicked.bind(this,e)),t.classList.add(...i)}return e.element=t,t},u.prototype.update=function(){if(this.extractData(),this.dropdown){var e=a(this.dropdown,\"open\");this.dropdown.parentNode.removeChild(this.dropdown),this.create(),e&&i(this.dropdown)}r(this.el,\"disabled\")?this.disable():this.enable()},u.prototype.disable=function(){this.disabled||(this.disabled=!0,c(this.dropdown,\"disabled\"))},u.prototype.enable=function(){this.disabled&&(this.disabled=!1,h(this.dropdown,\"disabled\"))},u.prototype.clear=function(){this.resetSelectValue(),this.selectedOptions=[],this._renderSelectedItems(),this.update(),s(this.el)},u.prototype.destroy=function(){this.dropdown&&(this.dropdown.parentNode.removeChild(this.dropdown),this.el.style.display=\"\")},u.prototype.bindEvent=function(){this.dropdown.addEventListener(\"click\",this._onClicked.bind(this)),this.dropdown.addEventListener(\"keydown\",this._onKeyPressed.bind(this)),this.dropdown.addEventListener(\"focusin\",o.bind(this,this.el)),this.dropdown.addEventListener(\"focusout\",n.bind(this,this.el)),this.el.addEventListener(\"invalid\",l.bind(this,this.el,\"invalid\")),window.addEventListener(\"click\",this._onClickedOutside.bind(this)),this.config.searchable&&this._bindSearchEvent()},u.prototype._bindSearchEvent=function(){var e=this.dropdown.querySelector(\".nice-select-search\");e&&e.addEventListener(\"click\",(function(e){return e.stopPropagation(),!1})),e.addEventListener(\"input\",this._onSearchChanged.bind(this))},u.prototype._onClicked=function(e){var t,i;if(e.preventDefault(),a(this.dropdown,\"open\")?this.multiple||(h(this.dropdown,\"open\"),d(this.el)):(c(this.dropdown,\"open\"),t=this.el,(i=document.createEvent(\"UIEvent\")).initEvent(\"modalopen\",!0,!1),t.dispatchEvent(i)),a(this.dropdown,\"open\")){var s=this.dropdown.querySelector(\".nice-select-search\");s&&(s.value=\"\",s.focus());var o=this.dropdown.querySelector(\".focus\");h(o,\"focus\"),c(o=this.dropdown.querySelector(\".selected\"),\"focus\"),this.dropdown.querySelectorAll(\"ul li\").forEach((function(e){e.style.display=\"\"}))}else this.dropdown.focus()},u.prototype._onItemClicked=function(e,t){var i=t.target;a(i,\"disabled\")||(this.multiple?a(i,\"selected\")?(h(i,\"selected\"),this.selectedOptions.splice(this.selectedOptions.indexOf(e),1),this.el.querySelector(`option[value=\"${i.dataset.value}\"]`).removeAttribute(\"selected\")):(c(i,\"selected\"),this.selectedOptions.push(e)):(this.selectedOptions.forEach((function(e){h(e.element,\"selected\")})),c(i,\"selected\"),this.selectedOptions=[e]),this._renderSelectedItems(),this.updateSelectValue())},u.prototype.updateSelectValue=function(){if(this.multiple){var e=this.el;this.selectedOptions.forEach((function(t){var i=e.querySelector(`option[value=\"${t.data.value}\"]`);i&&i.setAttribute(\"selected\",!0)}))}else this.selectedOptions.length>0&&(this.el.value=this.selectedOptions[0].data.value);s(this.el)},u.prototype.resetSelectValue=function(){if(this.multiple){var e=this.el;this.selectedOptions.forEach((function(t){var i=e.querySelector(`option[value=\"${t.data.value}\"]`);i&&i.removeAttribute(\"selected\")}))}else this.selectedOptions.length>0&&(this.el.selectedIndex=-1);s(this.el)},u.prototype._onClickedOutside=function(e){this.dropdown.contains(e.target)||(h(this.dropdown,\"open\"),d(this.el))},u.prototype._onKeyPressed=function(e){var t=this.dropdown.querySelector(\".focus\"),s=a(this.dropdown,\"open\");if(13==e.keyCode)i(s?t:this.dropdown);else if(40==e.keyCode){if(s){var o=this._findNext(t);o&&(h(this.dropdown.querySelector(\".focus\"),\"focus\"),c(o,\"focus\"))}else i(this.dropdown);e.preventDefault()}else if(38==e.keyCode){if(s){var n=this._findPrev(t);n&&(h(this.dropdown.querySelector(\".focus\"),\"focus\"),c(n,\"focus\"))}else i(this.dropdown);e.preventDefault()}else if(27==e.keyCode&&s)i(this.dropdown);else if(32===e.keyCode&&s)return!1;return!1},u.prototype._findNext=function(e){for(e=e?e.nextElementSibling:this.dropdown.querySelector(\".list .option\");e;){if(!a(e,\"disabled\")&&\"none\"!=e.style.display)return e;e=e.nextElementSibling}return null},u.prototype._findPrev=function(e){for(e=e?e.previousElementSibling:this.dropdown.querySelector(\".list .option:last-child\");e;){if(!a(e,\"disabled\")&&\"none\"!=e.style.display)return e;e=e.previousElementSibling}return null},u.prototype._onSearchChanged=function(e){var t=a(this.dropdown,\"open\"),i=e.target.value;if(\"\"==(i=i.toLowerCase()))this.options.forEach((function(e){e.element.style.display=\"\"}));else if(t){var s=new RegExp(i);this.options.forEach((function(e){var t=e.data.text.toLowerCase(),i=s.test(t);e.element.style.display=i?\"\":\"none\"}))}this.dropdown.querySelectorAll(\".focus\").forEach((function(e){h(e,\"focus\")})),c(this._findNext(null),\"focus\")},t})()));\n\n  window.renderSelects = function() {\n    if (window.matchMedia('(min-width: 750px)').matches) {\n      document.querySelectorAll('select.styled-select').forEach(select => {\n        select.classList.remove('styled-select');\n        select.classList.remove('styled-select-xs');\n        select.classList.add('nice__select');\n        NiceSelect.bind(select);\n      });\n    } else {\n      document.querySelectorAll('select.styled-select-xs').forEach(select => {\n        select.classList.remove('styled-select');\n        select.classList.remove('styled-select-xs');\n        select.classList.add('nice__select');\n        NiceSelect.bind(select);\n      });\n    }\n  }\n\n  document.addEventListener('DOMContentLoaded', window.renderSelects);\n  if (Shopify.designMode) {\n    document.addEventListener('shopify:section:load', window.renderSelects);\n  }\n})();\n\nwindow.sectionInstances = new WeakMap();\n\nwindow.initScriptOnDemand = function (element, callback, threshold = 300) {\n  if (document.body.dataset.lazyLoadJs === 'true' && 'IntersectionObserver' in window) {\n    const interSectionObserver = new IntersectionObserver((entries, observer) => {\n      entries.forEach((entry) => {\n        if (entry.isIntersecting) {\n          if (typeof callback === 'function') {\n            callback();\n            observer.unobserve(entry.target);\n          }\n        }\n      });\n    }, { rootMargin: `0px 0px ${threshold}px 0px` });\n\n    interSectionObserver.observe(element);\n  } else if (typeof callback === 'function') {\n    setTimeout(callback.bind(this), 0);\n  }\n}\n\nfunction getFocusableElements(container) {\n  return Array.from(\n    container.querySelectorAll(\n      \"summary, a[href], button:enabled, [tabindex]:not([tabindex^='-']), [draggable], area, input:not([type=hidden]):enabled, select:enabled, textarea:enabled, object, iframe\"\n    )\n  );\n}\n\ndocument.querySelectorAll('[id^=\"Details-\"] summary').forEach((summary) => {\n  summary.setAttribute('role', 'button');\n  summary.setAttribute('aria-expanded', summary.parentNode.hasAttribute('open'));\n\n  if (summary.nextElementSibling.getAttribute('id')) {\n    summary.setAttribute('aria-controls', summary.nextElementSibling.id);\n  }\n\n  summary.addEventListener('click', (event) => {\n    event.currentTarget.setAttribute('aria-expanded', !event.currentTarget.closest('details').hasAttribute('open'));\n  });\n\n  if (summary.closest('header-drawer, menu-drawer')) return;\n  summary.parentElement.addEventListener('keyup', onKeyUpEscape);\n});\n\nconst trapFocusHandlers = {};\n\nfunction trapFocus(container, elementToFocus = container, lastElement) {\n  var elements = getFocusableElements(container);\n  var first = elements[0];\n  var last = lastElement || elements[elements.length - 1];\n\n  removeTrapFocus();\n\n  trapFocusHandlers.focusin = (event) => {\n    if (event.target !== container && event.target !== last && event.target !== first) return;\n\n    document.addEventListener('keydown', trapFocusHandlers.keydown);\n  };\n\n  trapFocusHandlers.focusout = function () {\n    document.removeEventListener('keydown', trapFocusHandlers.keydown);\n  };\n\n  trapFocusHandlers.keydown = function (event) {\n    if (event.code.toUpperCase() !== 'TAB') return; // If not TAB key\n    // On the last focusable element and tab forward, focus the first element.\n    if (event.target === last && !event.shiftKey) {\n      event.preventDefault();\n      first.focus();\n    }\n\n    //  On the first focusable element and tab backward, focus the last element.\n    if ((event.target === container || event.target === first) && event.shiftKey) {\n      event.preventDefault();\n      last.focus();\n    }\n  };\n\n  document.addEventListener('focusout', trapFocusHandlers.focusout);\n  document.addEventListener('focusin', trapFocusHandlers.focusin);\n\n  if (elementToFocus) {\n    setTimeout(() => {\n      elementToFocus.focus();\n\n      if (\n        elementToFocus.tagName === 'INPUT' &&\n        ['search', 'text', 'email', 'url'].includes(elementToFocus.type) &&\n        elementToFocus.value\n      ) {\n        elementToFocus.setSelectionRange(0, elementToFocus.value.length);\n      }\n    }, 300);\n  }\n}\n\n// Here run the querySelector to figure out if the browser supports :focus-visible or not and run code based on it.\ntry {\n  document.querySelector(':focus-visible');\n} catch (e) {\n  focusVisiblePolyfill();\n}\n\nfunction focusVisiblePolyfill() {\n  const navKeys = [\n    'ARROWUP',\n    'ARROWDOWN',\n    'ARROWLEFT',\n    'ARROWRIGHT',\n    'TAB',\n    'ENTER',\n    'SPACE',\n    'ESCAPE',\n    'HOME',\n    'END',\n    'PAGEUP',\n    'PAGEDOWN',\n  ];\n  let currentFocusedElement = null;\n  let mouseClick = null;\n\n  window.addEventListener('keydown', (event) => {\n    if (navKeys.includes(event.code.toUpperCase())) {\n      mouseClick = false;\n    }\n  });\n\n  window.addEventListener('mousedown', (event) => {\n    mouseClick = true;\n  });\n\n  window.addEventListener(\n    'focus',\n    () => {\n      if (currentFocusedElement) currentFocusedElement.classList.remove('focused');\n\n      if (mouseClick) return;\n\n      currentFocusedElement = document.activeElement;\n      currentFocusedElement.classList.add('focused');\n    },\n    true\n  );\n}\n\nfunction pauseAllMedia() {\n  document.querySelectorAll('.js-youtube:not(.js-video-background)').forEach((video) => {\n    video.contentWindow.postMessage('{\"event\":\"command\",\"func\":\"' + 'pauseVideo' + '\",\"args\":\"\"}', '*');\n  });\n  document.querySelectorAll('.js-vimeo:not(.js-video-background)').forEach((video) => {\n    video.contentWindow.postMessage('{\"method\":\"pause\"}', '*');\n  });\n  document.querySelectorAll('video:not(.js-video-background)').forEach((video) => video.pause());\n  document.querySelectorAll('product-model').forEach((model) => {\n    if (model.modelViewerUI) model.modelViewerUI.pause();\n  });\n}\n\n// Load <template> content if needed\nfunction loadTemplateContent(elem) {\n  elem.querySelectorAll('template.deferred').forEach(template => {\n    if (template?.content?.childNodes) {\n      // Create a DocumentFragment to hold the template content\n      const fragment = document.createDocumentFragment();\n\n      // Replace <lazy-script> elements with <script> elements\n      template.content.querySelectorAll('lazy-script').forEach(lazyScript => {\n        const script = document.createElement('script');\n        script.textContent = lazyScript.textContent;\n        Array.from(lazyScript.attributes).forEach(attr => {\n          script.setAttribute(attr.name, attr.value);\n        });\n        lazyScript.replaceWith(script);\n      });\n\n      // Append all child nodes of the template content to the DocumentFragment\n      while (template.content.firstChild) {\n        fragment.appendChild(template.content.firstChild);\n      }\n\n      // Insert the DocumentFragment after the <template> tag\n      template.parentNode.insertBefore(fragment, template.nextSibling);\n\n      // Remove the <template> element\n      template.remove();\n\n      // Rerun DOM things\n      window.makeTablesResponsive();\n    }\n  });\n  return elem;\n}\n\n// Utility to selectively load certain elements on demand\ndocument.addEventListener('DOMContentLoaded', () => {\n  // Load templates on click of certain other DOM elements\n  document.body.addEventListener('click', (event) => {\n    const trigger = event.target.closest('[data-load-trigger]');\n    if (!trigger) return;\n\n    const selector = trigger.getAttribute('data-load-trigger');\n    const template = document.querySelector(selector);\n\n    if (template) {\n      window.loadTemplateContent(template.parentNode);\n    }\n  });\n\n  // Load templates immediately if IntersectionObserver is not supported\n  if (!(\"IntersectionObserver\" in window)) {\n    document.querySelectorAll(\"template.lazy-template\").forEach(template => {\n      window.loadTemplateContent(template.parentNode);\n    });\n  } else {\n    // Load templates when scrolling near to them\n    document.querySelectorAll(\"template.lazy-template\").forEach(template => {\n      const margin = template.getAttribute(\"data-observe-margin\") || \"400px\";\n\n      const observer = new IntersectionObserver((entries, observer) => {\n        entries.forEach(entry => {\n          if (entry.isIntersecting) {\n            window.loadTemplateContent(entry.target.parentNode);\n            observer.unobserve(entry.target);\n          }\n        });\n      }, {\n        root: null, // Observe relative to the viewport\n        rootMargin: margin, // Use the data attribute or default to 400px\n        threshold: 0 // Trigger as soon as any part is visible\n      });\n\n      observer.observe(template);\n    });\n  }\n});\n\n\nfunction removeTrapFocus(elementToFocus = null) {\n  document.removeEventListener('focusin', trapFocusHandlers.focusin);\n  document.removeEventListener('focusout', trapFocusHandlers.focusout);\n  document.removeEventListener('keydown', trapFocusHandlers.keydown);\n\n  if (elementToFocus && !elementToFocus.matches('.product__media-toggle')) elementToFocus.focus();\n}\n\nfunction onKeyUpEscape(event) {\n  if (event.code.toUpperCase() !== 'ESCAPE') return;\n\n  const openDetailsElement = event.target.closest('details[open]');\n  if (!openDetailsElement) return;\n\n  const summaryElement = openDetailsElement.querySelector('summary');\n  openDetailsElement.removeAttribute('open');\n  summaryElement.setAttribute('aria-expanded', false);\n  summaryElement.focus();\n}\n\nfunction debounce(fn, wait) {\n  let t;\n  return (...args) => {\n    clearTimeout(t);\n    t = setTimeout(() => fn.apply(this, args), wait);\n  };\n}\n\nfunction fetchConfig(type = 'json') {\n  return {\n    method: 'POST',\n    headers: { 'Content-Type': 'application/json', Accept: `application/${type}` },\n  };\n}\n\n// Load template scripts on desktop\nfunction loadDesktopOnlyTemplates() {\n  // Load desktop only template content\n  document.querySelectorAll('template.js-load-desktop-only').forEach(template => {\n    if (window.innerWidth >= 750) {\n      const clone = document.importNode(template.content, true);\n      template.parentNode.replaceChild(clone, template);\n    }\n  });\n}\n\n/* SHOPIFY COMMON JS */\nif (typeof window.Shopify == 'undefined') {\n  window.Shopify = {};\n}\n\nShopify.bind = function (fn, scope) {\n  return function () {\n    return fn.apply(scope, arguments);\n  };\n};\n\nShopify.setSelectorByValue = function (selector, value) {\n  for (var i = 0, count = selector.options.length; i < count; i++) {\n    var option = selector.options[i];\n    if (value == option.value || value == option.innerHTML) {\n      selector.selectedIndex = i;\n      return i;\n    }\n  }\n};\n\nShopify.addListener = function (target, eventName, callback) {\n  target.addEventListener\n    ? target.addEventListener(eventName, callback, false)\n    : target.attachEvent('on' + eventName, callback);\n};\n\nShopify.postLink = function (path, options) {\n  options = options || {};\n  var method = options['method'] || 'post';\n  var params = options['parameters'] || {};\n\n  var form = document.createElement('form');\n  form.setAttribute('method', method);\n  form.setAttribute('action', path);\n\n  for (var key in params) {\n    var hiddenField = document.createElement('input');\n    hiddenField.setAttribute('type', 'hidden');\n    hiddenField.setAttribute('name', key);\n    hiddenField.setAttribute('value', params[key]);\n    form.appendChild(hiddenField);\n  }\n  document.body.appendChild(form);\n  form.submit();\n  document.body.removeChild(form);\n};\n\n\n/* COMMON WEB COMPONENTS */\n// Extendable web component watch for the rendering of a <template> element, and calling the init function\nclass HTMLElementLazyInit extends HTMLElement {\n  constructor() {\n    super();\n    this.template = this.querySelector(`template`);\n  }\n\n  connectedCallback() {\n    if (this.template) {\n      this.observeTemplateRemoval();\n    } else {\n      this.init();\n    }\n  }\n\n  observeTemplateRemoval() {\n    const observer = new MutationObserver((mutations) => {\n      mutations.forEach((mutation) => {\n        mutation.removedNodes.forEach((node) => {\n          if (node === this.template) {\n            this.onTemplateRendered();\n            observer.disconnect();\n          }\n        });\n      });\n    });\n\n    if (this.template.parentNode) {\n      observer.observe(this.template.parentNode, { childList: true });\n    }\n  }\n\n  onTemplateRendered() {\n    this.init();\n  }\n}\n\nclass QuantityInput extends HTMLElement {\n  constructor() {\n    super();\n    this.input = this.querySelector('input');\n    this.changeEvent = new Event('change', { bubbles: true });\n    this.input.addEventListener('change', this.onInputChange.bind(this));\n    this.querySelectorAll('button').forEach((button) =>\n      button.addEventListener('click', this.onButtonClick.bind(this))\n    );\n  }\n\n  quantityUpdateUnsubscriber = undefined;\n\n  connectedCallback() {\n    this.validateQtyRules();\n    this.quantityUpdateUnsubscriber = subscribe(PUB_SUB_EVENTS.quantityUpdate, this.validateQtyRules.bind(this));\n  }\n\n  disconnectedCallback() {\n    if (this.quantityUpdateUnsubscriber) {\n      this.quantityUpdateUnsubscriber();\n    }\n  }\n\n  onInputChange(event) {\n    this.validateQtyRules();\n  }\n\n  onButtonClick(event) {\n    event.preventDefault();\n    const clickedButton = event.currentTarget;\n    if (!clickedButton) return;\n    const previousValue = this.input.value;\n\n    if (clickedButton.name === 'plus') {\n      if (parseInt(this.input.dataset.min) > parseInt(this.input.step) && this.input.value == 0) {\n        this.input.value = this.input.dataset.min;\n      } else {\n        this.input.stepUp();\n      }\n    } else {\n      this.input.stepDown();\n    }\n\n    if (previousValue !== this.input.value) this.input.dispatchEvent(this.changeEvent);\n\n    if (this.input.dataset.min === previousValue && clickedButton.name === 'minus') {\n      this.input.value = parseInt(this.input.min);\n    }\n  }\n\n  validateQtyRules() {\n    const value = parseInt(this.input.value);\n    if (this.input.min) {\n      const buttonMinus = this.querySelector(\".quantity__button[name='minus']\");\n      buttonMinus.classList.toggle('disabled', parseInt(value) <= parseInt(this.input.min));\n    }\n    if (this.input.max) {\n      const max = parseInt(this.input.max);\n      const buttonPlus = this.querySelector(\".quantity__button[name='plus']\");\n      buttonPlus.classList.toggle('disabled', value >= max);\n    }\n  }\n}\ncustomElements.define('quantity-input', QuantityInput);\n\nclass MenuDrawer extends HTMLElement {\n  constructor() {\n    super();\n\n    this.mainDetailsToggle = this.querySelector('details');\n\n    this.addEventListener('keyup', this.onKeyUp.bind(this));\n    this.addEventListener('focusout', this.onFocusOut.bind(this));\n\n    document.addEventListener('shopify:section:load', () => {\n      this.mainDetailsToggle.classList.remove('menu-opening');\n      document.body.classList.remove(`overflow-hidden`);\n    });\n\n    this.bindEvents();\n  }\n\n  bindEvents() {\n    this.querySelectorAll('summary').forEach((summary) =>\n      summary.addEventListener('click', this.onSummaryClick.bind(this))\n    );\n  }\n\n  onKeyUp(event) {\n    if (event.code.toUpperCase() !== 'ESCAPE') return;\n\n    const openDetailsElement = event.target.closest('details[open]');\n    if (!openDetailsElement) return;\n\n    openDetailsElement === this.mainDetailsToggle\n      ? this.closeMenuDrawer(event, this.mainDetailsToggle.querySelector('summary'))\n      : this.closeSubmenu(openDetailsElement);\n  }\n\n  onSummaryClick(event) {\n    const summaryElement = event.currentTarget;\n    const detailsElement = summaryElement.parentNode;\n    const parentMenuElement = detailsElement.closest('.has-submenu');\n    const isOpen = detailsElement.hasAttribute('open');\n    const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');\n\n    function addTrapFocus() {\n      const menuDrawer = summaryElement.closest('#menu-drawer');\n      if (menuDrawer) {\n        // Designate the very last 'summary' element within the last <li> to be the last element. This should trigger focus to wrap round to the beginning again\n        const lastLi = summaryElement.nextElementSibling.querySelector('.menu-drawer__inner-submenu > .menu-drawer__menu > li:last-child');\n        trapFocus(summaryElement.nextElementSibling, detailsElement.querySelector('button'), lastLi?.querySelector('summary'));\n      }\n\n      summaryElement.nextElementSibling.removeEventListener('transitionend', addTrapFocus);\n    }\n\n    if (detailsElement === this.mainDetailsToggle) {\n      if (isOpen) event.preventDefault();\n      isOpen ? this.closeMenuDrawer(event, summaryElement) : this.openMenuDrawer(summaryElement);\n\n      if (window.matchMedia('(max-width: 990px)')) {\n        document.documentElement.style.setProperty('--viewport-height', `${window.innerHeight}px`);\n      }\n    } else {\n      setTimeout(() => {\n        detailsElement.classList.add('menu-opening');\n        summaryElement.setAttribute('aria-expanded', true);\n        parentMenuElement && parentMenuElement.classList.add('submenu-open');\n        !reducedMotion || reducedMotion.matches ? addTrapFocus() : summaryElement.nextElementSibling.addEventListener('transitionend', addTrapFocus);\n      }, 100);\n    }\n  }\n\n  openMenuDrawer(summaryElement) {\n    setTimeout(() => {\n      this.mainDetailsToggle.classList.add('menu-opening');\n    });\n    summaryElement.setAttribute('aria-expanded', true);\n    trapFocus(this.mainDetailsToggle, summaryElement);\n    document.body.classList.add(`overflow-hidden`);\n  }\n\n  closeMenuDrawer(event, elementToFocus = false) {\n    if (event === undefined) return;\n\n    this.mainDetailsToggle.classList.remove('menu-opening');\n\n    document.body.classList.remove(`overflow-hidden`);\n    removeTrapFocus(elementToFocus);\n    this.closeAnimation(this.mainDetailsToggle);\n\n    if (event instanceof KeyboardEvent) elementToFocus?.setAttribute('aria-expanded', false);\n  }\n\n  onFocusOut() {\n    setTimeout(() => {\n      if (this.mainDetailsToggle.hasAttribute('open') && !this.mainDetailsToggle.contains(document.activeElement))\n        this.closeMenuDrawer();\n    });\n  }\n\n  onCloseButtonClick(event) {\n    const detailsElement = event.currentTarget.closest('details');\n    if (detailsElement.classList.contains('menu-drawer-container')) {\n      this.mainDetailsToggle.querySelector('summary').click();\n    } else {\n      this.closeSubmenu(detailsElement);\n    }\n  }\n\n  closeSubmenu(detailsElement) {\n    const parentMenuElement = detailsElement.closest('.submenu-open');\n    parentMenuElement && parentMenuElement.classList.remove('submenu-open');\n    detailsElement.classList.remove('menu-opening');\n    detailsElement.querySelector('summary').setAttribute('aria-expanded', false);\n    removeTrapFocus(detailsElement.querySelector('summary'));\n\n    this.closeAnimation(detailsElement);\n  }\n\n  closeAnimation(detailsElement) {\n    let animationStart;\n\n    const handleAnimation = (time) => {\n      if (animationStart === undefined) {\n        animationStart = time;\n      }\n\n      const elapsedTime = time - animationStart;\n\n      if (elapsedTime < 400) {\n        window.requestAnimationFrame(handleAnimation);\n      } else {\n        detailsElement.removeAttribute('open');\n        const closestDetails = detailsElement.closest('details[open]');\n        if (closestDetails) {\n\n          if (closestDetails.matches('.js-header-drawer-sub')) {\n            // Designate the very last 'summary' element within the last <li> to be the last element. This should trigger focus to wrap round to the beginning again\n            const lastLi = closestDetails.querySelector('.menu-drawer__inner-submenu > .menu-drawer__menu > li:last-child');\n            trapFocus(closestDetails.querySelector('summary').nextElementSibling, detailsElement.querySelector('summary'), lastLi?.querySelector('summary'));\n\n          } else if (closestDetails.matches('.js-header-drawer-main')) {\n            const menuDrawer = document.getElementById('menu-drawer');\n            const menuDrawerDisclosure = menuDrawer.querySelector('header-drawer .disclosure__button');\n            trapFocus(menuDrawer, detailsElement.querySelector('summary'), menuDrawerDisclosure);\n\n          } else {\n            trapFocus(closestDetails, detailsElement.querySelector('summary'));\n          }\n        }\n      }\n    };\n\n    window.requestAnimationFrame(handleAnimation);\n  }\n}\ncustomElements.define('menu-drawer', MenuDrawer);\n\nclass HeaderDrawer extends MenuDrawer {\n  constructor() {\n    super();\n  }\n\n  bindEvents() {\n    super.bindEvents();\n    this.querySelectorAll(\n      'button:not(.localization-selector):not(.country-selector__close-button):not(.country-filter__reset-button)'\n    ).forEach((button) => button.addEventListener('click', this.onCloseButtonClick.bind(this))\n    );\n  }\n\n  openMenuDrawer(summaryElement) {\n    this.header = this.header || document.querySelector('.section-header');\n    this.borderOffset =\n      this.borderOffset || this.closest('.header-wrapper').classList.contains('header-wrapper--border-bottom') ? 1 : 0;\n    document.documentElement.style.setProperty(\n      '--header-bottom-position',\n      `${parseInt(this.header.getBoundingClientRect().bottom - this.borderOffset)}px`\n    );\n    this.header.classList.add('menu-open');\n\n    setTimeout(() => {\n      this.mainDetailsToggle.classList.add('menu-opening');\n    });\n\n    summaryElement.setAttribute('aria-expanded', true);\n    window.addEventListener('resize', this.onResize);\n    const menuDrawerDisclosure = this.header.querySelector('header-drawer .disclosure__button')\n    trapFocus(document.getElementById('menu-drawer'), summaryElement, menuDrawerDisclosure);\n    document.body.classList.add(`overflow-hidden`);\n  }\n\n  closeMenuDrawer(event, elementToFocus) {\n    if (!elementToFocus) return;\n    super.closeMenuDrawer(event, elementToFocus);\n    this.header.classList.remove('menu-open');\n    window.removeEventListener('resize', this.onResize);\n    event.target.setAttribute('aria-expanded', false);\n  }\n\n  onResize = () => {\n    this.header &&\n      document.documentElement.style.setProperty(\n        '--header-bottom-position',\n        `${parseInt(this.header.getBoundingClientRect().bottom - this.borderOffset)}px`\n      );\n    document.documentElement.style.setProperty('--viewport-height', `${window.innerHeight}px`);\n  };\n}\ncustomElements.define('header-drawer', HeaderDrawer);\n\nclass CustomNav extends HTMLElement {\n  constructor() {\n    super();\n    if (window.matchMedia('(hover: hover)').matches) {\n      this.listMenu = this.querySelector('.list-menu');\n      if (this.listMenu) {\n        this.mouseLeaveMenuHandler = this.onMouseMenuLeave.bind(this);\n        this.listMenu.addEventListener('mouseleave', this.mouseLeaveMenuHandler);\n      }\n    }\n  }\n\n  disconnectedCallback() {\n    if (this.listMenu && this.mouseLeaveMenuHandler) {\n      this.listMenu.removeEventListener('mouseleave', this.mouseLeaveMenuHandler);\n    }\n  }\n\n  onMouseMenuLeave() {\n    window.menuHoverIntentDelay = 50;\n  }\n}\ncustomElements.define('custom-nav', CustomNav);\n\nclass ModalDialog extends HTMLElement {\n  constructor() {\n    super();\n    // Handle close events\n    this.addEventListener('click', this.handleComponentClick.bind(this));\n\n    if (!this.dataset.preventClose) {\n      this.addEventListener('keyup', (event) => {\n        if (event.code.toUpperCase() === 'ESCAPE') this.hide();\n      });\n\n      if (this.classList.contains('media-modal')) {\n        this.addEventListener('pointerup', (event) => {\n          if (event.pointerType === 'mouse' && !event.target.closest('deferred-media, product-model')) this.hide();\n        });\n      } else {\n        this.addEventListener('click', (event) => {\n          if (event.target === this) this.hide();\n        });\n      }\n    }\n  }\n\n  connectedCallback() {\n    window.addEventListener('browserIsVeryIdle', () => {\n      // this.moveModal();\n      window.loadTemplateContent(this);\n    });\n  }\n\n  handleComponentClick(event) {\n    if (event.target.closest('[id^=\"ModalClose-\"]') || event.target.closest('[data-modal-close]')) {\n      this.hide(false);\n    }\n  }\n\n  moveModal() {\n    // Initialize the array if it doesn't exist\n    if (!window.movedModals) {\n      window.movedModals = [];\n    }\n\n    // Check if this modal has already been moved\n    if (window.movedModals.includes(this.id)) return;\n\n    window.requestAnimationFrame(() => {\n      const noMove = this.closest('.shopify-section.no-move');\n      if (!noMove) {\n        window.movedModals.push(this.id);\n        document.body.appendChild(this);\n        window.loadTemplateContent(this);\n      }\n    });\n  }\n\n  show(opener) {\n    this.moveModal();\n    window.loadTemplateContent(this);\n\n    // Load all lazy scripts immediately\n    this.querySelectorAll('lazy-script').forEach(script => script.loadScript());\n\n    if (this.dataset.isAlert) {\n      this.setAttribute('open', '');\n    } else {\n      if (opener) this.openedBy = opener;\n      setTimeout(() => {\n        const popup = this.querySelector('.template-popup');\n        document.body.classList.add('overflow-hidden');\n        this.setAttribute('open', '');\n        if (popup) popup.loadContent();\n        trapFocus(this, this.querySelector('[role=\"dialog\"]'));\n        window.pauseAllMedia();\n\n        if (this.classList.contains('quick-add-modal')) {\n          publish('quick-buy-action-complete');\n        }\n        window.makeTablesResponsive();\n      }, 100);\n    }\n  }\n\n  hide(preventAnimation) {\n    const doHide = () => {\n      if (!this.dataset.isAlert) {\n        this.setAttribute('open', '');\n        document.body.classList.remove('overflow-hidden');\n        if (this.openedBy) removeTrapFocus(this.openedBy);\n        window.pauseAllMedia();\n      }\n\n      document.body.dispatchEvent(new CustomEvent('modalClosed'));\n      this.removeAttribute('open');\n      this.classList.remove('popup-modal--closing');\n    }\n\n    if (preventAnimation) {\n      doHide();\n    } else {\n      this.classList.add('popup-modal--closing');\n      setTimeout(doHide, 320);\n    }\n  }\n}\ncustomElements.define('modal-dialog', ModalDialog);\n\nclass ProductCard extends HTMLElement {\n  constructor() {\n    super();\n\n    this.mouseEnterHandler = this.mouseEnterHandler || this.handleMouseEnter.bind(this);\n    this.showSwatchHandler = this.showSwatchHandler || this.showSwatchImage.bind(this);\n    this.hideSwatchHandler = this.hideSwatchHandler || this.hideSwatchImage.bind(this);\n    this.hoverButtonHandler = this.hoverButtonHandler || this.clickHoverButton.bind(this);\n\n    this.swatchesPreloaded = false;\n    this.hasSwatches = this.querySelector('.swatch[data-variant-media]') !== null;\n\n    this.hoverButton = this.querySelector('.card__hover-button');\n    this.productForm = this.querySelector('product-form');\n    this.productBulkForm = this.querySelector('quick-add-bulk');\n\n    window.initScriptOnDemand(this, this.init.bind(this), 0);\n  }\n\n  init() {\n    if (this.hoverButton) {\n      this.hoverButton.addEventListener('click', this.hoverButtonHandler);\n    }\n\n    if (this.hasSwatches) {\n      this.createSwatchHoverImage();\n      this.addEventListener('mouseenter', this.mouseEnterHandler, { passive: true });\n      this.addEventListener('mouseover', this.showSwatchHandler, { passive: true });\n      this.addEventListener('mouseleave', this.hideSwatchHandler, { passive: true });\n\n      // Add focus and blur events for keyboard navigation\n      this.addEventListener('focusin', this.showSwatchHandler, { passive: true });\n      this.addEventListener('focusout', this.hideSwatchHandler, { passive: true });\n\n      // Add touchstart event for mobile interactions\n      this.addEventListener('touchstart', this.showSwatchHandler, { passive: true });\n    }\n\n    if (this.productForm) {\n      customElements.whenDefined('product-form').then(() => {\n        this.productForm.init();\n      });\n    }\n\n    if (this.productBulkForm) {\n      customElements.whenDefined('quick-add-bulk').then(() => {\n        this.productBulkForm.init();\n      });\n    }\n  }\n\n  disconnectedCallback() {\n    if (this.hoverButton) {\n      this.hoverButton.removeEventListener('click', this.hoverButtonHandler);\n    }\n\n    if (this.hasSwatches) {\n      this.removeEventListener('mouseenter', this.mouseEnterHandler);\n      this.removeEventListener('mouseover', this.showSwatchHandler);\n      this.removeEventListener('mouseleave', this.hideSwatchHandler);\n      this.removeEventListener('focusin', this.showSwatchHandler);\n      this.removeEventListener('focusout', this.hideSwatchHandler);\n      this.removeEventListener('touchstart', this.showSwatchHandler);\n    }\n  }\n\n  clickHoverButton() {\n    this.hoverButton.setAttribute('aria-disabled', true);\n    this.hoverButton.classList.add('loading');\n    this.hoverButton.querySelector('.loading__spinner').classList.remove('hidden', 'spinning-complete');\n\n    document.addEventListener('quick-buy-action-complete', () => {\n      this.hoverButton.removeAttribute('aria-disabled');\n      this.hoverButton.classList.remove('loading');\n      this.hoverButton.querySelector('.loading__spinner').classList.add('hidden', 'spinning-complete');\n    }, { once: true });\n\n    const quickAddOpenButton = this.querySelector('modal-opener .quick-add__submit') || this.querySelector('product-form .quick-add__submit') || this.querySelector('quick-add-bulk .quantity__button-increase');\n    quickAddOpenButton?.click();\n  }\n\n  createSwatchHoverImage() {\n    // Create an empty img tag within .card__media div.media\n    this.mediaContainer = this.querySelector('.card__media .media');\n    if (this.mediaContainer) {\n      // Find the first existing img in the container\n      const existingImg = this.mediaContainer.querySelector('img');\n\n      // Create a new img tag with the same class as the existing img\n      this.swatchHoverImg = document.createElement('img');\n      this.swatchHoverImg.className = existingImg ? existingImg.className : '';\n      this.swatchHoverImg.style.display = 'none';\n      this.swatchHoverImg.classList.add('swatch-hover-image');\n      this.swatchHoverImg.alt = existingImg ? existingImg.alt : '';\n\n      this.mediaContainer.appendChild(this.swatchHoverImg);\n    }\n  }\n\n  handleMouseEnter(event) {\n    // Preload swatch images when mouse first enters\n    if (!this.swatchesPreloaded) this.preloadSwatchImages();\n  }\n\n  hideSwatchImage(event) {\n    if (this.swatchHoverImg) {\n      this.swatchHoverImg.style.display = 'none';\n      this.swatchHoverImg.classList.remove('show-swatch-image');\n    }\n  }\n\n  showSwatchImage(event) {\n    if (event.target.matches('button.swatch[data-variant-media]')) {\n      const imageUrl = event.target.dataset.variantMedia;\n      if (imageUrl && this.swatchHoverImg) {\n        this.swatchHoverImg.src = imageUrl;\n        this.swatchHoverImg.style.display = 'block';\n        this.swatchHoverImg.classList.add('show-swatch-image');\n      }\n    }\n  }\n\n  preloadSwatchImages() {\n    const swatches = this.querySelectorAll('.swatch[data-variant-media]');\n    swatches.forEach(swatch => {\n      if (swatch.dataset.variantMedia) {\n        const img = new Image();\n        img.src = swatch.dataset.variantMedia;\n      }\n    });\n    this.swatchesPreloaded = true;\n  }\n}\ncustomElements.define('product-card', ProductCard);\n\nclass CustomPopup extends ModalDialog {\n  constructor() {\n    super();\n    this.delaySeconds = parseInt(this.dataset.delaySeconds);\n\n    if (Shopify.designMode) {\n      if (!this.dataset.teOnly) {\n        document.addEventListener('shopify:section:select', (event) => {\n          if (event.target === this.closest('.shopify-section')) {\n            this.show();\n          } else {\n            this.hide(true);\n          }\n        });\n\n        document.addEventListener('shopify:section:load', (event) => {\n          if (event.target === this.closest('.shopify-section')) this.show();\n        });\n\n        document.addEventListener('shopify:section:deselect', () => {\n          this.hide(true);\n        });\n\n        // Bind click triggered popups in the Theme Editor\n        if ((this.dataset.visibility === \"mobile\" && window.matchMedia('(max-width: 749px)').matches) ||\n          (this.dataset.visibility === \"desktop\" && window.matchMedia('(min-width: 750px)').matches) ||\n          (this.dataset.visibility === \"both\")) {\n          if (this.dataset.trigger && this.dataset.trigger === 'click') {\n            // Listen for clicks on any anchor links which end with this.dataset.popupTriggerId. Do a this.show() for those clicks.\n            this.clickTriggerHandler = this.clickTriggerHandler || this.handleClickTrigger.bind(this);\n            document.addEventListener('click', this.clickTriggerHandler);\n          }\n        }\n      } else {\n        const closedElements = JSON.parse(localStorage.getItem('theme-closed-elements')) || [];\n        if (!closedElements.includes(this.dataset.popupId)) {\n          this.setAttribute('open', '');\n        }\n      }\n    } else {\n      if ((this.dataset.visibility === \"mobile\" && window.matchMedia('(max-width: 749px)').matches) ||\n        (this.dataset.visibility === \"desktop\" && window.matchMedia('(min-width: 750px)').matches) ||\n        (this.dataset.visibility === \"both\")) {\n\n        const closedElements = JSON.parse(localStorage.getItem('theme-closed-elements')) || [];\n        if (this.dataset.mode === \"test\" || (this.dataset.trigger && this.dataset.trigger === 'click') || !closedElements.includes(this.dataset.popupId)) {\n          if (!this.dataset.trigger || this.dataset.trigger.length === 0 || this.dataset.trigger === 'delay') {\n            setTimeout(() => {\n              this.show();\n\n              if (this.dataset.autoClose && this.dataset.autoClose > 0) {\n                setTimeout(() => {\n                  this.hide();\n                }, this.dataset.autoClose * 1000);\n              }\n            }, this.delaySeconds * 1000);\n\n          } else if (this.dataset.trigger === 'exit_intent') {\n            // Listen for exit intent\n            this.storeLeaveHandler = this.storeLeaveHandler || this.handleStoreLeave.bind(this);\n            document.body.addEventListener('mouseleave', this.storeLeaveHandler);\n\n          } else if (this.dataset.trigger === 'copy_to_clipboard') {\n            // Listen for copy to clipboard\n            this.copyToClipboardHandler = this.copyToClipboardHandler || this.handleCopyToClipboard.bind(this);\n            document.addEventListener('copy', this.copyToClipboardHandler);\n\n          } else if (this.dataset.trigger === 'click') {\n            // Listen for clicks on any anchor links which end with this.dataset.popupTriggerId. Do a this.show() for those clicks.\n            this.clickTriggerHandler = this.clickTriggerHandler || this.handleClickTrigger.bind(this);\n            document.addEventListener('click', this.clickTriggerHandler);\n\n          }\n        }\n      }\n    }\n\n    // Age verifier 'no' button\n    const ageVerifierNoButton = this.querySelector('.age_verifier__no-button');\n    if (ageVerifierNoButton) {\n      ageVerifierNoButton.addEventListener('click', (event) => {\n        event.target.classList.add('no-active');\n      });\n    }\n  }\n\n  handleClickTrigger(event) {\n    if (this.dataset.popupTriggerId && this.dataset.popupTriggerId.length > 0) {\n      const target = event.target.closest('a');\n      if (target && target.hash === `#${this.dataset.popupTriggerId}`) {\n        event.preventDefault();\n        this.show();\n      }\n    }\n  }\n\n  handleCopyToClipboard() {\n    const closedElements = JSON.parse(localStorage.getItem('theme-closed-elements')) || [];\n    if(this.dataset.mode === \"test\" || !closedElements.includes(this.dataset.popupId)) this.show();\n  }\n\n  handleStoreLeave(event) {\n    const closedElements = JSON.parse(localStorage.getItem('theme-closed-elements')) || [];\n    if ((this.dataset.mode === \"test\" || !closedElements.includes(this.dataset.popupId)) && event.clientY < 0) this.show();\n  }\n\n  hide(preventAnimation) {\n    if (!Shopify.designMode || this.dataset.teOnly) {\n      const closedElements = JSON.parse(localStorage.getItem('theme-closed-elements')) || [];\n      if (!closedElements.includes(this.dataset.popupId)) {\n        closedElements.push(this.dataset.popupId);\n      }\n      localStorage.setItem('theme-closed-elements', JSON.stringify(closedElements));\n    }\n    super.hide(preventAnimation);\n  }\n}\ncustomElements.define('custom-popup', CustomPopup);\n\nclass ModalOpener extends HTMLElement {\n  constructor() {\n    super();\n    const button = this.querySelector('button:not(.product__media-toggle-play)');\n\n    if (!button) return;\n    button.addEventListener('click', () => {\n      const elements = document.querySelectorAll(this.getAttribute('data-modal'));\n      const modal = elements.length ? elements[elements.length - 1] : null;\n      if (modal) modal.show(button);\n    });\n  }\n}\ncustomElements.define('modal-opener', ModalOpener);\n\nclass ScriptLoader {\n  static loadedScripts = {};\n\n  static loadScript(url, onloadCallback) {\n    if (ScriptLoader.loadedScripts[url]) {\n      return;\n    }\n\n    const scriptTag = document.createElement('script');\n    scriptTag.src = url;\n\n    if (onloadCallback && typeof onloadCallback === 'function') {\n      scriptTag.onload = onloadCallback;\n    }\n\n    const firstScriptTag = document.getElementsByTagName('script')[0];\n    firstScriptTag.parentNode.insertBefore(scriptTag, firstScriptTag);\n\n    ScriptLoader.loadedScripts[url] = true;\n  }\n}\n\nwindow.onYouTubeIframeAPIReady = () => {\n  document.dispatchEvent(new CustomEvent('youtubeApiLoaded'));\n}\n\nclass CustomVideo extends HTMLElement {\n  constructor() {\n    super();\n    this.video = this.querySelector('.js-video');\n    this.contentTimerElem = this.closest('[data-content-timer]');\n\n    if (this.contentTimerElem) {\n      if (this.closest('.banner--mobile-bottom') && window.matchMedia('(max-width: 749px)').matches) {\n        // Show immediately if we're on mobile and text is below\n        this.contentTimerElem.setAttribute('data-content-timer', 'show');\n      } else {\n        this.playTime = 0;\n        this.timerCompleted = false;\n        this.contentTimer = parseInt(this.contentTimerElem.dataset.contentTimer);\n      }\n    }\n\n    if (this.video.classList.contains('js-youtube')) {\n      this.type = 'youtube';\n      this.aspectRatio = parseFloat(this.video.dataset.aspectRatio);\n    } else if (this.video.classList.contains('js-vimeo')) {\n      this.type = 'vimeo';\n      this.aspectRatio = parseFloat(this.video.dataset.aspectRatio);\n    } else {\n      this.type = 'html5';\n    }\n\n    this.deferredMedia = this.closest('.deferred-media');\n    this.playButton = this.closest('.section').querySelector('.deferred-media__poster-button');\n    if (this.playButton) {\n      this.playButton.addEventListener('click', this.playPause.bind(this));\n\n      if (this.type === 'youtube' && document.body.classList.contains('tab-active')) {\n        setTimeout(() => {\n          const focusableElements = getFocusableElements(this.closest('.section'));\n          if (focusableElements && focusableElements.length > 0) focusableElements[0].focus();\n        }, 1000);\n      }\n    }\n  }\n\n  connectedCallback() {\n    if (this.type === 'html5') {\n      this.bindHtmlVideoListeners();\n    } else if (this.type === 'youtube') {\n      this.bindYoutubeVideoListeners();\n    } else if (this.type === 'vimeo') {\n      this.bindVimeoVideoListeners();\n    }\n  }\n\n  scaleIframe() {\n    const width = this.video.clientHeight * this.aspectRatio;\n    const divisor = this.video.clientWidth > width ? this.video.clientWidth / width : width / this.video.clientWidth;\n    const scale = (Math.ceil(divisor * 100) / 100) + 0.2;\n    this.style.setProperty('--scale-factor', scale.toString());\n  }\n\n  playbackStarted(isInit) {\n    if (isInit !== true) {\n      this.deferredMedia.setAttribute('data-state', 'loaded');\n    }\n\n    if (this.playButton && isInit !== true) {\n      this.playButton.setAttribute('data-state', 'playing');\n    }\n\n    if (this.contentTimer && !this.isTimedContent && !this.timerCompleted) {\n      this.logInterval = setInterval(() => {\n        if (this.isVideoPlaying) {\n          this.playTime++;\n          if (this.playTime >= this.contentTimer) {\n            this.contentTimerElem.setAttribute('data-content-timer', 'show');\n            this.timerCompleted = true;\n            clearInterval(this.logInterval);\n            this.isTimedContent = false;\n          }\n        }\n      }, 1000);\n      this.isTimedContent = true;\n      this.isVideoPlaying = true;\n    } else {\n      this.isVideoPlaying = true;\n    }\n  }\n\n  playbackPaused() {\n    if (this.playButton) this.playButton.setAttribute('data-state', 'paused');\n    if (this.contentTimer) this.isVideoPlaying = false;\n  }\n\n  playbackEnded() {\n    if (this.playButton) this.playButton.setAttribute('data-state', 'ended');\n\n    if (this.dataset.endState === 'pause_and_cover') {\n      const stateElem = this.closest('[data-state]');\n      if (stateElem) {\n        stateElem.setAttribute('data-state', 'ended');\n      }\n\n    } else if (this.dataset.endState === 'loop') {\n      this.playPause();\n    }\n\n    if (this.contentTimer) {\n      clearInterval(this.logInterval);\n      this.logInterval = null;\n      this.isTimedContent = false;\n    }\n  }\n\n  playPause() {\n    if (this.type === 'html5') {\n      if (this.video.paused) {\n        requestAnimationFrame(() => this.video.play());\n        if (this.playButton) this.playButton.setAttribute('data-state', 'playing');\n      } else {\n        this.video.pause();\n        if (this.playButton) this.playButton.setAttribute('data-state', 'paused');\n      }\n    } else if (this.type === 'youtube') {\n      const playerState = this.player.getPlayerState();\n      if (playerState === YT.PlayerState.PLAYING) {\n        this.player.pauseVideo();\n      } else {\n        requestAnimationFrame(() => this.player.playVideo());\n      }\n    } else if (this.type === 'vimeo') {\n      this.player.getPaused().then((paused) => {\n        if (paused) {\n          requestAnimationFrame(() => this.player.play());\n        } else {\n          this.player.pause();\n        }\n      }).catch(function(error) {\n        console.error('Error with Vimeo Player:', error);\n      });\n    }\n  }\n\n  bindHtmlVideoListeners() {\n    setTimeout(this.playbackStarted.bind(this, true), 500);\n    this.video.addEventListener('play', this.playbackStarted.bind(this));\n    this.video.addEventListener('pause', this.playbackPaused.bind(this));\n    this.video.addEventListener('ended', this.playbackEnded.bind(this));\n  }\n\n  bindYoutubeVideoListeners() {\n    const initYoutubePlayer = () => {\n      setTimeout(this.playbackStarted.bind(this, true), 500);\n\n      this.player = new YT.Player(this.dataset.videoId, {\n        events: {\n          'onStateChange': (event) => {\n            switch (event.data) {\n              case YT.PlayerState.PLAYING:\n                this.playbackStarted();\n                break;\n              case YT.PlayerState.PAUSED:\n                this.playbackPaused();\n                break;\n              case YT.PlayerState.ENDED:\n                this.playbackEnded();\n                break;\n            }\n          }\n        }\n      });\n\n      this.scaleIframe();\n      window.addEventListener('resizeend', this.scaleIframe.bind(this));\n    }\n\n    if (typeof YT === 'undefined') {\n      document.addEventListener('youtubeApiLoaded', initYoutubePlayer, { once: true });\n      ScriptLoader.loadScript(\"https://www.youtube.com/iframe_api\");\n    } else {\n      initYoutubePlayer();\n    }\n  }\n\n  bindVimeoVideoListeners() {\n    const initVimeoPlayer = () => {\n      setTimeout(this.playbackStarted.bind(this, true), 500);\n      this.player = new Vimeo.Player(this.dataset.videoId);\n      this.player.on('play', this.playbackStarted.bind(this));\n      this.player.on('pause', this.playbackPaused.bind(this));\n      this.player.on('ended', this.playbackEnded.bind(this));\n      this.scaleIframe();\n      window.addEventListener('resizeend', this.scaleIframe.bind(this));\n    }\n\n    if (typeof Vimeo === 'undefined') {\n      document.addEventListener('vimeoApiLoaded', initVimeoPlayer, { once: true });\n      ScriptLoader.loadScript(\"https://player.vimeo.com/api/player.js\", () => {\n        document.dispatchEvent(new CustomEvent('vimeoApiLoaded'));\n      });\n    } else {\n      initVimeoPlayer();\n    }\n  }\n}\ncustomElements.define('custom-video', CustomVideo);\n\nclass DeferredMedia extends HTMLElement {\n  constructor() {\n    super();\n    const poster = this.querySelector('[id^=\"Deferred-Poster-\"]');\n    if (poster) {\n      poster.addEventListener('click', () => {\n        this.classList.add('deferred-media__poster-button--active');\n        this.loadContent();\n        }, {once: true});\n    }\n\n    if (!this.closest('.product') && !Shopify.designMode) {\n      this.addIntersectionObserver();\n    }\n  }\n\n  addIntersectionObserver() {\n    if ('IntersectionObserver' in window === false) return;\n\n    const rootMarginValue = window.innerWidth < 750 ? '0px 0px 500px 0px' : '0px 0px 900px 0px';\n\n    const observer = new IntersectionObserver((entries) => {\n      entries.forEach((entry) => {\n        if (entry.isIntersecting) {\n          this.loadContent(false, false);\n          observer.unobserve(this);\n        }\n      });\n    }, { rootMargin: rootMarginValue });\n\n    observer.observe(this);\n  }\n\n  loadContent(focus = true, pauseExistingMedia = true) {\n    if (pauseExistingMedia) window.pauseAllMedia();\n    if (!this.getAttribute('loaded')) {\n      let content;\n\n      if (this.tagName === \"PRODUCT-MODEL\") {\n        content = document.createElement('div');\n        content.appendChild(this.querySelector('template').content.firstElementChild.cloneNode(true));\n      } else {\n        content = this.querySelector('template').content.firstElementChild.cloneNode(true);\n        this.appendChild(content);\n      }\n\n      this.setAttribute('loaded', true);\n\n      const media = content.querySelector('video, model-viewer, iframe');\n      if (media) {\n        if (focus) media.focus();\n        if (media.nodeName == 'VIDEO' && media.getAttribute('autoplay')) {\n          // force autoplay for safari\n          media.play();\n        }\n      }\n\n      window.makeTablesResponsive();\n    }\n  }\n}\ncustomElements.define('deferred-media', DeferredMedia);\n\nclass SliderComponent extends HTMLElement {\n  constructor() {\n    super();\n    this.DEBOUNCE_TIMEOUT = this.closest('media-gallery') ? 20 : 100;\n    window.initScriptOnDemand(this, this.init.bind(this));\n  }\n\n  init() {\n    this.slider = this.querySelector('[id^=\"Slider-\"]');\n    this.sliderItems = this.querySelectorAll('[id^=\"Slide-\"]');\n    this.enableSliderLooping = false;\n    this.currentPageElement = this.querySelector('.slider-counter--current');\n    this.pageTotalElement = this.querySelector('.slider-counter--total');\n    this.prevButton = this.querySelector('button[name=\"previous\"]');\n    this.nextButton = this.querySelector('button[name=\"next\"]');\n    this.isStacked = this.slider.dataset.slideType === 'stacked';\n\n    this.debouncedInitPages = debounce(this.initPages.bind(this), Shopify.designMode ? 200 : 0);\n\n    this.scrollTrack = this.querySelector('.slider-scrollbar__track');\n    this.scrollIndicator = this.querySelector('.slider-scrollbar__indicator');\n\n    this.debouncedUpdate = window.debounce(this.update.bind(this), this.DEBOUNCE_TIMEOUT);\n\n    if (!this.slider) return;\n\n    this.initPages();\n    this.resizeObserver = new ResizeObserver(() => this.debouncedInitPages());\n    this.resizeObserver.observe(this.slider);\n\n    this.slider.addEventListener('scroll', this.debouncedUpdate.bind(this), { passive: true });\n\n    if (this.nextButton && this.prevButton) {\n      this.prevButton.addEventListener('click', this.onButtonClick.bind(this));\n      this.nextButton.addEventListener('click', this.onButtonClick.bind(this));\n    }\n\n    // Track scroll bar progress\n    if (this.scrollTrack && this.scrollIndicator) {\n      this.sliderScrollHandler = this.onSliderScroll.bind(this);\n      this.slider.addEventListener('scroll', this.sliderScrollHandler, { passive: true });\n      window.addEventListener('resize', this.sliderScrollHandler);\n    }\n\n    // Scroll bits\n    if (this.scrollTrack && window.matchMedia('(pointer: fine)').matches) {\n      this.sliderLeft = window.innerWidth - this.slider.getBoundingClientRect().right;\n      if (!this.sliderLeft) {\n        this.sliderLeft = (this.slider.clientWidth - this.slider.clientWidth) / 2;\n      }\n\n      this.sliderMousedownHandler = this.onSliderMouseDown.bind(this);\n      this.sliderMousemoveHandler = this.onSliderMouseMove.bind(this);\n      this.sliderMouseupHandler = this.onSliderMouseUp.bind(this);\n\n      this.slider.addEventListener('mousedown', this.sliderMousedownHandler);\n      this.slider.addEventListener('mouseup', this.sliderMouseupHandler);\n      this.slider.addEventListener('mouseleave', this.sliderMouseupHandler);\n      this.slider.addEventListener('mousemove', this.sliderMousemoveHandler);\n\n      if (this.scrollIndicator) {\n        this.scrollIndicatorLeft = window.innerWidth - this.scrollIndicator.getBoundingClientRect().right;\n        if (!this.scrollIndicatorLeft) {\n          this.scrollIndicatorLeft = (this.scrollIndicator.clientWidth - this.scrollIndicator.clientWidth) / 2;\n        }\n\n        this.scrollMultiplier = 100 / (100 - (100 / parseInt(this.scrollTrack.dataset.numSlides)));\n        this.scrollIndicatorMousedownHandler = this.onScrollIndicatorMouseDown.bind(this);\n        this.scrollIndicatorMousemoveHandler = this.onScrollIndicatorMouseMove.bind(this);\n        this.scrollIndicatorMouseupHandler = this.onScrollIndicatorMouseUp.bind(this);\n\n        this.scrollIndicator.addEventListener('mousedown', this.scrollIndicatorMousedownHandler);\n        document.addEventListener('mouseup', this.scrollIndicatorMouseupHandler);\n        document.addEventListener('mousemove', this.scrollIndicatorMousemoveHandler);\n      }\n    }\n\n    if (this.isStacked) {\n      // Bind touch listeners for swiping\n      this.addEventListener('touchstart', this.onTouchStart.bind(this), { passive: true} );\n      this.addEventListener('touchmove', debounce(this.onTouchMove.bind(this), 200), { passive: true });\n\n      // Watch for size change\n      if (this.slider.dataset.slideMobile === 'true') {\n        const _this = this;\n\n        const updateMobileSlideSettings = function () {\n          const isMobile = window.matchMedia('(max-width: 749px)').matches;\n          if (isMobile) {\n            if (_this.slider.dataset.slideType !== 'slide') {\n              _this.isStacked = false;\n              _this.oldSlideAnimation = _this.slider.dataset.slideAnimation;\n              _this.oldSlideType = _this.slider.dataset.slideType;\n              _this.slider.setAttribute('data-slide-animation', 'slide');\n              _this.slider.setAttribute('data-slide-type', 'slide');\n              _this.resetPages();\n            }\n          } else if (_this.slider.dataset.slideType === 'slide') {\n            _this.isStacked = true;\n            _this.slider.setAttribute('data-slide-animation', _this.oldSlideAnimation);\n            _this.slider.setAttribute('data-slide-type', _this.oldSlideType);\n            _this.resetPages();\n          }\n        }\n\n        window.addEventListener('resizeend', updateMobileSlideSettings);\n        updateMobileSlideSettings();\n      }\n    }\n\n    // Load all images after a few seconds\n    setTimeout(() => {\n      this.querySelectorAll('.slideshow__media.hidden').forEach(media => { media.classList.remove('hidden'); });\n    }, 4000);\n  }\n\n  disconnectedCallback(){\n    if (this.resizeObserver) this.resizeObserver.disconnect();\n\n    if (this.sliderScrollHandler) window.removeEventListener('resize', this.sliderScrollHandler);}\n\n  /**\n   * Scroll slider scroll\n   */\n  onSliderScroll() {\n    if (!this.indicatorMousedown) {\n      // Update the scroll indicator\n      const scrollableWidth = this.slider.scrollWidth - this.slider.clientWidth;\n      const scrollPosition = this.slider.scrollLeft;\n      const scrollPercentage = scrollableWidth > 0 ? (scrollPosition / scrollableWidth) * 100 : 0;\n\n      const maxLeft = this.scrollTrack.clientWidth -  this.scrollIndicator.clientWidth;\n      const leftPosition = (scrollPercentage * maxLeft) / 100;\n      this.scrollIndicator.style.left = `${leftPosition}px`;\n    }\n  }\n\n  /**\n   * Mouse down dragging the slider\n   * @param event\n   */\n  onSliderMouseDown(event) {\n    this.mousedown = true;\n    this.slider.classList.add('drag-active');\n    this.sliderScrollLeft = this.slider.scrollLeft;\n    this.sliderX = event.pageX - this.sliderLeft;\n  }\n\n  /**\n   * Mouse up from dragging the slider\n   */\n  onSliderMouseUp() {\n    this.slider.classList.remove('is-dragging');\n    this.mousedown = false;\n  }\n\n  /**\n   * The slider is being dragged\n   * @param event\n   */\n  onSliderMouseMove(event) {\n    if (!this.mousedown) return;\n    event.preventDefault();\n    this.slider.classList.add('is-dragging');\n    this.slider.scrollLeft = this.sliderScrollLeft - (event.pageX - this.sliderLeft - this.sliderX);\n  }\n\n  /**\n   * Mouse down dragging the scroll indicator\n   * @param event\n   */\n  onScrollIndicatorMouseDown(event) {\n    document.body.classList.add('body-drag-active');\n    this.slider.classList.add('drag-active');\n    this.indicatorMousedown = true;\n    this.scrollIndicatorScrollLeft = parseInt(this.scrollIndicator.style.left.replace('px', '')) || 0;\n    this.scrollIndicatorX = event.pageX - this.scrollIndicatorLeft;\n  }\n\n  /**\n   * Mouse up from dragging the  scroll indicator\n   */\n  onScrollIndicatorMouseUp() {\n    document.body.classList.remove('body-drag-active');\n    this.indicatorMousedown = false;\n  }\n\n  /**\n   * The scroll indicator is being dragged\n   * @param event\n   */\n  onScrollIndicatorMouseMove(event) {\n    if (!this.indicatorMousedown) return;\n    event.preventDefault();\n\n    const left = this.scrollIndicatorScrollLeft +  (event.pageX - this.scrollIndicatorLeft - this.scrollIndicatorX);\n    let actualLeft;\n    if (left <= 0) {\n      actualLeft = 0;\n    } else if (left > (this.scrollTrack.clientWidth - this.scrollIndicator.clientWidth)) {\n      actualLeft = this.scrollTrack.clientWidth - this.scrollIndicator.clientWidth;\n    } else {\n      actualLeft = left;\n    }\n\n    this.scrollIndicator.style.left = `${actualLeft}px`;\n\n    // Get the % scroll complete\n    const scrollableWidth = this.scrollTrack.clientWidth;\n    const scrollPercentage = ((scrollableWidth > 0 ? (actualLeft / scrollableWidth) * 100 : 0) * this.scrollMultiplier);\n    const scrollableSliderWidth = this.slider.scrollWidth - this.slider.clientWidth;\n    this.slider.scrollLeft = (scrollableSliderWidth * scrollPercentage) / 100;\n  }\n\n  onTouchStart(event) {\n    if (this.isStacked) this.touchStart = event.changedTouches[0].screenX;\n  }\n\n  onTouchMove(event) {\n    if (this.isStacked && this.prevButton && this.nextButton) {\n      if (event.changedTouches[0].screenX < this.touchStart - 100) this.nextButton.click();\n      if (event.changedTouches[0].screenX > this.touchStart + 100) this.prevButton.click();\n    } else {\n      this.pause();\n    }\n  }\n\n  initPages() {\n    this.sliderItemsToShow = Array.from(this.sliderItems).filter((element) => element.clientWidth > 0);\n    if (this.sliderItemsToShow.length < 2) return;\n\n    if (this.isStacked) {\n      this.slidesPerPage = 1;\n    } else {\n      this.sliderItemOffset = this.sliderItemsToShow[1].offsetLeft - this.sliderItemsToShow[0].offsetLeft;\n      this.slidesPerPage = Math.floor(\n        (this.slider.clientWidth - this.sliderItemsToShow[0].offsetLeft) / this.sliderItemOffset\n      );\n    }\n\n    this.totalPages = this.sliderItemsToShow.length - this.slidesPerPage + 1;\n    this.update();\n  }\n\n  resetPages() {\n    this.sliderItems = this.querySelectorAll('[id^=\"Slide-\"]');\n    this.initPages();\n  }\n\n  update() {\n    if (!this.slider) return;\n\n    const previousPage = this.currentPage;\n\n    if (this.isStacked) {\n      this.currentPage = parseInt(this.querySelector('.slideshow__slide[aria-hidden=\"false\"]').dataset.slideIndex);\n    } else {\n      this.currentPage = Math.round(this.slider.scrollLeft / this.sliderItemOffset) + 1;\n    }\n\n    if (this.currentPageElement && this.pageTotalElement) {\n      this.currentPageElement.textContent = this.currentPage;\n      this.pageTotalElement.textContent = this.totalPages;\n    }\n\n    if (this.currentPage != previousPage) {\n      // Eager load the next set of images\n      const currentSlideElem = this.sliderItemsToShow[this.currentPage - 1];\n      if (currentSlideElem && currentSlideElem.nextElementSibling) {\n        const nextHiddenMedia = currentSlideElem.nextElementSibling.querySelector('.slideshow__media.hidden');\n        if (nextHiddenMedia) nextHiddenMedia.classList.remove('hidden');\n\n        // currentSlideElem.nextElementSibling.querySelectorAll('img[loading=\"lazy\"]').forEach(img => {\n        //   img.loading = 'eager';\n        // });\n      }\n\n      this.dispatchEvent(\n        new CustomEvent('slideChanged', {\n          detail: {\n            currentPage: this.currentPage,\n            currentElement: currentSlideElem,\n          },\n        })\n      );\n    }\n\n    if (this.enableSliderLooping) {\n      this.slider.classList.add('slider--scroll-active');\n      return;\n    }\n\n    let isStillCarousel = false;\n\n    if (this.prevButton && this.nextButton) {\n      if (this.isSlideVisible(this.sliderItemsToShow[0]) && this.slider.scrollLeft === 0) {\n        this.prevButton.setAttribute('disabled', 'disabled');\n      } else {\n        this.prevButton.removeAttribute('disabled');\n        isStillCarousel = true;\n      }\n\n      if (this.isSlideVisible(this.sliderItemsToShow[this.sliderItemsToShow.length - 1])) {\n        this.nextButton.setAttribute('disabled', 'disabled');\n      } else {\n        this.nextButton.removeAttribute('disabled');\n        isStillCarousel = true;\n      }\n    }\n\n    this.slider.classList.toggle('slider--scroll-active', isStillCarousel);\n\n    if (isStillCarousel) {\n      this.classList.replace('slider-component-desktop_', 'slider-component-desktop');\n      this.slider.classList.replace('slider--desktop_', 'slider--desktop');\n    } else {\n      this.classList.replace('slider-component-desktop', 'slider-component-desktop_');\n      this.slider.classList.replace('slider--desktop', 'slider--desktop_');\n    }\n  }\n\n  isSlideVisible(element, offset = 0) {\n    if (this.isStacked) {\n      return element.getAttribute('aria-hidden') === 'false';\n    } else {\n      if (this.slider.classList.contains('slider--desktop_')){\n        // Check if the passed element has wrapped by comparing it to the first carousel item\n        return this.sliderItemsToShow[0].offsetTop === element.offsetTop;\n      } else {\n        const lastVisibleSlide = this.slider.clientWidth + this.slider.scrollLeft - offset;\n        return element.offsetLeft + element.clientWidth <= lastVisibleSlide && element.offsetLeft >= this.slider.scrollLeft;\n      }\n    }\n  }\n\n  getClosestElementToLeft(position) {\n    let closest = null;\n    let closestDistance = Infinity;\n\n    for (const child of this.sliderItems) {\n      const childLeft = child.offsetLeft;\n      const distance = Math.abs(childLeft - position);\n\n      if (distance < closestDistance) {\n        closest = child;\n        closestDistance = distance;\n      }\n    }\n\n    return closest;\n  }\n\n  setSlidePosition(position, nextPageElem) {\n    this.slider.classList.remove('drag-active');\n\n    if (this.isStacked && nextPageElem) {\n      const previousPageElem = this.sliderItemsToShow[this.currentPage - 1];\n\n      if (this.sliderItemsToShow.length === 2 && this.prevButton && this.nextButton) {\n        this.nextButton.classList.add('pointer-events-none');\n        this.prevButton.classList.add('pointer-events-none');\n      }\n\n      this.slider.classList.add('pause-transition');\n\n      setTimeout(() => {\n        this.slider.classList.remove('pause-transition');\n      }, 1);\n\n      setTimeout(() => {\n        previousPageElem?.classList.add('leaving');\n        nextPageElem.classList.remove('leaving');\n\n        previousPageElem?.setAttribute('aria-hidden', 'true');\n        nextPageElem.setAttribute('aria-hidden', 'false');\n\n        setTimeout(() => {\n          previousPageElem?.classList.remove('leaving');\n        }, 700);\n\n        if (this.sliderItemsToShow.length === 2 && this.prevButton && this.nextButton) {\n          setTimeout(() => {\n            this.nextButton.classList.remove('pointer-events-none');\n            this.prevButton.classList.remove('pointer-events-none');\n          }, 1000);\n        }\n\n        this.debouncedUpdate();\n      }, 2);\n    } else {\n      if (this.lastSlide) this.lastSlide.classList.remove('is-incoming');\n      const nextSlide = this.getClosestElementToLeft(position);\n      nextSlide.classList.add('is-incoming');\n      this.lastSlide = nextSlide;\n\n      this.slider.scrollTo({\n        left: position,\n      });\n    }\n\n    this.dispatchEvent(\n      new CustomEvent('slideChange')\n    );\n  }\n\n  onButtonClick(event) {\n    event.preventDefault();\n    this.setSlide(event);\n  }\n\n  setSlide(event, isNext) {\n    const step = event && event.currentTarget.dataset.step || 1;\n    if (this.isStacked) {\n      let nextPage;\n      if (event && event.currentTarget.name === 'next' || isNext) {\n        this.slider.setAttribute('data-slide-direction', 'forwards');\n        nextPage =  this.currentPage < this.sliderItemsToShow.length ? this.currentPage + 1 : 1;\n      } else {\n        this.slider.setAttribute('data-slide-direction', 'backwards');\n        nextPage =  this.currentPage > 1 ? this.currentPage - 1 : this.sliderItemsToShow.length;\n      }\n      const nextPageElem = this.sliderItemsToShow[nextPage - 1];\n      this.setSlidePosition(null, nextPageElem);\n    } else {\n      const isLastSlide = this.currentPage === this.sliderItemsToShow.length;\n      if (isLastSlide && (!event || event.currentTarget.name === 'next')) {\n        this.slideScrollPosition = 0;\n      } else {\n        this.slideScrollPosition =\n          event && event.currentTarget.name === 'next' || isNext\n            ? this.slider.scrollLeft + step * this.sliderItemOffset\n            : this.slider.scrollLeft - step * this.sliderItemOffset;\n      }\n\n      this.setSlidePosition(this.slideScrollPosition);\n    }\n  }\n}\ncustomElements.define('slider-component', SliderComponent);\n\nclass SlideshowComponent extends SliderComponent {\n  constructor() {\n    super();\n    this.debouncedSetSlideVisibility = window.debounce(this.setSlideVisibility.bind(this), this.DEBOUNCE_TIMEOUT);\n  }\n\n  init() {\n    super.init();\n    this.sliderControlWrapper = this.querySelector('.slider-buttons');\n    this.enableSliderLooping = true;\n\n    if (!this.sliderControlWrapper) return;\n\n    this.sliderFirstItemNode = this.slider.querySelector('.slideshow__slide');\n    if (this.sliderItemsToShow.length > 0) this.currentPage = 1;\n\n    this.announcementBarSlider = this.querySelector('.announcement-bar-slider');\n    // Value below should match --duration-announcement-bar CSS value\n    this.announcerBarAnimationDelay = this.announcementBarSlider ? 250 : 0;\n\n    this.sliderControlLinksArray = Array.from(this.sliderControlWrapper.querySelectorAll('.slider-counter__link'));\n    this.sliderControlLinksArray.forEach((link) => link.addEventListener('click', this.linkToSlide.bind(this)));\n    this.slider.addEventListener('scroll', this.debouncedSetSlideVisibility.bind(this), { passive: true });\n    this.setSlideVisibility();\n\n    this.reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');\n    this.reducedMotion.addEventListener('change', () => {\n      if (this.slider.getAttribute('data-autoplay') === 'true') this.setAutoPlay();\n    });\n\n    if (this.announcementBarSlider) {\n      this.announcementBarArrowButtonWasClicked = false;\n    }\n\n    if (this.slider.getAttribute('data-autoplay') === 'true') this.setAutoPlay();\n\n    if (Shopify.designMode) {\n      document.addEventListener('shopify:block:select', event => {\n        if (this.contains(event.target)) {\n\n          // Attempt to not animate the slide\n          this.slider.classList.add('pause-transition');\n          this.pause();\n          this.slider.setAttribute('data-slide-direction', 'forwards');\n\n          setTimeout(() => {\n            super.setSlidePosition(event.target.offsetLeft, event.target);\n          }, 100);\n\n          // Attempt to reanimate the slide\n          setTimeout(() => {\n            this.slider.classList.remove('pause-transition');\n          }, 300);\n        }\n      });\n    }\n  }\n\n  setAutoPlay() {\n    this.autoplaySpeed = this.slider.dataset.speed * 1000;\n    this.querySelectorAll('.banner__box').forEach(slideContent => slideContent.addEventListener('mouseover', this.focusInHandling.bind(this)));\n    this.querySelectorAll('.banner__box').forEach(slideContent => slideContent.addEventListener('mouseleave', this.focusOutHandling.bind(this)));\n    this.addEventListener('focusin', this.focusInHandling.bind(this));\n    this.addEventListener('focusout', this.focusOutHandling.bind(this));\n\n    if (this.querySelector('.slideshow__autoplay')) {\n      this.sliderAutoplayButton = this.querySelector('.slideshow__autoplay');\n      this.sliderAutoplayButton.addEventListener('click', this.autoPlayToggle.bind(this));\n      this.autoplayButtonIsSetToPlay = true;\n      this.play();\n    } else {\n      this.reducedMotion.matches || this.announcementBarArrowButtonWasClicked\n        ? this.pause()\n        : this.play();\n    }\n  }\n\n  onButtonClick(event) {\n    super.onButtonClick(event);\n\n    event.target.classList.add('pointer-events-none');\n    setTimeout(() => event.target.classList.remove('pointer-events-none'), 1000);\n\n    this.wasClicked = true;\n\n    const isFirstSlide = this.currentPage === 1;\n    const isLastSlide = this.currentPage === this.sliderItemsToShow.length;\n\n    if (!isFirstSlide && !isLastSlide) {\n      this.applyAnimationToAnnouncementBar(event.currentTarget.name);\n      return;\n    }\n\n    if (!this.isStacked) {\n      if (isFirstSlide && event.currentTarget.name === 'previous') {\n        this.slider.setAttribute('data-slide-direction', 'backwards');\n        this.slideScrollPosition =\n          this.slider.scrollLeft + this.sliderFirstItemNode.clientWidth * this.sliderItemsToShow.length;\n      } else if (isLastSlide && event.currentTarget.name === 'next') {\n        this.slider.setAttribute('data-slide-direction', 'forwards');\n        this.slideScrollPosition = 0;\n      }\n\n      this.setSlidePosition(this.slideScrollPosition);\n    }\n\n    this.applyAnimationToAnnouncementBar(event.currentTarget.name);\n  }\n\n  setSlidePosition(position, nextPageElem) {\n    this.slider.classList.remove('drag-active');\n    if (nextPageElem) {\n     super.setSlidePosition(null, nextPageElem);\n    } else {\n      if (this.setPositionTimeout) clearTimeout(this.setPositionTimeout);\n      this.setPositionTimeout = setTimeout(() => {\n        this.slider.scrollTo({\n          left: position,\n        });\n      }, this.announcerBarAnimationDelay);\n    }\n  }\n\n  update() {\n    super.update();\n    this.sliderControlButtons = this.querySelectorAll('.slider-counter__link');\n    if (this.prevButton) this.prevButton.removeAttribute('disabled');\n\n    if (!this.sliderControlButtons.length) return;\n\n    this.sliderControlButtons.forEach((link) => {\n      link.classList.remove('slider-counter__link--active');\n      link.removeAttribute('aria-current');\n    });\n    this.sliderControlButtons[this.currentPage - 1].classList.add('slider-counter__link--active');\n    this.sliderControlButtons[this.currentPage - 1].setAttribute('aria-current', true);\n  }\n\n  autoPlayToggle() {\n    this.togglePlayButtonState(this.autoplayButtonIsSetToPlay);\n    this.autoplayButtonIsSetToPlay ? this.pause() : this.play();\n    this.autoplayButtonIsSetToPlay = !this.autoplayButtonIsSetToPlay;\n  }\n\n  focusOutHandling(event) {\n    if (this.sliderAutoplayButton) {\n      const focusedOnAutoplayButton =\n        event.target === this.sliderAutoplayButton || this.sliderAutoplayButton.contains(event.target);\n      if (!this.autoplayButtonIsSetToPlay || focusedOnAutoplayButton) return;\n      this.play();\n    } else if (\n      !this.reducedMotion.matches &&\n      !this.announcementBarArrowButtonWasClicked\n    ) {\n      this.play();\n    }\n  }\n\n  focusInHandling(event) {\n    if (this.sliderAutoplayButton) {\n      const focusedOnAutoplayButton =\n        event.target === this.sliderAutoplayButton || this.sliderAutoplayButton.contains(event.target);\n      if (focusedOnAutoplayButton && this.autoplayButtonIsSetToPlay) {\n        // Do nothing\n      } else if (this.autoplayButtonIsSetToPlay) {\n        this.pause();\n      }\n    } else if (this.announcementBarSlider && this.announcementBarSlider.contains(event.target)) {\n      this.pause();\n    }\n  }\n\n  play() {\n    this.slider.setAttribute('aria-live', 'off');\n    this.setAttribute('data-paused', 'false');\n    clearInterval(this.autoplay);\n    this.autoplay = setInterval(this.autoRotateSlides.bind(this), this.autoplaySpeed);\n  }\n\n  pause() {\n    this.slider.setAttribute('aria-live', 'polite');\n    this.setAttribute('data-paused', 'true');\n    clearInterval(this.autoplay);\n  }\n\n  togglePlayButtonState(pauseAutoplay) {\n    if (pauseAutoplay) {\n      this.sliderAutoplayButton.classList.add('slideshow__autoplay--paused');\n      this.sliderAutoplayButton.setAttribute('aria-label', window.accessibilityStrings.playSlideshow);\n    } else {\n      this.sliderAutoplayButton.classList.remove('slideshow__autoplay--paused');\n      this.sliderAutoplayButton.setAttribute('aria-label', window.accessibilityStrings.pauseSlideshow);\n    }\n  }\n\n  autoRotateSlides() {\n    this.setSlide(null, true);\n\n    this.applyAnimationToAnnouncementBar();\n  }\n\n  setSlideVisibility(event) {\n    this.sliderItemsToShow.forEach((item, index) => {\n      const linkElements = item.querySelectorAll('a,button');\n      if (index === this.currentPage - 1) {\n        if (linkElements.length)\n          linkElements.forEach((button) => {\n            button.removeAttribute('tabindex');\n          });\n        item.setAttribute('aria-hidden', 'false');\n        item.removeAttribute('tabindex');\n\n        if (this.announcementBarSlider) {\n          const announcementBar = this.closest('.utility-bar');\n          announcementBar.classList.forEach(className => {\n            if (className.startsWith('color-')) {\n              announcementBar.classList.remove(className);\n              announcementBar.classList.add(item.dataset.colorScheme);\n            }\n          });\n        }\n      } else {\n        if (linkElements.length)\n          linkElements.forEach((button) => {\n            button.setAttribute('tabindex', '-1');\n          });\n        item.setAttribute('aria-hidden', 'true');\n        item.setAttribute('tabindex', '-1');\n      }\n    });\n    this.wasClicked = false;\n  }\n\n  applyAnimationToAnnouncementBar(button = 'next') {\n    if (!this.announcementBarSlider) return;\n\n    const itemsCount = this.sliderItems.length;\n    const increment = button === 'next' ? 1 : -1;\n\n    const currentIndex = this.currentPage - 1;\n    let nextIndex = (currentIndex + increment) % itemsCount;\n    nextIndex = nextIndex === -1 ? itemsCount - 1 : nextIndex;\n\n    const nextSlide = this.sliderItems[nextIndex];\n    const currentSlide = this.sliderItems[currentIndex];\n\n    const animationClassIn = 'announcement-bar-slider--fade-in';\n    const animationClassOut = 'announcement-bar-slider--fade-out';\n\n    const isFirstSlide = currentIndex === 0;\n    const isLastSlide = currentIndex === itemsCount - 1;\n\n    const shouldMoveNext = (button === 'next' && !isLastSlide) || (button === 'previous' && isFirstSlide);\n    const direction = shouldMoveNext ? 'next' : 'previous';\n\n    currentSlide.classList.add(`${animationClassOut}-${direction}`);\n    nextSlide.classList.add(`${animationClassIn}-${direction}`);\n\n    setTimeout(() => {\n      currentSlide.classList.remove(`${animationClassOut}-${direction}`);\n      nextSlide.classList.remove(`${animationClassIn}-${direction}`);\n    }, this.announcerBarAnimationDelay * 2);\n  }\n\n  linkToSlide(event) {\n    event.preventDefault();\n    if (this.isStacked) {\n      const slideIndex = parseInt(event.target.dataset.slideIndexTarget);\n      super.setSlidePosition(null, this.sliderItemsToShow[slideIndex - 1]);\n    } else {\n      const slideScrollPosition =\n        this.slider.scrollLeft +\n        this.sliderFirstItemNode.clientWidth *\n        (this.sliderControlLinksArray.indexOf(event.currentTarget) + 1 - this.currentPage);\n      this.slider.scrollTo({\n        left: slideScrollPosition,\n      });\n    }\n  }\n}\ncustomElements.define('slideshow-component', SlideshowComponent);\n\nclass VariantSelects extends HTMLElement {\n  constructor() {\n    super();\n    this.addEventListener('change', this.onVariantChange);\n  }\n\n  onVariantChange(event) {\n    this.updateOptions();\n    this.updateMasterId();\n    this.updateSelectedSwatchValue(event);\n    this.toggleAddButton(true, '', false);\n    this.updatePickupAvailability();\n    this.removeErrorMessage();\n    this.updateVariantStatuses();\n    this.updateVariantDataVisibility();\n\n    if (!this.currentVariant) {\n      this.toggleAddButton(true, '', true);\n      this.setUnavailable();\n    } else {\n      this.updateMedia();\n      this.updateURL();\n      this.updateVariantInput();\n      this.renderProductInfo();\n      this.updateShareUrl();\n    }\n\n    this.updateNiceSelectLabels();\n  }\n\n  updateVariantDataVisibility() {\n    document.querySelectorAll(`[data-variant-data-product-id='${this.dataset.productId}']`).forEach(dataPiece => {\n      dataPiece.classList.toggle('hidden', dataPiece.dataset.variantDataVariantId != this.currentVariant?.id);\n    });\n  }\n\n  updateNiceSelectLabels() {\n    // Find all select elements that are descendants of elements with the class .nice-select\n    const selectContainers = document.querySelectorAll('.select:has(.nice-select)');\n\n    // Loop through each select element found\n    selectContainers.forEach((selectContainer) => {\n      // Get the corresponding .nice-list element within the same .nice-select container\n      const niceList = selectContainer.querySelector('.nice-list');\n      const niceCurrent = selectContainer.querySelector('.current');\n      const select = selectContainer.querySelector('select');\n\n      // Check if the .nice-list exists\n      if (niceList && select) {\n        // Get all li elements within the .nice-list\n        const listItems = niceList.querySelectorAll('li');\n\n        // Loop through each option in the select element\n        select.querySelectorAll('option').forEach((option, index) => {\n          // Check if there's a corresponding li for this option\n          if (index < listItems.length) {\n            // Set the text of the li to match the text of the option\n            const newText = option.innerText.trim();\n            listItems[index].innerText = newText;\n            listItems[index].setAttribute('data-value', newText);\n\n            if (listItems[index].classList.contains('selected')) {\n              niceCurrent.innerHTML = newText;\n            }\n          }\n        });\n      }\n    });\n  }\n\n  updateCtaButton(buttonText, makeDisabled) {\n    const stickyCta = document.getElementById('sticky-cta');\n    if (stickyCta && !this.closest('.section-featured-product')) {\n      if (this.currentVariant) {\n        // Update the price\n        const productForm = document.querySelector(`#product-form-${this.dataset.section}`);\n        const productInfo = productForm.closest('.product__info-wrapper');\n        const priceElem = productInfo?.querySelector('.price__container .price-item--last');\n        const priceText = priceElem?.textContent.trim();\n        if (priceText && priceText.length > 0) {\n          const stickyPriceElem = stickyCta.querySelector('.sticky-cta__price');\n          if (stickyPriceElem) {\n            stickyPriceElem.textContent = priceText;\n          }\n        }\n      }\n\n      // Update the button\n      const button = stickyCta.querySelector('.button');\n      if (button) {\n        if (buttonText) {\n          const buttonTextElem = button.querySelector('span');\n          if (buttonTextElem) buttonTextElem.textContent = buttonText;\n        }\n\n        if (makeDisabled) {\n          button.setAttribute('disabled', 'disabled');\n        } else {\n          button.removeAttribute('disabled');\n        }\n      }\n    }\n  }\n\n  updateOptions() {\n    this.options = Array.from(this.querySelectorAll('select, fieldset'), (element) => {\n      if (element.tagName === 'SELECT') {\n        return element.value;\n      }\n      if (element.tagName === 'FIELDSET') {\n        return Array.from(element.querySelectorAll('input')).find((radio) => radio.checked)?.value;\n      }\n    });\n  }\n\n  updateMasterId() {\n    this.currentVariant = this.getVariantData().find((variant) => {\n      return !variant.options\n        .map((option, index) => {\n          return this.options[index] === option;\n        })\n        .includes(false);\n    });\n  }\n\n  updateSelectedSwatchValue({ target }) {\n    const { name, value, tagName } = target;\n\n    if (tagName === 'SELECT' && target.selectedOptions.length) {\n      const swatchValue = target.selectedOptions[0].dataset.optionSwatchValue;\n      const selectedDropdownSwatchValue = this.querySelector(`[data-selected-dropdown-swatch=\"${name}\"] > .swatch`);\n      if (!selectedDropdownSwatchValue) return;\n      if (swatchValue) {\n        selectedDropdownSwatchValue.style.setProperty('--swatch--background', swatchValue);\n        selectedDropdownSwatchValue.classList.remove('swatch--unavailable');\n      } else {\n        selectedDropdownSwatchValue.style.setProperty('--swatch--background', 'unset');\n        selectedDropdownSwatchValue.classList.add('swatch--unavailable');\n      }\n\n      selectedDropdownSwatchValue.style.setProperty(\n        '--swatch-focal-point',\n        target.selectedOptions[0].dataset.optionSwatchFocalPoint || 'unset'\n      );\n    } else if (tagName === 'INPUT' && target.type === 'radio') {\n      const selectedSwatchValue = this.querySelector(`[data-selected-swatch-value=\"${name}\"]`);\n      if (selectedSwatchValue) selectedSwatchValue.innerHTML = value;\n    }\n  }\n\n  updateMedia() {\n    if (!this.currentVariant) return;\n    if (!this.currentVariant.featured_media) return;\n\n    const mediaGalleries = document.querySelectorAll(`[id^=\"MediaGallery-${this.dataset.section}\"]`);\n    mediaGalleries.forEach((mediaGallery) =>\n      mediaGallery.setActiveMedia(`${this.dataset.section}-${this.currentVariant.featured_media.id}`)\n    );\n\n    const modalContent = document.querySelector(`#ProductModal-${this.dataset.section} .product-media-modal__content`);\n    if (!modalContent) return;\n    const newMediaModal = modalContent.querySelector(`[data-media-id=\"${this.currentVariant.featured_media.id}\"]`);\n    modalContent.prepend(newMediaModal);\n  }\n\n  updateURL() {\n    if (!this.currentVariant || this.dataset.updateUrl === 'false') return;\n    window.history.replaceState({}, '', `${this.dataset.url}?variant=${this.currentVariant.id}`);\n  }\n\n  updateShareUrl() {\n    const shareButton = document.getElementById(`Share-${this.dataset.section}`);\n    if (!shareButton || !shareButton.updateUrl) return;\n    shareButton.updateUrl(`${window.shopUrl}${this.dataset.url}?variant=${this.currentVariant.id}`);\n  }\n\n  updateVariantInput() {\n    const productForms = document.querySelectorAll(\n      `#product-form-${this.dataset.section}, #product-form-installment-${this.dataset.section}`\n    );\n    productForms.forEach((productForm) => {\n      const input = productForm.querySelector('input[name=\"id\"]');\n      input.value = this.currentVariant.id;\n      input.dispatchEvent(new Event('change', { bubbles: true }));\n    });\n\n    // Update any inputs which reference the variant id\n    this.closest('.section')?.querySelectorAll('[id^=\"back-in-stock-variant\"],[id^=\"product-enquiry\"]').forEach(variantInput => {\n      if (variantInput) variantInput.value = this.currentVariant.id;\n    });\n  }\n\n  updateVariantStatuses() {\n    const selectedOptionOneVariants = this.variantData.filter(\n      (variant) => this.querySelector(':checked').value === variant.option1\n    );\n    const inputWrappers = [...this.querySelectorAll('.product-form__input')];\n    inputWrappers.forEach((option, index) => {\n      if (index === 0) return;\n      const optionInputs = [...option.querySelectorAll('input[type=\"radio\"], option')];\n      const previousOptionSelected = inputWrappers[index - 1].querySelector(':checked').value;\n      const availableOptionInputsValue = selectedOptionOneVariants\n        .filter((variant) => variant.available && variant[`option${index}`] === previousOptionSelected)\n        .map((variantOption) => variantOption[`option${index + 1}`]);\n\n      if (this.dataset.showAvailability === 'true') {\n        this.setInputAvailability(optionInputs, availableOptionInputsValue);\n      }\n    });\n  }\n\n  setInputAvailability(elementList, availableValuesList) {\n    elementList.forEach((element) => {\n      const value = element.getAttribute('value');\n      const availableElement = availableValuesList.includes(value);\n\n      if (element.tagName === 'INPUT') {\n        element.classList.toggle('disabled', !availableElement);\n      } else if (element.tagName === 'OPTION') {\n        element.innerText = availableElement\n          ? value\n          : window.variantStrings.unavailable_with_option.replace('[value]', value);\n      }\n    });\n  }\n\n  updatePickupAvailability() {\n    const pickUpAvailability = document.querySelector('pickup-availability');\n    if (!pickUpAvailability) return;\n\n    if (this.currentVariant && this.currentVariant.available) {\n      pickUpAvailability.fetchAvailability(this.currentVariant.id);\n    } else {\n      pickUpAvailability.removeAttribute('available');\n      pickUpAvailability.innerHTML = '';\n    }\n  }\n\n  removeErrorMessage() {\n    const section = this.closest('section');\n    if (!section) return;\n\n    const productForm = section.querySelector('product-form');\n    if (productForm) productForm.handleErrorMessage();\n  }\n\n  renderProductInfo() {\n    const requestedVariantId = this.currentVariant.id;\n    const sectionId = this.dataset.originalSection ? this.dataset.originalSection : this.dataset.section;\n    const requestUrl =\n      `${this.dataset.url}?variant=${requestedVariantId}&section_id=${sectionId}&_ts=${Date.now()}`;\n\n    fetch(requestUrl, { cache: 'no-store' })\n      .then((response) => response.text())\n      .then((responseText) => {\n        // prevent unnecessary ui changes from abandoned selections\n        if (this.currentVariant.id !== requestedVariantId) return;\n\n        const html = new DOMParser().parseFromString(responseText, 'text/html');\n        const destination = document.getElementById(`price-${this.dataset.section}`);\n        const source = html.getElementById(\n          `price-${this.dataset.originalSection ? this.dataset.originalSection : this.dataset.section}`\n        );\n        const shippingDestination = document.getElementById(`Shipping-${this.dataset.section}`);\n        const shippingSource = html.getElementById(\n          `Shipping-${this.dataset.originalSection ? this.dataset.originalSection : this.dataset.section}`\n        );\n        const skuSource = html.getElementById(\n          `Sku-${this.dataset.originalSection ? this.dataset.originalSection : this.dataset.section}`\n        );\n        const skuDestination = document.getElementById(`Sku-${this.dataset.section}`);\n        const barcodeSource = html.getElementById(\n          `Barcode-${this.dataset.originalSection ? this.dataset.originalSection : this.dataset.section}`\n        );\n        const barcodeDestination = document.getElementById(`Barcode-${this.dataset.section}`);\n        const inventorySource = html.getElementById(\n          `Inventory-${this.dataset.originalSection ? this.dataset.originalSection : this.dataset.section}`\n        );\n        const inventoryDestination = document.getElementById(`Inventory-${this.dataset.section}`);\n\n        const volumePricingSource = html.getElementById(\n          `Volume-${this.dataset.originalSection ? this.dataset.originalSection : this.dataset.section}`\n        );\n\n        const pricePerItemDestination = document.getElementById(`Price-Per-Item-${this.dataset.section}`);\n        const pricePerItemSource = html.getElementById(`Price-Per-Item-${this.dataset.originalSection ? this.dataset.originalSection : this.dataset.section}`);\n\n        const volumePricingDestination = document.getElementById(`Volume-${this.dataset.section}`);\n        const qtyRules = document.getElementById(`Quantity-Rules-${this.dataset.section}`);\n        const volumeNote = document.getElementById(`Volume-Note-${this.dataset.section}`);\n\n        if (volumeNote) volumeNote.classList.remove('hidden');\n        if (volumePricingDestination) volumePricingDestination.classList.remove('hidden');\n        if (qtyRules) qtyRules.classList.remove('hidden');\n\n        if (source && destination) destination.innerHTML = source.innerHTML;\n        if (shippingSource && shippingDestination) shippingDestination.innerHTML = shippingSource.innerHTML;\n        if (inventorySource && inventoryDestination) inventoryDestination.innerHTML = inventorySource.innerHTML;\n        if (skuSource && skuDestination) {\n          skuDestination.innerHTML = skuSource.innerHTML;\n          skuDestination.classList.toggle('hidden', skuSource.classList.contains('hidden'));\n        }\n        if (barcodeSource && barcodeDestination) {\n          barcodeDestination.innerHTML = barcodeSource.innerHTML;\n          barcodeDestination.classList.toggle('hidden', barcodeSource.classList.contains('hidden'));\n        }\n\n        if (volumePricingSource && volumePricingDestination) {\n          volumePricingDestination.innerHTML = volumePricingSource.innerHTML;\n        }\n\n        if (pricePerItemSource && pricePerItemDestination) {\n          pricePerItemDestination.innerHTML = pricePerItemSource.innerHTML;\n          pricePerItemDestination.classList.toggle('hidden', pricePerItemSource.classList.contains('hidden'));\n        }\n\n        const price = document.getElementById(`price-${this.dataset.section}`);\n\n        if (price) price.classList.remove('hidden');\n\n        if (inventoryDestination)\n          inventoryDestination.classList.toggle('hidden', inventorySource.innerText === '');\n\n        const addButtonUpdated = html.getElementById(`ProductSubmitButton-${sectionId}`);\n        this.toggleAddButton(\n          addButtonUpdated ? addButtonUpdated.hasAttribute('disabled') : true,\n          window.variantStrings.soldOut\n        );\n\n        publish(PUB_SUB_EVENTS.variantChange, {\n          data: {\n            sectionId,\n            html,\n            variant: this.currentVariant,\n          },\n        });\n      });\n  }\n\n  toggleAddButton(disable = true, text, modifyClass = true) {\n    const productForm = document.getElementById(`product-form-${this.dataset.section}`);\n    if (!productForm) return;\n    const addButton = productForm.querySelector('[name=\"add\"]');\n    const addButtonText = productForm.querySelector('[name=\"add\"] > span');\n    if (!addButton) return;\n\n    let price;\n    if (productForm.dataset.showPrice === 'true') {\n      const productInfo = productForm.closest('.product__info-wrapper');\n      const priceElem = productInfo?.querySelector('.price__container .price-item--last');\n      const priceText = priceElem?.textContent.trim();\n      if (priceText && priceText.length > 0) price = priceText;\n    }\n\n    if (disable) {\n      addButton.setAttribute('disabled', 'disabled');\n      if (text) addButtonText.textContent = `${text}${price ? ' - ' + price : ''}`;\n      this.updateCtaButton(text, true);\n    } else {\n      addButton.removeAttribute('disabled');\n      const buttonText = addButton.dataset.isPreorder ? window.variantStrings.preorder : window.variantStrings.addToCart;\n      addButtonText.textContent = `${buttonText}${price ? ' - ' + price : ''}`;\n      this.updateCtaButton(window.variantStrings.addToCart, false);\n    }\n\n    if (!modifyClass) return;\n  }\n\n  setUnavailable() {\n    const button = document.getElementById(`product-form-${this.dataset.section}`);\n    const addButton = button.querySelector('[name=\"add\"]');\n    const addButtonText = button.querySelector('[name=\"add\"] > span');\n    const price = document.getElementById(`price-${this.dataset.section}`);\n    const inventory = document.getElementById(`Inventory-${this.dataset.section}`);\n    const sku = document.getElementById(`Sku-${this.dataset.section}`);\n    const barcode = document.getElementById(`Barcode-${this.dataset.section}`);\n    const pricePerItem = document.getElementById(`Price-Per-Item-${this.dataset.section}`);\n    const volumeNote = document.getElementById(`Volume-Note-${this.dataset.section}`);\n    const volumeTable = document.getElementById(`Volume-${this.dataset.section}`);\n    const qtyRules = document.getElementById(`Quantity-Rules-${this.dataset.section}`);\n\n    if (!addButton) return;\n    addButtonText.textContent = window.variantStrings.unavailable;\n    this.updateCtaButton(window.variantStrings.unavailable, true);\n    if (price) price.classList.add('hidden');\n    if (inventory) inventory.classList.add('hidden');\n    if (sku) sku.classList.add('hidden');\n    if (barcode) barcode.classList.add('hidden');\n    if (pricePerItem) pricePerItem.classList.add('hidden');\n    if (volumeNote) volumeNote.classList.add('hidden');\n    if (volumeTable) volumeTable.classList.add('hidden');\n    if (qtyRules) qtyRules.classList.add('hidden');\n  }\n\n  getVariantData() {\n    this.variantData = this.variantData || JSON.parse(this.querySelector('[type=\"application/json\"]').textContent);\n    return this.variantData;\n  }\n}\ncustomElements.define('variant-selects', VariantSelects);\n\nclass ProductRecommendations extends HTMLElement {\n  constructor() {\n    super();\n  }\n\n  connectedCallback() {\n    if (this.closest('.product')) {\n      window.addEventListener('DOMContentLoaded', () => {\n        setTimeout(this.fetchProductRecommendations.bind(this), 500);\n      });\n    }\n\n    const handleIntersection = (entries, observer) => {\n      if (!entries[0].isIntersecting) return;\n      observer.unobserve(this);\n      this.fetchProductRecommendations();\n    };\n    new IntersectionObserver(handleIntersection.bind(this), { rootMargin: '0px 0px 400px 0px' }).observe(this);\n  };\n\n  fetchProductRecommendations() {\n    if (this.dataset.url) {\n      fetch(this.dataset.url)\n        .then((response) => response.text())\n        .then((text) => {\n          let html = document.createElement('div');\n          html.innerHTML = text.replace(/<template\\b[^>]*>|<\\/template>/g, '');\n          const recommendations = html.querySelector('product-recommendations');\n\n          if (recommendations && recommendations.innerHTML.trim().length) {\n            this.innerHTML = recommendations.innerHTML;\n          }\n\n          if (!this.querySelector('.has-complementary-products') && this.classList.contains('complementary-products')) {\n            this.remove();\n          }\n\n          if (html.querySelector('.grid__item')) {\n            this.classList.add('product-recommendations--loaded');\n          }\n\n          window.loadDesktopOnlyTemplates();\n          window.stickersReinit?.();\n        })\n        .catch((e) => {\n          console.error(e);\n        });\n    }\n  }\n}\ncustomElements.define('product-recommendations', ProductRecommendations);\n\nclass AccountIcon extends HTMLElement {\n  constructor() {\n    super();\n\n    this.icon = this.querySelector('.icon');\n  }\n\n  connectedCallback() {\n    document.addEventListener('storefront:signincompleted', this.handleStorefrontSignInCompleted.bind(this));\n  }\n\n  handleStorefrontSignInCompleted(event) {\n    if (event?.detail?.avatar) {\n      this.icon?.replaceWith(event.detail.avatar.cloneNode());\n    }\n  }\n}\ncustomElements.define('account-icon', AccountIcon);\n\nclass BulkAdd extends HTMLElement {\n  constructor() {\n    super();\n    this.queue = [];\n    this.requestStarted = false;\n    this.ids = [];\n    this.cart = document.querySelector('cart-drawer');\n  }\n\n  startQueue(id, quantity, element) {\n    this.queue.push({ id, quantity });\n    const interval = setInterval(() => {\n      if (this.queue.length > 0) {\n        if (!this.requestStarted) {\n          this.sendRequest(this.queue, element);\n        }\n      } else {\n        clearInterval(interval);\n      }\n    }, 250);\n  }\n\n  sendRequest(queue, element) {\n    this.requestStarted = true;\n    const items = {};\n    queue.forEach((queueItem) => {\n      items[parseInt(queueItem.id)] = queueItem.quantity;\n    });\n    this.queue = this.queue.filter((queueElement) => !queue.includes(queueElement));\n    const quickBulkElement = this.closest('quick-order-list') || this.closest('quick-add-bulk');\n    quickBulkElement.updateMultipleQty(items, element);\n  }\n\n  resetQuantityInput(id) {\n    const input = this.querySelector(`#Quantity-${id}`);\n    input.value = input.getAttribute('value');\n    this.isEnterPressed = false;\n  }\n\n  setValidity(event, index, message) {\n    event.target.setCustomValidity(message);\n    event.target.reportValidity();\n    this.resetQuantityInput(index);\n    event.target.select();\n  }\n\n  validateQuantity(event) {\n    const inputValue = parseInt(event.target.value);\n    const index = event.target.dataset.index;\n\n    if (inputValue < event.target.dataset.min) {\n      this.setValidity(event, index, window.quickOrderListStrings.min_error.replace('[min]', event.target.dataset.min));\n    } else if (inputValue > parseInt(event.target.max)) {\n      this.setValidity(event, index, window.quickOrderListStrings.max_error.replace('[max]', event.target.max));\n    } else if (inputValue % parseInt(event.target.step) != 0) {\n      this.setValidity(event, index, window.quickOrderListStrings.step_error.replace('[step]', event.target.step));\n    } else {\n      event.target.setCustomValidity('');\n      event.target.reportValidity();\n      this.startQueue(index, inputValue, event.target);\n    }\n  }\n\n  getSectionsUrl() {\n    if (window.pageNumber) {\n      return `${window.location.pathname}?page=${window.pageNumber}`;\n    } else if (window.location.href.includes(window.routes.search_url)) {\n      // Preserve the search parameters in the url\n      return `${window.location.pathname}${window.location.search}`\n    } else {\n      return window.location.pathname;\n    }\n  }\n\n  getSectionInnerHTML(html, selector) {\n    html = html.replace(/<template\\b[^>]*>|<\\/template>/g, '');\n    return new DOMParser().parseFromString(html, 'text/html').querySelector(selector).innerHTML;\n  }\n}\nif (!customElements.get('bulk-add')) {\n  customElements.define('bulk-add', BulkAdd);\n}\n\nclass LazyScript extends HTMLElement {\n  constructor() {\n    super();\n    this.scriptLoaded = false;\n    this.isEnabled = document.body.dataset.lazyLoadJs === 'true';\n  }\n\n  connectedCallback() {\n    if (!this.isEnabled) {\n      // Load script immediately if lazy loading is disabled\n      this.loadScript();\n      return;\n    }\n\n    // If the `data-watch-element` attribute is not present, use default lazy-load logic\n    const watchElementSelector = this.getAttribute('data-watch-element');\n\n    if (watchElementSelector) {\n      // If IntersectionObserver is supported, observe the target element\n      if ('IntersectionObserver' in window) {\n        this.observeElementVisibility(watchElementSelector);\n      } else {\n        // If not supported, load the script immediately\n        this.loadScript();\n      }\n    } else {\n      // If IntersectionObserver is supported, observe the lazy-script element itself\n      if ('IntersectionObserver' in window) {\n        this.observeScriptVisibility();\n      } else {\n        // If not supported, load the script immediately\n        this.loadScript();\n      }\n    }\n  }\n\n  observeScriptVisibility() {\n    const observer = new IntersectionObserver((entries) => {\n      entries.forEach((entry) => {\n        if (entry.isIntersecting && !this.scriptLoaded) {\n          this.loadScript();\n          observer.disconnect(); // Disconnect observer after loading the script\n        }\n      });\n    }, {\n      rootMargin: `0px 0px ${ this.dataset.customThreshold || 400 }px 0px`\n    });\n\n    observer.observe(this);\n  }\n\n  observeElementVisibility(selector) {\n    const targetElements = document.querySelectorAll(selector);\n    if (!targetElements.length) {\n      return;\n    }\n\n    const observer = new IntersectionObserver((entries, obs) => {\n      entries.forEach((entry) => {\n        if (entry.isIntersecting && !this.scriptLoaded) {\n          this.loadScript();\n          obs.disconnect(); // Stop observing once the script is loaded\n        }\n      });\n    }, {\n      rootMargin: `0px 0px ${ this.dataset.customThreshold || 0 }px 0px`\n    });\n\n    targetElements.forEach((element) => observer.observe(element));\n  }\n\n  loadScript() {\n    const scriptUrl = this.getAttribute('src');\n    if (!scriptUrl) {\n      console.warn('Load lazy script: Script source URL missing in the \"src\" attribute.');\n      return;\n    }\n\n    // Check if the script has already been loaded\n    if (window.loadedScripts && window.loadedScripts.includes(scriptUrl)) {\n      // console.log(`Load lazy script: Script already loaded: ${scriptUrl}`);\n      return; // Don't load the script again\n    }\n\n    // Add the script URL to the list of loaded scripts\n    if (!window.loadedScripts) {\n      window.loadedScripts = []; // Initialize if not already initialized\n    }\n    window.loadedScripts.push(scriptUrl);\n\n    const script = document.createElement('script');\n    script.src = scriptUrl;\n    script.defer = true;\n    script.onload = () => {\n      this.scriptLoaded = true;\n      // console.log(`Load lazy script: Script loaded successfully: ${scriptUrl}`);\n    };\n    script.onerror = (error) => {\n      console.error('Load lazy script: Error loading the script ', error);\n    };\n\n    document.body.appendChild(script); // Append the script to load it\n  }\n}\ncustomElements.define('lazy-script', LazyScript);\n\nclass CustomAccordion extends HTMLElement {\n  constructor() {\n    super();\n\n    this.detailsElem = this.querySelector('details');\n    this.summaryElem = this.querySelector('summary');\n    this.container = this.summaryElem.nextElementSibling;\n    this.oneAtATime = this.dataset.oneAtATime;\n\n    window.initScriptOnDemand(this, this.init.bind(this));\n  }\n\n  init() {\n    if (window.getComputedStyle(this.container).transitionDuration !== '0s') {\n      this.closeListener = this.handleDetailsClose.bind(this);\n      this.clickListener = this.handleSummaryClick.bind(this)\n      this.detailsElem.addEventListener('transitionend', this.closeListener);\n      this.summaryElem.addEventListener('click', this.clickListener);\n    }\n  }\n\n  reinit() {\n    this.detailsElem.removeEventListener('transitionend', this.closeListener);\n    this.summaryElem.removeEventListener('click', this.clickListener);\n    this.init();\n  }\n\n  handleDetailsClose(evt, force) {\n    if (force !== true && evt.target !== this.container) return;\n\n    if (this.detailsElem.classList.contains('closing')) {\n      this.detailsElem.open = false;\n      this.detailsElem.classList.remove('closing');\n    }\n\n    this.container.removeAttribute('style');\n  }\n\n  close(preventAnimation) {\n    if (this.detailsElem.open) {\n      if (preventAnimation) {\n        this.detailsElem.open = false;\n      } else {\n        this.container.style.height = `${this.container.scrollHeight}px`;\n        this.detailsElem.classList.add('closing');\n        requestAnimationFrame(() => this.container.style.height = '0');\n        setTimeout(this.closeListener.bind(this, null, true), 450);\n      }\n    }\n  }\n\n  open(preventAnimation) {\n    if (!this.detailsElem.open) {\n      if (preventAnimation) {\n        this.detailsElem.open = true;\n      } else {\n        this.container.style.height = '0';\n        this.detailsElem.open = true;\n        this.container.style.height = `${this.container.scrollHeight}px`;\n        setTimeout(this.closeListener.bind(this, null, true), 450);\n      }\n\n      if (this.dataset.revealsImage) {\n        const section = this.closest('.section');\n        section.classList.add('interacted-with');\n        const image = section.querySelector(this.dataset.revealsImage);\n        const currentImage = section.querySelector('.revealed-image.reveal');\n        if (image) {\n          if (currentImage) currentImage.classList.remove('reveal');\n          image.classList.add('reveal');\n        }\n      }\n    }\n  }\n\n  handleSummaryClick(evt) {\n    evt.preventDefault();\n\n    if (!this.detailsElem.open) {\n      // Close existing accordions\n      if (this.oneAtATime) {\n        this.closest(this.oneAtATime).querySelectorAll('custom-accordion').forEach(customAccordion => {\n          if (customAccordion.detailsElem.open) customAccordion.close();\n        });\n      }\n\n      this.open();\n    } else {\n      this.close();\n    }\n  }\n}\ncustomElements.define('custom-accordion', CustomAccordion);\n\nclass DetailsDisclosure extends HTMLElement {\n  constructor() {\n    super();\n    this.mainDetailsToggle = this.querySelector('details');\n    this.summary = this.mainDetailsToggle.querySelector('summary');\n    this.content = this.summary.nextElementSibling;\n    window.initScriptOnDemand(this, this.init.bind(this));\n  }\n\n  init() {\n    this.mainDetailsToggle.addEventListener('focusout', this.onFocusOut.bind(this));\n    this.mainDetailsToggle.addEventListener('toggle', this.onToggle.bind(this));\n  }\n\n  onFocusOut() {\n    setTimeout(() => {\n      if (!this.contains(document.activeElement)) this.close();\n    });\n  }\n\n  onToggle() {\n    if (!this.animations) this.animations = this.content.getAnimations();\n\n    if (this.mainDetailsToggle.hasAttribute('open')) {\n      this.animations.forEach((animation) => animation.play());\n    } else {\n      this.animations.forEach((animation) => animation.cancel());\n    }\n  }\n\n  close() {\n    this.mainDetailsToggle.removeAttribute('open');\n    this.mainDetailsToggle.querySelector('summary').setAttribute('aria-expanded', false);\n  }\n}\ncustomElements.define('details-disclosure', DetailsDisclosure);\n\nclass AccordionSearch extends HTMLElement {\n  constructor() {\n    super();\n    window.initScriptOnDemand(this, this.init.bind(this));\n  }\n\n  init() {\n    this.section = this.closest('.section');\n    this.accordionContainer = this.section.querySelector('.accordion-container');\n\n    this.addEventListener('keyup', this.onKeyUp.bind(this));\n  }\n\n  onKeyUp(evt) {\n    let hiddenFields = 0;\n    let shownFields = 0;\n    let isFirst = true;\n\n    const noMatches = this.accordionContainer.querySelector('.no-matches');\n    if (noMatches) noMatches.remove();\n\n    this.section.querySelectorAll('.accordion').forEach(searchableBlock => {\n      if (searchableBlock.textContent.trim().toLowerCase().includes(evt.target.value.toLowerCase())) {\n        searchableBlock.removeAttribute('aria-hidden');\n        shownFields++;\n\n        if (isFirst) {\n          searchableBlock.querySelector('custom-accordion').open(true);\n          searchableBlock.classList.add('first-accordion');\n          isFirst = false;\n        } else {\n          searchableBlock.classList.remove('first-accordion');\n          searchableBlock.querySelector('custom-accordion').close(true);\n        }\n      } else {\n        searchableBlock.classList.remove('first-accordion');\n        searchableBlock.querySelector('custom-accordion').close(true);\n        searchableBlock.setAttribute('aria-hidden', 'true');\n        hiddenFields++;\n      }\n    });\n\n    if (hiddenFields === 0) {\n      this.section.querySelectorAll('.accordion').forEach(searchableBlock => searchableBlock.classList.remove('first-accordion'));\n    }\n\n    if (shownFields === 0) {\n      this.accordionContainer.innerHTML += `<p class=\"no-matches mb-0 mt-0 t1\">${window.strings.sections.collapsibleRows.noResults}</p>`;\n    }\n\n    this.section.querySelectorAll('.collapsible-content__heading,.collapsible-content__text,.collapsible-content__spacer').forEach(elem => {\n      elem.classList.toggle('hidden', hiddenFields > 0);\n    });\n  }\n}\ncustomElements.define('accordion-search', AccordionSearch);\n\nclass HeaderMenu extends DetailsDisclosure {\n  constructor() {\n    super();\n  }\n\n  init() {\n    this.header = document.querySelector('.header-wrapper');\n\n    if (Shopify.designMode) {\n      this.blockSelectHandler = this.blockSelectHandler || this.onBlockSelect.bind(this);\n      this.blockDeselectHandler = this.blockDeselectHandler || this.onBlockDeselect.bind(this);\n      document.addEventListener('shopify:block:select', this.blockSelectHandler);\n      document.addEventListener('shopify:block:deselect', this.blockDeselectHandler);\n    }\n\n    if (window.matchMedia('(hover: hover)').matches && this.header) {\n      this.mouseEnterHandler = this.onMouseEnter.bind(this);\n      this.mouseLeaveHandler = this.onMouseLeave.bind(this);\n      this.mouseLeaveSummaryHandler = this.onMouseLeaveSummary.bind(this);\n      this.mouseOverSummaryHandler = this.onMouseOverSummary.bind(this);\n      this.addEventListener('mouseenter', this.mouseEnterHandler);\n      this.addEventListener('mouseleave', this.mouseLeaveHandler);\n      this.summary.addEventListener('mouseleave', this.mouseLeaveSummaryHandler);\n      this.summary.addEventListener('mouseover', this.mouseOverSummaryHandler);\n    }\n  }\n\n  disconnectedCallback() {\n    if (Shopify.designMode) {\n      document.removeEventListener('shopify:block:select', this.blockSelectHandler);\n      document.removeEventListener('shopify:block:deselect', this.blockDeselectHandler);\n    }\n\n    if (this.mouseEnterHandler) {\n      this.removeEventListener('mouseenter', this.mouseEnterHandler);\n      this.removeEventListener('mouseleave', this.mouseLeaveHandler);\n      this.summary.removeEventListener('mouseleave', this.mouseLeaveSummaryHandler);\n      this.summary.removeEventListener('mouseover', this.mouseOverSummaryHandler);\n    }\n  }\n\n  onBlockSelect(evt) {\n    const closestHeaderMenu = evt.target.closest('header-menu');\n    if (closestHeaderMenu === this && this.mainDetailsToggle.open === false) {\n      this.summary.click();\n      this.preventHoverClose = true;\n      document.querySelector('.drawer-menu--on-scroll')?.classList.add('drawer-menu--on-scroll--paused');\n    }\n  }\n\n  onBlockDeselect(evt) {\n    const closestHeaderMenu = evt.target.closest('header-menu');\n    if (closestHeaderMenu === this && this.mainDetailsToggle.open) {\n      this.summary.click();\n      this.preventHoverClose = false;\n    }\n    document.querySelector('.drawer-menu--on-scroll')?.classList.remove('drawer-menu--on-scroll--paused');\n  }\n\n  closeAnyOpenMegaMenus() {\n    this.header.querySelectorAll('.mega-menu[open]').forEach(megaMenu => {\n      const headerMenu = megaMenu.closest('header-menu');\n      if (headerMenu) headerMenu.summary.click();\n    });\n    document.querySelector('.drawer-menu--on-scroll')?.classList.remove('drawer-menu--on-scroll--paused');\n  }\n\n  onMouseEnter() {\n    window.menuHoverIntentDelay = typeof window.menuHoverIntentDelay === undefined ? 100 : window.menuHoverIntentDelay;\n\n    this.hoverIntentTimer = setTimeout(() => {\n      window.menuHoverIntentDelay = 0;\n\n      if (this.mainDetailsToggle.open === false) {\n        this.closeAnyOpenMegaMenus();\n        this.classList.add('open');\n        this.style.setProperty('--link-end',\n          `${Number.parseInt(this.offsetTop + this.getBoundingClientRect().height) - 1}px`);\n        this.style.setProperty('--header-zindex', '1');\n        this.summary.click();\n      }\n    }, window.menuHoverIntentDelay);\n  }\n\n  onMouseLeave() {\n    clearTimeout(this.hoverIntentTimer);\n\n    if (this.mainDetailsToggle.open && !this.preventHoverClose) {\n      this.classList.remove('open');\n      this.summary.click();\n    }\n  }\n\n  onMouseLeaveSummary() {\n    this.mouseOverSummary = false;\n    setTimeout(() => {\n      if (!this.mouseOverSummary) {\n        this.style.setProperty('--header-zindex', '0');\n      }\n    }, 300);\n  }\n\n  onMouseOverSummary() {\n    this.mouseOverSummary = true;\n  }\n\n  onToggle() {\n    if (!this.header) return;\n    this.header.preventHide = this.mainDetailsToggle.open;\n\n    if (document.documentElement.style.getPropertyValue('--header-bottom-position-desktop') !== '') return;\n    document.documentElement.style.setProperty(\n      '--header-bottom-position-desktop',\n      `${Math.floor(this.header.getBoundingClientRect().bottom)}px`\n    );\n  }\n}\ncustomElements.define('header-menu', HeaderMenu);\n\n\n\n/* CUSTOM THEME UTILITIES */\n// Utility function broadcast when resizing the browser has finished\n(function() {\n  function dispatchResizeEndEvent() {\n    const resizeEndEvent = new Event('resizeend');\n    window.dispatchEvent(resizeEndEvent);\n  }\n\n  window.addEventListener('resize', debounce(dispatchResizeEndEvent, 250));\n})();\n\n// Utility function to record the tallest elements\n(function() {\n  window.findTallestHeight = function () {\n    const elementsWithDataAttr = document.querySelectorAll('[data-find-tallest]');\n\n    elementsWithDataAttr.forEach(element => {\n      const selector = element.getAttribute('data-find-tallest');\n      const childElements = element.querySelectorAll(selector);\n\n      let tallestHeight = 0;\n      childElements.forEach(child => { tallestHeight = Math.max(tallestHeight, child.offsetHeight) });\n\n      // Set CSS variable on the original element with the tallest height\n      element.style.setProperty(`--${selector.replace(/\\./g, '')}-tallest`, `${tallestHeight}px`);\n    });\n  }\n\n  document.addEventListener('DOMContentLoaded', window.findTallestHeight);\n  window.addEventListener('resizeend', window.findTallestHeight);\n  if (Shopify.designMode) document.addEventListener('shopify:section:load', window.findTallestHeight);\n})();\n\n// Attempt to maintain the height of the visible screen (including on-screen keyboard)\nif (window.visualViewport) {\n  (function () {\n    window.updateViewportSize = function () {\n      document.documentElement.style.setProperty('--bvh', `${window.visualViewport.height}px`);\n    }\n\n    document.addEventListener('DOMContentLoaded', window.updateViewportSize);\n    window.addEventListener('orientationchange', window.updateViewportSize);\n    window.addEventListener('resizeend', window.updateViewportSize);\n  })();\n}\n\n// Utility to help make tables scrollable on mobile\nwindow.makeTablesResponsive = function() {\n  document.querySelectorAll('.rte table').forEach(table => {\n    if (!table.closest('.responsive-table')) {\n      const scroller = document.createElement('div');\n      scroller.className = 'responsive-table';\n      table.parentNode.insertBefore(scroller, table);\n      scroller.appendChild(table);\n    }\n  });\n}\nmakeTablesResponsive();\nif (Shopify.designMode) document.addEventListener('shopify:section:load', makeTablesResponsive);\n\n// Listen for 'overflow-hidden' being toggled on the body tag and compensate for the lack of scrollbar width\n(function() {\n  const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n\n  // Function to toggle scrollbar compensation\n  function adjustBodyPadding(hasOverflowHidden) {\n    const body = document.body;\n    if (hasOverflowHidden) {\n      // If overflow-hidden is applied, add padding to compensate for the scrollbar width\n      if (scrollbarWidth > 0 && scrollbarWidth < 25) {\n        body.style.paddingRight = `${scrollbarWidth}px`;\n        document.body.style.setProperty('--temp-scrollbar-width', `${scrollbarWidth}px`);\n      }\n    } else {\n      // Remove the added padding when overflow-hidden is removed\n      body.style.paddingRight = '';\n      document.body.style.setProperty('--temp-scrollbar-width', '');\n    }\n  }\n\n  // Create an observer instance linked to a callback function\n  const observer = new MutationObserver((mutations) => {\n    mutations.forEach((mutation) => {\n      if (mutation.type === \"attributes\" && mutation.attributeName === \"class\") {\n        const hasOverflowHidden = document.body.classList.contains('overflow-hidden');\n        adjustBodyPadding(hasOverflowHidden);\n      }\n    });\n  });\n\n  // Start observing the body for attribute changes\n  observer.observe(document.body, {\n    attributes: true\n  });\n})();\n\n// Observe changes to cart-icon-bubble and animate it when it changes\n(function() {\n  const bubble = document.getElementById('cart-icon-bubble');\n  if (bubble) {\n    const callback = function(mutationsList, observer) {\n      for (let mutation of mutationsList) {\n        if (mutation.type === 'childList') {\n          const cartCount = bubble.querySelector('.cart-count-bubble');\n          if (cartCount) {\n            cartCount.classList.add('animate--pop');\n            setTimeout(() => { cartCount.classList.remove('animate--pop') }, 250);\n          }\n          break;\n        }\n      }\n    };\n    const observer = new MutationObserver(callback);\n    observer.observe(bubble, { childList: true, subtree: true });\n  }\n})();\n\n// Anything required to hook into page scrolling\n(function() {\n  const header = document.querySelector('.section-header');\n  if (header) {\n    document.documentElement.style.setProperty('--header-start-live', `${header.getBoundingClientRect().top < 0 ? 0 : header.getBoundingClientRect().top}px`);\n\n    window.addEventListener('scroll', () => {\n      requestAnimationFrame(() => {\n        document.documentElement.style.setProperty('--header-start-live', `${header.getBoundingClientRect().top < 0 ? 0 : header.getBoundingClientRect().top}px`);\n      });\n    } , { passive: true });\n  }\n})();\n\n// Broadcast events to indicate the browser is idle\n(function () {\n  const dispatchIdleEvent = () => {\n    window.dispatchEvent(new Event('browserIsIdle'));\n    if ('requestIdleCallback' in window) {\n      setTimeout(() => {\n        window.dispatchEvent(new Event('browserIsVeryIdle'));\n      }, 8000);\n    }\n  };\n\n  if ('requestIdleCallback' in window) {\n    window.requestIdleCallback(() => dispatchIdleEvent());\n  } else {\n    window.setTimeout(() => dispatchIdleEvent(), 8000);\n  }\n})();\n\n// Show sticky CTA only when the primary add-to-cart CTA is out of view\n(function () {\n  window.initStickyCtaVisibility = function () {\n    const stickyCta = document.getElementById('sticky-cta');\n    if (!stickyCta) return;\n\n    if (stickyCta._veStickyCtaObserver) {\n      stickyCta._veStickyCtaObserver.disconnect();\n      stickyCta._veStickyCtaObserver = null;\n    }\n\n    if (stickyCta._veStickyCtaFallback) {\n      window.removeEventListener('scroll', stickyCta._veStickyCtaFallback);\n      window.removeEventListener('resizeend', stickyCta._veStickyCtaFallback);\n      stickyCta._veStickyCtaFallback = null;\n    }\n\n    const productSection = stickyCta.closest('.section-product-page') || document.querySelector('.section-product-page');\n    if (!productSection) return;\n\n    const mainAddToCartButton = productSection.querySelector('.ve-pdp-buy-buttons .product-form__submit[name=\"add\"]');\n    if (!mainAddToCartButton) return;\n\n    const toggleSticky = (isMainCtaVisible) => {\n      stickyCta.classList.toggle('ve-sticky-cta-hidden', isMainCtaVisible);\n    };\n\n    const updateFromRect = () => {\n      const rect = mainAddToCartButton.getBoundingClientRect();\n      const isVisible = rect.bottom > 0 && rect.top < window.innerHeight;\n      toggleSticky(isVisible);\n    };\n\n    updateFromRect();\n\n    if (!('IntersectionObserver' in window)) {\n      stickyCta._veStickyCtaFallback = updateFromRect;\n      window.addEventListener('scroll', updateFromRect, { passive: true });\n      window.addEventListener('resizeend', updateFromRect);\n      return;\n    }\n\n    const observer = new IntersectionObserver(\n      (entries) => {\n        const entry = entries[0];\n        toggleSticky(entry?.isIntersecting === true);\n      },\n      {\n        threshold: [0, 0.05, 0.2, 0.5, 1],\n      }\n    );\n\n    observer.observe(mainAddToCartButton);\n    stickyCta._veStickyCtaObserver = observer;\n  };\n\n  const runStickyInit = () => window.initStickyCtaVisibility?.();\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', runStickyInit);\n  } else {\n    runStickyInit();\n  }\n\n  window.addEventListener('load', runStickyInit);\n  window.addEventListener('pageshow', runStickyInit);\n  window.addEventListener('resizeend', runStickyInit);\n  document.addEventListener('visibilitychange', () => {\n    if (!document.hidden) runStickyInit();\n  });\n\n  if (Shopify.designMode) {\n    document.addEventListener('shopify:section:load', runStickyInit);\n    document.addEventListener('shopify:block:select', runStickyInit);\n  }\n})();\n\n/* Judge.me PDP review widget (lower block): format average as X/5 */\n(() => {\n  const isPdp = () => document.body?.classList.contains('product-template');\n  const reviewWidgetSelector = '.jdgm-rev-widg';\n  const reviewWidgetAverageSelector =\n    '.jdgm-rev-widg__summary-average, .jdgm-rev-widg__average';\n\n  const toScore = (rawText) => {\n    if (!rawText) return null;\n    const match = String(rawText).match(/(\\d+(?:[.,]\\d+)?)/);\n    if (!match) return null;\n    const numeric = Number.parseFloat(match[1].replace(',', '.'));\n    if (Number.isNaN(numeric)) return null;\n    const rounded = Math.round(numeric * 10) / 10;\n    return Number.isInteger(rounded) ? rounded.toFixed(0) : String(rounded);\n  };\n\n  const formatReviewWidgetAverage = (scope = document) => {\n    if (!isPdp()) return;\n\n    scope.querySelectorAll(reviewWidgetSelector).forEach((widget) => {\n      widget.querySelectorAll(reviewWidgetAverageSelector).forEach((averageNode) => {\n        const source =\n          averageNode.getAttribute('data-score') ||\n          averageNode.getAttribute('aria-label') ||\n          averageNode.textContent ||\n          '';\n        const score = toScore(source);\n        if (!score) return;\n\n        const formatted = `${score}/5`;\n        if (averageNode.textContent?.trim() !== formatted) {\n          averageNode.textContent = formatted;\n        }\n      });\n    });\n  };\n\n  const initReviewWidgetAverageFormat = () => {\n    if (!isPdp()) return;\n\n    formatReviewWidgetAverage(document);\n    requestAnimationFrame(() => formatReviewWidgetAverage(document));\n    setTimeout(() => formatReviewWidgetAverage(document), 400);\n    setTimeout(() => formatReviewWidgetAverage(document), 1200);\n\n    if (window._veJudgeMeReviewWidgetObserver) {\n      window._veJudgeMeReviewWidgetObserver.disconnect();\n    }\n\n    const observer = new MutationObserver((mutations) => {\n      for (const mutation of mutations) {\n        if (mutation.type !== 'childList') continue;\n\n        mutation.addedNodes.forEach((addedNode) => {\n          if (!(addedNode instanceof HTMLElement)) return;\n\n          if (\n            addedNode.matches?.(reviewWidgetSelector) ||\n            addedNode.querySelector?.(reviewWidgetSelector) ||\n            addedNode.matches?.(reviewWidgetAverageSelector) ||\n            addedNode.querySelector?.(reviewWidgetAverageSelector)\n          ) {\n            formatReviewWidgetAverage(document);\n          }\n        });\n      }\n    });\n\n    observer.observe(document.body, { childList: true, subtree: true });\n    window._veJudgeMeReviewWidgetObserver = observer;\n  };\n\n  if (document.readyState === 'loading') {\n    document.addEventListener('DOMContentLoaded', initReviewWidgetAverageFormat);\n  } else {\n    initReviewWidgetAverageFormat();\n  }\n\n  window.addEventListener('pageshow', initReviewWidgetAverageFormat);\n  if (Shopify.designMode) {\n    document.addEventListener('shopify:section:load', initReviewWidgetAverageFormat);\n    document.addEventListener('shopify:block:select', initReviewWidgetAverageFormat);\n  }\n})();\n\n\n/* BIND VARIOUS DOCUMENT EVENTS */\n// Tab states\ndocument.addEventListener('keydown', (evt) => {\n  if (evt.code === 'Tab') {\n    document.body.classList.add('tab-active');\n    // setTimeout(() => { console.log(document.activeElement); }, 0);\n  }\n});\n\n// General dom loaded bits\ndocument.addEventListener('DOMContentLoaded', () => {\n  loadDesktopOnlyTemplates();\n  if (Shopify.designMode) document.addEventListener('shopify:section:load', window.loadDesktopOnlyTemplates);\n\n  // General utility classes\n  document.body.classList.remove('page-is-loading');\n\n  setTimeout(() => {\n    document.body.classList.remove('page-is-not-idle');\n    document.body.classList.add('page-is-idle');\n  }, 1000);\n\n  // Links to other websites\n  if (window.theme?.settings.externalDomainLinks) {\n    document.addEventListener('click', (event) => {\n      const target = event.target.tagName !== 'A' ? event.target.closest('a') : event.target;\n      const ignorePrefixes = ['mailto:', 'tel:', 'file:', 'javascript:', '#'];\n      if (target && target.tagName === 'A' && window.location.hostname !== new URL(target.href).hostname && !ignorePrefixes.some(prefix => target.href.startsWith(prefix)) && ['http:', 'https:'].includes(new URL(target.href).protocol)) {\n        target.target = '_blank';\n      }\n    });\n  }\n\n  // Browser tab messages\n  if (window.theme?.settings.browserTab.length > 0) {\n    const originalTitle = document.title;\n    let isBlurred = false;\n\n    document.addEventListener('visibilitychange', () => {\n      if (document.hidden) {\n        isBlurred = true;\n        setTimeout(() => {\n          if (isBlurred) document.title = window.theme?.settings.browserTab;\n        }, 2000);\n      } else {\n        isBlurred = false;\n        document.title = originalTitle;\n      }\n    });\n  }\n});\n\n// Util to prevent form submit on .js-prevent-enter-submit elements\ndocument.addEventListener('keydown', (event) => {\n  if (event.key === 'Enter' && event.target.classList.contains('js-prevent-enter-submit')) {\n    event.preventDefault(); // Prevent the default form submission\n  }\n});\n\n// Smooth anchor scrolling\ndocument.addEventListener('click', function (event) {\n  // Check if the clicked element is an anchor link\n  const anchor = event.target.closest('a[href^=\"#\"]:not(.no-scroll)');\n  if (!anchor) return;\n\n  // Prevent the default anchor behavior\n  event.preventDefault();\n\n  // Get the target element from the href attribute\n  const targetId = anchor.getAttribute('href').slice(1);\n  const targetElement = document.getElementById(targetId);\n\n  // If the target element exists, perform smooth scrolling\n  if (targetElement) {\n    // Get the header height from the CSS variable, defaulting to 0 if not set\n    const headerHeight = parseFloat(\n      getComputedStyle(document.documentElement).getPropertyValue('--header-height-live') || '0'\n    );\n\n    window.scrollTo({\n      top: targetElement.getBoundingClientRect().top + window.scrollY - headerHeight,\n      behavior: 'smooth',\n    });\n  }\n});\n"],
  "mappings": "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",
  "names": ["t", "i", "s", "e", "o", "n", "observer"]
}
