{
  "version": 3,
  "sources": ["/cdn/shop/t/143/assets/global.js"],
  "sourcesContent": ["/**\n* -----------------------------------------------------------------------------\nDeclarativeShadowElement\n0. Base\n1. Component carousel\n2. Image behavior\n3. Image with text\n4. Marquee\n5. Countdown timer\n6. Multimedia player\n7. Gallery modal\n8. Product media\n9. Product card\n10. Before after\n11. Dialog\n12. Accordion\n13. Tab player list\n14. Copy button and share button\n15. Lazy HTML\n16. Customer JS\nease = [0.25, 0.1, 0.25, 1.0]\n* -----------------------------------------------------------------------------\n**/\n\n/**\n* 0. Base\n* -----------------------------------------------------------------------------\n*/\nimport { $4, $$4, $id4, debounce, throttle, fetchCache, fetchConfig, currency, matchMediaQuery, createImg, renderSrcset, requestIdleCallback, yieldToMainThread, checkImagesLoaded, getArrVisible, AutoplayElement, animationContent, admEvts, expiresManager, announce } from '@theme/utilities';\nimport { ThemeEvents, CartUpdateEvent, CartCountEvent, QuantitySelectorUpdateEvent, MediaStartedPlayingEvent, DiscountUpdateEvent } from '@theme/events';\nimport { animate, stagger, scroll, inView, frame, resize, delay, motionValue, hover, springValue, styleEffect } from \"@theme/m\";\nimport { trapFocus, removeTrapFocus, elFocus } from '@theme/focus';\nconst  { cartUpdate, cartReload, cartCount, cartError, currencyUpdate, cartDrawerRender, cartMainRender, loadingStart, loadingEnd, dialogOpening, dialogOpen, dialogClosing, dialogClose, discountUpdate } = ThemeEvents;\nconst html = document.documentElement,\nisRTL = (\"rtl\" == html.getAttribute(\"dir\"));\n\n// Memory leaks\nvar getterAdd = (ww, key, value, override = false) => {\n  //console.log('override', override );\n  if (!override && ww.has(key) ) return;\n  //console.log('addd', !override, ww.has(key), value );\n  (ww instanceof WeakSet) ? ww.add(key) : ww.set(key, value);\n};\nvar getterGet = (wm, key, value) => {\n  if ( !wm.has(key)) {\n    if (value) {\n      getterAdd(wm, key, value, true);\n    } else {\n      return null;\n    }\n  }\n  return wm.get(key);\n};\nvar getterRunFn = (ww, key, fn) => {\n  if ( !ww.has(key)) throw TypeError(ww + \"no exist\");\n  return fn;\n};\nvar getterDelete = (ww, key) => {\n  if ( ww.has(key)) ww.delete(key);\n};\n// var _thu = { nvt: 1 };\n\n// function isFunction(functionToCheck) {\n//   return (typeof functionToCheck === \"function\");\n// }\n// function loadScript(src) {\n//   return new Promise(function(resolve, reject) {\n//   const script = document.createElement('script');\n//   script.async = true;\n//   script.src = src;\n//   script.onload = resolve;\n//   script.onerror = reject;\n//   document.head.appendChild(script);\n//   });\n// }\n\n// const JSONProducts = {};\n// class getJSONProduct {\n//   static load(productHandle) {\n//     if (!productHandle) {\n//       return;\n//     }\n//     if (JSONProducts[productHandle]) {\n//       return JSONProducts[productHandle];\n//     }\n//     JSONProducts[productHandle] = new Promise(async (resolve, reject) => {\n//       const response = await fetch(`${Shopify.routes.root}products/${productHandle}.js`);\n//       if (response.ok) {\n//         const responseAsJson = await response.json();\n//         resolve(responseAsJson);\n//       } else {\n//         reject(`${productHandle} not loaded json`);\n//       }\n//     });\n//     return JSONProducts[productHandle];\n//   }\n// };\n\n// Visibilitychange\n// function visibilitychangeFn(options) {\n//   if (!options.observes) return;\n//   const checkVisibility = () => {\n//     if (document.visibilityState === 'visible') {\n//       if (isFunction(options.play) && options.observes.isInview) options.play();\n//     } else if (isFunction(options.pause)) {\n//       options.pause();\n//     }\n//   }\n//   document.addEventListener('visibilitychange', checkVisibility);\n\n// }\n\n/**\n * Wrap tables in a container div to make them scrollable when needed\n */\nfunction rteWrapTable(doc = document) {\n  const tables = $$4('.rte table:not(.hdt-wrapper-added)', doc);\n  if (tables.length == 0) return\n  tables.forEach((table) => {\n    table.classList.add('hdt-wrapper-added');\n    table.outerHTML = `<div class=\"hdt-scrollable-wrapper hdt-scrollbar\">${table.outerHTML}</div>`;\n  });\n}\n\n/**\n * Add aria-describedby attribute to external and new window links\n */\nfunction accessibleLinks(doc = document) {\n  const { hostname } = window.location,\n  links = $$4('a[href]:not([aria-describedby])', doc);\n  if (links.length == 0) return;\n\n  links.forEach((link) => {\n    const isExternal  = link.hostname !== hostname,\n        isTargetBlank = link.getAttribute('target') === '_blank';\n\n    if (isTargetBlank) {\n      link.setAttribute('aria-describedby', `a11y-new-window-${ isExternal ? 'external-' : ''}message`);\n      const rel = link.getAttribute('rel');\n      if (!rel || rel.indexOf('noopener') === -1) {\n        link.setAttribute('rel',`${rel ? rel + ' '  : ''}noopener`);\n      }\n    } else if (isExternal) {\n      link.setAttribute('aria-describedby', 'a11y-external-message');\n    }\n  });\n}\n\n/** Link Mylti Lang **/\nfunction localeUrl(doc = document) {\n  const {root} = Shopify.routes,\n        {hostname} = window.location;\n  if ( root == '/' ) return;\n  $$4('a[href=\"/\"]', doc).forEach((el) => el.setAttribute('href', root ));\n  $$4(`a[href*=\"${hostname}/\"]:not([unless-url],[href*=\"${hostname + root}\"],[href*=\"@\"],[href*=\"preview_theme_id=\"])`, doc).forEach((el) => el.setAttribute('href', el.getAttribute('href').replace( `${hostname}/`, hostname + root ) ));\n};\n/**\n * A custom element that formats rte content for easier styling\n */\nclass RTEFormatter extends HTMLElement {\n  connectedCallback() {\n    $$4('table', this).forEach(this.#formatTable);\n  }\n\n  /**\n   * Formats a table for easier styling\n   * @param {HTMLTableElement} table\n   */\n  #formatTable(table) {\n    // const wrapper = document.createElement('div');\n    // wrapper.classList.add('rte-table-wrapper');\n    // const parent = table.parentNode;\n    // if (parent) {\n    //   parent.insertBefore(wrapper, table);\n    //   wrapper.appendChild(table);\n    // }\n    table.classList.add('hdt-wrapper-added');\n    table.outerHTML = `<div class=\"hdt-scrollable-wrapper\">${table.outerHTML}</div>`;\n  }\n}\n\ncustomElements.define('rte-formatter', RTEFormatter);\n// class FrmAlert extends HTMLElement {\n//   connectedCallback() {\n//     const id = location.hash.slice(1),\n//     frmId = this.dataset.id || this.closest('form').id;\n//     console.log(id, frmId)\n//     this.hidden = id != frmId;\n//   }\n// }\n// customElements.define('hdt-form-alert', FrmAlert);\n\n// https://web.dev/articles/declarative-shadow-dom\n// class attachShadowRoots extends HTMLElement {\n//   connectedCallback(){\n//     if (!HTMLTemplateElement.prototype.hasOwnProperty('shadowRootMode') ) this.attachShadowRoots();\n//     if (Shopify.designMode) {\n//       this.closest('.shopify-section')?.addEventListener(admEvts.seLoad, (evt) => {\n//         //console.log('attachShadowRoots seLoad', evt);\n//         this.attachShadowRoots();\n//       });\n//       // this.closest('.shopify-section')?.addEventListener(admEvts.seSelect, (evt) => {\n//       //   console.log('attachShadowRoots seSelect', evt);\n//       // });\n//       // this.addEventListener(admEvts.select, (evt) => {\n//       //   console.log('attachShadowRoots select', evt);\n//       // });\n//       // this.addEventListener(admEvts.deselect, (evt) => {\n//       //   console.log('attachShadowRoots deselect', evt);\n//       // });\n//     }\n//   }\n//   attachShadowRoots() {\n//     //console.log('attachShadowRoots', this.shadowRoot);\n//     if (this.shadowRoot) return;\n//     const tmp = $4('template[shadowrootmode]', this);\n//     const shadowRoot = tmp.parentNode.attachShadow({ mode: \"open\" });\n//     shadowRoot.appendChild(tmp.content);\n//     tmp.remove();\n//   }\n// }\n// customElements.define('hdt-tmp', attachShadowRoots);\n\nlet cartPromise = null;\nfunction getCart() {\n  if (!cartPromise) {\n    cartPromise = fetch(`${Shopify.routes.root}cart.js`)\n    .then(r => r.json())\n    .finally(() => {\n      // Detete cache after when resolve/reject done\n      setTimeout( ()=> {\n        cartPromise = null;\n      }, 200)\n    });\n  }\n  return cartPromise;\n}\nconst springOptions = {   \n  // 1. Button press, toggle, dropdown\n  // stiffness: 400,\n  // damping: 35,\n  // mass: 1\n\n  // 2. Sheet, modal, drawer\n  // stiffness: 300,\n  // damping: 30,\n  // mass: 1 \n\n  // 3. Morphing / shared element\n  // stiffness: 250,\n  // damping: 28,\n  // mass: 1\n\n  stiffness: 400,\n  damping: 30,\n  mass: 1\n};\nclass DragCursor extends HTMLElement {\n  #controller;\n  #x = springValue(0, springOptions);\n  #y = springValue(0, springOptions);\n  #scale = springValue(0, springOptions);\n  #opacity = springValue(0, springOptions);\n  #initialX;\n  #initialY;\n  constructor() {\n    super();\n  }\n  async connectedCallback() {\n    this.#controller = new AbortController();\n    if (!matchMediaQuery(\"hover\")) return;\n    await yieldToMainThread();\n    const { top, left, width, height } = this.getBoundingClientRect();\n    this.#initialX = left + width / 2;\n    this.#initialY = top + height / 2;\n    styleEffect(this, { x: this.#x, y: this.#y, scale: this.#scale, opacity: this.#opacity })\n  }\n  disconnectedCallback() {\n   this.#controller.abort();\n  }\n\n  // get isPointerSupported() {\n  //   return (\n  //     !('ontouchstart' in window) &&\n  //     !(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) &&\n  //     window.matchMedia('(pointer: fine)').matches\n  //   );\n  // }\n\n  setupCursorElement(parentEl) {\n    if (!matchMediaQuery(\"hover\")) return;\n    if (!this.inited) {\n      document.addEventListener('mousemove', this.handleMouseMove.bind(this), { signal: this.#controller.signal });\n      this.inited = true;\n    }\n    hover(parentEl, () => {\n      if (parentEl.mousemove) this.handleCursor(parentEl)\n      //console.log('hover in')\n      return () => {\n        //console.log('hover out')\n        this.handleCursor(parentEl, false);\n      }\n    })\n    // parentEl.addEventListener('mouseenter', this.handleCursor.bind(this, parentEl));\n    // parentEl.addEventListener('mouseleave', this.handleCursor.bind(this, parentEl));\n    parentEl.mousemove = false;\n    parentEl.addEventListener('mousemove', ()=> {\n      //this.handleCursor.bind(this, parentEl)\n      parentEl.mousemove = true;;\n      this.handleCursor(parentEl);\n    }, { once: true });\n    $$4('a:not([unless]), button, [role=\"button\"], [hide-cursor-drag]', parentEl).forEach(element => {\n      hover(element, () => {\n        this.handleLinkHover(parentEl)\n        return () => this.handleLinkHover(parentEl, true);\n      })\n      // element.addEventListener('mouseenter', this.handleLinkHover.bind(this, parentEl));\n      // element.addEventListener('mouseleave', this.handleLinkHover.bind(this, parentEl));\n    });\n  }\n\n  handleMouseMove(e) {\n    this.#x.set(e.clientX - this.#initialX)\n    this.#y.set(e.clientY - this.#initialY)\n    // requestAnimationFrame(() => {\n    //   animate(this, { left: [null, `${e.clientX}px`], top: [null, `${e.clientY}px`] }, { duration: .03, ease: 'easeOut' });\n    // });\n  }\n  // handleCursor(el, e) {\n  //   if (!el?.isActive) return;\n  //   this.classList.toggle('crs-drag-active', e.type !== 'mouseleave');\n  //   el.classList.toggle('crs-drag-active', e.type !== 'mouseleave');\n  // }\n  handleCursor(el, add = true) {\n    //console.log(el, add)\n    if (!el?.isActive) return;\n    this.classList.toggle('crs-drag-active', add);\n    el.classList.toggle('crs-drag-active', add);\n    this.#scale.set(add ? 1 : 0.5);\n    this.#opacity.set(add ? 1 : 0);\n  }\n  // handleLinkHover(el, e) {\n  //   //console.log(el)\n  //   if (!el?.isActive) return;\n  //   this.classList.toggle('crs-drag-active', e.type === 'mouseleave');\n  //   el.classList.toggle('crs-drag-active', e.type === 'mouseleave');\n  // }\n  handleLinkHover(el, add = false) {\n    //console.log(el)\n    if (!el?.isActive) return;\n    this.classList.toggle('crs-drag-active', add);\n    el.classList.toggle('crs-drag-active', add);\n    this.#scale.set(add ? 1 : 0.5);\n    this.#opacity.set(add ? 1 : 0);\n  }\n}\ncustomElements.define('hdt-drag-cursor', DragCursor);\n\n/**\n* 1. Component carousel\n*/\nconst aniClipPath = {\n  \"none\": \"none\",\n  \"ani1\": \"inset(0 0 100% 0)\", // Top to bottom\n  \"ani2\": \"inset(100% 0 00)\", // Bottom to top\n  \"ani3\": \"inset(0 100% 0 0)\", // Left to right\n  \"ani4\": \"inset(0 0 0 100%)\" // Right to left\n}\n\n/**\n* 2. Image behavior\n* -----------------------------------------------------------------------------\n*/\nvar _image_behavior = new WeakSet(),\n_image_behavior_fn, _img_effect = new WeakMap(),\n_behavior_effect  = new WeakMap();\nclass ImageBehavior extends HTMLElement {\n  constructor() {\n    super();\n    getterAdd(_image_behavior, this);\n    getterAdd(_img_effect, this, $4('img[is=\"img-effect\"]', this));\n  }\n  connectedCallback() {\n    if (!getterGet(_img_effect, this)) return;\n    getterAdd(_behavior_effect, this, this.getAttribute('eff') || getterGet(_img_effect, this).getAttribute('eff'));\n    if (getterGet(_behavior_effect, this) != 'none' && matchMediaQuery(\"motion\")) getterRunFn(_image_behavior, this, _image_behavior_fn).call(this);\n  }\n};\n_image_behavior_fn = function(){\n  if ( getterGet(_behavior_effect, this) === 'ambient' ) {\n    // ambient\n    animate(getterGet(_img_effect, this), { transform: [\"rotate(0deg) translateX(1em) rotate(0deg) scale(1.2)\", \"rotate(360deg) translateX(1em) rotate(-360deg) scale(1.2)\"] }, {\n      duration: 30,\n      ease: \"linear\",\n      repeat: Infinity\n    });\n  } else if ( getterGet(_behavior_effect, this) === 'parallax' ) {\n    // parallax\n    const getScale = parseFloat(this.style.getPropertyValue(\"--parallax-scale\") || 1.3),\n    [scale, translate] = [getScale, 0.15 * 100 / getScale],\n    isFirstSection = this.closest(\".hdt-section\")?.matches(\":first-child\");\n    scroll(\n      animate(getterGet(_img_effect, this), { transform: [`scale(${scale}) translateY(-${translate}%)`, `scale(${scale}) translateY(${translate}%)`] }, { ease: \"linear\" }),\n      {\n        target: getterGet(_img_effect, this),\n        offset: [isFirstSection ? \"start start\" : \"start end\", \"end start\"]\n      }\n    );\n  }\n\n};\ncustomElements.define(\"hdt-effect-img\", ImageBehavior);\n\n/**\n* 3. Image with text\n* -----------------------------------------------------------------------------\n*/\nvar _image_with_text_inView = new WeakSet(), image_with_text_inView_fn;\nclass ImageWithText extends HTMLElement {\n  constructor() {\n    super();\n    getterAdd(_image_with_text_inView, this);\n  }\n  connectedCallback() {\n    if (matchMediaQuery(\"motion\") && this.hasAttribute('reveal-on-scroll') ) inView(this, getterRunFn(_image_with_text_inView, this, image_with_text_inView_fn).bind(this), { margin: \"-50px 0px\" });\n  }\n  get revealStr() {\n    return '[reveal], [can-reveal]';\n  }\n};\nimage_with_text_inView_fn = async function(){\n  const sequence = []\n  const media = $4('.hdt-media-wrapper[reveal-invisible]', this);\n  if (media) sequence.push([media, { visibility: [\"hidden\", \"visible\"], clipPath: [aniClipPath[this.getAttribute('ani-img')], \"inset(0 -1px 0 0)\"] }, { duration: 1.85, ease: [0.25,1,0.5,1] }]);\n  sequence.push([\n    getArrVisible($$4(this.revealStr, this)),\n    { opacity: [0, 1], transform: animationContent[this.getAttribute('ani') || 'ani1'] },\n    {\n      duration: 1,\n      delay: stagger(0.1, { startDelay: 0.4, ease: [0.25, 0.1, 0.25, 1.0]} ),\n      transform: { ease: [0, 0.87, 0.58, 1], duration: 0.6 },\n      ...(media && { at: \"<\" }) // add at: \"<\" if media is exists\n    }\n  ]);\n  animate(sequence);\n};\nclass MediaOverlay extends ImageWithText {};\ncustomElements.define('hdt-image-with-text', ImageWithText);\ncustomElements.define('hdt-media-overlay', MediaOverlay);\n\n/**\n* 4. Marquee\n* -----------------------------------------------------------------------------\n* https://github.com/ezekielaquino/Marquee3000/tree/master\n* https://stackoverflow.com/questions/71165923/how-do-i-make-an-infinite-marquee-with-js\n* https://stackoverflow.com/questions/337330/javascript-marquee-to-replace-marquee-tags\n*/\n// var _marquee_old_width = new WeakMap(),\n// _marquee_animation = new WeakMap(),\n// _marquee_create_content = new WeakSet(), marquee_create_content_fn,\n// _marquee_destroy_content = new WeakSet(), marquee_destroy_content_fn,\n// _marquee_enter = new WeakSet(), marquee_enter_fn,\n// _marquee_leave = new WeakSet(), marquee_leave_fn;\n// class Marquee extends HTMLElement {\n//   constructor() {\n//     super();\n//     this.classes = {\n//       enabled  : 'hdt-marquee--enabled',\n//       duplicate: 'hdt-marquee--duplicate'\n//     };\n//     getterAdd(_marquee_old_width, this, 0);\n//     getterAdd(_marquee_animation, this, void 0);\n//     getterAdd(_marquee_create_content, this);\n//     getterAdd(_marquee_destroy_content, this);\n//     getterAdd(_marquee_enter, this);\n//     getterAdd(_marquee_leave, this);\n//     this.attachShadow({ mode: \"open\" }).appendChild(document.createRange().createContextualFragment(\"<slot part='wrapper'></slot>\"));\n//     this.init();\n//     let resizeObserver = new ResizeObserver(entries => this.init());\n//     resizeObserver.observe(this);\n//     this.addEventListener('unobserve', (e)=> {\n//       //console.log(e.composed,e.bubbles,e.cancelable);\n//       resizeObserver.unobserve(this); resizeObserver = null });\n\n//     if (matchMediaQuery(\"motion\")) {\n//       inView(this, (info) => {\n\n//         getterGet(_marquee_animation, this)?.play();\n//         this.isInview = true;\n//         // console.log('play')\n//         return (leaveInfo) =>  {\n//           getterGet(_marquee_animation, this)?.pause();\n//           this.isInview = false;\n//           //console.log('pause')\n//         }\n//       }, { margin: \"250px\" })\n\n//       // listen for visibility change event\n//       visibilitychangeFn({\n//         observes: this,\n//         play: getterGet(_marquee_animation, this)?.play(),\n//         pause: getterGet(_marquee_animation, this)?.pause()\n//       });\n//     }\n//   }\n//   connectedCallback() {\n//     if (Shopify.designMode) this.init();\n//   }\n//   disconnectedCallback() {\n//     this.removeEventListener(\"mouseenter\", getterRunFn(_marquee_enter, this, marquee_enter_fn).bind(this));\n//     this.removeEventListener(\"touchstart\", getterRunFn(_marquee_enter, this, marquee_enter_fn).bind(this));\n//     this.dispatchEvent(new CustomEvent(\"unobserve\"));\n//   }\n//   init() {\n//     if (this.clientWidth < getterGet(_marquee_old_width, this) ) return;\n//     getterAdd(_marquee_old_width, this, this.clientWidth, true);\n//     getterRunFn(_marquee_destroy_content, this, marquee_destroy_content_fn).call(this);\n//     getterRunFn(_marquee_create_content, this, marquee_create_content_fn).call(this);\n//   }\n//   get wrapper() {\n//     return this.shadowRoot.querySelector('[part=\"wrapper\"]');\n//   }\n// };\n// marquee_create_content_fn = function(){\n//   let multiply = Math.max((Math.ceil(this.clientWidth / this.firstElementChild.offsetWidth)+1), 2),\n//   clone,\n//   i;\n//   // calc speed\n//   // https://stackoverflow.com/questions/38118002/css-marquee-speed\n//   // By dividing the width by a certain value (100 in the example), we can adjust the speed of the \"marquee\" effect\n\n//   // Duplicate content at least once\n//   const frag = document.createDocumentFragment();\n//   for (i = 0; i < multiply; i++) {\n//     clone = this.firstElementChild.cloneNode(true);\n//     clone.setAttribute('aria-hidden',true);\n//     clone.classList.add(this.classes.duplicate);\n//     clone.style.setProperty('--index', i + 1);\n//     frag.appendChild(clone);\n//   }\n//   this.append(frag);\n\n//   // Add holder init class\n//   this.classList.add(this.classes.enabled);\n\n//   if (matchMediaQuery(\"motion\")) {\n//     getterAdd(\n//       _marquee_animation, this,\n//       animate(this.wrapper, { transform: [\"translateX(0)\", `translateX(calc(var(--value-logical-flip) * var(--dir-logical) * 100%))`] }, {\n//         duration: 1 / parseFloat(this.getAttribute(\"speed\") || 0.4) * (this.wrapper.clientWidth / 350),\n//         ease: \"linear\",\n//         repeat: Infinity\n//       })\n//     , true);\n//     //getterGet(_marquee_animation, this)?.pause();\n//     if (this.hasAttribute('pausable')) {\n//       this.addEventListener(\"mouseenter\", getterRunFn(_marquee_enter, this, marquee_enter_fn).bind(this));\n//       this.addEventListener(\"touchstart\", getterRunFn(_marquee_enter, this, marquee_enter_fn).bind(this));\n//     }\n//   }\n// }\n// marquee_destroy_content_fn = function(){\n//   // Remove holder init class\n//   this.classList.remove(this.classes.enabled);\n//   // Remove duplicated content\n//   const boxes = $$4('.'+this.classes.duplicate, this);\n//   if (boxes.length) boxes.forEach(e => e.remove() );\n// }\n// marquee_enter_fn = function(){\n//   getterGet(_marquee_animation, this)?.pause();\n//   this.addEventListener(\"mouseleave\", getterRunFn(_marquee_leave, this, marquee_leave_fn).bind(this));\n//   this.addEventListener(\"touchend\", getterRunFn(_marquee_leave, this, marquee_leave_fn).bind(this));\n// }\n// marquee_leave_fn = function(){\n//   getterGet(_marquee_animation, this)?.play();\n//   this.removeEventListener(\"mouseleave\", getterRunFn(_marquee_leave, this, marquee_leave_fn).bind(this));\n//   this.removeEventListener(\"touchend\", getterRunFn(_marquee_leave, this, marquee_leave_fn).bind(this));\n// }\nclass Marquee extends HTMLElement {\n #resizeObserver;\n  constructor() {\n    super();\n    const rawDirection = this.getAttribute('direction') || 'ltr';\n    this._speed = 300 * parseFloat(this.getAttribute('speed-factor') || 0.4); // Move 300px/s\n    this._direction = isRTL ? rawDirection === 'ltr' ? 'rtl' : 'ltr' : rawDirection;\n    this._animation = null;\n    this.#resizeObserver = null,\n    this._lastWidth = 0;\n  }\n\n  connectedCallback() {\n    this._inner = $4('.hdt-marquee-inner', this);\n    //console.log(this)\n    if (!this._inner) {\n      let _originalItem = $4('.hdt-marquee-item', this);\n      this.innerHTML = '';\n      this._inner = document.createElement('div');\n      this._inner.className = 'hdt-marquee-inner';\n      this.appendChild(this._inner);\n      this._inner.appendChild(_originalItem.cloneNode(true));\n    }\n\n    this._setup();\n    this.#resizeObserver = resize(this, this._setup.bind(this));\n    // this.#resizeObserver = new ResizeObserver(this._setup.bind(this));\n    // this.#resizeObserver.observe(this);\n    //window.addEventListener('resize', this._setup.bind(this));\n    // Hover pause\n    if (this.hasAttribute('pausable') && matchMediaQuery(\"motion\")) {\n      this.addEventListener('mouseenter', () => this._animation?.pause());\n      this.addEventListener('mouseleave', () => this._animation?.play());\n    }\n  }\n\n  disconnectedCallback() {\n    this._lastWidth = 0;\n    this._animation?.cancel();\n    //window.removeEventListener('resize', this._setup);\n    if (this.#resizeObserver) this.#resizeObserver();\n  }\n\n  _setup() {\n    let firstWidth = this._inner.firstElementChild.offsetWidth;\n    if (firstWidth === 0 || this._lastWidth == firstWidth) return;\n    this._lastWidth = firstWidth;\n    $$4('.hdt-marquee--duplicate', this).forEach(e => e.remove() );\n    //this._inner.innerHTML = '';\n    //console.log(this._inner?.firstElementChild)\n    const clonesNeeded = Math.ceil((this.offsetWidth * 3) / firstWidth);\n\n    const frag = document.createDocumentFragment();\n    let i;\n    let clone;\n    for (i = 0; i < clonesNeeded; i++) {\n      clone = this._inner.firstElementChild.cloneNode(true);\n      clone.setAttribute('aria-hidden',true);\n      clone.classList.add('hdt-marquee--duplicate');\n      frag.appendChild(clone);\n    }\n    this._inner.append(frag);\n    clone = null;\n\n    if (!matchMediaQuery(\"motion\")) return;\n\n    const moveDistance = this._inner.scrollWidth / 3;\n    const duration = moveDistance / this._speed; // seconds\n    //console.log(duration)\n\n    const from = this._direction === 'rtl' ? '0px' : `-${moveDistance}px`;\n    const to = this._direction === 'rtl' ? `-${moveDistance}px` : '0px';\n    //console.log(from, to, this._direction)\n\n    this._animation?.stop();\n    this._animation = animate(this._inner, {\n      transform: [`translateX(${from}) translateZ(0)`, `translateX(${to}) translateZ(0)`]\n    }, {\n      duration: duration,\n      ease: 'linear',\n      repeat: Infinity\n    });\n  }\n}\n\ncustomElements.define('hdt-marquee', Marquee);\n/**\n* 5. Countdown timer\n* -----------------------------------------------------------------------------\n*/\n\nconst countdown = {\n  selectors: {\n    \"days\": \"[is='days']\",\n    \"hours\": \"[is='hours']\",\n    \"minutes\": \"[is='minutes']\",\n    \"seconds\": \"[is='seconds']\"\n  },\n  classes: {\n    \"enabled\": \"hdt-cd--enabled\",\n    \"hide\": \"hdt-cd--hide\",\n    \"complete\": \"hdt-cd--complete\"\n  },\n  defaults: {\n    \"idTmp\": null,\n    \"hasZero\": true,\n    \"actionElapsed\": 'zero'\n  }\n};\nvar _ending_date = new WeakMap(),\n_timer_frame = new WeakMap(), _timer_playing = new WeakMap(),\n_timer_loop = new WeakSet(), timer_loop_fn,\n_timer_play = new WeakSet(), timer_play_fn,\n_timer_pause = new WeakSet(), timer_pause_fn,\n_timer_destroy = new WeakSet(), timer_destroy_fn,\n_timer_in_view = new WeakMap(), _timer_doc_hidden = new WeakMap(),\n_timer_options = new WeakMap(),\n_timer_days_el = new WeakMap(), _timer_hours_el = new WeakMap(), _timer_minutes_el = new WeakMap(), _timer_seconds_el = new WeakMap();\nconst { daysMax } = themeHDN.settings;\nclass CountdownTimer extends HTMLElement {\n  constructor() {\n    super();\n    getterAdd(_timer_loop, this);\n    getterAdd(_timer_play, this);\n    getterAdd(_timer_pause, this);\n    getterAdd(_timer_destroy, this);\n    getterAdd(_timer_playing, this, false);\n    getterAdd(_timer_in_view, this, false);\n    getterAdd(_timer_doc_hidden, this, false);\n\n    getterAdd(_timer_options, this, Object.assign({}, countdown.defaults,  JSON.parse(this.getAttribute('config') || '{}')));\n    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#date_time_string_format\n    // YYYY-MM-DDTHH:mm:ssZ\n    //const endingDate = new Date('2024-08-05T00:00:00-04:00');\n    const endingDate = new Date(getterGet(_timer_options, this).datetime+(themeHDN.settings.shopTimezone || \"\"));\n    //console.log(endingDate)\n    if (isNaN(endingDate)) return;\n    getterAdd(_ending_date, this, endingDate);\n\n    if (getterGet(_timer_options, this).idTmp) {\n      const idTmp = $id4(getterGet(_timer_options, this).idTmp);\n      if (idTmp) this.innerHTML = idTmp.innerHTML;\n    }\n\n    getterAdd(_timer_days_el, this, $4(countdown.selectors.days,this));\n    getterAdd(_timer_hours_el, this, $4(countdown.selectors.hours,this));\n    getterAdd(_timer_minutes_el, this, $4(countdown.selectors.minutes,this));\n    getterAdd(_timer_seconds_el, this, $4(countdown.selectors.seconds,this));\n    if (this.daysEl) {\n      this.daysEl.isDay = true;\n      this.daysEl.max = daysMax;\n    } else {\n      this.hrsEl.isHour = true;\n      //this.hrsEl.max = 24 * daysMax;\n      this.hrsEl.max = daysMax == 99 ? 99 : 24 * daysMax;\n    }\n\n    // int\n    // console.log(!getterGet(_timer_frame, this))\n    if (!getterGet(_timer_frame, this)) this.classList.add(countdown.classes.enabled);\n    getterRunFn(_timer_play, this, timer_play_fn).call(this);\n\n    inView(this, () => {\n       getterAdd(_timer_in_view, this, true, true);\n      this.isInview = true;\n      return () =>  {\n       getterAdd(_timer_in_view, this, false, true);\n      }\n    }, { margin: \"444px\" });\n\n    // Listen for visibility change event\n    document.addEventListener(\"visibilitychange\", () => getterAdd(_timer_doc_hidden, this, document.hidden, true));\n  }\n  connectedCallback() {\n    // Fixed\n  }\n  disconnectedCallback() {\n    //getterRunFn(_timer_destroy, this, timer_destroy_fn).call(this);\n    if (typeof _timer_destroy !== 'undefined' && typeof timer_destroy_fn === 'function') {\n      try {\n        getterRunFn(_timer_destroy, this, timer_destroy_fn).call(this);\n      } catch (e) {\n        console.warn(\"Timer cleanup failed\", e);\n      }\n    }\n  }\n  get daysEl() {\n    return getterGet(_timer_days_el, this);\n  }\n  get hrsEl() {\n    return getterGet(_timer_hours_el, this);\n  }\n};\ntimer_loop_fn = function(){\n  const { actionElapsed, hasZero } = getterGet(_timer_options, this);\n  // Get today's date and time\n  const nowDate = new Date();\n  if (getterGet(_ending_date, this) < nowDate) {\n    getterRunFn(_timer_destroy, this, timer_destroy_fn).call(this);\n\n    // If the count down is finished, write some text\n    // actionElapsed: hide, hide_cd_show_mess, zero\n    this.classList.add(countdown.classes.complete);\n    if (actionElapsed == 'hide') {\n      const hideEl = this.classList.contains('hide-cd-elapsed') ? this : this.closest('.hide-cd-elapsed');\n      if (Shopify.designMode) {\n        hideEl?.setAttribute('hidden', '');\n      } else {\n        hideEl?.remove();\n      }\n    } else {\n      if (actionElapsed == 'hide_cd_show_mess') {\n        this.style.opacity = 0;\n        this.nextElementSibling?.removeAttribute('hidden');\n      }\n      return clearInterval(getterGet(_timer_frame, this));\n    }\n  }\n\n  if (!getterGet(_timer_in_view, this) || getterGet(_timer_doc_hidden, this)) return;\n\n  let diff = Math.abs((getterGet(_ending_date, this).getTime() - nowDate.getTime()) / 1e3);  // Time calculations for days, hours, minutes and seconds\n\n  const totalHours  = Math.floor(diff / 3600);\n  const days        = Math.floor(diff / 86400);\n        diff       -= days * 86400;\n  let   hours       = Math.floor(diff / 3600);\n        diff       -= hours * 3600;\n  const minutes     = Math.floor(diff / 60);\n        diff       -= minutes * 60;\n  const seconds     = Math.floor(diff);\n\n  //if (!this.daysEl) hours = totalHours;\n  //console.log(hours)\n  if (this.daysEl) {\n    this.daysEl.updateAttr(days, hasZero);\n  } else {\n    hours = Math.min(totalHours, this.hrsEl.max); // Limit hours to this.hrsEl.max\n  }\n  this.hrsEl?.updateAttr(hours, hasZero);\n  getterGet(_timer_minutes_el, this)?.updateAttr(minutes, hasZero);\n  getterGet(_timer_seconds_el, this)?.updateAttr(seconds, hasZero);\n};\ntimer_play_fn = function(){\n  if (getterGet(_timer_playing,this)) return;\n  //console.log('play')\n  getterAdd(_timer_frame, this, setInterval(getterRunFn(_timer_loop, this, timer_loop_fn).bind(this), 1e3), true);\n  getterRunFn(_timer_loop, this, timer_loop_fn).call(this); // Run first when load site\n  getterAdd(_timer_playing, this, true, true);\n};\ntimer_pause_fn = function(){\n  if (!getterGet(_timer_playing, this)) return;\n  //console.log('pause')\n  //this.timerInterval && clearInterval(this.timerInterval);\n  clearInterval(getterGet(_timer_frame, this));\n  getterAdd(_timer_playing, this, false, true);\n};\ntimer_destroy_fn = function(){\n  this.classList.remove(countdown.classes.enabled);\n  getterRunFn(_timer_pause, this, timer_pause_fn).call(this);\n};\n\nvar _numlist = new WeakMap();\nclass CountdownTimeItem extends HTMLElement {\n  static observedAttributes = [\"numbers\"];\n  #hasZero = true;\n  constructor() {\n    super();\n  }\n  get #max() {\n    return this.max || 99;\n  }\n  get #padded() {\n    return this.padded ??= this.isDay ? 3 : this.isHour ? 5 : 2;\n  }\n  updateAttr(newValue, hasZero) {\n    if (this.getAttribute('numbers') == newValue ) return;\n    this.#hasZero = hasZero;\n    this.setAttribute('numbers', newValue);\n  }\n  async attributeChangedCallback(name, oldValue, newValue) {\n     //console.log('1', oldValue, newValue)\n    if (oldValue === newValue) return;\n\n    let num = String(Math.min(this.#max, newValue)),\n    numPad = num.padStart(this.#padded, \"0\");\n    if (this.max && (this.isDay || this.isHour)) this.setAttribute('show-el', num.length);\n    [...numPad].forEach((num, index) => {\n      this.firstElementChild.children[index].setAttribute(\"num\", num);\n      //this.children[index].textContent = num;\n    });\n    // Update Unit\n    if (this.childElementCount > 1 && this.lastElementChild.shadowRoot) {\n      this.lastElementChild.setAttribute(\"numbers\", numPad);\n    }\n    // End Update Unit\n    //console.log(this.#hasZero, !this.#hasZero)\n    if (!this.#hasZero) this.firstElementChild.children[this.isDay ? 1 : this.isHour ? 3 : 0].style.display = (numPad < 10 ) ? 'none' : 'inline-block';\n  }\n};\nclass CountdownTimerNumber extends HTMLElement {\n  static observedAttributes = [\"num\"];\n  constructor() {\n    super();\n    let tmp = '', i, limit = parseInt(this.getAttribute('limit')) || 10;\n    for (i = 1; i < limit; i++) { tmp += `<span part=\"num\" style=\"opacity: 0\">${i}</span>`; }\n    this.attachShadow({ mode: \"open\" }).appendChild(document.createRange().createContextualFragment(`<span part=\"numlist\"><span part=\"num\">0</span>${tmp}</span>`));\n    tmp = ''; // remove cache\n\n    getterAdd(_numlist, this, this.shadowRoot.firstElementChild);\n  }\n  async attributeChangedCallback(name, oldValue, newValue) {\n    //console.log(oldValue, newValue, this)\n    if (oldValue == null || oldValue === newValue) return;\n    animate(getterGet(_numlist, this).children[parseInt(oldValue)], { opacity: [1, 0], transform: [\"translateY(0) scale(1)\", \"translateY(-100%) scale(.3)\"] }, { duration: this.hasAttribute('eff') ? 0.3 : 0, ease: [0.25, 0.1, 0.25, 1.0] }); // .34,.78,.45,.98\n    animate(getterGet(_numlist, this).children[parseInt(newValue)], { opacity: [0, 1], transform: [\"translateY(100%) scale(.5)\", \"translateY(0) scale(1)\"] }, { duration: this.hasAttribute('eff') ? 0.3 : 0, ease: [0.25, 0.1, 0.25, 1.0] }); // .34,.78,.45,.98\n  }\n};\n// plural singular\nclass CountdownTimerText extends HTMLElement {\n  static observedAttributes = [\"numbers\"];\n  constructor() {\n    super();\n    if (!this.hasAttribute('singular')) return;\n    this.attachShadow({ mode: \"open\" });\n    let i = 0;\n    let textHtml = \"\";\n    for (; i < 2; i++) {\n      textHtml += `<span part=\"unit\" style=\"grid-area: 1 / -1; will-change: opacity; opacity: ${ i ? 0 : 1 };\">${ i ? this.getAttribute('singular') : this.textContent }</span>`;\n    }\n    this.shadowRoot.appendChild(document.createRange().createContextualFragment(textHtml));\n  }\n  async attributeChangedCallback(name, oldValue, newValue) {\n    // if (oldValue === null || oldValue === newValue) {\n    //   return;\n    // }\n    if (oldValue === newValue) return;\n    this.shadowRoot.children[0].style.opacity = (newValue > 1) ? 1 : 0;\n    this.shadowRoot.children[1].style.opacity = (newValue < 2) ? 1 : 0;\n  }\n};\n\ncustomElements.define('hdt-countdown-text', CountdownTimerText);\ncustomElements.define('hdt-countdown-number', CountdownTimerNumber);\ncustomElements.define('hdt-countdown-item', CountdownTimeItem);\ncustomElements.define('hdt-countdown', CountdownTimer);\n\n\n/**\n* 6. Multimedia player\n* -----------------------------------------------------------------------------\n*/\nclass MediaManager extends HTMLElement {\n  #controller;\n  constructor() {\n    super();\n    this.isPlayingState = false;\n    this.type = this.getAttribute('type');\n  }\n\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    this.media = $4('video, iframe', this);\n    if (this.type === \"html5\") {\n      this.dispatchEvent(new CustomEvent('media:ready'));\n      if (this.hasAttribute('duration')) this.media.addEventListener(\"loadedmetadata\", () => this.#duration = this.media.duration);\n      this.media.addEventListener(\"play\", () => this.#setPlaying(true), { signal });\n      this.media.addEventListener(\"pause\", () => this.#setPlaying(false), { signal });\n      this.media.addEventListener(\"ended\", () => this.#setPlaying(false), { signal });\n    } else if (this.type === \"youtube\" ) {\n      this.media.addEventListener(\"load\", () => this.media.contentWindow.postMessage(JSON.stringify({ event: \"listening\", id: this.dataset.id }), \"*\"), { once: true, signal });\n    }\n\n    //document.addEventListener(ThemeEvents.mediaStartedPlaying, this.pause.bind(this), { signal });\n    document.addEventListener(dialogClose, this.pause.bind(this), { signal });\n\n    if (!this.hasAttribute('media-group')) return;\n    document.addEventListener('shopify_xr_launch', this.pause.bind(this), { signal });\n    this.addEventListener('media:hidden', this.pause.bind(this), { signal });\n    if (this.hasAttribute('autoplay')) this.addEventListener('media:visible', this.play.bind(this), { signal });\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n  #setPlaying(state) {\n    this.isPlayingState = state;\n    if (state) {\n      this.setAttribute(\"playing\", \"\");\n      if (this.hasAttribute('media-group')) this.dispatchEvent(new MediaStartedPlayingEvent(this));\n      //if (this.hasAttribute('media-group') && !this.closest('hdt-slider-media')?.isActive) this.dispatchEvent(new MediaStartedPlayingEvent(this));\n    } else {\n      this.removeAttribute(\"playing\");\n    }\n  }\n\n  #postMessage(msg) {\n    this.media?.contentWindow?.postMessage(msg, \"*\");\n  }\n\n  onMessage(data) {\n    const { event } = data;\n    if (this.type === \"youtube\") {\n      //console.log('Youtube message event: ', event, data)\n      //if ( data.id != this.dataset.id) return; // pick only messages for this instance\n      if (event === \"initialDelivery\") {\n        if (this.hasAttribute('duration')) this.#duration = data.info.duration;\n        this.dispatchEvent(new CustomEvent('media:ready'));\n      } else if (event === \"infoDelivery\" && data.info && \"playerState\" in data.info) {\n        //console.log('duration: ', data.info, data.info.duration)\n        switch (data.info.playerState) {\n          case 1:\n            this.#setPlaying(true); break;   // PLAYING\n          case 2:\n          case 0:\n            this.#setPlaying(false); break;// PAUSED or ENDED\n        }\n      }\n    } else {\n      //if ( data.player_id != this.dataset.id) return; // pick only messages for this instance\n      //console.log('Vimeo message event: ', event, data)\n      switch (event) {\n        case \"ready\":\n          [\"play\", \"pause\", \"ended\"].forEach(value => {\n            this.media.contentWindow.postMessage({ method: \"addEventListener\", value }, \"*\");\n          });\n          this.dispatchEvent(new CustomEvent('media:ready'));\n          //console.log('Vimeo ready');\n          if (this.hasAttribute('duration')) this.#postMessage({ method: \"getDuration\" });\n          break;\n        case \"play\":\n          this.#setPlaying(true); break;\n        case \"pause\":\n        case \"ended\":\n          this.#setPlaying(false); break;\n        default:\n          // if (data.method === 'play' && !this.hasAttribute('playing')) {\n          //   this.#setPlaying(true);\n          // } else\n          if (data.method === 'getDuration' && typeof data.value === 'number') {\n            this.#duration = data.value;\n          }\n      }\n    }\n  }\n\n  #stringJson(func) {\n    return JSON.stringify({ event: \"command\", func, args: [] });\n  }\n\n  async play() {\n    if (this.isPlayingState) return false;\n    if (this.type === \"html5\") {\n      this.media.play();\n    } else if (this.type === \"vimeo\") {\n      this.#postMessage({ method: \"play\" });\n    } else if (this.type === \"youtube\") {\n      this.#postMessage(this.#stringJson(\"playVideo\"));\n    }\n    return new Promise((resolve) => {\n      let count = 0;\n      const checkPlay = () => {\n          count++;\n          //console.log('checkPlay '+ this.type + ': ', this.hasAttribute('playing'))\n          if (this.hasAttribute('playing')) {\n            this.#setPlaying(true);\n            resolve(true);\n          } else if (count > 15) { // 1.5s\n            this.#setPlaying(false);\n            resolve(false);\n          } else {\n            setTimeout(checkPlay, 100);\n          }\n      };\n      checkPlay();\n    });\n  }\n\n  pause() {\n    if (!this.isPlayingState) return\n    if (this.type === \"html5\") {\n      this.media.pause();\n    } else if (this.type === \"vimeo\") {\n      this.#postMessage({ method: \"pause\" });\n    } else if (this.type === \"youtube\") {\n      this.#postMessage(this.#stringJson(\"pauseVideo\"));\n    }\n    this.#setPlaying(false);\n  }\n\n  isPlaying() {\n    //if (this.type === \"html5\") return !(this.media.paused || this.media.ended);\n    return this.isPlayingState;\n  }\n\n  /**\n   * @param {number} second\n   */\n  set #duration(second) {\n    this.style.setProperty('--hdt-media-duration', `${second * 1000}ms`);\n  }\n}\nwindow.addEventListener(\"message\", (evt) => {\n  //console.log(evt)\n  if (evt.data && (evt.origin.includes('www.youtube') || evt.origin.includes('vimeo.com')) ) {\n    let data;\n    try { data = typeof evt.data === \"string\" ? JSON.parse(evt.data) : evt.data; } catch { return; }\n    $4(`hdt-video[data-id=\"${data.player_id || data.id}\"]`)?.onMessage(data);\n  }\n});\n\n// Video, YouTube, Vimeo\nvar _size_bg_video = new WeakSet(), size_bg_video_fn,\n_setup_play_btn = new WeakSet(), setup_play_btn_fn;\nclass VideoPlayer extends MediaManager {\n  #controller;\n  constructor() {\n    super();\n    getterAdd(_size_bg_video, this);\n    getterAdd(_setup_play_btn, this);\n  }\n  async connectedCallback () {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    const tmp = $4(\"template\", this);\n    tmp?.replaceWith(tmp.content.firstElementChild.cloneNode(true));\n    if (this.hasAttribute('background')) {\n      getterRunFn(_size_bg_video, this, size_bg_video_fn).call(this);\n      // Listen to resize to keep a background-size:cover-like layout\n      window.addEventListener('resize', debounce(getterRunFn(_size_bg_video, this, size_bg_video_fn).bind(this), 300), { signal });\n    }\n    if (this.type === 'html5') inView(this, () => this.media?.setAttribute(\"preload\", \"metadata\"), { margin: \"666px\" });\n    if (this.hasAttribute('autoplay')) {\n      if (this.hasAttribute('media-group')) {\n        this.#autoPlay(true);\n      } else {\n        this.addEventListener(\"media:ready\", () => this.#autoPlay(), { once: true, signal });\n      }\n    }\n    super.connectedCallback();\n  };\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#controller.abort();\n  }\n  // #waitForIframeLoad(iframe, signal) {\n  //   return new Promise((resolve) => {\n  //     if (iframe.contentWindow && iframe.contentDocument?.readyState === \"complete\") {\n  //       resolve();\n  //     } else {\n  //       iframe.addEventListener(\"load\", () => resolve(), { once: true, signal });\n  //     }\n  //   });\n  // }\n  #autoPlay(group = false) {\n    if (group) {\n      this.slider.addEventListener('reInit', ()=> {\n        if (this.slider.isActive) {\n          if (this.slider.apiS.selectedScrollSnap() === 0 && this.closest('.hdt-product__media-item').classList.contains('is-selected')) {\n            this.playHandle();\n          }\n        } else {\n          inView(this, () => {\n              this.playHandle();\n              return () => this.pause();\n            },\n            { margin: \"15px 0px\" }\n          )\n        }\n      }, { once: false});\n    } else if (this.hasAttribute('notInView')) {\n      this.playHandle();\n    } else {\n      inView(this, () => {\n          this.playHandle();\n          return () => {\n            this.pause();\n          }\n        },\n        { margin: '888px' }\n      )\n    }\n  }\n  async playHandle() {\n    this.play().then((canPlay) => {\n      if (!canPlay) {\n        // console.log('Autoplay blocked: ', this.type, canPlay);\n        if (this.hasAttribute(\"show-controls\") && !this.hasAttribute(\"has-controls\")) getterRunFn(_setup_play_btn, this, setup_play_btn_fn).call(this);\n      } else {\n        // console.log('Autoplay allowed: ', this.type, canPlay);\n      }\n    }).catch(() => {\n      // console.log('Autoplay blocked catch: ', this.type);\n      // throw new Error(\"Autoplay blocked: \" + this.type);\n    });\n  }\n  get slider () {\n    return this._slider ??= this.closest('hdt-slider-media');\n  }\n};\nsize_bg_video_fn = function(){\n  var iframeW  ,\n  iframeH      ,\n  marginLeft   ,\n  marginTop    ,\n  containerW   = this.clientWidth,\n  containerH   = this.clientHeight;\n\n  containerW / containerH < 16 / 9 ?\n  (\n     iframeW = containerH * (16 / 9),\n     iframeH = containerH,\n     marginLeft = -Math.round((iframeW - containerW) / 2),\n     marginTop = -Math.round((iframeH - containerH) / 2)\n  ) : (\n     iframeH = (iframeW = containerW) * (9 / 16),\n     marginTop = -Math.round((iframeH - containerH) / 2),\n     marginLeft = -Math.round((iframeW - containerW) / 2)\n  );\n  $4(\"iframe\", this).style.cssText = `max-width: 1000%; margin-left: ${marginLeft}px; margin-top: ${marginTop}px; width: ${iframeW}px; height: ${iframeH}px;`;\n};\nsetup_play_btn_fn = function(){\n  if (this.shadowRoot) return;\n  const videoOrIframe = $4('video, iframe', this);\n  this.attachShadow({ mode: \"open\" }).appendChild($id4(\"video-play-df\").content.cloneNode(true));\n  const btnPlay  = this.shadowRoot.lastElementChild,\n        playText = btnPlay.getAttribute('aria-label'),\n        des      = $4('video', this)?.getAttribute('aria-label') || videoOrIframe.title || videoOrIframe.dataset.title || '';\n  btnPlay.setAttribute('aria-label', playText.replace('[description]', des));\n  if (!this.hasAttribute(\"show-controls\")) this.removeAttribute('ready');\n\n  //console.log('1', this, this.closest('[data-wrapp-video]'))\n  const elClick = this.hasAttribute('sp-toogle-play') ? btnPlay : this.closest('[data-wrapp-video]');\n  elClick?.addEventListener('click', (e) => {\n    e.preventDefault();\n    e.stopPropagation();\n    if (this.hasAttribute('playing')) {\n      this.pause();\n      btnPlay.setAttribute('aria-label', playText.replace('[description]', des));\n    } else {\n      this.play();\n      btnPlay.setAttribute('aria-label', btnPlay.dataset.pause.replace('[description]', des));\n    }\n    this.setAttribute('ready', '');\n  }, { once: !this.hasAttribute('sp-toogle-play'), signal: this.abortController.signal });\n};\nclass ModelPlayer extends MediaManager {\n  #controller;\n  connectedCallback() {\n    this.#controller = new AbortController();\n    Shopify.loadFeatures([\n      {\n        name: 'shopify-xr',\n        version: '1.0',\n        onLoad: this.#setupShopifyXr.bind(this)\n      },\n      {\n        name: 'model-viewer-ui',\n        version: '1.0',\n        onLoad: this.#setupModelViewerUI.bind(this),\n      },\n    ]);\n    super.connectedCallback();\n  }\n\n  async play() {\n    this.modelViewerUI?.play();\n  }\n\n  pause() {\n    this.modelViewerUI?.pause();\n  }\n  #setupShopifyXr() {\n    if (!window.ShopifyXR) return document.addEventListener('shopify_xr_initialized', this.#setupShopifyXr.bind(this), { once: true, signal: this.#controller.signal });\n    const modelJson = $id4('ModelJson-' + this.getAttribute('section-id'));\n    window.ShopifyXR.addModels(JSON.parse(modelJson.textContent));\n    window.ShopifyXR.setupXRElements();\n  }\n\n  /**\n   * @param {Error[]} errors\n   */\n  async #setupModelViewerUI(errors) {\n    if (errors) return;\n\n    if (!Shopify.ModelViewerUI) {\n      await this.#waitForModelViewerUI();\n    }\n\n    if (!Shopify.ModelViewerUI) return;\n\n    const model = $4(\"model-viewer\", this);\n    if (!model) return;\n\n    const { signal } = this.#controller;\n\n    this.modelViewerUI = new Shopify.ModelViewerUI(model, { focusOnPlay: false });\n    if (!this.modelViewerUI) return;\n    $4('.shopify-model-viewer-ui__button', this)?.setAttribute('inert', '');\n    // Events: shopify_model_viewer_ui_toggle_play, shopify_model_viewer_ui_toggle_pause\n    model.addEventListener(\"shopify_model_viewer_ui_toggle_play\", () => this.setAttribute('playing', ''), { signal });\n    model.addEventListener(\"shopify_model_viewer_ui_toggle_pause\", () => this.removeAttribute('playing'), { signal });\n    // return;\n    // this.play();\n\n    // // Track pointer events to detect taps\n    // let pointerStartX = 0;\n    // let pointerStartY = 0;\n\n    // model.addEventListener('pointerdown',(/** @type {PointerEvent} */ event) => {\n    //   pointerStartX = event.clientX;\n    //   pointerStartY = event.clientY;\n    // }, { signal });\n\n    // model.addEventListener('click', (/** @type {PointerEvent} */ event) => {\n    //   const distanceX = Math.abs(event.clientX - pointerStartX);\n    //   const distanceY = Math.abs(event.clientY - pointerStartY);\n    //   const totalDistance = Math.sqrt(distanceX * distanceX + distanceY * distanceY);\n\n    //   // Try to ensure that this is a tap, not a drag.\n    //   if (totalDistance < 10) {\n    //     // When the model is paused, it has its own button overlay for playing the model again.\n    //     // If we're receiving a click event, it means the model is playing, all we can do is pause it.\n    //     this.pause();\n    //   }\n    // },{ signal });\n  }\n\n  /**\n   * Waits for Shopify.ModelViewerUI to be defined.\n   * This seems to be necessary for Safari since Shopify.ModelViewerUI is always undefined on the first try.\n   * @returns {Promise<void>}\n   */\n  async #waitForModelViewerUI() {\n    const maxAttempts = 10;\n    const interval = 50;\n\n    for (let i = 0; i < maxAttempts; i++) {\n      if (Shopify.ModelViewerUI) {\n        return;\n      }\n      await new Promise((resolve) => setTimeout(resolve, interval));\n    }\n  }\n  // async createPlayer() {\n  //   window.Shopify.loadFeatures([\n  //     {\n  //       name: 'shopify-xr',\n  //       version: '1.0',\n  //       onLoad: this.setupShopifyXr.bind(this)\n  //     },\n  //     {\n  //       name: 'model-viewer-ui',\n  //       version: '1.0',\n  //       onLoad: this.setupModelViewerUi.bind(this)\n  //     }\n  //   ]);\n  // }\n  // setupShopifyXr() {\n  //   if (!window.ShopifyXR) return document.addEventListener('shopify_xr_initialized', this.setupShopifyXr.bind(this), { once: true, signal: this.abortController.signal });\n  //   const modelJson = $id4('ModelJson-' + this.getAttribute('section-id'));\n  //   window.ShopifyXR.addModels(JSON.parse(modelJson.textContent));\n  //   window.ShopifyXR.setupXRElements();\n  //   //this.closest('hdt-slider-media')?.reInit()\n  // }\n  // setupModelViewerUi() {\n  //   this.setAttribute('ready', '');\n  //   const model = $4(\"model-viewer\", this);\n  //   // config: {\n  //   //   controls: [\"zoom-in\", \"zoom-out\", \"fullscreen\"],\n  //   //   iconUrl: \"https://cdn.shopify.com/shopifycloud/model-viewer-ui/\".concat(\"assets/v1.0/sprites.svg\"),\n  //   //   focusOnPlay: !0\n  //   // }\n  //   // Events: shopify_model_viewer_ui_toggle_play, shopify_model_viewer_ui_toggle_pause\n  //   model.addEventListener(\"shopify_model_viewer_ui_toggle_play\", () => this.setAttribute('playing', ''), { signal: this.abortController.signal });\n  //   model.addEventListener(\"shopify_model_viewer_ui_toggle_pause\", () => this.removeAttribute('playing'), { signal: this.abortController.signal });\n\n  //   getterAdd(_media_player, this, new Shopify.ModelViewerUI(model, { focusOnPlay: false }));\n  //   this.setAttribute('can-player', '');\n\n  //   // https://shopify.dev/docs/storefronts/themes/product-merchandising/media/support-media#launch-the-display\n  //   //document.addEventListener('shopify_xr_launch', ()=> {});\n\n  //   // document.addEventListener('shopify_xr_launch', (event) => {\n  //   //   if (this.playing) getterGet(_media_player, this).pause();\n  //   // }, { signal: this.abortController.signal });\n  // }\n\n};\nclass BtnVideo extends HTMLElement {\n  constructor() {\n    super();\n    const hdtVideo = this.closest('hdt-video');\n    if (!hdtVideo) return;\n    const btnPlay   = this.firstElementChild,\n          des       = $4('video', hdtVideo)?.getAttribute('aria-label') || $4('iframe, video', hdtVideo).title || '',\n          playText  = btnPlay.getAttribute('aria-label').replace('[description]', des),\n          pauseText = btnPlay.dataset.pause.replace('[description]', des);\n\n    btnPlay.addEventListener('click', (e) => {\n      e.preventDefault();\n      e.stopPropagation();\n      if (hdtVideo.hasAttribute('playing')) {\n        hdtVideo.pause();\n        btnPlay.setAttribute('aria-label', playText);\n      } else {\n        hdtVideo.play();\n        btnPlay.setAttribute('aria-label', pauseText);\n      }\n      hdtVideo.setAttribute('ready', '');\n    });\n  }\n}\ncustomElements.define('hdt-video', VideoPlayer);\ncustomElements.define('hdt-model', ModelPlayer);\ncustomElements.define('hdt-btn-video', BtnVideo);\n\nclass MediaProducts extends HTMLElement {\n  connectedCallback(){\n    if (!this.hasAttribute('reveal-on-scroll')) return;\n    inView(this, () => {\n      //console.log(this, enterInfo)\n      animate($4('.hdt-full-width-image', this), {\n        visibility: [\"hidden\", \"visible\"],\n        zIndex: [0, 1],\n        clipPath: [\"circle(5% at 50% 50%)\",\"circle(100% at 50% 50%)\"]\n      }, {\n        duration: 1,\n        ease: [0.87, 0, 0.13, 1]\n      });\n      //console.log('ss finished')\n      animate($$4('.hdt-section__header > *, hdt-card-product[can-reveal]:nth-child(-n+4), .hdt-collection__view-all', this), {\n        transform: [\"translateY(2rem)\", \"translateY(0)\"],\n        opacity: [.01, 1]\n      }, {\n        duration: 0.6,\n        delay: stagger(0.09, { startDelay: 0.6}),\n        //ease: [0, 0, .3, 1]\n      });\n      // return (leaveInfo) => {\n      //   console.log(this, leaveInfo, $4('.hdt-full-width-image', this))\n      // }\n    }, {\n      margin: `-${matchMediaQuery(\"mobile\") ? 20 : Math.min(this.clientHeight/2, 150)}px 0px`\n    });\n  }\n};\ncustomElements.define('hdt-media-with-products', MediaProducts);\n\nclass RichText extends HTMLElement {\n  connectedCallback(){\n    if (!this.hasAttribute('reveal-on-scroll')) return;\n    inView(this, () => {\n      animate(\n          $$4('[can-reveal]', this),\n          {\n            opacity: [0, 1],\n            y: [10, 0],\n            filter: [\"blur(10px)\", \"blur(0px)\"],\n          },\n          {\n            type: \"spring\",\n            visualDuration: 0.4,\n            bounce: 0,\n            delay: stagger(0.08, { startDelay: 0.2 }),\n            y: { type: \"spring\", visualDuration: 0.4, bounce: 0.8 },\n            // onComplete: () => {\n            //     elements.forEach(el => {\n            //         el.style.willChange = \"\"\n            //     })\n            // }\n          }\n      )\n    }, {\n      margin: `-${matchMediaQuery(\"mobile\") ? Math.min(50, this.clientHeight/2) : this.clientHeight/1.4}px 0px`\n    });\n  }\n}\ncustomElements.define('hdt-rich-text', RichText);\n\nclass Overlapping extends HTMLElement {\n  #scroll;\n  #resize;\n  connectedCallback() {\n    // this.#scroll = scroll(animate(this, { opacity: [0, 1, 1, 0], scale: [0.8, 1, 1, 0.8] }), {\n    //     target: this,\n    //     offset: [\"start end\", \"center 70%\", \"center 30%\", \"end 20%\"],\n    // })\n    const imageWrap = $id4(this.dataset.id);\n    if (!imageWrap) return;\n    this.#resize = resize(this, () => {\n      if (this.clientHeight == 0) return;\n      imageWrap.style.minHeight = null;\n      frame.render(() => {\n        const overheight = window.innerWidth >= 1024 && this.parentElement.clientHeight > imageWrap.clientHeight;\n        imageWrap.classList.toggle('is-hdt-overheight', overheight);\n        if (overheight) imageWrap.style.minHeight = `${this.parentElement.clientHeight}px`;\n        if (this.#scroll) this.#scroll();\n        if (overheight) return;\n        this.#scroll = scroll(animate(this, { opacity: [0, 1, 1, 0], scale: [0.8, 1, 1, 0.8] }), {\n            target: this,\n            offset: [\"start end\", \"center 70%\", \"center 30%\", \"end 20%\"],\n        });\n      })\n    })\n  }\n  disconnectedCallback() {\n    if (this.clientHeight > 0) {\n      this.#scroll();\n      if (this.#resize) this.#resize();\n    }\n  }\n}\ncustomElements.define('hdt-overlapping', Overlapping);\n\n!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).SplitType=e()}(this,(function(){\"use strict\";function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function e(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}function n(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function r(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function o(t){for(var e=1;e<arguments.length;e++){var o=null!=arguments[e]?arguments[e]:{};e%2?r(Object(o),!0).forEach((function(e){n(t,e,o[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(o)):r(Object(o)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(o,e))}))}return t}function i(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if(\"undefined\"==typeof Symbol||!(Symbol.iterator in Object(t)))return;var n=[],r=!0,o=!1,i=void 0;try{for(var a,c=t[Symbol.iterator]();!(r=(a=c.next()).done)&&(n.push(a.value),!e||n.length!==e);r=!0);}catch(t){o=!0,i=t}finally{try{r||null==c.return||c.return()}finally{if(o)throw i}}return n}(t,e)||c(t,e)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function a(t){return function(t){if(Array.isArray(t))return s(t)}(t)||function(t){if(\"undefined\"!=typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}(t)||c(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function c(t,e){if(t){if(\"string\"==typeof t)return s(t,e);var n=Object.prototype.toString.call(t).slice(8,-1);return\"Object\"===n&&t.constructor&&(n=t.constructor.name),\"Map\"===n||\"Set\"===n?Array.from(t):\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?s(t,e):void 0}}function s(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Array(e);n<e;n++)r[n]=t[n];return r}function l(t,e){return Object.getOwnPropertyNames(Object(t)).reduce((function(n,r){var o=Object.getOwnPropertyDescriptor(Object(t),r),i=Object.getOwnPropertyDescriptor(Object(e),r);return Object.defineProperty(n,r,i||o)}),{})}function u(t){return\"string\"==typeof t}function f(t){return Array.isArray(t)}function p(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=l(e);return void 0!==n.types?t=n.types:void 0!==n.split&&(t=n.split),void 0!==t&&(n.types=(u(t)||f(t)?String(t):\"\").split(\",\").map((function(t){return String(t).trim()})).filter((function(t){return/((line)|(word)|(char))/i.test(t)}))),(n.absolute||n.position)&&(n.absolute=n.absolute||/absolute/.test(e.position)),n}function d(t){var e=u(t)||f(t)?String(t):\"\";return{none:!e,lines:/line/i.test(e),words:/word/i.test(e),chars:/char/i.test(e)}}function h(t){return null!==t&&\"object\"==typeof t}function y(t){return h(t)&&/^(1|3|11)$/.test(t.nodeType)}function g(t){return f(t)?t:null==t?[]:function(t){return h(t)&&function(t){return\"number\"==typeof t&&t>-1&&t%1==0}(t.length)}(t)?Array.prototype.slice.call(t):[t]}function v(t){var e=t;return u(t)&&(e=/^(#[a-z]\\w+)$/.test(t.trim())?document.getElementById(t.trim().slice(1)):document.querySelectorAll(t)),g(e).reduce((function(t,e){return[].concat(a(t),a(g(e).filter(y)))}),[])}!function(){function t(){for(var t=arguments.length,e=0;e<t;e++){var n=e<0||arguments.length<=e?void 0:arguments[e];1===n.nodeType||11===n.nodeType?this.appendChild(n):this.appendChild(document.createTextNode(String(n)))}}function e(){for(;this.lastChild;)this.removeChild(this.lastChild);arguments.length&&this.append.apply(this,arguments)}function n(){for(var t=this.parentNode,e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var o=n.length;if(t)for(o||t.removeChild(this);o--;){var i=n[o];\"object\"!=typeof i?i=this.ownerDocument.createTextNode(i):i.parentNode&&i.parentNode.removeChild(i),o?t.insertBefore(this.previousSibling,i):t.replaceChild(i,this)}}\"undefined\"!=typeof Element&&(Element.prototype.append||(Element.prototype.append=t,DocumentFragment.prototype.append=t),Element.prototype.replaceChildren||(Element.prototype.replaceChildren=e,DocumentFragment.prototype.replaceChildren=e),Element.prototype.replaceWith||(Element.prototype.replaceWith=n,DocumentFragment.prototype.replaceWith=n))}();var m=Object.entries,b=\"_splittype\",w={},O=0;function j(t,e,n){if(!h(t))return console.warn(\"[data.set] owner is not an object\"),null;var r=t[b]||(t[b]=++O),i=w[r]||(w[r]={});return void 0===n?e&&Object.getPrototypeOf(e)===Object.prototype&&(w[r]=o(o({},i),e)):void 0!==e&&(i[e]=n),n}function C(t,e){var n=h(t)?t[b]:null,r=n&&w[n]||{};return void 0===e?r:r[e]}function E(t){var e=t&&t[b];e&&(delete t[e],delete w[e])}var S=\"\\\\ud800-\\\\udfff\",x=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe23\",T=\"\\\\u20d0-\\\\u20f0\",W=\"\\\\ufe0e\\\\ufe0f\",k=\"[\".concat(S,\"]\"),A=\"[\".concat(x).concat(T,\"]\"),P=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",D=\"(?:\".concat(A,\"|\").concat(P,\")\"),N=\"[^\".concat(S,\"]\"),R=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",$=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",B=\"\\\\u200d\",F=\"\".concat(D,\"?\"),I=\"[\".concat(W,\"]?\"),L=I+F+(\"(?:\\\\u200d(?:\"+[N,R,$].join(\"|\")+\")\"+I+F+\")*\"),H=\"(?:\".concat([\"\".concat(N).concat(A,\"?\"),A,R,$,k].join(\"|\"),\"\\n)\"),M=RegExp(\"\".concat(P,\"(?=\").concat(P,\")|\").concat(H).concat(L),\"g\"),z=RegExp(\"[\".concat([B,S,x,T,W].join(\"\"),\"]\"));function V(t){return z.test(t)}function q(t){return V(t)?function(t){return t.match(M)||[]}(t):function(t){return t.split(\"\")}(t)}function U(t){return null==t?\"\":String(t)}function X(t,e){var n=document.createElement(t);return e?(Object.keys(e).forEach((function(t){var r=e[t],o=u(r)?r.trim():r;null!==o&&\"\"!==o&&(\"children\"===t?n.append.apply(n,a(g(o))):n.setAttribute(t,o))})),n):n}var Y={splitClass:\"\",lineClass:\"line\",wordClass:\"word\",charClass:\"char\",types:[\"lines\",\"words\",\"chars\"],absolute:!1,tagName:\"div\"};function _(t,e){var n,r=d((e=l(Y,e)).types),o=e.tagName,i=t.nodeValue,c=document.createDocumentFragment(),s=[];return/^\\s/.test(i)&&c.append(\" \"),n=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\" \";return(t?String(t):\"\").trim().replace(/\\s+/g,\" \").split(e)}(i).reduce((function(t,n,i,l){var f,p;return r.chars&&(p=function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:\"\";return(t=U(t))&&u(t)&&!e&&V(t)?q(t):t.split(e)}(n).map((function(t){var n=X(o,{class:\"\".concat(e.splitClass,\" \").concat(e.charClass),style:\"display: inline-block;\",children:t});return j(n,\"isChar\",!0),s=[].concat(a(s),[n]),n}))),r.words||r.lines?(j(f=X(o,{class:\"\".concat(e.wordClass,\" \").concat(e.splitClass),style:\"display: inline-block; \".concat(r.words&&e.absolute?\"position: relative;\":\"\"),children:r.chars?p:n}),{isWord:!0,isWordStart:!0,isWordEnd:!0}),c.appendChild(f)):p.forEach((function(t){c.appendChild(t)})),i<l.length-1&&c.append(\" \"),r.words?t.concat(f):t}),[]),/\\s$/.test(i)&&c.append(\" \"),t.replaceWith(c),{words:n,chars:s}}function G(t,e){var n=t.nodeType,r={words:[],chars:[]};if(!/(1|3|11)/.test(n))return r;if(3===n&&/\\S/.test(t.nodeValue))return _(t,e);var o=g(t.childNodes);if(o.length&&(j(t,\"isSplit\",!0),!C(t).isRoot)){t.style.display=\"inline-block\",t.style.position=\"relative\";var i=t.nextSibling,c=t.previousSibling,s=t.textContent||\"\",l=i?i.textContent:\" \",u=c?c.textContent:\" \";j(t,{isWordEnd:/\\s$/.test(s)||/^\\s/.test(l),isWordStart:/^\\s/.test(s)||/\\s$/.test(u)})}return o.reduce((function(t,n){var r=G(n,e),o=r.words,i=r.chars;return{words:[].concat(a(t.words),a(o)),chars:[].concat(a(t.chars),a(i))}}),r)}function J(t){C(t).isWord?(E(t),t.replaceWith.apply(t,a(t.childNodes))):g(t.children).forEach((function(t){return J(t)}))}function K(t,e,n){var r,o,a,c=d(e.types),s=e.tagName,l=t.getElementsByTagName(\"*\"),u=[],f=[],p=null,h=[],y=t.parentElement,v=t.nextElementSibling,m=document.createDocumentFragment(),b=window.getComputedStyle(t),w=b.textAlign,O=.2*parseFloat(b.fontSize);return e.absolute&&(a={left:t.offsetLeft,top:t.offsetTop,width:t.offsetWidth},o=t.offsetWidth,r=t.offsetHeight,j(t,{cssWidth:t.style.width,cssHeight:t.style.height})),g(l).forEach((function(r){var o=r.parentElement===t,a=function(t,e,n,r){if(!n.absolute)return{top:e?t.offsetTop:null};var o=t.offsetParent,a=i(r,2),c=a[0],s=a[1],l=0,u=0;if(o&&o!==document.body){var f=o.getBoundingClientRect();l=f.x+c,u=f.y+s}var p=t.getBoundingClientRect(),d=p.width,h=p.height,y=p.x;return{width:d,height:h,top:p.y+s-u,left:y+c-l}}(r,o,e,n),s=a.width,l=a.height,d=a.top,h=a.left;/^br$/i.test(r.nodeName)||(c.lines&&o&&((null===p||d-p>=O)&&(p=d,u.push(f=[])),f.push(r)),e.absolute&&j(r,{top:d,left:h,width:s,height:l}))})),y&&y.removeChild(t),c.lines&&(h=u.map((function(t){var n=X(s,{class:\"\".concat(e.splitClass,\" \").concat(e.lineClass),style:\"display: block; text-align: \".concat(w,\"; width: 100%;\")});j(n,\"isLine\",!0);var r={height:0,top:1e4};return m.appendChild(n),t.forEach((function(t,e,o){var i=C(t),a=i.isWordEnd,c=i.top,s=i.height,l=o[e+1];r.height=Math.max(r.height,s),r.top=Math.min(r.top,c),n.appendChild(t),a&&C(l).isWordStart&&n.append(\" \")})),e.absolute&&j(n,{height:r.height,top:r.top}),n})),c.words||J(m),t.replaceChildren(m)),e.absolute&&(t.style.width=\"\".concat(t.style.width||o,\"px\"),t.style.height=\"\".concat(r,\"px\"),g(l).forEach((function(t){var e=C(t),n=e.isLine,r=e.top,o=e.left,i=e.width,c=e.height,s=C(t.parentElement),l=!n&&s.isLine;t.style.top=\"\".concat(l?r-s.top:r,\"px\"),t.style.left=\"\".concat(n?a.left:o-(l?a.left:0),\"px\"),t.style.height=\"\".concat(c,\"px\"),t.style.width=\"\".concat(n?a.width:i,\"px\"),t.style.position=\"absolute\"}))),y&&(v?y.insertBefore(t,v):y.appendChild(t)),h}var Q=l(Y,{});return function(){function t(e,n){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.isSplit=!1,this.settings=l(Q,p(n)),this.elements=v(e),this.split()}return e(t,null,[{key:\"clearData\",value:function(){Object.keys(w).forEach((function(t){delete w[t]}))}},{key:\"setDefaults\",value:function(t){return Q=l(Q,p(t)),Y}},{key:\"revert\",value:function(t){v(t).forEach((function(t){var e=C(t),n=e.isSplit,r=e.html,o=e.cssWidth,i=e.cssHeight;n&&(t.innerHTML=r,t.style.width=o||\"\",t.style.height=i||\"\",E(t))}))}},{key:\"create\",value:function(e,n){return new t(e,n)}},{key:\"data\",get:function(){return w}},{key:\"defaults\",get:function(){return Q},set:function(t){Q=l(Q,p(t))}}]),e(t,[{key:\"split\",value:function(t){var e=this;this.revert(),this.elements.forEach((function(t){j(t,\"html\",t.innerHTML)})),this.lines=[],this.words=[],this.chars=[];var n=[window.pageXOffset,window.pageYOffset];void 0!==t&&(this.settings=l(this.settings,p(t)));var r=d(this.settings.types);r.none||(this.elements.forEach((function(t){j(t,\"isRoot\",!0);var n=G(t,e.settings),r=n.words,o=n.chars;e.words=[].concat(a(e.words),a(r)),e.chars=[].concat(a(e.chars),a(o))})),this.elements.forEach((function(t){if(r.lines||e.settings.absolute){var o=K(t,e.settings,n);e.lines=[].concat(a(e.lines),a(o))}})),this.isSplit=!0,window.scrollTo(n[0],n[1]),m(w).forEach((function(t){var e=i(t,2),n=e[0],r=e[1],o=r.isRoot,a=r.isSplit;o&&a||(w[n]=null,delete w[n])})))}},{key:\"revert\",value:function(){this.isSplit&&(this.lines=null,this.words=null,this.chars=null,this.isSplit=!1),t.revert(this.elements)}}]),t}()}));\nclass MediaReadingText extends HTMLElement {\n  #scroll;\n  #spliter;\n  #opacityStart;\n  connectedCallback(){\n    this.#opacityStart = parseFloat(this.style.getPropertyValue('--text-opacity-start'));\n    if (this.#text) {\n      this.#spliter = new SplitType(this.#text, {\n        types: isRTL ? 'lines, words' : 'lines, words, chars',\n        tagName: 'span',\n        lineClass: 'hdt-split-line',\n        wordClass: 'hdt-split-word',\n        charClass: 'hdt-split-char',\n        //splitClass: 'hdt-split-token'\n      });\n      this.#resize(false);\n      resize(this, () => this.#resize());\n    } else if (this.#btn) {\n      const animation = animate(\n        this.#btn,\n        { opacity: [this.#opacityStart, 1], y: [8, 0] },\n        { duration: 1, ease: \"linear\", type: \"tween\" }\n      );\n      this.#scroll = scroll(animation, { target: this, offset: [0, 0.8], });\n    }\n  }\n  get #text() {\n    return $4('.hdt-showcase-text', this);\n  }\n  get #btn() {\n    return $4('.hdt-btn', this);\n  }\n  #resize(split = true) {\n    frame.render(() => {\n      //console.log('resize media reading text', split);\n      if (split) {\n        if (this.#scroll) this.#scroll();\n        this.#text.removeAttribute('is-splited');\n        this.#spliter.split();\n      }\n      this.#text.setAttribute('is-splited', '');\n\n      const targets = isRTL ? this.#spliter.words : this.#spliter.chars,\n      animation = animate(\n        [...targets, ...(this.#btn ? [this.#btn] : [])].map((char, i) => ([\n          char,\n          { opacity: [this.#opacityStart, 1], y: [8, 0] },\n          { duration: 1, at: 0.1 * i, ease: \"linear\", type: \"tween\" }\n        ])),\n      );\n      this.#scroll = scroll(animation, { target: this, offset: [0, 0.8], });\n    });\n  }\n};\ncustomElements.define('hdt-media-reading-text', MediaReadingText);\nclass ScrollHint extends HTMLElement {\n  #cancel = [];\n  #_axis;\n  #position;\n  #moreThan = false;\n  #_resize;\n  connectedCallback() {\n    this.#position = isRTL ? 'left' : 'right';\n    const _scroll = scroll(\n      (progress) => frame.render(this.#style.bind(this, progress)),\n      //() => frame.render(this.#update),\n      { container: this, axis: this.#axis, trackContentSize: this.#resize }\n    );\n    this.#cancel.push(_scroll);\n    // const _resize = resize(this, () => frame.render(this.#update));\n    // this.#cancel.push(_resize);if (this.hasAttribute('hover')) this.#hover();\n  }\n\n  disconnectedCallback() {\n    if (this.#cancel.length > 0) this.#cancel.forEach( (fn) => fn());\n  }\n  get #axis() {\n    return this.#_axis ??= this.getAttribute('axis') || 'y';\n  }\n  get #resize() {\n    return this.#_resize ??= !this.hasAttribute('un-resize');\n  }\n  #update = () => {\n    this.#moreThan = this.#axis === 'y' ? this.scrollHeight > this.clientHeight : this.scrollWidth > this.clientWidth\n    //console.log(progress)\n    let progress = NaN;\n    if (this.#moreThan) {\n      const { scrollTop, scrollHeight, clientHeight, scrollLeft, scrollWidth, clientWidth } = this;\n      //const scrollDirection = scrollWidth > clientWidth ? 'horizontal' : 'vertical';\n      progress = this.#axis === 'y' ? scrollTop / (scrollHeight - clientHeight) : scrollLeft / (scrollWidth - clientWidth);\n    }\n    //console.log('progress 1: ', progress);\n    this.#style(progress);\n  };\n  #style(progress) {\n    //console.log('progress 2: ', progress)\n    this.style.maskImage = Number.isNaN(progress) || !this.#moreThan ? '' : `linear-gradient(to ${this.#axis === 'y' ? 'bottom' : this.#position}, transparent ${progress > 0.02 ? 1 : 0}%, black ${progress < 0.1 ? progress * 100 : 10}%, black ${progress > 0.9 ? progress * 100 : 90}%, transparent 100%)`;\n  }\n}\ncustomElements.define('hdt-scroll-hint', ScrollHint);\n\n\nclass inviewStagger extends HTMLElement {\n  connectedCallback() {\n    if (!matchMediaQuery(\"motion\") || !this.hasAttribute('ani')) return;\n    inView(this, () => {\n      animate($$4('.hdt-theme-block, .hdt-caption, .hdt-subheading, .hdt-heading, .hdt-description, .hdt-btn', this), {\n        y: [20, 0],\n        opacity: [0, 1]\n      }, {\n        duration: 0.6,\n        delay: stagger(0.15, { startDelay: 0.2 }),\n        //ease: [0, 0, .3, 1]\n      }).then(() => {\n        this.setAttribute('staggered', '');\n      });\n    }, {\n      margin: \"0px 0px -50px 0px\"\n    })\n  }\n}\ncustomElements.define('hdt-inview-stagger', inviewStagger);\n\n/**\n* 7. Gallery modal\n* -----------------------------------------------------------------------------\n*/\nimport { Lightbox, Zoom } from \"@theme/zoom-psw\";\nconst svgPath = `<svg aria-hidden=\"true\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"0.8\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"pswp__icn\"`;\nvar _img_lightbox = new WeakSet(), img_lightbox_fn,\n_img_lightbox_list = new WeakMap();\nclass ImageLightbox extends HTMLElement {\n  #controller;\n  constructor() {\n    super();\n    getterAdd(_img_lightbox, this);\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    if (!this.dataset.objImg) return;\n    getterRunFn(_img_lightbox, this, img_lightbox_fn).call(this);\n    this.addEventListener(\"click\", () => this.lightBox?.loadAndOpen(this.dataset.index || 0), { signal: this.#controller.signal });\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n  get lightBox() {\n    return getterGet(_img_lightbox_list, this);\n  }\n  // get objImg() {\n  //   return this.getAttribute('obj-img');\n  // }\n};\nimg_lightbox_fn = function(){\n  let dataSource = null,\n   secondaryZoomLevel = parseInt(this.getAttribute(\"max-zoom\")) || 2;\n   const {close, zoom, prev, next, errorMsg} = themeHDN.strings.pswp,\n    _objImg = JSON.parse(this.dataset.objImg);\n    _objImg.srcset = renderSrcset(_objImg.src, JSON.parse(this.dataset.widths || `[246, 493, 600, 713, 823, 990, 1100, 1206, 1346, 1426, 1646, 1946, 2200, 2500, 3000, 3500, 4000, ${_objImg.width}]`));\n     dataSource = [_objImg];\n  const options = {\n    showHideAnimationType: 'fade', // 'zoom', 'fade', 'none\n    pswpModule: () => import(\"@theme/psw\"),\n    dataSource,\n    bgOpacity: 1,\n    secondaryZoomLevel,\n    maxZoomLevel: ++secondaryZoomLevel,\n    closeTitle: close,\n    zoomTitle: zoom,\n    arrowPrevTitle: prev,\n    arrowNextTitle: next,\n    errorMsg: errorMsg,\n    // UX - https://photoswipe.com/styling/\n    closeSVG: `${svgPath} width=\"28\" height=\"28\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line></svg>`,\n    zoomSVG: `${svgPath} width=\"22\" height=\"22\"><circle cx=\"11\" cy=\"11\" r=\"8\"></circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line><line id=\"pswp__icn-plus\" x1=\"11\" y1=\"8\" x2=\"11\" y2=\"14\"></line><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"></line></svg>`,\n  };\n  getterAdd(_img_lightbox_list, this, new Lightbox(options));\n  this.lightBox.init();\n  // Clear memory\n  dataSource = null;\n};\n\nvar _lightbox_psw_init = new WeakMap(),\n_ui_register = new WeakSet(), ui_register_fn;\nclass GalleryModal extends HTMLElement {\n  #controller;\n  constructor() {\n    super();\n    getterAdd(_ui_register, this);\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    this.updateImageClick(true);\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n  updateImageClick(firstTime = false) {\n    if (this.images.length == 0 || this.hasAttribute('set-disabled') ) return;\n    if (!firstTime) {\n      getterDelete(_lightbox_psw_init, this);\n      this.#controller.abort();\n      this.#controller = new AbortController();\n    }\n    this.images.forEach( (image, index) => image.addEventListener('click', (e) => {\n      if (this.imageZoom == 'zoom' && matchMediaQuery(\"hover\")) return;\n      e.preventDefault();\n      this.openLightBox(index)\n    }, { signal: this.#controller.signal }\n    ));\n  }\n  get slider() {\n    return $4('hdt-slider', this);\n  }\n  get images() {\n    return $$4(this.getAttribute(\"selector\") || \"img\", this)\n  }\n  get lightBox() {\n    if (getterGet(_lightbox_psw_init, this)) return getterGet(_lightbox_psw_init, this);\n    const {close, zoom, prev, next, errorMsg} = themeHDN.strings.pswp;\n\n    let secondaryZoomLevel = parseInt(this.getAttribute(\"max-zoom\")) || 2,\n    dataSource = this.images.map((image) => {\n      const {src, currentSrc, alt} = image;\n      const srcset = renderSrcset(src, JSON.parse(image.dataset.widths || `[140, 246, 493, 600, 713, 823, 990, 1100, 1206, 1346, 1426, 1646, 1946, 2200, 2500, 3000, 3500, 4000, ${image.getAttribute(\"width\")}]`));\n      return {\n        thumbnailElement: image,\n        src,\n        srcset,\n        msrc: currentSrc || src,\n        width: parseInt(image.getAttribute(\"width\")),\n        height: parseInt(image.getAttribute(\"height\")),\n        alt,\n        thumbCropped: true\n      };\n    });\n    getterAdd(_lightbox_psw_init, this, new Lightbox({\n      pswpModule: () => import(\"@theme/psw\"),\n     // showHideAnimationType: 'zoom', // 'zoom', 'fade', 'none\n      dataSource,\n      bgOpacity: 1,\n      secondaryZoomLevel,\n      maxZoomLevel: ++secondaryZoomLevel,\n      closeTitle: close,\n      zoomTitle: zoom,\n      arrowPrevTitle: prev,\n      arrowNextTitle: next,\n      errorMsg: errorMsg,\n      // UX - https://photoswipe.com/styling/\n      arrowPrevSVG: `${svgPath} width=\"24\" height=\"24\"><polyline points=\"15 18 9 12 15 6\"></polyline></svg>`,\n      arrowNextSVG: `${svgPath} width=\"24\" height=\"24\"><polyline points=\"9 18 15 12 9 6\"></polyline></svg>`,\n      closeSVG: `${svgPath} width=\"28\" height=\"28\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line></svg>`,\n      zoomSVG: `${svgPath} width=\"22\" height=\"22\"><circle cx=\"11\" cy=\"11\" r=\"8\"></circle><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"></line><line id=\"pswp__icn-plus\" x1=\"11\" y1=\"8\" x2=\"11\" y2=\"14\"></line><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"></line></svg>`,\n    }));\n    getterGet(_lightbox_psw_init, this).addFilter('thumbEl', (thumbEl, data) => thumbEl || data.thumbnailElement);\n    getterGet(_lightbox_psw_init, this).on('uiRegister', getterRunFn(_ui_register, this, ui_register_fn).bind(this));\n    getterGet(_lightbox_psw_init, this).on('openingAnimationEnd', ()=> getterGet(_lightbox_psw_init, this).pswp.template.classList.add('hdt-psw-animate'));\n    getterGet(_lightbox_psw_init, this).on('closingAnimationStart', ()=> getterGet(_lightbox_psw_init, this).pswp.template.classList.remove('hdt-psw-animate'));\n    getterGet(_lightbox_psw_init, this).init();\n    // Clear memory\n    dataSource = null;\n    return getterGet(_lightbox_psw_init, this);\n  }\n  openLightBox(index = 0) {\n    this.lightBox.loadAndOpen(index);\n  }\n};\nui_register_fn = function(){\n  if (getterGet(_lightbox_psw_init, this).pswp.options.dataSource.length < 2 || !this.hasAttribute('show-thumb')) return;\n\n  getterGet(_lightbox_psw_init, this).pswp.ui.registerElement({\n    name: 'thumbnails',\n    className: 'pswp__thumbnails',\n    appendTo: 'root',\n    //tagName: 'hdt-slider',\n    onInit: (el, pswp) => {\n      let prevIndex = -1,\n      stringHTMl = '',\n      i,\n      l = pswp.getNumItems();\n\n      for (i = 0; i < l; i++) {\n        const { src, srcset, alt } = pswp.options.dataSource[i];\n        stringHTMl += `<div class=\"hdt-slider__slide\" can-reveal><div class=\"pswp__thumbnail\" data-index=\"${i}\"><img src=\"${src}\" srcset=\"${srcset}\" alt=\"${alt}\" loading=\"lazy\" sizes=\"70px\"></div></div>`;\n      }\n      el.insertAdjacentHTML(\n        'beforeend',\n        `<hdt-slider-reveal reveal-on-scroll=\"true\" class=\"hdt-slider\" config='{\"dragFree\": true,\"slidesToScroll\": 1,\"ntCenter\": true}'><div class='hdt-slider__viewport'><div class='hdt-slider__container'>${stringHTMl}</div></div></hdt-slider-reveal>`,\n      );\n      stringHTMl = ''; //reset cache\n      pswp.thumbs = $$4('.pswp__thumbnail', el);\n      const mediaSelector = '.hdt-product__media-item[data-media-type=\"image\"]:not([hidden])';\n\n      pswp.on('change', () => {\n        const {currIndex} = pswp;\n        if (prevIndex >= 0) {\n          pswp.thumbs[prevIndex].classList.remove('pswp__thumbnail--active');\n        }\n        pswp.thumbs[currIndex].classList.add('pswp__thumbnail--active');\n        prevIndex = currIndex;\n        const target = $$4(mediaSelector, this)[pswp.currIndex];\n        if (target) this?.slider?.goToTarget(target, true)\n      });\n      pswp.on('openingAnimationEnd', () => {\n        $4('.hdt-slider', el)?.reveal();\n      });\n      pswp.on('close', () => {\n        const target = $$4(mediaSelector, this)[pswp.currIndex];\n        if (target) this?.slider?.goToTarget(target, true)\n      });\n    },\n   // when user clicks or taps on element\n    onClick: function (e, el, pswp) {\n      const {index} = e.target.dataset;\n      if (index) pswp.goTo(parseInt(index));\n    }\n  });\n}\n\ncustomElements.define('hdt-img-psw', ImageLightbox); // wrapp-open-pswp-btn\ncustomElements.define('hdt-gallery-modal', GalleryModal);\n\n/**\n* 8. Product media\n* -----------------------------------------------------------------------------\n*/\nvar _allow_update_progress_bar= new WeakMap(),\n_update_progress_bar = new WeakSet(), update_progress_bar_fn,\n_color_progress_bar = new WeakMap();\nclass ProgressBar extends HTMLElement {\n  constructor() {\n    super();\n    getterAdd(_update_progress_bar, this);\n    getterAdd(_allow_update_progress_bar, this, !this.hasAttribute(\"reveal-in-view\"));\n    getterAdd(_color_progress_bar, this, this.getAttribute('data-colors'));\n  }\n  static get observedAttributes() {\n    return [\"aria-valuenow\", \"aria-valuemax\"];\n  }\n  connectedCallback() {\n    if (this.hasAttribute(\"reveal-in-view\")) {\n      inView(this, () => {\n        getterAdd(_allow_update_progress_bar, this, true, true);\n        getterRunFn(_update_progress_bar, this, update_progress_bar_fn).call(this);\n      }, { margin: \"-50px 0px\" });\n    }\n  }\n  get progress() {\n    return Math.min(1, this.getAttribute(\"aria-valuenow\") / this.getAttribute(\"aria-valuemax\"));\n  }\n  /**\n   * @param {string} value\n   */\n  set max(value) {\n    this.setAttribute(\"aria-valuemax\", value);\n  }\n  /**\n   * @param {string} value\n   */\n  set now(value) {\n    this.setAttribute(\"aria-valuenow\", value);\n  }\n  attributeChangedCallback() {\n    if (getterGet(_allow_update_progress_bar, this)) {\n      getterRunFn(_update_progress_bar, this, update_progress_bar_fn).call(this);\n    }\n  }\n};\nupdate_progress_bar_fn = function() {\n  const colors = JSON.parse(getterGet(_color_progress_bar, this)),\n  fixed = (this.progress+'').slice(0,3);\n  if ( colors && colors[fixed] ) {\n    for (let [key, item] of Object.entries(colors)) {\n      this.parentElement.classList.toggle(item, key == fixed);\n    }\n  }\n  this.style.setProperty(\"--progress-rate\", `${this.progress}`);\n};\n\n/**\n * Helper function to check if a value is a non-empty, valid number.\n */\nconst isValidNumber = (val) =>\n  val !== null && val !== undefined && String(val).trim() !== '' && !Number.isNaN(Number(val));\n\n/**\n * Validates an integer input against min, step, and optional max constraints.\n *\n * @param {number|string} val - The input value to validate.\n * @param {number} min - The minimum allowed value.\n * @param {number|string|null|undefined} [max] - The maximum allowed value (optional).\n * @param {number} [step=1] - The step increment (must be an integer, defaults to 1).\n * @returns {number} The validated input number if valid; otherwise, returns min.\n */\nfunction validateValue(val, min, max, step = 1) {\n  const num = Number(val);\n\n  // 1. Validate integer format and min boundary\n  if (!Number.isInteger(num) || num < min) {\n    return min;\n  }\n\n  // 2. Validate max boundary if max is provided and valid\n  if (isValidNumber(max) && num > Number(max)) {\n    return min;\n  }\n\n  // 3. Validate step divisibility from min\n  return (num - min) % step === 0 ? num : min;\n}\n\n/**\n * Checks an integer input against min, max, and step constraints.\n *\n * @param {number|string} val - The input value to check.\n * @param {number} min - The minimum allowed value.\n * @param {number|string|null|undefined} [max] - The maximum allowed value (optional).\n * @param {number} [step=1] - The step increment (must be an integer, defaults to 1).\n * @returns {'min'|'max'|'step'|'ok'} Status code indicating which constraint failed, or 'ok' if valid.\n */\nconst { min_error, max_error, step_error } = themeHDN.strings.cart;\nfunction checkValueStatus(val, min, max, step = 1) {\n  const num = Number(val);\n\n  // 1. Check integer format & minimum boundary\n  if (!Number.isInteger(num) || num < min) {\n    return min_error.replace('[min]', min);\n  }\n\n  // 2. Check maximum boundary (if max is provided and valid)\n  if (isValidNumber(max) && num > Number(max)) {\n    return max_error.replace('[max]', max);\n  }\n\n  // 3. Check step divisibility\n  if ((num - min) % step !== 0) {\n    return step_error.replace('[step]', step);\n  }\n\n  return 'ok';\n}\n\nvar _qty_forms = new WeakMap(),\n_qty_labels = new WeakMap(),\n_qty_inputs = new WeakMap(),\n_update_quantity_rules = new WeakSet(),\n_set_quantity_boundries = new WeakSet();\nclass QuantityWrapp extends HTMLElement {\n  #controller;\n  #needCheckVal;\n  constructor() {\n    super(...arguments);\n    getterAdd(_qty_inputs, this, $4('input', this));\n    getterAdd(_update_quantity_rules, this);\n    getterAdd(_set_quantity_boundries, this);\n  }\n  get input() {\n    return getterGet(_qty_inputs, this);\n  }\n  get quantityForm() {\n    return $id4(`Quantity-Form-${this.getAttribute('section-id')}`);\n  }\n  get form() {\n    return this._form = this._form || document.forms[this.input.getAttribute(\"form\")];\n  }\n  get qty() {\n    return this.input.value;\n  }\n  get cart() {\n    return $4('[ref=\"hdt-cart\"]');\n  }\n  set qty(value) {\n   this.input.value = value,\n   this.input.dispatchEvent(new Event(\"change\"));\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    this.#needCheckVal = this.hasAttribute('qty-check-val');\n    if (!this.input) return;\n    const { signal } = this.#controller;\n    if (this.hasAttribute('qty-in-cart') && this.input.hasAttribute('form')) {\n      getterAdd(_qty_forms, this, document.forms[(this.input.getAttribute(\"form\") || '')]);\n      getterAdd(_qty_labels, this, $4(`label[for=\"${this.input.id}\"]`));\n\n      document.addEventListener('cart:live', (evt)=> {\n        this.cartUpdateQty(evt.detail.items);\n      }, { signal });\n\n      document.addEventListener('cart:tab', (evt)=> {\n        this.cartUpdateQty(evt.detail.items);\n      }, { signal });\n\n      if (themeHDN.cartItems && getterGet(_qty_labels, this)) {\n        this.cartUpdateQty(themeHDN.cartItems);\n      }\n    }\n    this.input.addEventListener('change', this.onInputChange.bind(this), { signal });\n    $$4('button', this).forEach((button) =>\n      button.addEventListener('click', this.onButtonClick.bind(this), { signal })\n    );\n    this.buttonMinus = $4(\"[name='minus']\", this);\n    this.buttonPlus = $4(\"[name='plus']\", this);\n    this.validateQtyRules();\n\n    this.debouncedOnChange = debounce(() => {\n      this.input.dispatchEvent(new CustomEvent(\"change\", { bubbles: true, detail: { target: this.input } }));\n    }, 300);\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n\n  onInputChange(event) {\n    this.validateQtyRules();\n    if (this.#needCheckVal) this.#checkVal(event);\n  }\n  onButtonClick(event) {\n    event.preventDefault();\n    const previousValue = this.input.value;\n\n    event.target.name === 'plus' ? this.input.stepUp() : this.input.stepDown();\n    let value = this.input.value;\n    if (previousValue !== value) {\n      this.debouncedOnChange();\n    }\n  }\n  validateQtyRules() {\n    const value = parseInt(this.input.value),\n    _max = this.input.max || 9999,\n    max = parseInt(String(_max) != 'null' ? _max : 9999);\n    this.input.value = Math.min(value, max);\n    if (this.hasAttribute('form')) {\n      getterGet(_qty_forms, this)?.dispatchEvent(new CustomEvent(\"change\", { bubbles: true, detail: { target: this.input } }));\n    }\n    if (this.input.min) this.buttonMinus.classList.toggle('disabled', value <= parseInt(this.input.min));\n    this.buttonPlus.classList.toggle('disabled', value >= parseInt(max));\n  }\n  #checkVal(event) {\n    const input = event.target,\n    inputValue = parseInt(input.value),\n    message = checkValueStatus(inputValue, input.min, input.max, input.step);\n\n    if (message != 'ok') {\n      input.setCustomValidity(message);\n      input.reportValidity();\n      // Reset with a value validity cache\n      input.value = input.dataset.value || input.getAttribute('value');\n      this.validateQtyRules();\n      input.select();\n      event.preventDefault();\n      event.stopPropagation();\n    } else {\n      input.setCustomValidity('');\n      input.reportValidity();\n      // Cache value validity\n      input.dataset.value = input.value;\n    }\n  }\n  cartUpdateQty(items, quantity) {\n    const rulesCart = $4('.hdt-quantity__rules-cart', getterGet(_qty_labels, this));\n    if (!rulesCart) return;\n\n    // 1. Update label quantity\n    const itemCountForVariant = items ? items.find((item) => item.id == this.dataset.variantId) : { quantity };\n    //console.log(itemCountForVariant)\n    const count = itemCountForVariant ? parseInt(itemCountForVariant.quantity) : 0;\n    rulesCart.hidden = !count;\n    $4('.hdt-quantity-cart', getterGet(_qty_labels, this)).textContent = count;\n\n    // 2. Trigger change to update price-per-item\n    this.input.dataset.cartQuantity = count;\n    this.input.dispatchEvent(new CustomEvent(\"change\", { bubbles: true }));\n  }\n};\n\nvar _on_recipient_form_changed = new WeakSet(), on_recipient_form_changed_fn,\n_cart_error2 = new WeakSet(), _cart_error2_fn,\n_displayErrorMessage = new WeakSet(), displayErrorMessage_fn,\n_createErrorListItem = new WeakSet(), createErrorListItem_fn,\n_clearErrorMessage = new WeakSet(), clearErrorMessage_fn;\n// https://github.com/Shopify/dawn/blob/main/assets/recipient-form.js\nclass RecipientForm extends HTMLElement {\n  #controller;\n  constructor() {\n    super();\n    getterAdd(_on_recipient_form_changed, this);\n    getterAdd(_cart_error2, this);\n    getterAdd(_displayErrorMessage, this);\n    getterAdd(_createErrorListItem, this);\n    getterAdd(_clearErrorMessage, this);\n    this.recipientFieldsLiveRegion = $4(`#Recipient-fields-live-region-${this.blockId}`, this);\n    this.checkboxInput = $4(`#Recipient-checkbox-${this.blockId}`, this);\n    this.checkboxInput.disabled = false;\n    this.hiddenControlField = $4(`#Recipient-control-${this.blockId}`, this);\n    this.hiddenControlField.disabled = true;\n\n    this.emailInput = $4(`#Recipient-email-${this.blockId}`, this);\n    this.nameInput = $4(`#Recipient-name-${this.blockId}`, this);\n    this.messageInput = $4(`#Recipient-message-${this.blockId}`, this);\n    this.sendonInput = $4(`#Recipient-send_on-${this.blockId}`, this);\n    this.offsetProperty = $4(`#Recipient-timezone-offset-${this.blockId}`);\n    if (this.offsetProperty) this.offsetProperty.value = new Date().getTimezoneOffset().toString();\n\n    this.errorMessageWrapper = $4('.hdt-form__message-wrapper', this);\n    this.errorMessageList = this.errorMessageWrapper?.querySelector('ul');\n    this.errorMessage = this.errorMessageWrapper?.querySelector('.hdt-error-message');\n    this.defaultErrorHeader = this.errorMessage?.innerText;\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    this.checkboxInput.addEventListener('change', getterRunFn(_on_recipient_form_changed, this, on_recipient_form_changed_fn).bind(this), { signal });\n    this.form?.addEventListener(cartError, getterRunFn(_cart_error2, this, _cart_error2_fn).bind(this), { signal });\n    this.form?.addEventListener(cartUpdate, getterRunFn(_clearErrorMessage, this, clearErrorMessage_fn).bind(this), { signal });\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n  get form() {\n    return this.closest('form');\n  }\n  get blockId() {\n    return this.dataset.blockId;\n  }\n\n  get inputFields() {\n    return [this.emailInput, this.nameInput, this.messageInput, this.sendonInput];\n  }\n\n  get disableableFields() {\n    return [...this.inputFields, this.offsetProperty];\n  }\n\n  // clearInputFields() {\n  //   this.inputFields.forEach((field) => (field.value = ''));\n  // }\n\n  enableInputFields() {\n    this.disableableFields.forEach((field) => (field.disabled = false));\n  }\n\n  disableInputFields() {\n    this.disableableFields.forEach((field) => (field.disabled = true));\n  }\n};\non_recipient_form_changed_fn = function() {\n  if (this.checkboxInput.checked) {\n    this.enableInputFields();\n    this.recipientFieldsLiveRegion.innerText =  this.recipientFieldsLiveRegion.dataset.expanded;\n  } else {\n    this.disableInputFields();\n    this.recipientFieldsLiveRegion.innerText = this.recipientFieldsLiveRegion.dataset.collapsed\n  }\n};\n_cart_error2_fn = function(event) {\n  if (event.detail.source === 'product-form') getterRunFn(_displayErrorMessage, this, displayErrorMessage_fn).call(this, event.detail.errors);\n};\ndisplayErrorMessage_fn = function(body) {\n  getterRunFn(_clearErrorMessage, this, clearErrorMessage_fn).call(this);\n  this.errorMessageWrapper.hidden = false;\n  if (typeof body === 'object') {\n    this.errorMessage.innerText = this.defaultErrorHeader;\n    return Object.entries(body).forEach(([key, value]) => {\n      const errorMessageId = `RecipientForm-${key}-error-${this.blockId}`;\n      const fieldSelector = `#Recipient-${key}-${this.blockId}`;\n      const message = `${value.join(', ')}`;\n      const errorMessageElement = this.querySelector(`#${errorMessageId}`);\n      const errorTextElement = errorMessageElement?.querySelector('.hdt-error-message');\n      if (!errorTextElement) return;\n\n      if (this.errorMessageList) {\n        this.errorMessageList.appendChild(getterRunFn(_createErrorListItem, this, createErrorListItem_fn).call(this, fieldSelector, message));\n      }\n\n      errorTextElement.innerText = `${message}.`;\n      errorMessageElement.removeAttribute('hidden');\n\n      const inputElement = this[`${key}Input`];\n      if (!inputElement) return;\n\n      inputElement.setAttribute('aria-invalid', true);\n      inputElement.setAttribute('aria-describedby', errorMessageId);\n    });\n  }\n\n  this.errorMessage.innerText = body;\n};\ncreateErrorListItem_fn = function(target, message) {\n  const li = document.createElement('li');\n  const a = document.createElement('a');\n  a.setAttribute('href', target);\n  a.innerText = message;\n  li.appendChild(a);\n  li.className = 'hdt-error-message';\n  return li;\n};\nclearErrorMessage_fn = function() {\n  this.errorMessageWrapper.hidden = true;\n\n  if (this.errorMessageList) this.errorMessageList.innerHTML = '';\n\n  $$4('.hdt-recipient-fields .hdt-form__message').forEach((field) => {\n    field.setAttribute('hidden', '');\n    const textField = $4('.hdt-error-message', field);\n    if (textField) textField.innerText = '';\n  });\n\n  this.inputFields.forEach((inputElement) => {\n    inputElement.setAttribute('aria-invalid', false);\n    inputElement.removeAttribute('aria-describedby');\n  });\n};\n\nvar _slider_main_select = new WeakSet(), slider_main_select_fn,\n_slide_media_main = new WeakMap(),\n_xr_button = new WeakMap(),\n_media_image_zoom = new WeakSet, media_image_zoom_fn;\nclass ProductMedia extends GalleryModal {\n  #controller;\n  #_medias;\n  #_thumbnailMedias;\n  constructor() {\n    super();\n    getterAdd(_slider_main_select, this);\n    getterAdd(_slide_media_main, this, $4(`hdt-slider-media`, this));\n    getterAdd(_xr_button, this, $4('[data-shopify-xr]', this));\n    getterAdd(_media_image_zoom, this);\n    this.oldMediaID = this.getAttribute('mid');\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    getterGet(_slide_media_main, this)?.addEventListener('select', getterRunFn(_slider_main_select, this, slider_main_select_fn).bind(this), { signal });\n    this.addEventListener(ThemeEvents.mediaStartedPlaying, (event)=> {\n      const { resource } = event.detail;\n      $$4('hdt-video[playing], hdt-model[playing]', this).forEach( (media) => {\n        if (resource !== media) {\n          //console.log(media)\n          media.pause();\n        }\n      });\n    }, { signal })\n\n    // Handler for variant change\n    // this.closest('hdt-product-observe')?.addEventListener(\"variant-change\", (event) => {\n    //   const {variant} = event.detail;\n    //   if (!variant) return;\n    //   this.#updateGroupMediaFilter(variant);\n    //   if (!variant.featured_media) return;\n    //   const media = $4(`.hdt-product-media__main [data-media-id=\"${variant.featured_media.id}\"]`, this);\n    //   if (!media) return;\n    //   frame.render(() => {\n    //     //console.log(media, variant)\n    //     if (this.slider.isActive) {\n    //       this.slider.goToTarget(media, !matchMediaQuery(\"motion\"), true);\n    //     } else {\n    //       media.scrollIntoView({ block: \"start\", behavior: \"smooth\" });\n    //     }\n    //   })\n    // }, { signal });\n    document.forms[this.getAttribute(\"form\")]?.addEventListener(\"product:updateNow\", (event) => {\n      //console.log('Media: ', event.detail.variant);\n      const {variant, userChange} = event.detail,\n      {mid} = variant;\n      this.userChange = userChange;\n      this.#updateGroupMediaFilter(variant);\n      if (!mid || !userChange) return;\n      const media = $4(`.hdt-product-media__main [data-media-id=\"${mid}\"]`, this);\n      if (!media || this.oldMediaID == mid) {\n        this.userChange = false;\n        return;\n      }\n      this.oldMediaID = mid;\n      frame.render(() => {\n        //console.log(media, variant)\n        if (this.slider.isActive) {\n          this.slider.goToTarget(media, !matchMediaQuery(\"motion\"), true);\n        } else {\n          media.scrollIntoView({ block: \"start\", behavior: \"smooth\" });\n        }\n      })\n    }, { signal });\n\n    // Handler for image zoom, lightBox\n    if (this.imageZoom != 'no') super.connectedCallback();\n    if ((this.imageZoom == 'zoom' || this.imageZoom == 'zoom_lightbox') && matchMediaQuery(\"hover\")) {\n      getterRunFn(_media_image_zoom, this, media_image_zoom_fn).call(this);\n    }\n\n    getterGet(_slide_media_main, this)?.addEventListener('reInit', () => {\n      $4('.hdt-product-media__zoom', this)?.toggleAttribute('hidden', $4('.hdt-product__media-item.is-selected', this)?.dataset.mediaType != 'image');\n    });\n  }\n  get imageZoom() {\n    return this.getAttribute('image-zoom');\n  }\n  get sectionId() {\n    return this.getAttribute('section-id');\n  }\n  get slider() {\n    return $4('hdt-slider-media', this);\n  }\n  get #sliderThumb() {\n    return $4('hdt-slider-thumb', this);\n  }\n  get images() {\n    return $$4('.hdt-product-media__main [data-media-type=\"image\"]:not([hidden]) img[hdt-el]', this)\n  }\n  get formId() {\n    return this.getAttribute(\"form\");\n  }\n  get form() {\n    return document.forms[this.formId];\n  }\n  get variantPicker() {\n    return $4(`hdt-variant-picker[form=\"${this.formId}\"]`);\n  }\n  get #hasGroupFilter() {\n    return this._hasGroupFilter ??= this.hasAttribute('can-has-media-group');\n  }\n  get #medias() {\n    return this.#_medias ??= $$4('.hdt-product__media-item', this);\n  }\n  get #thumbnailMedias() {\n    return this.#_thumbnailMedias ??= $$4('.hdt-thumbnail__media', this);\n  }\n  get slideVariant() {\n    return this._slideVariant ??= this.hasAttribute('update-image-on-slide-change');\n  }\n  #updateGroupMediaFilter(variant){\n    if (!this.#hasGroupFilter) return;\n    const options = this.getAttribute('can-has-media-group').split('|'),\n    values = [];\n    //console.log(variant, options);\n    options.forEach( (index) => {\n      values.push(variant[`option${index}`]);\n    });\n    const selectedValues = values.join('-');\n    // console.log('1: ',selectedValues, values, variant);\n\n    this.#medias.forEach( (mediaItem, index) => {\n      let groupValues = mediaItem.dataset.groupValues;\n      if (groupValues.includes('*')) {\n        //groupValues = groupValues.replace('*0', values[0]).replace('*1', values[1]).replace('*2', values[2]);\n        groupValues = groupValues.replace(/\\*(\\d)/g, (match, index) => {\n          return values[index] !== undefined ? values[index] : match;\n        });\n      }\n      //console.log('2: ',groupValues, selectedValues);\n      const isMatch = groupValues == selectedValues;\n      mediaItem.toggleAttribute('hidden', !isMatch);\n      this.#thumbnailMedias[index]?.toggleAttribute('hidden', !isMatch);\n    });\n    if (this.imageZoom != 'no') this.updateImageClick();\n    //console.log(this.slider);\n    //console.log(this.#sliderThumb);\n    const reInitOptions = variant.featured_media ? { startIndex: this.slider?.getIndexSlide(variant.featured_media.id) } : undefined;\n    this.slider?.reInit(reInitOptions);\n    this.#sliderThumb?.reInit();\n  }\n};\nslider_main_select_fn = async function(event){\n  const { sliderApi } = event.detail,\n  selectedSlide = sliderApi.slideNodes()[sliderApi.selectedScrollSnap()],\n  prevSlide = sliderApi.slideNodes()[sliderApi.previousScrollSnap()],\n  mediaId   = selectedSlide.dataset.mediaId,\n  variantId = (selectedSlide.dataset.variantId || this.form.id.value) + '';\n  this.oldMediaID = mediaId;\n\n  clearTimeout(this.timeOut);\n  this.timeOut = setTimeout(()=> {\n    if (!this.userChange && this.variantPicker && !this.variantPicker.isNoPick && this.variantPicker.isLoaded && this.slideVariant && variantId != this.form.id.value) {\n      const variantsOptions = JSON.parse(selectedSlide.dataset.options);\n      let inputChange = null;\n      this.variantPicker?.fieldsets.forEach((fieldset, index) => {\n        const valueEl = $4(`[is-value][data-value-id=\"${variantsOptions[index]}\"]`, fieldset);\n        if (valueEl && !(valueEl.checked || valueEl.getAttribute('aria-selected') == true)) {\n          if (valueEl.type == 'button') {\n            // is Dropdown\n            inputChange = $4('hdt-richlist', fieldset)?.setSelected(valueEl, fieldset);\n          } else {\n            valueEl.checked = true;\n            inputChange = valueEl;\n          }\n        }\n      });\n      inputChange?.dispatchEvent(new Event(\"change\", { bubbles: true }));\n    }\n    frame.render(() => this.userChange = false);\n    // Update attr xr button\n    getterGet(_xr_button, this)?.setAttribute('data-shopify-model3d-id', selectedSlide.dataset.mediaType == 'model' ? mediaId : getterGet(_xr_button, this).dataset.defaultId);\n    // Update icon zoom\n    $4('.hdt-product-media__zoom', this)?.toggleAttribute('hidden', selectedSlide.dataset.mediaType != 'image');\n  }, 0)\n\n  $4('hdt-video[playing], hdt-model[playing]', prevSlide)?.dispatchEvent( new CustomEvent('media:hidden', { bubbles: false, cancelable: true }) );\n  $4('hdt-video, hdt-model', selectedSlide)?.dispatchEvent( new CustomEvent('media:visible', { bubbles: false, cancelable: true }) );\n};\nmedia_image_zoom_fn = function(){\n  var classFadeMedia = 'zoom_fade_media',\n      classFadeInfo  = 'zoom_fade_info',\n      options        = JSON.parse( this.getAttribute('zoom-options') ),\n      zoomWrapper    = $id4(`product-zoom-${this.sectionId}`),\n      info           = $id4(`product-info-${this.sectionId}`),\n      zoomType       = options.type,  // external, inner, inner2 zoom\n      zoomFactor     = options.magnify,\n      isExternal     = zoomType  == 'external';\n\n  if(Shopify.designMode) $4('.drift-zoom-pane, .drift-bounding-box')?.remove();\n  html.classList.add(`zoom-type--${zoomType}`);\n  $$4('.hdt-product-media__main [data-media-type=\"image\"] img', this).forEach((image) => {\n    new Zoom(image, {\n      //showWhitespaceAtEdges: false,\n      sourceAttribute: 'src',\n      zoomFactor,\n      inlinePane: !isExternal && zoomType == 'inner2',\n      containInline: isExternal,\n      paneContainer: isExternal ? zoomWrapper : image.parentElement,\n      hoverBoundingBox: isExternal, //false , true\n      handleTouch: false,\n      onShow: () => {\n       this.classList.add(classFadeMedia);\n       info.classList.add(classFadeInfo);\n      },\n      onHide: () => {\n       this.classList.remove(classFadeMedia);\n       info.classList.remove(classFadeInfo);\n      }\n    });\n  });\n\n};\ncustomElements.define('hdt-product-media', ProductMedia);\n\nvar _master_input = new WeakMap(),\n_fieldsets = new WeakMap(),\n_options_size = new WeakMap();\n\nconst _tree = {},\n_product_info_cache = new Map(),\n_variants = {},\n_variantLoadingPromises = {};\n\nclass VariantLoader {\n  #baseUrl;\n  #productId;\n  #totalVariants;\n  #sectionId;\n  #variantPicker;\n\n  #isLoading = false;\n  #isLoaded = false;\n\n  #maxConcurrentRequests = 5;\n  #controller = new AbortController();\n\n  constructor(config) {\n    this.#baseUrl = `${Shopify.routes.root}products/${config.handle}`;\n    this.#productId = config.productId;\n    this.#totalVariants = config.totalVariants;\n    this.#sectionId = config.sectionId || 'variants';\n    this.#variantPicker = config.variantPicker;\n  }\n\n  /**\n   * Readonly getters\n   */\n  // get productId() {\n  //   return this.#productId;\n  // }\n\n  // get totalVariants() {\n  //   return this.#totalVariants;\n  // }\n\n  // get isLoading() {\n  //   return this.#isLoading;\n  // }\n\n  // get isLoaded() {\n  //   return this.#isLoaded;\n  // }\n\n  /**\n   * Abort all pending requests\n   */\n  abort() {\n    this.#controller?.abort();\n  }\n\n  /**\n   * Fetch a single page\n   */\n  async #fetchPage(pageNumber) {\n    const response = await fetch(\n      `${this.#baseUrl}?page=${pageNumber}&section_id=${this.#sectionId}`,\n      { signal: this.#controller.signal }\n    );\n\n    if (!response.ok) {\n      throw new Error(\n        `Failed to load page ${pageNumber}`\n      );\n    }\n\n    const htmlText = await response.text(),\n    html = new DOMParser().parseFromString(htmlText,'text/html'),\n    jsonText = $4('.hdt-section', html)?.textContent?.trim();\n\n    if (!jsonText) {\n      throw new Error(\n        `Missing variant data on page ${pageNumber}`\n      );\n    }\n\n    return JSON.parse(jsonText);\n  }\n\n  /**\n   * Run async tasks with concurrency limit\n   */\n  async #runConcurrent(items, limit, worker) {\n    const results = new Array(items.length);\n\n    let nextIndex = 0;\n\n    async function runner() {\n      while (true) {\n        const currentIndex = nextIndex++;\n\n        if (currentIndex >= items.length) {\n          return;\n        }\n\n        results[currentIndex] = await worker(\n          items[currentIndex],\n          currentIndex\n        );\n      }\n    }\n\n    await Promise.all(\n      Array.from(\n        {\n          length: Math.min(\n            limit,\n            items.length\n          )\n        },\n        () => runner()\n      )\n    );\n\n    return results;\n  }\n\n  /**\n   * Public entry point\n   */\n  async loadAllPages() {\n\n    // Return cached variants\n    if (this.#productId && _variants[this.#productId]) {\n      const variants = _variants[this.#productId];\n      this.#isLoaded = true;\n      this.#dispatchLoadedEvent(variants);\n      return variants;\n    }\n\n    // Another instance is already loading\n    // if (this.#productId && _variantLoadingPromises[this.#productId]) {\n    //   return _variantLoadingPromises[this.#productId];\n    // }\n    if (this.#productId && _variantLoadingPromises[this.#productId]) {\n      const variants = await _variantLoadingPromises[this.#productId];\n      this.#isLoaded = true;\n      this.#dispatchLoadedEvent(variants);\n\n      return variants;\n    }\n\n    this.#isLoading = true;\n    const promise = this.#loadAllPagesInternal();\n\n    if (this.#productId) _variantLoadingPromises[this.#productId] = promise;\n\n    try {\n      return await promise;\n    } finally {\n      if (this.#productId) delete _variantLoadingPromises[this.#productId];\n    }\n  }\n\n  /**\n   * Internal page loader\n   */\n  async #loadAllPagesInternal() {\n    try {\n      const totalPages = Math.ceil(this.#totalVariants / 250),\n      pages = Array.from(\n        { length: totalPages },\n        (_, index) => index + 1\n      ),\n      pageResults = await this.#runConcurrent(\n        pages,\n        this.#maxConcurrentRequests,\n        page => this.#fetchPage(page)\n      );\n\n      const variants = [];\n\n      for (const pageVariants of pageResults) {\n        variants.push(...pageVariants);\n      }\n\n      if (this.#productId) _variants[this.#productId] = variants;\n      this.#isLoaded = true;\n      this.#dispatchLoadedEvent(variants);\n\n      return variants;\n\n    } finally {\n      this.#isLoading = false;\n    }\n  }\n\n  /**\n   * Dispatch variants loaded event\n   */\n  #dispatchLoadedEvent(variants) {\n    this.#variantPicker.isLoaded = true;\n    this.#variantPicker?.dispatchEvent(new CustomEvent('variantsLoaded', {\n      detail: {\n        variants,\n        productId: this.#productId,\n        totalVariants: this.#totalVariants\n      },\n      bubbles: false\n    }));\n  }\n}\nclass VariantPicker extends HTMLElement {\n #controller;\n #controllerFetch;\n #fieldsetsTree = {};\n #is_soldout = false;\n #is_unavailable = false;\n #isFirstTime = true;\n #optionsIndexNeedUpdate = [];\n #loader;\n  constructor() {\n    super();\n    getterAdd(_fieldsets, this, $$4('fieldset', this));\n    getterAdd(_options_size, this, this.fieldsets.length);\n    this.isNoPick = this.hasAttribute('no-pick');\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    this.abortController = new AbortController();\n    getterAdd(_master_input, this, this.masterInput);\n    this.#updateUrl();\n    this.#updateOptions();\n\n    // Init Variants\n    const count = parseInt(this.getAttribute('count')),\n    limit = parseInt(this.getAttribute('limit')),\n    prId = this.dataset.id;\n    if (_variants[prId] || count <= limit) {\n      const script = $4('script[data-variants]', this);\n      if (!_variants[prId]) _variants[prId] = JSON.parse(script.textContent);\n      script?.remove();\n      this.isLoaded = true;\n      this.#variantSmart(_variants[prId]);\n    } else {\n      this.#loader = new VariantLoader({\n        handle: this.handle,\n        productId: prId,\n        totalVariants: count,\n        variantPicker: this\n      });\n      //this.classList.add('hdt-pe-none');\n      inView(this.parentElement, () => this.#loader.loadAllPages(), { margin: \"800px\" });\n      this.addEventListener('variantsLoaded', (e) => this.#variantSmart(e.detail.variants), { once: true });\n    }\n    // End Init Variants\n\n    this.addEventListener('change', this.#valueChange, { signal });\n\n    // To trigger when use type dropdown\n    //$$4('fieldset[type^=\"dropdown\"]', this).forEach((fieldset) => {\n    $$4('fieldset[type^=\"dropdown\"], fieldset[picker-style^=\"dropdown\"]', this).forEach((fieldset) => {\n      $4('hdt-popover', fieldset).addEventListener(\"richlist:change\", (e) => {\n        //console.log(e)\n        const input = $4(`input[type=\"hidden\"][name=\"option${parseInt(e.target?.dataset.index) + 1}\"]`, fieldset);\n        if (input.value == e.detail.value) return;\n        input.value = e.detail.value;\n        input.setAttribute(\"data-value-id\", e.target?.dataset.valueId);\n        // input.dispatchEvent(new Event(\"change\", { bubbles: true }));\n        input.dispatchEvent(new CustomEvent(\"change\", { \n          bubbles: true, cancelable: true,\n          detail: { isTrusted: true } \n        }));\n      }, { signal });\n    });\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n    this.#loader?.abort();\n  }\n  get handle() {\n    return this._handle ??= this.getAttribute(\"handle\");\n  }\n  get masterInput() {\n    const formId = this.getAttribute(\"form\"),\n    tmp = this.nextElementSibling;\n    if (!document.forms[formId] && tmp) {\n      tmp.replaceWith(tmp.content.firstElementChild.cloneNode(true));\n    }\n    return document.forms[formId].id;\n  }\n  get selectedVariant() {\n    // const scriptData  = $4('script[data-selected-variant]', this),\n    // variant = JSON.parse(scriptData?.textContent || \"{}\");\n    // if (variant) variant.valuesID = JSON.parse(scriptData?.dataset?.selectedVariant || \"[]\");\n    return JSON.parse($4('script[data-selected-variant]', this)?.textContent || \"{}\");\n  }\n  get fieldsets() {\n    return getterGet(_fieldsets, this);\n  }\n  get #hideSoldOut() {\n    return this._hideSoldOut ??= this.hasAttribute('hide-sold-out-variants');\n  }\n  get #main() {\n    return this._main ??= this.closest(\".hdt-main-product\");\n  }\n  get #sectionId() {\n    return this._sectionId ??= this.getAttribute(\"section-id\");\n  }\n  get #form() {\n    return this._form ??= document.forms[this.getAttribute(\"form\")];\n  }\n  // #updateOptions() {\n  //   this.options = this.fieldsets.map((fieldset) => {\n  //     return $$4('input, a', fieldset).find((input) => input.checked || input.type == 'hidden' || input.hasAttribute('selected'))?.dataset.valueId;\n  //   }).filter((value)=> {\n  //     return value !== undefined && value !== '';\n  //   })\n  // }\n  #updateOptions() {\n    this.options = this.fieldsets\n      .map((fieldset) => {\n        const el = $$4('input, a', fieldset).find((input) => input.checked || input.type === 'hidden' || input.hasAttribute('selected'));\n        return el?.dataset.valueId\n          ? Number(el.dataset.valueId)\n          : undefined;\n      })\n      .filter((value) => Number.isFinite(value));\n  }\n\n  #variantSmart(variants) {\n    // Remove soldout\n    //console.log(variants)\n    let total = 1;\n    // build fieldsetsTree\n    this.fieldsets.forEach((fieldset, index) => {\n      this.#fieldsetsTree[index] = $$4('[is-value]', fieldset).map(el => parseInt(el.dataset.valueId));\n      const length = this.#fieldsetsTree[index].length;\n      total = total * length;\n      //if (length > 1) this.#optionsIndexNeedUpdate.push(index);\n      this.#optionsIndexNeedUpdate.push(index);\n    });\n    // console.log('fieldsetsTree: ',this.#fieldsetsTree)\n    _tree[this.dataset.id] = this.#buildVariantTree(variants);\n    this.#is_unavailable = variants.length < total; // has unavailable\n    this.#is_soldout = variants.some(v => v.available === false); // has soldout\n    if (this.#is_unavailable || this.#is_soldout ) this.#updateSwatchSelector();\n    // Update hidden back-in-stock for product > 250 variants\n    if (total > 250) $4(`hdt-back-in-stock[form=\"${this.getAttribute(\"form\")}\"]`)?._hidden(this.#is_soldout);\n    this.classList.remove('hdt-pe-none');\n\n    // Hover\n    // $$4('input[is-value] + label, button[is-value]').forEach( (el)=> {\n    //   hover(el, () => {\n    //     console.log(\"hover start\")\n    //     const nextOptions = [...this.options]; // clone\n    //     nextOptions[Number(el.dataset.index || el.previousElementSibling.dataset.index)] = Number(el.dataset.valueId || el.previousElementSibling.dataset.valueId);\n    //     const selectedOptions = nextOptions.reduce((acc, value, index) => {\n    //       acc[`option${index}`] = value;\n    //       return acc;\n    //     }, {}),\n    //     node = this.#findNode(selectedOptions);\n    //     console.log(nextOptions, selectedOptions, node);\n    //     let currentVariant;\n    //     if (node) {\n    //       currentVariant = node._variant;\n    //     } else {\n    //       currentVariant = this.#findClosestVariantOptimized(selectedOptions);\n    //     }\n    //     if (currentVariant) this.#fetchSection(currentVariant.id, false)\n    //   })\n    // })\n  }\n  #valueChange = async (event) => {\n    //console.log('valueChange')\n    const target = event.target;\n    if (!target.hasAttribute(\"is-value\") && !target.hasAttribute('trigger-value')) return;\n    this.#updateOptions();\n    if (this.options.length < getterGet(_options_size, this)) {\n      if (target) {\n        const updateEl = $4('[update-value]', this.fieldsets[parseInt(target.dataset.index)]);\n        if (updateEl) updateEl.textContent = target.value;\n      }\n      return;\n    } else if (!this.isLoaded) {\n      this.classList.add('hdt-pe-none');\n      this.addEventListener('variantsLoaded', () => target?.dispatchEvent(new Event(\"change\", { bubbles: true })), { once: true });\n      return;\n    }\n    if (this.isNoPick) {\n      this.isNoPick = false;\n      this.removeAttribute('no-pick');\n    }\n    let currentVariant;\n    //console.log('valueChange: ', this.options)\n    const selectedOptions = this.#selectedOptions;\n    //console.log('selectedOptions: ', selectedOptions)\n    if (this.#is_unavailable || ( this.#hideSoldOut && this.#is_soldout)) {\n      // Check is unavailable: this.#is_unavailable || ( this.#hideSoldOut && this.#is_soldout)\n      // Check has variant match with options selected. if not variant find a variant closest match.\n      const node = this.#findNode(selectedOptions);\n      if (node) currentVariant = node._variant;\n      //console.log('node:', node);\n      if (!currentVariant) {\n        // Case Unavailable\n        currentVariant = this.#findClosestVariantOptimized(selectedOptions);\n        if (!currentVariant) {\n          //console.log('not find acurrentVariant')\n          return;\n        }\n        // Update option\n        const newOptions = Object.entries(currentVariant)\n        .filter(([key]) => key.startsWith('option'))\n        .map(([_, value]) => value);\n\n        // Update radio checked\n        newOptions.forEach( (value, index) => {\n          const fieldset = this.fieldsets[index],\n          valueEl = $4(`[is-value][data-value-id=\"${value}\"]`, fieldset);\n          if (valueEl && !(valueEl.checked || valueEl.getAttribute('aria-selected') == true)) {\n            if (valueEl.type == 'button') {\n              // is Dropdown\n              $4('hdt-richlist', fieldset)?.setSelected(valueEl, fieldset);\n            } else {\n              valueEl.checked = true;\n            }\n          }\n        });\n        // Update options\n        this.#updateOptions();\n        //console.log('node2:', currentVariant, newOptions)\n      }\n      this.#updateSwatchSelector();\n    } else {\n      const _node = this.#findNode(selectedOptions);\n      currentVariant = _node._variant;\n      if (this.#is_soldout) this.#updateSwatchSelector();\n    }\n    //if (!currentVariant) return;\n    // UPDATE\n    // 1. Update [update-value]\n    this.options.forEach( (value, index) => {\n      const valueEl = $4(`[is-value][data-value-id=\"${value}\"]`, this.fieldsets[index]);\n      if (valueEl) $4('[update-value]', this.fieldsets[index]).textContent = valueEl.value;\n    });\n\n    // 2. Update form, buy buttons and media\n    // console.log(event.isTrusted, event.detail?.isTrusted)\n    this.#form?.dispatchEvent(new CustomEvent(\"product:updateNow\", { detail: { variant: currentVariant, userChange: event.isTrusted || event.detail?.isTrusted } }));\n\n    // 3. Update url\n    this.#updateUrl(currentVariant.id);\n    if (this.#ofQuickview) sessionStorage.setItem(this.#key, `${this.handle}?variant=${currentVariant.id}`);\n\n    // 4. Update product info\n    const html = await this.#fetchSection(currentVariant.id);\n    //console.log('html: ', html)\n    if (!html) return;\n    this.#form?.dispatchEvent(new CustomEvent(\"product:updateInfo\", {\n      detail: {\n        html,\n        sectionId: this.#sectionId,\n        targetId: event.target.id,\n      }\n    }));\n  }\n  #updateSwatchSelector() {\n    if (this.isNoPick) return;\n    const CLASS_UNAVAILABLE = 'is-unavailable',\n    CLASS_SOLDOUT = this.#hideSoldOut ? 'is-unavailable' : 'is-disabled',\n    indexes = this.#optionsIndexNeedUpdate;\n    //console.log(this.#fieldsetsTree, this.options)\n    indexes.forEach((currentIndex, level) => {\n      //console.log(currentIndex,level)\n      if (!this.#isFirstTime && currentIndex === 0) return;  // like continue\n      this.#fieldsetsTree[currentIndex].forEach((value) => {\n\n        const valueEl = $4(`[is-value][data-value-id=\"${value}\"]`, this.fieldsets[currentIndex])\n\n        // ===== Build selectedOptions =====\n        const selectedOptions = {};\n\n        // Fill previous selected options\n        for (let i = 0; i < level; i++) {\n          const idx = indexes[i];\n          selectedOptions[`option${idx}`] = this.options[idx]\n        }\n\n        // Current option value\n        selectedOptions[`option${currentIndex}`] = value;\n        const nodes = this.#findNode(selectedOptions);\n\n        // ===== Reset state =====\n        valueEl.classList.add(CLASS_UNAVAILABLE, CLASS_SOLDOUT);\n\n        if (!nodes) return;\n\n        valueEl.classList.remove(CLASS_UNAVAILABLE)\n        if ( this.#collectLeafVariants(nodes)) valueEl.classList.remove(CLASS_SOLDOUT)\n\n      });\n      this.#isFirstTime = false;\n    })\n  }\n  #buildVariantTree(variants) {\n    const root = {};\n    //if (this.#hideSoldOut) variants = variants.filter(item => item.available);\n    variants.forEach((variant) => {\n      let currentNode = root;\n\n      // Get all option values dynamically\n      const optionValues = Object.keys(variant)\n        .filter(key => key.startsWith(\"option\") && variant[key])\n        .sort() // ensure option1 -> option2 -> option3\n        .map(key => variant[key]);\n\n      optionValues.forEach((value, index) => {\n        if (!currentNode[value]) {\n          currentNode[value] = {};\n        }\n\n        // If last level \u2192 store variant\n        if (index === optionValues.length - 1) {\n          currentNode[value]._variant = variant;\n          currentNode[value]._available = variant.available;\n        }\n\n        currentNode = currentNode[value];\n      });\n    });\n\n    return root;\n  }\n  #findNode(selectedOptions) {\n    let currentNode = _tree[this.dataset.id];\n\n    const values = Object.keys(selectedOptions)\n      .sort()\n      .map(key => selectedOptions[key]);\n    for (let value of values) {\n      if (!currentNode[value]) return null;\n      currentNode = currentNode[value];\n    }\n\n    return currentNode;\n  }\n  #collectAllVariants(node, result = []) {\n    if (!node) return result;\n\n    // N\u1EBFu l\u00E0 leaf node\n    if (node._variant) {\n      result.push(node._variant);\n    }\n\n    // Duy\u1EC7t c\u00E1c nh\u00E1nh con\n    for (let key in node) {\n      if (key.startsWith(\"_\")) continue;\n\n      this.#collectAllVariants(node[key], result);\n    }\n\n    return result;\n  }\n  #getMatchScore(variant, selectedOptions) {\n    let score = 0;\n\n    Object.keys(selectedOptions).forEach((key) => {\n      if (variant[key] === selectedOptions[key]) {\n        score++;\n      }\n    });\n\n    return score;\n  }\n  #findClosestVariantOptimized(selectedOptions) {\n    let currentNode = _tree[this.dataset.id];\n    let lastValidNode = _tree[this.dataset.id];\n\n    const values = Object.keys(selectedOptions)\n      .sort()\n      .map(key => selectedOptions[key]);\n\n    for (let value of values) {\n      if (!currentNode[value]) break;\n      currentNode = currentNode[value];\n      lastValidNode = currentNode;\n    }\n\n    const candidates = this.#collectAllVariants(lastValidNode);\n\n    let bestVariant = null;\n    let bestScore = -1;\n\n    for (let variant of candidates) {\n      if (!variant.available && this.#hideSoldOut) continue;\n\n      const score = this.#getMatchScore(variant, selectedOptions);\n\n      if (score > bestScore) {\n        bestScore = score;\n        bestVariant = variant;\n      }\n    }\n\n    return bestVariant;\n  }\n  #collectLeafVariants(node, stopOnAvailable = true) {\n    // GET 1 variant available\n    const result = []\n    let found = null\n\n    function traverse(current) {\n      for (const key in current) {\n        const value = current[key]\n\n        // n\u1EBFu \u0111\u00E3 t\u00ECm \u0111\u01B0\u1EE3c v\u00E0 mu\u1ED1n d\u1EEBng\n        if (stopOnAvailable && found) {\n          return\n        }\n\n        // leaf node (variant)\n        if (value && value.id !== undefined) {\n          if (stopOnAvailable) {\n            if (value.available) {\n              found = value\n              return\n            }\n          } else {\n            result.push(value)\n          }\n        } else {\n          traverse(value)\n        }\n      }\n    }\n\n    traverse(node)\n\n    if (stopOnAvailable) {\n      return found\n    }\n\n    return result\n  }\n  async #fetchSection(variantID, loading = true) {\n    const key = `${this.#sectionId}:${variantID}`;\n\n    if (_product_info_cache.has(key)) {\n      return _product_info_cache.get(key);\n    }\n    this.#controllerFetch?.abort();\n    const controller = new AbortController();\n    this.#controllerFetch = controller;\n\n    if (loading) this.#main?.setAttribute('loading-options', '');\n\n    try {\n      //console.log('url: ', `${Shopify.routes.root}products/${this.handle}?variant=${variantID}&section_id=${this.#sectionId}`)\n      const response = await fetch(`${Shopify.routes.root}products/${this.handle}?variant=${variantID}&section_id=${this.#sectionId}&view=hdt_ajax`, { signal: controller.signal });\n      const html = await response.text();\n      // Save cache\n      if (!Shopify.designMode) _product_info_cache.set(key, html);\n      return this.#controllerFetch === controller ? html: true;\n    }\n    catch (error) {\n      if (error.name !== 'AbortError') {console.error(error);}\n    }\n    finally {\n      // ch\u1EC9 remove n\u1EBFu l\u00E0 request m\u1EDBi nh\u1EA5t\n      if (this.#controllerFetch === controller) {\n        this.#main?.removeAttribute('loading-options');\n      }\n    }\n    // this.#controllerFetch?.abort();\n    // this.#controllerFetch = new AbortController();\n    // this.#main?.setAttribute('loading-options', '');\n    // const response = await fetch(`${Shopify.routes.root}products/${this.handle}?option_values=${optionValues}&section_id=${this.#sectionId}`, { signal: this.#controllerFetch.signal});\n    // const html = await response.text();\n    // this.#main?.removeAttribute('loading-options');\n    // // Save cache\n    // if (!Shopify.designMode) _product_info_cache.set(key, html);\n\n    // return html;\n  }\n  #updateUrl (id) {\n    if (!this.hasAttribute(\"update-url\") || !history.replaceState) return;\n    const newUrl = new URL(window.location.href);\n    id = id || this.getAttribute(\"update-url\");\n    if (id) {\n      newUrl.searchParams.set(\"variant\", id);\n    } else {\n      newUrl.searchParams.delete(\"variant\");\n    }\n    window.history.replaceState({ path: newUrl.toString() }, \"\", newUrl.toString());\n    document.dispatchEvent(new CustomEvent('hdt:updateUrl'));\n  }\n  get #selectedOptions() {\n    return this.options.reduce((acc, value, index) => {\n      acc[`option${index}`] = value;\n      return acc;\n    }, {});\n  }\n  get #ofQuickview() {\n    return this._ofQuickview ??= this.#sectionId.includes('main-qv');\n  }\n  get #key() {\n    return 'theme:quickview:last';\n  }\n};\n\nvar _max_height = new WeakSet(), max_height_fn;\nclass MaxHeight extends HTMLElement {\n  #resize;\n  constructor() {\n    super();\n  }\n  connectedCallback() {\n    getterAdd(_max_height, this, true);\n    getterRunFn(_max_height, this, max_height_fn).call(this);\n    // Add event listener for this resize\n    let _width = this.clientWidth;\n    this.#resize = resize(this, (_, { width }) => {\n      if (_width != width) {\n        getterRunFn(_max_height, this, max_height_fn).call(this);\n        _width = width;\n      }\n    });\n    this.nextElementSibling?.addEventListener(\"click\", (e) => {\n      e.preventDefault();\n      this.toggleAttribute(\"open\")\n    });\n  }\n  disconnectedCallback() {\n    if (this.#resize) this.#resize();\n  }\n  set scrollH(h) {\n    this.style.setProperty(\"--scroll-height\", h);\n  }\n  get _scrollH() {\n    return `${this.scrollHeight}px`;\n  }\n};\nmax_height_fn = function() {\n  const isOpened = this.hasAttribute(\"open\");\n  if (isOpened) {\n    this.scrollH = 'auto';\n    frame.render(() => this.scrollH = this._scrollH);\n  } else {\n    // Remove the max-height property\n    this.removeAttribute(\"active-mh\");\n    this.removeAttribute(\"open\");\n  }\n\n  if (isOpened || this.clientHeight >= this.scrollHeight) return;\n  this.scrollH = this._scrollH;\n  this.setAttribute(\"active-mh\", \"\");\n};\n\nvar _block_required_froms,\n_block_required_detect,\n_block_required_on_change, block_required_on_change_fn,\n_block_required_on_submit, block_required_on_submit_fn;\nclass BlockRequired extends HTMLElement {\n  #controller;\n  constructor() {\n    super();\n    getterAdd(_block_required_on_submit, this);\n    getterAdd(_block_required_on_change, this);\n    getterAdd(_block_required_detect, this, this.getAttribute('detect'));\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const arrRequireds = $$4('[required]', this);\n    //getterGet(_block_required_froms, this).checkBreak = false;\n    if (arrRequireds.length == 0) return;\n    const { signal } = this.#controller;\n    getterAdd(_block_required_froms, this, document.forms[this.attrForm]);\n    if (!getterGet(_block_required_froms, this)) return;\n    arrRequireds.forEach((el) => { el.removeAttribute(\"required\"); this.classList.add(\"is-required\") } );\n    //getterGet(_block_required_froms, this).checkBreak = ( $$4(`hdt-block-required [form=\"${this.attrForm}\"]`).length != $$4(`hdt-block-required:not(.is-uncheck, .is-required) [form=\"${this.attrForm}\"]`).length );\n    this.updateBreak();\n    if ( this.getAttribute('event') === 'change') {\n      setTimeout(() => this.checked = $4('input:checked', this), 100); // fix when back tab will autocomplete\n      this.addEventListener(\"change\", getterRunFn(_block_required_on_change, this, block_required_on_change_fn).bind(this), { signal });\n    } else {\n      this.addEventListener(\"input\", debounce( getterRunFn(_block_required_on_change, this, block_required_on_change_fn).bind(this), 150, { signal }));\n    }\n    getterGet(_block_required_froms, this).addEventListener(\"submit\", getterRunFn(_block_required_on_submit, this, block_required_on_submit_fn).bind(this), { signal });\n  }\n  get attrForm() {\n    return this._attrForm = this._attrForm || $4('[form]', this).getAttribute(\"form\");\n  }\n  updateBreak() {\n    getterGet(_block_required_froms, this).checkBreak = ( $$4(`hdt-block-required [form=\"${this.attrForm}\"]`).length != $$4(`hdt-block-required:not(.is-uncheck, .is-required) [form=\"${this.attrForm}\"]`).length );\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n  createStyle() {\n    const arr = [];\n    let i,j = 0;\n    for (i = 0; i < 10; i++) {\n      arr.push(`translate3d(${arguments[j++]},0,0)`);\n      if (j === arguments.length) j = 0;\n    }\n    return arr\n  }\n  /**\n   * @param {any} value\n   */\n  set checked(value) {\n    this.setChecked = value;\n  }\n  get checked() {\n    return this.setChecked\n  }\n}\n_block_required_froms = new WeakMap();\n_block_required_detect = new WeakMap();\n_block_required_on_change = new WeakSet();\nblock_required_on_change_fn = function() {\n  this.checked = false;\n  // checked, length\n  if ( getterGet(_block_required_detect, this ) === 'checked') {\n    if ($4('input:checked', this)) this.checked = true;\n  } else {\n    const element = $4('input[type=\"text\"]', this) || $4('textarea', this) || $4('select', this);\n    if (element && element.value.length > 0) this.checked = true;\n  }\n  // this.classList.remove('is-required');\n  // this.classList.toggle('is-uncheck', !this.checked);\n  this.classList.remove('is-uncheck');\n  this.classList.toggle('is-required', !this.checked);\n  this.updateBreak();\n};\n_block_required_on_submit = new WeakSet();\nblock_required_on_submit_fn = function(event) {\n  if (this.checked) return;\n  //if (this.checked || event.target?.getAttribute('id') !== this.attrForm) return;\n  event.preventDefault();\n  event.stopPropagation();\n  this.classList.remove('is-required');\n  this.classList.add('is-uncheck');\n  //$4('label', this)?.focus();\n  $4(`hdt-block-required.is-uncheck [form=\"${this.attrForm}\"]`).focus();\n  animate(\n    this,\n    {\n      transform: this.createStyle(0, '-10px', '10px')\n    },\n    {\n      offset: [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1],\n      duration: 1,\n      ease: [0.25, 0.1, 0.25, 1.0]\n    }\n  );\n};\ncustomElements.define(\"hdt-block-required\", BlockRequired);\n\n\nclass buyButtons extends HTMLElement {\n  #controller;\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const productForm = this.closest('product-form');\n    //quantity = $4('[quantity-selector', this);\n    productForm.submitButton = $4('[type=\"submit\"]', this);\n    if (productForm.cart) productForm.submitButton.setAttribute('aria-haspopup', 'dialog');\n    const {preOrder, addToCart, soldOut} = themeHDN.strings;\n    document.forms[this.getAttribute(\"form\")]?.addEventListener(\"product:updateNow\", (event) => {\n      const { variant } = event.detail;\n      //console.log('Buy button: ', variant)\n      // 1.Update id\n      productForm.form.id.value = variant.id;\n      if (!this.hasAttribute('need-update-atc')) return;\n      // 2. Update atc text: Add to cart, Sold out, pre-oder\n      productForm.submitButton.toggleAttribute('disabled', !variant.available);\n      const text = variant.isPreOrder ? preOrder : variant.available ? addToCart : soldOut;\n      productForm.submitButton.firstElementChild.textContent = text;\n      productForm.submitButton.dataset.hover = text;\n      // Hidden quantity\n      // quantity.hidden = !variant.available;\n    }, { signal: this.#controller.signal, once: this.hasAttribute('once') });\n    if (this.closest('.hdt-main-product')?.hasAttribute('is-qv')) {\n      //console.log('qv')\n      Shopify?.PaymentButton?.init();\n    }\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n};\nvar _on_submit_handler = new WeakSet(), on_submit_handler_fn,\n_product_form = new WeakMap(), _cart_drawer = new WeakMap(),\n_reset_product_form_state = new WeakSet(), reset_product_form_state_fn;\nclass ProductForm extends HTMLElement {\n  #controller;\n  constructor() {\n    super();\n    getterAdd(_on_submit_handler, this);\n    getterAdd(_reset_product_form_state, this);\n    getterAdd(_product_form, this, $4('form', this));\n    getterAdd(_cart_drawer, this, $4('[ref=\"hdt-cart\"]'));\n    this.hideErrors = this.dataset.hideErrors === 'true';\n    this.submitButton = $4('[type=\"submit\"]', this);\n    if (this.cart) this.submitButton.setAttribute('aria-haspopup', 'dialog');\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    if (typeof this.form.id == 'object') this.form.id.disabled = false;\n    this.form?.addEventListener('submit', getterRunFn(_on_submit_handler, this, on_submit_handler_fn).bind(this), { signal });\n    this.form?.addEventListener('variant-change', getterRunFn(_reset_product_form_state, this, reset_product_form_state_fn).bind(this), { signal });\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n\n  handleErrorMessage(errorMessage = false) {\n    this.errorMessageWrapper = this.errorMessageWrapper || $4('.hdt-form__message-wrapper', this);\n    //console.log('this.errorMessageWrapper', this.errorMessageWrapper, errorMessage)\n    if (!this.errorMessageWrapper) return;\n    this.errorMessage = this.errorMessage || $4('.hdt-error-message', this.errorMessageWrapper);\n\n    this.errorMessageWrapper.toggleAttribute('hidden', !errorMessage);\n    if (errorMessage) this.errorMessage.textContent = errorMessage;\n  }\n  get form() {\n    return getterGet(_product_form, this);\n  }\n  get cart() {\n    return getterGet(_cart_drawer, this);\n  }\n};\non_submit_handler_fn =  async function(event) {\n  event.preventDefault();\n  if (this.form.checkBreak) return;\n  if (!this.form.checkValidity()) {\n    this.form.reportValidity();\n    return;\n  }\n  this.submitButton.setAttribute(\"aria-disabled\", true);\n  this.submitButton.setAttribute(\"aria-busy\", true);\n\n  document.dispatchEvent(new CustomEvent(loadingStart));\n\n  const formData = new FormData(this.form);\n  if (this.cart) {\n    formData.append('sections', this.cart?.sectionsToRender?.map(section => section.id) ?? ['cart-json']);\n    // formData.append(\n    //   'sections',\n    //   this.cart.sectionsToRender.map((section) => section.id)\n    // );\n    //formData.append('sections_url', window.location.pathname);\n    //this.cart.focusElement = document.activeElement;\n  }\n  const fetchCfg = fetchConfig('javascript', { body: formData }),\n  response = await fetch(`${Shopify.routes.root}cart/add.js`, {\n    ...fetchCfg,\n    headers: {\n      ...fetchCfg.headers,\n      Accept: 'text/html',\n    },\n  });\n  this.submitButton.removeAttribute(\"aria-disabled\");\n  this.submitButton.removeAttribute(\"aria-busy\");\n  const responseJson = await response.json();\n  document.dispatchEvent(new CustomEvent(loadingEnd));\n  if (responseJson.status) {\n    //if (this.hideErrors) return;\n    const {errors, description, message} = responseJson;\n    this.form.dispatchEvent(new CustomEvent(cartError, {\n      bubbles: true,\n      detail: {\n        source: 'product-form',\n        errors: errors || description,\n        message\n      }\n    }));\n    if (!this.hideErrors) this.handleErrorMessage(description);\n\n    // When we add more than the maximum amount of items to the cart, we need to dispatch a cart reload event\n    // because our back-end still adds the max allowed amount to the cart.\n    document.dispatchEvent(new CustomEvent(cartReload, {\n      bubbles: true,\n      detail: {\n        variantId: formData.get('id')\n      }\n    }));\n  } else {\n    if (!this.hideErrors) this.handleErrorMessage();\n    //const cartData = this.cart ? Object.assign({}, responseJson, JSON.parse(responseJson.sections['cart-json'].split('[split_94]')[1] || '{}')) : responseJson;\n    const cartData = {\n      ...responseJson,\n      ...JSON.parse(responseJson?.sections?.['cart-json']?.split('[split_94]')?.[1] || '{}')\n    };\n    this.form.dispatchEvent(new CustomEvent(cartUpdate, {\n      bubbles: true,\n      detail: {\n        source: 'product-form',\n        actionAfterATC: formData.get(\"action_added\"),\n        variantId: formData.get('id'),\n        cartData,\n        formData: Object.fromEntries(formData.entries())\n      }\n    }));\n  }\n};\nreset_product_form_state_fn = function(even) {\n  this.handleErrorMessage();\n};\n\nclass ProductFormBundle extends ProductForm {\n  #controller;\n  constructor() {\n    super();\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.#controller = new AbortController();\n\n    this.form?.addEventListener('variant-bundle-change', getterRunFn(_reset_product_form_state, this, reset_product_form_state_fn).bind(this), { signal: this.#controller.signal });\n    const $totalPrice = $4('[update-total-price]', this);\n    if (!$totalPrice) return;\n    let totalPrice = Number($totalPrice.dataset.price);\n    let totalComparePrice = Number($totalPrice.dataset.cpprice);\n    this.addEventListener(\"bundle:update-price\", (event) => {\n      //$$4('.hdt-bundle-product [name=\"items[][id]\"]', this).forEach(()=> { });\n      const { gapPrice , gapCpprice } = event.detail;\n      // Update price\n      totalPrice += gapPrice;\n      totalComparePrice += gapCpprice;\n      $4('hdt-compare-at-price', $totalPrice).toggleAttribute('hidden', totalComparePrice <= totalPrice);\n      $4('hdt-compare-at-price .hdt-money', $totalPrice).outerHTML = `<span class=\"hdt-money\">${currency.formatMoney(totalComparePrice)}</span>`;\n      $4('hdt-price .hdt-money', $totalPrice).outerHTML = `<span class=\"hdt-money\">${currency.formatMoney(totalPrice)}</span>`;\n      document.dispatchEvent(new CustomEvent(\"currencyUpdate\"));\n    });\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n};\n\nvar _update_product_bundle = new WeakSet(), update_product_bundle_fn;\n// _hover_product_bundle = new WeakSet(), hover_product_bundle_fn,\n// _hover_btn_bundle = new WeakSet(), hover_btn_bundle_fn,\n// _hover_bundle_timer = new WeakMap(),\n// _hover_bundle_timer2 = new WeakMap();\nclass ProductBundle extends HTMLElement {\n  #controller;\n  #hoverHandle;\n  #hoverHandle2;\n  #resize;\n  constructor() {\n    super();\n    getterAdd(_update_product_bundle, this);\n    // getterAdd(_hover_product_bundle, this);\n    // getterAdd(_hover_btn_bundle, this);\n    // getterAdd(_hover_bundle_timer, this, void 0);\n    // getterAdd(_hover_bundle_timer2, this, void 0);\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const selectElement = $4('select[name=\"items[][id]\"]', this),\n    butonHover = $4(`#${this.getAttribute('prefix')}`);\n    if (selectElement) {\n      // Store the initial value as the previous value\n      this.prevOpt = $4(`option[value=\"${selectElement.value}\"]`, selectElement);\n\n      // Add event listener for change event\n      selectElement.addEventListener('change', getterRunFn(_update_product_bundle, this, update_product_bundle_fn).bind(this), { signal: this.#controller.signal });\n    }\n    if (!butonHover) return;\n    this.#resize = resize(this, () => {\n      //console.log('resize product bundle', matchMediaQuery(\"hover\"), matchMediaQuery(\"mobile\"));\n      if ( !matchMediaQuery(\"hover\") || matchMediaQuery(\"mobile\") ) {\n        if (this.#hoverHandle) this.#hoverHandle();\n        if (this.#hoverHandle2) this.#hoverHandle2();\n        return;\n      }\n      this.#hoverHandle = hover(this, () => {\n        this.toggle()\n        return () => this.toggle(false)\n      })\n      this.#hoverHandle2 = hover(butonHover, () => {\n        this.#hover()\n        return () => this.#hover(false)\n      })\n    });\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n    if (this.#hoverHandle) this.#hoverHandle();\n    if (this.#hoverHandle2) this.#hoverHandle2();\n    if (this.#resize) this.#resize();\n    //this.hoverHandle?.destroy();\n    //this.butonHoverHandle?.destroy();\n  }\n  toggle(show = true) {\n    const popover = $4(`#${this.getAttribute('prefix').replace('point-','popover-')}`);\n    if (show) {\n      if (!popover.btnOpening) popover.btnOpening = $4(`#${this.getAttribute('prefix')}`);\n      popover.parentElement?.open();\n    } else {\n      popover.parentElement?.close();\n    }\n  }\n  #hover(show = true) {\n    this.toggle(show);\n    $$4('.hdt-bundle-product', this.closest('.hdt-bundle-products')).forEach((bundle)=> {\n      bundle.classList.toggle('hdt-bundle-product--selected', show && bundle == this);\n      bundle.classList.toggle('hdt-bundle-product--fade', show && bundle != this);\n    });\n  }\n};\nupdate_product_bundle_fn = function(event) {\n  const currentOpt = $4(`option[value=\"${event.target.value}\"]`, event.target);\n let { src, cpprice, price, qty } = currentOpt.dataset;\n  cpprice = Number(cpprice || price);\n  price = Number(price);\n  const imgEl = $4('[update-img]', this);\n  if (imgEl) imgEl.src = src || event.target.dataset.src; // Update image\n  $4('[update-qty]', this).value = qty; // Update qty\n  // Update price\n  $4('hdt-compare-at-price', this).toggleAttribute('hidden', cpprice <= price);\n  $4('hdt-compare-at-price .hdt-money', this).outerHTML = `<span class=\"hdt-money\">${currency.formatMoney(cpprice)}</span>`;\n  $4('hdt-price .hdt-money', this).outerHTML = `<span class=\"hdt-money\">${currency.formatMoney(price)}</span>`;\n\n  // Trigger event\n  let prev_cpprice = this.prevOpt.dataset.cpprice,\n  prev_price = this.prevOpt.dataset.price;\n  prev_cpprice = Number(prev_cpprice || prev_price);\n  prev_price = Number(prev_price);\n  let gapCpprice = Math.max(prev_cpprice, cpprice) - Math.min(prev_cpprice, cpprice);\n  let gapPrice = Math.max(prev_price, price) - Math.min(prev_price, price);\n  if (price < prev_price) {\n    gapPrice = gapPrice * -1;\n  }\n  if (cpprice < prev_cpprice) {\n    gapCpprice = gapCpprice * -1;\n  }\n  if (gapCpprice != 0 || gapPrice != 0) {\n    this.closest('product-form-bundle')?.dispatchEvent(new CustomEvent(\"bundle:update-price\", {\n      detail: {\n        action: gapPrice > 0 ? 'plus' : 'minus',\n        gapCpprice,\n        gapPrice\n      }\n    }));\n  }\n\n  // Update the previous value to the current value\n  this.prevOpt = currentOpt;\n\n\n  this.closest('form')?.dispatchEvent(new CustomEvent(\"variant-bundle-change\", {\n    bubbles: false,\n    detail: { variantId: event.target.value }\n  }));\n};\n// hover_product_bundle_fn = function(event) {\n//   if (event.type === \"mouseleave\") {\n//     clearTimeout(getterGet(_hover_bundle_timer, this));\n//     this.toggle(false);\n//   } else if (event.type === \"mouseenter\") {\n//     getterAdd(_hover_bundle_timer, this, setTimeout(() => this.toggle(), 125), true);\n//   }\n// };\n// hover_btn_bundle_fn = function(event) {\n//   if (event.type === \"mouseleave\") {\n//     clearTimeout(getterGet(_hover_bundle_timer2, this));\n//     this.hover(false);\n//   } else if (event.type === \"mouseenter\") {\n//     getterAdd(_hover_bundle_timer2, this, setTimeout(() => this.hover(), 125), true);\n//   }\n// };\n\nvar _onOptionClicked = new WeakSet(), onOptionClicked_fn,\n_onKeyDown = new WeakSet(), onKeyDown_fn;\nclass Richlist extends HTMLElement {\n  #controller;\n  // Flag to control whether attributeChangedCallback logic should be skipped\n  #isSilentUpdate = false;\n  constructor() {\n    super();\n    getterAdd(_onOptionClicked, this);\n    getterAdd(_onKeyDown, this);\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    this.addEventListener(\"keydown\", getterRunFn(_onKeyDown, this, onKeyDown_fn), { signal });\n    $$4('[role=\"option\"]',this).forEach((option) => {\n      option.addEventListener(\"click\", getterRunFn(_onOptionClicked, this, onOptionClicked_fn).bind(this), { signal });\n    });\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n  static get observedAttributes() {\n    return [\"selected\"];\n  }\n  /**\n   * @param {string} value\n   */\n  set selected(value) {\n    this.setAttribute(\"selected\", value);\n  }\n  /**\n   * Custom method to update selected attribute with an option to skip the callback logic\n   * @param {element} valueEl\n   * @param {element} fieldset\n   * @param {boolean} silent - If true, skips the execution inside attributeChangedCallback\n   */\n  setSelected(valueEl, fieldset, silent = true) {\n    //if (!input) return;\n    this.#isSilentUpdate = silent;\n    \n    const { value } = valueEl,\n    input = $4('input[trigger-value]', fieldset);\n    input.dataset.valueId = valueEl.dataset.valueId;\n    input.value = value;\n    $4('button[aria-owns]', fieldset).textContent = value;\n    $4(`button[is-value][aria-selected=\"true\"]`, this)?.setAttribute('aria-selected', false);\n    valueEl.setAttribute('aria-selected', true);\n    this.selected = value;\n\n    this.#isSilentUpdate = false; // Reset the flag immediately after the attribute is updated\n    return input;\n  }\n  attributeChangedCallback(name, oldValue, newValue) {\n    // Immediate return if the update is marked as silent\n    if (this.#isSilentUpdate) return;\n    if (name === \"selected\" && oldValue !== null && newValue !== oldValue) {\n      $$4('[role=\"option\"]',this).forEach((option) => {\n        if (option.value === newValue) {\n          option.setAttribute(\"aria-selected\", \"true\");\n          if (!this.hasAttribute('off-change-text')) {\n            $$4(`[aria-owns=\"${this.id}\"]`).forEach((btnOwn) => {\n              const btnText = $4('[change-text]', btnOwn),\n              _btnText = btnText || btnOwn;\n              _btnText.textContent = $4('[get-text]', option)?.innerText || option.getAttribute(\"title\") || option.innerText || option.value;\n            });\n          }\n          option.dispatchEvent(new CustomEvent(\"richlist:change\", {\n            bubbles: true,\n            detail: { value: option.value }\n          }));\n        } else {\n          option.setAttribute(\"aria-selected\", \"false\");\n        }\n      });\n    }\n  }\n\n}\nonOptionClicked_fn = function(event) {\n  //console.log(event)\n  const value = event.currentTarget.value;\n  this.selected = value;\n  event.currentTarget.dispatchEvent(new CustomEvent(\"richlist:select\", {\n    bubbles: true,\n    detail: { value }\n  }));\n};\nonKeyDown_fn = function(event) {\n  if (event.key === \"ArrowUp\") {\n    event.target.previousElementSibling?.focus();\n    event.preventDefault();\n  } else if (event.key === \"ArrowDown\") {\n    event.target.nextElementSibling?.focus();\n    event.preventDefault();\n  }\n};\ncustomElements.define(\"hdt-richlist\", Richlist);\n\n// https://web.dev/articles/building/a-loading-bar-component?hl=vi#overview\nvar _loading_bar_start = new WeakSet(), loading_bar_start_fn,\n _loading_bar_end = new WeakSet(), loading_bar_end_fn;\nclass LoadingBar extends HTMLElement {\n  constructor() {\n    super();\n    styleEffect(this, {scaleX: motionValue(0) });\n    getterAdd(_loading_bar_start, this);\n    getterAdd(_loading_bar_end, this);\n    document.addEventListener(loadingStart, getterRunFn(_loading_bar_start, this, loading_bar_start_fn).bind(this));\n    document.addEventListener(loadingEnd, getterRunFn(_loading_bar_end, this, loading_bar_end_fn).bind(this));\n  }\n};\nloading_bar_start_fn = function() {\n  this.showPopover();\n  animate([\n    [this, { opacity: [0, 1] }, { duration: 0.25, ease: \"easeIn\" }],\n    [this, { scaleX: [0, 0.9] }, { duration: 0.6, at: 0.2, ease: \"linear\" }]\n  ]);\n};\nloading_bar_end_fn = function() {\n  animate([\n    [this, { scaleX: 1 }, { duration: 0.25, ease: \"linear\" }],\n    [this, { opacity: 0 }, { duration: 0.25, ease: \"easeIn\" }]\n  ]).then(() => {\n    this.hidePopover();\n  });\n};\nclass RevealItems extends HTMLElement {\n  constructor() {\n    super();\n  }\n  connectedCallback() {\n    if (matchMediaQuery(\"motion\") && this.enabledReveal && $$4(this.selector, this).length > 0) {\n    inView(this, this.reveal.bind(this));\n    }\n  }\n  //disconnectedCallback() { }\n  get selector() {\n    const _selector = this.getAttribute('selector') || '.hdt-card-product';\n    return (this.prependEl || '') + _selector + (this.appendEl || '').replaceAll(/nathan/g, _selector);\n  }\n  get enabledReveal() {\n    return this.getAttribute('reveal-on-scroll') === 'true';\n  }\n  reveal() {\n    animate(\n      $$4(this.selector, this),\n      {\n        opacity: [0, 1],\n        transform: [\"translateY(30px)\", \"translateY(0)\"],\n      },\n      {\n        duration: 0.25,\n        ease: [0.25, 0.1, 0.25, 1.0],\n        delay: stagger(0.05, { startDelay: 0.3, ease: [0.25, 0.1, 0.25, 1.0] })\n      }\n  );\n    // .then(() => {\n    //   this.appendEl = '';\n    // });\n   // this.setEl = null;\n    // .then(() => {\n    //   this.setEl = null;\n    // });\n  }\n}\nclass Return extends HTMLElement {\n  #controller;\n  #input\n  #oldSeach;\n  connectedCallback() {\n    this.#input = $4('[name=\"return_to\"]', this);\n    if (!this.#input) return;\n    this.#oldSeach = this.#input.value.split('?')[1];\n    this.udateURL();\n    this.#controller = new AbortController();\n    document?.addEventListener('hdt:updateUrl', this.udateURL, { signal: this.#controller.signal });\n  }\n  disconnectedCallback() {\n    this.#controller?.abort();\n  }\n  udateURL = () => {\n    // console.log('udateURL', this)\n    // Update return url\n    const params = new URLSearchParams(location.search);\n    [...params.keys()].forEach(key => {\n      if ( key.startsWith('contact[') || key === 'contact_posted' || key === 'form_type' ) params.delete(key);\n    });\n    const search = params.toString();\n    this.#input.value = `${location.pathname}?${search ? `${search}&` : ''}${this.#oldSeach}`;\n  }\n}\nclass backInStock extends HTMLElement {\n  #controller;\n  connectedCallback() {\n    if (!this.hasAttribute('toogle-hidden')) return;\n    this.#controller = new AbortController();\n    document.forms[this.getAttribute(\"form\")]?.addEventListener(\"product:updateNow\", (event) => {\n      this.hidden = event.detail.variant.available;\n    }, { signal: this.#controller.signal });\n  }\n  disconnectedCallback() {\n    this.#controller?.abort();\n  }\n  _hidden(isSoldOut) {\n    if (this.hasAttribute('check-hidden-first')) this.hidden = !isSoldOut;\n  }\n}\n\ncustomElements.define(\"hdt-return\", Return);\ncustomElements.define(\"hdt-back-in-stock\", backInStock);\ncustomElements.define(\"hdt-buy-buttons\", buyButtons);\ncustomElements.define('hdt-quantity-wrapp', QuantityWrapp);\ncustomElements.define('hdt-variant-picker', VariantPicker);\ncustomElements.define('hdt-recipient-form', RecipientForm);\ncustomElements.define(\"hdt-progress-bar\", ProgressBar);\ncustomElements.define(\"hdt-max-height\", MaxHeight);\ncustomElements.define(\"product-form\", ProductForm);\ncustomElements.define(\"product-form-bundle\", ProductFormBundle);\ncustomElements.define(\"hdt-loading-bar\", LoadingBar);\ncustomElements.define('hdt-bundle-product', ProductBundle);\ncustomElements.define(\"hdt-reval-items\", RevealItems);\n\nvar _update_product_info = new WeakSet(), update_product_info_fn;\nclass ProductUpdateInfo extends HTMLElement {\n  #controller;\n    constructor() {\n      super();\n      getterAdd(_update_product_info, this);\n    }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    this.form?.addEventListener('product:updateInfo', getterRunFn(_update_product_info, this, update_product_info_fn).bind(this), { signal: this.#controller.signal });\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n  get form() {\n    return document.forms[this.getAttribute(\"form\")];\n  }\n};\nupdate_product_info_fn = function(event) {\n  const { sectionId, html, targetId } = event.detail,\n  domFragment = $4(`#shopify-section-${sectionId}`, document.createRange().createContextualFragment(html)),\n        scriptData  = $4('script[data-selected-variant]', domFragment),\n        variant     = JSON.parse(scriptData?.textContent || \"{}\"),\n        types       = [\"price\", \"quantity-selector\", \"badges\", \"sku\", \"inventory\", \"payment-terms\", \"pickup-availability\", \"liquid\", \"aura-inventory-by-location\", \"back-instock\"];\n  //if (variant) variant.valuesID = JSON.parse(scriptData?.dataset?.selectedVariant || \"[]\");\n  types.forEach((type) => {\n    const strBlock = `.hdt-product-info__item[data-type=\"${type}\"]`,\n    domBlocksType = $$4(strBlock, domFragment);\n    $$4(strBlock, this).forEach((block, index) => {\n      const blockReplace = domBlocksType[index];\n      if (!blockReplace) return;\n      // if (type === \"variant-picker\" || type === \"buy-buttons\") {\n      //   if (type === \"buy-buttons\") $4('[name=\"id\"]', block).value = variant.id;\n      //   $4(`hdt-${type}`, block).replaceWith($4(`hdt-${type}`, blockReplace));\n      //   if (type === \"buy-buttons\") {\n      //     Shopify?.PaymentButton?.init();\n      //   }\n      //   // else {\n      //   //   $4('.hdt-modal__size-chart', block)?.parentElement?.replaceWith($4('.hdt-modal__size-chart', blockReplace).parentElement);\n      //   // }\n      // } else\n      if (type === \"quantity-selector\") {\n        [\"quantityRules\", \"volumePricing\", \"pricePerItem\"].forEach((type) => $4(`[ref=\"${type}\"]`, block)?.replaceWith($4(`[ref=\"${type}\"]`, blockReplace)));\n\n        // 2. Update qty rules for input number\n        const quantityNumber = $4('[ref=\"quantityNumber\"]', block);\n        let currentValue;\n        if (quantityNumber.type == 'number') {\n          // value, step, min, max\n          quantityNumber.step = $4('[ref=\"quantityNumber\"]', blockReplace).step;\n          quantityNumber.min = $4('[ref=\"quantityNumber\"]', blockReplace).min;\n          const max = $4(`[ref=\"quantityNumber\"]`, blockReplace).max;\n          if (max) {\n            quantityNumber.setAttribute('max', max);\n          } else {\n            quantityNumber.removeAttribute('max');\n          }\n          currentValue = validateValue(quantityNumber.value, quantityNumber.min, quantityNumber.max, quantityNumber.step);\n        } else {\n          currentValue = $4('[ref=\"quantityNumber\"]', blockReplace).value;\n        }\n        quantityNumber.value = currentValue;\n\n        // 3. Update qty for label\n        const quantityWrapp = $4('hdt-quantity-wrapp', block);\n        if (quantityWrapp) {\n          quantityWrapp.dataset.variantId = variant.id;\n          quantityWrapp.cartUpdateQty(themeHDN.cartItems, $4('.hdt-quantity-cart', blockReplace).textContent);\n        }\n\n      //   block.replaceWith(blockReplace);\n      //   $4(\"hdt-quantity-wrapp\", blockReplace).qty = $4(\"hdt-quantity-wrapp\", block).qty;\n      } else if (type === \"back-instock\") {\n        const textContent = blockReplace.textContent;\n        if (textContent.length > 0 ) $4('[name=\"contact[product]\"]', block).textContent = textContent;\n      } else {\n        block.replaceWith(blockReplace)\n      }\n    });\n  });\n  // Focus input radio\n  //$4(`#${targetId}`)?.focus();\n  this.form?.dispatchEvent(new CustomEvent(\"variant-change\", {\n    bubbles: true,\n    detail: {\n      sectionId,\n      html,\n      variant\n    }\n  }));\n\n  // Auto-select valid option if current becomes unavailable (Prevents freezing)\n  const picker = document.querySelector('hdt-variant-picker');\n  if (picker) {\n    let triggerChange = false;\n    picker.querySelectorAll('fieldset.hdt-product-form__input').forEach(fieldset => {\n      const checkedInput = fieldset.querySelector('input[type=\"radio\"]:checked');\n      if (checkedInput && checkedInput.classList.contains('is-unavailable')) {\n        const firstValid = fieldset.querySelector('input[type=\"radio\"]:not(.is-unavailable)');\n        if (firstValid) {\n          firstValid.checked = true;\n          triggerChange = firstValid;\n        }\n      }\n    });\n    if (triggerChange) {\n      triggerChange.dispatchEvent(new Event('change', { bubbles: true }));\n    }\n  }\n};\ncustomElements.define('hdt-product-observe', ProductUpdateInfo);\n\n// https://shopify.dev/docs/storefronts/themes/delivery-fulfillment/pickup-availability\nclass Pickup extends HTMLElement {\n  #stop;\n  connectedCallback() {\n    this.#stop = inView(this, ()=> {\n      fetch(`${Shopify.routes.root}variants/${this.dataset.url}`)\n      .then(response => response.text())\n      .then(text => {\n        const pickupAvailabilityHTML = new DOMParser().parseFromString(text, 'text/html').querySelector(`#${this.id}`);\n        this.replaceWith(pickupAvailabilityHTML);\n      })\n      .catch(e => {\n        console.error(e);\n      });\n    }, { margin: '400px 0px' })\n  }\n  disconnectedCallback() {\n    this.#stop?.();\n  }\n}\ncustomElements.define('hdt-pickup', Pickup);\n\n/**\n* 9. Product card\n* -----------------------------------------------------------------------------\n*/\n\nvar cacheUrlVariant = {};\nvar UrlWithVariant = class {\n  static get(url, id) {\n    if (!url || !id)  return;\n    if (cacheUrlVariant[id]) {\n      return cacheUrlVariant[id];\n    }\n    url = new URL(url);\n    url.searchParams.set(\"variant\", id);\n    return cacheUrlVariant[id] = url.toString();\n  }\n};\nvar _color_action_all = new WeakSet(), color_action_all_fn,\n_color_auto_limit = new WeakSet(), color_auto_limit_fn,\n_color_changed_data = new WeakSet(), color_changed_data_fn,\n_color_on_hovered = new WeakSet(), color_on_hovered_fn,\n_create_img = new WeakSet(), create_img_fn,\n_color_slider = new WeakMap(),\n_color_links = new WeakMap(),\n_color_media_main = new WeakMap();\nclass Swatches extends HTMLElement {\n  #controller\n  constructor() {\n    super();\n    getterAdd(_color_action_all, this);\n    getterAdd(_color_auto_limit, this);\n    getterAdd(_create_img, this);\n    getterAdd(_color_changed_data, this);\n    getterAdd(_color_on_hovered, this);\n    getterAdd(_color_slider, this, this.closest('.hdt-slider'));\n    const product = this.closest('hdt-card-product');\n    getterAdd(_color_links, this, $$4('[data-pr-url]', product));\n    getterAdd(_color_media_main, this, $4('.hdt-card-product__media--main', product));\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n\n    if (this.hasAttribute('auto-limit')) {\n      if (window.ResizeObserver) {\n        let resizeObserver = new ResizeObserver(throttle(getterRunFn(_color_auto_limit, this, color_auto_limit_fn).bind(this)));\n        resizeObserver.observe(this);\n        this.addEventListener('unobserve', ()=> { resizeObserver.unobserve(this); resizeObserver = null });\n      } else {\n        getterRunFn(_color_auto_limit, this, color_auto_limit_fn).call(this);\n      }\n    }\n    if (this.hasAttribute('action-all')) {\n      $4('.is--color-link', this)?.addEventListener(\"click\", getterRunFn(_color_action_all, this, color_action_all_fn).bind(this), { signal });\n    }\n    if ($$4('[type=\"radio\"]:not([disabled])', this).length == 0 ) return;\n\n    // change/preload\n    $$4('[type=\"radio\"]', this).forEach( (radio) => {\n      radio.addEventListener(\"change\", getterRunFn(_color_changed_data, this, color_changed_data_fn).bind(this), { signal });\n    });\n    $$4('[type=\"radio\"][data-vimg] + label', this).forEach( (label) => {\n      label.addEventListener(\"pointerover\", getterRunFn(_color_on_hovered, this, color_on_hovered_fn).bind(this), { signal });\n    });\n\n    // Hover trigger event change\n    if (!matchMediaQuery(\"mobile\") && this.getAttribute('event') == 'hover') {\n      let timeOut;\n      $$4('[type=\"radio\"] + label', this).forEach( (label) => {\n        hover(label, () => {\n          clearTimeout(timeOut);\n          timeOut = setTimeout(() => {\n            const radio = label.previousElementSibling;\n            radio.checked = true;\n            radio.dispatchEvent(new CustomEvent(\"change\", { bubbles: false }))\n          }, 100);\n        })\n      });\n    }\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n  set mediaMain(value) {\n    getterAdd(_color_media_main, this, value, true);\n  }\n  get mediaMain() {\n    return getterGet(_color_media_main, this);\n  }\n};\ncolor_auto_limit_fn = function() {\n  if (this.isReflow) return;\n  const Linka =  $4('.is--color-link a', this);\n  $4('.is--color-limit', this)?.classList.remove('is--color-limit');\n  const widthLink = $4('.is--color-link', this)?.clientWidth || 0,\n  notNeedLimit = (this.scrollWidth - widthLink ) <= this.clientWidth;\n  this.setAttribute('no-limit', notNeedLimit.toString());\n\n  if (notNeedLimit) return;\n\n  this.isReflow = true;\n  const widthColor = $4('.hdt-color-list__item', this).clientWidth,\n  colorsCanShow = Math.floor((this.clientWidth  - widthLink) / widthColor);\n\n  $$4('.hdt-color-list__item', this)[colorsCanShow]?.classList.add('is--color-limit');\n  if (Linka) Linka.textContent = `+${this.firstElementChild.childElementCount - 1 - colorsCanShow}`;\n\n  setTimeout( ()=> {\n    this.isReflow = false;\n  }, 60)\n\n};\ncolor_action_all_fn = async function(e) {\n  e.preventDefault();\n  this.dispatchEvent(new CustomEvent(\"unobserve\", { cancelable: true, composed: true }));\n  this.firstElementChild.lastElementChild.setAttribute('hidden', '');\n  const $colors = $$4('.is--color-limit, .is--color-limit ~ .hdt-color-list__item:not(.is--color-link)', this),\n  focusEl = $4('.is--color-limit', this).nextElementSibling;\n  this.style.overflow = 'hidden';\n  this.style.height = this.clientHeight + 'px';\n  this.isReflow = true;\n  focusEl.previousElementSibling.classList.remove('is--color-limit');\n  this.removeAttribute('auto-limit');\n\n  animate($colors, { opacity: 0 }, { duration: 0 })\n  await animate(this, { height: [`${this.clientHeight}px`, `${this.scrollHeight}px`] }, { duration: getterGet(_color_slider, this) && getterGet(_color_slider, this).isActive ? 0 : 0.25 });\n\n  this.style.height = null;\n  this.style.overflow = null;\n  this.isReflow = false;\n  // Reint slider\n  getterGet(_color_slider, this)?.reInit();\n  animate(\n    $colors,\n    { opacity: [0, 1], transform: [\"scale(.5) translateY(10px)\", \"scale(1) translateY(0)\"] },\n    { duration: 0.35, at: \"-0.1\", delay: stagger($colors.length > 25 ? 0 : 0.01, { ease: \"easeOut\" }), ease: [0.25, 0.1, 0.25, 1.0] }\n  ).then(() => {\n    //getterGet(_color_slider, this)?.reInit();\n  });\n\n  // Focus\n  $4('input', focusEl)?.focus();\n\n};\n_create_img = new WeakSet();\ncreate_img_fn = function(vimg) {\n  return createImg({\n    src: vimg,\n    width: this.mediaMain.getAttribute('width'),\n    height: this.mediaMain.getAttribute('height'),\n    alt: this.mediaMain.alt,\n    onload: true,\n    attrs: {\n      class: this.mediaMain.className,\n      sizes: this.mediaMain.sizes,\n      'data-widths': this.mediaMain.getAttribute('data-widths') || '[]'\n    }\n  })\n};\ncolor_changed_data_fn = function(event) {\n  const {vid,vimg,url} = event.target.dataset;\n  // Update variant url\n  if (getterGet(_color_links, this).length > 0) {\n    const newUrl = url || UrlWithVariant.get(getterGet(_color_links, this)[0].href, vid);\n    getterGet(_color_links, this).forEach((link) => { link.href = newUrl });\n  }\n\n  // Update image\n  if (vimg && this.mediaMain && vimg !== this.mediaMain.getAttribute('src')) {\n    const newImg = getterRunFn(_create_img, this, create_img_fn).call(this, vimg);\n    this.mediaMain.parentElement.removeAttribute('loaded');\n    this.mediaMain.parentElement.setAttribute('loading', '');\n    this.mediaMain.replaceWith(newImg);\n    this.mediaMain = newImg;\n  }\n\n};\ncolor_on_hovered_fn = function(event) {\n  const radio = event.target.previousElementSibling;\n  if (!radio ) return;\n  const {vimg} = radio.dataset;\n  // Preload image\n  if ( vimg !== this.mediaMain.getAttribute('src')) getterRunFn(_create_img, this, create_img_fn).call(this, vimg);\n};\ncustomElements.define('wrapp-hdt-swatches', Swatches);\n\nvar _btns_tab_collection = new WeakMap(),\n_products_tab_collection = new WeakMap(),\n_is_ink_bar_tab_collection = new WeakMap(),\n_link_tab_collection = new WeakMap(),\n_resize_tab_collection = new WeakMap(),\n_set_active_tab = new WeakSet(), set_active_tab_fn;\nclass tabCollection extends HTMLElement {\n  #controller;\n  constructor() {\n    super();\n    this.index = 0;\n    getterAdd(_btns_tab_collection, this, $$4(\"button\", this));\n    getterAdd(_products_tab_collection, this, $$4(\".hdt-collections__product\", this.closest('.hdt-section')));\n    getterAdd(_is_ink_bar_tab_collection, this, this.hasAttribute(\"ink-bar\"));\n    getterAdd(_link_tab_collection, this, $4(`#${this.getAttribute('link-id')}`, this.closest('.hdt-section')));\n    getterAdd(_set_active_tab, this);\n\n    // Set the initial position of the ink bar\n    if (getterGet(_is_ink_bar_tab_collection, this)) {\n      getterRunFn(_set_active_tab, this, set_active_tab_fn).call(this, null);\n      if (window.ResizeObserver) {\n        getterAdd(_resize_tab_collection, this, new ResizeObserver(throttle(getterRunFn(_set_active_tab, this, set_active_tab_fn).bind(this, null))) );\n        getterGet(_resize_tab_collection, this).observe(this);\n      }\n    }\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    this.btns.forEach((btn, index) => {\n      btn.addEventListener(\"click\", getterRunFn(_set_active_tab, this, set_active_tab_fn).bind(this, btn, index), { signal });\n    });\n    if (Shopify.designMode) {\n      //this.addEventListener(admEvts.seLoad, () => { getterRunFn(_set_active_tab, this, set_active_tab_fn).call(this, null) }, { signal });\n      this.addEventListener(admEvts.select, (event) => { event?.target?.click(); }, { signal });\n    }\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n  openDetails() {}\n  get selectedReturn() {\n    return true\n  }\n  get tabs() {\n    return getterGet(_products_tab_collection, this);\n  }\n  get btns() {\n    return getterGet(_btns_tab_collection, this);\n  }\n};\nset_active_tab_fn = function(btn, index) {\n  if (btn && btn.getAttribute(\"aria-selected\") == 'true' && this.selectedReturn) return;\n  if (!btn) {\n    btn = this.btns[this.index];\n    index = this.index\n  }\n  this.openDetails(btn, index);\n  this.btns.forEach((btn) => {\n    btn.setAttribute(\"aria-selected\", btn === this.btns[index]);\n  });\n  this.tabs.forEach((item) => {\n    item.setAttribute(\"hidden\", \"\");\n    item.classList.remove(\"is-selected\");\n  });\n  let itemActive = this.tabs[index];\n  if (this.index == index) {\n    itemActive.removeAttribute(\"hidden\");\n    itemActive.classList.add(\"is-selected\");\n    //try { $4('.hdt-slider', itemActive)?.reveal(); } catch (error) {}\n  } else {\n    let itemPrevActive = this.tabs[this.index];\n    itemPrevActive.removeAttribute(\"hidden\");\n    animate(itemPrevActive, { opacity: [1, 0], y: [0, 30] }, { duration: 0.35, ease: \"easeIn\" }).then(() => {\n      itemPrevActive.setAttribute(\"hidden\", \"\");\n      itemActive.removeAttribute(\"hidden\");\n      itemActive.classList.add(\"is-selected\");\n      //console.log(itemActive, itemActive.clientHeight, itemActive.scrollHeight)\n      //try { $4('.hdt-slider', itemActive)?.reveal(); } catch (error) {}\n      animate(itemActive, { opacity: [0, 1], y: [30, 0] }, { duration: 0.35, ease: \"easeOut\" });\n    });\n  }\n  this.index = index;\n\n  if (getterGet(_link_tab_collection, this)) getterGet(_link_tab_collection, this).href = btn.dataset.url;\n\n  if (!getterGet(_is_ink_bar_tab_collection, this)) return;\n  this.style.setProperty(\"--ink-bar-w\", `${btn.offsetWidth}px`);\n  this.style.setProperty(\"--ink-bar-x\", `${btn.offsetLeft}px`);\n  this.style.setProperty(\"--ink-bar-y\", `${btn.offsetTop + btn.offsetHeight - 1}px`);\n};\nvar _summary_tab_collection = new WeakMap();\nclass detailsCollection extends tabCollection {\n  #controller;\n  constructor() {\n    super();\n    getterAdd(_summary_tab_collection, this, $4('summary', this));\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    getterGet(_summary_tab_collection, this).addEventListener(\"click\", (event) => {\n      event.preventDefault();\n      if (!this.firstElementChild.hasAttribute(\"open\")) {\n        this.aniOpen();\n      } else {\n        this.aniClose();\n      }\n    }, {signal: this.#controller.signal});\n    super.connectedCallback();\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n  get selectedReturn() {\n    return false\n  }\n  get summaryFirstChild() {\n    return getterGet(_summary_tab_collection, this).firstElementChild;\n  }\n  openDetails(btn) {\n    animate(this.summaryFirstChild, { opacity: [1, 0], transform: [\"translateY(0%)\", `translateY(-80%)`] }, { duration: 0.4, ease: \"easeIn\" }).then(() => {\n      this.summaryFirstChild.textContent = btn.textContent;\n      animate(this.summaryFirstChild, { opacity: [0, 1], transform: [`translateY(15px)`, \"translateY(0px)\"] }, { duration: 0.4, ease: \"easeOut\" });\n    });\n    this.aniClose();\n  }\n  aniOpen() {\n    this.firstElementChild.setAttribute(\"open\", \"\");\n    return  animate([\n      [$4('.hdt-options-tab', this), { opacity: [0, 1], transform: [\"translateY(10px)\", `translateY(0)`] }, { duration: 0.4, ease: \"easeOut\" }],\n      [$$4('.hdt-options-tab button', this), { opacity: [0, 1], transform: [\"translateY(8px)\", \"translateY(0)\"] }, { duration: 0.15, ease: \"easeOut\", at: \"-0.15\", delay: stagger(0.2) }]\n    ]);\n  }\n  aniClose() {\n    return animate([\n      [$$4('.hdt-options-tab button'), { opacity: [1, 0], transform: [\"translateY(0)\", \"translateY(8px)\"] }, { duration: 0.15, ease: \"easeIn\" }],\n      [$4('.hdt-options-tab', this), { opacity: [1, 0], transform: [\"translateY(0)\", `translateY(10px)`] }, { duration: 0.35, at: \"-0.1\", ease: \"easeIn\" }],\n    ]).then(() => {\n      this.firstElementChild.open = false;\n      if (!Shopify.designMode) getterGet(_summary_tab_collection, this).focus();\n    });\n  }\n\n};\nvar _section_related = new WeakMap();\nclass ProductRecommendations extends HTMLElement {\n  constructor() {\n    super();\n    getterAdd(_section_related, this, this.closest('.hdt-section'));\n  }\n  connectedCallback() {\n    if (!this.url) return this.nullOrEmpty();\n    // this.observer?.unobserve(this);\n    // console.log(this)\n    // this.observer = new IntersectionObserver((entries, observer) => {\n    //   console.log('loadProducts: ')\n    //   if (!entries[0].isIntersecting) return;\n    //   observer.unobserve(this);\n    //   console.log('loadProducts 11: ')\n    //   this.loadProducts();\n    // },{ rootMargin: '0px 0px 400px 0px' });\n    // this.observer.observe(this);\n    inView(this, ()=> {\n      this.loadProducts();\n    }, { margin: '0px 0px 400px 0px' })\n  }\n  get type() {\n    return 'related'\n  }\n  get url() {\n    return this.dataset.url;\n  }\n  get section() {\n    return getterGet(_section_related, this);\n  }\n  nullOrEmpty() {\n    if (this.hasAttribute('inner-group')) {\n      this.parentElement?.previousElementSibling?.remove();\n      this.parentElement?.remove();\n      this.section.setAttribute(`${this.type}-empty-inted`, '');\n    } else {\n      this.section.hidden = true;\n    }\n  }\n  loadProducts() {\n    fetch(`${this.url}`)\n    .then((response) => response.text())\n    .then((text) => {\n      const html = new DOMParser().parseFromString(text, \"text/html\"),\n      inner = $4('.hdt-section', html).innerHTML.trim().replace(/<!--[\\s\\S]*?-->/g, ''); // clear comment when on admin <!--shopify:rendered_by_section_api-->\n\n      if (inner.includes('no_000') || inner.length == 0) {\n        this.nullOrEmpty();\n      } else {\n        this.section.setAttribute(`${this.type}-inted`, '');\n        if (this.hasAttribute('inner-group')) $4(`button[aria-controls=\"group-product-${this.type}--list\"]`, this.section)?.removeAttribute(\"tabindex\");\n        this.replaceWith($4('.hdt-section', html).firstElementChild)\n        document.dispatchEvent(new CustomEvent(\"currencyUpdate\"));\n      }\n    }).catch((e) => {console.error(e); });\n  }\n};\nclass ProductRecently extends ProductRecommendations {\n  constructor() {\n    super();\n  }\n  get type() {\n    return 'recently'\n  }\n  get #storageKey() {\n    return 'theme4:recently:id';\n  }\n  get url() {\n    if (this._url) return this._url;\n    this._url = null;\n    let productsId = localStorage.getItem(this.#storageKey);\n    let productId = this.dataset.id;\n    //console.log(productsId)\n    if (productsId !== null) {\n      if (productsId.split(',').some(v => v === '')) {\n        productsId = productsId.replace(/,+/g, ',').replace(/^,|,$/g, '');\n        localStorage.setItem(this.#storageKey, productsId);\n      }\n      productsId = productsId.split(',');\n      this._url = this.dataset.url.replace('q=', `q=id:${productsId.join(\"%20OR%20id:\")}`);\n    }\n    let arrProducts = productsId || new Array;\n    // console.log(arrProducts, productsId)\n    if (!arrProducts.includes(productId + '')) {\n      if (arrProducts.length >= 10) {\n        arrProducts.pop();\n      }\n      arrProducts.unshift(productId);\n      localStorage.setItem(this.#storageKey, arrProducts.toString());\n    }\n    return this._url;\n  }\n};\n\ncustomElements.define('hdt-tab-collection', tabCollection);\ncustomElements.define('wrapp-hdt-details', detailsCollection);\ncustomElements.define('product-recommendations', ProductRecommendations);\ncustomElements.define('hdt-product-recently', ProductRecently);\n\n\n/**\n* 10. Before after\n* -----------------------------------------------------------------------------\n*/\nvar _range_bf = new WeakMap();\nclass BeforeAfter extends HTMLElement {\n  #controller;\n  #percent;\n  //#percent = springValue(0, { bounce: 0.5 });\n  constructor() {\n    super();\n    getterAdd(_range_bf, this, $4('.hdt-bf-range',this));\n    if (matchMediaQuery(\"motion\") && this.hasAttribute('reveal-on-scroll') ) {\n      this.#percent = springValue('0%');\n      inView(this, ()=> {\n        delay(() => {\n        this.#percent.set(getterGet(_range_bf, this).value+'%')\n        }, 0.35)\n      }, { margin: \"-200px 0px\" });\n    } else {\n      this.#percent = springValue(getterGet(_range_bf, this).value+'%');\n    }\n  }\n\n  connectedCallback() {\n    this.#controller = new AbortController();\n    styleEffect(this, { \"--percent-val\": this.#percent })\n    getterGet(_range_bf, this).addEventListener(\"input\", (e) => {\n      this.#percent.set(e.target.value+'%');\n    }, { signal: this.#controller.signal });\n  }\n};\ncustomElements.define('hdt-before-after', BeforeAfter);\n\n/**\n* 11. Dialog\n* -----------------------------------------------------------------------------\n*/\n/*\n * Declarative shadow DOM is only initialized on the initial render of the page.\n * If the component is mounted after the browser finishes the initial render,\n * the shadow root needs to be manually hydrated.\n */\nclass DeclarativeShadowElement extends HTMLElement {\n  connectedCallback() {\n    if (!this.shadowRoot) {\n      const template = $4(':scope > :where(template[shadowrootmode=\"open\"], template[lazy])', this);\n\n      if (!(template instanceof HTMLTemplateElement)) return;\n\n      const shadow = this.attachShadow({ mode: 'open' });\n      shadow.append(template.content.cloneNode(true));\n      template.remove();\n    }\n  }\n}\n\nconst dialogsOpen = [],\nmaxNested = 3;\nclass DialogComponent extends DeclarativeShadowElement {\n  #controller;\n  #scrollLock;\n  constructor() {\n    super();\n  }\n  connectedCallback() {\n    this.dialog = $4('dialog', this);\n    this.#scrollLock = this.dialog.hasAttribute('scroll-lock');\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    super.connectedCallback();\n\n    // Events\n    this.dialog.addEventListener('click', (e) => {\n      // const rect = this.dialog.getBoundingClientRect();\n      // const isClickOutside = (\n      //   e.clientX < rect.left || e.clientX > rect.right ||\n      //   e.clientY < rect.top || e.clientY > rect.bottom\n      // );\n\n      //console.log(isClickOutside, e, this.dialog, dialogsOpen, this.dialogId );\n      if ((!this.hasAttribute('lock-outside') && this.#isClickOutside(e)) && dialogsOpen[0] === this.dialogId) {\n        e.preventDefault();\n        e.stopPropagation();\n        this.close();\n      }\n    }, { signal });\n\n    // ESC key to close dialog\n    this.dialog.addEventListener('cancel', (e) => {\n      e.preventDefault(); // Prevents the default cancel behavior\n      //console.log(this)\n      this.close();\n    }, { signal });\n\n    // Handle focus\n    // this.dialog.addEventListener(dialogOpening, () => {\n    //   //this.dialog.classList.add('focus-none');\n    //   ($4('input[type=\"search\"]', this.dialog) || this.dialog).focus();\n    // }, { signal });\n\n    // initial open\n    if (this.hasAttribute('initial-open') || (!this.lockOpen && this.hasAttribute('initial-form-open') && location.href.indexOf(this.dataset.formId) > -1)) {\n      this.open();\n    }\n\n    if (Shopify.designMode && !this.hasAttribute('un-detect')) {\n      this.addEventListener(admEvts.select, (event) => this.open(!event.detail.load), { signal });\n      this.addEventListener(admEvts.deselect, () => this.close(true), { signal });\n      this._shopifySection = this._shopifySection || this.closest(\".shopify-section\");\n      if (this._shopifySection) {\n        if (this.hasAttribute(\"detect-adm-se-evt\")) {\n          this._shopifySection.addEventListener(admEvts.seSelect, (event) => this.open(event.detail.load), { signal });\n          this._shopifySection.addEventListener(admEvts.seDeselect, this.close.bind(this), { signal });\n        }\n        //this._shopifySection.addEventListener(admEvts.seUnload, () => this.remove(), { signal });\n      }\n    }\n  }\n  disconnectedCallback() {\n    if (this.dialog?.open) {\n      dialogsOpen.shift(this.dialogId);\n      if (this.#scrollLock && this._openedAsModal && dialogsOpen.length == 0) html.removeAttribute('scroll-lock');\n    }\n    this.dialog = null;\n    this.#controller.abort();\n  }\n\n  /**\n   * Gets the root node of the component, which is either its shadow root or the component itself.\n   *\n   * @returns {(ShadowRoot | Component<T>)[]} The root nodes.\n   */\n  // get roots() {\n  //   return this.shadowRoot ? [this, this.shadowRoot] : [this];\n  // }\n  get dialogId() {\n    return this.dialog.id;\n  }\n  get show() {\n    this._openedAsModal = true;\n    return this.dialog.showModal();\n  }\n  async open(jump = false) {\n    if (this.dialog.open) return;\n    // const focusable = $$4('input, button, [tabindex]', this.dialog);\n    // focusable.forEach(el => el.setAttribute('tabindex', '-1'));\n    // let scrollY = window.scrollY;\n    // document.body.style.position = 'fixed';\n    // document.body.style.top = `-${scrollY}px`;\n    // document.body.style.left = '0';\n    // document.body.style.right = '0';\n    // document.body.style.width = '100%';\n    this.show;\n    elFocus(this.dialog, false, true);\n    if (this.#scrollLock && this._openedAsModal && !html.hasAttribute('scroll-lock')) html.setAttribute('scroll-lock', '');\n    this.dialog.dispatchEvent(new CustomEvent(dialogOpening));\n    this.dialog.classList.add('dialog-opening');\n    dialogsOpen.unshift(this.dialogId);\n    // console.log('add: ', dialogsOpen)\n    const animation = this.animateDialogOpen();\n    if (jump) animation.complete();\n    await animation;\n    this.dialog.classList.remove('dialog-opening');\n    this.dialog.dispatchEvent(new CustomEvent(dialogOpen));\n    this.trapFocus();\n  }\n  get unTrapFocus() {\n    return this._unTrapFocus ??= this.hasAttribute('un-trapFocus');\n  }\n  trapFocus() {\n    if (this.unTrapFocus) return;\n    const initiaFocus = this.getAttribute('initia-focus');\n    trapFocus(this.dialog, initiaFocus ? initiaFocus === 'false' ? false : $4(initiaFocus, this.dialog) : this.dialog);\n  }\n  async close(jump = false) {\n    if (!this.dialog.open) return;\n    // console.log('close', jump)\n    // if (this.hasAttribute('dialog-closing')) return;\n    this.dialog.dispatchEvent(new CustomEvent(dialogClosing));\n    this.dialog.classList.add('dialog-closing');\n    dialogsOpen.shift(this.dialogId);\n    //console.log('Delete: ', dialogsOpen)\n    const animation = this.animateDialogClose();\n    if (jump) animation.complete();\n    await animation;\n    this.dialog.close();\n    this.dialog.classList.remove('dialog-closing');\n    this.dialog.dispatchEvent(new CustomEvent(dialogClose));\n    if (!this.unTrapFocus) removeTrapFocus();\n    if (dialogsOpen.length > 0) {\n      const prevDialog = $id4(dialogsOpen[0]);\n      if (prevDialog && !this.unTrapFocus) trapFocus(prevDialog, this.dialog.btnOpening);\n    } else if (this.#scrollLock && this._openedAsModal) {\n      html.removeAttribute('scroll-lock');\n    }\n    this.dialog.btnOpening?.setAttribute('aria-expanded', false)\n    this.dialog.btnOpening = null;\n  }\n  // #forceDialogToggle() {\n  //   return animate(this, {}, { duration: 0 });\n  // }\n  animateDialogOpen() {\n    return animate(this.dialog, { opacity: [0, 1]}, {\n      duration: 0.3,\n      ease: 'easeOut'\n    });\n  }\n  animateDialogClose() {\n    return animate(this.dialog, { opacity: [1, 0]}, {\n      duration: 0.2,\n      ease: 'easeIn'\n    });\n  }\n  updateTrap(focusEl) {\n    if (!this.unTrapFocus) trapFocus(this.dialog, focusEl);\n  }\n  #isClickOutside(event) {\n    const rect = this.dialog.getBoundingClientRect();\n    if (event.target instanceof HTMLDialogElement || !(event.target instanceof Element)) {\n      return (\n        event.clientX < rect.left || event.clientX > rect.right ||\n        event.clientY < rect.top || event.clientY > rect.bottom\n      );\n    }\n    return !this.contains(event.target);\n  }\n\n}\ndocument.addEventListener('click', (event) => {\n  const trigger = event.target.closest('[aria-controls]');\n  if (!trigger) return;\n\n  const dialogId = trigger.getAttribute('aria-controls'),\n  dialog = $id4(dialogId);\n\n  // if (!dialogComponent || typeof dialogComponent.open !== 'function') {\n  //   console.warn(`No dialog-component with id \"${dialogId}\" found or not a valid component.`);\n  //   return;\n  // }\n  // Button aria-controls toogle open/close\n  if (!dialog || !(dialog instanceof HTMLDialogElement) || !dialog.className.split(/\\s+/).some(cls => cls.startsWith('hdt-')) || (dialogsOpen.length >= maxNested && dialogsOpen[0] !== dialog.id)) return;\n\n  event.preventDefault();\n  //event.stopPropagation();\n  event.stopImmediatePropagation();\n  const dialogCloseId = trigger.getAttribute('close-dialog');\n  $$4('[data-auto-close] > dialog[open]').forEach( (_dialog)=> {\n    if (!_dialog?.parentElement?._openedAsModal && _dialog.id != dialog.id) _dialog.parentElement.close(true);\n  });\n  if (dialog.open && dialogId == dialogCloseId) {\n    dialog.parentElement?.close(true);\n    dialog.addEventListener(dialogClose, ()=> {\n      dialog.btnOpening = trigger;\n      dialog.parentElement?.open();\n    }, { once: true });\n  } else {\n    $id4(dialogCloseId)?.parentElement?.close();\n    dialog.btnOpening = trigger;\n    const opened = dialog.open;\n    // Toggle logic\n    dialog.parentElement[opened ? 'close' : 'open']();\n    $$4(`[aria-controls=\"${dialogId}\"]`).forEach((_btn) => _btn.setAttribute('aria-expanded', 'false'));\n    trigger.setAttribute('aria-expanded', !opened + '');\n  }\n});\n\nclass Drawer extends DialogComponent {\n  constructor() {\n    super();\n  }\n  /**\n   * @param {string} pos\n   */\n  set transform(pos) {\n    this._transform = ['translate3d(0, 0, 0)'];\n    if (pos === 'right') {\n      this._transform.push(`translate3d(${isRTL ? '-' : ''}100%, 0, 0)`);\n    } else if (pos === 'bottom') {\n      this._transform.push( 'translate3d(0, 100%, 0)');\n    } else if (pos === 'top') {\n      this._transform.push('translate3d(0, -100%, 0)');\n    } else {\n      this._transform.push(`translate3d(${isRTL ? '' : '-'}100%, 0, 0)`);\n    }\n  }\n  get pos() {\n    const arr = (this.dialog.getAttribute('pos-min-width') || '').split(':');\n    return arr[1] && window.innerWidth >= Number(arr[0]) ? arr[1] : this.dialog.getAttribute('pos') || 'left';\n  }\n  get show() {\n    this.transform = this.pos;\n    this._openedAsModal = true;\n    return this.dialog.showModal();\n  }\n  animateDialogOpen() {\n    return animate(this.dialog, {\n      transform: this._transform.reverse()\n    }, {\n      duration: 0.5,\n      ease: [0.19, 1, 0.22, 1]\n    });\n  }\n  animateDialogClose() {\n    return animate(this.dialog, {\n      transform: this._transform.reverse()\n    }, {\n      duration: 0.4,\n      ease: [0.19, 1, 0.22, 1]\n    });\n  }\n}\nclass Modal extends DialogComponent {\n  animateDialogOpen() {\n    return animate(this.dialog, {\n      opacity: [0, 1],\n      transform: ['translateX(-100px)', 'translateX(0)'],\n    }, {\n      duration: 0.45,\n      ease: [0.19, 1, 0.22, 1]\n    });\n  }\n  animateDialogClose() {\n    return animate(this.dialog, {\n      opacity: [1, 0],\n      transform: ['translateX(0)', 'translateX(80px)']\n    }, {\n      duration: 0.45,\n      ease: [0.19, 1, 0.22, 1]\n    });\n  }\n}\n\nimport { computePosition, shift, flip, offset, arrow } from \"@theme/floating\";\nvar _translate_by_dpr = new WeakSet(), translate_by_dpr_fn,\n_round_by_dpr = new WeakSet(), round_by_dpr_fn,\n_dpr = window.devicePixelRatio || 1;\nclass BaseFloating extends DialogComponent {\n  #config;\n  constructor() {\n    super();\n    getterAdd(_translate_by_dpr, this);\n    getterAdd(_round_by_dpr, this);\n  }\n  async updatePos(floatingEl, arrowEl, _placement, useTranslate = true) {\n    return computePosition(this.#button, floatingEl, {\n      //placement: getPlacement(_placement),\n      placement: _placement,\n      middleware: [\n        offset(this.#offset),\n        this.#enableFlip && flip({\n          fallbackPlacements: ['left', 'right', 'top', 'bottom'],\n          //fallbackPlacements: ['top', 'bottom'],\n        }),\n        shift({padding: 5}),\n        arrow({\n          element: arrowEl,\n        }),\n      ]\n    }).then(({x, y, placement, middlewareData}) => {\n      this.setAttribute('data-placement', placement);\n      if (useTranslate) {\n        this.objStyle = {\n          top: '0',\n          left: '0',\n          transform: getterRunFn(_translate_by_dpr, this, translate_by_dpr_fn).call(this, x, y),\n        }\n      } else {\n        this.objStyle = {\n          left: `${x}px`,\n          top: `${y}px`,\n        };\n      }\n      Object.assign(floatingEl.style, this.objStyle);\n      //console.log(middlewareData.arrow)\n      if (middlewareData.arrow && arrowEl) {\n        const {x: arrowX, y: arrowY} = middlewareData.arrow;\n        const staticSide = {\n          top: 'bottom',\n          right: 'left',\n          bottom: 'top',\n          left: 'right',\n        }[placement.split('-')[0]];\n\n        Object.assign(arrowEl.style, {\n          left: arrowX != null ? `${arrowX}px` : '',\n          top: arrowY != null ? `${arrowY}px` : '',\n          right: '',\n          bottom: '',\n          [staticSide]: this.#staticSide,\n        });\n      }\n      //console.log(this.objStyle)\n      return this.objStyle;\n    });\n  }\n  get config() {\n    return this.#config ??= JSON.parse(this.getAttribute(\"config\") || '{}');\n  }\n  get placement() {\n    return this.getAttribute(\"placement\") || this.#button?.getAttribute(\"data-placement\") || 'bottom';\n  }\n  get #button() {\n    return this.dialog?.btnOpening;\n  }\n  get #enableFlip() {\n    return !this.#button.hasAttribute('no-flip');\n  }\n  get arrowEl() {\n    return this._arrowEl ??= $4('.hdt-popover__arrow', this);\n  }\n  get #offset() {\n    return parseInt(this.config.offset || 14);\n  }\n  get #staticSide() {\n    return this.config.staticSide || '-5px';\n  }\n};\nround_by_dpr_fn = function(value) {\n  return Math.round(value * _dpr) / _dpr;\n};\ntranslate_by_dpr_fn = function(x, y) {\n  return _dpr > 1 ? `translate3d(${getterRunFn(_round_by_dpr, this, round_by_dpr_fn).call(this, x)}px,${getterRunFn(_round_by_dpr, this, round_by_dpr_fn).call(this, y)}px,0)` : `translate(${getterRunFn(_round_by_dpr, this, round_by_dpr_fn).call(this, x)}px,${getterRunFn(_round_by_dpr, this, round_by_dpr_fn).call(this, y)}px)`;\n};\nclass Popover extends BaseFloating {\n  #controller;\n  constructor() {\n    super();\n  }\n  get minWidth() {\n    return Number(this.getAttribute('popover-active-min-width')) || 768;\n  }\n  get show() {\n    this._openedAsModal = window.innerWidth < this.minWidth;\n    const scrollY = window.scrollY;\n    this.dialog.toggleAttribute('open-as-modal', this._openedAsModal);\n    this._openedAsModal ? this.dialog.showModal() : this.dialog.show();\n    requestAnimationFrame(() => {\n      window.scrollTo(0, scrollY);\n    });\n    return true;\n  }\n\n  connectedCallback() {\n    super.connectedCallback();\n\n    this.dialog.addEventListener(dialogOpen, () => {\n      this.#controller = new AbortController();\n      const { signal } = this.#controller;\n      document.addEventListener('click', (event)=> {\n        if (!this._openedAsModal && !this.contains(event.target)) this.close();\n      }, { signal });\n      this.addEventListener(\"richlist:select\", this.close.bind(this, false), { signal });\n      // Add event esc when use method dialog.show\n      if (!this._openedAsModal) {\n        document.addEventListener('keydown', (e) => {\n          if (e.key === 'Escape' && this.dialog.open) {\n            const event = new Event('cancel', { cancelable: true });\n            this.dialog.dispatchEvent(event);\n            if (!event.defaultPrevented) this.dialog.close();\n          }\n        }, { signal });\n      }\n    });\n    this.dialog.addEventListener(dialogClosing, ()=> {\n      this.#controller?.abort();\n    });\n    // if (this.hasAttribute('update-pos-when-hover-focus')) {\n    //   const btnsOpen = $$4(`[aria-controls=\"${this.dialog.id}\"]`);\n    //   btnsOpen.forEach( (btn) => {\n    //     hover(btn, () => {\n    //       this.updatePos(this.dialog, this.arrowEl, this.placement);\n    //     }, { once: true })\n    //     btn.addEventListener('focus', () => {\n    //       this.updatePos(this.dialog, this.arrowEl, this.placement);\n    //     }, { once: true });\n    //   });\n    // }\n\n    if (Shopify.designMode && !this.hasAttribute('un-detect')) {\n      const shopifySection = this.closest(\".shopify-section\");\n        shopifySection?.addEventListener(admEvts.select, (event) => {\n          //console.log(event);\n          if (event.target.getAttribute('aria-controls') === this.dialog.id) {\n            this.dialog.btnOpening = event.target;\n            this.open(!event.detail.load);\n          }\n        });\n        shopifySection?.addEventListener(admEvts.deselect, (event) => {\n          //console.log(event);\n          if (event.target.getAttribute('aria-controls') === this.dialog.id) {\n            this.close(true);\n          }\n        });\n      // $4(`button[aria-controls=\"popover-${event.target.id}\"]`).addEventListener(admEvts.select, (event) => this.open(!event.detail.load), { signal });\n      // this.addEventListener(admEvts.deselect, () => this.close(true), { signal });\n    }\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#controller?.abort();\n  }\n\n  async animateDialogOpen() {\n    if (this._openedAsModal) {\n      // Object.assign(this.dialog.style, {\n      //   top: null,\n      //   left: '0px',\n      //   right: null,\n      //   bottom: '0px',\n      //   transform: null,\n      // });\n      return animate([\n        [this.dialog, { transform: [\"translateY(100%)\", \"translateY(0%)\"], opacity: [0, 1], visibility: [\"hidden\", \"visible\"] }, { duration: 0.4, ease: [0.645, 0.045, 0.355, 1] }],\n        //[$4('.hdt-popover__body', this).children, {  opacity: [0, 1], transform: [\"translateY(15px)\", \"translateY(0px)\"] }, { at: \"-0.08\", duration: 0.24, ease: [0.645, 0.045, 0.355, 1] }]\n      ]);\n    } else {\n      if (this.hasAttribute('un-popover-trapFocus')) document.activeElement?.blur();\n      const pos = await this.updatePos(this.dialog, this.arrowEl, this.placement),\n      { transform } = pos;\n      //console.log(transform)\n      return animate([\n        [this.dialog, { top: [\"10px\",\"0\"], opacity: [0, 1], visibility: [\"hidden\", \"visible\"], transform: [transform, transform] }, { duration: 0.15 }],\n        [$4('.hdt-popover__body', this).children, { opacity: 1 }, { at: \"<\", duration: 0.15 }]\n      ]);\n    }\n  }\n  animateDialogClose() {\n    if (this._openedAsModal) {\n      return animate([\n        //[$4('.hdt-popover__body', this).children, {  opacity: [1, 0], transform: [\"translateY(0px)\", \"translateY(15px)\"] }, { duration: 0.24, ease: [0.645, 0.045, 0.355, 1] }],\n        [this.dialog, { transform: [\"translateY(0%)\", \"translateY(100%)\"], opacity: [1, 0], visibility: [\"visible\", \"hidden\"] }, { at: \"-0.1\", duration: 0.25, ease: [0.645, 0.045, 0.355, 1] }],\n      ]);\n    } else {\n      return animate([\n        [$4('.hdt-popover__body', this).children, { opacity: 0 }, { duration: 0.15 }],\n        [this.dialog,{ top: [\"0\",\"10px\"], opacity: [1, 0], visibility: [\"visible\", \"hidden\"] }, { at: \"<\", duration: 0.15 }]\n      ]);\n    }\n  }\n  trapFocus() {\n    if (this.hasAttribute('un-popover-trapFocus') && !this._openedAsModal) return;\n    //console.log(super.trapFocus);\n    super.trapFocus();\n  }\n}\n\nclass searchDrawer extends DialogComponent {\n\n  connectedCallback() {\n    super.connectedCallback();\n  }\n  animateDialogOpen() {\n    if (matchMediaQuery(\"mobile\")) {\n      return animate(this, {}, { duration: 0 });\n    } else {\n      return animate(this.dialog, { opacity: [0, 1], transform: [\"translateY(-20px)\", \"translateY(0px)\"] }, { duration: 0.4, ease: \"easeOut\" });\n    }\n  }\n  animateDialogClose() {\n    const animation = animate(this.dialog, { opacity: [1, 0], y: [0, -20] }, { duration: 0.4, ease: \"easeOut\" });\n    animation.then(() => {\n      this.dialog.style.opacity = 1;\n      this.dialog.style.transform = \"translateY(0)\";\n    });\n    return animation;\n  }\n}\nclass SearchForm extends HTMLElement {\n  constructor() {\n    super();\n    this.input = $4('input[type=\"search\"]', this);\n    this.resetButton = $4('button[type=\"reset\"]', this);\n\n    if (this.input) {\n      this.input.form.addEventListener('reset', this.onFormReset.bind(this));\n      this.input.addEventListener('input', debounce((event) => {\n        this.onChange(event);\n      }, 300).bind(this));\n\n      // Prevent ESC from clearing text from <input type=\"search\"> on Chrome\n      // this.input.addEventListener('keydown', (event) => {\n      //   if (this.input.value.length > 0 && event.key === 'Escape') event.preventDefault()\n      // });\n    }\n  }\n\n  toggleResetButton() {\n    const resetIsHidden = this.resetButton.classList.contains('hidden');\n    if (this.input.value.length > 0 && resetIsHidden) {\n      this.resetButton.classList.remove('hidden');\n    } else if (this.input.value.length === 0 && !resetIsHidden) {\n      this.resetButton.classList.add('hidden');\n    }\n  }\n\n  onChange() {\n    this.toggleResetButton();\n  }\n\n  shouldResetForm() {\n    return !$4('[aria-selected=\"true\"] a', this);\n  }\n\n  onFormReset(event) {\n    // Prevent default so the form reset doesn't set the value gotten from the url on page load\n    event.preventDefault();\n    // Don't reset if the user has selected an element on the predictive search dropdown\n    if (this.shouldResetForm()) {\n      this.input.value = '';\n      if (this.unTrapFocus) {\n        this.input.focus();\n      } else {\n        trapFocus(this.parentElement.tagName === 'DIALOG' ? this.parentElement : this, this.input);\n      }\n      this.toggleResetButton();\n    }\n  }\n  get unTrapFocus() {\n    return this._unTrapFocus ??= this.hasAttribute('un-trapFocus');\n  }\n}\n\nclass MainSearch extends SearchForm {\n  constructor() {\n    super();\n    this.allSearchInputs = $$4('input[type=\"search\"][name=\"q\"]');\n    this.setupEventListeners();\n  }\n\n  setupEventListeners() {\n    let allSearchForms = [];\n    this.allSearchInputs.forEach((input) => allSearchForms.push(input.form));\n    this.input.addEventListener('focus', this.#onInputFocus.bind(this));\n    this.onBodyClickEvent = this.onBodyClickEvent || this.onBodyClick.bind(this);\n    document.body.addEventListener('click', this.onBodyClickEvent);\n\n    if (allSearchForms.length < 2) return;\n    allSearchForms.forEach((form) => form.addEventListener('reset', this.onFormReset.bind(this)));\n    this.allSearchInputs.forEach((input) => input.addEventListener('input', this.#onInput.bind(this)));\n  }\n\n  onFormReset(event) {\n    super.onFormReset(event);\n    if (super.shouldResetForm()) {\n      this.#keepInSync('', this.input);\n    }\n  }\n\n  #onInput(event) {\n    const target = event.target;\n    this.#keepInSync(target.value, target);\n  }\n\n  #onInputFocus() {\n    const isSmallScreen = window.innerWidth < 750;\n    if (isSmallScreen) {\n      this.scrollIntoView({ behavior: 'smooth' });\n    }\n  }\n\n  #keepInSync(value, target) {\n    this.allSearchInputs.forEach((input) => {\n      if (input !== target) input.value = value;\n    });\n    $$4('.hdt-reset-search__btn[type=\"reset\"]').forEach((btn) => btn.classList.toggle('hidden', !value));\n  }\n\n  onBodyClick(event) {\n    if (!this.contains(event.target)) this.closest('hdt-predictive-search')?.close(false);\n  }\n}\nvar suggestAPI;\nclass PredictiveSearch extends SearchForm {\n  #controller;\n  #initHeight = -1;\n  constructor() {\n    super();\n    suggestAPI = Shopify.locale == 'en';\n    this.supportPredictiveAPI();\n    this.cachedResults = {};\n    this.predictiveSearchResults = $4('[data-predictive-search]', this);\n    this.allPredictiveSearchInstances = $$4('hdt-predictive-search');\n    this.isOpen = false;\n    this.#controller = new AbortController();\n    this.searchTerm = '';\n\n    this.setupEventListeners();\n    this.predictiveSearchResults.attachShadow({ mode: \"open\" });\n    this.predictiveSearchResults.shadowRoot.appendChild(document.createRange().createContextualFragment(`<slot name=\"search-results\"></slot>`));\n  }\n\n  setupEventListeners() {\n    this.input.form.addEventListener('submit', this.onFormSubmit.bind(this));\n\n    this.input.addEventListener('focus', this.onFocus.bind(this));\n    if (this.unTrapFocus) {\n      this.addEventListener('focusout', this.onFocusOut.bind(this));\n      this.addEventListener('keydown', (evt)=> {\n        if ( evt.key === 'Escape') this.close(false, true);\n      });\n    }\n  }\n  supportPredictiveAPI () {\n    if (suggestAPI) return;\n    fetch(window.Shopify.routes.root + \"search/suggest.json?q=nathan417&resources[type]=article&resources[options][fields]=title&resources[limit]=1\")\n      .then((res) => res.json())\n      .then((res) => {\n        suggestAPI = res.status != '417';\n      }\n    );\n  }\n\n  get query() {\n    return this.input.value.trim();\n  }\n\n  get slotResults() {\n    return $4('[slot=\"search-results\"]', this);\n  }\n\n  onChange() {\n    super.onChange();\n    const newSearchTerm = this.query;\n    if (!this.searchTerm || !newSearchTerm.startsWith(this.searchTerm)) {\n      // Remove the results when they are no longer relevant for the new search term\n      // so they don't show up when the dropdown opens again\n      //$4('#predictive-search-results-groups-wrapper', this)?.remove();\n      this.slotResults.innerHTML = \"\";\n    }\n    // Update the term asap, don't wait for the predictive search query to finish loading\n    // this.updateSearchForTerm(this.searchTerm, newSearchTerm);\n    this.searchTerm = newSearchTerm;\n    if (!this.searchTerm.length) {\n      this.close(true);\n      return;\n    }\n\n    this.getSearchResults(this.searchTerm);\n  }\n\n  onFormSubmit(event) {\n    if (!this.query.length || $4('[aria-selected=\"true\"] a', this)) event.preventDefault();\n  }\n\n  onFormReset(event) {\n    super.onFormReset(event);\n    if (super.shouldResetForm()) {\n      this.searchTerm = '';\n      this.#controller.abort();\n      this.#controller = new AbortController();\n      animate(this.slotResults, { opacity: [1, 0], height: [`${this.slotResults.clientHeight}px`, `${this.#initHeight}px`] }, { duration: 0.45, ease: \"easeOut\", height: { duration: 0.4 } }).then(() => {\n        this.slotResults.style.height = null;\n        this.closeResults(true);\n      });\n    }\n  }\n\n  onFocus() {\n    const currentSearchTerm = this.query;\n\n    if (!currentSearchTerm.length) return;\n\n    if (this.searchTerm !== currentSearchTerm) {\n      // Search term was changed from other search input, treat it as a user change\n      this.onChange();\n    } else if (this.getAttribute('results') === 'true') {\n      this.open();\n    } else {\n      this.getSearchResults(this.searchTerm);\n    }\n  }\n\n  onFocusOut(event) {\n    //console.log('onFocusOut', document.activeElement, event)\n    setTimeout(() => {\n      if (!this.contains(document.activeElement) ) this.close(false, true);\n    });\n  }\n\n  getSearchResults(searchTerm) {\n    const queryKey = searchTerm.replace(' ', '-').toLowerCase();\n    this.setLiveRegionLoadingState();\n\n    if (this.#initHeight == -1) {\n      this.#initHeight = $4('.hdt-main-search__empty-collection', this)?.clientHeight || 0;\n    }\n\n    if (this.cachedResults[queryKey]) {\n      this.renderSearchResults(this.cachedResults[queryKey]);\n      return;\n    }\n\n    fetch(`${window.Shopify.routes.root}search${suggestAPI ? '/suggest' : ''}?q=${encodeURIComponent(searchTerm)}&section_id=predictive-search${suggestAPI ? '&resources[options][fields]=title,product_type,variants.title,vendor,variants.sku,tag&resources[limit]=10&resources[limit_scope]=each' : '&options[prefix]=last'}`, {\n      signal: this.#controller.signal,\n    })\n      .then((response) => {\n        if (!response.ok) {\n          var error = new Error(response.status);\n          this.close();\n          throw error;\n        }\n        return response.text();\n      })\n      .then((text) => {\n        const resultsMarkup = new DOMParser().parseFromString(text, 'text/html');\n        // Save bandwidth keeping the cache in all instances synced\n        this.allPredictiveSearchInstances.forEach((predictiveSearchInstance) => {\n          predictiveSearchInstance.cachedResults[queryKey] = resultsMarkup;\n        });\n        this.renderSearchResults(resultsMarkup);\n      })\n      .catch((error) => {\n        if (error?.code === 20) return; // Code 20 means the call was aborted\n        this.close();\n        throw error;\n      });\n  }\n\n  setLiveRegionLoadingState() {\n    this.statusElement = this.statusElement || $4('.hdt-predictive-search-status', this);\n    this.loadingText = this.loadingText || this.getAttribute('data-loading-text');\n    this.setLiveRegionText(this.loadingText);\n    this.setAttribute('loading', true);\n  }\n\n  setLiveRegionText(statusText) {\n    this.statusElement.setAttribute('aria-hidden', 'false');\n    this.statusElement.textContent = statusText;\n\n    setTimeout(() => {\n      this.statusElement.setAttribute('aria-hidden', 'true');\n    }, 1000);\n  }\n\n  renderSearchResults(resultsMarkup) {\n    let oldHeight = this.slotResults.clientHeight;\n    this.slotResults.replaceChildren(...document.importNode( $4('#shopify-section-predictive-search', resultsMarkup), true).children);\n    this.setAttribute('results', true);\n\n    this.setLiveRegionResults();\n    this.open();\n    let newHeight = this.slotResults.scrollHeight;\n    //console.log(oldHeight, newHeight)\n    animate(this.slotResults, { opacity: [0, 1], height: [`${oldHeight}px`, `${newHeight}px`] }, { duration: 0.45, ease: \"easeOut\" }).then(() => {\n      this.slotResults.style.height = null;\n    });\n    if (!this.unTrapFocus) trapFocus(this.parentElement.tagName === 'DIALOG' ? this.parentElement : this, this.input);\n  }\n\n  setLiveRegionResults() {\n    this.removeAttribute('loading');\n    this.setLiveRegionText($4('[search-live-region-count]', this).textContent);\n  }\n\n  getResultsMaxHeight() {\n    this.resultsMaxHeight = `${window.innerHeight - 40}px`;\n    return this.resultsMaxHeight;\n  }\n\n  open() {\n    //this.predictiveSearchResults.style.maxHeight = this.resultsMaxHeight || `${this.getResultsMaxHeight()}px`;\n    this.parentElement?.style.setProperty(\"--hdt-search-mh\", this.resultsMaxHeight || this.getResultsMaxHeight());\n    this.setAttribute('open', true);\n    this.input.setAttribute('aria-expanded', true);\n    this.isOpen = true;\n  }\n\n  close(clearSearchTerm = false, closeDialog = false) {\n    this.closeResults(clearSearchTerm, closeDialog);\n    this.isOpen = false;\n  }\n\n  closeResults(clearSearchTerm = false, closeDialog = false) {\n    if (clearSearchTerm) {\n      this.input.value = '';\n      this.removeAttribute('results');\n      if (!this.unTrapFocus) {\n        requestAnimationFrame(() => {\n          trapFocus(this.parentElement.tagName === 'DIALOG' ? this.parentElement : this, this.input);\n        });\n      }\n    }\n\n    $4('[aria-selected=\"true\"]', this)?.setAttribute('aria-selected', false);\n    this.input.setAttribute('aria-activedescendant', '');\n    this.removeAttribute('loading');\n    this.removeAttribute('open');\n    this.input.setAttribute('aria-expanded', false);\n    this.resultsMaxHeight = false;\n    //this.predictiveSearchResults.removeAttribute('style');\n    this.parentElement?.style.removeProperty(\"--hdt-search-mh\");\n    if (closeDialog && this.parentElement.tagName === 'DIALOG') this.parentElement?.close();\n    if (!this.unTrapFocus) removeTrapFocus();\n  }\n}\nclass appendToBody extends HTMLElement {\n  constructor() {\n    super();\n    if ( window.innerWidth < 768 && this.hasAttribute('desktop')) return;\n    if (this.hasAttribute('not-idle')) {\n      this.#run();\n    } else {\n      const idle = window.requestIdleCallback || ((cb) => setTimeout(cb, 1));\n      idle(this.#run);\n    }\n  }\n  get #target() {\n    return this.hasAttribute('host') ? this.parentElement : document.body;\n  }\n  get #key() {\n    return this.getAttribute('key');\n  }\n  #run = () => {\n    //if (!this.hasAttribute('lazy') && document.body === this.firstElementChild.parentNode) return;\n    const tpl = $4(':scope > template', this);\n    const fragment = document.createDocumentFragment();\n\n    if (tpl) {\n      fragment.append(tpl.content.cloneNode(true));\n    } else {\n      fragment.append(...this.childNodes);\n    }\n    if (Shopify.designMode && this.#key) {\n      $$4(`[data-hdt-key=\"${this.#key}\"]`).forEach(el => el.remove());\n      fragment.firstElementChild?.setAttribute('data-hdt-key', this.#key);\n    }\n    this.#target.appendChild(fragment);\n    this.remove();\n  }\n}\n\ncustomElements.define('hdt-popover', Popover);\ncustomElements.define(\"hdt-search-drawer\", searchDrawer);\ncustomElements.define('hdt-search-form', SearchForm);\ncustomElements.define('hdt-predictive-search', PredictiveSearch);\ncustomElements.define('hdt-main-search', MainSearch);\ncustomElements.define(\"hdt-append-body\", appendToBody);\nconst _resizeObserver_tabs = new WeakMap();\nclass Tabs extends HTMLElement {\n  #selected;\n  panels = [];\n  tabs = [];\n  #controller;\n  constructor() {\n    super();\n    if (!this.shadowRoot) {\n      this.attachShadow({ mode: \"open\" }).appendChild($4(\"template\", this).content.cloneNode(true));\n    }\n    this.index = 0;\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    this.tabs = this.$PartName('hdt-tabs-slot').assignedNodes({ flatten: true }).filter((el) => el.tagName === 'BUTTON');\n    this.panels = this.$PartName('hdt-tabs-content-slot').assignedNodes({ flatten: true }).filter((el) => el.nodeType === Node.ELEMENT_NODE && el.tagName !== 'TEMPLATE');\n    if (this.tabs.length == 0) return;\n    const { signal } = this.#controller;\n    this.$PartName('hdt-tabs-slot').addEventListener('click', this.#onTitleClick.bind(this), { signal })\n    if (!this.hasAttribute('disable-keydown')) this.$PartName('hdt-tabs-slot').addEventListener('keydown', this.#onKeyDown.bind(this), { signal });\n    if (!this.hasAttribute('not-init')) this.selectTab(0);  // Set the initial position of the ink bar\n    var lastWidth = this.offsetWidth;\n    getterAdd(_resizeObserver_tabs, this, new ResizeObserver(entries => {\n      for (let entry of entries) {\n        if (entry.target !== this) continue;\n        if (entry.contentRect.width !== lastWidth) {\n          lastWidth = entry.contentRect.width;\n          this.selectTab(this.index);\n        }\n      }\n    }));\n    getterGet(_resizeObserver_tabs, this).observe(this);\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n    getterGet(_resizeObserver_tabs, this)?.disconnect();\n  }\n  $PartName(name) {\n    return this.shadowRoot?.querySelector(`[part=\"${name}\"]`);\n  }\n  get selected() {\n    return this.#selected;\n  }\n  set selected(idx) {\n    this.#selected = idx;\n    this.selectTab(idx);\n\n    // Updated the element's selected attribute value when\n    // backing property changes.\n    this.setAttribute('selected', idx);\n  }\n  selectTab(idx = null) {\n    let index = this.index;\n    animate(this.panels[index], { opacity: [1, 0], transform: [\"translateY(0px)\", `translateY(30px)`] }, { duration: 0.35, ease: \"easeIn\" }).then(() => {\n      for (let [i, tab] of this.tabs.entries()) {\n        const select = i === idx;\n        //tab.setAttribute('tabindex', select ? 0 : -1);\n        tab.setAttribute('aria-selected', select);\n        tab.setAttribute('aria-current', select);\n        this.panels[i].setAttribute('aria-hidden', !select);\n        if (index != i) this.panels[i].hidden = !select;\n\n        if (select) {\n          if (idx != index) this.panels[index].hidden = true;\n          requestAnimationFrame(() => {\n          this.style.setProperty(\"--ink-bar-w\", `${tab.offsetWidth}px`);\n          this.style.setProperty(\"--ink-bar-x\", `${tab.offsetLeft}px`);\n          this.style.setProperty(\"--ink-bar-y\", `${tab.offsetTop + tab.offsetHeight - 1}px`);\n          });\n          animate(this.panels[idx], { opacity: [0, 1], transform: [`translateY(20px)`, \"translateY(0px)\"] }, { duration: 0.45, ease: \"easeOut\" });\n        }\n      }\n    });\n    this.index = idx || 0;\n  }\n  #onTitleClick(e) {\n    if (e.target.slot === 'title') {\n      this.selected = this.tabs.indexOf(e.target);\n      e.target.focus();\n    }\n  }\n  #onKeyDown(e) {\n    switch (e.code) {\n      case 'ArrowLeft':\n        e.preventDefault();\n        var idx = this.selected - 1;\n        idx = idx < 0 ? this.tabs.length - 1 : idx;\n        this.tabs[idx].click();\n        break;\n      case 'ArrowRight':\n        e.preventDefault();\n        var idx = this.selected + 1;\n        this.tabs[idx % this.tabs.length].click();\n        break;\n      default:\n        break;\n    }\n  }\n}\ncustomElements.define('hdt-tabs', Tabs);\n\n// const defaultStickyConfig = {\n//   type: 'auto',\n//   stretch: false,\n//   resize: true,\n//   indents: {\n//       top: 0,\n//       bottom: 0\n//   },\n//   window: {\n//       min: 768,\n//       max: null\n//   }\n// };\n// class HdtSticky extends HTMLElement {\n//   constructor() {\n//       super();\n//       this.options = Object.assign({}, defaultStickyConfig, JSON.parse(this.getAttribute('config') || '{}'));\n//       this.location = undefined;\n//       this.freeplace = 0;\n//       this.scroll = 0;\n//   }\n\n//   connectedCallback() {\n//       this.init();\n//   }\n\n//   calcPosition() {\n//       this.freeplace = window.innerHeight - this.options.indents.top - this.options.indents.bottom;\n\n//       if (this.options.type === 'auto') {\n//           if (this.clientHeight < this.freeplace) {\n//               this.location = 'top';\n//           } else {\n//               this.location = 'bottom';\n//           }\n//       } else {\n//           this.location = this.options.type;\n//       }\n//       switch (this.location) {\n//           case 'top':\n//               this.scroll = this.options.indents.top;\n//               break;\n\n//           case 'bottom':\n//               this.scroll = window.innerHeight - this.clientHeight - this.options.indents.bottom;\n//               break;\n\n//           default:\n//               console.error(`Invalid position: \"${this.options.type}\". Available positions: \"auto\", \"top\", \"bottom\".`);\n//       }\n//   }\n\n//   stickBlock() {\n//     this.style.position = 'sticky';\n//     this.style.top = `${this.scroll}px`;\n//     if (this.options.stretch && this.location === 'top') this.style.minHeight = `${this.freeplace}px`;\n//   }\n\n//   windowResize() {\n//       if (!this.options.resize) return;\n//       let currentWindowHeight = window.innerHeight;\n//       window.addEventListener('resize', (e) => {\n//           if (this.options.window.min && window.innerWidth < this.options.window.min) return;\n//           if (this.options.window.max && window.innerWidth > this.options.window.max) return;\n\n//           if (e.target.innerHeight > currentWindowHeight || e.target.innerHeight < currentWindowHeight) {\n//               currentWindowHeight = e.target.innerHeight;\n//               this.calcPosition();\n//               this.stickBlock();\n//           }\n//       });\n//   }\n\n//   update() {\n//       this.calcPosition();\n//       this.stickBlock();\n//   }\n\n//   init() {\n//       this.windowResize();\n//       if (this.options.window.min && window.innerWidth < this.options.window.min) return;\n//       if (this.options.window.max && window.innerWidth > this.options.window.max) return;\n//       this.calcPosition();\n//       this.stickBlock();\n//   }\n// };\n// customElements.define('hdt-sticky', HdtSticky);\n/**\n * A smart sticky component that handles content longer than the viewport.\n * It automatically calculates a negative 'top' value so that the bottom\n * of the element sticks to the bottom of the screen.\n */\nclass SafeSticky extends HTMLElement {\n  #resize;\n  constructor() {\n    super();\n  }\n\n  connectedCallback() {\n    //this.#resize = resize(this, () => this.#recalculatePosition())\n    //console.log(this.offsetHeight, window.innerHeight)\n    this.#resize = resize(this, () => this.toggleAttribute('is-hdt-safe-bottom', this.offsetHeight > window.innerHeight))\n  }\n\n  disconnectedCallback() {\n    if (this.#resize) this.#resize();\n  }\n\n  /**\n   * Recalculates the sticky top position based on element and viewport height.\n   */\n  // #recalculatePosition() {\n  //   frame.render(() => {\n  //     const viewportHeight = window.innerHeight;\n  //     const elementHeight = this.offsetHeight;\n  //     let top = 0;\n  //     if (elementHeight > viewportHeight) {\n  //       // If content is longer than screen, stick to the bottom\n  //       // Formula: top = viewport - element_height\n  //      top = viewportHeight - elementHeight;\n  //     }\n  //     this.style.setProperty('--hdt-safe-top', `${top}px`);\n  //     this.style.setProperty('--hdt-safe-logic', top == 0 ? 1 : -1);\n  //   })\n  // }\n}\ncustomElements.define(\"hdt-safe-sticky\", SafeSticky);\n\n/**\n* 11.1 Modal\n* -----------------------------------------------------------------------------\n*/\n\n\nclass MenuDrawer extends Drawer {\n  constructor() {\n    super();\n  }\n\n  animateDialogOpen() {\n    const menu = $4(\".hdt-menu-drawer__nav:not([hidden]), .hdt-menu-drawer__panel:not([hidden])\", this),\n    links = $$4(\"li\", menu);\n    const revealSimultaneously = !!menu?.closest('.hdt-header-nav-eff--reveal-simultaneously');\n    if (revealSimultaneously) {\n      return animate([\n        [this.dialog, { transform: this._transform.reverse() }, { duration: 0.3, ease: \"easeOut\" }],\n        [links, { opacity: [0, 1],transform: [\"translateX(-10px)\", \"translateX(0)\"] }, { duration: 0.15, ease: \"easeOut\" }],\n        [$4(\".hdt-menu-drawer-footer\", this), { opacity: [0, 1],transform: [\"translateX(-12px)\", \"translateX(0)\"] }, { duration: 0.15, ease: \"easeOut\" }]\n      ]);\n    }\n    return animate([\n      [this.dialog, { transform: this._transform.reverse() }, { duration: 0.3, at: \"<\", ease: \"easeOut\" }],\n      [links, { opacity: [0, 1],transform: [\"translateX(-10px)\", \"translateX(0)\"] }, { duration: 0.15, delay: stagger(links.length < 15 ? 0.08 : 0.035), ease: \"easeOut\" }],\n      [$4(\".hdt-menu-drawer-footer\", this), { opacity: [0, 1],transform: [\"translateX(-12px)\", \"translateX(0)\"] }, { duration: 0.3, ease: \"easeOut\" }]\n    ]);\n  }\n  animateDialogClose() {\n    const menu = $4(\".hdt-menu-drawer__nav:not([hidden]), .hdt-menu-drawer__panel:not([hidden])\", this),\n    links = $$4(\"li\", menu);\n    const revealSimultaneously = !!menu?.closest('.hdt-header-nav-eff--reveal-simultaneously');\n    if (revealSimultaneously) {\n        return animate([\n        [links, { opacity: [1, 0],transform: [\"translateX(0)\", \"translateX(-10px)\"] }, { duration: 0.15, ease: \"easeIn\" }],\n        // [$4(\".hdt-menu-drawer-footer\", this), { opacity: [1, 0],transform: [\"translateX(0)\", \"translateX(-12px)\"] }, {  duration: 0.3, ease: \"easeIn\" }],\n        [this.dialog, { transform: this._transform.reverse() }, { duration: 0.3, ease: \"easeIn\"  }],\n      ]);\n    }\n    const delayTotal =  0.15 + (links.length < 10 ? 0.07 : 0.035) * links.length;\n    return animate([\n      [links, { opacity: [1, 0],transform: [\"translateX(0)\", \"translateX(-10px)\"] }, { duration: 0.15, delay: stagger(links.length < 10 ? 0.07 : 0.035), ease: \"easeIn\" }],\n      [$4(\".hdt-menu-drawer-footer\", this), { opacity: [1, 0],transform: [\"translateX(0)\", \"translateX(-12px)\"] }, {  at: \"-0.035\", duration: 0.3, ease: \"easeIn\" }],\n      [this.dialog, { transform: this._transform.reverse() }, { at: `-${delayTotal*0.5}`, duration: 0.3, ease: \"easeIn\"  }],\n    ]);\n  }\n};\n\nvar _menu_drawer = new WeakMap(), _menu_drawer_prev = new WeakMap(), _menu_drawer_title = new WeakMap(),\n_menu_open_panel = new WeakSet(), menu_open_panel_fn,\n_menu_panel_prev = new WeakSet(), menu_close_panel_fn;\nclass MenuPanel extends HTMLElement {\n  #controller;\n  constructor() {\n    super();\n    getterAdd(_menu_drawer, this, $4('#menu-drawer'));\n    getterAdd(_menu_panel_prev, this);\n    getterAdd(_menu_open_panel, this);\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    $4(`[panel-id=\"${this.id}\"]`, this.menuDrawer)?.addEventListener('click', getterRunFn(_menu_open_panel, this, menu_open_panel_fn).bind(this), { signal });\n    if (!this.hidden) this.btnPrev?.addEventListener('click', getterRunFn(_menu_panel_prev, this, menu_close_panel_fn).bind(this), { once: true, signal });\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n    this.abortController?.abort();\n  }\n  get menuDrawer() {\n    return getterGet(_menu_drawer, this, $4('#menu-drawer'))\n  }\n  get btnPrev() {\n    return getterGet(_menu_drawer_prev, this, $4('.hdt-menu-drawer__prev', this.menuDrawer));\n  }\n  get title() {\n    return getterGet(_menu_drawer_title, this, $4('.hdt-menu-drawer__title', this.menuDrawer));\n  }\n};\nmenu_open_panel_fn = async function(e) {\n  if (this.hasAttribute('only-icon') && !e.target.hasAttribute('icon')) {\n    return;\n  }\n  e.preventDefault();\n  const target = e.target.tagName === 'A' ? e.target : e.target.closest('a'),\n  linksPrev = $$4(\"li\", target.closest('.hdt-menu-drawer__nav')),\n  links = $$4(\"li,[reveal]\", this);\n  const revealSimultaneously = !!this.menuDrawer?.closest('.hdt-header-nav-eff--reveal-simultaneously');\n  const linksAnimate = revealSimultaneously ? { duration: 0.15,  ease: \"easeOut\" }: { duration: 0.15, delay: stagger(linksPrev < 10 ? 0.07 : 0.035), ease: \"easeOut\" };\n  const linksPrevAnimate = revealSimultaneously ? { duration: 0.15, ease: \"easeIn\" }: { duration: 0.15, at: \"-0.15\", delay: stagger(links > 15 ? 0.08 : 0.035), ease: \"easeIn\" };\n  this.title.textContent = target.textContent;\n  animate(this.title, { opacity: [0, 1],transform: [\"translateY(-10px)\", \"translateY(0)\"] }, { duration: 0.15, ease: \"easeOut\" });\n  animate(this.btnPrev, { opacity: [0, 1],transform: [\"translateY(-10px)\", \"translateY(0)\"] }, { duration: 0.15, ease: \"easeOut\", at: \"-0.15\" });\n  await animate(linksPrev, { opacity: [1, 0],transform: [\"translateX(0)\", \"translateX(-10px)\"] }, linksPrevAnimate);\n  target.closest('.hdt-menu-drawer__nav').setAttribute('hidden', '');\n  $4(`#${target.getAttribute('panel-id')}`).removeAttribute('hidden');\n  animate(links, { opacity: [0, 1],transform: [\"translateX(-10px)\", \"translateX(0)\"] }, linksAnimate);\n  this.abortController = new AbortController();\n  this.btnPrev?.addEventListener('click', getterRunFn(_menu_panel_prev, this, menu_close_panel_fn).bind(this), { signal: this.abortController.signal });\n};\nmenu_close_panel_fn = async function() {\n  if (this.hidden) return;\n  const links = $$4(\".hdt-menu-drawer__nav li\", this.menuDrawer),\n  linksPrev = $$4(\"li\", this);\n  const revealSimultaneously = !!this.menuDrawer?.closest('.hdt-header-nav-eff--reveal-simultaneously');\n  const linksAnimate = revealSimultaneously ? { duration: 0.15, ease: \"easeOut\" }: { duration: 0.15, delay: stagger(links > 15 ? 0.08 : 0.035), ease: \"easeOut\" };\n  const linksPrevAnimate = revealSimultaneously ? { duration: 0.15, ease: \"easeIn\" }: { duration: 0.15, delay: stagger(linksPrev < 10 ? 0.07 : 0.035), ease: \"easeIn\" };\n  animate(this.title, { opacity: [1, 0],transform: [\"translateY(0)\", \"translateY(-10px)\"] }, { duration: 0.15, ease: \"easeOut\" });\n  animate(this.btnPrev, { opacity: [1, 0],transform: [\"translateY(0)\", \"translateY(-10px)\"] }, { duration: 0.15, ease: \"easeOut\", at: \"-0.15\" });\n  await animate(linksPrev, { opacity: [1, 0],transform: [\"translateX(0)\", \"translateX(-10px)\"] }, linksPrevAnimate);\n  this.setAttribute('hidden', '');\n  $4('.hdt-menu-drawer__nav', this.menuDrawer).removeAttribute('hidden');\n  animate(links, { opacity: [0, 1],transform: [\"translateX(-10px)\", \"translateX(0)\"] }, linksAnimate);\n  this.abortController?.abort();\n};\n\nvar _cart_update = new WeakSet(), cart_update_fn,\n_cart_reload = new WeakSet(), cart_reload_fn,\n_cart_pageshow = new WeakSet(), cart_pageshow_fn,\n_cart_section_id = new WeakMap();\nclass CartDrawer extends Drawer {\n  #controller;\n  constructor() {\n    super();\n    getterAdd(_cart_update, this);\n    getterAdd(_cart_reload, this);\n    getterAdd(_cart_pageshow, this);\n    getterAdd(_cart_section_id, this, this.getAttribute('section-id'));\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    document.addEventListener(cartUpdate, getterRunFn(_cart_update, this, cart_update_fn).bind(this), { signal });\n    document.addEventListener(\"cart:tab\", getterRunFn(_cart_reload, this, cart_reload_fn).bind(this), { signal });\n    document.addEventListener(cartReload, getterRunFn(_cart_reload, this, cart_reload_fn).bind(this), { signal });\n    window.addEventListener(\"pageshow\", getterRunFn(_cart_pageshow, this, cart_pageshow_fn).bind(this), { signal });\n\n    this.dialog.addEventListener(dialogOpening, () => {\n      $4('.hdt-marquee', this)?._animation?.play();\n    }, { signal });\n    this.dialog.addEventListener(dialogClosing, () => {\n      $4('.hdt-marquee', this)?._animation?.pause();\n    }, { signal });\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#controller.abort();\n  }\n  get sectionId() {\n    return getterGet(_cart_section_id, this) || 'cart-drawer';\n  }\n  get sectionsToRender() {\n    return [\n      {\n        id: this.sectionId\n      },\n      {\n        id: 'cart-json'\n      }\n    ];\n  }\n\n  /**\n   * @param {any} element\n   */\n  // set focusElement(element) {\n  //   this._focusElement = element;\n  // }\n  // get focusElement() {\n  //   return this._focusElement ? this._focusElement : document.activeElement;\n  // }\n};\ncart_update_fn = async function(event) {\n  //console.log(cartUpdate, event.detail)\n  const {cartData, source, actionAfterATC, name, index} = event.detail,\n  {item_count} = cartData,\n  cartdrawerDom = new DOMParser().parseFromString(cartData.sections[this.sectionId], \"text/html\");\n\n  let animation;\n  if (item_count == 0) {\n    const sequence    = [],\n          shippingBar = $4('.hdt-free-shipping-bar', this);\n    if (shippingBar) sequence.push([$4('.hdt-free-shipping-bar', this), { opacity: [1, 0] }, { duration: 0.15, ease: \"easeIn\" }]);\n     sequence.push(\n      [$4('.hdt-cart-drawer-items', this), { opacity: [1, 0], y: [0, 30] }, { duration: 0.25, ease: \"easeIn\", ...(shippingBar && { at: \"<\" }) }],\n      [$4('.hdt-cart-drawer__footer', this), { opacity: [1, 0], y: [0, 30] }, { duration: 0.25, ease: \"easeIn\", at: 0.15 }]);\n    animation = animate(sequence);\n  } else {\n    animation = animate(this, {}, { duration: 0 })\n  }\n  await animation;\n  this.dialog.classList.toggle('is-empty', item_count == 0);\n\n  // Clear cart\n  // $4('cart-drawer-items', this)?.toggleAttribute('clear-cart', $4('cart-drawer-items', cartdrawerDom)?.hasAttribute('clear-cart'));\n  $4('cart-drawer-items', this)?.toggleAttribute('can-clear-cart', $4('cart-drawer-items', cartdrawerDom)?.hasAttribute('can-clear-cart'));\n\n  // Update gift wrap\n  $4('[aria-controls=\"CartDrawer-Gift\"]', this)?.toggleAttribute('hidden', $4('.is-gift-wrap', cartdrawerDom));\n\n  // Update shipping protection\n  const shipPr = $4('.hdt-cart-ship-protect', this);\n  if (shipPr) {\n    $4('[form]', shipPr)?.classList.remove('hdt-pe-none');\n    shipPr.toggleAttribute('hidden', $4('.is-ship-protect', cartdrawerDom));\n    if (shipPr.hidden) $4('[type=\"checkbox\"]', shipPr).checked = false;\n  }\n\n  const selectors = ['.hdt-free-shipping-bar', '.hdt-cart-drawer-empty', '#CartDrawer-CartItems', '#CartDrawer-complementary', '.hdt-cart__discount', '.js-contents'];\n  for (const selector of selectors) {\n    const targetElement = $4(selector, this);\n    const sourceElement = $4(selector, cartdrawerDom);\n    if (!targetElement || !sourceElement) continue;\n    if (selector == selectors[0]) {\n      //$4('.hdt-progress-bar', sourceElement).setAttribute('aria-valuenow', $4('.hdt-progress-bar', targetElement).getAttribute('aria-valuenow'));\n      $4('.hdt-progress-bar', sourceElement).style.setProperty('--progress-rate', $4('.hdt-progress-bar', targetElement).style.getPropertyValue('--progress-rate'));\n      targetElement.replaceWith(sourceElement);\n      $4('.hdt-progress-bar', this).now = $4('.hdt-progress-bar', sourceElement).getAttribute('aria-valuenow');\n    } else if (selector != selectors[3]) {\n      targetElement.replaceWith(sourceElement);\n    } else if ( targetElement.dataset.id !== sourceElement.dataset.id ) {\n      targetElement.replaceWith(sourceElement);\n    }\n  }\n  if (item_count == 0) {\n    this.isEmpty = true;\n    animate([\n      [$4('.hdt-dialog-drawer__inner', this), { opacity: [0, 1], transform: [\"translateY(30px)\", \"translateY(0)\"] }, { duration: 0.25, ease: [0.25, 0.46, 0.45, 0.94] }],\n    ]);\n  } else if (this.isEmpty) {\n    this.isEmpty = false;\n    const sequence    = [],\n          shippingBar = $4('.hdt-free-shipping-bar', this);\n    if (shippingBar) sequence.push([$4('.hdt-free-shipping-bar', this), { opacity: [0, 1] }, { duration: 0.15, ease: \"easeOut\" }]);\n    sequence.push(\n      [$4('.hdt-cart-drawer-items', this), { opacity: [0, 1], y: [30, 0] }, { duration: 0.25, ease: \"easeOut\", ...(shippingBar && { at: \"<\" }) }],\n      [$4('.hdt-cart-drawer__footer', this), { opacity: [0, 1], y: [30, 0] }, { duration: 0.25, ease: \"easeOut\", at: 0.15 }]);\n    animate(sequence);\n  }\n  if ( source === 'product-form') {\n    const action = actionAfterATC || themeHDN.settings.actionAfterATC;\n    if ( action === 'open_cart_drawer' ) {\n      this.open();\n    } else if ( action.indexOf('close:') > -1 ) {\n      $4(action.split(':')[1]).parentElement?.close();\n    }\n  }\n\n  // Focus back to the add to cart button\n  // console.log(item_count, name, index)\n  if (item_count === 0) {\n    trapFocus(this.dialog, $4('.hdt-cart-drawer-empty a', this.dialog) || this.dialog);\n  } else if (name && index) {\n    const lineItem = $id4(`CartDrawer-Item-${index}`);\n    const nameLineItem = $4(`[name=\"${name}\"]`, lineItem);\n    if (lineItem && nameLineItem) {\n      trapFocus(this.dialog, nameLineItem);\n    } else if ($4('.hdt-cart-item'), this.dialog) {\n      trapFocus(this.dialog, $4('.hdt-cart-item-header a', this.dialog));\n    }\n  }\n};\ncart_reload_fn = async function(event) {\n  //console.log('cart_reload_fn', event)\n  try {\n    let cartData;\n    if (event && event.type == 'cart:tab' && event.detail.sections && event.detail.sections[getterGet(_cart_section_id, this)]) {\n      cartData = event.detail\n    } else {\n      const response = await fetch(`${Shopify.routes.root}?sections=${getterGet(_cart_section_id, this)},cart-json`);\n      if (!response.ok) {\n        throw new Error('Network response was not ok');\n      }\n      const responseJson = await response.json();\n      const cartJson = responseJson['cart-json'].split('[split_94]')[1] || '{}';\n      cartData = JSON.parse(cartJson);\n\n      document.dispatchEvent(new CustomEvent(cartCount, { detail: { item_count: cartData.item_count } }));\n\n      cartData.sections = {};\n      cartData.sections[getterGet(_cart_section_id, this)] = responseJson[getterGet(_cart_section_id, this)];\n    }\n\n    $4('#CartDrawer-complementary')?.setAttribute('data-id', '1509'); //reset id\n    //getterRunFn(_cart_update, this, cart_update_fn).call(this, evtCustom);\n    this.dispatchEvent(new CustomEvent(cartUpdate, {\n      bubbles: true,\n      detail: {\n        cartData,\n        source: 'reload',\n        actionAfterATC: 'no_action'\n      }\n    }));\n  } catch (error) {\n    console.error('Failed to reload cart:', error);\n  }\n}\ncart_pageshow_fn = async function(event) {\n  if (!event.persisted) return;\n  getterRunFn(_cart_reload, this, cart_reload_fn).call(this);\n};\n\nvar _cart_main_update = new WeakSet(), cart_main_update_fn,\n_cart_main_reload = new WeakSet(), cart_main_reload_fn,\n_cart_main_section_id = new WeakMap();\nclass CartMain extends HTMLElement {\n  #controller;\n  constructor() {\n    super();\n    getterAdd(_cart_main_update, this);\n    getterAdd(_cart_main_reload, this);\n    getterAdd(_cart_main_section_id, this, this.getAttribute('section-id'));\n    this.prevCount = parseInt(this.getAttribute('cart-count'));\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    document.addEventListener(cartUpdate, getterRunFn(_cart_main_update, this, cart_main_update_fn).bind(this), { signal });\n    document.addEventListener(\"cart:tab\", getterRunFn(_cart_main_reload, this, cart_main_reload_fn).bind(this), { signal });\n    document.addEventListener(cartReload, getterRunFn(_cart_main_reload, this, cart_main_reload_fn).bind(this), { signal });\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n  get sectionsToRender() {\n    return [\n      {\n        id: this.sectionId\n      },\n      {\n        id: 'cart-json'\n      }\n    ];\n  }\n  get sectionId() {\n    return getterGet(_cart_main_section_id, this) || 'main-cart';\n  }\n};\ncart_main_update_fn = async function(event) {\n  //console.log('cart-main-update', event.detail);\n  const {cartData, name, index} = event.detail,\n  {item_count} = cartData,\n  newCartMain = document.createRange().createContextualFragment(cartData.sections[this.sectionId]);\n  let animation;\n\n  if (item_count == 0) {\n    animation = animate([\n      [$4('.hdt-cart-header', this), { opacity: [1, 0], transform: [\"translateY(0)\", \"translateY(30px)\"] }, { duration: 0.15 }],\n      [$4('cart-items', this), { opacity: [1, 0], transform: [\"translateY(0)\", \"translateY(30px)\"] }, { duration: 0.15 }],\n      [$$4('.hdt-cart__shipping-estimator, .hdt-cart__blocks', this), { opacity: [1, 0], transform: [\"translateY(0)\", \"translateY(30px)\"] }, { duration: 0.15 }]\n    ]);\n  } else if (this.prevCount == 0 && item_count > 0) {\n    animation = animate($4('.hdt-cart-empty', this), { opacity: [1, 0], transform: [\"translateY(0)\", \"translateY(30px)\"] }, { duration: 0.25 })\n  } else {\n    animation = animate(this, {}, { duration: 0 })\n  }\n  await animation;\n\n  this.classList.toggle('is-empty', item_count == 0);\n\n  // Clear cart\n  // $4('cart-items', this)?.toggleAttribute('clear-cart', $4('cart-items', newCartMain)?.hasAttribute('clear-cart'));\n  $4('cart-items', this)?.toggleAttribute('can-clear-cart', $4('cart-items', newCartMain)?.hasAttribute('can-clear-cart'));\n\n  // Update gift wrap\n  const giftWrap = $4('.hdt-page-cart__add-gift', this);\n  if (giftWrap) {\n    $4('[form]', giftWrap)?.classList.remove('hdt-pe-none');\n    giftWrap.toggleAttribute('hidden', $4('.is-gift-wrap', newCartMain));\n    if (giftWrap.hidden) $4('[type=\"checkbox\"]', giftWrap).checked = false;\n  }\n  // Update shipping protection\n  const shipPr = $4('.hdt-cart-ship-protect', this);\n  if (shipPr) {\n    $4('[form]', shipPr)?.classList.remove('hdt-pe-none');\n    shipPr.toggleAttribute('hidden', $4('.is-ship-protect', newCartMain));\n    if (shipPr.hidden) $4('[type=\"checkbox\"]', shipPr).checked = false;\n  }\n\n  const selectors = ['.hdt-free-shipping-bar', '#main-cart-items', '.js-contents', '#Cart-complementary', '.hdt-cart__discount', '.hdt-cart-empty'];\n  for (const selector of selectors) {\n    const targetElement = $4(selector, this);\n    const sourceElement = $4(selector, newCartMain);\n    if (!targetElement || !sourceElement) continue;\n    if (selector == selectors[0]) {\n      //$4('.hdt-progress-bar', sourceElement).setAttribute('aria-valuenow', $4('.hdt-progress-bar', targetElement).getAttribute('aria-valuenow'));\n      $4('.hdt-progress-bar', sourceElement).style.setProperty('--progress-rate', $4('.hdt-progress-bar', targetElement).style.getPropertyValue('--progress-rate'));\n      targetElement.replaceWith(sourceElement);\n      $4('.hdt-progress-bar', this).now = $4('.hdt-progress-bar', sourceElement).getAttribute('aria-valuenow');\n    } else if (selector != selectors[3]) {\n      targetElement.replaceWith(sourceElement);\n    } else if ( targetElement.dataset.id !== sourceElement.dataset.id ) {\n      targetElement.replaceWith(sourceElement);\n    }\n  }\n\n  if (item_count == 0) {\n    animate($4('.hdt-cart-empty', this), { opacity: [0, 1], transform: [\"translateY(30px)\", \"translateY(0)\"] }, { duration: 0.25 })\n  } else if (this.prevCount == 0 && item_count > 0) {\n    animate([\n      [$4('.hdt-cart-header', this), { opacity: [0, 1], transform: [\"translateY(30px)\", \"translateY(0px)\"] }, { duration: 0.15 }],\n      [$4('cart-items', this), { opacity: [0, 1], transform: [\"translateY(30px)\", \"translateY(0px)\"] }, { duration: 0.15 }],\n      [$$4('.hdt-cart__shipping-estimator,.hdt-cart__blocks', this), { opacity: [0, 1], transform: [\"translateY(30px)\", \"translateY(0px)\"] }, { duration: 0.15 }],\n    ]);\n  }\n  this.prevCount = item_count;\n\n  // Focus back to the add to cart button\n  // console.log(item_count, name, index)\n  if (item_count === 0) {\n    $4('.hdt-cart-empty a', this)?.focus();\n  } else if (name && index) {\n    const lineItem = $id4(`CartItem-${index}`);\n    const nameLineItem = $4(`[name=\"${name}\"]`, lineItem);\n    if (lineItem && nameLineItem) {\n      nameLineItem.focus();\n    } else if ($4('.hdt-main-cart-item'), this) {\n      $4('.hdt-main-cart-item__name a', this).focus();\n    }\n  }\n};\ncart_main_reload_fn = async function(event) {\n  try {\n    let cartData;\n    if (event && event.type == 'cart:tab' && event.detail.sections && event.detail.sections[getterGet(_cart_main_section_id, this)]) {\n      cartData = event.detail\n    } else {\n      const response = await fetch(`${Shopify.routes.root}?sections=${getterGet(_cart_main_section_id, this)},cart-json`);\n      if (!response.ok) {\n        throw new Error('Network response was not ok');\n      }\n\n      const responseJson = await response.json();\n      const cartJson = responseJson['cart-json'].split('[split_94]')[1] || '{}';\n      cartData = JSON.parse(cartJson);\n\n      document.dispatchEvent(new CustomEvent(cartCount, { detail: { item_count: cartData.item_count } }));\n\n      cartData.sections = {};\n      cartData.sections[getterGet(_cart_main_section_id, this)] = responseJson[getterGet(_cart_main_section_id, this)];\n    }\n\n    const evtCustom = {\n      detail: {\n        cartData,\n        source: 'reload',\n        actionAfterATC: 'no_action'\n      }\n    };\n\n    $4('#Cart-complementary')?.setAttribute('data-id', '1509'); //reset id\n    getterRunFn(_cart_main_update, this, cart_main_update_fn).call(this, evtCustom);\n  } catch (error) {\n    console.error('Failed to reload cart:', error);\n  }\n};\n\nvar _cart_items_update_qty = new WeakSet(), cart_items_update_qty_fn;\nclass CartItems extends HTMLElement {\n  #controller;\n  constructor() {\n    super();\n    getterAdd(_cart_items_update_qty, this);\n  }\n\n  // static get observedAttributes() {\n  //   return ['clear-cart'];\n  // }\n\n  // attributeChangedCallback(name, oldValue, newValue) {\n  //   if (name === 'clear-cart' && newValue !== null) $4('cart-remove-button', this)?.click();;\n  // }\n\n  connectedCallback() {\n    this.#controller = new AbortController();\n    this.lineItemStatusElement = document.getElementById('CartDrawer-LineItemStatus') || document.getElementById('shopping-cart-line-item-status');\n    //this.addEventListener('change', debounce(), { signal: this.#controller.signal });\n    this.addEventListener('change', debounce((event) => {\n      this.onChange(event);\n    }, 100).bind(this), { signal: this.#controller.signal });\n  }\n\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n\n  resetQuantityInput(id) {\n    const input = $4(`#Drawer-quantity-${id}`, this) || $4(`#Quantity-${id}`, this);\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    { key, index } = event.target.dataset,\n    message = checkValueStatus(inputValue, event.target.min, event.target.max, event.target.step);\n\n    if (message != 'ok') {\n      this.setValidity(event, index, message);\n    } else {\n      event.target.setCustomValidity('');\n      event.target.reportValidity();\n      getterRunFn(_cart_items_update_qty, this, cart_items_update_qty_fn).call(this, event, key, inputValue, document.activeElement.getAttribute('name'), event.target.dataset.variantId, index);\n    }\n  }\n\n  onChange(event) {\n    this.validateQuantity(event);\n  }\n  updateQuantity(event, key, quantity, name, variantId, index) {\n    getterRunFn(_cart_items_update_qty, this, cart_items_update_qty_fn).call(this, event, key, quantity, name, variantId, index);\n  }\n\n  get sectionsToRender() {\n    return [\n      {\n        id: this.dataset.id\n      },\n      {\n        id: 'cart-json'\n      }\n    ];\n  }\n  get cart() {\n    return this._cart ??= this.closest('#CartDrawer, #MainCart');\n  }\n};\ncart_items_update_qty_fn = async function(event, id, quantity, name, variantId, index) {\n  // console.log('cart-update-qty: ', this, event, id, quantity, name, variantId);\n  // console.log(this.sectionsToRender.map((section) => section.id))\n  document.dispatchEvent(new CustomEvent(loadingStart));\n  this.cart?.setAttribute('effect-blur', '');\n\n  const lineItem = $id4(`CartDrawer-Item-${index}`) || $id4(`CartItem-${index}`),\n  isClearCart = quantity == 0 && this.hasAttribute('can-clear-cart') && lineItem && !lineItem.classList.contains('is-gift-wrap') && !lineItem.classList.contains('is-ship-protect'),\n  endpoint = isClearCart ? 'clear' : 'change',\n  bodyData = isClearCart \n  ? { sections: this.sectionsToRender.map(s => s.id) }\n  : { id, quantity, sections: this.sectionsToRender.map(s => s.id) };\n\n  const response = await fetch(`${Shopify.routes.root}cart/${endpoint}.js`, {\n    method: \"POST\",\n    headers: { \"Content-Type\": \"application/json\" },\n    body: JSON.stringify(bodyData)\n  });\n  const cartData = await response.json();\n  document.dispatchEvent(new CustomEvent(loadingEnd));\n  this.cart?.removeAttribute('effect-blur');\n  if (response.ok) {\n    if (!cartData.items && cartData.sections && cartData.sections['cart-json']) {\n      Object.assign(cartData, JSON.parse(cartData.sections['cart-json'].split('[split_94]')[1] || '{}'));\n    }\n    if (!cartData.sections || !cartData.sections[this.dataset.id]) {\n      document.dispatchEvent(new CustomEvent(cartReload, {\n        bubbles: true,\n        detail: {\n          source: 'cart-items',\n          actionAfterATC: 'no_action'\n        }\n      }));\n      return;\n    }\n    document.dispatchEvent(new CustomEvent(cartUpdate, {\n      bubbles: true,\n      detail: {\n        source: 'cart-items',\n        variantId,\n        cartData,\n        name,\n        index\n      }\n    }));\n  } else {\n    const {description, message} = cartData;\n    document.dispatchEvent(new CustomEvent(cartError, {\n      bubbles: true,\n      detail: {\n        source: 'cart-items',\n        errors: message || description,\n        message\n      }\n    }));\n    const quantityInput = $4(`#Drawer-quantity-${index}, #Quantity-${index}`, this);\n    if (quantityInput) quantityInput.value = quantityInput.defaultValue;\n    const cartItemError = $4(`#Cart-LineItemError-${index}`, this);\n    $4('small', cartItemError).textContent = message || description;\n    cartItemError.removeAttribute('hidden');\n  }\n};\nclass CartDrawerItems extends CartItems {\n  #cancel = [];\n  #position;\n  #moreThan = false;\n  connectedCallback() {\n    super.connectedCallback();\n    this.#position = isRTL ? 'left' : 'right';\n    const _scroll = scroll(\n      (progress) => frame.render(this.#style.bind(this, progress)),\n      //() => frame.render(this.#update),\n      { container: this, axis: this.#axis, trackContentSize: this.#resize }\n    );\n    this.#cancel.push(_scroll);\n    // const _resize = resize(this, () => frame.render(this.#update));\n    // this.#cancel.push(_resize);\n  }\n\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    if (this.#cancel.length > 0) this.#cancel.forEach( (fn) => fn());\n  }\n  get #axis() {\n    return 'y';\n  }\n  get #resize() {\n    return true;\n  }\n  #update = () => {\n    this.#moreThan = this.#axis === 'y' ? this.scrollHeight > this.clientHeight : this.scrollWidth > this.clientWidth\n    //console.log(progress)\n    let progress = NaN;\n    if (this.#moreThan) {\n      const { scrollTop, scrollHeight, clientHeight, scrollLeft, scrollWidth, clientWidth } = this;\n      //const scrollDirection = scrollWidth > clientWidth ? 'horizontal' : 'vertical';\n      progress = this.#axis === 'y' ? scrollTop / (scrollHeight - clientHeight) : scrollLeft / (scrollWidth - clientWidth);\n    }\n    //console.log('progress 1: ', progress);\n    this.#style(progress);\n  };\n  #style(progress) {\n    //console.log('progress 2: ', progress)\n    this.style.maskImage = Number.isNaN(progress) || !this.#moreThan ? '' : `linear-gradient(to ${this.#axis === 'y' ? 'bottom' : this.#position}, transparent ${progress > 0.02 ? 1 : 0}%, black ${progress < 0.1 ? progress * 100 : 10}%, black ${progress > 0.9 ? progress * 100 : 90}%, transparent 100%)`;\n  }\n};\nclass CartRemoveButton extends HTMLElement {\n  #controller;\n  constructor() {\n    super();\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    this.addEventListener('click', (event) => {\n      event.preventDefault();\n      const cartItems = this.closest('cart-items') || this.closest('cart-drawer-items');\n      cartItems?.updateQuantity(event, this.dataset.key, 0, '', this.dataset.variantId, this.dataset.index);\n    }, { signal: this.#controller.signal });\n  }\n  disconnectedCallback() { this.#controller.abort(); }\n}\nclass CartNote extends HTMLElement {\n  constructor() {\n    super();\n\n    this.addEventListener('input', debounce((event) => {\n        fetch(`${Shopify.routes.root}cart/update.js`, {\n          method: \"POST\",\n          headers: { \"Content-Type\": \"application/json\" },\n          body: JSON.stringify({ note: event.target.value }),\n          keepalive: true\n        })\n        .then(() => {\n          if (this.dataset.type != 'cart-drawer') return;\n         const currentText = this.dataset[event.target.value.length ? 'edit' : 'add'],\n               control     = $4('[aria-controls=\"CartDrawer-Note\"]');\n          $4('label', this).textContent = currentText;\n          control?.setAttribute('aria-label', currentText)\n          control?.classList.toggle('has-noted', event.target.value.length);\n        });\n      }, 300)\n    );\n  }\n};\nclass CartAction extends DialogComponent {\n  #controller;\n  constructor() {\n    super();\n  }\n  connectedCallback () {\n    super.connectedCallback();\n    const cartDrawer = $4('cart-drawer');\n    if (!cartDrawer) return;\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    let btnOpening;\n    document.addEventListener(discountUpdate, () => {\n      setTimeout(() => {\n        if (this.dialog.open) trapFocus(this.dialog);\n      }, 60);\n    }, { signal });\n    this.dialog.addEventListener(dialogOpening, () => {\n      btnOpening = this.dialog.btnOpening;\n      cartDrawer.classList.add('is-cart-openabled');\n    }, { signal });\n    this.dialog.addEventListener(dialogClose, () => {\n      cartDrawer.classList.remove('is-cart-openabled');\n      trapFocus(cartDrawer.dialog);\n      elFocus(btnOpening, false, true);\n    }, { signal });\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#controller?.abort();\n  }\n  animateDialogOpen() {\n    return animate(this.dialog, {\n      transform: ['translate3d(0, 100%, 0)', 'translate3d(0, 0, 0)']\n    }, {\n      duration: 0.5,\n      ease: [0.19, 1, 0.22, 1]\n    });\n  }\n  animateDialogClose() {\n    return animate(this.dialog, {\n      transform: ['translate3d(0, 0, 0)', 'translate3d(0, 100%, 0)']\n    }, {\n      duration: 0.4,\n      ease: [0.19, 1, 0.22, 1]\n    });\n  }\n};\n\n/**\n * https://shopify.dev/docs/themes/ajax-api/reference/cart#generate-shipping-rates\n * https://community.shopify.com/c/shopify-design/cart-add-a-shipping-rates-calculator-to-your-cart/td-p/616554\n */\nvar _calc_shipping = new WeakSet(), calc_shipping_fn,\n_async_shipping_rates = new WeakSet(), async_shipping_rates_fn,\n_shipping_rates_ok = new WeakSet(), shipping_rates_ok_fn,\n_shipping_rates_error = new WeakSet(), shipping_rates_error_fn;\nclass ShippingCalculator extends HTMLElement {\n  #controller;\n  constructor() {\n    super();\n    getterAdd(_calc_shipping, this);\n    getterAdd(_async_shipping_rates, this);\n    getterAdd(_shipping_rates_ok, this);\n    getterAdd(_shipping_rates_error, this);\n    this.langRates = JSON.parse( $4('template[data-lang-rates]', this).innerHTML );\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    this.submitButton = $4('[type=\"button\"]', this);\n    this.resultsElement = $4('[aria-live=\"polite\"]', this);\n    this.submitButton.addEventListener(\"click\", getterRunFn(_calc_shipping, this, calc_shipping_fn).bind(this), { signal: this.#controller.signal });\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n};\ncalc_shipping_fn = async function(event) {\n  event.preventDefault();\n  const zip = $4('[name=\"address[zip]\"]', this).value,\n  country = $4('[name=\"address[country]\"]', this).value,\n  $province = $4('[name=\"address[province]\"]', this),\n  province = $province.disabled ? '' : $province.value;\n  this.submitButton.setAttribute(\"aria-busy\", \"true\");\n  document.dispatchEvent(new CustomEvent(loadingStart));\n  const response = await fetch(`${Shopify.routes.root}cart/prepare_shipping_rates.json?shipping_address[zip]=${zip}&shipping_address[country]=${country}&shipping_address[province]=${province}`, { method: \"POST\" });\n  document.dispatchEvent(new CustomEvent(loadingEnd));\n  if (response.ok) {\n    const shippingRates = await getterRunFn(_async_shipping_rates, this, async_shipping_rates_fn).call(this, zip, country, province);\n    getterRunFn(_shipping_rates_ok, this, shipping_rates_ok_fn).call(this, shippingRates);\n  } else {\n    const jsonError = await response.json();\n    getterRunFn(_shipping_rates_error, this, shipping_rates_error_fn).call(this, jsonError);\n  }\n  this.resultsElement.hidden = false;\n  this.submitButton.removeAttribute(\"aria-busy\");\n};\nasync_shipping_rates_fn = async function(zip, country, province) {\n  const response = await fetch(`${Shopify.routes.root}cart/async_shipping_rates.json?shipping_address[zip]=${zip}&shipping_address[country]=${country}&shipping_address[province]=${province}`);\n  const responseAsText = await response.text();\n  if (responseAsText === \"null\") {\n    return getterRunFn(_async_shipping_rates, this, async_shipping_rates_fn).call(this, zip, country, province);\n  } else {\n    return JSON.parse(responseAsText).shipping_rates;\n  }\n};\nshipping_rates_ok_fn = function(shippingRates) {\n  let ratesList = shippingRates.map((shippingRate) => {\n    return `<li>${shippingRate.presentment_name}: ${ shippingRate.price == \"0.00\" ? this.langRates.free : `<span class=\"hdt-money\">${currency.convert(shippingRate.price)}</span>` }</li>`;\n  });\n  this.resultsElement.innerHTML = `<div class=\"hdt-mess__rates is--rates-success\"><p>${shippingRates.length === 0 ? this.langRates.no_rates : shippingRates.length === 1 ? this.langRates.one_rate : this.langRates.multiple_rates}</p>${ratesList === \"\" ? \"\" : `<ul role=\"list\">${ratesList.join('')}</ul>`}</div>`;\n  document.dispatchEvent(new CustomEvent(\"currencyUpdate\"));\n};\nshipping_rates_error_fn = function(errors) {\n  let errorHtml = Object.keys(errors).map((errorKey) => {\n    return `<li><span class=\"hdt-key__rate\">${errorKey}:</span> ${errors[errorKey]}</li>`;\n  });\n  this.resultsElement.innerHTML = `<div class=\"hdt-mess__rates is--rates-error\"><p>${this.langRates.errors}</p><ul role=\"list\">${errorHtml.join('')}</ul></div> `;\n};\n\nclass AddTick extends HTMLElement {\n  constructor() {\n    super();\n    $4('[type=\"checkbox\"]', this)?.addEventListener('change', (e)=> {\n      e.stopPropagation();\n      if (e.target.checked) {\n        this.classList.add('hdt-pe-none');\n        $4('[name=\"add\"]', $id4(this.getAttribute('form'))).click();\n      }\n    });\n  }\n};\n// cart count\nvar _get_cart_count = new WeakSet(), get_cart_count_fn,\n_car_count_section = new WeakMap();\nfunction updateCartBubbleStatusText(count) {\n  if (count == null) return;\n  const itemCount = Number(count) || 0;\n  const syncStatus = () => {\n    $$4('.hdt-cart-bubble .sr-only').forEach((cartStatus) => {\n      if (itemCount > 0) {\n        cartStatus.textContent = /\\d+/.test(cartStatus.textContent) ? cartStatus.textContent.replace(/\\d+/, itemCount) : `Item in cart: ${itemCount}`;\n      } else {\n        cartStatus.textContent = 'Cart is empty';\n      }\n    });\n  };\n  syncStatus();\n  setTimeout(syncStatus, 120);\n  setTimeout(syncStatus, 900);\n}\nclass HdtCartCount extends HTMLElement {\n  #controller;\n  constructor() {\n    super();\n    getterAdd(_get_cart_count, this);\n    getterAdd(_car_count_section, this, $4('[ref=\"hdt-cart\"]'));\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller,\n    updateCount = ({ detail }) => this.itemCount = detail.item_count;\n    ['cart:live', 'cart:tab', cartCount].forEach(type => {\n      document.addEventListener(type, updateCount, { signal });\n    });\n    document.addEventListener(cartUpdate, (event) => updateCartBubbleStatusText(event.detail.cartData?.item_count), { signal });\n    window.addEventListener(\"pageshow\", getterRunFn(_get_cart_count, this, get_cart_count_fn).bind(this), { signal });\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n  get cart() {\n    return getterGet(_car_count_section, this);\n  }\n  /**\n   * @param {number} count\n   */\n  set itemCount(count) {\n    this.innerText = count;\n    this.classList.toggle('is-visible', count > 0);\n    updateCartBubbleStatusText(count);\n  }\n}\nget_cart_count_fn = async function(event) {\n  if (!event.persisted) return;\n  this.itemCount = await getCart().then((data) => data.item_count);\n};\n// cart dot\nclass CartDot extends HdtCartCount {\n  /**\n   * @param {number} count\n   */\n  set itemCount(count) {\n    this.classList.toggle('is-visible', count > 0);\n    updateCartBubbleStatusText(count);\n  }\n}\n\nclass CartDiscount extends HTMLElement {\n  #controller;\n  #errors;\n  #cart\n  constructor() {\n    super();\n  }\n\n  /** @type {AbortController | null} */\n  #activeFetch = null;\n\n  #createAbortController() {\n    if (this.#activeFetch) {\n      this.#activeFetch.abort();\n    }\n\n    const abortController = new AbortController();\n    this.#activeFetch = abortController;\n    return abortController;\n  }\n\n  connectedCallback() {\n    this.#errors = {\n      wrap: $4('[ref=\"cartDiscountError\"]', this),\n      discount: $4('[ref=\"cartDiscountErrorDiscountCode\"]', this),\n      shipping: $4('[ref=\"cartDiscountErrorShipping\"]', this),\n    };\n    this.#cart = $4('[ref=\"hdt-cart\"]');\n\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    $4('form', this).addEventListener('submit', this.#applyDiscount.bind(this), { signal });\n    //this.addEventListener('click', this.#removeDiscount, { signal });\n  }\n\n  disconnectedCallback() {\n    this.#errors = null;\n    this.#controller.abort();\n    if (this.#activeFetch) {\n      this.#activeFetch.abort();\n      this.#activeFetch = null;\n    }\n  }\n\n  /**\n   * Handles updates to the cart note.\n   * @param {SubmitEvent} event - The submit event on our form.\n   */\n  #applyDiscount = async (event) => {\n\n    event.preventDefault();\n    event.stopPropagation();\n\n    const form = event.target;\n\n    if (!(form instanceof HTMLFormElement)) return;\n\n    const discountCode = $4('input[name=\"discount\"]', form),\n    discountCodeValue = discountCode.value;\n\n    if (!(discountCode instanceof HTMLInputElement) || typeof this.dataset.sectionId !== 'string' || discountCodeValue.length === 0) return;\n\n    const abortController = this.#createAbortController();\n    try {\n      const existingDiscounts = this.#existingDiscounts();\n      if (existingDiscounts.includes(discountCodeValue)) return;\n\n      document.dispatchEvent(new CustomEvent(loadingStart));\n      const { wrap, discount, shipping } = this.#errors;\n      wrap?.setAttribute('hidden', '');\n      discount?.setAttribute('hidden', '');\n      shipping?.setAttribute('hidden', '');\n\n      const config = fetchConfig('json', {\n        body: JSON.stringify({\n          discount: [...existingDiscounts, discountCodeValue].join(','),\n          sections: this.#cart.sectionsToRender.map((section) => section.id)\n        }),\n      });\n\n      const response = await fetch(`${Shopify.routes.root}cart/update.js`, {\n        ...config,\n        signal: abortController.signal,\n      }),\n      data = await response.json();\n      document.dispatchEvent(new CustomEvent(loadingEnd));\n      if (\n        data.discount_codes.find((/** @type {{ code: string; applicable: boolean; }} */ discount) => {\n          return discount.code === discountCodeValue && discount.applicable === false;\n        })\n      ) {\n        discountCode.value = '';\n        this.#handleDiscountError('discount_code');\n        return;\n      }\n\n      const parsedHtml = new DOMParser().parseFromString(data.sections[this.dataset.sectionId], 'text/html'),\n      section = parsedHtml.getElementById(`shopify-section-${this.dataset.sectionId}`);\n\n      if (section) {\n        const discountCodes = $$4('.hdt-cart-discount__pill', section),\n        codes = discountCodes\n          .map((element) => (element instanceof HTMLLIElement ? element.dataset.discountCode : null))\n          .filter(Boolean);\n        // Before morphing, we need to check if the shipping discount is applicable in the UI\n        // we check the liquid logic compared to the cart payload to assess whether we leveraged\n        // a valid shipping discount code.\n        if (\n          codes.length === existingDiscounts.length &&\n          codes.every((/** @type {string} */ code) => existingDiscounts.includes(code)) &&\n          data.discount_codes.find((/** @type {{ code: string; applicable: boolean; }} */ discount) => {\n            return discount.code === discountCodeValue && discount.applicable === true;\n          })\n        ) {\n          this.#handleDiscountError('shipping');\n          discountCode.value = '';\n          return;\n        }\n      }\n\n      document.dispatchEvent(new DiscountUpdateEvent(data, this.id));\n      document.dispatchEvent(new CustomEvent(cartUpdate, {\n        bubbles: true,\n        detail: {\n          source: 'cart-discount',\n          cartData: data\n        }\n      }));\n    } catch (error) {\n      document.dispatchEvent(new CustomEvent(loadingEnd));\n    } finally {\n      this.#activeFetch = null;\n    }\n  };\n\n  /**\n   * Handles removing a discount from the cart.\n   * @param {MouseEvent | KeyboardEvent} event - The mouse or keyboard event in our pill.\n   */\n  removeDiscount = async (event) => {\n    event.preventDefault();\n    event.stopPropagation();\n    if ((event instanceof KeyboardEvent && event.key !== 'Enter') || !(event instanceof MouseEvent) || !(event.target instanceof HTMLElement) || typeof this.dataset.sectionId !== 'string') return;\n\n    const pill = event.target.closest('.hdt-cart-discount__pill');\n    if (!(pill instanceof HTMLLIElement)) return;\n\n    const discountCode = pill.dataset.discountCode;\n    if (!discountCode) return;\n\n    const existingDiscounts = this.#existingDiscounts();\n    const index = existingDiscounts.indexOf(discountCode);\n    if (index === -1) return;\n\n    existingDiscounts.splice(index, 1);\n\n    const abortController = this.#createAbortController();\n\n    try {\n      document.dispatchEvent(new CustomEvent(loadingStart));\n      const config = fetchConfig('json', {\n        body: JSON.stringify({ discount: existingDiscounts.join(','), sections: this.#cart.sectionsToRender.map((section) => section.id) }),\n      }),\n      response = await fetch(`${Shopify.routes.root}cart/update.js`, {\n        ...config,\n        signal: abortController.signal,\n      }),\n      data = await response.json();\n\n      document.dispatchEvent(new CustomEvent(loadingEnd));\n      document.dispatchEvent(new DiscountUpdateEvent(data, this.id));\n      document.dispatchEvent(new CustomEvent(cartUpdate, {\n        bubbles: true,\n        detail: {\n          source: 'cart-discount',\n          cartData: data\n        }\n      }));\n    } catch (error) {\n    } finally {\n      this.#activeFetch = null;\n    }\n  };\n\n  /**\n   * Handles the discount error.\n   *\n   * @param {'discount_code' | 'shipping'} type - The type of discount error.\n   */\n  #handleDiscountError(type) {\n    const { wrap, discount, shipping } = this.#errors,\n    target = type === 'discount_code' ? discount : shipping;\n    wrap.removeAttribute('hidden');\n    target.removeAttribute('hidden');\n  }\n\n  /**\n   * Returns an array of existing discount codes.\n   * @returns {string[]}\n   */\n  #existingDiscounts() {\n    /** @type {string[]} */\n    const discountCodes = [];\n    const discountPills = $$4('.hdt-cart-discount__pill', this);\n    for (const pill of discountPills) {\n      if (pill instanceof HTMLLIElement && typeof pill.dataset.discountCode === 'string') {\n        discountCodes.push(pill.dataset.discountCode);\n      }\n    }\n    return discountCodes;\n  }\n}\nclass CartDiscountRemove extends HTMLElement {\n  #controller;\n  constructor() {\n    super();\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const discountComponent = this.closest('cart-discount-component');\n    this.addEventListener('click', (event) => {\n      //event.preventDefault();\n      discountComponent?.removeDiscount(event);\n    }, { signal: this.#controller.signal });\n  }\n  disconnectedCallback() { this.#controller.abort();}\n}\n\n//const ageVerified = 'theme4:age:verified',\nconst popupQueue = [];\nfunction requestShow(id, priority = false) {\n  if (popupQueue.some(item => item.id === id)) return;\n\n  if (priority) {\n    popupQueue.unshift(id);\n  } else {\n    popupQueue.push(id);\n  }\n\n  if (popupQueue.length == 1) $id4(id)?.parentElement.open();\n  $id4(id).addEventListener(dialogClose, ()=> {\n    // Find item index\n    const index = popupQueue.indexOf(id);\n    // Remove id on array\n    popupQueue.splice(index, 1);\n    // Find next popup to open\n    if (popupQueue.length > 0) $id4(popupQueue[0])?.parentElement?.open();\n  });\n}\nclass AgeModal extends Modal {\n  #minAge;\n  #expireDays;\n  #daySelect;\n  #monthSelect;\n  #yearSelect;\n  #requireDob;\n  #controller;\n  connectedCallback() {\n    //console.log('Age Modal: ', $id4('hdt-age-modal'));\n    super.connectedCallback();\n    this.#controller = new AbortController();\n    const { signal } = this.#controller.signal;\n    this.#minAge = Number(this.getAttribute('min-age') || 18);\n    this.#expireDays = Number(this.getAttribute('expire-days') || 15);\n\n    if (expiresManager.check(this.#storageKey)) return this.dialog.setAttribute('is-verified', '');\n    this.lockOpen = true;\n    this.#requireDob = this.hasAttribute('require-dob');\n    if (this.#requireDob) {\n      this.#daySelect = $id4('hdt-age-day');\n      this.#monthSelect = $id4('hdt-age-month');\n      this.#yearSelect = $id4('hdt-age-year');\n      this.#populateSelects();\n    }\n    if (!Shopify.designMode) {\n      //this.open();\n      requestShow(this.dialogId, true);\n    }\n    const form = $id4('hdt-age-modal_form');\n    form?.addEventListener('submit', this.#handleConfirm, { signal });\n    form?.addEventListener('reset', this.#handleCancel, { signal });\n    // bind change\n    this.#monthSelect?.addEventListener('change', this.#updateDays, { signal });\n    this.#yearSelect?.addEventListener('change', this.#updateDays, { signal });\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    this.#controller.abort();\n  }\n  get #storageKey() {\n    return `age:${this.#minAge}`;\n  }\n  #populate(select, start, end, step = 1) {\n    const fragment = document.createDocumentFragment();\n    const isDescending = start > end;\n\n    for (let i = start; isDescending ? i >= end : i <= end; i += step) {\n      fragment.append(new Option(i, i));\n    }\n    select.append(fragment);\n  }\n  #populateSelects() {\n    const now = new Date().getFullYear();\n\n    this.#populate(this.#daySelect, 1, 31);\n    this.#populate(this.#monthSelect, 1, 12);\n    this.#populate(this.#yearSelect, now, now - 100, -1);\n  }\n  #daysInMonth(month, year) {\n    return new Date(year, month, 0).getDate();\n  }\n  #updateDays = () => {\n    const m = Number(this.#monthSelect.value),\n    y = Number(this.#yearSelect.value),\n    maxDays = (m && y) ? this.#daysInMonth(m, y) : 31,\n    current = Number(this.#daySelect.value);\n\n    this.#daySelect.innerHTML = `<option value=\"\">${this.#daySelect.options[0].text}</option>`;\n    this.#populate(this.#daySelect, 1, maxDays);\n    // Keep the old date if it is still valid.\n    if (current && current <= maxDays) this.#daySelect.value = current;\n  }\n  #calcAgeFromSelects() {\n    const d = Number(this.#daySelect.value);\n    const m = Number(this.#monthSelect.value);\n    const y = Number(this.#yearSelect.value);\n\n\n    if (!d || !m || !y) return null;\n\n\n    const today = new Date();\n    const dob = new Date(y, m - 1, d);\n\n\n    // invalid date (VD: 31/02)\n    if ( dob.getFullYear() !== y || dob.getMonth() !== m - 1 || dob.getDate() !== d ) return null;\n\n\n    let age = today.getFullYear() - y;\n    const diffMonth = today.getMonth() - (m - 1);\n\n\n    if (diffMonth < 0 || (diffMonth === 0 && today.getDate() < d)) age--;\n    return age;\n  }\n  #handleConfirm = (event) => {\n    event.preventDefault();\n    if (this.#requireDob) {\n      const age = this.#calcAgeFromSelects();\n      //console.log(age);\n      if (age === null || age < this.#minAge) return this.#shake;\n    }\n    if (!Shopify.designMode) expiresManager.set(this.#storageKey, this.#expireDays);\n    this.close();\n    this.#controller.abort();\n    //document.dispatchEvent(new CustomEvent(ageVerified));\n  };\n  #handleCancel = () => {\n    this.#shake;\n    if (this.hasAttribute('custom-link') && !Shopify.designMode) window.location.href = this.getAttribute('custom-link');\n  };\n  get #shake() {\n    return animate(\n      this.dialog,\n      // { x: [0, -8, 8, -6, 6, -4, 4, 0] },\n      { transform: ['translateX(0px)', 'translateX(-8px)', 'translateX(8px)', 'translateX(-6px)', 'translateX(6px)', 'translateX(-4px)', 'translateX(4px)', 'translateX(0px)'] },\n      {\n        duration: 0.4,\n        ease: 'easeInOut'\n      }\n    );\n  }\n}\nclass NewsletterPopup extends Modal {\n  #options;\n  #initialOpen;\n  constructor() {\n    super();\n    this.lockOpen = true;\n    if (expiresManager.check(this.#storageKey)) return;\n    // const ageModal = $id4('hdt-age-modal'),\n    // awaitAgeVerification = ageModal ? !ageModal.hasAttribute('is-verified') : false;\n    //console.log('awaitAgeVerification: ', awaitAgeVerification);\n    this.#options = JSON.parse(this.getAttribute('config') || '{}');\n    this.#initialOpen = this.hasAttribute('initial-form-open') && location.href.indexOf(this.dataset.formId) > -1;\n    if (!this.#initialOpen) this.#int();\n  }\n  connectedCallback () {\n    super.connectedCallback();\n\n    if (expiresManager.check(this.#storageKey)) return;\n    if (this.#initialOpen) {\n      //this.open();\n      requestShow(this.dialogId, true);\n    }\n    this.dialog.addEventListener(dialogClose, () => expiresManager.set(this.#storageKey, this.#options.expiryDays), { once: true });\n    if ($4('.hdt-form__alert--success', this)) expiresManager.set(this.#storageKey, this.#options.expiryDays);\n  }\n\n  get #storageKey() {\n    return 'newsletter_popup';\n  }\n\n  #int = () => {\n    const { type, timeDelay, scrollDelay } = this.#options;\n    if (type == 'time') {\n      delay(() => requestShow(this.dialogId), timeDelay)\n    } else {\n      const scroll2 = scroll(progress => {\n        if (progress * 100 < scrollDelay) return;\n        requestShow(this.dialogId);\n        scroll2();\n      });\n    }\n  }\n}\nclass PromoPopup extends Modal {\n  #options;\n  constructor() {\n    super();\n    if (expiresManager.check(this.#storageKey)) return;\n    this.#options = JSON.parse(this.getAttribute('config') || '{}');\n    this.#int();\n  }\n  connectedCallback () {\n    super.connectedCallback();\n    this.dialog.addEventListener(dialogClose, () => expiresManager.set(this.#storageKey, this.#options.expiryDays), { once: true });\n  }\n\n  get #storageKey() {\n    return 'promo_popup';\n  }\n\n  #int = () => {\n    const { type, fallbackType, timeDelay, scrollDelay } = this.#options;\n    let _type = type;\n    if (_type == 'exit') {\n      if (matchMediaQuery(\"hover\")) {\n        const controller = new AbortController();\n        document.addEventListener('mouseleave', (e) => {\n          const hasPopupOpen = $4('[ref=\"popupOpen\"][open]') ? true : false;\n          if (e.clientY < 10 && !hasPopupOpen) {\n            requestShow(this.dialogId);\n            controller.abort();\n          }\n        }, { signal: controller.signal });\n      } else {\n        _type = fallbackType;\n      }\n    }\n    if (_type == 'time') {\n      delay(() => {\n        requestShow(this.dialogId);\n      }, timeDelay)\n    } else if (_type == 'scroll') {\n      const scroll2 = scroll(progress => {\n        if (progress * 100 < scrollDelay) return;\n        requestShow(this.dialogId);\n        scroll2();\n      });\n    }\n  }\n}\n\ncustomElements.define(\"hdt-modal\", Modal);\ncustomElements.define(\"hdt-drawer\", Drawer);\ncustomElements.define(\"hdt-menu-drawer\", MenuDrawer);\ncustomElements.define(\"hdt-menu-panel\", MenuPanel);\ncustomElements.define(\"hdt-cart-count\", HdtCartCount);\ncustomElements.define(\"hdt-cart-dot\", CartDot);\ncustomElements.define(\"cart-drawer\", CartDrawer);\ncustomElements.define(\"main-cart\", CartMain);\ncustomElements.define('cart-items', CartItems);\ncustomElements.define('cart-drawer-items', CartDrawerItems);\ncustomElements.define('cart-remove-button', CartRemoveButton);\ncustomElements.define('cart-note', CartNote);\ncustomElements.define(\"hdt-cart-action\", CartAction);\ncustomElements.define(\"hdt-shipping-calculator\", ShippingCalculator);\ncustomElements.define(\"hdt-cart-add-tick\", AddTick);\ncustomElements.define('cart-discount-component', CartDiscount);\ncustomElements.define('wrapp-discount-remove', CartDiscountRemove);\ncustomElements.define('hdt-age-modal', AgeModal);\ncustomElements.define(\"hdt-newsletter-popup\", NewsletterPopup);\ncustomElements.define('hdt-promo-popup', PromoPopup);\n\nvar _localization_header = new WeakMap(),\n_localization_disclosure = new WeakMap();\nclass LocalizationForm extends HTMLElement {\n  #controller;\n  constructor() {\n    super();\n    getterAdd(_localization_header, this, $4('.hdt-sticky-header'));\n    getterAdd(_localization_disclosure, this, this.closest('.hdt-disclosure'));\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    if (this.hasAttribute('get-options') && !this.hasAttribute('added-options')) {\n      let optionsDom = document.createRange().createContextualFragment($id4('GlobalCountry-country-results').innerHTML);\n      // console.log(optionsDom)\n      // Append the cloned content to the form\n      $4('form', this)?.lastElementChild?.appendChild(optionsDom);\n      this.setAttribute('added-options', '');\n      optionsDom = null;\n    }\n    if (this.hasAttribute('on-header')) {\n      this.disclosure?.addEventListener(dialogOpening, () => { this.header.preventHide = true }, { signal });\n      this.disclosure?.addEventListener(dialogOpen, () => { this.header.preventHide = true }, { signal });\n      this.disclosure?.addEventListener(dialogClosing, () => { this.header.preventHide = false }, { signal });\n    }\n\n    this.addEventListener('submit', (e) => {\n      this.disclosure?.close();\n      if (e.submitter.getAttribute('aria-selected') == 'true') return e.preventDefault();\n      document.dispatchEvent(new CustomEvent(loadingStart));\n    }, { once: true, signal });\n  }\n  disconnectedCallback() {\n    this.#controller?.abort();\n  }\n  get header() {\n    return getterGet(_localization_header, this);\n  }\n  get disclosure() {\n    return getterGet(_localization_disclosure, this);\n  }\n};\n\nvar _reset_btn_country = new WeakMap(),\n_search_country = new WeakMap(),\n_disclosure_country = new WeakMap(),\n_reset_filter_country = new WeakSet(), reset_filter_country_fn,\n_filter_countries = new WeakSet(), filter_countries_fn;\nclass CountryFilter extends HTMLElement {\n  #controller;\n  constructor() {\n    super();\n    getterAdd(_reset_filter_country, this);\n    getterAdd(_filter_countries, this);\n    getterAdd(_reset_btn_country, this, $4('[type=\"reset\"]', this));\n    getterAdd(_search_country, this, $4('[type=\"search\"]', this));\n    getterAdd(_disclosure_country, this, this.closest('.hdt-disclosure'));\n  }\n  get resetButton() {\n    return getterGet(_reset_btn_country, this);\n  }\n  get search() {\n    return getterGet(_search_country, this);\n  }\n  get disclosure() {\n    return getterGet(_disclosure_country, this);\n  }\n  normalizeString(str) {\n    return str.normalize('NFD').replace(/\\p{Diacritic}/gu, '').toLowerCase();\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    this.search?.addEventListener('keyup', getterRunFn(_filter_countries, this, filter_countries_fn).bind(this), { signal });\n    this.search?.addEventListener('keydown', (event) => { if (event.key === 'Escape') event.preventDefault() }, { signal });\n    this.resetButton?.addEventListener('click', getterRunFn(_reset_filter_country, this, reset_filter_country_fn).bind(this), { signal });\n    this.resetButton?.addEventListener('mousedown', (event) => event.preventDefault(), { signal });\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n};\nreset_filter_country_fn = function(event) {\n  event.stopPropagation();\n  this.search.value = '';\n  getterRunFn(_filter_countries, this, filter_countries_fn).call(this);\n  this.disclosure.style.minWidth = null;\n  //$4('.hdt-popover__body', this.disclosure).style.minHeight = null;\n  //this.search.focus();\n  this.closest('hdt-popover').updateTrap(this.search);\n};\nfilter_countries_fn = function(e) {\n   if (e && e.key === 'Tab') return;\n  this.disclosure.style.minWidth = this.disclosure.offsetWidth + 'px';\n  //$4('.hdt-popover__body', this.disclosure).style.minHeight = $4('.hdt-popover__inner', this.disclosure).offsetHeight + 'px';\n  const searchValue = this.normalizeString(this.search.value);\n  const allCountries = $$4('.hdt-disclosure__item', this.disclosure);\n  let visibleCountries = allCountries.length;\n  this.resetButton.classList.toggle('hidden', !searchValue);\n  this.resetButton.tabIndex = searchValue ? 0 : -1;\n\n  allCountries.forEach((item) => {\n    const countryName = this.normalizeString($4('[country]',item).textContent);\n    if (countryName.indexOf(searchValue) > -1) {\n      item.removeAttribute('hidden');\n      visibleCountries++;\n    } else {\n      item.setAttribute('hidden', '');\n      visibleCountries--;\n    }\n  });\n\n  $4('.hdt-country-no-results', this.disclosure)?.toggleAttribute('hidden', visibleCountries);\n  if (this.nextElementSibling) this.nextElementSibling.innerHTML = themeHDN.strings.countryCount.replace('[count]', visibleCountries);\n  $4('.hdt-disclosure__list', this.disclosure).scrollTop = 0;\n  this.closest('hdt-popover').updateTrap(this.search);\n  //this.closest('hdt-popover')?.updateFloating;\n};\ncustomElements.define(\"localization-form\", LocalizationForm);\ncustomElements.define(\"hdt-country-filter\", CountryFilter);\n\nvar _section_ids_modal = new WeakMap();\nclass LazyModal extends Modal {\n  constructor() {\n    super();\n    getterAdd(_section_ids_modal, this, this.getAttribute('section-id'));\n    this._inner = $4('.hdt-dialog-modal__inner', this);\n    this.#loadAlert();\n  }\n  async open(jump = false, urlQuick) {\n    const handle = this.btnOpening?.getAttribute(\"handle\");\n    if (!handle && !urlQuick) return;\n    if (handle) sessionStorage.setItem(this.#key, handle);\n    document.dispatchEvent(new CustomEvent(loadingStart, { bubbles: true }));\n    this.btnOpening?.setAttribute(\"aria-busy\", \"true\");\n    const responseSection = await (await fetchCache(urlQuick || `${window.Shopify.routes.root}products/${handle}?section_id=${getterGet(_section_ids_modal, this)}`)).text();\n    document.dispatchEvent(new CustomEvent(loadingEnd, { bubbles: true }));\n    this.btnOpening?.setAttribute(\"aria-busy\", \"false\");\n    const domElement = new DOMParser().parseFromString(responseSection, \"text/html\"),\n    newSectionModal = document.createRange().createContextualFragment(domElement.getElementById(`shopify-section-${getterGet(_section_ids_modal, this)}`).innerHTML);\n    // Update Product title\n    const newPrTitle = $4('[product-title]', newSectionModal),\n    prTitle = $4('[product-title]', this);\n    if (newPrTitle && prTitle) prTitle.textContent = newPrTitle.getAttribute('product-title');\n    // end Update Product title\n    const children = [...newSectionModal.children].filter(\n      (el) => !(el.matches('template.js-tmp'))\n    );\n    this._inner.replaceChildren(...children);\n    rteWrapTable(this);\n    accessibleLinks(this);\n    localeUrl(this);\n    Shopify?.PaymentButton?.init();\n    document.dispatchEvent(new CustomEvent(currencyUpdate));\n\n    requestAnimationFrame(() => {\n      super.open(jump);\n    })\n  }\n  async close(jump = false) {\n    await super.close(jump);\n    sessionStorage.removeItem(this.#key);\n    this._inner.innerHTML = \"\";\n  }\n  get btnOpening() {\n    return this.dialog?.btnOpening;\n  }\n  get #key() {\n    return 'theme:quickview:last';\n  }\n  #loadAlert() {\n    // Load to show alert contact form.\n    const params = new URLSearchParams(location.search),\n    id = params.get('contact[id]') || '';\n    if (!id.includes('QuickNotifyStock') && !id.includes('QuickAskForm')) return;\n    const handle = sessionStorage.getItem(this.#key);\n    if (!handle) return;\n    // ?variant=49513400795429\n    const url = `${window.Shopify.routes.root}products/${handle.includes('?') ? handle + '&' : handle + '?' }section_id=${getterGet(_section_ids_modal, this)}&contact[id]=${id}&form_type=contact`;\n    //console.log(url)\n    this.open(true, params.get('contact_posted') == 'true' ? `${url}&contact_posted=true` : url);\n  }\n};\nclass liveButton extends HTMLElement {\n  constructor() {\n    super();\n    //$id4(this.firstElementChild.getAttribute('aria-controls'))?.updateBtnOpen(this);\n  }\n  connectedCallback() {\n    $4('hdt-tmp-quick')?.dispatchEvent(new CustomEvent(\"theme:update:id\", { bubbles: false }));\n  }\n};\nclass TmpQuick extends HTMLElement {\n  constructor() {\n    super();\n    this.getIDTemp();\n    this.addEventListener('theme:update:id', () => this.getIDTemp());\n  }\n  //connectedCallback() {}\n  async getIDTemp() {\n    const $btn = $4('[aria-controls=\"hdt-quick-view-modal\"], [aria-controls=\"hdt-quick-add-modal\"]');\n    if (!$btn || this.hasID) return;\n    this.hasID = true;\n    this.removeEventListener('theme:update:id', () => this.getIDTemp());\n    let response = '',\n    idCache = \"themeQuick\" + window.Shopify.theme.id;\n    if (sessionStorage.getItem(idCache) && !Shopify.designMode ) {\n      response = sessionStorage.getItem(idCache);\n    } else {\n      const responseAsText = await (await fetch(`${window.Shopify.routes.root}products/${$btn.getAttribute('handle')}?view=only_config`, {priority: 'low'})).text();\n      const tmpDom = new DOMParser().parseFromString(responseAsText, \"text/html\");\n      $$4('#MainContent .hdt-section-lazy .js-tmp', tmpDom).forEach( (tmp)=> {\n        response += tmp.innerHTML;\n      });\n      sessionStorage.setItem(idCache, response)\n    }\n    this.insertAdjacentHTML(\"afterend\", response);\n    this.remove();\n  }\n}\n\ncustomElements.define('hdt-lazy-modal', LazyModal);\ncustomElements.define(\"wrapp-hdt-open-btn\", liveButton);\ncustomElements.define('hdt-tmp-quick', TmpQuick);\n\nvar _hotspot_reveal = new WeakSet(),\nhotspot_reveal_fn, hotspot_img = new WeakMap();\nclass hotspotReveal extends HTMLElement {\n  constructor() {\n    super();\n    if (!matchMediaQuery(\"motion\") || !this.hasAttribute('reveal-on-scroll') ) return;\n    getterAdd(_hotspot_reveal, this);\n    getterAdd(hotspot_img, this, $4('.hdt-media-wrapper > img', this));\n    inView(this, getterRunFn(_hotspot_reveal, this, hotspot_reveal_fn).bind(this), { margin: \"-50px 0px\" });\n  }\n};\nhotspot_reveal_fn = async function() {\n  await checkImagesLoaded(getterGet(hotspot_img, this));\n  animate(\n    $$4('.hdt-hotspot__btn', this),\n    { opacity: 1, transform: [\"rotate(180deg) scale(0)\", \"rotate(0deg) scale(1)\"] },\n    { duration: 0.35, delay: stagger(0.5), ease: [0.25, 0.1, 0.25, 1.0] }\n  )\n};\ncustomElements.define('hdt-hotspot', hotspotReveal);\n\n/**\n* 12. Accordion\n* -----------------------------------------------------------------------------\n*/\nvar _details = new WeakMap(),\n_summary = new WeakMap(),\n_content = new WeakMap(),\n_on_keydown = new WeakSet(), on_keydown_fn;\nclass Accordion extends HTMLElement {\n  #controller;\n  constructor() {\n    super();\n    getterAdd(_details, this, $4('details', this));\n    getterAdd(_summary, this, $4('summary', this));\n    getterAdd(_content, this, getterGet(_summary, this).nextElementSibling);\n    getterAdd(_on_keydown, this);\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    getterGet(_summary, this).addEventListener(\"click\", this._onSummaryClicked.bind(this), { signal });\n    getterGet(_summary, this).addEventListener(\"pick\", this._onSummaryClicked.bind(this), { signal });\n    getterGet(_details, this).addEventListener(\"keydown\", getterRunFn(_on_keydown, this, on_keydown_fn).bind(this), { signal });\n    if (Shopify.designMode) {\n      this.addEventListener(admEvts.select, () => this.toggle(), { signal });\n      this.addEventListener(admEvts.deselect, () => this.toggle2(), { signal });\n    }\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n  get open() {\n    return getterGet(_details, this).hasAttribute('open');\n  }\n  get _summary() {\n    return getterGet(_summary, this);\n  }\n  get _details() {\n    return getterGet(_details, this);\n  }\n  toggle(setOpen = true) {\n    if ( (setOpen && !this.open) || (!setOpen && this.open)) {\n      this._summary?.dispatchEvent(new CustomEvent(\"pick\", { detail: { offClick: true }}));\n    }\n  }\n  toggle2(){\n    this.toggle(false);\n  }\n  _onSummaryClicked(event) {\n    event.preventDefault();\n    if (!getterGet(_content, this)) return;\n    if (this.hasAttribute('only-click-icon') && !event.target.hasAttribute('accordion-icon') && event?.type == 'click' && this._summary.hasAttribute('data-url') ) {\n      return window.location.href = this._summary.getAttribute(\"data-url\");\n    }\n    if ( !this.hasAttribute('only-click-icon') && event?.type == 'click' && this._summary.hasAttribute(\"data-url\") && this.open ) {\n      return window.location.href = this._summary.getAttribute(\"data-url\");\n    }\n    this._details.style.overflow = \"hidden\";\n    this._summary.setAttribute('aria-expanded', `${!this.open}`);\n    if (this.open) {\n      animate([\n        [getterGet(_content, this), { opacity: 0 }, { duration: 0.15 }],\n        [this._details, { height: [`${this._details.clientHeight}px`, `${this._summary.clientHeight}px`] }, { duration: 0.25, at: \"<\", ease: [0.25, 0.1, 0.25, 1.0] }]\n      ]).then(() => {\n        this._details.style.height = null;\n        this._details.style.overflow = null;\n        this._details.removeAttribute('open');\n      });\n    } else {\n      this._details.setAttribute('open', '');\n      animate([\n        [this._details, { height: [`${this._summary.clientHeight}px`, `${this._details.scrollHeight}px`] }, { duration: 0.25, ease: [0.25, 0.1, 0.25, 1.0] }],\n        [getterGet(_content, this), { opacity: [0, 1], transform: [\"translateY(4px)\", `translateY(0)`] }, { duration: 0.15, at: \"-0.1\" }]\n      ]).then(() => {\n        this._details.style.height = null;\n        this._details.style.overflow = null;\n      });\n    }\n  }\n};\non_keydown_fn = function(e) {\n  if (e.key != 'Enter' || !e.target?.hasAttribute('accordion-icon')) return;\n  e.preventDefault();\n  e.stopPropagation();\n  e.target.click();\n};\ncustomElements.define(\"hdt-accordion\", Accordion);\n\nclass FooterMenu extends Accordion {\n  #resize;\n  constructor() {\n    super();\n    if (!matchMediaQuery(\"motion\")) return;\n    inView(this, () => {\n      animate(this, { opacity: [0, 1], transform: [\"translateY(20px)\", \"translateY(0)\"] }, { duration: 0.25, ease: [0.25, 0.1, 0.25, 1.0] });\n    }, { margin: \"-50px 0px\" });\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    let oldWidth = 0;\n    this.#resize = resize(this, (_,{ width }) => {\n      if (oldWidth == width) return;\n      oldWidth = width;\n      this.setAttribute('resized', '');\n      this._details.open = (!matchMediaQuery(\"mobile\") || this._summary.clientWidth == 0) || this.hasAttribute('open-default-mobile');\n      this._summary.setAttribute('aria-expanded', this._details.open);\n    });\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n    if (this.#resize) this.#resize();\n  }\n  toggle2(){\n    if (matchMediaQuery(\"mobile\")) this._details.removeAttribute('open')\n  }\n};\ncustomElements.define(\"hdt-footer-menu\", FooterMenu);\n\nvar _header_menus = new WeakMap(),\n_header_sticky = new WeakMap(),\n_escape = new WeakSet(), escape_fn,\n//_click_outside = new WeakSet(), click_outside_fn,\n// _click_outside_handler = new WeakMap(),\n// _escape_handler = new WeakMap(),\n_event = new WeakMap();\nclass HeaderMenu extends Accordion {\n  #controller;\n  constructor() {\n    super();\n    getterAdd(_header_menus, this, $$4('header-menu', this.closest('nav')));\n    getterAdd(_header_sticky, this, $4('.hdt-sticky-header'));\n    getterAdd(_escape, this);\n    //getterAdd(_click_outside, this);\n    // getterAdd(_escape_handler, this, getterRunFn(_escape, this, escape_fn).bind(this));\n    // getterAdd(_click_outside_handler, this, getterRunFn(_click_outside, this, click_outside_fn).bind(this));\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    // Only add hover functionality if device supports hover\n    if (matchMediaQuery(\"hover\") && this.getAttribute('event') === 'hover') {\n      this.setupHoverBehavior();\n    }\n    //const content = $4('.hdt-mega-menu__content, .hdt-dropdown__content', this._details);\n    // if (content) {\n    //   const clipPath = motionValue(\"polygon(0% 0%, 100% 0%, 100% 0%, 0% 0%)\");\n    //   styleEffect(content, { clipPath });\n    // }\n  }\n  get event() {\n    return getterGet(_event, this, !matchMediaQuery(\"hover\") ? \"click\" : this.getAttribute(\"event\"));\n  }\n  get hoverDelay() {\n    return 74;\n  }\n  get closeDelay() {\n    return 250;\n  }\n  get header() {\n    return getterGet(_header_sticky, this);\n  }\n  toggle(setOpen = true) {\n    if ( (setOpen && !this.open) || (!setOpen && this.open)) {\n      this._summary?.dispatchEvent(new CustomEvent(\"pick\", { detail: { offClick: true }}));\n    }\n  }\n  _onSummaryClicked(event) {\n    event.preventDefault();\n    //event.stopPropagation();\n    //event.stopImmediatePropagation\n    //console.log(this._details, document.activeElement);\n    if (event?.type == 'click' && this.open && this._summary.hasAttribute('data-url') ) {\n      return window.location.href = this._summary.getAttribute(\"data-url\");\n    }\n    const content = $4('.hdt-mega-menu__content, .hdt-dropdown__content', this._details);\n    if (this.header) this.header.preventHide = !this.open;\n    this._summary.setAttribute('aria-expanded', `${!this.open}`);\n    if (!this.open) {\n      this.#controller?.abort();\n      this.#controller = new AbortController();\n      const { signal } = this.#controller;\n      //document.addEventListener(\"click\", getterRunFn(_click_outside, this, click_outside_fn).bind(this), { signal });\n      this._details.addEventListener(\"keydown\", getterRunFn(_escape, this, escape_fn).bind(this), { signal });\n      this._details.addEventListener('focusout', this.#onFocusOut.bind(this), { signal });\n      // document.addEventListener(\"click\", getterGet(_click_outside_handler, this));\n      // this._details.addEventListener(\"keydown\", getterGet(_escape_handler, this));\n      getterGet(_header_menus, this).forEach( (el) => {\n        if (el !== this) {\n          el._details.open = false;\n          el._summary.setAttribute('aria-expanded', false);\n        }\n      });\n      this._details.open = true;\n      animate([\n        //[content, { clipPath: \"polygon(-1px -1px, 100% -1px, 100% 100%, -1px 100%)\", visibility: [\"hidden\", \"visible\"] }, { duration: 0.25, ease: [0.25, 0.1, 0.25, 1.0] }],\n        [content, { \"--inset-menu\": [\"0%\", \"100%\"], visibility: [\"hidden\", \"visible\"] }, { duration: 0.25, ease: [0.25, 0.1, 0.25, 1.0] }],\n        [$$4('[reveal], [can-reveal]', content),\n          { opacity: [0, 1], transform: [\"translate3d(-10px,10px,0)\", \"translate3d(0,0,0)\"]},\n          {\n            at: 0.19,\n            duration: 0.4,\n            ease: [0.25, 0.1, 0.25, 1.0],\n            delay: stagger(0.08, { startDelay: 0.1, ease: [0.25, 0.1, 0.25, 1.0], duration: 0.4 })\n          }\n        ]\n      ]);\n      // .then(() => {\n      //   animate(content, { clipPath: \"none\" }, { duration: 0 })\n      // })\n    } else {\n      //console.log(content)\n      this.#controller?.abort();\n      // document.removeEventListener(\"click\", getterGet(_click_outside_handler, this));\n      // this._details.removeEventListener(\"keydown\", getterGet(_escape_handler, this));\n      animate([\n        //[content, { clipPath: 'polygon(-1px -1px, 100% -1px, 100% 0%, -1px 0%)', visibility: [\"visible\", \"hidden\"] }, { duration: 0.25, ease: [0.25, 0.1, 0.25, 1.0] }]\n        [content, { \"--inset-menu\": [\"100%\", \"0%\"], visibility: [\"visible\", \"hidden\"] }, { duration: 0.25, ease: [0.25, 0.1, 0.25, 1.0] }]\n      ]).then(() => {\n        this._details.open = false;\n        this._summary.setAttribute('aria-expanded', 'false');\n      });\n    }\n  }\n  setupHoverBehavior() {\n    let openTimer = null,\n        closeTimer = null;\n    hover(this._details, () => {\n      clearTimeout(openTimer);\n      clearTimeout(closeTimer);\n      openTimer = setTimeout(() => {\n        this.toggle(true);\n      }, this.hoverDelay);\n      return () => {\n        clearTimeout(openTimer);\n        closeTimer = setTimeout(() => {\n          this.toggle(false);\n        }, this.closeDelay);\n      }\n    })\n  }\n  #onFocusOut() {\n    setTimeout(() => {\n      if (!this.contains(document.activeElement)) this.toggle(false);\n    });\n  }\n};\n// click_outside_fn = function(event) {\n//   if (this.event !== \"click\") return;\n//   if (!this.contains(event.target)) {\n//     this.toggle(false);\n//     this._summary.focus();\n//   }\n// };\nescape_fn = function(event) {\n  if (event.code === \"Escape\") {\n    const details = event.target.closest('details[open]');\n    if (details ) {\n      this.toggle(false);\n      this._summary.focus();\n      event.stopPropagation();\n    }\n  }\n};\n\ncustomElements.define(\"header-menu\", HeaderMenu);\n\n\n/**\n* 13. Tab player list\n* -----------------------------------------------------------------------------\n*/\n\nvar _tabs_player = new WeakMap(),\n_content_player = new WeakMap(),\n_image_player = new WeakMap(),\n_tabs_player_section = new WeakMap(),\n_tabs_player_color = new WeakMap(),\n_tabs_player_slelect = new WeakSet(), tabs_player_slelect_fn;\n\nclass TabPlayerList extends AutoplayElement {\n  #controller;\n  constructor() {\n    super();\n    this.currIndex = 0;\n\n    getterAdd(_tabs_player, this, $$4('button', this));\n    getterAdd(_content_player, this, $id4(this.getAttribute(\"aria-controls\")));\n    getterAdd(_image_player, this, $id4('imgs-' + this.getAttribute(\"aria-controls\")));\n    getterAdd(_tabs_player_slelect, this);\n    getterAdd(_tabs_player_section, this, this.closest(\".hdt-tab-block\") || this.closest(\".shopify-section\"));\n    getterAdd(_tabs_player_color, this, $4('[color-scheme]', getterGet(_tabs_player_section, this)));\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    super.connectedCallback();\n    if (matchMediaQuery(\"motion\") && this.hasAttribute('reveal-on-scroll')) {\n      inView(getterGet(_tabs_player_section, this), () => {\n        if (matchMediaQuery(\"motion\") && this.hasAttribute('reveal-on-scroll')) getterRunFn(_tabs_player_slelect, this, tabs_player_slelect_fn).call(this, 0, false);\n      }, { margin: \"444px\" });\n    }\n\n    getterGet(_tabs_player, this).forEach((tab, index) => {\n      tab.index = index;\n      tab.addEventListener('click', ()=> {\n        this.stop();\n        getterRunFn(_tabs_player_slelect, this, tabs_player_slelect_fn).call(this, index, !matchMediaQuery(\"motion\"));\n        this.play();\n      }, { signal });\n    });\n\n    if (Shopify.designMode) {\n      const dtAtrr = 'data-auto_switch',\n      autoRotate = $4(`[${dtAtrr}]`, getterGet(_tabs_player_section, this));\n      this.addEventListener(admEvts.select, (event) => {\n        if (this.interval) autoRotate?.setAttribute(dtAtrr, 'false');\n        this.pause();\n        getterRunFn(_tabs_player_slelect, this, tabs_player_slelect_fn).call(this, event.target.index)\n      }, { signal });\n      this.addEventListener(admEvts.deselect, ()=> {\n        if (this.interval) autoRotate?.setAttribute(dtAtrr, 'true');\n        this.resume();\n      }, { signal });\n    }\n\n  }\n  disconnectedCallback() {\n    super.disconnectedCallback();\n  }\n  get customPlayFn () {\n    return ()=> {\n      getterRunFn(_tabs_player_slelect, this, tabs_player_slelect_fn).call(this);\n    }\n  }\n  // get customPauseFn () {\n  //   return null;\n  // }\n  get nextIndex() {\n    return (this.currIndex + 1) % getterGet(_tabs_player, this).length;\n  }\n};\ntabs_player_slelect_fn = async function(index = null, instantly = false) {\n  //console.log('tabs_player_slelect_fn', index)\n  //console.log(index, getterGet(_tabs_player, this))\n  this.currIndex = index != null ? index : this.nextIndex;\n  const btn = getterGet(_tabs_player, this)[this.currIndex],\n  content = getterGet(_content_player, this)?.children[this.currIndex];\n  if (content) {\n    //getterGet(_tabs_player, this)[this.lastIndex]?.setAttribute('aria-current', 'false');\n    getterGet(_tabs_player, this).filter((btn) => btn.getAttribute('aria-current') == 'true').forEach((btn) => {\n      btn.setAttribute('aria-current', 'false');\n    });\n    btn?.setAttribute('aria-current', 'true');\n    if (btn?.getAttribute('color')) {\n      //console.log(getterGet(_tabs_player_section, this))\n      //console.log(getterGet(_tabs_player_color, this))\n      getterGet(_tabs_player_color, this)?.setAttribute('color-scheme', btn.getAttribute('color'));\n    }\n    [...getterGet(_content_player, this)?.children]?.filter((content) => !content.hasAttribute('hidden')).forEach((content) => {\n      content.setAttribute('hidden', '');\n    });\n    //getterGet(_content_player, this)?.children\n    //getterGet(_content_player, this)?.children[this.lastIndex]?.setAttribute('hidden', '');\n    content.removeAttribute('hidden');\n    const contentHasAssignImg = $id4(content.getAttribute(\"assign-img\")),\n    sequence = [],\n    assignImg = $4('img', contentHasAssignImg);\n    if (contentHasAssignImg) {\n      //getterGet(_image_player, this)?.children[this.lastIndex]?.setAttribute('hidden', '');\n      [...getterGet(_image_player, this)?.children]?.filter((img) => !img.hasAttribute('hidden')).forEach((img) => {\n        img.setAttribute('hidden', '');\n      });\n      contentHasAssignImg.removeAttribute('hidden');\n      sequence.push([assignImg, { opacity: [0, 1], transform: [\"scale(1.25) translateX(-50px)\", \"scale(1) translateX(0px)\"] }, { ease: [0.19, 1, 0.22, 1], duration: 0.8 }]);\n    }\n    sequence.push([\n      $$4('[reveal]', content),\n      { opacity: [0, 1], transform: animationContent['ani1'] },\n      {\n        duration: 0.8,\n        delay: stagger(0.1, { startDelay: 0.4, ease: [0.25, 0.1, 0.25, 1.0] }),\n        ease: [0, 0.87, 0.58, 1],\n        ...(assignImg && { at: \"<\" }) // add at: \"<\" if img is exists\n      }\n    ]);\n    //this.lastIndex = index;\n    if (this.hasAttribute('custom-effect')) return;\n    await checkImagesLoaded(assignImg);\n    const animation = animate(sequence);\n    //console.log(instantly)\n    if (instantly) {\n      animation.complete();\n    }\n  }\n};\ncustomElements.define('hdt-tab-player-list', TabPlayerList);\n\n/**\n* 14. Copy button and share button\n* -----------------------------------------------------------------------------\n*/\nvar _copy_to_clipboard, copy_to_clipboard_fn;\nclass CopyButton extends HTMLElement {\n  #controller;\n  constructor() {\n    super();\n    getterAdd(_copy_to_clipboard, this);\n    this.actionCopy = this.input?.hasAttribute('value') ? 'value' : 'textContent';\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    this.addEventListener(\"click\", getterRunFn(_copy_to_clipboard, this, copy_to_clipboard_fn).bind(this, this.input), { signal });\n    if (this.input && this.hasAttribute(\"get-doc-url\")) {\n      this.closest('hdt-popover')?.addEventListener(dialogOpening, () => {\n        this.input[this.actionCopy] = this.textCopy;\n      }, { signal });\n    }\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n  get input() {\n    return $id4(this.getAttribute(\"text-id\"));\n  }\n  get textCopy() {\n    return this.hasAttribute(\"get-doc-url\") ? document.location.href : (this.dataset.text || this.input[this.actionCopy] || \"\");\n  }\n};\n_copy_to_clipboard = new WeakSet();\ncopy_to_clipboard_fn = async function(input) {\n  if (!navigator.clipboard) return;\n  await navigator.clipboard.writeText(this.textCopy);\n  if (this.hasAttribute(\"data-success-message\")) {\n    input = input || this;\n    const originalText = input[this.actionCopy];\n    input[this.actionCopy] = this.getAttribute(\"data-success-message\");\n    setTimeout(() => {\n      input[this.actionCopy] = originalText;\n    }, 1500);\n  }\n};\n\n// https://dev.to/timhuang/a-simple-way-to-detect-if-browser-is-on-a-mobile-device-with-javascript-44j3\nclass ShareButton extends HTMLElement {\n  #controller;\n  constructor() {\n    super();\n    this.hidden = !navigator.share || window.matchMedia(\"screen and (pointer: fine)\").matches;\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const { signal } = this.#controller;\n    if (!this.hidden) this.addEventListener(\"click\", this.#share, { signal });\n    this.#form?.addEventListener(\"variant-change\", this.#updateVariantID, { signal });\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n  #share = () => {\n    navigator.share({\n      title: this.getAttribute(\"share-title\") || document.title,\n      url: this.getAttribute(\"share-url\") || document.location.href\n    });\n  }\n  get #form() {\n    return document.forms[this.getAttribute(\"form\")];\n  }\n  #updateVariantID = (event) => {\n    const newVariantId = event.detail.variant.id,\n    links = $$4('.hdt-share-button__links a', this.parentElement);\n\n    links.forEach(link => {\n      const updatedHref = link.getAttribute('href').replace(/variant=\\d+/, `variant=${newVariantId}`);\n      link.setAttribute('href', updatedHref);\n    });\n    const url =  $4('[share-url]', this.parentElement);\n    if (url) url.value =url.value.replace(/variant=\\d+/, `variant=${newVariantId}`);\n  }\n};\ncustomElements.define(\"wrapp-hdt-copy-btn\", CopyButton);\ncustomElements.define(\"wrapp-hdt-share-btn\", ShareButton);\n\n/**\n* 15. Lazy HTML\n* -----------------------------------------------------------------------------\n* https://web.dev/articles/fetch-priority\n*/\nclass LazyHTML extends HTMLElement {\n  #controller;\n  check = true;\n  constructor() {\n    super();\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    const options = {\n      priority: this.getAttribute('priority') || 'low',\n      signal: this.#controller.signal\n    },\n    url = this.url || this.getAttribute('url') || `${Shopify.routes.root}?section_id=${this.getAttribute('section-id')}`;\n    if (url) this.lazyFetch(url, options);\n  }\n  disconnectedCallback() {\n    if (this.check) this.#controller.abort();\n  }\n  async lazyFetch(url, options) {\n    const response = await fetchCache(url, '', options),\n          tempDiv  = new DOMParser().parseFromString(await response.text(), \"text/html\");\n    this.check = false;\n    const formLocal = $4('.shopify-localization-form', tempDiv);\n    if (formLocal) {\n      const language = $id4('localization_form_language');\n      $4('[name=\"return_to\"]', formLocal).value = language && language.return_to ? language.return_to.value : location.pathname;\n    }\n    this._replace(tempDiv);\n  }\n  _replace(tempDiv) {\n    this.replaceWith(...tempDiv.querySelector('.shopify-section').children);\n    this.dispatchEvent(new CustomEvent(\"lazyhtml:added\", { bubbles: true }));\n  }\n}\ncustomElements.define(\"hdt-lazy-html\", LazyHTML);\n\n/**\n* 16. Customer JS\n* -----------------------------------------------------------------------------\n*/\nclass ShowPassword extends HTMLElement {\n  #controller;\n  #input\n  constructor() {\n    super();\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    this.#input = document.getElementById(this.getAttribute('input-id'));\n    if (this.#input) this.addEventListener('click', this.toggleType.bind(this), {signal: this.#controller.signal});\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n  toggleType() {\n    this.#input.type = this.#input.type == 'text' ? 'password' : 'text';\n    this.toggleAttribute('display-password', this.#input.type == 'text');\n  }\n}\ncustomElements.define(\"hdt-show-password\", ShowPassword);\n\nclass CountryProvinceSelector extends HTMLElement {\n  #controller;\n  #countryEl;\n  #provinceEl;\n  #provinceContainer;\n  constructor() {\n    super();\n  }\n  connectedCallback() {\n    this.#controller = new AbortController();\n    this.#countryEl        = $4('[name=\"address[country]\"]', this);\n    this.#provinceEl       = $4('[name=\"address[province]\"]', this);\n    this.#provinceContainer = this.hasAttribute('hide-el') ? $4(this.getAttribute('hide-el'), this) : this.#provinceEl.parentElement;\n    this.#countryEl.addEventListener('change', this.#renderProvinces.bind(this), {signal: this.#controller.signal});\n\n    setTimeout(() => {\n      // initCountry\n      const countryVal = this.#countryEl.selectedIndex === 0 ? this.#countryEl.getAttribute('data-default') : this.#countryEl.value,\n          value = this.#provinceEl.selectedIndex === 0 ? this.#provinceEl.getAttribute('data-default') : this.#provinceEl.value;\n\n      if (countryVal) {\n        this.#setSelectorByValue(this.#countryEl, countryVal);\n        this.#countryEl.dispatchEvent(new Event(\"change\"));\n      }\n      // initProvince\n      if (value && this.#provinceEl.options.length > 0) {\n        this.#setSelectorByValue(this.#provinceEl, value);\n      }\n    }, 88);\n  }\n  disconnectedCallback() {\n    this.#controller.abort();\n  }\n  #setSelectorByValue(selector, value) {\n    selector.selectedIndex = Math.max(0, [...selector.options].findIndex((opt) => value == opt.textContent || value == opt.value));\n  }\n  #renderProvinces() {\n    const optSelected = this.#countryEl.options[this.#countryEl.selectedIndex],\n    provinces = JSON.parse(optSelected.getAttribute('data-provinces'));\n\n    this.#provinceContainer.hidden = provinces && provinces.length == 0;\n    this.#provinceEl.innerHTML = `${provinces.map(([value, label]) => `<option value=\"${value}\">${label}</option>`).join(\"\")}`;\n  }\n}\ncustomElements.define(\"hdt-province\", CountryProvinceSelector);\n\nclass CustomerAvatar extends HTMLElement {\n  constructor() {\n    super();\n  }\n  connectedCallback() {\n    document.addEventListener('storefront:signincompleted', this.handleStorefrontSignInCompleted.bind(this), { once: true });\n  }\n  handleStorefrontSignInCompleted(event) {\n    if (event?.detail?.avatar) $4('.hdt-icon', this)?.replaceWith(event.detail.avatar.cloneNode());\n  }\n}\ncustomElements.define('hdt-customer-avatar', CustomerAvatar);\n\nclass CircularText extends HTMLElement {\n  constructor() {\n    super();\n    const radius = parseInt(this.dataset.width)/2;\n    const text = this.#formartText(this.getAttribute('aria-label'));\n    const circle = $4(\".hdt-circular-text__circle\", this);\n    const chars = [...text];\n    const total = chars.length;\n    const step = 360 / total;\n\n    chars.forEach((char, i) => {\n      const el = document.createElement(\"span\");\n      el.setAttribute('aria-hidden', 'true');\n      if (char === '|') {\n        el.classList.add('hdt-large-dot')\n        el.textContent = '\u2022';\n      } else {\n        el.textContent = char;\n      }\n      const angle = i * step;\n      el.style.transform = `rotate(${angle}deg) translate(${radius}px) rotate(90deg)`;\n      circle.appendChild(el);\n    });\n  }\n  #formartText(text) {\n    let processedText = text.toUpperCase();\n    if (processedText.includes(' ')) {\n        processedText = processedText.replace(/ /g, ' | ') + ' | ';\n    }\n    return processedText;\n  }\n}\ncustomElements.define('hdt-circular-text', CircularText);\n\n// --------------------------\n// Inactive tab message\n// --------------------------\nclass inactiveTabMessage extends HTMLElement {\n  #intervalId = null;\n  #messageIndex = 0;\n  #originalTitle = document.title;\n  #messages = [];\n  #delay;\n  #onVisibilityChange;\n\n  constructor() {\n    super();\n    this.#onVisibilityChange = this.#handleVisibilityChange.bind(this);\n  }\n\n  connectedCallback() {\n    this.#parseConfig();\n    if (!this.#messages.length) return;\n    document.addEventListener('visibilitychange', this.#onVisibilityChange);\n  }\n\n  disconnectedCallback() {\n    this.#stop();\n    document.removeEventListener('visibilitychange', this.#onVisibilityChange);\n  }\n\n  #parseConfig() {\n    let config = {delay: 500, message: ''};\n    try {\n      config = JSON.parse(this.getAttribute('config') || '{}');\n      this.#delay = Number(config.delay);\n      this.#messages = config.message.split(';').map(m => m.trim()).filter(Boolean);\n    } catch {}\n  }\n\n  #handleVisibilityChange() {\n    if (document.hidden) {\n      this.#start();\n    } else {\n      this.#stop();\n      document.title = this.#originalTitle;\n    }\n  }\n\n  #start() {\n    if (this.#intervalId) return;\n    setTimeout(()=> this.#updateTitle(), 10);\n    this.#intervalId = setInterval(() => this.#updateTitle(), this.#delay);\n  }\n\n  #stop() {\n    if (!this.#intervalId) return;\n    clearInterval(this.#intervalId);\n    this.#intervalId = null;\n    this.#messageIndex = 0;\n  }\n\n  #updateTitle() {\n    document.title = this.#messages[this.#messageIndex];\n    this.#messageIndex = (this.#messageIndex + 1) % this.#messages.length;\n  }\n}\ncustomElements.define('hdt-inactive-tab', inactiveTabMessage);\n\nclass BackToTop extends DeclarativeShadowElement {\n  #scroll;\n  #offset;\n  constructor() {\n    super();\n  }\n  connectedCallback() {\n    super.connectedCallback();\n    this.#offset = Number(this.getAttribute('offset')) || 100;\n    let y = null,\n    clipPath = null;\n    if (this.#water) {\n      y = motionValue(\"0%\");\n      clipPath = motionValue(`inset(0% 0 0)`);\n      styleEffect(this.#water, { y });\n      styleEffect($4('.icon--inside', this.shadowRoot), { clipPath });\n    }\n    this.#scroll = scroll(progress => {\n      this.toggleAttribute('show', !this.shouldHidden && (document.documentElement.scrollTop || document.body.scrollTop) > this.#offset);\n      y?.set(`${100 * (1 - progress)}%`);\n      clipPath?.set(`inset(${100 * (1 - progress)}% 0 0)`);\n    });\n    $4('button', this.shadowRoot)?.addEventListener('click', () => window.scrollTo({ top: 0, behavior: 'smooth' }));\n  }\n\n  disconnectedCallback() {\n    this.#scroll();\n    $4('button', this.shadowRoot)?.removeEventListener('click', () => window.scrollTo({ top: 0, behavior: 'smooth' }));\n  }\n  get #water() {\n    return $4('.water', this.shadowRoot);\n  }\n}\ncustomElements.define('hdt-back-to-top', BackToTop);\n\nclass TooltipManager {\n  activeTooltip = null;\n  count = 0;\n\n  show(tooltip, btn, cart) {\n    if (this.activeTooltip === tooltip) return;\n    if (this.activeTooltip) {\n      this.activeTooltip.hidePopover();\n      this.activeTooltip.setAttribute('hidden', '');\n      --this.count;\n    }\n    ++this.count;\n    this.activeTooltip = tooltip;\n    tooltip.removeAttribute('hidden');\n    tooltip.showPopover();\n    cart?.setAttribute('tooltip-cart', '');\n    computePosition(btn, tooltip, {\n      placement: 'bottom',\n      middleware: [\n        offset(15),\n        shift({padding: 20}),\n        flip(),\n      ],\n    }).then(({x, y}) => {\n      animate([\n        [tooltip, { left: x, top: y  }, { duration: 0 }],\n        [tooltip, { y: [20, 0], opacity: [0, 1] }, { duration: 0.25, ease: \"easeOut\", opacity: { duration: 0.15 } }]\n      ]);\n    });\n  }\n\n  hide(tooltip, cart) {\n    if (this.activeTooltip !== tooltip) return;\n    this.activeTooltip = null;\n    --this.count;\n    if (this.count == 0) cart?.removeAttribute('tooltip-cart');\n    return animate(tooltip, { y: [0, 20], opacity: [1, 0] }, { duration: 0.25, ease: \"easeOut\", y: { duration: 0.2 } }).then(() => {\n      tooltip.hidePopover();\n      tooltip.setAttribute('hidden', '');\n      //console.log(this.count)\n    });\n  }\n}\nclass TooltipCart extends HTMLElement {\n  #hover;\n  #hover2;\n  #isHover = false;\n  #isBtnHover = false;\n  #timeOut;\n  connectedCallback() {\n    const btn = $4(`[tooltiptarget=\"${this.id}\"]`);\n    if (!btn || !\"showPopover\" in HTMLElement.prototype) return;\n\n    this.#hover = hover(btn, () => {\n      this.#isBtnHover = true;\n      //console.log('hover in 1: ', this.id)\n      clearTimeout(this.#timeOut);\n      this.#manager.show(this, btn, this.#cart);\n      return () => {\n        //console.log('hover out 1: ', this.id)\n        this.#isBtnHover = false;\n        this.#scheduleHide();\n      }\n    });\n    this.#hover2 = hover(this, () => {\n      this.#isHover = true;\n      clearTimeout(this.#timeOut);\n      //console.log('hover in 2: ', this.id)\n      return () => {\n        //console.log('hover out 2: ', this.id)\n        this.#isHover = false;\n        this.#scheduleHide();\n      }\n    });\n  }\n  #scheduleHide = () => {\n    clearTimeout(this.#timeOut);\n    this.#timeOut = setTimeout(() => {\n      if (!this.#isBtnHover && !this.#isHover) {\n        this.#manager.hide(this, this.#cart);\n      }\n    }, 150);\n}\n  get #cart() {\n    return this._cart ??= $4('[ref=\"hdt-cart\"]');\n  }\n  get #manager() {\n    return themeHDN.tooltipManager ??= new TooltipManager();\n  }\n  disconnectedCallback() {\n    this.#hover?.();\n    this.#hover2?.();\n    clearTimeout(this.#timeOut);\n  }\n}\ncustomElements.define('hdt-tooltip-cart', TooltipCart);\n\n//-----------------------------------------------------------------------------//\n// Volume pricing\nclass VolumePricing extends HTMLElement{\n  #abortController;\n  connectedCallback(){\n    this.#abortController = new AbortController();\n    $4('[ref=\"volumePricingToggle\"]', this)?.addEventListener('click', () => this.classList.toggle('hdt-volume-pricing--expanded'), { signal: this.#abortController.signal });\n  }\n  disconnectedCallback() {\n    this.#abortController?.abort();\n  }\n}\ncustomElements.define(\"hdt-volume-pricing\", VolumePricing);\n\n//Per price\nclass PricePerItemComponent extends HTMLElement {\n  #priceBreaks = [];\n  #quantityInput = null;\n  #abortController;\n\n  connectedCallback() {\n    this.#abortController = new AbortController();\n    this.#parsePriceBreaks();\n    this.#findQuantityInput();\n    const { signal } = this.#abortController;\n    this.#quantityInput?.addEventListener('input', () => this.#updatePriceDisplay(), { signal });\n    this.#quantityInput?.addEventListener('change', () => this.#updatePriceDisplay(), { signal });\n    //this.#updatePriceDisplay();\n  }\n  disconnectedCallback() {\n    this.#abortController?.abort();\n  }\n\n  #parsePriceBreaks() {\n    const { priceBreaks } = this.dataset;\n\n    if (priceBreaks) {\n      try {\n        const breaks = JSON.parse(priceBreaks);\n        for (const { quantity, price } of breaks) {\n          if (quantity && price) {\n            this.#priceBreaks.push({ quantity: parseInt(quantity), price });\n          }\n        }\n      } catch (error) {\n        console.warn('[price-per-item] Failed to parse data-price-breaks: ', error);\n      }\n    }\n\n    // Sort by quantity descending for efficient lookup\n    this.#priceBreaks.sort((a, b) => b.quantity - a.quantity);\n  }\n\n  /** * Find input[name=\"quantity\"] in <product-form> */\n  #findQuantityInput() {\n    const pr_quantity = this.closest('.hdt-product-form__quantity');\n    if (!pr_quantity) return;\n    this.#quantityInput = $4('input[name=\"quantity\"]', pr_quantity);\n\n    if (!this.#quantityInput) {\n      console.warn('[price-per-item] Could not find input[name=\"quantity\"] inside product quantity.');\n    }\n  }\n\n  /** * Gets the total quantity (cart + current input value)  */\n  #getCurrentQuantity() {\n    if (!this.#quantityInput) return 1;\n\n    const cartQuantity = parseInt(this.#quantityInput.dataset.cartQuantity || '0', 10) || 0;\n    const inputQuantity = parseInt(this.#quantityInput.value, 10) || 1;\n\n    return cartQuantity + inputQuantity;\n  }\n\n  // Price breaks are sorted descending, find first tier that quantity qualifies for\n  #updatePriceDisplay() {\n    if (!this.firstElementChild || this.#priceBreaks.length === 0 || !this.#quantityInput.checkValidity()) return;\n    const quantity = this.#getCurrentQuantity();\n    //console.log(quantity)\n    const matchedBreak = this.#priceBreaks.find((priceBreak) => quantity >= priceBreak.quantity) ?? this.#priceBreaks[this.#priceBreaks.length - 1];\n    this.firstElementChild.textContent = matchedBreak.price;\n  }\n\n}\ncustomElements.define('price-per-item', PricePerItemComponent);\n\n//-----------------------------------------------------------------------------//\n\n(() => {\n  /**\n   * Scrollbar Width\n   * Table, iframe wrapper\n   **/\n\n  /* Scrollbar Width */\n  // https://stackoverflow.com/questions/13382516/getting-scroll-bar-width-using-javascript\n  function updateScrollbarVar() {\n    if (!html.hasAttribute('scroll-lock')) html.style.setProperty('--scrollbar-w', `${Math.max(0, Math.min(20, window.innerWidth - html.clientWidth))}px`);\n  }\n  updateScrollbarVar();\n  window.addEventListener(\"resize\", throttle(updateScrollbarVar));\n\n  /* Table, iframe wrapper */\n  // Theme-specific selectors to make tables scrollable\n  rteWrapTable();\n  accessibleLinks();\n  localeUrl();\n\n  // ADDED: Kityfly and Nathan\n  // https://stackoverflow.com/questions/9038625/detect-if-device-is-ios\n  // https://stackoverflow.com/questions/2915833/how-to-check-browser-for-touchstart-support-using-js-jquery\n  // https://stackoverflow.com/questions/27173272/300ms-delay-removal-using-fastclick-js-vs-using-ontouchstart\n  // if (navigator.userAgent && /iPad|iPhone|iPod/.test(navigator.userAgent)) {\n  //   $4('meta[name=\"viewport\"]', document.head).content = \"width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0\";\n  // } else  if (\"ontouchend\" in document) {\n  //   let indexFixFristClick = 0;\n  //   const FixFristClick = () => { ++indexFixFristClick; if( indexFixFristClick > 1) document.removeEventListener('touchend', FixFristClick) };\n  //   document.addEventListener('touchend', FixFristClick);\n  // }\n  if (navigator.userAgent && /iPad|iPhone|iPod/.test(navigator.userAgent)) {\n    $4('meta[name=\"viewport\"]', document.head).content = \"width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0\";\n  }\n  if (\"ontouchend\" in document) {\n    let indexFixFristClick = 0;\n    const FixFristClick = () => { ++indexFixFristClick; if( indexFixFristClick > 1) document.removeEventListener('touchend', FixFristClick) };\n    document.addEventListener('touchend', FixFristClick);\n  }\n  const oneItemText = themeHDN?.strings?.cart?.items_added_to_cart_one || '1 item added to cart',\n  itemsText = themeHDN?.strings?.cart?.items_added_to_cart_other || '{{ count }} items added to cart';\n  document.addEventListener(cartUpdate, (event)=> {\n    if ( event.detail.source !== 'product-form' ) return;\n    const quantityAdded = event.detail?.formData?.quantity;\n    announce(quantityAdded == 1 ? oneItemText : itemsText.replace('{{ count }}', quantityAdded.toString()));\n    if ( !$4('hdt-cart-drawer') && themeHDN.settings.pageType != 'cart') {\n      const actionAfterATC = event.detail.actionAfterATC || themeHDN.settings.actionAfterATC;\n      if (actionAfterATC.indexOf('go_') > -1) window.location.href = actionAfterATC == 'go_custom_link' ? themeHDN.settings.cartCustomLink : `${Shopify.routes.root}${actionAfterATC == 'go_cart_page' ? 'cart' : 'checkout'}`;\n    }\n  });\n  document.addEventListener(cartError, (event)=> {\n    //console.log('cart error: ', event.detail);\n    announce(event.detail.message, true);\n  });\n  // if ( !$4('hdt-cart-drawer') && themeHDN.settings.pageType != 'cart') {\n  //   document.addEventListener(cartUpdate, (event) => {\n  //     if ( event.detail.source !== 'product-form' ) return;\n  //     const actionAfterATC = event.detail.actionAfterATC || themeHDN.settings.actionAfterATC;\n  //     if (actionAfterATC.indexOf('go_') > -1) window.location.href = actionAfterATC == 'go_custom_link' ? themeHDN.settings.cartCustomLink : `${Shopify.routes.root}${actionAfterATC == 'go_cart_page' ? 'cart' : 'checkout'}`;\n  //   });\n  // }\n  // Accessibility focus footer\n  const footer = $4('.hdt-section-footer');\n  if (footer && !matchMediaQuery(\"mobile\")) {\n    const footerHeading = $$4('summary.hdt-footer-block__heading', footer);\n    footerHeading.forEach((heading)=> heading.tabIndex = -1);\n    resize(({ width }) => {\n      footerHeading.forEach((heading)=> heading.tabIndex = width <= 767 ? 0 : -1);\n    })\n    if ($4('[sticky-footer]', footer) && !Shopify.designMode ) {\n      footer.addEventListener('focusin', () => {\n        window.scrollTo({\n          top: document.documentElement.scrollHeight,\n          behavior: 'smooth'\n        });\n      });\n    }\n  }\n\n  // Aura Estelle Magnet waitlist fallback.\n  // Keeps the 2027/undated waitlist CTA working while Shopify product HTML caches refresh.\n  (() => {\n    const path = window.location.pathname.replace(/\\/$/, '');\n    if (!path.includes('/products/')) return;\n\n    const handle = path.split('/products/')[1]?.split('/')[0];\n    const soldOutMagnetHandles = [\n      '2026-classic-daily-magnet-planner',\n      '2026-weekly-essential-magnet-planner'\n    ];\n    const verticalHandle = '2026-weekly-vertical-magnet-planner';\n    const appBlockAnchor = '#shopify-block-ATUsyMlRxWHEzaVhya__ordersify_restocked_alerts_bis_inline_button_LwgdaD';\n    const root = window.Shopify?.routes?.root || '/';\n    const dailyWaitlistUrl = `${root}products/2026-classic-daily-magnet-planner${appBlockAnchor}`;\n\n    function normalizeWaitlistLinks(url = appBlockAnchor) {\n      document.querySelectorAll('a[href=\"#ods-bis\"]').forEach((link) => {\n        link.setAttribute('href', url);\n      });\n    }\n\n    function createWaitlistTarget() {\n      if (document.getElementById('ods-bis')) return;\n\n      const block = document.createElement('div');\n      block.className = 'ae-magnet-launch__waitlist ae-magnet-launch__waitlist--fallback';\n      block.setAttribute('aria-labelledby', 'ae-magnet-waitlist-title');\n      block.style.cssText = 'grid-column:1/-1;background:#fff;border:1px solid rgba(18,18,18,.14);padding:14px 16px;';\n      block.innerHTML = [\n        '<strong id=\"ae-magnet-waitlist-title\" style=\"display:block;color:#232323;\">Join the 2027 / undated Magnet Planner waitlist</strong>',\n        '<p style=\"margin:5px 0 0;color:#5f5a54;line-height:1.55;\">The 2026 dated Magnet Planner sold out quickly and will not be restocked. Use the notification button here to join the 2027 / undated Magnet Planner product notification list.</p>',\n        '<span id=\"ods-bis\" class=\"ae-magnet-launch__waitlist-target\" aria-label=\"Magnet Planner product notification signup\" style=\"display:block;min-height:1px;\"></span>'\n      ].join('');\n\n      const banner = document.querySelector('.ae-magnet-launch__inner');\n      if (banner) {\n        banner.appendChild(block);\n        return;\n      }\n\n      const mainProduct = document.querySelector('.hdt-section-main--product, [data-type=\"description\"]');\n      if (mainProduct?.parentNode) {\n        mainProduct.parentNode.insertBefore(block, mainProduct);\n      }\n    }\n\n    function fixMagnetWaitlist() {\n      if (handle === verticalHandle) {\n        normalizeWaitlistLinks(dailyWaitlistUrl);\n        return;\n      }\n      if (soldOutMagnetHandles.includes(handle)) {\n        normalizeWaitlistLinks();\n        createWaitlistTarget();\n      }\n    }\n\n    if (document.readyState === 'loading') {\n      document.addEventListener('DOMContentLoaded', fixMagnetWaitlist, { once: true });\n    } else {\n      fixMagnetWaitlist();\n    }\n  })();\n\n})();\n\nexport {\n  getterAdd, getterGet, getterRunFn, Modal, Drawer, Popover,\n  isRTL,\n  currency,\n  rteWrapTable, accessibleLinks, localeUrl, Accordion\n}\n// var myWorker;\n// testWorker();\n// function testWorker() {\n//   if (typeof(Worker) !== \"undefined\") {\n//     if (typeof(myWorker) == \"undefined\") {\n//       myWorker = new Worker(new URL(\"webworkertest.js\", import.meta.url));\n//     }\n//     myWorker.onmessage = (event) => {\n//         console.log(event)\n//     }\n//   } else {\n//     document.getElementById(\"loopcount2\").innerHTML = \"Web Worker not supported\";\n//   }\n// }\n// function terminateWorker(){\n//   myWorker.terminate();\n//   myWorker = undefined;\n// }\n"],
  "mappings": "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",
  "names": ["num", "t", "e", "n", "r", "o", "i", "a", "c", "s", "l", "f", "p", "u", "h", "y", "v", "m", "b", "w", "O", "d", "index", "html", "type", "btn", "section", "discount", "content"]
}
